我的路线中有以下内容
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
答案 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,您仍然可以使用此方法链接到不同的视图文件夹,并在所有控制器的每个方法中路由到正确的视图文件,这需要做很多工作。