如何将 Symfony 翻译的句子传递给 twig?
How to pass Symfony translated sentences to twig?
我正在使用 Twig、twig-bridge、symfony/form 和 symfony/translator v4。不是 Symfony 框架。我对翻译器感到困惑。在 {root}/translations/messages.fr.php 我写道:
// translations/messages.fr.php
return [
'Symfony is great' => "J'aime Symfony",
];
我在 {root} 的主脚本中写道:
setlocale(LC_ALL, 'fr_FR');
$translator = new Translator('fr');
$translated = $translator->trans('Symfony is great');
var_dump($translated); // Not translated!
我在 Twig 模板中写道:
<h1>{% trans %}Symfony is great{% endtrans %}</h1>
但这还没有翻译。我仍然得到英文版。我犯了什么错误?我是否应该将 {root}/translations/messages.fr.php 移动到其他地方,因为这是独立的而不是 symfony 框架?
如果您在没有框架的情况下使用 Symfony Translator,您需要手动配置翻译文件的路径,否则 Translator 将无法找到它们并且任何翻译尝试都会回退到原始字符串。
我自己从未这样做过,但根据 documentation,这应该适合你:
$translator->addLoader('php', new PhpFileLoader());
$translator->addResource('php', 'path/to/messages.fr.php', 'fr_FR');
我正在使用 Twig、twig-bridge、symfony/form 和 symfony/translator v4。不是 Symfony 框架。我对翻译器感到困惑。在 {root}/translations/messages.fr.php 我写道:
// translations/messages.fr.php
return [
'Symfony is great' => "J'aime Symfony",
];
我在 {root} 的主脚本中写道:
setlocale(LC_ALL, 'fr_FR');
$translator = new Translator('fr');
$translated = $translator->trans('Symfony is great');
var_dump($translated); // Not translated!
我在 Twig 模板中写道:
<h1>{% trans %}Symfony is great{% endtrans %}</h1>
但这还没有翻译。我仍然得到英文版。我犯了什么错误?我是否应该将 {root}/translations/messages.fr.php 移动到其他地方,因为这是独立的而不是 symfony 框架?
如果您在没有框架的情况下使用 Symfony Translator,您需要手动配置翻译文件的路径,否则 Translator 将无法找到它们并且任何翻译尝试都会回退到原始字符串。
我自己从未这样做过,但根据 documentation,这应该适合你:
$translator->addLoader('php', new PhpFileLoader());
$translator->addResource('php', 'path/to/messages.fr.php', 'fr_FR');