Hi guys, I see in doc that is possible to do this:
$translation = $grav[‘language’]->translate([‘HEADER.MAIN_TEXT’], ‘fr’);
now i try to do the same in twig template, I need it to send a translated e-mail (not all, only table header for example) based on user language preference.
I try to do it with twig function {{ t("ORDER_CODE", lang) }}
but it seems not work.
It is possible or I have to do it by php?
PS: I have my own php function to prepare e-mail message so I pass lang variable on twig processTemplate
Thank you
Hi guys, really no one can help me with this?
For clarification, I only need to translate based on user language settings, i try also the “tu” but it not work, and I don’t understand why.
Try with this learn.getgrav.org/content/multi-language#translation-via-twig
and learn.getgrav.org/content/multi-language#translations-with-variables
@iusvar, Thank you for your reply, I’ve read the documentation but nfortunately don’t help.
If you do $grav[‘language’]->translate([‘HEADER.MAIN_TEXT’], ‘fr’);
in php and then pass the result to twig it work but if you try to do it whit twig function {{ t("HEADER.MAIN_TEXT", ‘fr’) }}
it don’t do anything.
That’s my problem.
So… am I do something wrong ?
Thank’s
That I know in Twig can use the filter |t, so {{ "HEADER.MAIN_TEXT"|t }}
that translates into the current language. There are no other parameters in the file /system/src/Grav/Common/Twig/TwigExtension.php
at line 92, to indicate a language of your choice.
However it would be great if it was possible.
I’ ve read the same file end I think the problem is at line 593 , if you look the function
public function translate()
{
return $this->grav[‘language’]->translate(func_get_args());
}
It don’t accept parameters but func_get_args()
from php manual:
Blockquote
Returns an array comprising a function’s argument list
So, it’s the same function you can use in php.
I think it’s a little bug because in the doc you can se this example {{ "SIMPLE_TEXT"|t(12, "London Zoo") }}
but how can it works if the function don’t accept parameters??
Although the example of the “12 monkeys in the London Zoo” works, in fact, making some evidence I think you are right, this must be a limited mistake in choosing the language!
I’m investigating on it, if you look at line 373 of /system/src/Grav/Common/Language.php you can find the function translate
Translate
public function translate($args, array $languages = null, $array_support = false, $html_out = false)
It accept languages as array, so we only need to know how to pass that information form twig filter or function.
As you said, it’s a litte mistake!!
I had read, too, you are right … we just have to wait on Monday
… update
Well, by doing some tests I resolved my way.
The problem is in /system/src/Grav/Common/Language.php: only $args is considered due to func_get_args. As it is built now only the first argument is considered
Then, after line 376 I entered to take a possible second argument
if (is_array($args)) {
$languages = array_shift($args);
}
In Twig, using {{ t("HEADER.MAIN_TEXT", ‘fr’) }}
now works
@iusvar you are great!!!
If you have made an improvement, please consider creating a pull request on the core Grav repo: https://github.com/getgrav/grav/