我带着 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
多次/多次/多次清除缓存:
第一种方法(不起作用):
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
文件的相关部分,这些是我现在在应用程序上使用的 bundle ,有任何问题吗?
"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') }}
进行 bundle 翻译的所有使用,尤其是在使用外部的 Twig 文件时应用程序包
- 清除缓存
关于php - 奇怪的问题,如果登录的话翻译可以工作,如果没有登录则在 Symfony 2.5.6 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26814240/