次のルーティング条件で 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')
current_path
現在使用しているルートを推測し、新しいオプションを含むルートに再ルーティングできるなどのヘルパーが Rails に存在しないのはなぜだろうと思っています。
私が抱えている問題は、のようなものを使用していて、ユーザーを(または)redirect_to :back
に押し戻すことで、ひどい経験になります。/en/........
/de/...
今までセッションにロケールを保存していましたが、これは Google やその他のインデックス サービスでは機能しません。
十分な時間を投資すれば、どのルートが一致したかを検出し、ロケール部分を交換するのに十分なほどスマートなものを手に入れることができると確信していますが、これはハックになると思います.
私はすべての考えを受け入れていますが、このSO の質問は単に使用することを示唆していsub()
ます ; 残念ながら、ロケール ショート コードのような短くて頻繁に発生する文字列を使用するのは、おそらくあまり賢明ではありません。