From 9f8b04ce777caeaa2864ccd70e31fa32801eca07 Mon Sep 17 00:00:00 2001
From: vinibrsl
See
- Similar to Example: Similar to Example: Parses HTTP 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 The format of an insert_all/2
but with the following differences:Repo.query!("create table ecto_ch_demo(a UInt64, b String) engine Null")
+
insert_all/2
but with the following differences:
+{100_000, nil} = Repo.insert_stream("ecto_ch_demo", rows, types: [a: Ch.Types.u64(), b: :string])Repo.query!("create table ecto_ch_demo(a UInt64, b String) engine Null")
-defmodule Demo do
+defmodule Demo do
use Ecto.Schema
@primary_key false
- schema "ecto_ch_demo" do
+ schema "ecto_ch_demo" do
field :a, Ch, type: "UInt64"
field :b, :string
- end
-end
+ end
+end
-rows = Stream.map(1..100_000, fn i -> %{a: i, b: to_string(i)} end)
-{100_000, nil} = Repo.insert_stream(Demo, rows)
+rows = Stream.map(1..100_000, fn i -> %{a: i, b: to_string(i)} end)
+{100_000, nil} = Repo.insert_stream(Demo, rows)
# schemaless
-{100_000, nil} = Repo.insert_stream("ecto_ch_demo", rows, types: [a: Ch.Types.u64(), b: :string])
Accept-Language
header values as defined in
rfc2616.Cldr.LanguageTag
.Accept-Language
header is as follows in ABNF
format: Accept-Language = "Accept-Language" ":"
+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 + 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."
@@ -145,7 +145,7 @@ quality value defaults to "q=1". For example,Parse an Accept-Language
string and return the best match for
-a configured Cldr
locale.
+a configured Cldr
locale.
@@ -210,13 +210,13 @@ Functions
@spec best_match(String.t()) ::
- {:ok, Cldr.LanguageTag.t()}
+ {:ok, Cldr.LanguageTag.t()}
| {:error, {Cldr.AcceptLanguageError | Cldr.NoMatchingLocale, String.t()}}
Parse an Accept-Language
string and return the best match for
-a configured Cldr
locale.
+a configured Cldr
locale.
arguments
@@ -234,54 +234,54 @@ a configured iex> Plausible.Cldr.AcceptLanguage.best_match("da;q=0.1,zh-TW;q=0.3", TestBackend.Cldr)
-{:ok,
- %Cldr.LanguageTag{
+iex> Plausible.Cldr.AcceptLanguage.best_match("da;q=0.1,zh-TW;q=0.3", TestBackend.Cldr)
+{:ok,
+ %Cldr.LanguageTag{
backend: TestBackend.Cldr,
canonical_locale_name: "zh-TW",
cldr_locale_name: :"zh-Hant",
- language_subtags: [],
- extensions: %{},
+ language_subtags: [],
+ extensions: %{},
gettext_locale_name: nil,
language: "zh",
- locale: %{},
- private_use: [],
+ locale: %{},
+ private_use: [],
rbnf_locale_name: :"zh-Hant",
requested_locale_name: "zh-TW",
script: :Hant,
territory: :TW,
- transform: %{},
- language_variants: []
- }}
+ transform: %{},
+ language_variants: []
+ }}
-iex> Plausible.Cldr.AcceptLanguage.best_match("da;q=0.1,zh-TW;q=0.3", TestBackend.Cldr)
-{:ok,
- %Cldr.LanguageTag{
+iex> Plausible.Cldr.AcceptLanguage.best_match("da;q=0.1,zh-TW;q=0.3", TestBackend.Cldr)
+{:ok,
+ %Cldr.LanguageTag{
backend: TestBackend.Cldr,
canonical_locale_name: "zh-TW",
cldr_locale_name: :"zh-Hant",
- language_subtags: [],
- extensions: %{},
+ language_subtags: [],
+ extensions: %{},
gettext_locale_name: nil,
language: "zh",
- locale: %{},
- private_use: [],
+ locale: %{},
+ private_use: [],
rbnf_locale_name: :"zh-Hant",
requested_locale_name: "zh-TW",
script: :Hant,
territory: :TW,
- transform: %{},
- language_variants: []
- }}
+ transform: %{},
+ language_variants: []
+ }}
-iex> Plausible.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> Plausible.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> Plausible.Cldr.AcceptLanguage.best_match("invalid_tag")
-{:error, {Cldr.LanguageTag.ParseError,
- "Expected a BCP47 language tag. Could not parse the remaining \"g\" starting at position 11"}}
+iex> Plausible.Cldr.AcceptLanguage.best_match("invalid_tag")
+{:error, {Cldr.LanguageTag.ParseError,
+ "Expected a BCP47 language tag. Could not parse the remaining \"g\" starting at position 11"}}
@spec parse([{float(), String.t()}, ...] | String.t()) ::
{:ok,
[
- {float(), Cldr.LanguageTag.t()}
+ {float(), Cldr.LanguageTag.t()}
| {:error, {Cldr.InvalidLanguageTag, String.t()}},
...
]}
@@ -328,7 +328,7 @@ or tokenized form to return a tuple of the form
accept-language
is any string in the format defined by
rfc2616
backend
is any module that includes use Cldr
and therefore
-is a Cldr
backend module
+is a Cldr
backend module
returns
@@ -342,95 +342,95 @@ 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", TestBackend.Cldr)
-{:ok,
- [
- {1.0,
- %Cldr.LanguageTag{
+iex> Cldr.AcceptLanguage.parse("da,zh-TW;q=0.3", TestBackend.Cldr)
+{:ok,
+ [
+ {1.0,
+ %Cldr.LanguageTag{
backend: TestBackend.Cldr,
canonical_locale_name: "da",
cldr_locale_name: :da,
- language_subtags: [],
- extensions: %{},
+ language_subtags: [],
+ extensions: %{},
gettext_locale_name: nil,
language: "da",
- locale: %{},
- private_use: [],
+ locale: %{},
+ private_use: [],
rbnf_locale_name: :da,
requested_locale_name: "da",
script: :Latn,
territory: :DK,
- transform: %{},
- language_variants: []
- }},
- {0.3,
- %Cldr.LanguageTag{
+ transform: %{},
+ language_variants: []
+ }},
+ {0.3,
+ %Cldr.LanguageTag{
backend: TestBackend.Cldr,
canonical_locale_name: "zh-TW",
cldr_locale_name: :"zh-Hant",
- language_subtags: [],
- extensions: %{},
+ language_subtags: [],
+ extensions: %{},
gettext_locale_name: nil,
language: "zh",
- locale: %{},
- private_use: [],
+ locale: %{},
+ private_use: [],
rbnf_locale_name: :"zh-Hant",
requested_locale_name: "zh-TW",
script: :Hant,
territory: :TW,
- transform: %{},
- language_variants: []
- }}
- ]}
+ transform: %{},
+ language_variants: []
+ }}
+ ]}
-iex> Plausible.Cldr.AcceptLanguage.parse("invalid_tag")
-{:error,
- {Cldr.LanguageTag.ParseError,
- "Expected a BCP47 language tag. Could not parse the remaining \"g\" starting at position 11"}}
+iex> Plausible.Cldr.AcceptLanguage.parse("invalid_tag")
+{:error,
+ {Cldr.LanguageTag.ParseError,
+ "Expected a BCP47 language tag. Could not parse the remaining \"g\" starting at position 11"}}
-iex> Plausible.Cldr.AcceptLanguage.parse("da,zh-TW;q=0.3,invalid_tag")
-{:ok,
- [
- {1.0,
- %Cldr.LanguageTag{
+iex> Plausible.Cldr.AcceptLanguage.parse("da,zh-TW;q=0.3,invalid_tag")
+{:ok,
+ [
+ {1.0,
+ %Cldr.LanguageTag{
backend: TestBackend.Cldr,
canonical_locale_name: "da",
cldr_locale_name: :da,
- language_subtags: [],
- extensions: %{},
+ language_subtags: [],
+ extensions: %{},
gettext_locale_name: nil,
language: "da",
- locale: %{},
- private_use: [],
+ locale: %{},
+ private_use: [],
rbnf_locale_name: :da,
requested_locale_name: "da",
script: :Latn,
territory: :DK,
- transform: %{},
- language_variants: []
- }},
- {0.3,
- %Cldr.LanguageTag{
+ transform: %{},
+ language_variants: []
+ }},
+ {0.3,
+ %Cldr.LanguageTag{
backend: TestBackend.Cldr,
canonical_locale_name: "zh-TW",
cldr_locale_name: :"zh-Hant",
- language_subtags: [],
- extensions: %{},
+ language_subtags: [],
+ extensions: %{},
gettext_locale_name: nil,
language: "zh",
- locale: %{},
- private_use: [],
+ locale: %{},
+ private_use: [],
rbnf_locale_name: :"zh-Hant",
requested_locale_name: "zh-TW",
script: :Hant,
territory: :TW,
- transform: %{},
- language_variants: []
- }},
- {:error,
- {Cldr.LanguageTag.ParseError,
- "Expected a BCP47 language tag. Could not parse the remaining \"g\" starting at position 11"}}
- ]}
+ transform: %{},
+ language_variants: []
+ }},
+ {:error,
+ {Cldr.LanguageTag.ParseError,
+ "Expected a BCP47 language tag. Could not parse the remaining \"g\" starting at position 11"}}
+ ]}
{:ok, [{quality, language_tag}, ...]}
or
raises a Cldr.AcceptLanguageError
exception
If at least one valid language tag is found but errors are also +
{:ok, [{quality, language_tag}, ...]}
or
raises a Cldr.AcceptLanguageError
exception
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.
iex> Plausible.Cldr.AcceptLanguage.parse!("da,zh-TW;q=0.3")
-[
- {1.0,
- %Cldr.LanguageTag{
+iex> Plausible.Cldr.AcceptLanguage.parse!("da,zh-TW;q=0.3")
+[
+ {1.0,
+ %Cldr.LanguageTag{
backend: TestBackend.Cldr,
canonical_locale_name: "da",
cldr_locale_name: :da,
- language_subtags: [],
- extensions: %{},
+ language_subtags: [],
+ extensions: %{},
gettext_locale_name: nil,
language: "da",
- locale: %{},
- private_use: [],
+ locale: %{},
+ private_use: [],
rbnf_locale_name: :da,
requested_locale_name: "da",
script: :Latn,
territory: :DK,
- transform: %{},
- language_variants: []
- }},
- {0.3,
- %Cldr.LanguageTag{
+ transform: %{},
+ language_variants: []
+ }},
+ {0.3,
+ %Cldr.LanguageTag{
backend: TestBackend.Cldr,
canonical_locale_name: "zh-TW",
cldr_locale_name: :"zh-Hant",
- language_subtags: [],
- extensions: %{},
+ language_subtags: [],
+ extensions: %{},
gettext_locale_name: nil,
language: "zh",
- locale: %{},
- private_use: [],
+ locale: %{},
+ private_use: [],
rbnf_locale_name: :"zh-Hant",
requested_locale_name: "zh-TW",
script: :Hant,
territory: :TW,
- transform: %{},
- language_variants: []
- }}
-]
+ transform: %{},
+ language_variants: []
+ }}
+]
Plausible.Cldr.AcceptLanguage.parse! "invalid_tag"
** (Cldr.AcceptLanguageError) "Expected a BCP47 language tag. Could not parse the remaining "g" starting at position 11
(ex_cldr) lib/cldr/accept_language.ex:304: Cldr.AcceptLanguage.parse!/1
-iex> Plausible.Cldr.AcceptLanguage.parse!("da,zh-TW;q=0.3,invalid_tag")
-[
- {1.0,
- %Cldr.LanguageTag{
+iex> Plausible.Cldr.AcceptLanguage.parse!("da,zh-TW;q=0.3,invalid_tag")
+[
+ {1.0,
+ %Cldr.LanguageTag{
backend: TestBackend.Cldr,
canonical_locale_name: "da",
cldr_locale_name: :da,
- language_subtags: [],
- extensions: %{},
+ language_subtags: [],
+ extensions: %{},
gettext_locale_name: nil,
language: "da",
- locale: %{},
- private_use: [],
+ locale: %{},
+ private_use: [],
rbnf_locale_name: :da,
requested_locale_name: "da",
script: :Latn,
territory: :DK,
- transform: %{},
- language_variants: []
- }},
- {0.3,
- %Cldr.LanguageTag{
+ transform: %{},
+ language_variants: []
+ }},
+ {0.3,
+ %Cldr.LanguageTag{
backend: TestBackend.Cldr,
canonical_locale_name: "zh-TW",
cldr_locale_name: :"zh-Hant",
- language_subtags: [],
- extensions: %{},
+ language_subtags: [],
+ extensions: %{},
gettext_locale_name: nil,
language: "zh",
- locale: %{},
- private_use: [],
+ locale: %{},
+ private_use: [],
rbnf_locale_name: :"zh-Hant",
requested_locale_name: "zh-TW",
script: :Hant,
territory: :TW,
- transform: %{},
- language_variants: []
- }},
- {:error,
- {Cldr.LanguageTag.ParseError,
- "Expected a BCP47 language tag. Could not parse the remaining \"g\" starting at position 11"}}
-]
+ transform: %{},
+ language_variants: []
+ }},
+ {:error,
+ {Cldr.LanguageTag.ParseError,
+ "Expected a BCP47 language tag. Could not parse the remaining \"g\" starting at position 11"}}
+]
@spec currencies_for_locale( - Cldr.Locale.locale_name() | Cldr.LanguageTag.t(), + Cldr.Locale.locale_name() | Cldr.LanguageTag.t(), only :: Cldr.Currency.filter(), except :: Cldr.Currency.filter() ) :: {:ok, map()} | {:error, {module(), String.t()}}
@spec currencies_for_locale( - Cldr.Locale.locale_name() | Cldr.LanguageTag.t(), + Cldr.Locale.locale_name() | Cldr.LanguageTag.t(), only :: Cldr.Currency.filter(), except :: Cldr.Currency.filter() ) :: map() | no_return()@@ -376,7 +376,7 @@ a given locale.
MyApp.Cldr.known_locale_names/0
-or a Cldr.LanguageTag
struct returned by MyApp.Cldr.Locale.new!/1
currency_status
is :all
, :current
, :historic
,
+or a Cldr.LanguageTag
struct returned by MyApp.Cldr.Locale.new!/1
currency_status
is :all
, :current
, :historic
,
unannotated
or :tender
; or a list of one or more status.
The default is :all
. See Cldr.Currency.currency_filter/2
.
:all
. See FJD: %Cldr.Currency{
+ %{ FJD: %Cldr.Currency{
cash_digits: 2,
cash_rounding: 0,
code: "FJD",
- count: %{one: "Fijian dollar", other: "Fijian dollars"},
+ count: %{one: "Fijian dollar", other: "Fijian dollars"},
digits: 2,
from: nil,
iso_digits: 2,
@@ -406,12 +406,12 @@ The default is :all
. See symbol: "FJD",
tender: true,
to: nil
- },
- SUR: %Cldr.Currency{
+ },
+ SUR: %Cldr.Currency{
cash_digits: 2,
cash_rounding: 0,
code: "SUR",
- count: %{one: "Soviet rouble", other: "Soviet roubles"},
+ count: %{one: "Soviet rouble", other: "Soviet roubles"},
digits: 2,
from: nil,
iso_digits: nil,
@@ -421,7 +421,7 @@ The default is :all
. See symbol: "SUR",
tender: true,
to: nil
- },
+ },
...
}}
@@ -457,7 +457,7 @@ a given locale and raises on error.MyApp.Cldr.known_locale_names/0
-or a Cldr.LanguageTag
struct returned by MyApp.Cldr.Locale.new!/1
currency_status
is :all
, :current
, :historic
,
+or a Cldr.LanguageTag
struct returned by MyApp.Cldr.Locale.new!/1
currency_status
is :all
, :current
, :historic
,
unannotated
or :tender
; or a list of one or more status.
The default is :all
. See Cldr.Currency.currency_filter/2
.
:all
. See FJD: %Cldr.Currency{
+ => %{FJD: %Cldr.Currency{
cash_digits: 2,
cash_rounding: 0,
code: "FJD",
- count: %{one: "Fijian dollar", other: "Fijian dollars"},
+ count: %{one: "Fijian dollar", other: "Fijian dollars"},
digits: 2,
from: nil,
iso_digits: 2,
@@ -486,12 +486,12 @@ The default is :all
. See symbol: "FJD",
tender: true,
to: nil
-},
-SUR: %Cldr.Currency{
+},
+SUR: %Cldr.Currency{
cash_digits: 2,
cash_rounding: 0,
code: "SUR",
- count: %{one: "Soviet rouble", other: "Soviet roubles"},
+ count: %{one: "Soviet rouble", other: "Soviet roubles"},
digits: 2,
from: nil,
iso_digits: nil,
@@ -501,7 +501,7 @@ The default is :all
. See symbol: "SUR",
tender: true,
to: nil
-},
+},
...
}
@@ -546,8 +546,8 @@ The default is:all
. See :locale is any valid locale name returned by Cldr.known_locale_names/1
-or a Cldr.LanguageTag
struct returned by Cldr.Locale.new!/2
:locale
is any valid locale name returned by Cldr.known_locale_names/1
+or a Cldr.LanguageTag
struct returned by Cldr.Locale.new!/2
returns
@@ -559,13 +559,13 @@ or a
Examples
iex> Plausible.Cldr.Currency.currency_for_code("AUD")
-{:ok,
- %Cldr.Currency{
+iex> Plausible.Cldr.Currency.currency_for_code("AUD")
+{:ok,
+ %Cldr.Currency{
cash_digits: 2,
cash_rounding: 0,
code: "AUD",
- count: %{one: "Australian dollar", other: "Australian dollars"},
+ count: %{one: "Australian dollar", other: "Australian dollars"},
digits: 2,
iso_digits: 2,
name: "Australian Dollar",
@@ -573,15 +573,15 @@ or a rounding: 0,
symbol: "A$",
tender: true
-}}
+}}
-iex> Plausible.Cldr.Currency.currency_for_code("THB")
-{:ok,
- %Cldr.Currency{
+iex> Plausible.Cldr.Currency.currency_for_code("THB")
+{:ok,
+ %Cldr.Currency{
cash_digits: 2,
cash_rounding: 0,
code: "THB",
- count: %{one: "Thai baht", other: "Thai baht"},
+ count: %{one: "Thai baht", other: "Thai baht"},
digits: 2,
iso_digits: 2,
name: "Thai Baht",
@@ -589,7 +589,7 @@ or a rounding: 0,
symbol: "THB",
tender: true
-}}
+}}
Options
:locale
is any valid locale name returned by Cldr.known_locale_names/1
-or a Cldr.LanguageTag
struct returned by Cldr.Locale.new!/2
:locale
is any valid locale name returned by Cldr.known_locale_names/1
+or a Cldr.LanguageTag
struct returned by Cldr.Locale.new!/2
returns
@@ -648,12 +648,12 @@ or a
Examples
iex> Plausible.Cldr.Currency.currency_for_code!("AUD")
-%Cldr.Currency{
+iex> Plausible.Cldr.Currency.currency_for_code!("AUD")
+%Cldr.Currency{
cash_digits: 2,
cash_rounding: 0,
code: "AUD",
- count: %{one: "Australian dollar", other: "Australian dollars"},
+ count: %{one: "Australian dollar", other: "Australian dollars"},
digits: 2,
iso_digits: 2,
name: "Australian Dollar",
@@ -661,14 +661,14 @@ or a rounding: 0,
symbol: "A$",
tender: true
-}
+}
-iex> Plausible.Cldr.Currency.currency_for_code!("THB")
-%Cldr.Currency{
+iex> Plausible.Cldr.Currency.currency_for_code!("THB")
+%Cldr.Currency{
cash_digits: 2,
cash_rounding: 0,
code: "THB",
- count: %{one: "Thai baht", other: "Thai baht"},
+ count: %{one: "Thai baht", other: "Thai baht"},
digits: 2,
iso_digits: 2,
name: "Thai Baht",
@@ -676,7 +676,7 @@ or a rounding: 0,
symbol: "THB",
tender: true
-}
+}
Arguments
locale
is a Cldr.LanguageTag
struct returned by
-Cldr.Locale.new!/2
locale
is a Cldr.LanguageTag
struct returned by
+Cldr.Locale.new!/2
returns
@@ -717,11 +717,11 @@ or a
Examples
iex> {:ok, locale} = Plausible.Cldr.validate_locale "en"
+iex> {:ok, locale} = Plausible.Cldr.validate_locale "en"
iex> Plausible.Cldr.Currency.currency_from_locale locale
:USD
-iex> {:ok, locale} = Plausible.Cldr.validate_locale "en-AU"
+iex> {:ok, locale} = Plausible.Cldr.validate_locale "en-AU"
iex> Plausible.Cldr.Currency.currency_from_locale locale
:AUD
@@ -750,7 +750,7 @@ or a
- @spec currency_history_for_locale(Cldr.LanguageTag.t() | Cldr.Locale.locale_name()) ::
+ @spec currency_history_for_locale(Cldr.LanguageTag.t() | Cldr.Locale.locale_name()) ::
map() | {:error, {module(), String.t()}}
locale
is any valid locale name returned by MyApp.Cldr.known_locale_names/0
-or a Cldr.LanguageTag
struct returned by MyApp.Cldr.Locale.new!/1
Cldr.LanguageTag
struct returned by MyApp.Cldr.Locale.new!/1
example
Exampleiex> MyApp.Cldr.Currency.currency_history_for_locale "en"
-{:ok,
- %{
- USD: %{from: ~D[1792-01-01], to: nil},
- USN: %{tender: false},
- USS: %{from: nil, tender: false, to: ~D[2014-03-01]}
- }
-}
+{:ok,
+ %{
+ USD: %{from: ~D[1792-01-01], to: nil},
+ USN: %{tender: false},
+ USS: %{from: nil, tender: false, to: ~D[2014-03-01]}
+ }
+}
@spec currency_strings(
- Cldr.LanguageTag.t() | Cldr.Locale.locale_name(),
+ Cldr.LanguageTag.t() | Cldr.Locale.locale_name(),
only :: Cldr.Currency.filter(),
except :: Cldr.Currency.filter()
) :: {:ok, map()} | {:error, {module(), String.t()}}
@@ -821,7 +821,7 @@ representing a currency in a locale-specific manner.locale
is any valid locale name returned by MyApp.Cldr.known_locale_names/0
-or a Cldr.LanguageTag
struct returned by MyApp.Cldr.Locale.new!/1
currency_status
is :all
, :current
, :historic
,
+or a Cldr.LanguageTag
struct returned by MyApp.Cldr.Locale.new!/1
currency_status
is :all
, :current
, :historic
,
unannotated
or :tender
; or a list of one or more status.
The default is :all
. See Cldr.Currency.currency_filter/2
.
:all
. See MyApp.Cldr.Currency.currency_strings "en"
-=> {:ok,
- %{
+=> {:ok,
+ %{
"mexican silver pesos" => :MXP,
"sudanese dinar" => :SDD,
"bad" => :BAD,
@@ -847,7 +847,7 @@ The default is :all
. See "guyanaese dollars" => :GYD,
"equatorial guinean ekwele" => :GQE,
...
- }}
+ }}
:all
. See
@spec currency_strings!(
- Cldr.LanguageTag.t() | Cldr.Locale.locale_name(),
+ Cldr.LanguageTag.t() | Cldr.Locale.locale_name(),
only :: Cldr.Currency.filter(),
except :: Cldr.Currency.filter()
) :: map() | no_return()
@@ -892,7 +892,7 @@ representing a currency in a locale-specific manner.MyApp.Cldr.known_locale_names/0
-or a Cldr.LanguageTag
struct returned by MyApp.Cldr.Locale.new!/1
currency_status
is :all
, :current
, :historic
,
+or a Cldr.LanguageTag
struct returned by MyApp.Cldr.Locale.new!/1
currency_status
is :all
, :current
, :historic
,
unannotated
or :tender
; or a list of one or more status.
The default is :all
. See Cldr.Currency.currency_filter/2
.
:all
. See MyApp.Cldr.Currency.currency_strings! "en"
-=> %{
+=> %{
"mexican silver pesos" => :MXP,
"sudanese dinar" => :SDD,
"bad" => :BAD,
@@ -917,7 +917,7 @@ The default is :all
. See "guyanaese dollars" => :GYD,
"equatorial guinean ekwele" => :GQE,
...
- }
+ }
MyApp.Cldr.known_locale_names/0
-or a Cldr.LanguageTag
struct returned by MyApp.Cldr.Locale.new!/1
Cldr.LanguageTag
struct returned by MyApp.Cldr.Locale.new!/1
example
@@ -986,7 +986,7 @@ or a
@spec current_territory_currencies() :: %{
- required(Cldr.Locale.territory_code()) => Cldr.Currency.code()
+ required(Cldr.Locale.territory_code()) => Cldr.Currency.code()
}
@@ -1006,7 +1006,7 @@ mapping is returned for that territory.iex> Plausible.Cldr.Currency.current_territory_currencies()
+iex> Plausible.Cldr.Currency.current_territory_currencies()
0.05
. Optional.iex> Plausible.Cldr.Currency.new(:XAE, name: "Custom Name", digits: 0)
+{:ok,
+ %Cldr.Currency{
alt_code: :XAE,
cash_digits: 0,
cash_rounding: nil,
code: :XAE,
- count: %{other: "Custom Name"},
+ count: %{other: "Custom Name"},
digits: 0,
from: nil,
iso_digits: 0,
@@ -1266,11 +1266,11 @@ such as 0.05
. Optional.symbol
: "XAE",
tender: false,
to: nil
- }}
-iex> MyApp.Cldr.Currency.new(:XAH, name: "Custom Name")
-{:error, "Required options are missing. Required options are [:name, :digits]"}
-iex> Plausible.Cldr.Currency.new(:XAE, name: "XAE", digits: 0)
-{:error, {Cldr.CurrencyAlreadyDefined, "Currency :XAE is already defined."}}
+ }}
+iex> MyApp.Cldr.Currency.new(:XAH, name: "Custom Name")
+{:error, "Required options are missing. Required options are [:name, :digits]"}
+iex> Plausible.Cldr.Currency.new(:XAE, name: "XAE", digits: 0)
+{:error, {Cldr.CurrencyAlreadyDefined, "Currency :XAE is already defined."}}
locale
.locale
is any valid locale name returned by MyApp.Cldr.known_locale_names/0
-or a Cldr.LanguageTag
struct returned by MyApp.Cldr.Locale.new!/1
. The
+or a Cldr.LanguageTag
struct returned by MyApp.Cldr.Locale.new!/1
. The
default is Plausible.Cldr.get_locale/0
returns
@@ -1329,19 +1329,19 @@ default isPlaus
Examples
iex> Plausible.Cldr.Currency.pluralize 1, :USD
-{:ok, "US dollar"}
+{:ok, "US dollar"}
iex> Plausible.Cldr.Currency.pluralize 3, :USD
-{:ok, "US dollars"}
+{:ok, "US dollars"}
iex> Plausible.Cldr.Currency.pluralize 12, :USD, locale: "zh"
-{:ok, "美元"}
+{:ok, "美元"}
iex> Plausible.Cldr.Currency.pluralize 12, :USD, locale: "fr"
-{:ok, "dollars des États-Unis"}
+{:ok, "dollars des États-Unis"}
iex> Plausible.Cldr.Currency.pluralize 1, :USD, locale: "fr"
-{:ok, "dollar des États-Unis"}
+{:ok, "dollar des États-Unis"}
locale
is any valid locale name returned by MyApp.Cldr.known_locale_names/0
-or a Cldr.LanguageTag
struct returned by MyApp.Cldr.Locale.new!/1
Cldr.LanguageTag
struct returned by MyApp.Cldr.Locale.new!/1
returns
@@ -1384,7 +1384,7 @@ or a
iex> MyApp.Cldr.Currency.strings_for_currency :AUD, "en"
-["a$", "australian dollars", "aud", "australian dollar"]
+["a$", "australian dollars", "aud", "australian dollar"]
Returns the script direction for a locale.
@spec fallback_locale_names(Cldr.LanguageTag.t() | Cldr.Locale.locale_reference()) :: - {:ok, [Cldr.Locale.locale_name(), ...]} | {:error, {module(), String.t()}}+
@spec fallback_locale_names(Cldr.LanguageTag.t() | Cldr.Locale.locale_reference()) :: + {:ok, [Cldr.Locale.locale_name(), ...]} | {:error, {module(), String.t()}}
Fallbacks are a list of locate names which can be used to resolve translation or other localization data if such localised data does not exist for -this specific locale. After locale-specific fallbacks -are determined, the the default locale and its fallbacks -are added to the chain.
arguments
@@ -291,16 +299,16 @@ are added to the chain.iex> Plausible.Cldr.Locale.fallback_locale_names(:"fr-CA")
-{:ok, [:"fr-CA", :fr, :"en-001", :en]}
+iex> Plausible.Cldr.Locale.fallback_locale_names(:"fr-CA")
+{:ok, [:"fr-CA", :fr, :und]}
# Fallbacks are typically formed by progressively
# stripping variant, territory and script from the
# given locale name. But not always - there are
# certain fallbacks that take a different path.
-iex> Plausible.Cldr.Locale.fallback_locale_names(:nb)
-{:ok, [:nb, :no, :"en-001", :en]}
+iex> Plausible.Cldr.Locale.fallback_locale_names(:nb)
+{:ok, [:nb, :no, :und]}
@spec fallback_locales(Cldr.LanguageTag.t() | Cldr.Locale.locale_reference()) :: - {:ok, [Cldr.LanguageTag.t(), ...]} | {:error, {module(), String.t()}}+
@spec fallback_locales(Cldr.LanguageTag.t() | Cldr.Locale.locale_reference()) :: + {:ok, [Cldr.LanguageTag.t(), ...]} | {:error, {module(), String.t()}}
arguments
@@ -356,20 +362,20 @@ are added to the chain.Plausible.Cldr.Locale.fallback_locales(:"fr-CA")
-=> {:ok,
- [#Cldr.LanguageTag<fr-CA [validated]>, #Cldr.LanguageTag<fr [validated]>,
- #Cldr.LanguageTag<en [validated]>]}
+Plausible.Cldr.Locale.fallback_locales(:"fr-CA")
+=> {:ok,
+ [#Cldr.LanguageTag<fr-CA [validated]>, #Cldr.LanguageTag<fr [validated]>,
+ #Cldr.LanguageTag<und [validated]>]}
# Fallbacks are typically formed by progressively
# stripping variant, territory and script from the
# given locale name. But not always - there are
# certain fallbacks that take a different path.
-Plausible.Cldr.Locale.fallback_locales(:nb))
-=> {:ok,
- [#Cldr.LanguageTag<nb [validated]>, #Cldr.LanguageTag<no [validated]>,
- #Cldr.LanguageTag<en [validated]>]}
+Plausible.Cldr.Locale.fallback_locales(:nb))
+=> {:ok,
+ [#Cldr.LanguageTag<nb [validated]>, #Cldr.LanguageTag<no [validated]>,
+ #Cldr.LanguageTag<und [validated]>]}
@spec locale_for_territory(Cldr.Locale.territory_code()) :: - {:ok, Cldr.LanguageTag.t()} | {:error, {module(), String.t()}}+
@spec locale_for_territory(Cldr.Locale.territory_code()) :: + {:ok, Cldr.LanguageTag.t()} | {:error, {module(), String.t()}}
Cldr.validate_territory/1
Cldr.validate_territory/1
returns
@@ -457,7 +463,7 @@ code that can be validated by@spec locale_from_host(String.t(), Keyword.t()) ::
- {:ok, Cldr.LanguageTag.t()} | {:error, {module(), String.t()}}
+ {:ok, Cldr.LanguageTag.t()} | {:error, {module(), String.t()}}
@@ -476,7 +482,7 @@ is []
.Cldr.Locale.locale_from_host/2
for the default
+See Cldr.Locale.locale_from_host/2
for the default
list.returns
@@ -500,15 +506,15 @@ generic top-level domain names.Returns the script direction for a locale.
arguments
+ + Arguments +language_tag
is any language tag returned by Cldr.Locale.new/2
+or any locale_name
returned by Cldr.known_locale_names/1
.returns
+ + Returns +:ltr
(for left-to-right
+scripts) or :rtl
(for right-to-left scripts).examples
+ + Examples +iex> Plausible.Cldr.Locale.script_direction_from_locale "en-US"
+:ltr
+
+iex> Plausible.Cldr.Locale.script_direction_from_locale :ar
+:rtl
@spec territory_from_host(String.t()) ::
- {:ok, Cldr.Locale.territory_code()} | {:error, {module(), String.t()}}
+ {:ok, Cldr.Locale.territory_code()} | {:error, {module(), String.t()}}
@@ -602,12 +656,12 @@ be a territory.iex> Cldr.Locale.territory_from_host("a.b.com.au")
+{:ok, :AU}
-iex> Cldr.Locale.territory_from_host("a.b.com")
-{:error,
- {Cldr.UnknownLocaleError, "No locale was identified for territory \"com\""}}
+iex> Cldr.Locale.territory_from_host("a.b.com")
+{:error,
+ {Cldr.UnknownLocaleError, "No locale was identified for territory \"com\""}}
@spec territory_from_locale(Cldr.LanguageTag.t() | Cldr.Locale.locale_name()) ::
- Cldr.Locale.territory_code()
+ @spec territory_from_locale(Cldr.LanguageTag.t() | Cldr.Locale.locale_name()) ::
+ Cldr.Locale.territory_code()
@@ -690,7 +744,7 @@ or a locale name in the list returned by
@spec timezone_from_locale(Cldr.LanguageTag.t() | Cldr.Locale.locale_name()) :: +@spec timezone_from_locale(Cldr.LanguageTag.t() | Cldr.Locale.locale_name()) :: String.t() | {:error, {module(), String.t()}}
@spec known_locale_names() :: [Cldr.Locale.locale_name(), ...]+
@spec known_locale_names() :: [Cldr.Locale.locale_name(), ...]
The configured locales for which plural rules are defined.
Returns the intersection of Plausible.Cldr.known_locale_names/0
and
-the locales for which Cardinal plural rules are defined.
There are many Cldr
locales which don't have their own plural
-rules so this list is the intersection of Cldr
's configured
+the locales for which Cardinal plural rules are defined.
There are many Cldr
locales which don't have their own plural
+rules so this list is the intersection of Cldr
's configured
locales and those that have rules.
@spec plural_rule( - Cldr.Math.number_or_decimal(), - Cldr.Locale.locale_name() | Cldr.LanguageTag.t(), + Cldr.Math.number_or_decimal(), + Cldr.Locale.locale_name() | Cldr.LanguageTag.t(), atom() | pos_integer() -) :: Cldr.Number.PluralRule.plural_type()+) :: Cldr.Number.PluralRule.plural_type()
integer
, float
or Decimal
locale
is any locale returned by Cldr.Locale.new!/2
or any
+
number
is any integer
, float
or Decimal
locale
is any locale returned by Cldr.Locale.new!/2
or any
locale_name
returned by Plausible.Cldr.known_locale_names/0
rounding
is one of [:down, :up, :ceiling, :floor, :half_even, :half_up, :half_down]
. The
default is :half_even
.
:half_even
.@spec plural_rules_for(Cldr.Locale.locale_name() | Cldr.LanguageTag.t()) :: [ +@spec plural_rules_for(Cldr.Locale.locale_name() | Cldr.LanguageTag.t()) :: [ {atom(), list()}, ... ]
@@ -405,8 +405,8 @@ default is:half_even
.
@spec pluralize( - Cldr.Math.number_or_decimal() | Range.t(), - Cldr.Locale.locale_reference(), + Cldr.Math.number_or_decimal() | Range.t(), + Cldr.Locale.locale_reference(), %{} ) :: any()
@@ -428,31 +428,31 @@ The valid substitution keys are:zero
,iex> Plausible.Cldr.Number.Cardinal.pluralize 1, "en", %{one: "one"} +
diff --git a/Plausible.Cldr.Number.Format.html b/Plausible.Cldr.Number.Format.html index 4ec74c8da..eb1b9a8b4 100644 --- a/Plausible.Cldr.Number.Format.html +++ b/Plausible.Cldr.Number.Format.html @@ -13,7 +13,7 @@ - + @@ -302,7 +302,7 @@ Functionsiex> Plausible.Cldr.Number.Cardinal.pluralize 1, "en", %{one: "one"} "one" -iex> Plausible.Cldr.Number.Cardinal.pluralize 2, "en", %{one: "one"} +iex> Plausible.Cldr.Number.Cardinal.pluralize 2, "en", %{one: "one"} nil -iex> Plausible.Cldr.Number.Cardinal.pluralize 2, "en", %{one: "one", two: "two", other: "other"} +iex> Plausible.Cldr.Number.Cardinal.pluralize 2, "en", %{one: "one", two: "two", other: "other"} "other" -iex> Plausible.Cldr.Number.Cardinal.pluralize 22, "en", %{one: "one", two: "two", other: "other"} +iex> Plausible.Cldr.Number.Cardinal.pluralize 22, "en", %{one: "one", two: "two", other: "other"} "other" -iex> Plausible.Cldr.Number.Cardinal.pluralize Decimal.new(1), "en", %{one: "one"} +iex> Plausible.Cldr.Number.Cardinal.pluralize Decimal.new(1), "en", %{one: "one"} "one" -iex> Plausible.Cldr.Number.Cardinal.pluralize Decimal.new(2), "en", %{one: "one"} +iex> Plausible.Cldr.Number.Cardinal.pluralize Decimal.new(2), "en", %{one: "one"} nil -iex> Plausible.Cldr.Number.Cardinal.pluralize Decimal.new(2), "en", %{one: "one", two: "two"} +iex> Plausible.Cldr.Number.Cardinal.pluralize Decimal.new(2), "en", %{one: "one", two: "two"} nil -iex> Plausible.Cldr.Number.Cardinal.pluralize 1..10, "ar", %{one: "one", few: "few", other: "other"} +iex> Plausible.Cldr.Number.Cardinal.pluralize 1..10, "ar", %{one: "one", few: "few", other: "other"} "few" -iex> Plausible.Cldr.Number.Cardinal.pluralize 1..10, "en", %{one: "one", few: "few", other: "other"} +iex> Plausible.Cldr.Number.Cardinal.pluralize 1..10, "en", %{one: "one", few: "few", other: "other"} "other"
-@@ -315,7 +315,7 @@ Functions@spec all_formats_for(Cldr.LanguageTag.t() | Cldr.Locale.locale_name()) :: +@spec all_formats_for(Cldr.LanguageTag.t() | Cldr.Locale.locale_name()) :: {:ok, map()} | {:error, {module(), String.t()}}
locale
is any valid locale name returned by
Plausible.Cldr.known_locale_names/0
-or a Cldr.LanguageTag
struct returned by
+or a Cldr.LanguageTag
struct returned by
Plausible.Cldr.Locale.new!/1
. The default
is Plausible.Cldr.get_locale/0
.{:error, {exceptio
@spec all_formats_for!(Cldr.LanguageTag.t() | Cldr.Locale.locale_name()) ::
+
@spec all_formats_for!(Cldr.LanguageTag.t() | Cldr.Locale.locale_name()) ::
map() | no_return()
{:error, {exceptio
locale
is any valid locale name returned by
Plausible.Cldr.known_locale_names/0
-or a Cldr.LanguageTag
struct returned by
+or a Cldr.LanguageTag
struct returned by
Plausible.Cldr.Locale.new!/1
. The default
is Plausible.Cldr.get_locale/0
.raises an exception
See
@spec currency_spacing( - Cldr.LanguageTag.t() | Cldr.Locale.locale_name(), - Cldr.Number.System.system_name() + Cldr.LanguageTag.t() | Cldr.Locale.locale_name(), + Cldr.Number.System.system_name() ) :: map() | {:error, {module(), String.t()}}
@spec decimal_format_list() :: [Cldr.Number.Format.format()]+
@spec decimal_format_list() :: [Cldr.Number.Format.format()]
@spec decimal_format_list_for(Cldr.LanguageTag.t() | Cldr.Locale.locale_name()) :: +@spec decimal_format_list_for(Cldr.LanguageTag.t() | Cldr.Locale.locale_name()) :: {:ok, [String.t()]} | {:error, {module(), String.t()}}
@@ -490,7 +490,7 @@ to precompile all the known formats at compile time.locale is any valid locale name returned by
Plausible.Cldr.known_locale_names/0
-or aCldr.LanguageTag
struct returned by +or aCldr.LanguageTag
struct returned byPlausible.Cldr.Locale.new!/1
. The default isPlausible.Cldr.get_locale/0
.This function exists to allow the decimal formatter to precompile all the known formats at compile time. Its use is not otherwise recommended.
@@ -499,8 +499,8 @@ the known formats at compile time. Its use is not otherwise recommended.
Example
-iex> Plausible.Cldr.Number.Format.decimal_format_list_for(:en) -{:ok, ["#,##0%", "#,##0.###", "#,##0.00", "#,##0.00;(#,##0.00)","#E0", +
+ "¤ 000T", "¤ 00B", "¤ 00K", "¤ 00M", "¤ 00T", "¤ 0B", "¤ 0K", "¤ 0M", "¤ 0T"]}iex> Plausible.Cldr.Number.Format.decimal_format_list_for(:en) +{:ok, ["#,##0%", "#,##0.###", "#,##0.00", "#,##0.00;(#,##0.00)","#E0", "0 billion", "0 million", "0 thousand", "0 trillion", "00 billion", "00 million", "00 thousand", "00 trillion", "000 billion", "000 million", "000 thousand", "000 trillion", "000B", "000K", @@ -508,7 +508,7 @@ the known formats at compile time. Its use is not otherwise recommended.
"¤#,##0.00", "¤#,##0.00;(¤#,##0.00)", "¤000B", "¤000K", "¤000M", "¤000T", "¤00B", "¤00K", "¤00M", "¤00T", "¤0B", "¤0K", "¤0M", "¤0T", "¤ #,##0.00", "¤ #,##0.00;(¤ #,##0.00)", "¤ 000B", "¤ 000K", "¤ 000M", - "¤ 000T", "¤ 00B", "¤ 00K", "¤ 00M", "¤ 00T", "¤ 0B", "¤ 0K", "¤ 0M", "¤ 0T"]}
@spec default_grouping_for(Cldr.LanguageTag.t() | Cldr.Locale.locale_name()) :: +@spec default_grouping_for(Cldr.LanguageTag.t() | Cldr.Locale.locale_name()) :: {:ok, map()} | {:error, {module(), String.t()}}
@@ -547,7 +547,7 @@ the known formats at compile time. Its use is not otherwise recommended.
locale
is any valid locale name returned byPlausible.Cldr.known_locale_names/0
-or aCldr.LanguageTag
struct returned by +or aCldr.LanguageTag
struct returned byPlausible.Cldr.Locale.new!/1
. The default isPlausible.Cldr.get_locale/0
.@@ -561,8 +561,8 @@ is
-Plausible.Cld
Examples+iex> Plausible.Cldr.Number.Format.default_grouping_for(:en) -{:ok, %{fraction: %{first: 0, rest: 0}, integer: %{first: 3, rest: 3}}}
iex> Plausible.Cldr.Number.Format.default_grouping_for(:en) +{:ok, %{fraction: %{first: 0, rest: 0}, integer: %{first: 3, rest: 3}}}
Plausible.Cld
- @spec default_grouping_for!(Cldr.LanguageTag.t() | Cldr.Locale.locale_name()) ::
+ @spec default_grouping_for!(Cldr.LanguageTag.t() | Cldr.Locale.locale_name()) ::
map() | no_return()
@@ -600,7 +600,7 @@ or raises on error.locale
is any valid locale name returned by
Plausible.Cldr.known_locale_names/0
-or a Cldr.LanguageTag
struct returned by
+or a Cldr.LanguageTag
struct returned by
Plausible.Cldr.Locale.new!/1
. The default
is Plausible.Cldr.get_locale/0
.Plausible.Cld
Examples
iex> Plausible.Cldr.Number.Format.default_grouping_for!(:en)
-%{fraction: %{first: 0, rest: 0}, integer: %{first: 3, rest: 3}}
+iex> Plausible.Cldr.Number.Format.default_grouping_for!(:en)
+%{fraction: %{first: 0, rest: 0}, integer: %{first: 3, rest: 3}}
Plausible.Cld
- @spec formats_for(Cldr.LanguageTag.t() | binary(), atom() | String.t()) ::
+ @spec formats_for(Cldr.LanguageTag.t() | binary(), atom() | String.t()) ::
{:ok, map()} | {:error, {module(), String.t()}}
@@ -656,7 +656,7 @@ is Plausible.Cld
locale
is any valid locale name returned by
Plausible.Cldr.known_locale_names/0
-or a Cldr.LanguageTag
struct returned by
+or a Cldr.LanguageTag
struct returned by
Plausible.Cldr.Locale.new!/1
. The default
is Plausible.Cldr.get_locale/0
.
number_system
is any valid number system or number system type returned
by Plausible.Cldr.Number.System.number_systems_for/1
.
percent: "#,##0 %",
scientific: "#E0",
standard: "#,##0.###"
- currency_short: [{"1000", [one: "0 k ¤", other: "0 k ¤"]},
- {"10000", [one: "00 k ¤", other: "00 k ¤"]},
- {"100000", [one: "000 k ¤", other: "000 k ¤"]},
- {"1000000", [one: "0 M ¤", other: "0 M ¤"]},
- {"10000000", [one: "00 M ¤", other: "00 M ¤"]},
- {"100000000", [one: "000 M ¤", other: "000 M ¤"]},
- {"1000000000", [one: "0 Md ¤", other: "0 Md ¤"]},
- {"10000000000", [one: "00 Md ¤", other: "00 Md ¤"]},
- {"100000000000", [one: "000 Md ¤", other: "000 Md ¤"]},
- {"1000000000000", [one: "0 Bn ¤", other: "0 Bn ¤"]},
- {"10000000000000", [one: "00 Bn ¤", other: "00 Bn ¤"]},
- {"100000000000000", [one: "000 Bn ¤", other: "000 Bn ¤"]}],
+ currency_short: [{"1000", [one: "0 k ¤", other: "0 k ¤"]},
+ {"10000", [one: "00 k ¤", other: "00 k ¤"]},
+ {"100000", [one: "000 k ¤", other: "000 k ¤"]},
+ {"1000000", [one: "0 M ¤", other: "0 M ¤"]},
+ {"10000000", [one: "00 M ¤", other: "00 M ¤"]},
+ {"100000000", [one: "000 M ¤", other: "000 M ¤"]},
+ {"1000000000", [one: "0 Md ¤", other: "0 Md ¤"]},
+ {"10000000000", [one: "00 Md ¤", other: "00 Md ¤"]},
+ {"100000000000", [one: "000 Md ¤", other: "000 Md ¤"]},
+ {"1000000000000", [one: "0 Bn ¤", other: "0 Bn ¤"]},
+ {"10000000000000", [one: "00 Bn ¤", other: "00 Bn ¤"]},
+ {"100000000000000", [one: "000 Bn ¤", other: "000 Bn ¤"]}],
...
}
@@ -714,8 +714,8 @@ by
@spec formats_for!(
- Cldr.LanguageTag.t() | Cldr.Locale.locale_name(),
- Cldr.Number.System.system_name()
+ Cldr.LanguageTag.t() | Cldr.Locale.locale_name(),
+ Cldr.Number.System.system_name()
) ::
map() | no_return()
@@ -747,7 +747,7 @@ by
- @spec minimum_grouping_digits_for(Cldr.LanguageTag.t() | Cldr.Locale.locale_name()) ::
+ @spec minimum_grouping_digits_for(Cldr.LanguageTag.t() | Cldr.Locale.locale_name()) ::
{:ok, non_neg_integer()} | {:error, {module(), String.t()}}
@@ -760,7 +760,7 @@ by
locale
is any valid locale name returned by
Plausible.Cldr.known_locale_names/0
-or a Cldr.LanguageTag
struct returned by
+or a Cldr.LanguageTag
struct returned by
Plausible.Cldr.Locale.new!/1
. The default
is Plausible.Cldr.get_locale/0
.
@@ -774,8 +774,8 @@ is Plausible.Cld
Examples
-iex> Plausible.Cldr.Number.Format.minimum_grouping_digits_for("en")
-{:ok, 1}
+iex> Plausible.Cldr.Number.Format.minimum_grouping_digits_for("en")
+{:ok, 1}
@@ -799,7 +799,7 @@ is Plausible.Cld
- @spec minimum_grouping_digits_for!(Cldr.LanguageTag.t() | Cldr.Locale.locale_name()) ::
+ @spec minimum_grouping_digits_for!(Cldr.LanguageTag.t() | Cldr.Locale.locale_name()) ::
non_neg_integer() | no_return()
@@ -813,7 +813,7 @@ or raises on error.locale
is any valid locale name returned by
Plausible.Cldr.known_locale_names/0
-or a Cldr.LanguageTag
struct returned by
+or a Cldr.LanguageTag
struct returned by
Plausible.Cldr.Locale.new!/1
. The default
is Plausible.Cldr.get_locale/0
.
@@ -827,7 +827,7 @@ is Plausible.Cld
Examples
-iex> Plausible.Cldr.Number.Format.minimum_grouping_digits_for!("en")
+iex> Plausible.Cldr.Number.Format.minimum_grouping_digits_for!("en")
1
diff --git a/Plausible.Cldr.Number.Formatter.Decimal.html b/Plausible.Cldr.Number.Formatter.Decimal.html
index 062c985b5..a17efcc10 100644
--- a/Plausible.Cldr.Number.Formatter.Decimal.html
+++ b/Plausible.Cldr.Number.Formatter.Decimal.html
@@ -13,7 +13,7 @@
-
+
@@ -205,9 +205,9 @@ Functions
@spec to_string(
- Cldr.Math.number_or_decimal(),
- String.t() | Cldr.Number.Format.Meta.t(),
- Keyword.t() | Cldr.Number.Format.Options.t()
+ Cldr.Math.number_or_decimal(),
+ String.t() | Cldr.Number.Format.Meta.t(),
+ Keyword.t() | Cldr.Number.Format.Options.t()
) :: {:ok, String.t()} | {:error, {module(), String.t()}}
diff --git a/Plausible.Cldr.Number.Ordinal.html b/Plausible.Cldr.Number.Ordinal.html
index f78629321..67f88bcfe 100644
--- a/Plausible.Cldr.Number.Ordinal.html
+++ b/Plausible.Cldr.Number.Ordinal.html
@@ -13,7 +13,7 @@
-
+
@@ -249,13 +249,13 @@ Functions
- @spec known_locale_names() :: [Cldr.Locale.locale_name(), ...]
+ @spec known_locale_names() :: [Cldr.Locale.locale_name(), ...]
The configured locales for which plural rules are defined.
Returns the intersection of Plausible.Cldr.known_locale_names/0
and
-the locales for which Ordinal plural rules are defined.
There are many Cldr
locales which don't have their own plural
-rules so this list is the intersection of Cldr
's configured
+the locales for which Ordinal plural rules are defined.
There are many Cldr
locales which don't have their own plural
+rules so this list is the intersection of Cldr
's configured
locales and those that have rules.
@@ -283,10 +283,10 @@ locales and those that have rules.
@spec plural_rule(
- Cldr.Math.number_or_decimal(),
- Cldr.Locale.locale_name() | Cldr.LanguageTag.t(),
+ Cldr.Math.number_or_decimal(),
+ Cldr.Locale.locale_name() | Cldr.LanguageTag.t(),
atom() | pos_integer()
-) :: Cldr.Number.PluralRule.plural_type()
+) :: Cldr.Number.PluralRule.plural_type()
@@ -302,7 +302,7 @@ list or other content in a plural-sensitive way.number
is any integer
, float
or Decimal
locale
is any locale returned by Cldr.Locale.new!/2
or any
+
number
is any integer
, float
or Decimal
locale
is any locale returned by Cldr.Locale.new!/2
or any
locale_name
returned by Plausible.Cldr.known_locale_names/0
rounding
is one of [:down, :up, :ceiling, :floor, :half_even, :half_up, :half_down]
. The
default is :half_even
.
@@ -366,7 +366,7 @@ default is :half_even
.
- @spec plural_rules_for(Cldr.Locale.locale_name() | Cldr.LanguageTag.t()) :: [
+ @spec plural_rules_for(Cldr.Locale.locale_name() | Cldr.LanguageTag.t()) :: [
{atom(), list()},
...
]
@@ -405,8 +405,8 @@ default is :half_even
.
@spec pluralize(
- Cldr.Math.number_or_decimal() | Range.t(),
- Cldr.Locale.locale_reference(),
+ Cldr.Math.number_or_decimal() | Range.t(),
+ Cldr.Locale.locale_reference(),
%{}
) :: any()
@@ -431,31 +431,31 @@ The valid substitution keys are :zero
, iex> Plausible.Cldr.Number.Ordinal.pluralize 1, :en, %{one: "one"}
+iex> Plausible.Cldr.Number.Ordinal.pluralize 1, :en, %{one: "one"}
"one"
-iex> Plausible.Cldr.Number.Ordinal.pluralize 2, :en, %{one: "one"}
+iex> Plausible.Cldr.Number.Ordinal.pluralize 2, :en, %{one: "one"}
nil
-iex> Plausible.Cldr.Number.Ordinal.pluralize 2, :en, %{one: "one", two: "two"}
+iex> Plausible.Cldr.Number.Ordinal.pluralize 2, :en, %{one: "one", two: "two"}
"two"
-iex> Plausible.Cldr.Number.Ordinal.pluralize 22, :en, %{one: "one", two: "two", other: "other"}
+iex> Plausible.Cldr.Number.Ordinal.pluralize 22, :en, %{one: "one", two: "two", other: "other"}
"two"
-iex> Plausible.Cldr.Number.Ordinal.pluralize Decimal.new(1), :en, %{one: "one"}
+iex> Plausible.Cldr.Number.Ordinal.pluralize Decimal.new(1), :en, %{one: "one"}
"one"
-iex> Plausible.Cldr.Number.Ordinal.pluralize Decimal.new(2), :en, %{one: "one"}
+iex> Plausible.Cldr.Number.Ordinal.pluralize Decimal.new(2), :en, %{one: "one"}
nil
-iex> Plausible.Cldr.Number.Ordinal.pluralize Decimal.new(2), :en, %{one: "one", two: "two"}
+iex> Plausible.Cldr.Number.Ordinal.pluralize Decimal.new(2), :en, %{one: "one", two: "two"}
"two"
-iex> Plausible.Cldr.Number.Ordinal.pluralize 1..10, "ar", %{one: "one", few: "few", other: "other"}
+iex> Plausible.Cldr.Number.Ordinal.pluralize 1..10, "ar", %{one: "one", few: "few", other: "other"}
"other"
-iex> Plausible.Cldr.Number.Ordinal.pluralize 1..10, "en", %{one: "one", few: "few", other: "other"}
+iex> Plausible.Cldr.Number.Ordinal.pluralize 1..10, "en", %{one: "one", few: "few", other: "other"}
"other"
diff --git a/Plausible.Cldr.Number.PluralRule.Range.html b/Plausible.Cldr.Number.PluralRule.Range.html
index d8de84ecd..05fe93868 100644
--- a/Plausible.Cldr.Number.PluralRule.Range.html
+++ b/Plausible.Cldr.Number.PluralRule.Range.html
@@ -13,7 +13,7 @@
-
+
@@ -178,10 +178,10 @@ Functions
@spec plural_rule(
- first :: Cldr.Number.PluralRule.plural_type(),
- last :: Cldr.Number.PluralRule.plural_type(),
- locale :: Cldr.Locale.locale_name() | Cldr.LanguageTag.t()
-) :: Cldr.Number.PluralRule.plural_type()
+ first :: Cldr.Number.PluralRule.plural_type(),
+ last :: Cldr.Number.PluralRule.plural_type(),
+ locale :: Cldr.Locale.locale_name() | Cldr.LanguageTag.t()
+) :: Cldr.Number.PluralRule.plural_type()
diff --git a/Plausible.Cldr.Number.Symbol.html b/Plausible.Cldr.Number.Symbol.html
index 314e0b37e..55a7b8eb8 100644
--- a/Plausible.Cldr.Number.Symbol.html
+++ b/Plausible.Cldr.Number.Symbol.html
@@ -13,7 +13,7 @@
-
+
@@ -329,7 +329,7 @@ when builing a regular expression.
- @spec number_symbols_for(Cldr.LanguageTag.t() | Cldr.Locale.locale_name()) ::
+ @spec number_symbols_for(Cldr.LanguageTag.t() | Cldr.Locale.locale_name()) ::
{:ok, map()} | {:error, {module(), String.t()}}
@@ -343,7 +343,7 @@ of the number systems of a locale.
locale
is any valid locale name returned by
Plausible.Cldr.known_locale_names/0
-or a Cldr.LanguageTag
struct returned by
+or a Cldr.LanguageTag
struct returned by
Plausible.Cldr.Locale.new!/1
. The default
is Plausible.Cldr.get_locale/0
.
@@ -351,9 +351,9 @@ is Plausible.Cld
Example:
-iex> Plausible.Cldr.Number.Symbol.number_symbols_for(:th)
-{:ok, %{
- latn: %Cldr.Number.Symbol{
+iex> Plausible.Cldr.Number.Symbol.number_symbols_for(:th)
+{:ok, %{
+ latn: %Cldr.Number.Symbol{
decimal: ".",
exponential: "E",
group: ",",
@@ -366,8 +366,8 @@ is Plausible.Cld
plus_sign: "+",
superscripting_exponent: "×",
time_separator: ":"
- },
- thai: %Cldr.Number.Symbol{
+ },
+ thai: %Cldr.Number.Symbol{
decimal: ".",
exponential: "E",
group: ",",
@@ -380,8 +380,8 @@ is Plausible.Cld
plus_sign: "+",
superscripting_exponent: "×",
time_separator: ":"
- }
- }}
+ }
+ }}
diff --git a/Plausible.Cldr.Number.System.html b/Plausible.Cldr.Number.System.html
index 2f2573592..dbd9bfb80 100644
--- a/Plausible.Cldr.Number.System.html
+++ b/Plausible.Cldr.Number.System.html
@@ -13,7 +13,7 @@
-
+
@@ -271,17 +271,17 @@ Functions
@spec number_system_for(
- Cldr.Locale.locale_reference(),
- Cldr.Number.System.system_name()
+ Cldr.Locale.locale_reference(),
+ Cldr.Number.System.system_name()
) ::
{:ok, [atom()]} | {:error, {module(), String.t()}}
-Returns the actual number system from a number system type.
locale
is any valid locale name returned by Cldr.known_locale_names/0
-or a Cldr.LanguageTag
struct returned by Cldr.Locale.new!/2
system_name
is any number system name returned by
-Cldr.known_number_systems/0
or a number system type
-returned by Cldr.known_number_system_types/0
This function will decode a number system type into the actual
+
Returns the actual number system from a number system type.
locale
is any valid locale name returned by Cldr.known_locale_names/0
+or a Cldr.LanguageTag
struct returned by Cldr.Locale.new!/2
system_name
is any number system name returned by
+Cldr.known_number_systems/0
or a number system type
+returned by Cldr.known_number_system_types/0
This function will decode a number system type into the actual
number system. If the number system provided can't be decoded
it is returned as is.
@@ -290,23 +290,23 @@ it is returned as is.iex> Plausible.Cldr.Number.System.number_system_for "th", :latn
-{:ok, %{digits: "0123456789", type: :numeric}}
+{:ok, %{digits: "0123456789", type: :numeric}}
iex> Plausible.Cldr.Number.System.number_system_for "en", :default
-{:ok, %{digits: "0123456789", type: :numeric}}
+{:ok, %{digits: "0123456789", type: :numeric}}
iex> Plausible.Cldr.Number.System.number_system_for "he", :traditional
-{:ok, %{rules: "hebrew", type: :algorithmic}}
+{:ok, %{rules: "hebrew", type: :algorithmic}}
iex> Plausible.Cldr.Number.System.number_system_for "en", :native
-{:ok, %{digits: "0123456789", type: :numeric}}
+{:ok, %{digits: "0123456789", type: :numeric}}
iex> Plausible.Cldr.Number.System.number_system_for "en", :finance
-{
+{
:error,
- {Cldr.UnknownNumberSystemError,
- "The number system :finance is unknown for the locale named :en. Valid number systems are %{default: :latn, native: :latn}"}
-}
+ {Cldr.UnknownNumberSystemError,
+ "The number system :finance is unknown for the locale named :en. Valid number systems are %{default: :latn, native: :latn}"}
+}
@@ -330,8 +330,8 @@ it is returned as is.
- @spec number_system_from_locale(Cldr.Locale.locale_reference()) ::
- Cldr.Number.System.system_name()
+ @spec number_system_from_locale(Cldr.Locale.locale_reference()) ::
+ Cldr.Number.System.system_name()
@@ -342,8 +342,8 @@ locale name.locale
is any language tag returned be Cldr.Locale.new/2
-or a locale name in the list returned by Cldr.known_locale_names/1
locale
is any language tag returned be Cldr.Locale.new/2
+or a locale name in the list returned by Cldr.known_locale_names/1
returns
@@ -383,24 +383,24 @@ or a locale name in the list returned by -@spec number_system_names_for(Cldr.Locale.locale_reference()) :: +@spec number_system_names_for(Cldr.Locale.locale_reference()) :: {:ok, [atom()]} | {:error, {module(), String.t()}}
Returns the number systems available for a locale or
{:error, message}
if the locale is not known.
locale
is any valid locale name returned by Plausible.Cldr.known_locale_names/0
-or a Cldr.LanguageTag
struct returned by Plausible.Cldr.Locale.new!/1
Cldr.LanguageTag
struct returned by Plausible.Cldr.Locale.new!/1
examples
Examplesiex> Plausible.Cldr.Number.System.number_system_names_for "en"
-{:ok, [:latn]}
+{:ok, [:latn]}
iex> Plausible.Cldr.Number.System.number_system_names_for "zz"
-{:error, {Cldr.InvalidLanguageError, "The language \"zz\" is invalid"}}
+{:error, {Cldr.InvalidLanguageError, "The language \"zz\" is invalid"}}
- @spec number_systems_for(Cldr.Locale.locale_reference()) ::
+ @spec number_systems_for(Cldr.Locale.locale_reference()) ::
{:ok, map()} | {:error, {module(), String.t()}}
Returns the number systems available for a locale
or {:error, message}
if the locale is not known.
locale
is any valid locale name returned by Plausible.Cldr.known_locale_names/0
-or a Cldr.LanguageTag
struct returned by Plausible.Cldr.Locale.new!/1
+or a Cldr.LanguageTag
struct returned by Plausible.Cldr.Locale.new!/1
examples
Examples
iex> Plausible.Cldr.Number.System.number_systems_for "en"
-{:ok, %{default: :latn, native: :latn}}
+{:ok, %{default: :latn, native: :latn}}
iex> Plausible.Cldr.Number.System.number_systems_for "th"
-{:ok, %{default: :latn, native: :thai}}
+{:ok, %{default: :latn, native: :thai}}
iex> Plausible.Cldr.Number.System.number_systems_for "zz"
-{:error, {Cldr.InvalidLanguageError, "The language \"zz\" is invalid"}}
+{:error, {Cldr.InvalidLanguageError, "The language \"zz\" is invalid"}}
@spec number_systems_like(
- Cldr.Locale.locale_reference(),
- Cldr.Number.System.system_name()
+ Cldr.Locale.locale_reference(),
+ Cldr.Number.System.system_name()
) ::
{:ok, list()} | {:error, tuple()}
@@ -567,8 +567,8 @@ or a
@spec system_name_from(
- Cldr.Number.System.system_name(),
- Cldr.Locale.locale_name() | Cldr.LanguageTag.t()
+ Cldr.Number.System.system_name(),
+ Cldr.Locale.locale_name() | Cldr.LanguageTag.t()
) :: {:ok, atom()} | {:error, {module(), String.t()}}
@@ -576,7 +576,7 @@ or a Returns a number system name for a given locale and number system reference.system_name
is any number system name returned by
Plausible.Cldr.known_number_systems/0
or a number system type
returned by Plausible.Cldr.known_number_system_types/0
locale
is any valid locale name returned by Plausible.Cldr.known_locale_names/0
-or a Cldr.LanguageTag
struct returned by Plausible.Cldr.Locale.new!/1
Number systems can be references in one of two ways:
As a number system type such as :default, :native, :traditional and
+or a Cldr.LanguageTag
struct returned by Plausible.Cldr.Locale.new!/1
Number systems can be references in one of two ways:
As a number system type such as :default, :native, :traditional and
:finance. This allows references to a number system for a locale in a
consistent fashion for a given use
WIth the number system name directly, such as :latn, :arab or any of the
other 70 or so
This function dereferences the supplied system_name
and returns the
@@ -586,20 +586,20 @@ actual system name.
ex> Plausible.Cldr.Number.System.system_name_from(:default, "en")
-{:ok, :latn}
+ex> Plausible.Cldr.Number.System.system_name_from(:default, "en")
+{:ok, :latn}
-iex> Plausible.Cldr.Number.System.system_name_from("latn", "en")
-{:ok, :latn}
+iex> Plausible.Cldr.Number.System.system_name_from("latn", "en")
+{:ok, :latn}
-iex> Plausible.Cldr.Number.System.system_name_from(:native, "en")
-{:ok, :latn}
+iex> Plausible.Cldr.Number.System.system_name_from(:native, "en")
+{:ok, :latn}
-iex> Plausible.Cldr.Number.System.system_name_from(:nope, "en")
-{
+iex> Plausible.Cldr.Number.System.system_name_from(:nope, "en")
+{
:error,
- {Cldr.UnknownNumberSystemError, "The number system :nope is unknown"}
-}
Note that return value is not guaranteed to be a valid
+
{Cldr.UnknownNumberSystemError, "The number system :nope is unknown"}
+}
Note that return value is not guaranteed to be a valid
number system for the given locale as demonstrated in the third example.
This function converts numbers to a known number system only, it does not provide number formatting.
number
is a float
, integer
or Decimal
system_name
is any number system name returned by
-Cldr.known_number_systems/0
or a number system type
-returned by Cldr.known_number_system_types/0
There are two types of number systems in CLDR:
:numeric
in which the number system defines
+Cldr.known_number_systems/0
or a number system type
+returned by Cldr.known_number_system_types/0
There are two types of number systems in CLDR:
:numeric
in which the number system defines
a direct mapping between the latin digits 0..9
into a the number system equivalent. In this case,
-to_system/2
invokes Cldr.Number.Transliterate.transliterate_digits/3
+to_system/2
invokes Cldr.Number.Transliterate.transliterate_digits/3
for the given number.
:algorithmic
in which the number system
does not have the same structure as the :latn
number system and therefore the conversion is
done algorithmically. For CLDR the algorithm
-is implemented through Cldr.Rbnf
rulesets.
+is implemented through Cldr.Rbnf
rulesets.
These rulesets are considered by CLDR to be
less rigorous than the :numeric
number systems
and caution and testing for a specific use case
@@ -646,16 +646,16 @@ is recommended.
Cldr.Number.Transliterate.transliterate_digits/3
This module includes Cldr.Number.Transliterate.transliterate_digits/3
which transliterates
digits between number systems. For example from :arabic to :latn. Since generating a
transliteration map is slow, pairs of transliterations can be configured so that the
transliteration map is created at compile time and therefore speeding up transliteration at
run time.
To configure these transliteration pairs, add the to the use Cldr
configuration
-in a backend module:
defmodule MyApp.Cldr do
+in a backend module:defmodule MyApp.Cldr do
use Cldr,
- locale: ["en", "fr", "th"],
+ locale: ["en", "fr", "th"],
default_locale: "en",
- precompile_transliterations: [{:latn, :thai}, {:arab, :thai}]
-end
Where each tuple in the list configures one transliteration map. In this example, two maps are
-configured: from :latn
to :thai
and from :arab
to :thai
.
A list of configurable number systems is returned by Cldr.Number.System.systems_with_digits/0
.
If a transliteration is requested between two number pairs that have not been configured for
+
precompile_transliterations: [{:latn, :thai}, {:arab, :thai}]
+end
Where each tuple in the list configures one transliteration map. In this example, two maps are
+configured: from :latn
to :thai
and from :arab
to :thai
.
A list of configurable number systems is returned by Cldr.Number.System.systems_with_digits/0
.
If a transliteration is requested between two number pairs that have not been configured for precompilation, a warning is logged.
@@ -226,8 +226,8 @@ Functions@spec transliterate(
String.t(),
- Cldr.LanguageTag.t() | Cldr.Locale.locale_name(),
- Cldr.Number.System.system_name() | Cldr.Number.System.types()
+ Cldr.LanguageTag.t() | Cldr.Locale.locale_name(),
+ Cldr.Number.System.system_name() | Cldr.Number.System.types()
) :: String.t() | {:error, {module(), String.t()}}
@@ -246,7 +246,7 @@ is the actual name of a known number system. If epressed as an :default
and :native
but :traditional and :finance are also part of the
standard). See Plausible.Cldr.Number.System.number_systems_for/1
for a locale to
-see what number system types are defined. The default is :default
.For available number systems see Cldr.Number.System.number_systems/0
+see what number system types are defined. The default is :default
.
For available number systems see Cldr.Number.System.number_systems/0
and Plausible.Cldr.Number.System.number_systems_for/1
. Also see
Plausible.Cldr.Number.Symbol.number_symbols_for/1
.
Examples
iex> Plausible.Cldr.Number.Transliterate.transliterate("123556")
+iex> Plausible.Cldr.Number.Transliterate.transliterate("123556")
"123556"
-iex> Plausible.Cldr.Number.Transliterate.transliterate("123,556.000", "fr", :default)
+iex> Plausible.Cldr.Number.Transliterate.transliterate("123,556.000", "fr", :default)
"123 556,000"
-iex> Plausible.Cldr.Number.Transliterate.transliterate("123556", "th", :default)
+iex> Plausible.Cldr.Number.Transliterate.transliterate("123556", "th", :default)
"123556"
-iex> Plausible.Cldr.Number.Transliterate.transliterate("123556", "th", "thai")
+iex> Plausible.Cldr.Number.Transliterate.transliterate("123556", "th", "thai")
"๑๒๓๕๕๖"
-iex> Plausible.Cldr.Number.Transliterate.transliterate("123556", "th", :native)
+iex> Plausible.Cldr.Number.Transliterate.transliterate("123556", "th", :native)
"๑๒๓๕๕๖"
-iex> Plausible.Cldr.Number.Transliterate.transliterate("Some number is: 123556", "th", "thai")
+iex> Plausible.Cldr.Number.Transliterate.transliterate("Some number is: 123556", "th", "thai")
"Some number is: ๑๒๓๕๕๖"
@@ -318,14 +318,14 @@ and @spec transliterate_digits(
String.t(),
- Cldr.Number.System.system_name(),
- Cldr.Number.System.system_name()
+ Cldr.Number.System.system_name(),
+ Cldr.Number.System.system_name()
) :: String.t()
Transliterates digits from one number system to another number system
digits
is binary representation of a number
from_system
and to_system
are number system names in atom form. See
-Cldr.Number.System.systems_with_digits/0
for available number systems.
Cldr.Number.System.systems_with_digits/0
for available number systems.example
diff --git a/Plausible.Cldr.Number.html b/Plausible.Cldr.Number.html index 7ea78e4c9..eca59810a 100644 --- a/Plausible.Cldr.Number.html +++ b/Plausible.Cldr.Number.html @@ -13,7 +13,7 @@ - + @@ -117,7 +117,7 @@ PlausibleFormats numbers and currencies based upon CLDR's decimal formats specification.
The format specification is documentated in Unicode TR35.
There are several classes of formatting including non-scientific, scientific,
rules based (for spelling and ordinal formats), compact formats that display 1k
-rather than 1,000
and so on. See Cldr.Number.to_string/2
for specific formatting
+rather than 1,000
and so on. See Cldr.Number.to_string/2
for specific formatting
options.
non-scientific-notation-formatting
@@ -414,19 +414,19 @@ using the Elixir standard library functions.iex> Plausible.Cldr.Number.parse("+1.000,34", locale: "de")
-{:ok, 1000.34}
+iex> Plausible.Cldr.Number.parse("+1.000,34", locale: "de")
+{:ok, 1000.34}
-iex> Plausible.Cldr.Number.parse("-1_000_000.34")
-{:ok, -1000000.34}
+iex> Plausible.Cldr.Number.parse("-1_000_000.34")
+{:ok, -1000000.34}
-iex> Plausible.Cldr.Number.parse("1.000", locale: "de", number: :integer)
-{:ok, 1000}
+iex> Plausible.Cldr.Number.parse("1.000", locale: "de", number: :integer)
+{:ok, 1000}
-iex> Plausible.Cldr.Number.parse("+1.000,34", locale: "de", number: :integer)
-{:error,
- {Cldr.Number.ParseError,
- "The string \"+1.000,34\" could not be parsed as a number"}}
+iex> Plausible.Cldr.Number.parse("+1.000,34", locale: "de", number: :integer)
+{:error,
+ {Cldr.Number.ParseError,
+ "The string \"+1.000,34\" could not be parsed as a number"}}
options
Options
:locale
is any valid locale returned by Cldr.known_locale_names/1
-or a Cldr.LanguageTag
struct returned by Cldr.Locale.new!/2
+
:locale
is any valid locale returned by Cldr.known_locale_names/1
+or a Cldr.LanguageTag
struct returned by Cldr.Locale.new!/2
The default is Plausible.Cldr.get_locale()
:only
is an atom
or list of atoms
representing the
currencies or currency types to be considered for a match.
The equates to a list of acceptable currencies for parsing.
@@ -498,17 +498,17 @@ financial instruments.
iex> Plausible.Cldr.Number.scan("100 US dollars")
+iex> Plausible.Cldr.Number.scan("100 US dollars")
...> |> Plausible.Cldr.Number.resolve_currencies
-[100, :USD]
+[100, :USD]
-iex> Plausible.Cldr.Number.scan("100 eurosports")
-...> |> Plausible.Cldr.Number.resolve_currencies(fuzzy: 0.75)
-[100, :EUR]
+iex> Plausible.Cldr.Number.scan("100 eurosports")
+...> |> Plausible.Cldr.Number.resolve_currencies(fuzzy: 0.75)
+[100, :EUR]
-iex> Plausible.Cldr.Number.scan("100 dollars des États-Unis")
-...> |> Plausible.Cldr.Number.resolve_currencies(locale: "fr")
-[100, :USD]
+iex> Plausible.Cldr.Number.scan("100 dollars des États-Unis")
+...> |> Plausible.Cldr.Number.resolve_currencies(locale: "fr")
+[100, :USD]
options
Options
:locale
is any valid locale returned by Cldr.known_locale_names/1
-or a Cldr.LanguageTag
struct returned by Cldr.Locale.new!/2
+
:locale
is any valid locale returned by Cldr.known_locale_names/1
+or a Cldr.LanguageTag
struct returned by Cldr.Locale.new!/2
The default is Plausible.Cldr.get_locale()
:only
is an atom
or list of atoms
representing the
currencies or currency types to be considered for a match.
The equates to a list of acceptable currencies for parsing.
@@ -585,19 +585,19 @@ financial instruments.
iex> Plausible.Cldr.Number.resolve_currency("US dollars")
+[:USD]
-iex> Plausible.Cldr.Number.resolve_currency("100 eurosports", fuzzy: 0.75)
-[:EUR]
+iex> Plausible.Cldr.Number.resolve_currency("100 eurosports", fuzzy: 0.75)
+[:EUR]
-iex> Plausible.Cldr.Number.resolve_currency("dollars des États-Unis", locale: "fr")
-[:USD]
+iex> Plausible.Cldr.Number.resolve_currency("dollars des États-Unis", locale: "fr")
+[:USD]
-iex> Plausible.Cldr.Number.resolve_currency("not a known currency", locale: "fr")
-{:error,
- {Cldr.UnknownCurrencyError,
- "The currency \"not a known currency\" is unknown or not supported"}}
+iex> Plausible.Cldr.Number.resolve_currency("not a known currency", locale: "fr")
+{:error,
+ {Cldr.UnknownCurrencyError,
+ "The currency \"not a known currency\" is unknown or not supported"}}
@spec resolve_per(String.t(), Keyword.t()) ::
- Cldr.Number.Parser.per()
- | [Cldr.Number.Parser.per() | String.t()]
+ Cldr.Number.Parser.per()
+ | [Cldr.Number.Parser.per() | String.t()]
| {:error, {module(), String.t()}}
@@ -646,8 +646,8 @@ and permille symbols are expectedreturnsoptions
Options
-
:locale
is any valid locale returned by Cldr.known_locale_names/1
-or a Cldr.LanguageTag
struct returned by Cldr.Locale.new!/2
+:locale
is any valid locale returned by Cldr.known_locale_names/1
+or a Cldr.LanguageTag
struct returned by Cldr.Locale.new!/2
The default is options[:backend].get_locale()
options[:backend].get_locale()
+[:percent, " of linguists ", :percent]iex> Plausible.Cldr.Number.resolve_per "11%"
-["11", :percent]
+["11", :percent]
iex> Plausible.Cldr.Number.resolve_per "% of linguists"
-[:percent, " of linguists"]
+[:percent, " of linguists"]
iex> Plausible.Cldr.Number.resolve_per "% of linguists %"
-[:percent, " of linguists ", :percent]
options[:backend].get_locale()
@spec resolve_pers([String.t(), ...], Keyword.t()) :: [ - Cldr.Number.Parser.per() | String.t() + Cldr.Number.Parser.per() | String.t() ]
options
Options
-
:locale
is any valid locale returned by Cldr.known_locale_names/1
-or a t:Cldr.LanguageTag
struct returned by Cldr.Locale.new!/2
+:locale
is any valid locale returned by Cldr.known_locale_names/1
+or a t:Cldr.LanguageTag
struct returned by Cldr.Locale.new!/2
The default is options[:backend].get_locale()
examples
Examplesiex> Plausible.Cldr.Number.scan("100%")
-...> |> Plausible.Cldr.Number.resolve_pers()
-[100, :percent]
+iex> Plausible.Cldr.Number.scan("100%")
+...> |> Plausible.Cldr.Number.resolve_pers()
+[100, :percent]
:integer
, :float
,
:decimal
or nil
. The default is nil
meaning that the type auto-detected as either
-an integer
or a float
.:locale
is any locale returned by Cldr.known_locale_names/1
+an integer
or a float
.
:locale
is any locale returned by Cldr.known_locale_names/1
or a Cldr.LanguageTag.t
. The default is Plausible.Cldr.get_locale/0
.
returns
@@ -779,27 +779,27 @@ or aCldr.LanguageTag.t
. The default is Cldr.Number.Parser.parse/2
+Number parsing is performed by Cldr.Number.Parser.parse/2
and any options provided are passed to that function.
examples
Examplesiex> Plausible.Cldr.Number.scan("£1_000_000.34")
-["£", 1000000.34]
+iex> Plausible.Cldr.Number.scan("£1_000_000.34")
+["£", 1000000.34]
-iex> Plausible.Cldr.Number.scan("I want £1_000_000 dollars")
-["I want £", 1000000, " dollars"]
+iex> Plausible.Cldr.Number.scan("I want £1_000_000 dollars")
+["I want £", 1000000, " dollars"]
-iex> Plausible.Cldr.Number.scan("The prize is 23")
-["The prize is ", 23]
+iex> Plausible.Cldr.Number.scan("The prize is 23")
+["The prize is ", 23]
-iex> Plausible.Cldr.Number.scan("The lottery number is 23 for the next draw")
-["The lottery number is ", 23, " for the next draw"]
+iex> Plausible.Cldr.Number.scan("The lottery number is 23 for the next draw")
+["The lottery number is ", 23, " for the next draw"]
-iex> Plausible.Cldr.Number.scan("The loss is -1.000 euros", locale: "de", number: :integer)
-["The loss is ", -1000, " euros"]
+iex> Plausible.Cldr.Number.scan("The loss is -1.000 euros", locale: "de", number: :integer)
+["The loss is ", -1000, " euros"]
options
is a keyword list defining how the number is to be formatted.
-See Cldr.Number.to_string/3
for a description of the available
+See Cldr.Number.to_string/3
for a description of the available
options.
example
@@ -846,7 +846,7 @@ options.options
is a keyword list defining how the number is to be formatted.
-See Cldr.Number.to_string/3
for a description of the available
+See Cldr.Number.to_string/3
for a description of the available
options.
example
@@ -940,7 +940,7 @@ options.:range
format for a locale and number system.
number
is an integer, float or Decimal to be formatted
options
is a keyword list defining how the number is to be formatted.
-See Cldr.Number.to_string/3
for a description of the available
+See Cldr.Number.to_string/3
for a description of the available
options.
example
@@ -987,7 +987,7 @@ options.iex> Plausible.Cldr.Number.to_range_string 1234..5678
-{:ok, "1,234–5,678"}
+{:ok, "1,234–5,678"}
format
: the format style or a format string defining how the number is
-formatted. See Cldr.Number.Format
for how format strings can be constructed.
-See Cldr.Number.Format.format_styles_for/3
to return available format styles
+formatted. See Cldr.Number.Format
for how format strings can be constructed.
+See Cldr.Number.Format.format_styles_for/3
to return available format styles
for a locale. The default format
is :standard
.
If :format
is set to :long
or :short
then the formatting depends on
whether :currency
is specified. If not specified then the number is
formatted as :decimal_long
or :decimal_short
. If :currency
is
specified the number is formatted as :currency_long
or
:currency_short
and :fractional_digits
is set to 0 as a default.
:format
may also be a format defined by CLDR's Rules Based Number
-Formats (RBNF). Further information is found in the module Cldr.Rbnf
.
+Formats (RBNF). Further information is found in the module Cldr.Rbnf
.
The most commonly used formats in this category are to spell out the
number in a the locales language. The applicable formats are :spellout
,
:spellout_year
, :ordinal
. A number can also be formatted as roman
@@ -1065,10 +1065,10 @@ should be used to define the separators and digits for the formatted
number. If number_system
is an atom
then number_system
is
interpreted as a number system. If the :number_system
is
binary
then it is interpreted as a number system name. See
-Cldr.Number.System.number_system_names_for/2
. The default is :default
.
:locale
: determines the locale in which the number is formatted. See
-Cldr.known_locale_names/0
. The default isCldr.get_locale/0
which is the
+Cldr.Number.System.number_system_names_for/2
. The default is :default
.
:locale
: determines the locale in which the number is formatted. See
+Cldr.known_locale_names/0
. The default isCldr.get_locale/0
which is the
locale currently in affect for this Process
and which is set by
-Cldr.put_locale/1
.
If :fractional_digits
is set to a positive integer value then the number
+Cldr.put_locale/1
.
If :fractional_digits
is set to a positive integer value then the number
will be rounded to that number of digits and displayed accordingly - overriding
settings that would be applied by default. For example, currencies have
fractional digits defined reflecting each currencies minor unit. Setting
@@ -1106,21 +1106,21 @@ extensions.
iex> Cldr.Number.to_string(100, format: :currency, currency: :USD, wrapper: fn
...> string, :currency_symbol -> "<span class=\"symbol\">" <> string <> "</span>"
...> string, :number -> "<span class=\"number\">" <> string <> "</span>"
...> string, :currency_space -> "<span>" <> string <> "</span>"
...> string, _other -> string
-...> end)
-{:ok, "<span class=\"symbol\">$</span><span class=\"number\">100.00</span>"}
It is also possible and recommended to use the Phoenix.HTML.Tag.content_tag/3
+
It is also possible and recommended to use the Phoenix.HTML.Tag.content_tag/3
function if wrapping HTML tags since these will ensure HTML entities are
-correctly encoded. For example:
iex> Cldr.Number.to_string(100, format: :currency, currency: :USD, wrapper: fn
-...> string, :currency_symbol -> Phoenix.HTML.Tag.content_tag(:span, string, class: "symbol")
-...> string, :number -> Phoenix.HTML.Tag.content_tag(:span, string, class: "number")
-...> string, :currency_space -> Phoenix.HTML.Tag.content_tag(:span, string)
+correctly encoded. For example:iex> Cldr.Number.to_string(100, format: :currency, currency: :USD, wrapper: fn
+...> string, :currency_symbol -> Phoenix.HTML.Tag.content_tag(:span, string, class: "symbol")
+...> string, :number -> Phoenix.HTML.Tag.content_tag(:span, string, class: "number")
+...> string, :currency_space -> Phoenix.HTML.Tag.content_tag(:span, string)
...> string, _other -> string
-...> end)
-{:ok, "<span class=\"symbol\">$</span><span class=\"number\">100.00</span>"}
When formatting a number the format is parsed into format elements that might include
+
...> end)
+{:ok, "<span class=\"symbol\">$</span><span class=\"number\">100.00</span>"}
When formatting a number the format is parsed into format elements that might include a currency symbol, a literal string, inserted text between a currency symbol and the currency amount, a percent sign, the number itself and several other elements. In some cases it is helpful to be apply specific formatting to each element. @@ -1141,80 +1141,80 @@ inserted in the final formatted number.
errors
ErrorsAn error tuple {:error, reason}
will be returned if an error is detected.
-The two most likely causes of an error return are:
iex> Plausible.Cldr.Number.to_string(12345, format: "0#")
- {:error, {Cldr.FormatCompileError,
- "Decimal format compiler: syntax error before: \"#\""}}
locale
and
+The two most likely causes of an error return are: iex> Plausible.Cldr.Number.to_string(12345, format: "0#")
+ {:error, {Cldr.FormatCompileError,
+ "Decimal format compiler: syntax error before: \"#\""}}
locale
and
number_system
. This happens typically when the number system is
:algorithmic
rather than the more common :numeric
. In this case the error
-return looks like: iex> Plausible.Cldr.Number.to_string(1234, locale: "he", number_system: "hebr")
- {:error, {Cldr.UnknownFormatError,
- "The locale :he with number system :hebr does not define a format :standard"}}
+return looks like: iex> Plausible.Cldr.Number.to_string(1234, locale: "he", number_system: "hebr")
+ {:error, {Cldr.UnknownFormatError,
+ "The locale :he with number system :hebr does not define a format :standard"}}
@spec validate_number_system( - Cldr.Locale.locale_name() | Cldr.LanguageTag.t(), - Cldr.Number.System.system_name() | Cldr.Number.System.types() -) :: {:ok, Cldr.Number.System.system_name()} | {:error, {module(), String.t()}}+ Cldr.Locale.locale_name() | Cldr.LanguageTag.t(), + Cldr.Number.System.system_name() | Cldr.Number.System.types() +) :: {:ok, Cldr.Number.System.system_name()} | {:error, {module(), String.t()}}
Cldr.known_locale_names/1
-or a Cldr.LanguageTag
struct returned by Cldr.Locale.new!/2
system_name
is any number system name returned by
-Cldr.known_number_systems/0
or a number system type
-returned by Cldr.known_number_system_types/0
locale
is any valid locale name returned by Cldr.known_locale_names/1
+or a Cldr.LanguageTag
struct returned by Cldr.Locale.new!/2
system_name
is any number system name returned by
+Cldr.known_number_systems/0
or a number system type
+returned by Cldr.known_number_system_types/0
examples
Examplesiex> Plausible.Cldr.Number.validate_number_system "en", :latn
-{:ok, :latn}
+{:ok, :latn}
iex> Plausible.Cldr.Number.validate_number_system "en", :default
-{:ok, :latn}
+{:ok, :latn}
iex> Plausible.Cldr.Number.validate_number_system "en", :unknown
-{:error,
- {Cldr.UnknownNumberSystemError, "The number system :unknown is unknown"}}
+{:error,
+ {Cldr.UnknownNumberSystemError, "The number system :unknown is unknown"}}
iex> Plausible.Cldr.Number.validate_number_system "zz", :default
-{:error, {Cldr.InvalidLanguageError, "The language \"zz\" is invalid"}}
+{:error, {Cldr.InvalidLanguageError, "The language \"zz\" is invalid"}}
Functions to implement the number system rule-based-number-format rules of CLDR.
These rules are defined only on the "und" locale and represent specialised -number formatting.
The standard public API for RBNF is via the Cldr.Number.to_string/2
function.
The functions on this module are defined at compile time based upon the RBNF rules -defined in the Unicode CLDR data repository. Available rules are identified by:
iex> Plausible.Cldr.Rbnf.NumberSystem.rule_sets(:und)
-[:zz_default, :tamil, :roman_upper, :roman_lower, :hebrew_item,
- :hebrew, :greek_upper, :greek_lower, :georgian,
- :ethiopic, :cyrillic_lower, :armenian_upper, :armenian_lower]
A rule can then be invoked on an available rule_set. For example
iex> Plausible.Cldr.Rbnf.NumberSystem.roman_upper(123, :und)
-"CXXIII"
This particular call is equivalent to the call through the public API of:
iex> Plausible.Cldr.Number.to_string(123, format: :roman)
-{:ok, "CXXIII"}
+number formatting.The standard public API for RBNF is via the Cldr.Number.to_string/2
function.
The functions on this module are defined at compile time based upon the RBNF rules +defined in the Unicode CLDR data repository. Available rules are identified by:
iex> Plausible.Cldr.Rbnf.NumberSystem.rule_sets(:und)
+...> |> Enum.sort()
+[
+ :armenian_lower,
+ :armenian_upper,
+ :cyrillic_lower,
+ :ethiopic,
+ :georgian,
+ :greek_lower,
+ :greek_upper,
+ :hebrew,
+ :hebrew_item,
+ :roman_lower,
+ :roman_upper,
+ :tamil,
+ :zz_default
+]
A rule can then be invoked on an available rule_set. For example
iex> Plausible.Cldr.Rbnf.NumberSystem.roman_upper(123, :und)
+"CXXIII"
This particular call is equivalent to the call through the public API of:
iex> Plausible.Cldr.Number.to_string(123, format: :roman)
+{:ok, "CXXIII"}
Functions to implement the ordinal rule-based-number-format rules of CLDR.
As CLDR notes, the data is incomplete or non-existent for many languages. It -is considered complete for English however.
The standard public API for RBNF is via the Cldr.Number.to_string/2
function.
The functions on this module are defined at compile time based upon the RBNF rules -defined in the Unicode CLDR data repository. Available rules are identified by:
iex> Plausible.Cldr.Rbnf.Ordinal.rule_sets(:en)
-[:digits_ordinal]
+is considered complete for English however.The standard public API for RBNF is via the Cldr.Number.to_string/2
function.
The functions on this module are defined at compile time based upon the RBNF rules
+defined in the Unicode CLDR data repository. Available rules are identified by:
iex> Plausible.Cldr.Rbnf.Ordinal.rule_sets(:en)
+[:digits_ordinal]
-iex> Plausible.Cldr.Rbnf.Ordinal.rule_sets("fr")
-[
- :digits_ordinal_masculine_plural,
- :digits_ordinal_masculine,
- :digits_ordinal_feminine_plural,
+iex> Plausible.Cldr.Rbnf.Ordinal.rule_sets("fr")
+...> |> Enum.sort()
+[
+ :digits_ordinal,
:digits_ordinal_feminine,
- :digits_ordinal
-]
A rule can then be invoked on an available rule_set. For example
iex> Plausible.Cldr.Rbnf.Ordinal.digits_ordinal(123, :en)
-"123rd"
This call is equivalent to the call through the public API of:
iex> Plausible.Cldr.Number.to_string(123, format: :ordinal)
-{:ok, "123rd"}
+ :digits_ordinal_feminine_plural,
+ :digits_ordinal_masculine,
+ :digits_ordinal_masculine_plural
+]
A rule can then be invoked on an available rule_set. For example
iex> Plausible.Cldr.Rbnf.Ordinal.digits_ordinal(123, :en)
+"123rd"
This call is equivalent to the call through the public API of:
iex> Plausible.Cldr.Number.to_string(123, format: :ordinal)
+{:ok, "123rd"}
Functions to implement the spellout rule-based-number-format rules of CLDR.
As CLDR notes, the data is incomplete or non-existent for many languages. It -is considered complete for English however.
The standard public API for RBNF is via the Cldr.Number.to_string/2
function.
The functions on this module are defined at compile time based upon the RBNF rules -defined in the Unicode CLDR data repository. Available rules are identified by:
iex> Plausible.Cldr.Rbnf.Spellout.rule_sets("en")
-[:spellout_ordinal_verbose, :spellout_ordinal, :spellout_numbering_year,
- :spellout_numbering_verbose, :spellout_numbering, :spellout_cardinal_verbose,
- :spellout_cardinal]
A rule can then be invoked on an available rule_set. For example:
iex> Plausible.Cldr.Rbnf.Spellout.spellout_ordinal(123, "en")
-"one hundred twenty-third"
This call is equivalent to the call through the public API of:
iex> Plausible.Cldr.Number.to_string(123, format: :spellout)
-{:ok, "one hundred twenty-three"}
+is considered complete for English however.The standard public API for RBNF is via the Cldr.Number.to_string/2
function.
The functions on this module are defined at compile time based upon the RBNF rules +defined in the Unicode CLDR data repository. Available rules are identified by:
iex> Plausible.Cldr.Rbnf.Spellout.rule_sets("en")
+...> |> Enum.sort()
+[
+ :spellout_cardinal,
+ :spellout_cardinal_verbose,
+ :spellout_numbering,
+ :spellout_numbering_verbose,
+ :spellout_numbering_year,
+ :spellout_ordinal,
+ :spellout_ordinal_verbose
+]
A rule can then be invoked on an available rule_set. For example:
iex> Plausible.Cldr.Rbnf.Spellout.spellout_ordinal(123, "en")
+"one hundred twenty-third"
This call is equivalent to the call through the public API of:
iex> Plausible.Cldr.Number.to_string(123, format: :spellout)
+{:ok, "one hundred twenty-three"}
Returns either the Gettext locale_name
in Cldr format or
false
based upon whether the locale name is configured in
-Gettext
.
Gettext
.
@@ -238,7 +238,7 @@ name is configured and available in Gettext.
Returns a list of Gettext locale names but in CLDR format with
underscore replaced by hyphen in order to facilitate comparisons
-with Cldr
locale names.
Cldr
locale names.
@@ -249,7 +249,7 @@ with
Returns either the locale_name
or false
based upon
-whether the locale name is configured in Cldr
.
+whether the locale name is configured in Cldr
.
@@ -280,7 +280,7 @@ name is configured and available in Cldr.
- Returns a list of atoms representing the number systems types known to Cldr
.
+ Returns a list of atoms representing the number systems types known to Cldr
.
@@ -290,7 +290,7 @@ name is configured and available in Cldr.
-
+
@@ -301,7 +301,7 @@ name is configured and available in Cldr.
Returns either the RBNF locale_name
or false
based upon
-whether the locale name is configured in Cldr
+whether the locale name is configured in Cldr
and has RBNF rules defined.
@@ -335,7 +335,7 @@ formats (RBNF).
-
+
@@ -356,7 +356,7 @@ of common symbols in numbers, currencies and dates
- Set the current locale to be used for Cldr
functions that
+
Set the current locale to be used for Cldr
functions that
take an optional locale parameter for which a locale is not supplied.
@@ -388,7 +388,7 @@ but not known in CLDR.
-
+
@@ -398,7 +398,7 @@ but not known in CLDR.
-
+
@@ -418,7 +418,7 @@ but not known in CLDR.
-
+
@@ -438,7 +438,7 @@ but not known in CLDR.
-
+
@@ -486,7 +486,7 @@ Functions
-
+
@@ -510,7 +510,7 @@ Functions
- @spec default_locale() :: Cldr.LanguageTag.t() | no_return()
+ @spec default_locale() :: Cldr.LanguageTag.t() | no_return()
@@ -520,24 +520,24 @@ Functions
Example
iex> Plausible.Cldr.default_locale()
-%Cldr.LanguageTag{
+iex> Plausible.Cldr.default_locale()
+%Cldr.LanguageTag{
backend: Plausible.Cldr,
canonical_locale_name: "en-001",
cldr_locale_name: :"en-001",
- language_subtags: [],
- extensions: %{},
+ language_subtags: [],
+ extensions: %{},
gettext_locale_name: "en",
language: "en",
- locale: %{},
- private_use: [],
+ locale: %{},
+ private_use: [],
rbnf_locale_name: :en,
requested_locale_name: "en-001",
script: :Latn,
territory: :"001",
- transform: %{},
- language_variants: []
-}
+ transform: %{},
+ language_variants: []
+}
@spec default_territory() :: Cldr.Locale.territory_code()+
@spec default_territory() :: Cldr.Locale.territory_code()
iex> Plausible.Cldr.default_territory()
:"001"
String.t
or a 2-element list
of String.t
between which the ellipsis is inserted.backend
is any module that includes use Cldr
and therefore
-is a Cldr
backend module. The default is Cldr.default_backend!/0
.
-Note that Cldr.default_backend!/0
will raise an exception if
+is a Cldr
backend module. The default is Cldr.default_backend!/0
.
+Note that Cldr.default_backend!/0
will raise an exception if
no :default_backend
is configured under the :ex_cldr
key in
config.exs
.
options
is a keyword list of options
:default_backend
is configured under the
Options
:locale
is any valid locale name returned by Cldr.known_locale_names/1
.
-The default is Cldr.get_locale/0
.
:location
determines where to place the ellipsis. The options are
+
:locale
is any valid locale name returned by Cldr.known_locale_names/1
.
+The default is Cldr.get_locale/0
.
:location
determines where to place the ellipsis. The options are
:after
(the default for a single string argument), :between
(the default and only valid location for an argument that is a list
of two strings) and :before
.
:format
formats based upon whether the ellipsis
@@ -635,13 +635,13 @@ is inserted between words or sentences. The valid options are
iex> Plausible.Cldr.ellipsis "And furthermore"
"And furthermore…"
-iex> Plausible.Cldr.ellipsis ["And furthermore", "there is much to be done"], locale: :ja
+iex> Plausible.Cldr.ellipsis ["And furthermore", "there is much to be done"], locale: :ja
"And furthermore…there is much to be done"
iex> Plausible.Cldr.ellipsis "And furthermore", format: :word
"And furthermore …"
-iex> Plausible.Cldr.ellipsis ["And furthermore", "there is much to be done"], locale: :ja, format: :word
+iex> Plausible.Cldr.ellipsis ["And furthermore", "there is much to be done"], locale: :ja, format: :word
"And furthermore … there is much to be done"
@@ -666,34 +666,34 @@ is inserted between words or sentences. The valid options are
@spec get_locale() :: Cldr.LanguageTag.t()+
@spec get_locale() :: Cldr.LanguageTag.t()
Return the current locale to be used for Cldr
functions that
+
Return the current locale to be used for Cldr
functions that
take an optional locale parameter for which a locale is not supplied.
example
Exampleiex> Plausible.Cldr.put_locale("pl")
+iex> Plausible.Cldr.put_locale("pl")
iex> Plausible.Cldr.get_locale
-%Cldr.LanguageTag{
+%Cldr.LanguageTag{
backend: Elixir.Plausible.Cldr,
canonical_locale_name: "pl",
cldr_locale_name: :pl,
- extensions: %{},
+ extensions: %{},
language: "pl",
- locale: %{},
- private_use: [],
+ locale: %{},
+ private_use: [],
rbnf_locale_name: :pl,
territory: :PL,
requested_locale_name: "pl",
script: :Latn,
- transform: %{},
- language_variants: []
- }
+ transform: %{},
+ language_variants: []
+ }
locale_name
in Cldr format or
false
based upon whether the locale name is configured in
-Gettext
.Gettext
.arguments
@@ -826,10 +826,10 @@ name is configured and available in Gettext.iex> Plausible.Cldr.known_gettext_locale_name?("en")
true
-iex> Plausible.Cldr.known_gettext_locale_name?("!!")
+iex> Plausible.Cldr.known_gettext_locale_name?("!!")
false
Cldr
locale names.
+with Cldr
locale names.
- @spec known_locale_name(Cldr.Locale.locale_name()) :: String.t() | false
+ @spec known_locale_name(Cldr.Locale.locale_name()) :: String.t() | false
Returns either the locale_name
or false
based upon
-whether the locale name is configured in Cldr
.
This is helpful when building a list of or
expressions
+whether the locale name is configured in Cldr
.
This is helpful when building a list of or
expressions
to return the first known locale name from a list.
arguments
@@ -931,7 +931,7 @@ to return the first known locale name from a list.
- @spec known_locale_name?(Cldr.Locale.locale_name()) :: boolean()
+ @spec known_locale_name?(Cldr.Locale.locale_name()) :: boolean()
@@ -948,10 +948,10 @@ name is configured and available in Cldr.iex> Plausible.Cldr.known_locale_name?(:en)
+iex> Plausible.Cldr.known_locale_name?(:en)
true
-iex> Plausible.Cldr.known_locale_name?(:"!!")
+iex> Plausible.Cldr.known_locale_name?(:"!!")
false
Gettext
.
+in this module or in Gettext
.
Returns a list of atoms representing the number systems types known to Cldr
.
Returns a list of atoms representing the number systems types known to Cldr
.
example
Exampleiex> Plausible.Cldr.known_number_system_types
-[:default, :finance, :native, :traditional]
+[:default, :finance, :native, :traditional]
@spec known_rbnf_locale_name(Cldr.Locale.locale_name()) :: String.t() | false+
@spec known_rbnf_locale_name(Cldr.Locale.locale_name()) :: String.t() | false
Returns either the RBNF locale_name
or false
based upon
-whether the locale name is configured in Cldr
+whether the locale name is configured in Cldr
and has RBNF rules defined.
arguments
@@ -1099,7 +1099,7 @@ and has RBNF rules defined.@spec known_rbnf_locale_name?(Cldr.Locale.locale_name()) :: boolean()+
@spec known_rbnf_locale_name?(Cldr.Locale.locale_name()) :: boolean()@@ -1117,10 +1117,10 @@ rules based number formats (RBNF).
iex> Plausible.Cldr.known_rbnf_locale_name?(:en)
true
-iex> Plausible.Cldr.known_rbnf_locale_name?(:"!!")
+iex> Plausible.Cldr.known_rbnf_locale_name?(:"!!")
false
@spec known_rbnf_locale_names() :: [Cldr.Locale.locale_name()]+
@spec known_rbnf_locale_names() :: [Cldr.Locale.locale_name()]@@ -1172,7 +1172,7 @@ formats (RBNF).
@spec put_locale(Cldr.Locale.locale_reference()) :: - {:ok, Cldr.LanguageTag.t()} | {:error, {module(), String.t()}}+
@spec put_locale(Cldr.Locale.locale_reference()) :: + {:ok, Cldr.LanguageTag.t()} | {:error, {module(), String.t()}}
Set the current locale to be used for Cldr
functions that
+
Set the current locale to be used for Cldr
functions that
take an optional locale parameter for which a locale is not supplied.
arguments
@@ -1241,29 +1241,29 @@ of a language tag.iex> Plausible.Cldr.put_locale("en")
-{:ok,
- %Cldr.LanguageTag{
+iex> Plausible.Cldr.put_locale("en")
+{:ok,
+ %Cldr.LanguageTag{
backend: Plausible.Cldr,
canonical_locale_name: "en",
cldr_locale_name: :en,
- language_subtags: [],
- extensions: %{},
+ language_subtags: [],
+ extensions: %{},
gettext_locale_name: "en",
language: "en",
- locale: %{},
- private_use: [],
+ locale: %{},
+ private_use: [],
rbnf_locale_name: :en,
requested_locale_name: "en",
script: :Latn,
territory: :US,
- transform: %{},
- language_variants: []
- }}
+ transform: %{},
+ language_variants: []
+ }}
-iex> Plausible.Cldr.put_locale("invalid-locale!")
-{:error, {Cldr.LanguageTag.ParseError,
- "Expected a BCP47 language tag. Could not parse the remaining \"!\" starting at position 15"}}
+iex> Plausible.Cldr.put_locale("invalid-locale!")
+{:error, {Cldr.LanguageTag.ParseError,
+ "Expected a BCP47 language tag. Could not parse the remaining \"!\" starting at position 15"}}
locale
is any valid locale name returned by Cldr.known_locale_names/1
.
-The default is Cldr.get_locale/0
locale
is any valid locale name returned by Cldr.known_locale_names/1
.
+The default is Cldr.get_locale/0
examples
@@ -1340,7 +1340,7 @@ The default is -@spec unknown_locale_names() :: [Cldr.Locale.locale_name()]+
@spec unknown_locale_names() :: [Cldr.Locale.locale_name()]@@ -1369,7 +1369,7 @@ return an empty list.
@spec validate_locale(Cldr.Locale.locale_name() | Cldr.LanguageTag.t() | String.t()) :: - {:ok, Cldr.LanguageTag.t()} | {:error, {module(), String.t()}}+
@spec validate_locale(Cldr.Locale.locale_name() | Cldr.LanguageTag.t() | String.t()) :: + {:ok, Cldr.LanguageTag.t()} | {:error, {module(), String.t()}}
locale
is any valid locale name returned by Plausible.Cldr.known_locale_names/0
-or a Cldr.LanguageTag
struct returned by Plausible.Cldr.Locale.new!/1
Cldr.LanguageTag
struct returned by Plausible.Cldr.Locale.new!/1
returns
@@ -1446,47 +1446,47 @@ of a language tag.iex> Plausible.Cldr.validate_locale(:en)
+{:ok,
+%Cldr.LanguageTag{
backend: Plausible.Cldr,
canonical_locale_name: "en",
cldr_locale_name: :en,
- extensions: %{},
+ extensions: %{},
gettext_locale_name: "en",
language: "en",
- locale: %{},
- private_use: [],
+ locale: %{},
+ private_use: [],
rbnf_locale_name: :en,
requested_locale_name: "en",
script: :Latn,
territory: :US,
- transform: %{},
- language_variants: []
-}}
+ transform: %{},
+ language_variants: []
+}}
-iex> Plausible.Cldr.validate_locale Plausible.Cldr.default_locale()
-{:ok,
-%Cldr.LanguageTag{
+iex> Plausible.Cldr.validate_locale Plausible.Cldr.default_locale()
+{:ok,
+%Cldr.LanguageTag{
backend: Plausible.Cldr,
canonical_locale_name: "en-001",
cldr_locale_name: :"en-001",
- extensions: %{},
+ extensions: %{},
gettext_locale_name: "en",
language: "en",
- locale: %{},
- private_use: [],
+ locale: %{},
+ private_use: [],
rbnf_locale_name: :en,
requested_locale_name: "en-001",
script: :Latn,
territory: :"001",
- transform: %{},
- language_variants: []
-}}
+ transform: %{},
+ language_variants: []
+}}
-iex> Plausible.Cldr.validate_locale("zzz")
-{:error, {Cldr.InvalidLanguageError, "The language \"zzz\" is invalid"}}
+iex> Plausible.Cldr.validate_locale("zzz")
+{:error, {Cldr.InvalidLanguageError, "The language \"zzz\" is invalid"}}
Cldr.known_number_system_types/1
Cldr.known_number_system_types/1
returns
@@ -1557,22 +1557,22 @@ of a language tag.@spec with_locale(Cldr.LanguageTag.t(), (... -> any())) :: any()
+ @spec with_locale(Cldr.LanguageTag.t(), (... -> any())) :: any()
- @spec with_locale(Cldr.Locale.locale_name(), (... -> any())) :: any()
+ @spec with_locale(Cldr.Locale.locale_name(), (... -> any())) :: any()
@@ -1633,7 +1633,7 @@ current locale is restored after the function.Cldr.known_locale_names/1
.fun
is any 0-arity function or function capture.
locale
is any valid locale name returned by Cldr.known_locale_names/1
.
fun
is any 0-arity function or function capture.
returns
diff --git a/Plausible.ClickhouseEventV2.html b/Plausible.ClickhouseEventV2.html index bf6d4a2fc..1ee77bab2 100644 --- a/Plausible.ClickhouseEventV2.html +++ b/Plausible.ClickhouseEventV2.html @@ -13,7 +13,7 @@ - + diff --git a/Plausible.ClickhouseRepo.html b/Plausible.ClickhouseRepo.html index f9ec95a9e..ba9f537fa 100644 --- a/Plausible.ClickhouseRepo.html +++ b/Plausible.ClickhouseRepo.html @@ -13,7 +13,7 @@ - + @@ -818,23 +818,23 @@ pool to disconnect within the given interval.See
- Similar to Example: Similar to Example:insert_all/2
but with the following differences:Repo.query!("create table ecto_ch_demo(a UInt64, b String) engine Null")
+
insert_all/2
but with the following differences:
+{100_000, nil} = Repo.insert_stream("ecto_ch_demo", rows, types: [a: Ch.Types.u64(), b: :string])Repo.query!("create table ecto_ch_demo(a UInt64, b String) engine Null")
-defmodule Demo do
+defmodule Demo do
use Ecto.Schema
@primary_key false
- schema "ecto_ch_demo" do
+ schema "ecto_ch_demo" do
field :a, Ch, type: "UInt64"
field :b, :string
- end
-end
+ end
+end
-rows = Stream.map(1..100_000, fn i -> %{a: i, b: to_string(i)} end)
-{100_000, nil} = Repo.insert_stream(Demo, rows)
+rows = Stream.map(1..100_000, fn i -> %{a: i, b: to_string(i)} end)
+{100_000, nil} = Repo.insert_stream(Demo, rows)
# schemaless
-{100_000, nil} = Repo.insert_stream("ecto_ch_demo", rows, types: [a: Ch.Types.u64(), b: :string])
In the case of a DB-IP database:
iex> database_type()
-"DBIP-City-Lite"
In the case of a MaxMind database:
iex> database_type()
+ In the case of a DB-IP database:
iex> database_type()
+"DBIP-City-Lite"
In the case of a MaxMind database:
iex> database_type()
"GeoLite2-City"
@@ -274,8 +274,8 @@ asynchronously.
Examples
- Loading from a local file:
iex> load_db(path: "/etc/plausible/dbip-city.mmdb")
-:ok
Downloading a MaxMind DB (this license key is no longer active):
iex> load_db(license_key: "LNpsJCCKPis6XvBP", edition: "GeoLite2-City", async: true)
+ Loading from a local file:
iex> load_db(path: "/etc/plausible/dbip-city.mmdb")
+:ok
Downloading a MaxMind DB (this license key is no longer active):
iex> load_db(license_key: "LNpsJCCKPis6XvBP", edition: "GeoLite2-City", async: true)
:ok
@@ -304,21 +304,21 @@ asynchronously.
Examples
-iex> lookup("8.7.6.5")
-%{
- "city" => %{
+iex> lookup("8.7.6.5")
+%{
+ "city" => %{
"geoname_id" => 5349755,
- "names" => %{
+ "names" => %{
"de" => "Fontana",
"en" => "Fontana",
"ja" => "フォンタナ",
"ru" => "Фонтана"
- }
- },
- "continent" => %{
+ }
+ },
+ "continent" => %{
"code" => "NA",
"geoname_id" => 6255149,
- "names" => %{
+ "names" => %{
"de" => "Nordamerika",
"en" => "North America",
"es" => "Norteamérica",
@@ -327,12 +327,12 @@ asynchronously."pt-BR" => "América do Norte",
"ru" => "Северная Америка",
"zh-CN" => "北美洲"
- }
- },
- "country" => %{
+ }
+ },
+ "country" => %{
"geoname_id" => 6252001,
"iso_code" => "US",
- "names" => %{
+ "names" => %{
"de" => "Vereinigte Staaten",
"en" => "United States",
"es" => "Estados Unidos",
@@ -341,20 +341,20 @@ asynchronously."pt-BR" => "EUA",
"ru" => "США",
"zh-CN" => "美国"
- }
- },
- "location" => %{
+ }
+ },
+ "location" => %{
"accuracy_radius" => 50,
"latitude" => 34.1211,
"longitude" => -117.4362,
"metro_code" => 803,
"time_zone" => "America/Los_Angeles"
- },
- "postal" => %{"code" => "92336"},
- "registered_country" => %{
+ },
+ "postal" => %{"code" => "92336"},
+ "registered_country" => %{
"geoname_id" => 6252001,
"iso_code" => "US",
- "names" => %{
+ "names" => %{
"de" => "Vereinigte Staaten",
"en" => "United States",
"es" => "Estados Unidos",
@@ -363,13 +363,13 @@ asynchronously."pt-BR" => "EUA",
"ru" => "США",
"zh-CN" => "美国"
- }
- },
- "subdivisions" => [
- %{
+ }
+ },
+ "subdivisions" => [
+ %{
"geoname_id" => 5332921,
"iso_code" => "CA",
- "names" => %{
+ "names" => %{
"de" => "Kalifornien",
"en" => "California",
"es" => "California",
@@ -378,10 +378,10 @@ asynchronously."pt-BR" => "Califórnia",
"ru" => "Калифорния",
"zh-CN" => "加州"
- }
- }
- ]
-}
+ }
+ }
+ ]
+}
diff --git a/Plausible.Goal.html b/Plausible.Goal.html
index 96bfc8334..19e84163c 100644
--- a/Plausible.Goal.html
+++ b/Plausible.Goal.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Goals.html b/Plausible.Goals.html
index 6fca3b079..82e29817a 100644
--- a/Plausible.Goals.html
+++ b/Plausible.Goals.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Google.Api.Mock.html b/Plausible.Google.Api.Mock.html
index 4533e6568..3a99bba27 100644
--- a/Plausible.Google.Api.Mock.html
+++ b/Plausible.Google.Api.Mock.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Google.Api.html b/Plausible.Google.Api.html
index bb557ee45..143a896be 100644
--- a/Plausible.Google.Api.html
+++ b/Plausible.Google.Api.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Google.Buffer.html b/Plausible.Google.Buffer.html
index 3f6113bcf..a91dbbd32 100644
--- a/Plausible.Google.Buffer.html
+++ b/Plausible.Google.Buffer.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Google.HTTP.html b/Plausible.Google.HTTP.html
index 17c318ef9..0f026301b 100644
--- a/Plausible.Google.HTTP.html
+++ b/Plausible.Google.HTTP.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Google.ReportRequest.html b/Plausible.Google.ReportRequest.html
index 24e75c1c2..988ffc5e0 100644
--- a/Plausible.Google.ReportRequest.html
+++ b/Plausible.Google.ReportRequest.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.HTTPClient.Interface.html b/Plausible.HTTPClient.Interface.html
index 221ff5390..c1388ecb2 100644
--- a/Plausible.HTTPClient.Interface.html
+++ b/Plausible.HTTPClient.Interface.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.HTTPClient.Non200Error.html b/Plausible.HTTPClient.Non200Error.html
index e19bc8351..1689c0aaa 100644
--- a/Plausible.HTTPClient.Non200Error.html
+++ b/Plausible.HTTPClient.Non200Error.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.HTTPClient.html b/Plausible.HTTPClient.html
index 82fc4f631..52b33deb1 100644
--- a/Plausible.HTTPClient.html
+++ b/Plausible.HTTPClient.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.ImportDeletionRepo.html b/Plausible.ImportDeletionRepo.html
index d149007f7..65252754c 100644
--- a/Plausible.ImportDeletionRepo.html
+++ b/Plausible.ImportDeletionRepo.html
@@ -13,7 +13,7 @@
-
+
@@ -1116,23 +1116,23 @@ pool to disconnect within the given interval.See
-Similar to insert_all/2
but with the following differences:
- accepts rows as streams or lists
- sends rows as a chunked request
- doesn't autogenerate ids or does any other preprocessing
Example:
Repo.query!("create table ecto_ch_demo(a UInt64, b String) engine Null")
+Similar to insert_all/2
but with the following differences:
- accepts rows as streams or lists
- sends rows as a chunked request
- doesn't autogenerate ids or does any other preprocessing
Example:
Repo.query!("create table ecto_ch_demo(a UInt64, b String) engine Null")
-defmodule Demo do
+defmodule Demo do
use Ecto.Schema
@primary_key false
- schema "ecto_ch_demo" do
+ schema "ecto_ch_demo" do
field :a, Ch, type: "UInt64"
field :b, :string
- end
-end
+ end
+end
-rows = Stream.map(1..100_000, fn i -> %{a: i, b: to_string(i)} end)
-{100_000, nil} = Repo.insert_stream(Demo, rows)
+rows = Stream.map(1..100_000, fn i -> %{a: i, b: to_string(i)} end)
+{100_000, nil} = Repo.insert_stream(Demo, rows)
# schemaless
-{100_000, nil} = Repo.insert_stream("ecto_ch_demo", rows, types: [a: Ch.Types.u64(), b: :string])
+{100_000, nil} = Repo.insert_stream("ecto_ch_demo", rows, types: [a: Ch.Types.u64(), b: :string])
diff --git a/Plausible.Imported.html b/Plausible.Imported.html
index 1d0601cea..f2a5ab8c1 100644
--- a/Plausible.Imported.html
+++ b/Plausible.Imported.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.IngestRepo.html b/Plausible.IngestRepo.html
index d81cabd15..a482eab09 100644
--- a/Plausible.IngestRepo.html
+++ b/Plausible.IngestRepo.html
@@ -13,7 +13,7 @@
-
+
@@ -1116,23 +1116,23 @@ pool to disconnect within the given interval.
See
-Similar to insert_all/2
but with the following differences:
- accepts rows as streams or lists
- sends rows as a chunked request
- doesn't autogenerate ids or does any other preprocessing
Example:
Repo.query!("create table ecto_ch_demo(a UInt64, b String) engine Null")
+Similar to insert_all/2
but with the following differences:
- accepts rows as streams or lists
- sends rows as a chunked request
- doesn't autogenerate ids or does any other preprocessing
Example:
Repo.query!("create table ecto_ch_demo(a UInt64, b String) engine Null")
-defmodule Demo do
+defmodule Demo do
use Ecto.Schema
@primary_key false
- schema "ecto_ch_demo" do
+ schema "ecto_ch_demo" do
field :a, Ch, type: "UInt64"
field :b, :string
- end
-end
+ end
+end
-rows = Stream.map(1..100_000, fn i -> %{a: i, b: to_string(i)} end)
-{100_000, nil} = Repo.insert_stream(Demo, rows)
+rows = Stream.map(1..100_000, fn i -> %{a: i, b: to_string(i)} end)
+{100_000, nil} = Repo.insert_stream(Demo, rows)
# schemaless
-{100_000, nil} = Repo.insert_stream("ecto_ch_demo", rows, types: [a: Ch.Types.u64(), b: :string])
+{100_000, nil} = Repo.insert_stream("ecto_ch_demo", rows, types: [a: Ch.Types.u64(), b: :string])
diff --git a/Plausible.Ingestion.Counters.Buffer.html b/Plausible.Ingestion.Counters.Buffer.html
index e786b9b5b..1fee1fb11 100644
--- a/Plausible.Ingestion.Counters.Buffer.html
+++ b/Plausible.Ingestion.Counters.Buffer.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Ingestion.Counters.Record.html b/Plausible.Ingestion.Counters.Record.html
index 50539f2be..22d88eef4 100644
--- a/Plausible.Ingestion.Counters.Record.html
+++ b/Plausible.Ingestion.Counters.Record.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Ingestion.Counters.TelemetryHandler.html b/Plausible.Ingestion.Counters.TelemetryHandler.html
index 1bcda6b38..8c9b5ffa2 100644
--- a/Plausible.Ingestion.Counters.TelemetryHandler.html
+++ b/Plausible.Ingestion.Counters.TelemetryHandler.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Ingestion.Counters.html b/Plausible.Ingestion.Counters.html
index 433218a1e..8e9506d69 100644
--- a/Plausible.Ingestion.Counters.html
+++ b/Plausible.Ingestion.Counters.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Ingestion.Event.html b/Plausible.Ingestion.Event.html
index 9a47def13..d0e5fb68f 100644
--- a/Plausible.Ingestion.Event.html
+++ b/Plausible.Ingestion.Event.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Ingestion.Request.html b/Plausible.Ingestion.Request.html
index 56ff0fe83..ac333e303 100644
--- a/Plausible.Ingestion.Request.html
+++ b/Plausible.Ingestion.Request.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Mailer.html b/Plausible.Mailer.html
index 4743d5573..3813fcdbd 100644
--- a/Plausible.Mailer.html
+++ b/Plausible.Mailer.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.OpenTelemetry.Sampler.html b/Plausible.OpenTelemetry.Sampler.html
index 31a52ce67..ff84059dd 100644
--- a/Plausible.OpenTelemetry.Sampler.html
+++ b/Plausible.OpenTelemetry.Sampler.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.PaddleApi.Mock.html b/Plausible.PaddleApi.Mock.html
index 5151357ec..651d46a97 100644
--- a/Plausible.PaddleApi.Mock.html
+++ b/Plausible.PaddleApi.Mock.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.PromEx.Plugins.PlausibleMetrics.html b/Plausible.PromEx.Plugins.PlausibleMetrics.html
index 5bff2b853..a7ab9783c 100644
--- a/Plausible.PromEx.Plugins.PlausibleMetrics.html
+++ b/Plausible.PromEx.Plugins.PlausibleMetrics.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.PromEx.html b/Plausible.PromEx.html
index f5ddcf987..e134d4f77 100644
--- a/Plausible.PromEx.html
+++ b/Plausible.PromEx.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Purge.html b/Plausible.Purge.html
index 2035bd365..7b56db387 100644
--- a/Plausible.Purge.html
+++ b/Plausible.Purge.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Release.html b/Plausible.Release.html
index 24da7217c..e231cf33a 100644
--- a/Plausible.Release.html
+++ b/Plausible.Release.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Repo.html b/Plausible.Repo.html
index d3e574b2f..5dd1409ff 100644
--- a/Plausible.Repo.html
+++ b/Plausible.Repo.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Sentry.Client.html b/Plausible.Sentry.Client.html
index 1602462cc..e0e9aabcf 100644
--- a/Plausible.Sentry.Client.html
+++ b/Plausible.Sentry.Client.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.SentryFilter.html b/Plausible.SentryFilter.html
index 412d1364c..9e4e60801 100644
--- a/Plausible.SentryFilter.html
+++ b/Plausible.SentryFilter.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Session.CacheStore.html b/Plausible.Session.CacheStore.html
index a1fdec921..e9590ac53 100644
--- a/Plausible.Session.CacheStore.html
+++ b/Plausible.Session.CacheStore.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Session.Salts.html b/Plausible.Session.Salts.html
index 6906b8de1..16b0fe904 100644
--- a/Plausible.Session.Salts.html
+++ b/Plausible.Session.Salts.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Session.WriteBuffer.html b/Plausible.Session.WriteBuffer.html
index 97c4908e2..8ffd89a3d 100644
--- a/Plausible.Session.WriteBuffer.html
+++ b/Plausible.Session.WriteBuffer.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Site.Cache.Warmer.All.html b/Plausible.Site.Cache.Warmer.All.html
index 1d6fabb0e..af35c3d1c 100644
--- a/Plausible.Site.Cache.Warmer.All.html
+++ b/Plausible.Site.Cache.Warmer.All.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Site.Cache.Warmer.RecentlyUpdated.html b/Plausible.Site.Cache.Warmer.RecentlyUpdated.html
index aa7a86644..0708e4de6 100644
--- a/Plausible.Site.Cache.Warmer.RecentlyUpdated.html
+++ b/Plausible.Site.Cache.Warmer.RecentlyUpdated.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Site.Cache.Warmer.html b/Plausible.Site.Cache.Warmer.html
index 6178d8850..ce7242b2d 100644
--- a/Plausible.Site.Cache.Warmer.html
+++ b/Plausible.Site.Cache.Warmer.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Site.Cache.html b/Plausible.Site.Cache.html
index fcb205149..c35a07359 100644
--- a/Plausible.Site.Cache.html
+++ b/Plausible.Site.Cache.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Site.CustomDomain.html b/Plausible.Site.CustomDomain.html
index 625aad1a5..b647a4d4b 100644
--- a/Plausible.Site.CustomDomain.html
+++ b/Plausible.Site.CustomDomain.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Site.Domain.html b/Plausible.Site.Domain.html
index 69de9732c..b520b0b7b 100644
--- a/Plausible.Site.Domain.html
+++ b/Plausible.Site.Domain.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Site.GateKeeper.html b/Plausible.Site.GateKeeper.html
index 743e0f660..394a99fac 100644
--- a/Plausible.Site.GateKeeper.html
+++ b/Plausible.Site.GateKeeper.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Site.GoogleAuth.html b/Plausible.Site.GoogleAuth.html
index f6908ce26..7a7f626c6 100644
--- a/Plausible.Site.GoogleAuth.html
+++ b/Plausible.Site.GoogleAuth.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Site.ImportedData.html b/Plausible.Site.ImportedData.html
index c6fee8665..b0cfa55bd 100644
--- a/Plausible.Site.ImportedData.html
+++ b/Plausible.Site.ImportedData.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Site.Membership.html b/Plausible.Site.Membership.html
index 3c6c60162..77daff842 100644
--- a/Plausible.Site.Membership.html
+++ b/Plausible.Site.Membership.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Site.MonthlyReport.html b/Plausible.Site.MonthlyReport.html
index 6e409e8b9..811b55172 100644
--- a/Plausible.Site.MonthlyReport.html
+++ b/Plausible.Site.MonthlyReport.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Site.Removal.html b/Plausible.Site.Removal.html
index 4edbfe01d..9d9c9b079 100644
--- a/Plausible.Site.Removal.html
+++ b/Plausible.Site.Removal.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Site.SharedLink.html b/Plausible.Site.SharedLink.html
index 0e7740886..d9006b104 100644
--- a/Plausible.Site.SharedLink.html
+++ b/Plausible.Site.SharedLink.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Site.SpikeNotification.html b/Plausible.Site.SpikeNotification.html
index d88c1a8ef..803984f16 100644
--- a/Plausible.Site.SpikeNotification.html
+++ b/Plausible.Site.SpikeNotification.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Site.WeeklyReport.html b/Plausible.Site.WeeklyReport.html
index f48c94adb..b51e188cd 100644
--- a/Plausible.Site.WeeklyReport.html
+++ b/Plausible.Site.WeeklyReport.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Site.html b/Plausible.Site.html
index c5f20cae4..4b57eaae6 100644
--- a/Plausible.Site.html
+++ b/Plausible.Site.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.SiteAdmin.html b/Plausible.SiteAdmin.html
index 43e5ce576..d8842e293 100644
--- a/Plausible.SiteAdmin.html
+++ b/Plausible.SiteAdmin.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Sites.html b/Plausible.Sites.html
index b4b5e8299..20130c45d 100644
--- a/Plausible.Sites.html
+++ b/Plausible.Sites.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Stats.Aggregate.html b/Plausible.Stats.Aggregate.html
index 46a5bf8b7..0bb6a8df9 100644
--- a/Plausible.Stats.Aggregate.html
+++ b/Plausible.Stats.Aggregate.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Stats.Base.html b/Plausible.Stats.Base.html
index c5b857961..df3a65cb7 100644
--- a/Plausible.Stats.Base.html
+++ b/Plausible.Stats.Base.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Stats.Breakdown.html b/Plausible.Stats.Breakdown.html
index 310572f4d..b7597dc4e 100644
--- a/Plausible.Stats.Breakdown.html
+++ b/Plausible.Stats.Breakdown.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Stats.Clickhouse.html b/Plausible.Stats.Clickhouse.html
index c5782013b..534a7917d 100644
--- a/Plausible.Stats.Clickhouse.html
+++ b/Plausible.Stats.Clickhouse.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Stats.Compare.html b/Plausible.Stats.Compare.html
index e745ee702..21c9df3d3 100644
--- a/Plausible.Stats.Compare.html
+++ b/Plausible.Stats.Compare.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Stats.Comparisons.html b/Plausible.Stats.Comparisons.html
index 147bedfcd..e8d4f6d44 100644
--- a/Plausible.Stats.Comparisons.html
+++ b/Plausible.Stats.Comparisons.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Stats.CurrentVisitors.html b/Plausible.Stats.CurrentVisitors.html
index 2933cf6c3..1b91e1f9b 100644
--- a/Plausible.Stats.CurrentVisitors.html
+++ b/Plausible.Stats.CurrentVisitors.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Stats.CustomProps.html b/Plausible.Stats.CustomProps.html
index 0e309d9a1..6f81e17cd 100644
--- a/Plausible.Stats.CustomProps.html
+++ b/Plausible.Stats.CustomProps.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Stats.FilterParser.html b/Plausible.Stats.FilterParser.html
index 817a18214..ed448ced1 100644
--- a/Plausible.Stats.FilterParser.html
+++ b/Plausible.Stats.FilterParser.html
@@ -13,7 +13,7 @@
-
+
@@ -180,14 +180,14 @@ Functions
Examples:
-
iex> FilterParser.parse_filters("{\"page\":\"/blog/**\"}")
-%{"page" => "/blog/**"}
+iex> FilterParser.parse_filters("{\"page\":\"/blog/**\"}")
+%{"page" => "/blog/**"}
-iex> FilterParser.parse_filters("visit:browser!=Chrome")
-%{"visit:browser" => {:is_not, "Chrome"}}
+iex> FilterParser.parse_filters("visit:browser!=Chrome")
+%{"visit:browser" => {:is_not, "Chrome"}}
-iex> FilterParser.parse_filters(nil)
-%{}
+iex> FilterParser.parse_filters(nil)
+%{}
diff --git a/Plausible.Stats.FilterSuggestions.html b/Plausible.Stats.FilterSuggestions.html
index 41cba9809..1f999cb43 100644
--- a/Plausible.Stats.FilterSuggestions.html
+++ b/Plausible.Stats.FilterSuggestions.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Stats.Filters.html b/Plausible.Stats.Filters.html
index f1e31767c..de3d1eb93 100644
--- a/Plausible.Stats.Filters.html
+++ b/Plausible.Stats.Filters.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Stats.Fragments.html b/Plausible.Stats.Fragments.html
index 8ff6b3265..e6d05eea9 100644
--- a/Plausible.Stats.Fragments.html
+++ b/Plausible.Stats.Fragments.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Stats.Funnel.html b/Plausible.Stats.Funnel.html
index 5fc5d1a5b..4ea4e9bc0 100644
--- a/Plausible.Stats.Funnel.html
+++ b/Plausible.Stats.Funnel.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Stats.Imported.html b/Plausible.Stats.Imported.html
index 9d7c0c420..569b37b20 100644
--- a/Plausible.Stats.Imported.html
+++ b/Plausible.Stats.Imported.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Stats.Interval.html b/Plausible.Stats.Interval.html
index b3c9f0459..6b014a782 100644
--- a/Plausible.Stats.Interval.html
+++ b/Plausible.Stats.Interval.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Stats.Props.html b/Plausible.Stats.Props.html
index 3956cf430..eef443177 100644
--- a/Plausible.Stats.Props.html
+++ b/Plausible.Stats.Props.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Stats.Query.html b/Plausible.Stats.Query.html
index 4fdb88f68..097957420 100644
--- a/Plausible.Stats.Query.html
+++ b/Plausible.Stats.Query.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Stats.Timeseries.html b/Plausible.Stats.Timeseries.html
index b68cebbde..32b492506 100644
--- a/Plausible.Stats.Timeseries.html
+++ b/Plausible.Stats.Timeseries.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Stats.Util.html b/Plausible.Stats.Util.html
index 61eb676f6..9c37a75a8 100644
--- a/Plausible.Stats.Util.html
+++ b/Plausible.Stats.Util.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Stats.html b/Plausible.Stats.html
index 0dad805e6..78ca7ebc8 100644
--- a/Plausible.Stats.html
+++ b/Plausible.Stats.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Test.Support.HTML.html b/Plausible.Test.Support.HTML.html
index 7fba80288..5baf6cabd 100644
--- a/Plausible.Test.Support.HTML.html
+++ b/Plausible.Test.Support.HTML.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.TestUtils.html b/Plausible.TestUtils.html
index daeb55e74..7f8b3a1f6 100644
--- a/Plausible.TestUtils.html
+++ b/Plausible.TestUtils.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Themes.html b/Plausible.Themes.html
index 1a019ac30..fa92ad531 100644
--- a/Plausible.Themes.html
+++ b/Plausible.Themes.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Timezones.html b/Plausible.Timezones.html
index 5c86885d2..b8c8d40d5 100644
--- a/Plausible.Timezones.html
+++ b/Plausible.Timezones.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Workers.CheckUsage.html b/Plausible.Workers.CheckUsage.html
index e6d176fe6..1cf4a7e10 100644
--- a/Plausible.Workers.CheckUsage.html
+++ b/Plausible.Workers.CheckUsage.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Workers.CleanEmailVerificationCodes.html b/Plausible.Workers.CleanEmailVerificationCodes.html
index b6137042e..91295be87 100644
--- a/Plausible.Workers.CleanEmailVerificationCodes.html
+++ b/Plausible.Workers.CleanEmailVerificationCodes.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Workers.CleanInvitations.html b/Plausible.Workers.CleanInvitations.html
index d0ead0ab8..198dda9b3 100644
--- a/Plausible.Workers.CleanInvitations.html
+++ b/Plausible.Workers.CleanInvitations.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Workers.ExpireDomainChangeTransitions.html b/Plausible.Workers.ExpireDomainChangeTransitions.html
index 71ebdadb4..7f8fdc102 100644
--- a/Plausible.Workers.ExpireDomainChangeTransitions.html
+++ b/Plausible.Workers.ExpireDomainChangeTransitions.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Workers.ImportGoogleAnalytics.html b/Plausible.Workers.ImportGoogleAnalytics.html
index 3078583ef..c4584b8c0 100644
--- a/Plausible.Workers.ImportGoogleAnalytics.html
+++ b/Plausible.Workers.ImportGoogleAnalytics.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Workers.LockSites.html b/Plausible.Workers.LockSites.html
index a7becabf6..fd0c7f6eb 100644
--- a/Plausible.Workers.LockSites.html
+++ b/Plausible.Workers.LockSites.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Workers.NotifyAnnualRenewal.html b/Plausible.Workers.NotifyAnnualRenewal.html
index dd3dceb39..4d17ec8d4 100644
--- a/Plausible.Workers.NotifyAnnualRenewal.html
+++ b/Plausible.Workers.NotifyAnnualRenewal.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Workers.RotateSalts.html b/Plausible.Workers.RotateSalts.html
index 40e4753a9..2f1727f07 100644
--- a/Plausible.Workers.RotateSalts.html
+++ b/Plausible.Workers.RotateSalts.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Workers.ScheduleEmailReports.html b/Plausible.Workers.ScheduleEmailReports.html
index f7d233db1..71f229885 100644
--- a/Plausible.Workers.ScheduleEmailReports.html
+++ b/Plausible.Workers.ScheduleEmailReports.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Workers.SendCheckStatsEmails.html b/Plausible.Workers.SendCheckStatsEmails.html
index 2918908c1..36dd00084 100644
--- a/Plausible.Workers.SendCheckStatsEmails.html
+++ b/Plausible.Workers.SendCheckStatsEmails.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Workers.SendEmailReport.html b/Plausible.Workers.SendEmailReport.html
index 98d6aa191..01096d393 100644
--- a/Plausible.Workers.SendEmailReport.html
+++ b/Plausible.Workers.SendEmailReport.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Workers.SendSiteSetupEmails.html b/Plausible.Workers.SendSiteSetupEmails.html
index 18ff83d2f..51675e57b 100644
--- a/Plausible.Workers.SendSiteSetupEmails.html
+++ b/Plausible.Workers.SendSiteSetupEmails.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Workers.SendTrialNotifications.html b/Plausible.Workers.SendTrialNotifications.html
index 4a5130462..cc4fb1285 100644
--- a/Plausible.Workers.SendTrialNotifications.html
+++ b/Plausible.Workers.SendTrialNotifications.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.Workers.SpikeNotifier.html b/Plausible.Workers.SpikeNotifier.html
index e4e59e83e..152ebdb3d 100644
--- a/Plausible.Workers.SpikeNotifier.html
+++ b/Plausible.Workers.SpikeNotifier.html
@@ -13,7 +13,7 @@
-
+
diff --git a/Plausible.epub b/Plausible.epub
index ccda9b0f0053b6d36a7d011f2a944603e9542a36..1c272abba598526cb2908b2fbea7ba23294529f6 100644
GIT binary patch
delta 126721
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