2014-10-20 2 views
0

У меня есть многоязычная Рельсы сайт, созданный с помощью Rails I18n API с URL-адресов, какRails I18n язык по умолчанию Перенаправление

«example.com/en/about» или «example.com/de/about» или например». ком/о/контакт»

т.д.

Это прекрасно работает, но я хотел бы, что если пользователь переходит к„example.com/about“(без языка части в URL), он 'd перенаправляется на соответствующую страницу на языке по умолчанию, например к «example.com/en/about»

Мой конфиг/routes.rb выглядит следующим образом:

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 на сервер (Apache) уровне, но я бы предпочел, чтобы сделать это в рельсах.

ответ

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 
Смежные вопросы