1

エンジンを使用したアプリで奇妙な動作が発生します。アプリのロケール翻訳ファイルは、エンジンのロケール翻訳ファイルに影響します。

エンジンのファイルを機能させるには、アプリで同じファイルを明示的に作成する必要があります。それらに同じ名前を付けるだけで、空のロケールハッシュを入れるだけで十分です。

これは私のエンジンのロケール ディレクトリです。翻訳を.rb含むファイルがあります (ではない.yml):

# the directory:
engine/config/locale
                |
                -- en.rb
                -- ru.rb

# Translation files. ru.rb is the same.
# en.rb
{
  :en => {
    :foo => {
      :bar => "Bar",
    },
  },
}

私のエンジンのビューでは、翻訳を次のように呼び出します。

<%= t("foo.bar") %>

問題は、ホスティング アプリにまったく同じファイルが必要なことです。アプリの/config/locales/ディレクトリが空の場合 (いいえen.rbru.rbファイル)、I18n::InvalidLocaleDataエンジン/config/locales/が上記のように見えてもエラーが発生します (両方のファイルが存在し、正しい)。

:enアプリのこれらの翻訳ファイルは異なるコンテンツを持つことができますが、それらが存在し、同じロケール キー (または)を持っている必要があります:ru。たとえば、エンジンのファイルが正しく機能するには、これで十分です。

# app's translation files. ru.rb is the same.
# en.rb
{
  :en => {
      # even no content may be at all but an :en key has to be present
    },
  },
}

この動作を修正するにはどうすればよいですか? ホスティング アプリで同じファイルを明示的に作成したくありません。私はそれを空にしたいだけです。エンジンだけが独自の翻訳を持つことができます。エンジンのユーザーに追加の不便を引き起こすためです。

4

1 に答える 1

2

それで、どこに問題があるかを突き止めました。

私のエンジンのengine.rbファイルには、初期化用のコードがありました。のレシーバーに問題がありconfigました。appブロックにインスタンスを提供するので、のレシーバーconfigapp. そして、それが問題を引き起こしました:

initializer("my_engine.locales") do |app|
  tracking_logger = Logger.new(app.root.join('log', "my_engine_log.log"), 10, 30*1024*1024)
  config.i18n.load_path += Dir[root.join('my', 'locales', '*.{rb,yml}').to_s]
  config.i18n.default_locale = :ru
  config.i18n.fallbacks = [:en]
  tracking_logger.debug "MyEngine::Engine specific locale settings are set. Def locale == :ru\n\n"
end

そこで、レシーバーを次のように変更したところ、MyEngineすべてが正常に機能するようになりました。

initializer("my_engine.locales") do |app|
  tracking_logger = Logger.new(app.root.join('log', "my_engine_log.log"), 10, 30*1024*1024)
  MyEngine::Engine.config.i18n.load_path += Dir[root.join('my', 'locales', '*.{rb,yml}').to_s]
  MyEngine::Engine.config.i18n.default_locale = :ru
  MyEngine::Engine.config.i18n.fallbacks = [:en]
  tracking_logger.debug "MyEngine::Engine specific locale settings are set. Def locale == :ru\n\n"
end
于 2013-06-14T20:07:27.393 に答える