8

私はI18n-jsを使用していますが、クライアント側のI18n.t呼び出しはすべて、本番環境で実行しているときに変換がないというメッセージを返します。

開発とテストはすべて問題ありません。

この問題の根本は、アセットパイプラインにあるようです。

I18n.load_pathには、私の翻訳は含まれていません(bin / rake Assets:precompileを実行している場合)。次のパスのみが含まれています。

["/home/chris/.rvm/gems/ruby-1.9.3-p125@Project/gems/activesupport-3.2.3/lib/active_support/locale/en.yml",
"/home/chris/.rvm/gems/ruby-1.9.3-p125@Project/gems/activemodel-3.2.3/lib/active_model/locale/en.yml",
"/home/chris/.rvm/gems/ruby-1.9.3-p125@Project/gems/activerecord-3.2.3/lib/active_record/locale/en.yml",
"/home/chris/.rvm/gems/ruby-1.9.3-p125@Project/gems/actionpack-3.2.3/lib/action_view/locale/en.yml"]

これらは、gemからのデフォルトのactivesupport、activemodel、activerecord、およびactionpackの翻訳のように見えます...

ただし、開発および本番環境でbin / railsコンソールを実行すると、翻訳パスが期待どおりに設定されます。

1.9.3p125 :002 > I18n.load_path
=> ["/home/chris/.rvm/gems/ruby-1.9.3-p125@Project/gems/activesupport-3.2.3/lib/active_support/locale/en.yml",
"/home/chris/.rvm/gems/ruby-1.9.3-p125@Project/gems/activemodel-3.2.3/lib/active_model/locale/en.yml",
"/home/chris/.rvm/gems/ruby-1.9.3-p125@Project/gems/activerecord-3.2.3/lib/active_record/locale/en.yml",
"/home/chris/.rvm/gems/ruby-1.9.3-p125@Project/gems/actionpack-3.2.3/lib/action_view/locale/en.yml",
"/home/chris/.rvm/gems/ruby-1.9.3-p125@Project/gems/carrierwave-0.6.1/lib/carrierwave/validations/../locale/en.yml",
"/home/chris/.rvm/gems/ruby-1.9.3-p125@Project/gems/devise-2.0.4/config/locales/en.yml",
"/media/sf_code/Project/config/locales/active_record.en.yml",
"/media/sf_code/Project/config/locales/project.en.yml"]

実際、I18nのドキュメントには、「デフォルトのロケールは:enであり、config / locales / *。rb、ymlからのすべての翻訳は自動ロードされます」と記載されています。

application.rbでも指定してみました

config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '*.{rb,yml}').to_s]

しかし、それでも喜びはありません。

誰もが、assets:precompileを実行しているときにのみI18n.load_pathが設定されない原因となる可能性があることを知っていますか?

アイデアをありがとう

4

3 に答える 3

3

これは実際には、おそらく config/application.rb で設定したアセット構成フラグによるものです。

config.assets.initialize_on_precompile = false

rake assets:precompile rake タスクはこのフラグをチェックし、false であることが判明した場合は、アセット グループのみをロードし、アプリケーションを完全には初期化しません。同様に、アプリケーション ロケールは I18n.load_path に追加されません。

于 2012-05-30T23:24:37.257 に答える
0

デフォルトのロケールを定義しましたか?そうでない場合は、config/application.rbにこの行を追加して実行できます。

config.i18n.default_locale = :fr

I18nのロケールフォールバックを有効にするには、production.rbにもこの行を追加する必要があります。

config.i18n.fallbacks = true

次に、ロケールファイルにタブインデントがなく、スペースインデントのみがあることに注意してください。

ロケールはアセットではなく、アセットはjs、css、およびイメージのみであるため、アセットのコンパイルとロケールの間にリンクはありません。

于 2012-05-10T15:06:54.820 に答える
0

これは、i18n.jsがコンパイルおよび処理さpublic/assetsれないためです。そのためには、次の行を追加する必要があります。config/environments/production.rb

config.assets.precompile += %w( i18n.js en_locale.js fr_locale.js )

次に実行rake assets:precompileするpublic/assets/i18n-MD5.jsと、 が存在し、提供する準備ができていることがわかります。

于 2013-01-03T14:15:49.167 に答える