2012-04-11 10 views
6

私はI18n-jsを使用しています。クライアントサイドのI18n.tはすべて、本番環境で稼働しているときに翻訳漏れのメッセージを返します。"bin/rake assets:precompile"を実行しているときにI18nロードパスが設定されていません!

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

この問題の原因はアセットパイプラインにあるようです。これらは、デフォルトのactivesupportの、activemodel、ActiveRecordのとactionpackように見える

["/home/chris/.rvm/gems/[email protected]/gems/activesupport-3.2.3/lib/active_support/locale/en.yml", 
"/home/chris/.rvm/gems/[email protected]/gems/activemodel-3.2.3/lib/active_model/locale/en.yml", 
"/home/chris/.rvm/gems/[email protected]/gems/activerecord-3.2.3/lib/active_record/locale/en.yml", 
"/home/chris/.rvm/gems/[email protected]/gems/actionpack-3.2.3/lib/action_view/locale/en.yml"] 

:それだけで次のパスが含まれています(プリコンパイルビン/すくい資産を実行している場合)

I18n.load_pathは私の翻訳のいずれかが含まれていません予想通り、開発と生産にビン/レールコンソールを実行しているときに宝石からの翻訳は...

私の翻訳・パスは、しかし、設定を取得します:

1.9.3p125 :002 > I18n.load_path 
=> ["/home/chris/.rvm/gems/[email protected]/gems/activesupport-3.2.3/lib/active_support/locale/en.yml", 
"/home/chris/.rvm/gems/[email protected]/gems/activemodel-3.2.3/lib/active_model/locale/en.yml", 
"/home/chris/.rvm/gems/[email protected]/gems/activerecord-3.2.3/lib/active_record/locale/en.yml", 
"/home/chris/.rvm/gems/[email protected]/gems/actionpack-3.2.3/lib/action_view/locale/en.yml", 
"/home/chris/.rvm/gems/[email protected]/gems/carrierwave-0.6.1/lib/carrierwave/validations/../locale/en.yml", 
"/home/chris/.rvm/gems/[email protected]/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] 

しかし、まだありません喜びに指定しようとしました。

誰でも、I18n.load_pathがアセットを実行しているときにのみ設定されないようにすることができます。プリコンパイル?

ありがとうございました

答えて

0

デフォルトのロケールは定義しましたか? ない場合は、たぶん、あなたは、国際化のためのロケールフォールバックを有効にするために、あなたのproduction.rbにあまりにもこの行を追加する必要がありますあなたのconfig/application.rbに

​​

をこの行を追加し、それを行うことができます。

config.i18n.fallbacks = true 

次に、ロケールファイルにタブインデントがなく、インデントが空白になるように注意してください。

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

3

これは実際にconfig/application.rbで設定したアセット設定フラグが原因です。

config.assets.initialize_on_precompile = false 

すくい資産:このフラグのプリコンパイルrakeタスクをチェックし、偽であることが判明した場合、唯一の資産グループをロードし、アプリケーションを完全に初期化されません。次に、アプリケーションのロケールはI18n.load_pathに追加されません。

0

i18n.jspublic/assetsでコンパイルされ、処理されていないので、これはあなたがconfig/environments/production.rb

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

に以下の行を追加する必要があり、そうすることで、あなたがpublic/assets/i18n-MD5.jsが今存在していることに気づくと、提供する準備ができますrake assets:precompileを実行します。

関連する問題