Rails:当.co.uk域名时,将本地设置为“en”

时间:2014-07-11 09:50:08

标签: ruby-on-rails rails-i18n

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?

1 个答案:

答案 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