在config / application.rb下的I18n配置被忽略

时间:2017-09-30 22:55:16

标签: ruby-on-rails ruby localization rails-i18n

我正在尝试在我的应用中设置国际化。 我已按以下方式设置config/application.rb

  class Application < Rails::Application

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

    I18n.available_locales = [:en, :fr]

    I18n.default_locale = :fr
  end

在我的application_controller.rb中,我尝试根据子域设置区域设置:

  before_action :set_locale

  def set_locale
    puts(I18n.default_locale)
    I18n.locale = extract_locale_from_subdomain || I18n.default_locale
  end

  def extract_locale_from_subdomain
    parsed_locale = request.subdomains.first
    I18n.available_locales.map(&:to_s).include?(parsed_locale) ? parsed_locale : nil
    puts(parsed_locale)
  end

第一个puts打印en,第二个正确打印子域,例如grfr或我设置的任何内容。

似乎忽略了config/application.rb中的配置。

我已将127.0.0.1 fr.app.local添加到etc/hosts中,因此我可以对其进行测试。

1 个答案:

答案 0 :(得分:2)

您需要编辑config文件中的config/application.rb对象。

I18n.default_locale = :fr不会给你你想要的东西。您需要执行config.i18n.default_locale = :fr

试试这个:

class Application < Rails::Application
  config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]
  config.i18n.enforce_available_locales = false
  config.i18n.available_locales = [:en, :fr]
  config.i18n.default_locale = :fr
end

您可以详细了解如何配置Rails组件here