私はRailsチュートリアルサンプルアプリケーションで国際化を実装しようとしています。ログインしたときにurlからログインし、ログインしたときにユーザープロフィールを国際化するには?
各ユーザーのロケール属性と、myurl.com/en
とmyurl.com/es
のようなURLローカライズを管理することができました。ポイントは、両方のメソッドを組み合わせて、ユーザーがログアウトしたときにURLパラメータとアプリケーションを国際化する方法です。そうでない場合は、自分の好みを使用します。
私はこれまでのところ、これを持っています。この時点で、利用者の嗜好は、URLのparamが上書きされますが、ユーザーはes
言語を選択し、コンテンツがスペイン語で表示されているmyapp.com/en
に移動した場合。マイビューのコードはこのように見える私は、ユーザーがログインしている場合はURLがそのPARAMを持っていたい。
# application_controller.rb
class ApplicationController < ActionController::Base
include SessionsHelper
before_action :set_locale
def default_url_options(options = {})
{locale: I18n.locale}.merge options
end
def set_locale
I18n.locale = (current_user&.locale) || params[:locale] || I18n.default_locale
end
end
# users_controller.rb
def change_locale
user = current_user
user.locale = params[:locale]
user.save
redirect_to request.referer
end
# routes.rb
post 'international/:locale' => 'users#change_locale', as: 'international'
scope "(:locale)", locale: /en|es/ do
# All my routes
end
get '/:locale' => 'static_pages#home' # Fix the home route
# _footer.html.erb
...
<li>
<%= link_to t('spanish'), international_path(locale: :es), :method => :post %>
</li>
<li>
<%= link_to t('english'), international_path(locale: :en), :method => :post %>
</li>
...
I18n.available_locales出力
[:en, :"da-DK", :"en-GB", :he, :"en-NZ", :"en-au-ocker", :uk, :"en-CA", :ja, :"en-BORK", :"zh-CN", :ru, :de, :"en-AU", :"de-AT", :pl, :"ca-CAT", :fr, :"fi-FI", :vi, :"en-UG", :nl, :"en-SG", :nep, :pt, :ko, :es, :sv, :ca, :"de-CH", :"zh-TW", :sk, :"en-IND", :it, :"en-US", :"pt-BR", :fa, :"nb-NO"]
(今のところ唯一の2つのリンクがあります)
<li>
<%= link_to "Español", international_path(locale: :es), :metho d => :post %>
</li>
<li>
<%= link_to "English", international_path(locale: :en), :method => :post %>
</li>
PryRplのデバッグ: 私がログインしている:私は手動でURLを記述する場合、それは常に私が書くどのURLにもかかわらず、ユーザー保存された言語に行きます。それはユーザー県に格納された新しい言語をロードするので、ユーザの嗜好が変更された:それは常に私がログインしていると私は、明示的なビューのロケールリンク(上記の1)をクリックして、ユーザの嗜好(:en
または:es
) を表示します。 私がログインしていないとき:URLパラメータを使用します。
あなたはset_locale機能にbinding.pryまたは同様のデバッガを入れて設定されている内容を確認することができますか?これはいくつかの問題であり、あなたが投稿したものからは分かりません。これは純粋なレールアプリケーションですか?あなたのビューはどのように見えますか? I18n.available_localesの出力は何ですか? –
質問が更新されました。あなたはbinding.pryについて教えてくれますか?なぜ私の問題に関する情報を提供するためにそれを使うことができるのですか?ありがとうございました。てこデバッグについてruby_newbie –
http://pryrepl.org/ –