Странная проблема, переводы работают, если залогинены, если нет, то не работают в 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. Очистите кэш несколько / много раз / много / много раз:

    1-й подход (не работал):

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

    2-й подход (не работает):

    rm -rf /app/cache
    

    3-й подход (не работает): cd to app/cache и выберите каждый файл один за другим (используя mc из Linux) и удалите все их, включая каталоги, нажав F8

  6. Очистить кеш браузера и протестировать в Firefox / Chrome

Я проверил app/cache DIR под translations каталог и есть файл catalogue.es.php который содержит все переведенные строки, поэтому перевод работает.

Мой перевод определен в messages.es.yml файл в AppBundle/Resources/translations и это пример содержания:

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"}

2

Решение

messages это довольно распространенное ключевое слово для домена перевода, и я подозреваю, что конфликтующие пакеты переопределяют ваш файл перевода в определенных сценариях. Чтобы исправить это:

  1. Переименуй свой messages.es.yml подать в AppBundle.es.yml
  2. Используйте этот формат {{ 'registro.natural.panelTitulo'|trans({}, 'AppBundle') }} для любого использования ваших переводов, особенно при работе с файлами Twig вне AppBundle
  3. Очистить кеши
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]