1

複数のロケールをサポートするために globalize gem を使用しています。

config/locales ディレクトリには 3 つのファイルがあります

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~~ を追加する必要がありますか?

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 に答える