Module: Philiprehberger::LocaleKit::AcceptLanguage

Defined in:
lib/philiprehberger/locale_kit/accept_language.rb

Overview

Parses HTTP Accept-Language headers into structured locale/quality pairs.

Handles the full Accept-Language syntax as defined in RFC 7231:

Accept-Language: en-US,en;q=0.9,zh-Hant;q=0.8,*;q=0.1

Class Method Summary collapse

Class Method Details

.parse(header) ⇒ Array<Hash>

Parses an Accept-Language header string.

Parameters:

  • header (String)

    the Accept-Language header value

Returns:

  • (Array<Hash>)

    sorted array of { locale:, quality: } hashes, highest quality first. Wildcard (*) entries are included with locale: nil.

Raises:

  • (ArgumentError)

    if header is not a String



16
17
18
19
20
21
22
23
# File 'lib/philiprehberger/locale_kit/accept_language.rb', line 16

def self.parse(header)
  raise ArgumentError, "header must be a String, got: #{header.class}" unless header.is_a?(String)

  return [] if header.strip.empty?

  entries = header.split(',').filter_map { |part| parse_entry(part.strip) }
  entries.sort_by { |e| [-e[:quality], entries.index(e)] }
end