Я работаю над приложением 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 и других служб индексирования.
Я уверен, что если бы я вложил достаточно времени, я мог бы с чем-то быть достаточно умным, чтобы определить, какой маршрут согласован, и поменять локальную часть, но я чувствую, что это будет взлом.
Я открыт для всех мыслей, но этот вопрос SO предлагает только использование sub()
; к сожалению, с такими короткими и часто встречающимися строками, как короткие короткие коды, вероятно, не слишком мудры.