【问题标题】:Organization of Locale Files in rails appRails 应用程序中语言环境文件的组织
【发布时间】:2012-05-30 22:36:46
【问题描述】:

我的根应用程序的 config/locales 目前有以下 4 个文件:

-en.yml
-de.yml
-simple_form.en.yml
-simple_form.de.yml

在我的 application.rb 中,它位于 spec/dummy 文件夹中,用于测试应用程序 gem,我有以下代码行,似乎正在检索翻译为预期:

# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
config.i18n.default_locale = :de

我现在希望向我的语言环境文件夹的文件结构介绍结构,但是当我添加其他文件夹并更改 application.rb 中的加载路径时,我收到了未找到翻译的错误。这是我的尝试:

尝试在我的根应用程序的 config/locales 中包含结构:

-views
  -en.yml
  -de.yml
-models
  -en.yml
  -de.yml
-forms
  -simple_form.en.yml
  -simple_form.de.yml

而我在 application.rb 中的加载路径更改为:

config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]

根据以下导轨指南: http://guides.rubyonrails.org/i18n.html#setting-the-locale-from-the-domain-name

【问题讨论】:

  • 请告诉我们您遇到的具体错误。你有可以分享的堆栈跟踪吗?
  • 在视图中我收到字符串:缺少翻译:en.new_tenant.header,我没有看到任何错误消息
  • 问题可能是 application.rb 文件驻留在 spec 文件夹中以用于测试目的,并且我的 config 文件夹没有在根级别加载,我只将翻译视为 config/语言环境会自动添加,但不会添加任何子文件夹?
  • Dir[Rails.root.to_s] 生成字符串 C:/Sites/MyApp/spec/dummy,这是用于测试 MyApp 的虚拟应用程序。带有翻译的配置文件夹位于 C:/Sites/MyApp/Config/Locales/
  • 我试过这个:my_root = "C:/Sites/MyApp" config.i18n.load_path += Dir[my_root.join('config', 'locales', '* ', '.{rb,yml}').to_s] config.i18n.default_locale = :de

标签: ruby-on-rails-3 internationalization locale i18n-gem load-path


【解决方案1】:

要测试主机应用程序,您需要将 i18n.load_path 更改为主应用程序的配置文件夹,而不是用于测试目的的虚拟规范。代码如下:

config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]
config.i18n.default_locale = :en

【讨论】:

  • 对我来说,字符串是:config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]
  • 最好使用Rails.root而不是硬编码的根路径
【解决方案2】:

我有一个类似的问题,我通过将这一行添加到我的 application.rb 配置来解决它:

# load the subfolders in the locales
config.i18n.load_path += Dir["#{Rails.root.to_s}/config/locales/**/*.{rb,yml}"]

【讨论】:

    【解决方案3】:

    以下选项都对我有用

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

    重启网络服务器当然...

    【讨论】:

      【解决方案4】:

      想提一下。上述所有解决方案还再次包含config/locales 目录中的文件(第一次rails 自行添加)。这不是问题,因为值将用相同的键重写。但是如果你只想在config/locales 中包含子目录文件,最好使用 config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '*', '**', '*.{rb,yml}')]

      示例。 我的结构:

      config/
        locales/
          en.yml
          breadcrumbs/
            breadcrumbs.en.yml
      
      

      如果你做config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]你添加en.yml几次:

      irb(main):001:0> Rails.application.config.i18n.load_path
      => ["/home/air/projects/qq2/config/locales/en.yml"]
      irb(main):002:0> Rails.application.config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]
      irb(main):003:0> Rails.application.config.i18n.load_path
      => ["/home/air/projects/qq2/config/locales/en.yml", "/home/air/projects/qq2/config/locales/en.yml", "/home/air/projects/qq2/config/locales/breadcrumbs/breadcrumbs.en.yml"]
      

      Dir[Rails.root.join('config', 'locales', '*', '**', '*.{rb,yml}')]:

      irb(main):001:0> Rails.application.config.i18n.load_path
      => ["/home/air/projects/qq2/config/locales/en.yml"]
      irb(main):002:0> Rails.application.config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '*', '**', '*.{rb,yml}')]
      irb(main):003:0> Rails.application.config.i18n.load_path
      => ["/home/air/projects/qq2/config/locales/en.yml", "/home/air/projects/qq2/config/locales/breadcrumbs/breadcrumbs.en.yml"]
      

      【讨论】:

        【解决方案5】:

        config/application.rb:

        module PointsProject
          class Application < Rails::Application
            config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]
          end
        end
        

        来自 Rails 的国际化指南:http://guides.rubyonrails.org/i18n.html#setting-the-locale-from-the-domain-name

        【讨论】:

          猜你喜欢
          • 2018-08-09
          • 1970-01-01
          • 1970-01-01
          • 2016-12-28
          • 2011-06-25
          • 1970-01-01
          • 1970-01-01
          • 2012-03-28
          • 1970-01-01
          相关资源
          最近更新 更多