奇怪的问题是,如果登录,翻译就可以工作,如果没有,翻译就不能工作;我不能在Symfony 2.5.6中工作


Weird issue, translations works if logged in, if not then didn't work in Symfony 2.5.6

我带着这个关于Symfony2翻译的奇怪问题来到这里,因为我不知道还能做什么。正如标题所说,"如果用户登录,翻译就有效,否则就无效。以下是我所做的:

  1. config.yml:设置默认语言环境和翻译器

    framework:
        translator:      { fallback: "%locale%" }
        default_locale:  "%locale%"
    
  2. parameters.yml 设置区域设置值

    locale: es
    
  3. 在基本模板上设置语言:

    <html lang="{{ app.request.locale }}"> 
    
  4. 在发生问题的Twig模板中加载页面后检查区域设置:

    {{ app.request.locale }} // returns "es" it's right
    
  5. 多次/多次/manyyyyyyyy次清除缓存:

    第一种方法(无效):

    php app/console cache:clear
    php app/console cache:warmup
    

    第二种方法(无效):

    rm -rf /app/cache
    

    第三种方法(不起作用):cd到app/cache,逐个选择每个文件(使用Linux中的mc),然后按F8 删除所有文件,包括目录

  6. 清除浏览器缓存并在Firefox/Chrome 中进行测试

我检查了translations目录下的app/cache目录,有一个文件catalogue.es.php,其中包含所有翻译的字符串,所以翻译正在进行。

我的翻译是在AppBundle/Resources/translationsmessages.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是翻译域的一个相当常见的关键字,我怀疑在某些情况下,冲突的捆绑包会覆盖您的翻译文件。要解决此问题:

  1. messages.es.yml文件重命名为AppBundle.es.yml
  2. 使用此格式{{ 'registro.natural.panelTitulo'|trans({}, 'AppBundle') }}进行捆绑翻译的所有使用,尤其是在使用AppBundle之外的Twig文件时
  3. 清除缓存