Я пришел сюда с этой странной проблемой, связанной с переводами 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
Очистите кэш несколько / много раз / много / много раз:
1-й подход (не работал):
php app/console cache:clear
php app/console cache:warmup
2-й подход (не работает):
rm -rf /app/cache
3-й подход (не работает): cd to app/cache
и выберите каждый файл один за другим (используя mc из Linux) и удалите все их, включая каталоги, нажав F8
Очистить кеш браузера и протестировать в 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"}
messages
это довольно распространенное ключевое слово для домена перевода, и я подозреваю, что конфликтующие пакеты переопределяют ваш файл перевода в определенных сценариях. Чтобы исправить это:
messages.es.yml
подать в AppBundle.es.yml
{{ 'registro.natural.panelTitulo'|trans({}, 'AppBundle') }}
для любого использования ваших переводов, особенно при работе с файлами Twig вне AppBundle
Других решений пока нет …