Localize.AcceptLanguage (Localize Web v0.6.0)

Copy Markdown View Source

Parses HTTP Accept-Language headers and finds the best matching locale.

The Accept-Language header is parsed per RFC 2616 into quality-tagged language tags which are then matched against available locales using Localize.validate_locale/1. The primary entry point is best_match/1 which returns the highest-quality successfully validated locale.

Summary

Functions

Returns the best matching locale for the given Accept-Language header.

Parses an Accept-Language header and validates each language tag against known locales.

Tokenizes an Accept-Language header string into a list of {quality, language_tag_string} tuples sorted by quality descending.

Functions

best_match(header)

@spec best_match(String.t()) ::
  {:ok, Localize.LanguageTag.t()} | {:error, Exception.t()}

Returns the best matching locale for the given Accept-Language header.

Parses the header, validates each language tag, and returns the highest-quality successfully validated locale.

Arguments

  • header is an Accept-Language header string.

Returns

  • {:ok, Localize.LanguageTag.t()} or

  • {:error, Localize.NoMatchingLocaleError.t()}

Examples

iex> {:ok, locale} = Localize.AcceptLanguage.best_match("en-US,fr;q=0.8")
iex> locale.language
"en"

parse(header)

@spec parse(String.t()) ::
  {:ok, [{float(), {:ok, Localize.LanguageTag.t()} | {:error, term()}}]}

Parses an Accept-Language header and validates each language tag against known locales.

Arguments

  • header is an Accept-Language header string.

Returns

  • {:ok, [{quality, result}]} where result is either {:ok, Localize.LanguageTag.t()} or {:error, reason}.

Examples

iex> {:ok, results} = Localize.AcceptLanguage.parse("en-US,zh;q=0.8")
iex> length(results)
2

tokenize(header)

@spec tokenize(String.t()) :: [{float(), String.t()}]

Tokenizes an Accept-Language header string into a list of {quality, language_tag_string} tuples sorted by quality descending.

Arguments

  • header is an Accept-Language header string.

Returns

  • A list of {quality, language_tag_string} tuples.

Examples

iex> Localize.AcceptLanguage.tokenize("en-US,en;q=0.9,fr;q=0.8")
[{1.0, "en-us"}, {0.9, "en"}, {0.8, "fr"}]