Packages

ex_cldr

2.26.3
2.47.5 2.47.4 2.47.3 2.47.2 2.47.1 2.47.0 2.46.0 2.45.2 2.45.1 2.45.0 2.44.1 2.44.0 2.43.2 2.43.1 2.43.0 2.42.0 2.41.1 2.41.0 2.40.4 2.40.3 2.40.2 2.40.1 2.40.0 2.39.2 2.39.1 2.39.0 2.38.1 2.38.0 2.37.5 2.37.4 2.37.3 retired 2.37.2 2.37.1 2.37.0 2.36.0 2.35.1 2.35.0 retired 2.34.2 2.34.1 2.34.0 2.33.2 2.33.1 2.33.1-rc.0 2.33.0 2.32.1 2.32.0 2.31.0 2.30.0 2.29.0 2.28.0 2.27.1 2.27.0 retired 2.26.3 2.26.2 2.26.1 2.26.0 2.25.0 2.24.2 2.24.1 2.24.0 2.24.0-rc.6 2.24.0-rc.5 2.24.0-rc.4 2.24.0-rc.3 2.24.0-rc.2 2.24.0-rc.1 2.24.0-rc.0 2.23.2 2.23.1 2.23.0 2.22.1 2.22.0 2.21.0 2.20.0 2.20.0-rc.3 2.20.0-rc.2 2.20.0-rc.1 2.20.0-rc.0 2.19.1 2.19.0 2.18.2 2.18.1 2.18.0 2.18.0-rc.0 2.17.2 2.17.1 2.17.0 2.16.2 2.16.1 2.16.1-rc.0 2.16.0 2.15.0 2.14.1 2.14.0 2.14.0-rc.0 2.13.0 2.12.1 2.12.0 2.11.1 2.11.0 2.10.2 2.10.1 2.10.0 retired 2.9.0 2.8.1 2.8.0 2.7.2 2.7.1 2.7.0 2.6.2 2.6.1 2.6.0 2.5.0 2.4.3 2.4.2 2.4.1 2.4.0 2.3.2 2.3.1 2.3.0 2.2.7 2.2.6 2.2.5 2.2.4 2.2.3 2.2.2 2.2.1 2.2.0 2.1.0 2.0.4 2.0.3 2.0.2 2.0.1 2.0.0 2.0.0-rc.3 retired 2.0.0-rc.2 retired 2.0.0-rc.1 retired 2.0.0-rc.0 retired 1.8.2 1.8.1 1.8.0 1.7.1 1.7.0 1.6.4 1.6.3 1.6.2 1.6.1 1.6.0 1.5.2 1.5.1 1.5.0 1.4.5 1.4.4 1.4.3 1.4.2 1.4.1 1.4.0 retired 1.4.0-rc.3 retired 1.4.0-rc.2 retired 1.4.0-rc.1 retired 1.4.0-rc.0 retired 1.3.2 1.3.1 1.3.0 1.2.0 1.1.0 1.0.0 1.0.0-rc.3 retired 1.0.0-rc.2 retired 1.0.0-rc.1 retired 1.0.0-rc.0 retired 0.13.1 0.13.0 0.12.2 retired 0.12.1 retired 0.12.0 retired 0.11.0 retired 0.10.0 retired 0.9.0 retired 0.8.3 retired 0.8.2 retired 0.8.1 retired 0.8.0 retired 0.7.0 retired 0.6.2 retired 0.6.1 retired 0.6.0 retired 0.5.2 retired 0.5.1 retired 0.5.0 retired 0.4.2 retired 0.4.1 retired 0.4.0 retired 0.3.0 retired 0.2.1 retired 0.2.0 retired 0.1.3 retired 0.1.2 retired 0.1.1 retired 0.1.0 retired 0.0.20 retired 0.0.19 retired 0.0.18 retired 0.0.17 retired 0.0.16 retired 0.0.15 retired 0.0.14 retired 0.0.13 retired 0.0.12 retired 0.0.11 retired 0.0.10 retired 0.0.8 retired 0.0.7 retired 0.0.6 retired 0.0.5 retired 0.0.4 retired 0.0.3 retired

Common Locale Data Repository (CLDR) functions for Elixir to localize and format numbers, dates, lists, messages, languages, territories and units with support for over 700 locales for internationalized (i18n) and localized (L10N) applications.

Current section

Files

Jump to
ex_cldr lib cldr plug plug_accept_language.ex
Raw

lib/cldr/plug/plug_accept_language.ex

if Code.ensure_loaded?(Plug) do
defmodule Cldr.Plug.AcceptLanguage do
@moduledoc """
Parses the accept-language header if one is available and sets
`conn.private[:cldr_locale]` accordingly. The locale can
be later retrieved by `Cldr.Plug.AcceptLanguage.get_cldr_locale/1`
## Options
* `:cldr_backend` is any backend module. The default
is `Cldr.default_backend/0`. If no `:cldr_backend`
option is provided and no default backend is configured
then an exception will be raised.
* `:no_match_log_level` determines the logging level for
the case when no matching locale is configured to meet the users
request. The default is `:warn`. If set to `nil` then no logging
is performed.
## Example
# Using a specific backend to validate
# and match locales
plug Cldr.Plug.AcceptLanguage,
cldr_backend: MyApp.Cldr
# Using the default backend to validate
# and match locales
plug Cldr.Plug.AcceptLanguage
"""
import Plug.Conn
require Logger
@language_header "accept-language"
@default_log_level :warn
@doc false
def init(options \\ []) do
backend = Keyword.get_lazy(options, :cldr_backend, &Cldr.default_backend!/0)
log_level = Keyword.get(options, :no_match_log_level, @default_log_level)
%{backend: backend, log_level: log_level}
end
@doc false
def call(conn, options) do
case get_req_header(conn, @language_header) do
[accept_language] ->
put_private(conn, :cldr_locale, best_match(accept_language, options))
[accept_language | _] ->
put_private(conn, :cldr_locale, best_match(accept_language, options))
[] ->
put_private(conn, :cldr_locale, nil)
end
end
@doc """
Returns the locale which is the best match for the provided
accept-language header
"""
def best_match(nil, _) do
nil
end
def best_match(accept_language, options) do
case Cldr.AcceptLanguage.best_match(accept_language, options.backend) do
{:ok, locale} ->
locale
{:error, {Cldr.NoMatchingLocale = exception, reason}} ->
if options.log_level,
do: Logger.log(options.log_level, "#{inspect(exception)}: #{reason}")
nil
{:error, {exception, reason}} ->
Logger.warn("#{inspect(exception)}: #{reason}")
nil
end
end
@doc """
Return the locale set by `Cldr.Plug.AcceptLanguage`
"""
def get_cldr_locale(conn) do
conn.private[:cldr_locale]
end
end
end