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

Chr*_*ris 7 ruby ruby-on-rails ruby-on-rails-3 asset-pipeline i18n-gem

我正在使用I18n-js,而我的客户端I18n.t调用在生产中运行时都返回翻译缺失消息.

一切都可以开发和测试.

此问题的根源似乎在资产管道中.

I18n.load_path不包含我的任何翻译(运行bin/rake资产:预编译时)它只包含以下路径:

["/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"]
Run Code Online (Sandbox Code Playgroud)

这些看起来像来自gems的默认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"]
Run Code Online (Sandbox Code Playgroud)

事实上,I18n文档指出:"默认语言环境是:en和来自config/locales/*.rb,yml的所有翻译都是自动加载的."

我也试过在application.rb中指定

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

但仍然没有快乐.

任何人都知道什么可能导致I18n.load_path只在运行资产时才设置:precompile?

谢谢你的任何想法

Lud*_*vic 0

您定义了默认区域设置吗?如果没有,您可以在 config/application.rb 中添加此行

config.i18n.default_locale = :fr
Run Code Online (Sandbox Code Playgroud)

也许您也应该在 Production.rb 中添加这一行,以便为 I18n 启用语言环境回退:

config.i18n.fallbacks = true
Run Code Online (Sandbox Code Playgroud)

然后,请注意区域设置文件中没有制表符缩进,只有空格缩进。

Locale不是资产,资产只是js、css和图像,因此资产编译和区域设置之间没有联系。