1

我正在使用 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项目中不接受吗?

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

4

1 回答 1

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
于 2014-10-28T08:08:18.350 回答