web-dev-qa-db-ja.com

翻訳が欠落している場合は、デフォルトの言語にフォールバックします

国際化されたRails(2.3.5)アプリで、「翻訳がありません」ではなく、デフォルトのロケールからの翻訳を表示したいのですが、チケットはありますが、まだ保留中のようです:

https://Rails.lighthouseapp.com/projects/8994/tickets/2637-patch-i18n-look-up-a-translation-with-the-default-locale-when-its-missed-with- another-specific-locale

たとえば(チケットから取得)、en.ymlとes.ymlの2つの翻訳ファイルがあります。

en:

  hello: 'hello'

  hello_world: 'hello world'



es:

  hello_world: 'hola mundo'

このコードを実行すると:

I18n.t :hello, :locale => :es

Railsは、「translationmissing」のスパンではなく「hello」を返します。

チケットはまだ保留中ですが、どうすればこの機能を実装できますか?すべてのI18n.t呼び出しを通過して:defaultオプションを使用するように変更できることはわかっていますが、回避できる場合は、すべてのビューを通過する必要はありません。パッチなので、Rails冷凍宝石に適用できると思いますが、できれば避けたいと思います。

38

Rails 2を使用している場合、最新のI18n gemを使用している場合は、これを初期化子に追加します。

I18n.backend.class.send(:include, I18n::Backend::Fallbacks)

次に、次のようにフォールバックを追加できます。

I18n.fallbacks.map('es' => 'en')
19
Jimmy Stenke

現在個別のi18n gemを使用する必要はありません、プレーンRails 3.0.6以降(5.0を含む)インストールでは、fallbacks値は- 次のいずれか

# application.rb

# Rails will fallback to config.i18n.default_locale translation
config.i18n.fallbacks = true

# Rails will fallback to en, no matter what is set as config.i18n.default_locale
config.i18n.fallbacks = [:en]

# fallbacks value can also be a hash - a map of fallbacks if you will
# missing translations of es and fr languages will fallback to english
# missing translations in german will fallback to french ('de' => 'fr')
config.i18n.fallbacks = {'es' => 'en', 'fr' => 'en', 'de' => 'fr'}
151
WTK

これを設定ファイル(例:application.rb)に追加するのが最も簡単だと思います。

 config.i18n.fallbacks = true

En-US、en-CAなどの地域ロケールでは、ロケールenに自動的にフォールバックできるため、非常に便利です。

ジミーが指摘しているように、フォールバックメカニズムを変更することもできます。

I18n.fallbacks.map('es' => 'en')
0
gamov