【问题标题】:My rails project has two different I18n.load_path and I18n.locale我的 rails 项目有两个不同的 I18n.load_path 和 I18n.locale
【发布时间】:2019-10-17 14:11:30
【问题描述】:

所以我正在翻译我的项目以处理不同的语言。我已经翻译了文件夹 /app/views/ 和 /lib/modules/ 中的几乎所有代码。这些都没有问题。

现在我想翻译一个告诉我“I18n.locale”与我拥有的不同的文件,并且 load_path 也是错误的。

所以 I18n 可以很好地处理我之前提到的文件,已经翻译成西班牙语。但是当我进入这个文件时,它告诉我语言环境是 :en (默认的)并且 load_path 是错误的,只是在像回形针这样的宝石中寻找语言环境(我猜是默认的 load_path)。

我很困惑。为什么这个文件不受从 application.rb 设置的变量的影响?为什么我的项目中有两个不同的 I18n.locale?我该如何解决这个问题?

我已经解决了 load_path 问题,方法是像在 application.rb 中一样再次加载此文件中的路径,但 I18n.locale 不同,因为我必须在数据库中获取用户的 :preferred_locale 来分配它,但显然我不能这样做,因为 User.all 给了我错误,我无法从我的数据库中检索用户,但我可以做其他查询。

发生了什么?提前致谢。

编辑:顺便说一句,这是我的第一个问题,所以请放轻松:)

edit2:该文件既不是类也不是模块,它只是从其他模块执行要求并设置一些变量。该文件位于 lib/file_with_problem.rb

【问题讨论】:

    标签: ruby-on-rails ruby internationalization locale


    【解决方案1】:

    以防万一有人遇到这个问题,在某些文件中他们没有来自 I18n 的正确 load_path,我通过在 application.rb 中使用 I18n 的全局变量来解决所以,如果我有这个:

    config.i18n.load_path += Dir["#{config.root}/lib/modules/#{module_name}/config/locales/*.yml"]
    config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '*.{rb,yml}').to_s]
    

    我通过添加相同的行来解决,但没有配置,并且第一个字母大写。

    I18n.load_path += Dir["#{config.root}/lib/modules/#{module_name}/config/locales/*.yml"]
    I18n.load_path += Dir[Rails.root.join('config', 'locales', '*.{rb,yml}').to_s]
    

    【讨论】:

      【解决方案2】:

      我最近在更新 Rails 后偶然发现了这个问题。对我有用的解决方案是使用 config/initializers 文件夹中的 locale.rb 并直接使用 I18n 类中的方法:

      # Where the I18n library should search for translation files
      I18n.load_path += Dir[Rails.root.join('lib', 'locale', '*.{rb,yml}')]
      
      # Permitted locales available for the application
      I18n.available_locales = [:en, :"sv-se", :"en-se"]
      

      希望这对将来的某人有所帮助。

      【讨论】:

        猜你喜欢
        • 2019-07-28
        • 1970-01-01
        • 1970-01-01
        • 2015-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-04
        • 1970-01-01
        相关资源
        最近更新 更多