我正在尝试在我的应用中设置国际化。
我已按以下方式设置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
,第二个正确打印子域,例如gr
,fr
或我设置的任何内容。
似乎忽略了config/application.rb
中的配置。
我已将127.0.0.1 fr.app.local
添加到etc/hosts
中,因此我可以对其进行测试。
答案 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。