我使用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 ~~?
答案 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