8

ApplicationController で before_filter を使用して、アプリケーションのロケールを設定します。

class ApplicationController < ActionController::Base
  protect_from_forgery
  before_filter :set_locale

  def set_locale
    I18n.locale = request.compatible_language_from ["uk", "ru", "de", "en"]
  end
end

私が書いたコントローラーで動作します。しかし、devise のメッセージはすべて英語のままです。

設定config.i18n.default_locale = "uk"(またはその他)がconfig/application.rb機能するので、問題はdeviseのコントローラーが私のbefore_filterを使用していないことだと思います(おそらく、まったく継承ApplicationControllerしていません(?))。

この問題を解決するにはどうすればよいですか? デバイスに私のロケールを使用させる方法は?

4

4 に答える 4

4

Devise Wiki を参照してください https://github.com/plataformatec/devise/wiki/I18n には、YML ファイルのサンプルがたくさんあります。

それでも独自に書きたい場合は、I18n ファイルで次のようなものを使用してみてください

en:
  devise:
    sessions:
      signed_in: 'Signed in successfully.'

GitHub の詳細https://github.com/plataformatec/devise#i18n

于 2013-04-09T19:49:33.900 に答える
0

デフォルトのロケールは、次の方法で設定できconfig/application.rbますconfig/initializers/locale.rb

# Set default locale to something other than :en
I18n.default_locale = :fa

Railsガイドで提案されているように

yml次に、次のような関連する翻訳ファイルを追加する必要がありますfa.yml。ファイルは、デフォルトファイルが存在するlocalesdir に配置する必要があります。enロードするカスタム ディレクトリを設定することもできます。

于 2020-11-02T05:34:11.520 に答える
0

使用する必要がありますprepend_before_action(またはprepend_before_filter、エイリアスでprepend_before_actionあり、すぐに廃止される予定です)。次のようなものが必要です。

class ApplicationController < ActionController::Base
  protect_from_forgery

  prepend_before_action :set_locale

  private

  def set_locale
    I18n.locale = request.compatible_language_from [:uk, :ru, :de, :en]
  end
end

これによりビューが壊れるI18n.locale可能性があるため、追加で設定する必要がある場合があることに注意before_actionしてください。

于 2016-08-11T13:10:05.817 に答える
0

フランスのデバイスロケールがすべての人に読み込まれるというこの問題がありました.問題は、私のデバイスロケールが元々独自のファイルに組み込まれていたことでしたdevise.en.yml. それらをen.ymlファイルに移動したところ、すべてが修正されました。

うまくいけば、これは将来誰かを助けるでしょう!

于 2017-01-09T00:48:55.633 に答える