Имея некоторые проблемы с изменением языка на веб-сайте symfony 2.1.
Я не могу найти способ изменить язык, не используя _locale
на всех маршрутах. Я знаю, что это противоречит основному правилу , но этот контент, например, не будет проиндексирован движком, поскольку он является только членом.
Как правило, я хотел бы, чтобы простой метод имел возможность изменить локаль по запросу (BC от версии 2.1) или на сеансе, но не может понять, как это сделать плавно. Я также хотел бы избежать использования слушателя для этого.
Файл config.yml:
framework: translator: { fallback: %locale% } session:
Файл routing.yml:
route_change_lang: pattern: /changelang/{newlang} defaults: { _controller: AcmeCoreBundle:Default:switchLanguage, newlang: en } requirements: newlang: en|fr|de
Простое действие для обновления локали маршрутизатора:
public function switchLanguageAction($newlang) { $request = $this->getRequest(); $request->setLocale($newlang); $referer_url = $this->get('request')->headers->get('referer'); if ($referer_url != null) { return $this->redirect($referer_url); } else { return $this->redirect($this->generateUrl('route_home')); } }
В чем проблема? Я предполагаю, что это связано с установкой default_locale в основном файле config.yml, но документация не совсем понятна, любая подсказка / подсказка оценена
Я столкнулся с той же проблемой, поскольку мы не можем использовать локали в наших URL-адресах (seo-issues). Также мы используем локали, такие как en_US, и те, которые хранятся в конфигурации вне прямого доступа к инфраструктуре. Я сделал регистрацию прослушивателя событий и подключился к событию onKernelRequest. Там я проверяю, установлен ли языковой стандарт в сеансе, если нет, я добавляю его как к запросу, так и к сеансу. Таким образом, структура продолжает вести себя так, как это было до 2.1. Если вам нужна дополнительная информация о том, как это сделать, прокомментируйте, и я буду редактировать некоторые exaples здесь 🙂
Восстановите прежнее поведение, как объясните в https://github.com/symfony/symfony/blob/master/UPGRADE-2.1.md#httpfoundation-1 И используйте фрагмент кода Карлоса Гранадоса.
Вы также можете прочитать мой другой ответ https://stackoverflow.com/a/12952999/520114
Если вы установите языковой стандарт в запросе, это просто используется для текущего запроса. В следующий раз, когда будет выдан запрос, будет использоваться default_locale. Даже если теперь (2.1) локаль устанавливается в запросе вместо сеанса, «также возможно сохранить локаль в сеансе, а не на основе запроса. Если вы сделаете это, каждый последующий запрос будет иметь этот язык «. (из документов). Итак, вам нужно сделать:
$this->get('session')->set('_locale', $newlang);