Получение языка / названия страны из accept-language в Ruby on Rails

Я пытаюсь собрать аналитику, основанную на пользователях accept-language заголовок. Было бы очень полезно включить "en-US,en;q=0.8" в English (United States),

Единственный способ, который я действительно видел, - это использовать I18n и поместить имя в файл yaml. Это не похоже на отличное решение, потому что мне придется "переводить" каждую возможность. Было бы целесообразно использовать его для выбора предпочтительного языка пользователя и перевода страницы, но это другой вариант использования.

Могу ли я использовать какой-нибудь драгоценный камень / гист, чтобы найти отображаемое имя языка?

1 ответ

Я просто скопировал бы список языков и кодов стран из Википедии и перенес их в хеши:

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'])
Другие вопросы по тегам