"require": { "php": ">=5.3.3", "symfony/symfony": "2.2.*", "doctrine/orm": ">=2.2.3,<2.4-dev", "doctrine/doctrine-bundle": "1.0.*", "twig/extensions": "1.0.*@dev", "symfony/assetic-bundle": "2.1.*", "symfony/swiftmailer-bundle": "2.1.*", "symfony/monolog-bundle": "2.1.*", "sensio/distribution-bundle": "2.1.*", "sensio/framework-extra-bundle": "2.1.*", "sensio/generator-bundle": "2.1.*", "jms/security-extra-bundle": "1.2.*", "jms/di-extra-bundle": "1.1.*", "kriswallsmith/assetic": "1.1.*@dev", "doctrine/migrations": "*", "doctrine/doctrine-migrations-bundle": "dev-master", "doctrine/doctrine-fixtures-bundle": "dev-master", "mysql-workbench-schema-exporter/mysql-workbench-schema-exporter": "*", "gedmo/doctrine-extensions": "2.3.*", "jms/i18n-routing-bundle": "dev-master" }
Mój composer (po zmianie):
"require": { "php": ">=5.3.3", "symfony/symfony": "2.2.*", "doctrine/orm": "~2.2,>=2.2.3", "doctrine/doctrine-bundle": "1.2.*", "twig/extensions": "1.0.*@dev", "symfony/assetic-bundle": "2.1.*", "symfony/swiftmailer-bundle": "2.2.*", "symfony/monolog-bundle": "2.2.*", "sensio/distribution-bundle": "2.2.*", "sensio/framework-extra-bundle": "2.2.*", "sensio/generator-bundle": "2.2.*", "jms/security-extra-bundle": "1.4.*", "jms/di-extra-bundle": "1.3.*", "kriswallsmith/assetic": "1.1.*@dev", "doctrine/migrations": "*", "doctrine/doctrine-migrations-bundle": "dev-master", "doctrine/doctrine-fixtures-bundle": "dev-master", "mysql-workbench-schema-exporter/mysql-workbench-schema-exporter": "dev-master", "gedmo/doctrine-extensions": "2.3.*", "jms/translation-bundle": "dev-master", "jms/i18n-routing-bundle": "dev-master" }
W config.yml (korzystam z wielojęzyczności):
jms_i18n_routing: default_locale: pl locales: [pl, en] strategy: prefix_except_default
Chociaż podejrzewam, że ten element nie ma znaczenia w tym problemie.
Ogólnie pojawia się dziwne zachowanie dla translacji. Coś jest nie tak.
Przykład:
{% trans %}homepage{% endtrans %}
Mam dwa pliki w katalogu translations:
- messages.en.yml
homepage: 'Homepage'
- messages.pl.yml
homepage: 'Strona główna'
Zwraca mi wersję po polsku chociaż jak sprawdzam {{ app.request.locale }} to wersja jest 'en'. Wygląda to tak jakby w samym twig element locale nie był brany pod uwagę.
Wcześniej wszystko działało...
Problem pojawił się po aktualizacji symfony 2.1 na 2.2...ehh....
Jeszcze daje config.yml:
framework: #esi: ~ translator: { fallback: "%locale%" } secret: "%secret%" router: resource: "%kernel.root_dir%/config/routing.yml" strict_requirements: "%kernel.debug%" form: true csrf_protection: true validation: { enable_annotations: true } templating: { engines: ['twig'] } #assets_version: SomeVersionScheme default_locale: "%locale%" trust_proxy_headers: false # Whether or not the Request object should trust proxy headers (X_FORWARDED_FOR/HTTP_CLIENT_IP) session: ~ # Twig Configuration twig: debug: "%kernel.debug%" strict_variables: "%kernel.debug%"
Jestem już bliżej problemu

ROZWIĄZANIE (dla symfony 2.2 - mam nadzieję, że w kolejnych wersjach zostanie to poprawione z automatu):
Pod wielu godzinach rozwiązanie znalezione. Okazało się, że to jest błąd subrequestów:
https://github.com/symfony/symfony/issues/7063
Należy zrobić subscribera, który będzie pobierał locale z głównego request i umożliwiał odczyt w subrequestach:
<?php namespace Lib\EventSubscriber; use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpKernel\Event\GetResponseEvent; use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\EventDispatcher\EventSubscriberInterface; class LocaleSubscriber implements EventSubscriberInterface { /** * @var \Monolog\Logger */ protected $logger; protected $defaultLocale; protected $originalLocale; protected $router; public function __construct(\Monolog\Logger $logger, $router, $defaultLocale = 'fi') { $this->logger = $logger; $this->defaultLocale = $defaultLocale; $this->router = $router; } public function onKernelRequest(GetResponseEvent $event) { if($event->getRequestType() == HttpKernelInterface::MASTER_REQUEST) { $this->originalLocale = $event->getRequest()->getLocale(); $this->logger->debug('LocaleListener: Setting originalLocale to ['.$this->originalLocale.']'); } $localeForRequest = $this->originalLocale ? $this->originalLocale : $this->defaultLocale; $this->logger->debug('LocaleListener: For this request, locale is ['.$localeForRequest.']'); $event->getRequest()->setLocale($localeForRequest); $this->router->getContext()->setParameter('_locale', $localeForRequest); } { ); } }
locale_subscriber: class: Lib\EventSubscriber\LocaleSubscriber arguments: [@logger, @router, %kernel.default_locale%] tags: - { name: kernel.event_subscriber }