rails 4, globalize gem, как установить локаль по умолчанию

Я использую гем globalize для поддержки нескольких локалей.

В каталоге config/locales есть три файла

en.yml,  ja.yml, ch-HK.yml

и мой файл маршрутизации

....
root :to => 'main#index', :locale => :en
 scope ":locale", locale: /#{I18n.available_locales.join("|")}/ do
   namespace(:api){ resources :badges }
   namespace(:api){
     resources :events do
       get :list, :on => :collection
     end 
   }   
end 
....

мой корневой путь (/) устанавливает локали по умолчанию

но я не знаю, как установить локали по умолчанию в api_controller

я хочу

/api/events.json ->> /en/api/event.json
/ja/api/events.json ->> /ja/api/events.json

это не принимается в проекте rails?

нужно добавить /:locales/api~~ ?


person kai    schedule 28.10.2014    source источник


Ответы (1)


Каждый запрос проходит через контроллер, и это место для установки локали по умолчанию. Все, что вам нужно сделать, это установить I18n.locale = :locale. Существуют различные методы определения локали пользователя, т. е. заголовка запроса, предпочитаемого пользователем языка (если он зарегистрирован и сохранен). Вы также можете проверить формат запроса (в случае API) и соответствующим образом установить локаль. Установка локали для URL здесь не требуется.

Вот фрагмент кода, который я использую для настройки локали:

before_filter :set_locale

def set_locale
  if defined?(params) && params[:locale]
    I18n.locale = params[:locale]
  elsif current_user && current_user.language_id.present?
    I18n.locale = current_user.language.code
  elsif defined?(request)
    I18n.locale = extract_locale_from_accept_language_header
  end
  I18n.locale ||= I18n.default_locale
  I18n.locale = :en unless valid_languages.include?(I18n.locale.to_sym)
end
person blelump    schedule 28.10.2014