2014-10-28 2 views
1

여러 로케일을 지원하기 위해 globalize gem을 사용하고 있습니다.rails 4, globalize gem, 기본 로케일 설정 방법

설정은/디렉토리에 파일

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 

레일 프로젝트에서 허용되지 않습니까?

은/: 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

들으은 후 소스를 추가합니다. – kai