Rails 3 と Globalize3 0.2.0.beta4 を使用しています。
理想的には、:en にフォールバックするには :fr が必要であり、その逆も同様です。
ロケールが :en の場合でも、フランス語の翻訳しかなく、それを表示する必要がある場合があります。
私は試した
config.i18n.fallbacks = { :fr => :en, :en => :fr }
しかし、当然のことながら、スタックレベルが深すぎるというエラーが発生します。
Rails 3 と Globalize3 0.2.0.beta4 を使用しています。
理想的には、:en にフォールバックするには :fr が必要であり、その逆も同様です。
ロケールが :en の場合でも、フランス語の翻訳しかなく、それを表示する必要がある場合があります。
私は試した
config.i18n.fallbacks = { :fr => :en, :en => :fr }
しかし、当然のことながら、スタックレベルが深すぎるというエラーが発生します。
答えを変えています。
フォールバックを有効にするには、以下を environment.rb ファイルに追加します。
#support for locale fallbacks
require "i18n/backend/fallbacks"
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
次に、試みていたように循環フォールバックを有効にすることができます。
config.i18n.fallbacks = {'en' => 'fr', 'fr' => 'en'}
この場合、en ロケールで何かが欠落している場合は、fr ロケールをチェックし、次にその逆を行います。これを実行してもエラーは発生しません。
ソース: http://batsov.com/articles/2012/09/12/setting-up-fallback-locale-s-in-rails-3/
最後に、私は Globalize3 にパッチを適用しました。サイトで新しいロケールが必要になるたびにパッチを更新する必要があるため、あまり良くありませんが、うまくいきました.
module Globalize
class << self
def fallbacks(locale = self.locale)
case locale
when :en then [:en, :fr]
when :fr then [:fr, :en]
end
end
end
end
ロケールの配列を渡すと、すべてのロケールのデフォルトのフォールバックとして設定されます。
config.i18n.fallbacks = [:en, :fr]
残念ながら、2 つのロケールだけを相互にフォールバックするように設定する方法は見つかりませんでした。
これは次のように変更されたようです。
Globalize.fallbacks = {:en => [:en, :fr], :fr => [:fr, :en]}
公式ドキュメントから入手: https://github.com/globalize/globalize#fallback-locales-to-each-other
最新の i18n gem (0.7.0) では、次のようにフォールバック ロケールを定義する必要があることがわかりました (in config/application.rb
):
# Custom I18n fallbacks
config.after_initialize do
I18n.fallbacks = I18n::Locale::Fallbacks.new(at: :"de-DE", ch: :"de-DE", gb: :"en-US")
end
config.i18n.fallbacks = true
また、すべてのファイルに設定する必要がありconfig/environments/*.rb
ます。