Intereting Posts
Значение HTML-формы кнопки не размещено в Safari и Chrome Получение недопустимых символов в методе get_browser () выполняется в php Как проверить, существует ли время между двумя раз в PHP Javascript crc32 и PHP crc32 не соответствуют Альтернатива для HTTPRequest в php Как продолжать проверку файла до его появления, а затем предоставить ссылку на него Загрузка изображения PHP с помощью POST Как включить файл меню .asp внутри php-файла? (Папка WordPress в папке ASP) Magento ловит исключения и откатывает транзакции базы данных Регистрация / выход в систему посещаемости с использованием codeigniter Каков правильный способ сравнить две даты в php? MySQL выбирает из таблицы в зависимости от других значений таблицы Правильное формирование URL-адресов с помощью строки запроса и символа «хэштаг» Удалите автоматически добавленную <p> со страницы, которая не имеет литерального содержимого (использует короткие коды) Значение базы данных SQL для переменной

Изменение языка с symfony 2.1

Имея некоторые проблемы с изменением языка на веб-сайте 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, но документация не совсем понятна, любая подсказка / подсказка оценена

Solutions Collecting From Web of "Изменение языка с symfony 2.1"

Я столкнулся с той же проблемой, поскольку мы не можем использовать локали в наших 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);