在Ruby on Rails中从accept-language获取语言/国家/地区名称

时间:2015-12-26 06:08:45

标签: ruby-on-rails ruby rails-i18n http-accept-language

我正在尝试根据用户的accept-language标头收集一些分析。将"en-US,en;q=0.8"转换为English (United States)

会非常有帮助

我真正看到的唯一方法是使用I18n并将名称放在yaml文件中。这似乎不是一个很好的解决方案,因为我必须“翻译”每种可能性。如果我使用它来获取用户的首选语言并翻译页面,那将是有意义的,但这是一个不同的用例。

我可以使用任何宝石/要点来查找语言的显示名称吗?

1 个答案:

答案 0 :(得分:1)

我只想从维基百科中复制languagecountry代码列表并将其转换为哈希值:

LANGUAGE_CODES = {
  aa: 'Afar',
  ab: 'Abkhaz',
  # ...
  zu: 'Zulu'
}

COUNTRY_CODES = {
  AD: 'Andorra',
  AE: 'United Arab Emirates',
  # ...
  ZW: 'Zimbabwe'
}

使用此哈希值,一个简单的方法,如下所示应该能够提取您感兴趣的语言和国家/地区信息:

def language_info(accepted_language)
  language, country = accepted_language.scan(/(\w{2})-(\w{2})/)

  if language && country
    "#{LANGUAGE_CODES[language]} (#{COUNTRY_CODES[country]})"
  end
end

# language_info(request.env['HTTP_ACCEPT_LANGUAGE'])