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

I18n configuration under config/application.rb is ignored

我正在尝试在我的应用程序中设置国际化。 我设置 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 中以便我可以对其进行测试。

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

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