4

ルートの形式を /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 ステートメントをコーディングする方法の例は見つかりませんでした。

どんな助けでも大歓迎です。

4

1 に答える 1

2

これを試してみてくださいroutes.rb

match '/:locale' => 'landing#index', :as => 'locale_root'

そして、次のようにリンクします。

<%= link_to image_tag("menu-home.jpg"), locale_root_path %>

または、する必要があるかもしれません

<%= link_to image_tag("menu-home.jpg"), locale_root_path(:locale => I18n.locale) %>

alt(すべてがページに収まるようにスペースを節約するためだけにパラメータを削除しました。)

于 2013-10-12T04:29:30.173 に答える