2014-10-20 3 views
0

나는 다중 언어레일 국제화 리디렉션 기본 언어

"example.com/en/about"또는 "example.com/de/about"또는 "예처럼 URL을 함께 Rails I18n API를 사용하여 만든 웹 사이트를 레일있다. COM/EN/접촉 "

같이이 잘 작동하지만 내가하고 싶은 사용자에가는 경우가있다"고, (URL의 언어 부분없이) example.com/about를 " 기본 언어로 각 페이지로 리디렉션됩니다. 예 :

Example::Application.routes.draw do 
    get '/:locale' => 'static_pages#home' 
    scope "/:locale" do 
    root "static_pages#home" 
    match 'about', to: 'static_pages#about', via: 'get' 
    match 'contact', to: 'contact#new', via: 'get' 
    end 
    resources "contact", only: [:new, :create] 
end 

내가 서버 (아파치) 수준에서 URL을 리디렉션 할 수 있지만, 내가 선호하는 것 "example.com/en/about"에

내 설정은/routes.rb처럼 보이는 레일에서.

답변

0

당신은 당신의 노선

Rails.application.routes.draw do 
    scope "(:locale)", locale: /en|es/ do 


    root    'static_pages#home' 
    get 'static_pages' => 'static_pages#home' 
    get '/:locale' => 'static_pages#home' 
    get 'help' => 'static_pages#help' 
    get 'about' => 'static_pages#about' 
    get 'contact' => 'static_pages#contact' 
    get 'signup' => 'users#new' 
    get 'login' => 'sessions#new' 
    post 'login' => 'sessions#create' 
    delete 'logout' => 'sessions#destroy' 
    end 

에서 그리고 당신의와 ApplicationController에 그 같은 뭔가를 할 수

before_action :set_locale 

    def set_locale 
    if params[:locale] && I18n.available_locales.include?(params[:locale].to_sym) 
     cookies['locale'] = { :value => params[:locale], :expires => 1.year.from_now } 
     I18n.locale = params[:locale].to_sym 
    elsif cookies['locale'] && I18n.available_locales.include?(cookies['locale'].to_sym) 
     I18n.locale = cookies['locale'].to_sym 
    end 
    end 

    protect_from_forgery 

    def default_url_options(options={}) 
    logger.debug "default_url_options is passed options: #{options.inspect}\n" 
    { :locale => I18n.locale } 
    end 

    def extract_locale_from_tld 
    parsed_locale = request.host.split('.').last 
    I18n.available_locales.map(&:to_s).include?(parsed_locale) ? parsed_locale : nil 
    end