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

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

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

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


person Tom Prats    schedule 26.12.2015    source источник


Ответы (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'])
person spickermann    schedule 26.12.2015
comment
Список также можно взять со страницы реестра IANA — stackoverflow.com/a/13899628/794242 - person Wand Maker; 26.12.2015