Чтобы интернационализировать мое приложение, я хотел бы, чтобы именованные маршруты, такие как 'hello_path', автоматически переводились в '/ en / hello' или '/ fr / bonjour "в зависимости от текущего I18n.locale. Но я столкнулся с проблемой (name clash?):
Мои маршруты:
LostInTranslation::Application.routes.draw do
root :to => 'home#index'
scope '/:locale' do
constraints :locale => 'fr' do
get 'bonjour' => 'home#hello', :as => 'hello'
end
constraints :locale => 'en' do
get 'hello' => 'home#hello', :as => 'hello'
end
end
end
И в ApplicationController я устанавливаю локаль и передаю ее параметрам URL по умолчанию:
class ApplicationController < ActionController::Base
protect_from_forgery
before_filter :set_locale
private
def default_url_options(options={})
options.merge({ :locale => I18n.locale })
end
def set_locale
if params[:locale] and I18n.available_locales.include?(params[:locale].to_sym)
I18n.locale = params[:locale]
else
I18n.locale = I18n.default_locale
end
end
end
Но когда в представлении я использую <% = link_to t ('hello'), hello_path%>, я получаю эту ошибку:
No route matches {:controller=>"home", :locale=>:fr, :action=>"hello"}
Тем не менее, маршруты rake говорят, что она объявлена:
root / {:action=>"index", :controller=>"home"}
hello GET /:locale/bonjour(.:format) {:locale=>"fr", :action=>"hello", :controller=>"home"}
hello GET /:locale/hello(.:format) {:locale=>"en", :action=>"hello", :controller=>"home"}
Не могли бы вы понять, почему он не работает или нет другого способа добиться этого? Мне известен гем i18n_routing, но он работает, объявляя локализованные маршруты с разными именами (в данном примере en_hello и fr_hello).
Спасибо!