Php Symfony中的翻译文件不';不存在

Php Symfony中的翻译文件不';不存在,php,symfony,translation,Php,Symfony,Translation,我正在使用Symfony 3,我想把我应用程序中的一些东西翻译成西班牙语 我通过以下方式启用了翻译器: framework: #esi: ~ #translator: { fallbacks: ["%locale%"] } translator: { fallbacks: en } secret: "%secret%" router: resource: "%kernel.ro

我正在使用Symfony 3,我想把我应用程序中的一些东西翻译成西班牙语

我通过以下方式启用了翻译器:

framework:
#esi:             ~
#translator:      { fallbacks: ["%locale%"] }
translator:      { fallbacks: en }
secret:          "%secret%"
router:
    resource: "%kernel.root_dir%/config/routing.yml"
    strict_requirements: ~
form:            ~
csrf_protection: ~
validation:      { enable_annotations: true }
#serializer:      { enable_annotations: true }
templating:
    engines: ['twig']
#default_locale:  "%locale%"
default_locale:  es
trusted_hosts:   ~
trusted_proxies: ~
session:
默认情况下,名为“messages.fr.xlf”的文件应该出现在/app/resources/translation或/src/BundleName/resources/translation中,但在所有文件夹结构中搜索后,没有“messages.fr.xlf”文件,也没有“translation”文件夹,所以我决定自己创建它,我在所有应该存在这个文件的文件夹中都试过了

因此,我的“消息”文件包含以下代码:

<?xml version="1.0"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
    <file source-language="en" datatype="plaintext" original="file.ext">
        <body>
            <trans-unit id="1">
                <source>Next</source>
                <target>Siguiente</target>
            </trans-unit>
            <trans-unit id="2">
                <source>Previous</source>
                <target>Anterior</target>
            </trans-unit>
            <trans-unit id="3">
                <source>client</source>
                <target>Cliente</target>
            </trans-unit>
            <trans-unit id="4">
                <source>user</source>
                <target>Usuario</target>
            </trans-unit>
        </body>
    </file>
</xliff>

下一个
西吉恩特
以前的
先前的
客户
客户
用户
乌萨里奥
但它不起作用,symfony似乎找不到翻译文件,因为我遇到了以下错误:

“这些消息不适用于给定的区域设置,在回退区域设置中找不到。请将它们添加到翻译目录中,以避免Symfony输出未翻译的内容。”


邮件文件需要存在于app/Resources/translations文件夹中。文件应命名为[bundle].[language_code].[format]。假设您使用的是默认捆绑包“AppBundle”、西班牙语代码“es”和“xlf”格式,那么您的文件将命名为“AppBundle.es.xlf”

要测试翻译,请在控制器中创建一个操作以执行以下操作:

/**
 * @Route("/controller/test/{_locale}", name="cont_test")
 */
public function testAction(Request $request, $_locale="en")
{
    return $this->render('sometemplate.html.twig'));
}
<trans-unit id="form.name">
    <source>name</source>
    <target>Nombre</target>
form:
    name: 'Nombre'
    price: 'Precio'
{% trans_default_domain 'AppBundle' %}
Please provide your {{'form.name'|trans}}
Please provide your form.name
然后,您只需去测试您的翻译(请参阅下面的细枝模板)

关于您的示例,我注意到的下一件事是您的trans unit id不正确。您使用的id有点像自动生成的mysql id。Symfony手册建议对id使用关键字方法。例如,如果表单上有一个“name”字段,则可以使用关键字“form.name”。因此,您的消息文件如下所示:

/**
 * @Route("/controller/test/{_locale}", name="cont_test")
 */
public function testAction(Request $request, $_locale="en")
{
    return $this->render('sometemplate.html.twig'));
}
<trans-unit id="form.name">
    <source>name</source>
    <target>Nombre</target>
form:
    name: 'Nombre'
    price: 'Precio'
{% trans_default_domain 'AppBundle' %}
Please provide your {{'form.name'|trans}}
Please provide your form.name
在细枝模板中,您可以将id转换为以下内容:

/**
 * @Route("/controller/test/{_locale}", name="cont_test")
 */
public function testAction(Request $request, $_locale="en")
{
    return $this->render('sometemplate.html.twig'));
}
<trans-unit id="form.name">
    <source>name</source>
    <target>Nombre</target>
form:
    name: 'Nombre'
    price: 'Precio'
{% trans_default_domain 'AppBundle' %}
Please provide your {{'form.name'|trans}}
Please provide your form.name
注意,模板中的第一行告诉翻译人员,默认情况下,在返回之前,先在包中查找翻译

关于使用翻译的另一件事是,您需要确保为您默认使用的语言创建一个消息翻译文件(对于大多数语言,它是英语(en))。否则,当选择不同的语言时,您的id将被很好地翻译,但当返回到默认语言时,它们将不会被翻译。因此,如果您的默认语言是英语,我的示例模板会将我的句子翻译为如下内容:

/**
 * @Route("/controller/test/{_locale}", name="cont_test")
 */
public function testAction(Request $request, $_locale="en")
{
    return $this->render('sometemplate.html.twig'));
}
<trans-unit id="form.name">
    <source>name</source>
    <target>Nombre</target>
form:
    name: 'Nombre'
    price: 'Precio'
{% trans_default_domain 'AppBundle' %}
Please provide your {{'form.name'|trans}}
Please provide your form.name

希望这能有所帮助。

1)翻译文件夹的默认名称是translations,而不是translation。2) 如果你想要es语言环境,你需要创建一个messages.es.xlf文件而不是messages.fr.xlf,我只是说默认文件是“messages.fr.xlf”,我创建的文件是“messages.es.xlf”,文件夹名是“translations”。但是,如果您将
es
设置为默认区域设置
translator:{fallbacks:es}
,并将文件放入
/app/resources/translations
中,则会发生什么情况?是新安装的Symfony还是使用了第三方软件包?如果更改了翻译,也不要忘记清除缓存。我只使用Paginator软件包,我尝试过使用cachécleaning,但不起作用