php - Symfony 4 不会翻译并且总是显示英文默认
问题描述
我正在运行 Symfony 4 并使用
composer require symfony/translation
我在以下位置创建了两个文件/translations
:
- 消息.en.xlf
- 消息.es.xlf
使用php bin/console debug:translation es
我也得到了正确的结果:
----------- ---------- ------ ---------------------- -------------------------------
State Domain Id Message Preview (es) Fallback Message Preview (en)
----------- ---------- ------ ---------------------- -------------------------------
messages test Value ES Value EN
----------- ---------- ------ ---------------------- -------------------------------
条目如下所示:
<trans-unit id="test">
<source>test</source>
<target>Value EN</target>
</trans-unit>
和这个:
<trans-unit id="test">
<source>test</source>
<target>Value ES</target>
</trans-unit>
在我的控制器中,我设置了语言环境,这似乎工作正常,并且在 Twig 模板中也有表示:
public function index(Request $request, TranslatorInterface $translator)
{
$request->setLocale('es');
// prints 'es'
print $request->getLocale();
return $this->render();
}
在树枝中:
{# prints 'es' #}
{{ app.request.locale }}
但是,当我现在运行时:
print $translator->trans('test');
或者:
{{ 'test'|trans }}
我总是得到Value EN
,这似乎不正确Value ES
。
我正在运行 Symfony 4.0 并多次清除缓存 - 甚至删除了整个文件夹。
translations.yml
看起来像这样:
framework:
default_locale: '%locale%'
translator:
paths:
- '%kernel.project_dir%/translations'
fallbacks:
- '%locale%'
services.yml
看起来像这样:
parameters:
locale: 'en'
locales: en|de|es
我在这里想念什么?
解决方案
来自官方文档
要设置用户的语言环境,您可能需要创建一个自定义事件侦听器,以便在系统的任何其他部分(即翻译器)需要它之前设置它:
然后(这是解释您的代码行为的部分)
在控制器中使用 $request->setLocale() 设置区域设置为时已晚,无法影响翻译器。通过侦听器(如上)、URL(见下文)设置语言环境或直接在翻译服务上调用 setLocale()。
推荐阅读
- assembly - la 和 addi 在 MIPS asm 中复制寄存器的区别
- json - 如何在 Swift 中解析多级 json 结构?
- java - Imageview 卡在 android 布局的顶部
- python - 在 SQL 中迭代
- java - 从嵌套 JSON 到平面 JSON 的 JAVA JSON 动态转换
- database-design - 识别数据库规范化中的 unf、1nf、2nf、3nf
- shiny - 如何正确使用.Rhiny中的updateselection()
- symfony - 最后输入的用户未捕获
- c# - 如果在 C# 中验证失败,如何使用 RegularExpressionAttribute 通过抛出异常来验证字符串属性?
- tensorflow - 如何在张量流中训练线性回归模型时确定分类特征中值的相应权重?