現在、ロケール (/en、/fr など) を必要とするルーティングがあります。ある時点で、routes.rb で以下のすべてのステートメントを使用しました。
scope "/:locale", locale: /#{I18n.available_locales.join("|")}/ do
scope "/:locale", defaults: { :locale => "en" } do
scope "/:locale" do
ルートにロケールが含まれていない場合、次のようにすると、英語版の Web サイトを指すことがわかります。ただし、ページが表示されると、希望どおりにロケールが設定されません。ロケール ロジックをクリックしてフランス語版に移動すると、最初のリンクにフランス語版のページが表示され、リンクに /fr が含まれます。ただし、フランス語のページで別のリンクをクリックすると、ロケールがリンクから除外されて英語に戻ります。
scope "(/:locale)", defaults: { :locale => "en" } do
ユーザーがフラグの画像またはテキストをクリックしてロケールを変更できるアプリケーションのロケール リンクのコードを次に示します。
<%= link_to_unless_current image_tag("english.jpg", alt: "#{t :english}"), locale: "en" %> <%= link_to_unless_current "#{t :english}", locale: "en" %>
<%= link_to_unless_current image_tag("french.jpg", alt: "#{t :french}"), locale: "fr" %> <%= link_to_unless_current "#{t :french}", locale: "fr" %>
私がやりたいことは、Web サイトがローカライズされる前に誰かがリンクを保存した場合に、500 システム エラーが発生しないようにすることです。たとえば、http://mywebsite.com/videoがある場合、Web サイトの英語版が表示され、ロケールが「en」に設定されます。
これがapplication_controller.rbにあるコードです。
before_filter :set_locale
def default_url_options(options={})
{ :locale => I18n.locale }
end
private
def set_locale
I18n.locale = (params[:locale] if params[:locale].present?) || cookies[:locale] || 'en'
cookies[:locale] = I18n.locale if cookies[:locale] != I18n.locale.to_s
end
この特定の問題については、routing-filter gem を使用する以外に何も見つかりません。私はこの宝石を使用していましたが、Rails 4 用の宝石の製品版が登場するまで、このルーティングの問題を解決する以外に選択肢はありません。
どんな助けでも大歓迎です。