Rails: как должны вести себя Phusion Passenger и I18n.locale? - PullRequest
3 голосов
/ 18 февраля 2009

У меня есть веб-приложение Rails 2.2, работающее на Passenger / REE

Я установил язык по умолчанию в config/environment.rb

config.i18n.default_locale = 'en-GB'

В первом запросе не задан языковой стандарт в I18n.locale

Если я посещаю страницу с before_filter, который устанавливает I18n.locale при каждом последующем посещении любого контроллера, даже если он не имеет того же before_filter, устанавливающего I18n.locale, я получаю I18n.locale того, что было установлено, скажем, en-US.

В Mongrel с одинаковым кодом каждый запрос получает языковой стандарт en-GB по умолчанию, пока он не будет явно установлен before_filter.

Любая помощь приветствуется, если это нормальное поведение Пассажира.

1 Ответ

5 голосов
/ 29 апреля 2009

Дворняга сбрасывает локаль «автоматически», потому что он обрабатывает почти каждый запрос с другим нить, пока Phusion Passenger обрабатывает все с тем же нить.

Как хак к этому, в вашем фильтре before вы всегда можете установить языковой стандарт равным nil перед установкой языкового стандарта на основе других параметров. Таким образом, он всегда будет сбрасывать последнее значение, в котором языковой стандарт был установлен на ноль.

Просто убедитесь, что вы устанавливаете языковой стандарт при каждом запросе предпочтительного языкового стандарта пользователя.

У меня была такая же проблема, потому что я устанавливал локаль только в том случае, если входящий параметр велел сайту изменить локаль. Я думаю, это то, что вы всегда должны устанавливать независимо от того, используете ли вы Phusion Passenger.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...