http://guides.rubyonrails.org/i18n.html#setting-the-locale-from-the-domain-name
适用于.de或其他域名。 但对于说英语的域名,我使用的是en.yml。我试图在我的应用程序控制器中实现这样的异常:
if I18n.available_locales.map(&:to_s) == "co.uk"
I18n.locale = "en"
end
但那不会奏效。 我不想通过默认语言环境来做到这一点,这是我现在想到的唯一解决方案。
如何告诉rails使用" en" locale如果我在.co.uk域而没有将默认语言环境设置为en?
答案 0 :(得分:1)
您链接的文档推荐了以下方法
before_action :set_locale
def set_locale
I18n.locale = extract_locale_from_tld || I18n.default_locale
end
def extract_locale_from_tld
parsed_locale = request.host.split('.').last
I18n.available_locales.map(&:to_s).include?(parsed_locale) ? parsed_locale : nil
end
请尝试使用此功能。它更清晰,更容易理解:
before_action :set_locale
...
private
def set_locale
parsed_locale = request.host.split('.').last
case parsed_locale
when 'de' then Il8n.locale = :de
when 'fr' then Il8n.locale = :fr
...
else
I18n.locale = :en #this is now your 'default'
end
end