2012-04-11 66 views
6

我正在使用I18n-js,並且我的客戶端I18n.t調用在生產中運行時都返回了翻譯缺失消息。運行「bin/rake資源:預編譯」時,I18n加載路徑未被設置!

在開發和測試中一切正常。

此問題的根源似乎在資產管道中。 (運行斌/耙資產時:預編譯)

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"] 

這些看起來像默認的ActiveSupport,activemodel的,ActiveRecord的和ActionPack的從寶石翻譯...

我的翻譯路徑運行時斌預期也不過被置/軌道控制檯在研發和生產:

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

你定義默認的語言環境? 如果沒有,你可以做到這一點在你的配置加入這一行/ application.rb中

​​

也許你也應該在你的production.rb爲了使I18N的區域設置回退中加入這一行:

config.i18n.fallbacks = true 

然後,在你的語言環境文件中沒有製表符縮進,但只有空格縮進。

區域設置不是資產,資產只有JS,CSS和圖像,所以存在資產編譯和語言環境之間沒有聯繫。

3

這實際上是由於您可能已在config/application.rb中設置的資產配置標誌。

config.assets.initialize_on_precompile = false 

耙資產:預編譯rake任務檢查此標誌,如果發現是假的,只加載了資產組的,沒有充分初始化應用程序。反過來,應用程序語言環境也不會添加到I18n.load_path。

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現在存在,並準備提供服務。