从routes.rb中的范围获取区域设置?

时间:2015-08-25 14:01:20

标签: ruby-on-rails ruby ruby-on-rails-4 routes locale

我的路线中有以下内容

scope "/(:locale)", locale: /en|fr/, constraints: LocaleConstraint do
  # I want to be able to detect the locale that was used in the URL
  get '/tool' , redirect_to(/a_certain_page)
end

现在,根据我想要重定向到不同页面的URL中的区域设置。

基本上我想要以下内容:

get '/fr/tool', redirect_to(/tool_in_french)
get '/en/tool', redirect_to(/tool_in_english)

我希望有类似的东西:

scope "/(:locale)", locale: /en|fr/, constraints: LocaleConstraint do
  get '/tool' => locale == :fr ? redirect_to(/tool_in_french) : redirect_to(/tool_in_english)
end

1 个答案:

答案 0 :(得分:0)

我认为使用params在application_controller.rb中查找语言是更好的做法。

private
def set_locale
  session['locale'] = params[:locale] || session['locale'] || I18n.default_locale
  I18n.locale = session['locale']
end

我不确定你使用的是什么样的翻译工具,但是对于I18n来说这很完美。在路由中,您应该将:locale作为参数添加到作用域。这可以在application_controller.rb中强制执行。范围是正确的,没有默认值; Rails: how to use scope with params and use route with default value of params

before_action :set_locale 

如果您不使用I18n,您仍然可以使用此方法链接到不同的视图文件夹,并在所有控制器的每个方法中路由到正确的视图文件,这需要做很多工作。

http://guides.rubyonrails.org/i18n.html