首页 > 解决方案 > Symfony 4 不会翻译并且总是显示英文默认

问题描述

我正在运行 Symfony 4 并使用

composer require symfony/translation

我在以下位置创建了两个文件/translations

使用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

我在这里想念什么?

标签: phpsymfonytwigtranslation

解决方案


来自官方文档

要设置用户的语言环境,您可能需要创建一个自定义事件侦听器,以便在系统的任何其他部分(即翻译器)需要它之前设置它:

然后(这是解释您的代码行为的部分)

在控制器中使用 $request->setLocale() 设置区域设置为时已晚,无法影响翻译器。通过侦听器(如上)、URL(见下文)设置语言环境或直接在翻译服务上调用 setLocale()。


推荐阅读