运行"bin/rake assets:precompile"时未设置I18n加载路径!

8

我正在使用I18n-js,并且在生产环境下,我的客户端I18n.t调用都返回“翻译缺失”消息。

在开发和测试中一切正常。

这个问题的根源似乎在于资产管道(asset pipeline)。

当运行bin/rake assets:precompile时,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"]

这些看起来像是默认的activesupport、activemodel、activerecord和actionpack翻译,来自于宝石...

然而,当在开发和生产环境下运行bin/rails console时,我的翻译路径确实按预期设置:

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才没有设置吗?

感谢任何想法。

3个回答

3

实际上这是由于您在config/application.rb中设置了资产配置标志。

config.assets.initialize_on_precompile = false

rake assets:precompile rake任务检查此标志,如果发现为false,则仅加载资产组并不完全初始化应用程序。反过来,应用程序地区设置不会添加到I18n.load_path中。

0
你是否定义了默认的区域设置? 如果没有,你可以在你的config/application.rb文件中添加这一行来定义它。
config.i18n.default_locale = :fr

也许你应该在production.rb中添加这一行代码,以启用I18n的语言环境回退功能:
config.i18n.fallbacks = true

然后,请注意您的本地化文件中没有制表符缩进,只有空格缩进。

本地化不是资源,资源只包括js、css和图像,因此资源编译与本地化之间没有关联。


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现在已经存在并准备好提供服务。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接