私はこの国際化の問題を抱えています
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を使用しています
:defaultオプションが指定されている場合、翻訳がない場合はその値が返されます。
I18n.t :missing, :default => 'Not here'
# => 'Not here'
詳細 ここ
通常はconfig/application.rbで設定します
config.i18n.fallbacks =[:de, :fr, :en]
したがって、フォールバックの順序を減速できます。
ただし、一部の環境では注意が必要です/*.rb構成が上書きされます。
バックエンドのフォールバックを有効にしましたか?シンプルであると仮定します(例ではymlに基づいています):
これを初期化子に入れます:
require "i18n/backend/fallbacks"
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
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
不足している文字列を処理する最善の方法は、エラーメッセージではなくデフォルトのロケールを表示することだと思います。
この行をapplication.rbに追加して、英語ロケールにフォールバックします。
config.i18n.fallbacks = [:en]
ロケール固有のフォールバックを指定する場合は、以下を使用できます。
config.i18n.fallbacks = {:de => [:de,:en], :en => [:en,:de]}
また、環境に基づいてフォールバックを有効または無効にできることに注意してください。したがって、開発中にエラーを表示することは理にかなっているかもしれませんが、代わりにenvironments/production.rb
のフォールバックを次のように有効にすることができます。
config.i18n.fallbacks = true
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