【问题标题】:I18n load path not being set when running "bin/rake assets:precompile"!运行“bin/rake assets:precompile”时未设置 I18n 加载路径!
【发布时间】:2012-04-11 08:45:41
【问题描述】:

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

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

此问题的根源似乎在于资产管道。

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

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

这些看起来像是来自 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"]

事实上,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?

感谢您的任何想法

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 asset-pipeline i18n-gem


    【解决方案1】:

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

    config.assets.initialize_on_precompile = false
    

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

    【讨论】:

      【解决方案2】:

      您是否定义了默认语言环境? 如果没有,您可以在 config/application.rb 中添加这一行

      config.i18n.default_locale = :fr
      

      也许您也应该在您的 production.rb 中添加这一行,以便为 I18n 启用语言环境后备:

      config.i18n.fallbacks = true
      

      然后,请注意您的语言环境文件中没有制表符缩进,而只有空格缩进。

      Locale 不是资产,资产只是 js、css 和图像,因此资产编译和语言环境之间没有联系。

      【讨论】:

        【解决方案3】:

        这是因为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 现在已经存在并可以提供服务了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-17
          相关资源
          最近更新 更多