web-dev-qa-db-ja.com

Rails i18nフォールバック機能の使用方法

私はこの国際化の問題を抱えています

activerecord:
  notices:
    messages:
      success: 
        create: "Something was created"
    models:
      user:
        success:
            create: "Thanks for registration"

I18n.t("activerecord.notices.models.user.success.create")
# => "Thanks for registration"


I18n.t("activerecord.notices.models.book.success.create") 
# => "translation missing: de, activerecord, notices, models, book, success, create"

なぜ本のモデルがフォールバックマッサージを受けないのかわかりません。設定しましたconfig.i18n.fallbacks = true。 Rails 3を使用しています

31
antpaw

:defaultオプションが指定されている場合、翻訳がない場合はその値が返されます。

I18n.t :missing, :default => 'Not here'
# => 'Not here'

詳細 ここ

30
egze

通常はconfig/application.rbで設定します

    config.i18n.fallbacks =[:de, :fr, :en]

したがって、フォールバックの順序を減速できます。

ただし、一部の環境では注意が必要です/*.rb構成が上書きされます。

98
raskhadafi

バックエンドのフォールバックを有効にしましたか?シンプルであると仮定します(例ではymlに基づいています):

これを初期化子に入れます:

require "i18n/backend/fallbacks" 
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)

https://github.com/svenfuchs/i18n/wiki/Fallbacks

18
user456733

Rails 3+では、これはconfig/environmentsファイルで設定されています:

  # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
  # the I18n.default_locale when a translation can not be found)
  config.i18n.fallbacks = true
16
Alain Beauvois

不足している文字列を処理する最善の方法は、エラーメッセージではなくデフォルトのロケールを表示することだと思います。

この行をapplication.rbに追加して、英語ロケールにフォールバックします。

config.i18n.fallbacks = [:en]

ロケール固有のフォールバックを指定する場合は、以下を使用できます。

config.i18n.fallbacks = {:de => [:de,:en], :en => [:en,:de]}

また、環境に基づいてフォールバックを有効または無効にできることに注意してください。したがって、開発中にエラーを表示することは理にかなっているかもしれませんが、代わりにenvironments/production.rbのフォールバックを次のように有効にすることができます。

config.i18n.fallbacks = true
10
pastullo

I18nフォールバック機能には誤解があります。

I18n"activerecord.notices.models.book.success.create"キーに関連付けられた値を見つけられなかった場合に、この機能はmissing translation exceptionがある場合に発生します。現在の言語のロケールファイル)I18nは、フォールバック言語の事前定義されたリストを検索しますmissing translationを生成したキーの値例外、見つかった場合I18nはその値を返しますが、他のロケールファイルで見つからなかった場合I18n行方不明の翻訳を返します例外

したがって、config.i18n.fallbacks = trueを定義しても、missing translation exceptionが発生しても、この場合は次のようになりません。

I18n.t("activerecord.models.book.success.create")
# => "translation missing: de, activerecord, notices, models, book, success, create"

I18nは、ロケールファイル内の同様のキーを検索して、その値を返します。

I18n.t("activerecord.models.user.success.create")
# => "Thanks for registration"

I18nがあなたのデフォルトのフォールバック言語を検索して、特定の言語のmissing translation exceptionが発生しました。


良い使用例は次のとおりです。

# using :"en-US" as a default locale:
I18n.default_locale = :"en-US" 
I18n.fallbacks[:es] # => [:es, :"en-US", :en]

ロケールファイル:

es:
  activerecord:
    notices:
      messages:
        success: 
          create: "Algo fue creado"
      models:
        user:
          success:
            create: "Gracias por registrarte"
en-US:
  activerecord:
      ...
      models:
        books:
          success:
            create: "The model was created" 

英語サイトで電話:

I18n.t("activerecord.models.books.success.create")
# => "The model was created"

スペイン語のサイトに電話する:

#with config.i18n.fallbacks = false
I18n.t("activerecord.models.books.success.create")
# => "translation missing: es, activerecord, models, book, success, create"

#with config.i18n.fallbacks = true
I18n.t("activerecord.models.books.success.create")
# => "The model was created"

詳細については、次を確認してください: https://github.com/Ruby-i18n/i18n

0
LeFranck