Ruby on rails URL中的i18n区域设置

Ruby on rails URL中的i18n区域设置,ruby-on-rails,Ruby On Rails,我希望我的应用程序的所有url都具有区域设置,例如: 成为: 如果不在所有链接中传递区域设置,我怎么能做到这一点呢?在路由中使用:path\u prefix选项: map.namespace :my_locale, :path_prefix => "/:locale" do |localized| localized.resources :users localized.root :controller => 'your_controller', :action

我希望我的应用程序的所有url都具有区域设置,例如:


成为:





如果不在所有链接中传递区域设置,我怎么能做到这一点呢?

在路由中使用
:path\u prefix
选项:

map.namespace :my_locale, :path_prefix => "/:locale" do |localized|
  localized.resources :users
  localized.root :controller => 'your_controller', :action => 'your_action'
  # other routes
end
在应用程序控制器中添加:

before_filter :set_current_locale

private
def set_current_locale
  current_locale = 'en' # default one
  current_locale = params[:locale] if params[:locale]  # or add here some checking 

  I18n.locale = current_locale # if it doesn't work, add .to_sym    
end
要创建链接,请使用标准url帮助程序。如果设置了
params[:locale]
参数,它将自动添加该参数。因此:

photos_path  # /en/photos - if you are in en locale
photo_path(@photo) # /fr/photos/3 - if you are in fr locale
现在,如果您所在的路径没有区域设置:“www.mysite.com”,则可以通过添加
:locale=>“en”
,生成指向本地化版本的链接:

users_path(:locale => 'en') # /en/users
您还可以使用上述示例更改当前区域设置

我不确定url帮助程序的名称,所以只需键入
rake routes
即可找到它。

在rails指南中使用as:

# config/routes.rb
scope "/:locale" do
  resources :books
end
设置区域设置:

before_filter :set_current_locale

private
def set_current_locale
  I18n.locale = params[:locale]
end

有一个railscast会让你一步一步地完成这个过程