我带着这个关于Symfony2翻译的奇怪问题来到这里,因为我不知道还能做什么。正如标题所说,"如果用户登录,翻译就有效,否则就无效。以下是我所做的:
-
在
config.yml
:设置默认语言环境和翻译器framework: translator: { fallback: "%locale%" } default_locale: "%locale%"
-
在
parameters.yml
设置区域设置值locale: es
-
在基本模板上设置语言:
<html lang="{{ app.request.locale }}">
-
在发生问题的Twig模板中加载页面后检查区域设置:
{{ app.request.locale }} // returns "es" it's right
-
多次/多次/manyyyyyyyy次清除缓存:
第一种方法(无效):
php app/console cache:clear php app/console cache:warmup
第二种方法(无效):
rm -rf /app/cache
第三种方法(不起作用):cd到
app/cache
,逐个选择每个文件(使用Linux中的mc),然后按F8 删除所有文件,包括目录 -
清除浏览器缓存并在Firefox/Chrome 中进行测试
我检查了translations
目录下的app/cache
目录,有一个文件catalogue.es.php
,其中包含所有翻译的字符串,所以翻译正在进行。
我的翻译是在AppBundle/Resources/translations
的messages.es.yml
文件中定义的,这是内容的一个示例:
registro:
natural:
panelTitulo: Datos del Usuario
columnas:
tipo_usuario: Tipo de Usuario
campos:
tipoTramite: Tipo de Trámite
在我看来,这就是我访问这些翻译的方式:
{{'registro.natural.panelTitulo'|trans}}
{{'registro.columnas.tipo_usuario'|trans}}
但是,当用户没有登录时,这是不起作用的,但是,如果我登录并尝试这个翻译:
{{'campos.tipoTramite'|trans}}
{{ 'registro.columnas.tipo_usuario'|trans }}
两者都有效(我使用FOSUserBundle进行用户管理,但翻译不属于任何域,只是在我之前提到的目录中),所以我完全迷失了方向,因为我不知道还能做什么。有人能给我一些建议吗?只有当用户登录应用程序时,翻译才能工作?我做错了什么?这怎么可能?
额外信息
这是我的composer.json
文件的相关部分,这些都是我现在在应用程序上使用的捆绑包,有问题吗?
"require": {
"php": ">=5.3.3",
"symfony/symfony": "2.5.*",
"doctrine/orm": "~2.2,>=2.2.3",
"doctrine/doctrine-bundle": "~1.2",
"twig/extensions": "~1.0",
"symfony/assetic-bundle": "~2.3",
"symfony/swiftmailer-bundle": "~2.3",
"symfony/monolog-bundle": "~2.4",
"sensio/distribution-bundle": "~3.0",
"sensio/framework-extra-bundle": "3.0.*@dev",
"friendsofsymfony/user-bundle": "~2.0@dev",
"friendsofsymfony/jsrouting-bundle": "2.0.*@dev",
"friendsofsymfony/rest-bundle": "1.5.*@dev",
"jms/serializer-bundle": "0.13.*@dev",
"jms/di-extra-bundle": "1.4.*@dev",
"jms/security-extra-bundle": "dev-master",
"knplabs/knp-paginator-bundle": "2.4.*@dev",
"knplabs/knp-menu": "2.0.*@dev",
"knplabs/knp-menu-bundle": "2.0.*@dev",
"stof/doctrine-extensions-bundle": "1.2.*@dev",
"misd/phone-number-bundle": "~1.0",
"raulfraile/ladybug-bundle": "~1.0",
"h4cc/alice-fixtures-bundle": "dev-master",
"oneup/uploader-bundle": "dev-master",
"willdurand/js-translation-bundle": "2.1.*@dev",
"vich/uploader-bundle": "1.0.*@dev"
}
messages
是翻译域的一个相当常见的关键字,我怀疑在某些情况下,冲突的捆绑包会覆盖您的翻译文件。要解决此问题:
- 将
messages.es.yml
文件重命名为AppBundle.es.yml
- 使用此格式
{{ 'registro.natural.panelTitulo'|trans({}, 'AppBundle') }}
进行捆绑翻译的所有使用,尤其是在使用AppBundle
之外的Twig文件时 - 清除缓存