2014-10-28 25 views
1

我正在使用全球化gem来支持多个语言环境。rails 4,全球化宝石,如何设置默认语言环境

配置/区域设置目录中有三个文件

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 ~~?

回答

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 
+0

THX〜它的工作好,之后添加源。 – kai 2014-10-28 09:39:44