2012-04-11 38 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现在存在,并准备提供服务。