php - 奇怪的问题,如果登录的话翻译可以工作,如果没有登录则在 Symfony 2.5.6 中不起作用

标签 php symfony twig translation fosuserbundle

我带着 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. 多次/多次/多次清除缓存:

    第一种方法(不起作用):

    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 文件的相关部分,这些是我现在在应用程序上使用的 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 是翻译域中相当常见的关键字,我怀疑冲突的包在某些情况下会覆盖您的翻译文件。要解决此问题:

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

关于php - 奇怪的问题,如果登录的话翻译可以工作,如果没有登录则在 Symfony 2.5.6 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26814240/

相关文章:

php - 在客户端缓存 PHP 脚本输出

php - 按字母顺序排列阿拉伯名称 Mysql & php

php - 循环引用 Doctrine - Twig

php - 在嵌入式 Controller 中处理 Symfony 表单

php - Twig - 格式化日期

php - 在 mysql 中用 php targeting auto_increment 删除记录?

php - 如何通过命令行在服务器上运行php脚本

fosuserbundle - 是什么阻止了使用注入(inject)的 Symfony 服务 (FOSUserBundle) 重新散列密码

php - 升级到 Symfony 2.8 后出现 MappingException

php - 使用 EasyAdmin 3 中的预填充值重定向到 NEW Action