我正在使用具有以下路由条件的 Rails 3.2 应用程序:
scope "(:locale)", locale: /de|en/ do
resources :categories, only: [:index, :show]
get "newest/index", as: :newest
end
我有一个具有以下功能的控制器:
class LocaleController < ApplicationController
def set
session[:locale_override] = params[:locale]
redirect_to params[:return_to]
end
end
我在模板中将其与类似的东西一起使用:
= link_to set_locale_path(locale: :de, return_to: current_path(locale: :de)) do
= image_tag 'de.png', style: 'vertical-align: middle'
= t('.languages.german')
我想知道为什么 Rails 中不存在诸如 之类的助手current_path
,它能够推断出我们当前正在使用的路线,并重新路由到它包括新选项。
我遇到的问题是使用类似的东西redirect_to :back
,将用户推回/en/........
(或/de/...
),这会导致糟糕的体验。
到目前为止,我将语言环境存储在会话中,但这不适用于 Google 和其他索引服务。
我敢肯定,如果我投入了足够的时间,我可以找到一些足够聪明的东西来检测匹配的路线,并换掉语言环境部分,但我觉得这将是一个 hack。
我对所有想法持开放态度,但这个SO question建议只使用sub()
; 不幸的是,像语言环境短代码这样短且频繁出现的字符串,可能不太明智。