ルートの形式を /route?locale=en などではなく /locale/route にしたい。
私は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
これはroutes.rbにあります
scope "/:locale" do
all my routes except for the root
end
スコープ ステートメントの外側にルート パスの次のコードがあります。これらをスコープ ステートメントに含めると、ロケールが 404 に設定され、404 のロケール ファイルが見つかりませんでした。
match '/:locale' => 'landing#index'
root to: 'landing#index'
人々が言語を変更できる見出しビューのコードは次のとおりです。
<p class="locale-line"><span class="english-link"><%= link_to_unless_current "#{t :english}", locale: "en" %></span><%= link_to_unless_current "#{t :french}", locale: "fr" %></p>
以下は、ルート パスに戻る画像を使用したリンクのコードです。
<%= link_to image_tag("menu-home.jpg", alt: "My Home Page"), root_path %>
<%= link_to image_tag("menu-home.jpg", alt: "My Home Page"), root_url %>
スコープ ステートメント内でルートを正常に取得して、必要に応じてルートを表示できます。ユーザーが最初に Web サイトを表示し、ページの上部にあるいずれかの言語リンクをクリックすると、ルート パスが /locale で表示されます。ただし、私のルート パスは、イメージ タグで希望どおりに機能しません。どちらの例も、ルート パスを /?locale=en または /?locale=fr で表示しています。
guides.rubyonrails.org と edgeguides.rubyonrails.org を確認しましたが、/locale 形式でロケールを表示するルート パスの link_to ステートメントをコーディングする方法の例は見つかりませんでした。
どんな助けでも大歓迎です。