我已经完成了以下清单:
- 创建了符合格式 domain.lang.loader 的翻译文件
- 清除缓存
- 检查是否在缓存文件夹中创建了语言目录
虽然在我的树枝模板文件中,
{{ 'message'|trans }}
从不翻译。
为了使翻译工作,我下一步该看哪里?
我正在使用的Doctrine Translatable Extension是否有可能产生某种冲突?
我已经完成了以下清单:
虽然在我的树枝模板文件中,
{{ 'message'|trans }}
从不翻译。
为了使翻译工作,我下一步该看哪里?
我正在使用的Doctrine Translatable Extension是否有可能产生某种冲突?
在 Symfony 3.0 中,我必须清除缓存:
php bin/console cache:clear
我看到你已经这样做了,也许它可以帮助像我这样的其他人。
您是否在配置文件中启用了翻译服务?
framework:
translator: { fallbacks: en }
无论您的翻译器是否启用,语言目录都会在您的缓存文件夹中创建。
您是否尝试在控制器中进行翻译?
$trans = $this->get('translator')->trans('message');
尝试指定域。如果您未指定域,则默认情况下它是一条消息。
{{ 'message'|trans({}, 'some_domain') }}
然后翻译可以在
例如some_domain.fr.yml
. 最后一步是配置您的语言环境。您可以从请求中获取当前语言环境$request->getLocale()
PS尝试rm -r app/cache
确保缓存被删除
我可以使用其中一种翻译,但不能使用另一种翻译,也不知道为什么。如果您也遇到翻译问题,请阅读此内容。
一、标准清单:
php app/console cache:clear
使用命令清除缓存。$this->getRequest()->setLocale('en');
Controller,也可以尝试$this->get('translator')->trans('Some message');
直接在Controller中使用。注意BOM
翻译文件中的内容。翻译 yml 文件的译者使用了 UTF8,这还可以,但他使用的编辑器在文件开头留下了 BOM。这很危险,可能是因为PHP 的 UTF8 BOM 错误,因为它在文件的第一部分添加了一些不可见的字符。
顺便说一句,调试您的翻译可能也很有帮助。
根据Symfony 翻译文档页面,如果您没有使用服务容器进行翻译,这些是简单的步骤:
启用和配置Symfony 的翻译服务。
YAML
framework:
translator: { fallbacks: [en] }
PHP
$container->loadFromExtension('framework', array(
'translator' => array('fallbacks' => array('en')),
));
通过将它们包装在对 Translator 的调用中来抽象字符串(即“消息”)(“基本翻译”)。
public function indexAction()
{
$translated = $this->get('translator')->trans('Symfony is great');
return new Response($translated);
}
为翻译应用程序中的每条消息的每个受支持的语言环境创建翻译资源/文件。
Symfony 在以下默认位置查找消息文件(即翻译):
app/Resources/translations
目录;app/Resources/<bundle name>/translations
目录;Resources/translations/
任何捆绑包内的目录。
翻译文件名
翻译文件的文件名也很重要:每个消息文件必须根据以下路径命名: domain。语言环境。加载程序(例如文件名:)navigation.en.xlf
:
域:将消息组织成组的可选方式(例如admin
,navigation
或默认messages
) - 请参阅使用消息域;
语言环境:翻译所针对的语言环境(例如 en_GB、en 等);loader:Symfony 应该如何加载和解析文件(例如 xlf、php、yml 等)。
加载器可以是任何已注册加载器的名称。默认情况下,Symfony 提供了许多加载器,包括:
xlf
:XLIFF文件;php
:PHP文件;yml
: YAML文件。
选择使用哪种装载机完全取决于您,而且是个人喜好问题。推荐的选项是xlf
用于翻译。
为请求确定、设置和管理用户的区域设置,并且可以选择 在用户的整个会话中。
清除缓存:
php bin/console c:c
翻译过程
为了实际翻译消息,Symfony 使用了一个简单的过程:
这帮助我让它工作,因为清除缓存也没有帮助。
Symfony 4.6.2:
试试这个命令来更新翻译文件:
php bin/console translation:update --dump-messages --force de
(来源:https ://symfony.com/doc/current/translation.html#configuration )
$this->get('translator')->setLocale('fr');
刚刚遇到同样的问题并在控制器操作中修复了它。{_locale}
我通过添加路由路径来修复它。
我已经可以回答你的两个问题了:
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 个独立的部分。