Rails I8n: Использовать локаль по умолчанию, когда запрошенная локаль (из заголовка HTTP) недоступна? - PullRequest
1 голос
/ 26 февраля 2010

Привет: В моем Rails ApplicationController я добавил следующие методы (из руководства по rails) для поддержки I8n, основанные на информации заголовка языка HTTP accept Есть ли способ проверить, доступна ли запрошенная локаль, и если нет, использовать локаль по умолчанию 'english', как отмечено в environment.rb? В противном случае я получаю «перевод отсутствует», когда используется неизвестная локаль.

def set_locale
   logger.debug "* Accept-Language: #{request.env['HTTP_ACCEPT_LANGUAGE']}"
   I18n.locale = extract_locale_from_accept_language_header
   logger.debug "* Locale set to '#{I18n.locale}'"
end  

private

def extract_locale_from_accept_language_header
    request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first
end

Ответы [ 2 ]

4 голосов
/ 26 февраля 2010

То, что я сейчас сделал, это (не стесняйтесь комментировать и публиковать более рубиновую версию; o)):

def set_locale
  if (I18n.available_locales.any?{|loc| loc.to_s == extract_locale_from_accept_language_header})
  I18n.locale = extract_locale_from_accept_language_header
  end
end  

Новая локаль теперь устанавливается только тогда, когда она доступна. Моя локаль по умолчанию в environment.rb: en.

0 голосов
/ 26 февраля 2010

В Rails 2.3 у вас есть метод available_locales, доступный в модуле I18n (вызывает тот же метод из бэкэнда, как I18n::Backend::Simple.available_locales).

Если вы все еще используете 2.2, вы должны реализовать ее самостоятельно. Увидеть: http://guides.rubyonrails.org/i18n.html

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