rails 4,globalize gem,如何设置默认语言环境

时间:2014-10-28 07:10:34

标签: ruby-on-rails ruby rails-i18n globalize

我使用globalize gem来支持多种语言环境。

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 Project中不接受吗?

必须添加/:locales / api ~~?

1 个答案:

答案 0 :(得分:4)

每个请求都通过控制器传递,这是设置默认语言环境的地方。您需要做的就是设置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