国際化されたRails(2.3.5)アプリで、「翻訳がありません」ではなく、デフォルトのロケールからの翻訳を表示したいのですが、チケットはありますが、まだ保留中のようです:
たとえば(チケットから取得)、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冷凍宝石に適用できると思いますが、できれば避けたいと思います。
Rails 2を使用している場合、最新のI18n gemを使用している場合は、これを初期化子に追加します。
I18n.backend.class.send(:include, I18n::Backend::Fallbacks)
次に、次のようにフォールバックを追加できます。
I18n.fallbacks.map('es' => 'en')
現在個別の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'}
これを設定ファイル(例:application.rb)に追加するのが最も簡単だと思います。
config.i18n.fallbacks = true
En-US、en-CAなどの地域ロケールでは、ロケールenに自動的にフォールバックできるため、非常に便利です。
ジミーが指摘しているように、フォールバックメカニズムを変更することもできます。
I18n.fallbacks.map('es' => 'en')