私はRailsアプリに国際化を追加する過程にあり、多かれ少なかれ関連するRailsガイドとRailscastをフォローしています。
私は2つの問題に遭遇しました:
- 現在のロケールにリダイレクトする「ホーム」リンクを追加するにはどうすればよいですか。現在、root_pathリンクがありますが、スコープ外のルートを取得するように設計されたroutes.rbの行が原因で、これらは失敗しています。これは、root_pathが現在のロケールではなく、常にデフォルトのロケールにリダイレクトすることを意味します。
- すべてをローカルでセットアップして動作させていますが(上記の問題を除く)、Herokuにデプロイすると、すべてのURLがルートファイルを介してドロップされ、キャッチオールの1つにキャッチされているように見えます。それらは、defulatロケールの下で「/」にリダイレクトしています。
私のセットアップは次のとおりです
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?
end
ルート.rb
scope ":locale", locale: /#{I18n.available_locales.join("|")}/ do
all_my_routes
# handles /valid-locale
root to: 'home#index', as: "localized_root"
# handles /valid-locale/fake-path
match '*path', to: redirect { |params, request| "/#{params[:locale]}" }
end
# handles /
root to: redirect("/#{I18n.default_locale}")
# handles /bad-locale|anything/valid-path
match '/*locale/*path', to: redirect("/#{I18n.default_locale}/%{path}")
# handles /anything|valid-path-but-no-locale
match '/*path', to: redirect("/#{I18n.default_locale}/%{path}")
私のホームリンク:
<%= link_to "Home", root_path %>