Cldr v0.12.2 Cldr.AcceptLanguage View Source
Tokenizer and parser for HTTP Accept-Language
header values as defined in
rfc2616.
The Accept-Language request-header field is similar to Accept, but restricts
the set of natural languages that are preferred as a response to the request.
Language tags function are provided in Cldr.LanguageTag
.
The format of an Accept-Language
header is as follows in ABNF
format:
Accept-Language = "Accept-Language" ":"
1#( language-range [ ";" "q" "=" qvalue ] )
language-range = ( ( 1*8ALPHA *( "-" 1*8ALPHA ) ) | "*" )
Each language-range MAY be given an associated quality value which represents an estimate of the user’s preference for the languages specified by that range. The quality value defaults to “q=1”. For example,
Accept-Language: da, en-gb;q=0.8, en;q=0.7
would mean: “I prefer Danish, but will accept British English and other types of English.”
Link to this section Summary
Functions
Parse an Accept-Language
string and return the best match for
a configured Cldr
locale
Filters the returned results of parse/1
to return
only the error tuples
Parses an Accept-Language
header value in its string
or tokenized form to return a tuple of the form
{:ok, [{quality, %Cldr.LanguageTag{}}, ...]}
sorted by quality
Parses an Accept-Language
header value in its string
or tokenized form to produce a list of tuples of the form
[{quality, %Cldr.LanguageTag{}}, ...]
sorted by quality
in decending order
Splits the language ranges for an Accept-Language
header
value into tuples {quality, language}
Link to this section Functions
Parse an Accept-Language
string and return the best match for
a configured Cldr
locale.
accept_langauge
is a string representing an accept language header
Returns:
{:ok, language_tag}
or{:error, reason}
Examples
iex> Cldr.AcceptLanguage.best_match "da;q=0.1,zh-TW;q=0.3"
{
:ok,
%Cldr.LanguageTag{
canonical_locale_name: "zh-Hant-TW",
cldr_locale_name: "zh-Hant",
extensions: %{},
language: "zh",
locale: %{},
private_use: [],
rbnf_locale_name: "zh-Hant",
requested_locale_name: "zh-TW",
script: "Hant",
territory: "TW",
transform: %{},
variant: nil
}
}
iex> Cldr.AcceptLanguage.best_match "en,zh-TW;q=0.3"
{
:ok,
%Cldr.LanguageTag{
canonical_locale_name: "en-Latn-US",
cldr_locale_name: "en",
extensions: %{},
language: "en",
locale: %{},
private_use: [],
rbnf_locale_name: "en",
requested_locale_name: "en",
script: "Latn",
territory: "US",
transform: %{},
variant: nil
}
}
iex> Cldr.AcceptLanguage.best_match "xx,yy;q=0.3"
{
:error,
{Cldr.NoMatchingLocale,
"No configured locale could be matched to \"xx,yy;q=0.3\""}
}
iex> Cldr.AcceptLanguage.best_match "x"
{
:error,
{Cldr.AcceptLanguageError,
"Could not parse language tag. Error was detected at 'x'"}
}
Filters the returned results of parse/1
to return
only the error tuples.
Example
iex> Cldr.AcceptLanguage.parse!("da,zh-TW;q=0.3,X") |> Cldr.AcceptLanguage.errors
[{:error,
{Cldr.InvalidLanguageTag,
"Could not parse language tag. Error was detected at 'x'"}, "x"}]
Parses an Accept-Language
header value in its string
or tokenized form to return a tuple of the form
{:ok, [{quality, %Cldr.LanguageTag{}}, ...]}
sorted by quality.
If not valid language tags are found, the tuple {:error, reason}
is returned.
If at least one valid language tag is found but errors are also
detected on one more more tags, an {ok, list}
tuple is returned
wuth an error tuple for each invalid tag added at the end of the list.
Example
iex> Cldr.AcceptLanguage.parse "da,zh-TW;q=0.3"
{:ok,
[{1.0,
%Cldr.LanguageTag{canonical_locale_name: "da-Latn-DK",
cldr_locale_name: "da", extensions: %{}, language: "da",
locale: %{}, private_use: [], rbnf_locale_name: "da",
territory: "DK", requested_locale_name: "da", script: "Latn",
transform: %{}, variant: nil}},
{0.3,
%Cldr.LanguageTag{canonical_locale_name: "zh-Hant-TW",
cldr_locale_name: "zh-Hant", extensions: %{}, language: "zh",
locale: %{}, private_use: [], rbnf_locale_name: "zh-Hant",
territory: "TW", requested_locale_name: "zh-TW", script: "Hant",
transform: %{}, variant: nil}}]}
iex> Cldr.AcceptLanguage.parse "X"
{:error,
{Cldr.AcceptLanguageError,
"Could not parse language tag. Error was detected at 'x'"}}
iex> Cldr.AcceptLanguage.parse "da,zh-TW;q=0.3,X"
{:ok,
[{1.0,
%Cldr.LanguageTag{canonical_locale_name: "da-Latn-DK",
cldr_locale_name: "da", extensions: %{}, language: "da",
locale: %{}, private_use: [], rbnf_locale_name: "da",
territory: "DK", requested_locale_name: "da", script: "Latn",
transform: %{}, variant: nil}},
{0.3,
%Cldr.LanguageTag{canonical_locale_name: "zh-Hant-TW",
cldr_locale_name: "zh-Hant", extensions: %{}, language: "zh",
locale: %{}, private_use: [], rbnf_locale_name: "zh-Hant",
territory: "TW", requested_locale_name: "zh-TW", script: "Hant",
transform: %{}, variant: nil}},
{:error,
{Cldr.InvalidLanguageTag,
"Could not parse language tag. Error was detected at 'x'"},
"x"}]}
Parses an Accept-Language
header value in its string
or tokenized form to produce a list of tuples of the form
[{quality, %Cldr.LanguageTag{}}, ...]
sorted by quality
in decending order.
If no valid language tags are found, an exception is raised.
If at least one valid language tag is found but errors are also
detected on one more more tags, an {ok, list}
tuple is returned
wuth an error tuple for each invalid tag added at the end of the list.
Example
iex> Cldr.AcceptLanguage.parse! "da,zh-TW;q=0.3"
[{1.0,
%Cldr.LanguageTag{canonical_locale_name: "da-Latn-DK",
cldr_locale_name: "da", extensions: %{}, language: "da",
locale: %{}, private_use: [], rbnf_locale_name: "da", territory: "DK",
requested_locale_name: "da", script: "Latn", transform: %{},
variant: nil}},
{0.3,
%Cldr.LanguageTag{canonical_locale_name: "zh-Hant-TW",
cldr_locale_name: "zh-Hant", extensions: %{}, language: "zh",
locale: %{}, private_use: [], rbnf_locale_name: "zh-Hant",
territory: "TW", requested_locale_name: "zh-TW", script: "Hant",
transform: %{}, variant: nil}}]
Cldr.AcceptLanguage.parse! "X"
** (Cldr.AcceptLanguageError) Could not parse language tag. Error was detected at 'x'
(ex_cldr) lib/cldr/accept_language.ex:168: Cldr.AcceptLanguage.parse!/1
iex> Cldr.AcceptLanguage.parse! "da,zh-TW;q=0.3,X"
[{1.0,
%Cldr.LanguageTag{canonical_locale_name: "da-Latn-DK",
cldr_locale_name: "da", extensions: %{}, language: "da",
locale: %{}, private_use: [], rbnf_locale_name: "da", territory: "DK",
requested_locale_name: "da", script: "Latn", transform: %{},
variant: nil}},
{0.3,
%Cldr.LanguageTag{canonical_locale_name: "zh-Hant-TW",
cldr_locale_name: "zh-Hant", extensions: %{}, language: "zh",
locale: %{}, private_use: [], rbnf_locale_name: "zh-Hant",
territory: "TW", requested_locale_name: "zh-TW", script: "Hant",
transform: %{}, variant: nil}},
{:error,
{Cldr.InvalidLanguageTag,
"Could not parse language tag. Error was detected at 'x'"}, "x"}]