我做了以下清单:
虽然在我的树枝模板文件中,
{{ 'message'|trans }}
从不翻译。
为了使翻译有效,我可以在哪里查看?
我使用的 Doctrine Translatable Extension 是否有可能产生某种冲突?
答案 0 :(得分:22)
您是否在配置文件中启用了转换程序服务?
framework:
translator: { fallback: en }
无论您的翻译是否已启用,都会在缓存文件夹中创建语言目录。
您是否尝试在控制器中进行翻译?
$translatedMessage = $this->get('translator')->trans('message');
答案 1 :(得分:20)
在Symfony 3.0中,我必须清除缓存:
php bin/console cache:clear
我看到你已经这样做了,也许它对我这样的其他人有帮助。
答案 2 :(得分:14)
尝试specify domain。如果您没有默认指定域,则为消息。
{{ 'message'|trans({}, 'some_domain') }}
然后可以在
中找到翻译例如some_domain.fr.yml
。最后一步是配置您的语言环境。您可以使用$request->getLocale()
P.S。尝试rm -r app/cache
以确保删除缓存
答案 3 :(得分:7)
我可以使用其中一种翻译,但不能使用其他翻译,并且不知道为什么。如果您也有翻译问题,请阅读此内容。
首先,标准清单:
php app/console cache:clear
命令清除缓存。$this->getRequest()->setLocale('en');
,也可以尝试直接在控制器中使用$this->get('translator')->trans('Some message');
。在翻译文件中留意BOM
。翻译yml文件的翻译人员使用UTF8,这是好的,但编辑他在文件的开头使用了留空BOM。这很危险,可能是因为PHP's UTF8 BOM bug,因为它会在文件的第一部分添加几个不可见的字符。
顺便说一下,debugging your translations也可能非常有帮助。
答案 4 :(得分:6)
根据Symfony Translations Documentation page,如果您没有使用Service Container进行翻译,请执行以下步骤:
Enable and configure Symfony的翻译服务。
YAML
framework:
translator: { fallbacks: [en] }
PHP
$container->loadFromExtension('framework', array(
'translator' => array('fallbacks' => array('en')),
));
抽象字符串(即“消息”)通过将它们包装在对转换程序(“Basic Translation”)的调用中。
public function indexAction()
{
$translated = $this->get('translator')->trans('Symfony is great');
return new Response($translated);
}
Create translation resources/files用于翻译应用程序中每条消息的每个受支持的语言环境。
Symfony在以下默认位置查找消息文件(即翻译):
app/Resources/translations
目录; app/Resources/<bundle name>/translations
目录; 任何捆绑包内的Resources/translations/
目录。
翻译文件名
翻译文件的文件名也很重要:每个消息文件必须按照以下路径命名:域。区域设置。装载程序(例如文件名:navigation.en.xlf
):
域:将消息组织成组的可选方式(例如admin
,navigation
或默认messages
) - 请参阅Using Message Domains;
locale:翻译所针对的语言环境(例如en_GB,en等); loader:Symfony如何加载和解析文件(例如xlf,php,yml等)。
加载程序可以是任何已注册加载程序的名称。默认情况下,Symfony提供了许多加载器,包括:
xlf
: XLIFF 文件; php
: PHP 文件; yml
: YAML 文件。
选择使用哪种装载机完全取决于您,这是一个品味问题。 建议的选项是使用xlf
进行翻译。
为请求确定set and manage the user's locale,可选 on the user's entire session。
清除缓存:
php bin/console c:c
翻译流程
要实际翻译消息,Symfony使用一个简单的过程:
答案 5 :(得分:0)
我已经可以回答你的两个问题了:
1:你可以看看
https://github.com/symfony/symfony/blob/master/src/Symfony/Bridge/Twig/Extension/TranslationExtension.php#L97 https://github.com/symfony/symfony/blob/master/src/Symfony/Bundle/FrameworkBundle/Translation/Translator.php https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Translation/Translator.php#L174
2:如果你在谈论gedmo教义扩展或Knplabs DoctrineBehaviors,不,它与symfonys的翻译器没有任何冲突。这些是2个独立的部分。
答案 6 :(得分:0)
刚刚遇到同样的问题,并在控制器操作中通过$this->get('translator')->setLocale('fr');
修复了它。我通过在路径路径中添加{_locale}
来修复它。
答案 7 :(得分:0)
这有助于我使其正常工作,因为清除缓存也无济于事。
Symfony 4.6.2:
尝试以下命令来更新翻译文件:
php bin/console translation:update --dump-messages --force de
(来源:https://symfony.com/doc/current/translation.html#configuration)