NAME
Locale::Unicode - Unicode Locale Identifier compliant with BCP47 and CLDR
SYNOPSIS
use Locale::Unicode;
my $locale = Locale::Unicode->new( 'ja-Kana-t-it' ) ||
die( Locale::Unicode->error );
say $locale; # ja-Kana-t-it
# Some undefined locale in Cyrillic script
my $locale = Locale::Unicode->new( 'und-Cyrl' );
$locale->transform( 'und-latn' );
$locale->mechanism( 'ungegn-2007' );
say $locale; # und-Cyrl-t-und-latn-m0-ungegn-2007
# A locale in Cyrillic, transformed from Latin, according to a UNGEGN specification dated 2007.
# Enabling fatal exceptions
use v5.34;
use experimental 'try';
no warnings 'experimental';
try
{
my $locale = Locale::Unicode->new( 'x', fatal => 1 );
# More code
}
catch( $e )
{
say "Oops: ", $e->message;
}
Or, you could set the global variable $FATAL_EXCEPTIONS instead:
use v5.34;
use experimental 'try';
no warnings 'experimental';
local $Locale::Unicode::FATAL_EXCEPTIONS = 1;
try
{
my $locale = Locale::Unicode->new( 'x' );
# More code
}
catch( $e )
{
say "Oops: ", $e->message;
}
This API detects when methods are called in object context and return the current object:
$locale->translation( 'my-software' )->tz( 'jptyo' )->ca( 'japanese' )
In Scalar or in list context, the value returned is the last value set.
$locale->translation( 'my-software' ); # my-software
$locale->translation( 'other-software' ); # other-software
VERSION
v0.4.0
DESCRIPTION
This module implements the Unicode LDML (Locale Data Markup Language) extensions
It does not enforce the standard, and is merely an API to construct, access and modify locales. It is your responsibility to set the right values.
The only requirement is to provide a proper language, which is a 2 or 3-characters code, or a privateuse or other grandfathered language tags
For your convenience, summary of key elements of the standard can be found in this documentation.
It is lightweight and fast with no dependency outside of Scalar::Util and Wanted. It requires perl v5.10.1 minimum to operate.
The object stringifies, and once its string value is computed, it is cached and re-used until it is changed. Thus repetitive call to as_string or to stringification does not incur any speed penalty by recomputing what has not changed.
See the LDML specifications fore more information of what composes a Unicode language identifier.
CONSTRUCTOR
new
# Sets the language 'en'
my $locale = Locale::Unicode->new( 'en' );
# Sets the language 'en' with territory 'GB'
my $locale = Locale::Unicode->new( 'en-GB' );
# Sets the language 'en' with script 'Latn' and territory 'AU'
my $locale = Locale::Unicode->new( 'en-Latn-AU' );
my $locale = Locale::Unicode->new( 'he-IL-u-ca-hebrew-tz-jeruslm' );
my $locale = Locale::Unicode->new( 'ja-Kana-t-it' );
my $locale = Locale::Unicode->new( 'und-Latn-t-und-cyrl' );
my $locale = Locale::Unicode->new( 'und-Cyrl-t-und-latn-m0-ungegn-2007' );
my $locale = Locale::Unicode->new( 'de-u-co-phonebk-ka-shifted' );
# Machine translated from German to Japanese using an undefined vendor
my $locale = Locale::Unicode->new( 'ja-t-de-t0-und' );
$locale->script( 'Kana' );
$locale->country_code( 'JP' );
# Now: ja-Kana-JP-t-de-t0-und
This takes a locale as compliant with the BCP47 standard upgraded by the LDML specifications, and an optional hash or hash reference of options and this returns a new object.
The locale provided is parsed and its components can be accessed and modified using all the methods of this class API.
If an hash or hash reference of options are provided, it will be used to set or modify the components from the locale provided.
If an error occurs, an exception object is set and undef is returned in scalar context, or an empty list in list context. The exception object can then be retrieved using error, such as:
my $locale = Locale::Unicode->new( $somthing_bad ) ||
die( Locale::Unicode->error );
METHODS
All the methods below are context sensitive.
If they are called in an object context, they will return the current Locale::Unicode object for chaining, otherwise, they will return the current value. And if that value is undef, it will return undef in scalar context, but an empty list in list context.
Also, if an error occurs, it will set an exception object and returns undef in scalar context, or an empty list in list context.
apply
my $hash_reference = Locale::Unicode->parse( 'ja-Kana-t-it' );
$locale->apply( $hash_reference );
Provided with an hash reference of key-value pairs, and this will set each corresponding method with the associated value.
If a property provided has no corresponding method, it emits a warning if warnings are enabled
It returns the current object upon success, or sets an error object upon error and returns undef in scalar context, or an empty list in list context.
as_string
Returns the Locale object as a string, based on its latest attributes set.
The string value returned is computed only once and further call to as_string returns a cached value unless changes were made to the Locale attributes.
Boolean values are expressed as true for tue values and false for false values. However, if a value is true for a given locale component, it is not explicitly stated by default, since the LDML specifications indicate, it is true implicitly. If, however, you want the true boolean value to be displayed nevertheless, make sure to set the global variable $EXPLICIT_BOOLEAN to a true value.
For example:
my $locale = Locale::Unicode->new( 'ko-Kore-KR', {
# You can also use 1 or 'yes' as per the specifications
colNumeric => 'true',
colCaseFirst => 'upper'
});
say $locale; # ko-Kore-KR-u-kf-upper-kn
local $EXPLICIT_BOOLEAN = 1;
my $locale = Locale::Unicode->new( 'ko-Kore-KR', {
# You can also use 1 or 'yes' as per the specifications
colNumeric => 'true',
colCaseFirst => 'upper'
});
say $locale; # ko-Kore-KR-u-kf-upper-kn-true
base
my $locale = Locale::Unicode->new( 'en-US' );
say $locale->base; # en-US
my $locale = Locale::Unicode->new( 'en-Latn-US-posix-t-de-AT-t0-und-x0-medical' );
say $locale->base; # en-Latn-US-posix
$locale->base( 'ja-JP' );
say $locale->base; # ja-JP
say $locale; ja-JP-t-de-AT-t0-und-x0-medical
This method sets or gets the base part of the locale
The base part is composed of the language_id, an optional script, an optional territory and zero or more variants
If a value is provided, it will replace the current locale object base
If an improper base value is provided, it will set an error object and return undef in scalar context and an empty list in list context.
It returns the current base as a string.
break_exclusion
my $locale = Locale::Unicode->new( 'ja' );
$locale->break_exclusion( 'hani-hira-kata' );
# Now: ja-dx-hani-hira-kata
This is a Unicode Dictionary Break Exclusion Identifier that specifies scripts to be excluded from dictionary-based text break (for words and lines).
Sets or gets the Unicode extension dx
See also dx
ca
This is an alias for "calendar"
calendar
my $locale = Locale::Unicode->new( 'th' );
$locale->calendar( 'buddhist' );
# or:
# $locale->ca( 'buddhist' );
# Now: th-u-ca-buddhist
# which is the Thai with Buddist calendar
Sets or gets the Unicode extension ca, which is a calendar identifier.
See the section on "BCP47 EXTENSIONS" for the proper values.
canonical
This returns a clone of the current object, formatted as per the Unicode locale canonical specifications.
This means that:
variantVariants are sorted and made in lower case.
my $locale = Locale::Unicode->new( 'en-Scouse-fonipA' ); say $locale->canonical; # en-fonipa-scouseAny duplicates are removed as per the LDML specifications.
my $locale = Locale::Unicode->new( 'de-1996-fonipa-1996' ); say $locale->canonical; # de-1996-fonipaterritoryTerritory is made in upper case
my $locale = Locale::Unicode->new( 'en-us' ); say $locale->canonical; # en-US # Spanish as spoken in South America my $locale = Locale::Unicode->new( 'es-005' ); say $locale->canonical; # es-005scriptScript is formatted in title case.
my $locale = Locale::Unicode->new( 'ja-kana-jp' ); say $locale->canonical; # ja-Kana-JPlanguageThe language code is made in lower case.
The special
languagecoderootis replaced byund
See the LDML specifications for more information.
See also the method "normalise" in Locale::Unicode::Data
cf
This is an alias for "cu_format"
clone
Clones the current object and returns the newly instantiated copy.
If an error occurs, this sets an exception object and returns undef in scalar context, and an empty list in list context.
co
my $locale = Locale::Unicode->new( 'de' );
$locale->collation( 'phonebk' );
$locale->ka( 'shifted' );
# Now: de-u-co-phonebk-ka-shifted
This is a Unicode collation identifier that specifies a type of collation (sort order).
This is an alias for "collation"
colAlternate
my $locale = Locale::Unicode->new( 'de' );
$locale->collation( 'phonebk' );
$locale->ka( 'shifted' );
# Now: de-u-co-phonebk-ka-shifted
$locale->collation( 'noignore' );
# or similarly:
$locale->collation( 'non-ignorable' );
Sets alternate handling for variable weights.
Sets or gets the Unicode extension ka
See "Collation Options" for more information.
colBackwards
$locale->colBackwards(1); # true
# Now: kb-true
$locale->colBackwards(0); # false
# Now: kb-false
Sets collation boolean value for backward collation weight.
Sets or gets the Unicode extension kb
See "Collation Options" for more information.
colCaseFirst
$locale->colCaseFirst( undef ); # false (default)
$locale->colCaseFirst( 'upper' );
$locale->colCaseFirst( 'lower' );
Sets or gets the Unicode extension kf
See "Collation Options" for more information.
colCaseLevel
$locale->colCaseLevel(1); # true
# Now: kc-true
$locale->colCaseLevel(0); # false
# Now: kc-false
Sets collation boolean value for case level.
Sets or gets the Unicode extension kc
See "Collation Options" for more information.
colHiraganaQuaternary
$locale->colHiraganaQuaternary(1); # true
# Now: kh-true
$locale->colHiraganaQuaternary(0); # false
# Now: kh-false
Sets collation parameter key for special Hiragana handling.
Sets or gets the Unicode extension kh
See "Collation Options" for more information.
collation
my $locale = Locale::Unicode->new( 'fr' );
$locale->collation( 'emoji' );
# Now: fr-u-co-emoji
my $locale = Locale::Unicode->new( 'de' );
$locale->collation( 'phonebk' );
# Now: de-u-co-phonebk
# which is: German using Phonebook sorting
Sets or gets the Unicode extension co
This specifies a type of collation (sort order).
See "Unicode extensions" for possible values and more information on standard.
See also "Collation Options" for more on collation options.
colNormalisation
This is an alias for colNormalization
colNormalization
$locale->colNormalization(1); # true
# Now: kk-true
$locale->colNormalization(0); # false
# Now: kk-false
Sets collation parameter key for normalisation.
Sets or gets the Unicode extension kk
See "Collation Options" for more information.
colNumeric
$locale->colNumeric(1); # true
# Now: kn-true
$locale->colNumeric(0); # false
# Now: kn-false
Sets collation parameter key for numeric handling.
Sets or gets the Unicode extension kn
See "Collation Options" for more information.
colReorder
my $locale = Locale::Unicode->new( 'en' );
$locale->colReorder( 'latn-digit' );
# Now: en-u-kr-latn-digit
# Reorder digits after Latin characters.
my $locale = Locale::Unicode->new( 'en' );
$locale->colReorder( 'arab-cyrl-others-symbol' );
# Now: en-u-kr-arab-cyrl-others-symbol
# Reorder Arabic characters first, then Cyrillic, and put
# symbols at the end—after all other characters.
Sets collation reorder codes.
Sets or gets the Unicode extension kr
See "Collation Options" for more information.
shiftedGroup
This is an alias for "colValue"
colStrength
$locale->colStrength( 'level1' );
# Now: ks-level1
# or, equivalent:
$locale->colStrength( 'primary' );
$locale->colStrength( 'level2' );
# or, equivalent:
$locale->colStrength( 'secondary' );
$locale->colStrength( 'level3' );
# or, equivalent:
$locale->colStrength( 'tertiary' );
$locale->colStrength( 'level4' );
# or, equivalent:
$locale->colStrength( 'quaternary' );
$locale->colStrength( 'quarternary' );
$locale->colStrength( 'identic' );
$locale->colStrength( 'identic' );
$locale->colStrength( 'identical' );
Sets the collation parameter key for collation strength used for comparison.
Sets or gets the Unicode extension ks
See "Collation Options" for more information.
colValue
$locale->colValue( 'currency' );
$locale->colValue( 'punct' );
$locale->colValue( 'space' );
$locale->colValue( 'symbol' );
Sets the collation value for the last reordering group to be affected by ka-shifted.
Sets or gets the Unicode extension kv
See "Collation Options" for more information.
colVariableTop
Sets the string value for the variable top.
Sets or gets the Unicode extension vt
See "Collation Options" for more information.
core
my $locale = Locale::Unicode->new( 'ja-Kana-JP-t-de-AT-t0-und-u-ca-japanese-tz-jptyo' );
say $locale->core; # ja-Kana-JP
my $locale = Locale::Unicode->new( 'es-001-valencia-t-und-latn-m0-ungegn-2007' );
say $locale->core; # es-001-valencia
This is a read-only method.
It returns the core part of the locale, which is composed of a 2 to 3-characters code, some optional script and country or region code, and some option variant ID.
country_code
my $locale = Locale::Unicode->new( 'en' );
$locale->country_code( 'US' );
# Now: en-US
$locale->country_code( 'GB' );
# Now: en-GB
Sets or gets the country code part of the locale.
A country code should be an ISO 3166 2-letters code, but keep in mind that the LDML (Locale Data Markup Language) accepts old data to ensure stability.
Note that when you set a country code, it will automatically unset any region code.
my $locale = Locale::Unicode->new( 'en-001' );
say $locale->region; # 001
$locale->country_code( 'US' );
say $locale->region; # undef
say $locale; # en-US
You can use "territory" alternatively.
cu
my $locale = Locale::Unicode->new( 'ja' );
$locale->cu( 'jpy' );
# Now: ja-u-cu-jpy
# which is the Japanese Yens
This is a Unicode currency identifier that specifies a type of currency (ISO 4217 code.
This is an alias for "currency"
cu_format
# Using minus sign symbol for negative numbers
$locale->cf( 'standard' );
# Using parentheses for negative numbers
$locale->cf( 'account' );
This is a currency format identifier such as standard or account
Sets or gets the Unicode extension cf
See the section on "BCP47 EXTENSIONS" for the proper values.
currency
my $locale = Locale::Unicode->new( 'ja' );
$locale->currency( 'jpy' );
# or
# $locale->cu( 'jpy' );
# Now: ja-u-cu-jpy
# which is the Japanese yens
Sets or gets the Unicode extension cu
This specifies a type of ISO4217 currency code.
d0
This is an alias for "destination"
dest
This is an alias for "destination"
destination
Sets or gets the Transformation extension d0 for destination.
See the section on "Transform extensions" for more information.
dx
This is an alias for "break_exclusion"
em
This is an alias for "emoji"
emoji
This is a Unicode Emoji Presentation Style Identifier that specifies a request for the preferred emoji presentation style.
Sets or gets the Unicode extension em.
error
Used as a mutator, this sets and exception object and returns an Locale::Unicode::NullObject in object context (such as when chaining), or undef in scalar context, or an empty list in list context.
The Locale::Unicode::NullObject class prevents the perl error of Can't call method "%s" on an undefined value (see perldiag). Upon the last method chained, undef is returned in scalar context or an empty list in list context.
For example:
my $locale = Locale::Unicode->new( 'ja' );
$locale->translation( 'my-software' )->transform_locale( $bad_value )->tz( 'jptyo' ) ||
die( $locale->error );
In this example, jptyo will never be set, because transform_locale triggered an exception that returned an Locale::Unicode::NullObject object catching all further method calls, but eventually we get the error and die.
extended
# Chinese, Mandarin, Simplified script, as used in China
my $locale = Locale::Unicode->new( 'zh-cmn-Hans-CN' );
say $locale->extended; # cmn
# Mandarin Chinese, Simplified script, as used in China
my $locale = Locale::Unicode->new( 'cmn-Hans-CN' );
say $locale->extended; # undef
say $locale->script; # Hans
# Chinese, Cantonese, as used in Hong Kong SAR
my $locale = Locale::Unicode->new( 'zh-yue-HK' );
say $locale->extended; # yue
Sets or gets the extended language subtags. As per the standard, a language ID may be followed by up to 3 extended language subtag. However, the standard states: "Although the ABNF production 'extlang' permits up to three extended language tags in the language tag, extended language subtags MUST NOT include another extended language subtag in their 'Prefix'. That is, the second and third extended language subtag positions in a language tag are permanently reserved and tags that include those subtags in that position are, and will always remain, invalid."
The regular expression in Locale::Unicode supports the extended language subtag inherited by Unicode from BCP47, although it is not strictly supported by the standard. This is done in order to ensure maximum portability and flexibility.
false
This is read-only and returns a Locale::Unicode::Boolean object representing a false value.
fatal
$locale->fatal(1); # Enable fatal exceptions
$locale->fatal(0); # Disable fatal exceptions
my $bool = $locale->fatal;
Sets or get the boolean value, whether to die upon exception, or not. If set to true, then instead of setting an exception object, this module will die with an exception object. You can catch the exception object then after using try. For example:
use v.5.34; # to be able to use try-catch blocks in perl
use experimental 'try';
no warnings 'experimental';
try
{
my $locale = Locale::Unicode->new( 'x', fatal => 1 );
}
catch( $e )
{
say "Error occurred: ", $e->message;
# Error occurred: Invalid locale value "x" provided.
}
first_day
This is a Unicode First Day Identifier that specifies the preferred first day of the week for calendar display.
Sets or gets the Unicode extension fw.
Its values are sun, mon, etc... sat
fw
This is an alias for "first_day"
grandfathered
# auto-detect and sets an irregular grandfathered language tag
$locale->grandfathered( 'i-klingon' );
# sets a regular grandfathered language tag
$locale->grandfathered( 'zh-hakka' );
Sets or gets a regular or irregular grandfathered language tags
Those language tags are old-style language tags, that, although they remain valid for most of them, their format has morphed, and most of them have been superseded.
This is a convenient method that takes a language tag, and based on its value, this will call the method regular or irregular
If you set a grandfathered language tag, this will automatically unset the language, language3 or privateuse tag value.
The regular expression in Locale::Unicode supports the grandfathered language subtag inherited by Unicode from BCP47, although it is not strictly supported by the standard. This is done in order to ensure maximum portability and flexibility.
grandfathered_irregular
$locale->grandfathered_irregular( 'en-GB-oed' );
$locale->grandfathered_irregular( 'i-ami' );
$locale->grandfathered_irregular( 'i-bnn' );
$locale->grandfathered_irregular( 'i-default' );
$locale->grandfathered_irregular( 'i-enochian' );
$locale->grandfathered_irregular( 'i-hak' );
$locale->grandfathered_irregular( 'i-klingon' );
$locale->grandfathered_irregular( 'i-lux' );
$locale->grandfathered_irregular( 'i-mingo' );
$locale->grandfathered_irregular( 'i-navajo' );
$locale->grandfathered_irregular( 'i-pwn' );
$locale->grandfathered_irregular( 'i-tao' );
$locale->grandfathered_irregular( 'i-tay' );
$locale->grandfathered_irregular( 'i-tsu' );
$locale->grandfathered_irregular( 'sgn-BE-FR' );
$locale->grandfathered_irregular( 'sgn-BE-NL' );
$locale->grandfathered_irregular( 'sgn-CH-DE' );
Sets or gets an irregular grandfathered language tag.
Setting a value, including undef, will unset the language, language3, privateuse or grandfathered_regular tag value.
The regular expression in Locale::Unicode supports the grandfathered language subtag inherited by Unicode from BCP47, although it is not strictly supported by the standard. This is done in order to ensure maximum portability and flexibility.
grandfathered_regular
$locale->grandfathered_regular( 'art-lojban' );
$locale->grandfathered_regular( 'cel-gaulish' );
$locale->grandfathered_regular( 'no-bok' );
$locale->grandfathered_regular( 'no-nyn' );
$locale->grandfathered_regular( 'zh-guoyu' );
$locale->grandfathered_regular( 'zh-hakka' );
$locale->grandfathered_regular( 'zh-min' );
$locale->grandfathered_regular( 'zh-min-nan' );
$locale->grandfathered_regular( 'zh-xiang' );
Sets or gets a regular grandfathered language tag.
Setting a value, including undef, will unset the language, language3, privateuse or grandfathered_irregular tag value.
The regular expression in Locale::Unicode supports the grandfathered language subtag inherited by Unicode from BCP47, although it is not strictly supported by the standard. This is done in order to ensure maximum portability and flexibility.
h0
This is an alias for "hybrid"
hc
This is an alias for "hour_cycle"
hour_cycle
This is a Unicode Hour Cycle Identifier that specifies the preferred time cycle.
Sets or gets the Unicode extension hc.
hybrid
my $locale = Locale::Unicode->new( 'ru' );
$locale->transform( 'en' );
$locale->hybrid(1); # true
# or
# $locale->hybrid( 'hybrid' );
# or
# $locale->h0( 'hybrid' );
# Now: ru-t-en-h0-hybrid
# Hybrid Cyrillic - Runglish
my $locale = Locale::Unicode->new( 'en' );
$locale->transform( 'zh-hant' );
$locale->hybrid( 'hybrid' );
# Now: en-t-zh-hant-h0-hybrid
# which is Hybrid Latin - Chinglish
Those are Hybrid Locale Identifiers indicating that the t value is a language that is mixed into the main language tag to form a hybrid.
Sets or gets the Transformation extension h0.
See the section on "Transform extensions" for more information.
i0
This is an alias for "input"
k0
This is an alias for "keyboard"
input
my $locale = Locale::Unicode->new( 'zh' );
$locale->input( 'pinyin' );
# Now: zh-t-i0-pinyin
This is an Input Method Engine transformation.
Sets or gets the Transformation extension i0.
See the section on "Transform extensions" for more information.
ka
This is an alias for "colAlternate"
kb
This is an alias for "colBackwards"
kc
This is an alias for "colCaseLevel"
keyboard
my $locale = Locale::Unicode->new( 'en' );
$locale->keyboard( 'dvorak' );
# Now: en-t-k0-dvorak
This is a keyboard transformation, such as used by client-side virtual keyboards.
Sets or gets the Transformation extension k0.
See the section on "Transform extensions" for more information.
kf
This is an alias for "colCaseFirst"
kh
This is an alias for "colHiraganaQuaternary"
kk
This is an alias for "colNormalization"
kn
This is an alias for "colNumeric"
kr
This is an alias for "colReorder"
ks
This is an alias for "colStrength"
kv
This is an alias for "colValue"
lang
# current value: fr-FR
$obj->lang( 'de' );
# Now: de-FR
Sets or gets the language part of this locale object.
Note that when you set a 2-letters language code, it automatically will unset any 3-characters language code you would have previously set.
For example:
$obj->lang( 'ja' );
# locale is now set with language code 'ja'
$obj->lang3( 'jpn' );
# locale is now set with 3-characters language code 'jpn'
say $obj->lang; # undef
See also "language"
Note that you can alternatively use the method locale, although strictly speaking a locale is the whole string, while the language is a component of it.
If you use the special locale root, it will be accessible via the method language, although normally this is for 2-characters language
my $locale = Locale::Unicode->new( 'root' );
say $locale; # root
say $locale->language; # root
say $locale->canonical; # und
my $locale = Locale::Unicode->new( 'root-t-de-t0-ja-x0-medical' );
say $locale; # root-t-de-t0-und-x0-medical
say $locale->language; # root
say $locale->canonical; # und-t-de-t0-ja-x0-medical
say $locale->canonical->language; # und
lang3
my $locale = Locale::Unicode->new( 'ja' );
say $locale; # ja
$locale->language3( 'jpn' );
say $locale->language; # undef
$locale->script( 'Kana' );
# Now: jpn-Kana
Sets or gets the 3-letter ISO 639-2 code. Keep in mind, however, that to ensure stability, the LDML (Locale Data Markup Language) also uses old data.
If you set the 3-characters language code, it will replace any previously set 2-characters language code.
language
This is an alias for lang
language3
This is an alias for lang3
language_extended
my $locale = Locale::Unicode->new( 'zh-cmn-TW' );
say $locale->language; # zh
say $locale->language3; # undef
say $locale->language_id; # zh
say $locale->extended; # cmn
say $locale->language_extended; # zh-cmn
say $locale->country_code; # TW
my $locale = Locale::Unicode->new( 'ja-JP' );
say $locale->language; # ja
say $locale->extended; # undef
say $locale->language_extended; # ja
# Okinawan spoken in Japan Southern islands
my $locale = Locale::Unicode->new( 'ryu-JP' );
say $locale->language; # undef
say $locale->language3; # ryu
say $locale->language_id; # ryu
say $locale->language_extended; # ryu
Read-only. This method returns the extended form of the language subtag, which means the 2 to 3-characters language ID and an optional extended language subtag.
Extended language subtag serves to provide more granularity to a locale, complementing the primary language subtag.
For example:
zh-cmn-Hans-CN (Chinese, Mandarin, Simplified script, as used in China)
zh-yue-HK (Chinese, Cantonese, as used in Hong Kong SAR)
However, with Unicode LDML, this is deprecated, and, for example, zh-cmn-TW would be normalised to just zh-TW. See "normalise" in Locale::Unicode::Data for more information.
language_id
$locale->language_id( 'ja' );
$locale->language_id( 'ryu' );
$locale->language_id( 'und' );
# Unset the language ID
$locale->language_id( undef );
my $str = $locale->language_id;
Sets or gets a language ID.
In mutator mode, if the language ID provided is 3-characters long, then language3 will be called to set it, otherwise language will be called.
In accessor mode, it returns the language ID whether it is a 2-characters ID accessible via language, or a 3-characters ID accessible via language3
lb
This is an alias for "line_break"
line_break
This is a Unicode Line Break Style Identifier that specifies a preferred line break style corresponding to the CSS level 3 line-break option.
Sets or gets the Unicode extension lb.
line_break_word
This is a Unicode Line Break Word Identifier that specifies a preferred line break word handling behavior corresponding to the CSS level 3 word-break option
Sets or gets the Unicode extension lw.
locale
This is an alias for lang
locale3
This is an alias for lang3
lw
This is an alias for "line_break_word"
m0
This is an alias for "mechanism"
measurement
This is a Unicode Measurement System Identifier that specifies a preferred measurement system.
Sets or gets the Unicode extension ms.
mechanism
my $locale = Locale::Unicode->new( 'und-Latn' );
$locale->transform( 'ru' );
$locale->mechanism( 'ungegn-2007' );
# Now: und-Latn-t-ru-m0-ungegn-2007
# representing a transformation from United Nations Group of Experts on
# Geographical Names in 2007
This is a transformation mechanism referencing an authority or rules for a type of transformation.
Sets or gets the Transformation extension m0.
See the section on "Transform extensions" for more information.
merge
my $locale1 = Locale::Unicode->new( 'ja-JP' );
my $locale2 = Locale::Unicode->new( 'ja-Kana-hepburn-heploc' );
say $locale1->merge( $locale2 ); # ja-Kana-JP-hepburn-heploc
Provided with another Locale::Unicode object, or a locale string, and this will merge all of that object property with the current object used to call this method.
Since a locale can have multiple variants, merging two locale object, will merge the variants, while avoiding duplicates, like so:
my $locale1 = Locale::Unicode->new( 'ja-Kana-posix-hepburn' );
my $locale2 = Locale::Unicode->new( 'ja-JP-hepburn-heploc' );
say $locale1->merge( $locale2 ); # ja-Kana-JP-posix-hepburn-heploc
Note that it will not sort the variants. For that you want to use the canonical method.
See also the method "normalise" in Locale::Unicode::Data
It returns the current object.
ms
This is an alias for "measurement"
mu
This is an alias for "unit"
nu
This is an alias for "number"
number
This is a Unicode Number System Identifier that specifies a type of number system.
Sets or gets the Unicode extension nu.
overlong
my $locale = Locale::Unicode->new( 'en-US' );
say $locale->overlong; # undef
say $locale->country_code; # US
say $locale->territory; # US
# Changing to overlong USA
$locale->overlong( 'USA' );
say $locale->overlong; # USA
say $locale->country_code; # undef
say $locale->territory; # undef
But doing the following will not yield what you expect, because the overlong territory would be confused by an extended language subtag.
# Italian at Vatican City
my $locale = Locale::Unicode->new( 'it-VAT' );
say $locale->overlong; # undef
say $locale->extended; # VAT
# Spanish as spoken at Panama
my $locale = Locale::Unicode->new( 'es-PAN-valencia' );
say $locale->overlong; # undef
say $locale->extended; # PAN
Thus, you cannot expect to have the value for overlong set. However, you can set it yourself directly by passing a value to method overlong
Sets or gets an overlong country code.
You can normalise those overlong country code to their normal equivalent by using "normalise" in Locale::Unicode::Data
private
my $locale = Locale::Unicode->new( 'ja-JP' );
$locale->private( 'something-else' );
# Now: ja-JP-x-something-else
This serves to set or get the value for a private subtag.
privateuse
$locale->privateuse( 'x-abc' );
my $str = $locale->privateuse;
Sets or gets the privateuse language tag.
Note that this use is deprecated. See the LDML specifications
The regular expression in Locale::Unicode supports the privateuse language subtag inherited by Unicode from BCP47, although it is not strictly supported by the standard. This is done in order to ensure maximum portability and flexibility.
region
# current value: fr-FR
$locale->region( '150' );
# Now: fr-150
Sets or gets the region part of a Unicode locale.
This is a world region represented by a 3-digits code.
Note that when you set a region code, it will automatically unset any country code code.
my $locale = Locale::Unicode->new( 'en-US' );
say $locale->country_code; # US
$locale->region( '001' );
say $locale->country_code; # undef
say $locale; # en-001
Also, be careful that since the region code a padded with leading zeroes, not to turn them inadvertently into integer so that 001 would not become 1. This is particularly true if you store it in a SQL database, where the DBI driver might treat it as a number. You would then have to use bind_param
Below are the known region codes:
001
World
002
Africa
003
North America
005
South America
009
Oceania
011
Western Africa
013
Central America
014
Eastern Africa
015
Northern Africa
017
Middle Africa
018
Southern Africa
019
Americas
021
Northern America
029
Caribbean
030
Eastern Asia
034
Southern Asia
035
Southeast Asia
039
Southern Europe
053
Australasia
054
Melanesia
057
Micronesian Region
061
Polynesia
142
Asia
143
Central Asia
145
Western Asia
150
Europe
151
Eastern Europe
154
Northern Europe
155
Western Europe
202
Sub-Saharan Africa
419
Latin America
region_override
my $locale = Locale::Unicode->new( 'en-GB' );
$locale->region_override( 'uszzzz' );
# Now: en-GB-u-rg-uszzzz
# which is a locale for British English but with region-specific defaults set to US.
This is a Unicode Region Override that specifies an alternate country code or region to use for obtaining certain region-specific default values.
Sets or gets the Unicode extension rg.
reset
When provided with any argument, this will reset the cached value computed by "as_string"
rg
This is an alias for "region_override"
s0
This is an alias for "source"
script
# current value: zh-Hans
$locale->script( 'Hant' );
# Now: zh-Hant
Sets or gets the script part of the locale identifier.
sd
This is an alias for "subdivision"
sentence_break
This is a Unicode Sentence Break Suppressions Identifier that specifies a set of data to be used for suppressing certain sentence breaks.
Sets or gets the Unicode extension ss.
source
This is a transformation source for non-languages or scripts, such as fullwidth-halfwidth conversion.
Sets or gets the Transformation extension s0.
See the section on "Transform extensions" for more information.
ss
This is an alias for "sentence_break"
subdivision
my $locale = Locale::Unicode->new( 'gsw' );
$locale->subdivision( 'chzh' );
# or
# $locale->sd( 'chzh' );
# Now: gsw-u-sd-chzh
my $locale = Locale::Unicode->new( 'en-US' );
$locale->sd( 'usca' );
# Now: en-US-u-sd-usca
This is a Unicode Subdivision Identifier that specifies a regional subdivision used for locale. This is typically the States in the U.S., or prefectures in France or Japan, or provinces in Canada.
Sets or gets the Unicode extension sd.
Be careful of the rule in the standard. For example, en-CA-u-sd-gbsct would be invalid because gb in gbsct does not match the region subtag CA
t0
This is an alias for "translation"
t_private
my $locale = Locale::Unicode->new( 'ja' );
$locale->transform( 'und' );
$locale->t_private( 'medical' );
# Now: ja-t-de-t0-und-x0-medical
This is a private transformation subtag.
Sets or gets the Transformation private subtag x0.
territory
my $locale = Locale::Unicode->new( 'en' );
# Sets the country code to 'US'
$locale->territory( 'US' );
# Now: en-US
$locale->territory( 'GB' );
# Now: en-GB
# Sets the region to 150
$locale->territory( 150 );
Sets or gets the country code or the region code part of the locale.
A country code should be an ISO 3166 2-letters code, but keep in mind that the LDML (Locale Data Markup Language) accepts old data to ensure stability.
A world region is represented by a 3-digits code.
In mutator mode, depending on the value, this method territory will set one or the other.
In accessor mode, this will return the country code, if any, or the region code.
See also country_code and region
time_zone
This is a Unicode Timezone Identifier that specifies a time zone.
Sets or gets the Unicode extension tz.
timezone
This is an alias for "time_zone"
transform
my $locale = Locale::Unicode->new( 'ja' );
$locale->transform( 'it' );
# Now: ja-t-it
# which is Japanese, transformed from Italian
my $locale = Locale::Unicode->new( 'ja-Kana' );
$locale->transform( 'it' );
# Now: ja-Kana-t-it
# which is Japanese Katakana, transformed from Italian
# 'und' is undefined and is perfectly valid
my $locale = Locale::Unicode->new( 'und-Latn' );
$locale->transform( 'und-cyrl' );
# Now: und-Latn-t-und-cyrl
# which is Latin script, transformed from the Cyrillic script
Sets or gets the Transformation extension t.
This takes either a string representing a locale or an Locale::Unicode object.
If a string is provided, it will be converted to an Locale::Unicode object.
The resulting value is passed to transform_locale
This method is convenient since you do not have to concern yourself whether the value you provide is an object, or not.
It returns the current object for chaining.
transform_locale
my $locale = Locale::Unicode->new( 'ja' );
my $locale2 = Locale::Unicode->new( 'it' );
$locale->transform_locale( $locale2 );
# Now: ja-t-it
my $object = $locale->transform_locale;
Sets or gets a Locale::Unicode object used to indicate the original locale subject to transformation.
This will trigger an exception if a value, other than Locale::Unicode or an inheriting class object, is set.
See the section on "Transform extensions" for more information.
translation
my $locale = Locale::Unicode->new( 'ja' );
$locale->transform( 'de' );
$locale->translation( 'und' );
# Now: ja-t-de-t0-und
# Japanese translated from Germany by an undefined vendor
This is used to indicate content that has been machine translated, or a request for a particular type of machine translation of content.
Sets or gets the Transformation extension t0.
See the section on "Transform extensions" for more information.
true
This is read-only and returns a Locale::Unicode::Boolean object representing a true value.
tz
This is an alias for "time_zone"
unit
This is a Measurement Unit Preference Override that specifies an override for measurement unit preference.
Sets or gets the Unicode extension mu.
va
This is an alias for "variant"
variant
This is a Unicode Variant Identifier that specifies a special variant used for locales.
Sets or gets the Unicode extension va.
variants
This returns the variant part of the locale as an array reference of variant subtags.
It will always return an array reference whether any variant is set or not.
my $locale = Locale::Unicode->new( 'en-fonipa-scouse' );
my $ref = $locale->variants; # ['fonipa', 'scouse']
You could reliably do something like:
if( scalar( @{$locale->variants} ) > 1 )
{
# Do something
}
Note that the proper canonical format of a locale has the variants sorted in alphabetical order.
vt
This is an alias for "colVariableTop"
x0
This is an alias for "t_private"
CLASS FUNCTIONS
matches
Provided with a BCP47 locale, and this returns an hash reference of its components if it matches the BCP47 regular expression, which can be accessed as global class variable $LOCALE_RE.
If nothing matches, it returns an empty string in scalar context, or an empty list in list context.
If an error occurs, its sets an error object and returns undef in scalar context, or an empty list in list context.
parse
my $hash_ref = Locale::Unicode->parse( 'ja-Kana-t-it' );
# Transcription in Japanese Katakana of an Italian word:
# {
# ext_transform => "t-it",
# ext_transform_subtag => "it",
# language => "ja",
# script => "Kana",
# }
my $hash_ref = Locale::Unicode->parse( 'he-IL-u-ca-hebrew-tz-jeruslm' );
# Represents Hebrew as spoken in Israel, using the traditional Hebrew calendar,
# and in the "Asia/Jerusalem" time zone
# {
# country_code => "IL",
# ext_unicode => "u-ca-hebrew-tz-jeruslm",
# ext_unicode_subtag => "ca-hebrew-tz-jeruslm",
# language => "he",
# }
Provided with a BCP47 locale, and an optional hash reference like the one returned by matches, and this will return an hash reference with detailed broken down of the locale embedded information, as per the Unicode BCP47 standard.
tz_id2name
Provided with a CLDR timezone ID, such as jptyo for Asia/Tokyo, and this returns the IANA Olson name equivalent, which, in this case, would be Asia/Tokyo
If an error occurs, its sets an error object and returns undef in scalar context, or an empty list in list context.
tz_id2names
my $ref = Locale::Unicode->tz_id2names( 'unknown' );
# yields an empty array object
my $ref = Locale::Unicode->tz_id2names( 'jptyo' );
# Asia/Tokyo
Provided with a CLDR timezone ID, such as ausyd, which stands primarily for Australia/Sydney, and this returns an array object of IANA Olson timezone names, which, in this case, would yield: ['Australia/Sydney', 'Australia/ACT', 'Australia/Canberra', 'Australia/NSW']
The order is set by BCP47 timezone data
If an error occurs, its sets an error object and returns undef in scalar context, or an empty list in list context.
tz_info
my $def = Locale::Unicode->tz_id2names( 'jptyo' );
# yields the following hash reference:
# {
# alias => [qw( Asia/Tokyo Japan )],
# desc => "Tokyo, Japan",
# tz => "Asia/Tokyo",
# }
my $def = Locale::Unicode->tz_id2names( 'unknown' );
# yields an empty string (not undef)
Provided with a CLDR timezone ID, such as jptyo and this returns an hash reference representing the dictionary entry for that ID.
If no information exists for the given timezone ID, an empty string is returned. undef is returned only for errors.
If an error occurs, its sets an error object and returns undef in scalar context, or an empty list in list context.
tz_name2id
my $id = Locale::Unicode->tz_name2id( 'Asia/Tokyo' );
# jptyo
my $id = Locale::Unicode->tz_name2id( 'Australia/Canberra' );
# ausyd
Provided with an IANA Olson timezone name, such as Asia/Tokyo and this returns its CLDR equivalent, which, in this case, would be jptyo
If none exists, an empty string is returned.
If an error occurs, its sets an error object and returns undef in scalar context, or an empty list in list context.
OVERLOADING
Any object from this class is overloaded and stringifies to its locale representation.
For example:
my $locale = Locale::Unicode->new('ja-Kana-t-it' );
say $locale; # ja-Kana-t-it
$locale->transform( 'de' );
say $locale; # ja-Kana-t-de
In boolean context, it always returns true by merely returning the current object instead of falling back on stringifying the object.
Any other overloading is performed using fallback methods.
BCP47 EXTENSIONS
Unicode extensions
Example:
gsw-u-sd-chzh
Known BCP47 language extensions as defined in RFC6067 are as follows:
caA Unicode calendar identifier that specifies a type of calendar used for formatting and parsing, such as date/time symbols and patterns; it also selects supplemental calendarData used for calendrical calculations. The value can affect the computation of the first day of the week.
For example:
ja-u-ca-japaneseJapanese Imperial calendar
th-u-ca-buddhistThai with Buddist calendar
Possible values are:
buddhistThai Buddhist calendar
chineseTraditional Chinese calendar
copticCoptic calendar
dangiTraditional Korean calendar
ethioaaEthiopic calendar, Amete Alem (epoch approx. 5493 B.C.E)
ethiopicEthiopic calendar, Amete Mihret (epoch approx, 8 C.E.)
gregoryGregorian calendar
hebrewTraditional Hebrew calendar
indianIndian calendar
islamicHijri calendar
islamic-civilHijri calendar, tabular (intercalary years [2,5,7,10,13,16,18,21,24,26,29] - civil epoch)
islamic-rgsaHijri calendar, Saudi Arabia sighting
islamic-tblaHijri calendar, tabular (intercalary years [2,5,7,10,13,16,18,21,24,26,29] - astronomical epoch)
islamic-umalquraHijri calendar, Umm al-Qura
islamiccCivil (algorithmic) Arabic calendar
iso8601ISO calendar (Gregorian calendar using the ISO 8601 calendar week rules)
japaneseJapanese Imperial calendar
persianPersian calendar
rocRepublic of China calendar
cfA Unicode currency format identifier
Typical values are:
standardDefault value. Negative numbers use the minusSign symbol.
accountNegative numbers use parentheses or equivalent.
coA Unicode collation identifier that specifies a type of collation (sort order).
Possible values are:
big5hanPinyin ordering for Latin, big5 charset ordering for CJK characters (used in Chinese)
compatA previous version of the ordering, for compatibility
dictDictionary style ordering (such as in Sinhala)
directBinary code point order (used in Hindi)
ducetThe default Unicode collation element table order
emojiRecommended ordering for emoji characters
eorEuropean ordering rules
gb2312Pinyin ordering for Latin, gb2312han charset ordering for CJK characters (used in Chinese)
phonebkPhonebook style ordering (such as in German)
phoneticPhonetic ordering (sorting based on pronunciation)
pinyinPinyin ordering for Latin and for CJK characters (used in Chinese)
reformedReformed ordering (such as in Swedish)
searchSpecial collation type for string search
searchjlSpecial collation type for Korean initial consonant search
standardDefault ordering for each language
strokePinyin ordering for Latin, stroke order for CJK characters (used in Chinese)
tradTraditional style ordering (such as in Spanish)
unihanPinyin ordering for Latin, Unihan radical-stroke ordering for CJK characters (used in Chinese)
zhuyinPinyin ordering for Latin, zhuyin order for Bopomofo and CJK characters (used in Chinese)
For example:
de-u-co-phonebk-ka-shifted(German using Phonebook sorting, ignore punct.)cuA Unicode Currency Identifier that specifies a type of currency (ISO 4217 code) consisting of 3 ASCII letters that are or have been valid in ISO 4217, plus certain additional codes that are or have been in common use.
For example:
ja-u-cu-jpy(Japanese yens)dxA Unicode Dictionary Break Exclusion Identifier specifies scripts to be excluded from dictionary-based text break (for words and lines).
A proper value is one or more Unicode script subtags separated by hyphen. Their order is not important, but canonical order is alphabetical, such as
dx-hani-thaiFor example:
dx-hani-hira-katadx-thai-hani
emA Unicode Emoji Presentation Style Identifier specifies a request for the preferred emoji presentation style.
Possible values are:
emojiUse an emoji presentation for emoji characters if possible.
textUse a text presentation for emoji characters if possible.
defaultUse the default presentation for emoji characters as specified in UTR #51
fwA Unicode First Day Identifier defines the preferred first day of the week for calendar display.
Possible values are:
sunSunday
monMonday
tueTuesday
wedWednesday
thuThursday
friFriday
satSaturday
hcA Unicode Hour Cycle Identifier defines the preferred time cycle.
Possible values are:
h12Hour system using 1–12; corresponds to
hin patternsh23Hour system using 0–23; corresponds to
Hin patternsh11Hour system using 0–11; corresponds to
Kin patternsh24Hour system using 1–24; corresponds to
kin pattern
lbA Unicode Line Break Style Identifier defines a preferred line break style corresponding to the CSS level 3 line-break option.
Possible values are:
strictCSS level 3 line-break=strict, e.g. treat CJ as NS
normalCSS level 3 line-break=normal, e.g. treat CJ as ID, break before hyphens for ja,zh
looseCSS lev 3 line-break=loose
lwA Unicode Line Break Word Identifier defines preferred line break word handling behavior corresponding to the CSS level 3 word-break option.
Possible values are:
normalCSS level 3 word-break=normal, normal script/language behavior for midword breaks
breakallCSS level 3 word-break=break-all, allow midword breaks unless forbidden by lb setting
keepallCSS level 3 word-break=keep-all, prohibit midword breaks except for dictionary breaks
phrasePrioritise keeping natural phrases (of multiple words) together when breaking, used in short text like title and headline
msA Unicode Measurement System Identifier defines a preferred measurement system. Specifying "ms" in a
localeidentifier overrides the default value specified by supplemental measurement system data for the regionPossible values are:
metricMetric System
ussystemUS System of measurement: feet, pints, etc.; pints are 16oz
uksystemUK System of measurement: feet, pints, etc.; pints are 20oz
muA Measurement Unit Preference Override defines an override for measurement unit preference.
Possible values are:
celsiusCelsius as temperature unit
kelvinKelvin as temperature unit
fahrenheFahrenheit as temperature unit
nuA Unicode Number System Identifier defines a type of number system.
For example:
ar-u-nu-native(Arabic with native digits such as "٠١٢٣٤"), orar-u-nu-latn(Arabic with Western digits such as "01234")Possible values are:
4-letters Unicode script subtagarabextExtended Arabic-Indic digits ("arab" means the base Arabic-Indic digits)
armnlowArmenian lowercase numerals
financeFinancial numerals
fullwideFull width digits
greklowGreek lower case numerals
hanidaysHan-character day-of-month numbering for lunar/other traditional calendars
hanidecPositional decimal system using Chinese number ideographs as digits
hansfinSimplified Chinese financial numerals
hantfinTraditional Chinese financial numerals
jpanfinJapanese financial numerals
jpanyearJapanese first-year Gannen numbering for Japanese calendar
lanathamTai Tham Tham (ecclesiastical) digits
mathboldMathematical bold digits
mathdblMathematical double-struck digits
mathmonoMathematical monospace digits
mathsanbMathematical sans-serif bold digits
mathsansMathematical sans-serif digits
mymrepkaMyanmar Eastern Pwo Karen digits
mymrpaoMyanmar Pao digits
mymrshanMyanmar Shan digits
mymrtlngMyanmar Tai Laing digits
nativeNative digits
outlinedLegacy computing outlined digits
romanRoman numerals
romanlowRoman lowercase numerals
segmentLegacy computing segmented digits
tamldecModern Tamil decimal digits
traditioTraditional numerals
rgA Region Override specifies an alternate region to use for obtaining certain region-specific default values
For example:
en-GB-u-rg-uszzzzrepresenting alocalefor British English but with region-specific defaults set to US.sdA Unicode Subdivision Identifier defines a regional subdivision used for locales.
They are called various names, such as a state in the United States, or a prefecture in Japan or France, or a province in Canada.
For example:
en-u-sd-uszzzzSubdivision codes for unknown values are the region code plus
zzzz, such as here withuszzzzfor an unknown subdivision of the US.en-US-u-sd-uscaEnglish as used in California, USA
en-CA-u-sd-gbsctwould be invalid becausegbingbsctdoes not match the region subtagCAssA Unicode Sentence Break Suppressions Identifier defines a set of data to be used for suppressing certain sentence breaks
Possible values are:
none(default)Do not use sentence break suppressions data
standardUse sentence break suppressions data of type
standard
tzA Unicode Timezone Identifier defines a timezone.
To access those values, check the class functions "tz_id2name", tz_id2names, "tz_info" and "tz_name2id"
Possible values are:
adalvName: Andorra
Time zone:
Europe/AndorraaedxbName: Dubai, United Arab Emirates
Time zone:
Asia/DubaiafkblName: Kabul, Afghanistan
Time zone:
Asia/KabulaganuName: Antigua
Time zone:
America/AntiguaaiaxaName: Anguilla
Time zone:
America/AnguillaaltiaName: Tirane, Albania
Time zone:
Europe/TiraneamevnName: Yerevan, Armenia
Time zone:
Asia/YerevanancurName: Curaçao
Time zone:
America/CuracaoaoladName: Luanda, Angola
Time zone:
Africa/LuandaaqamsAmundsen-Scott Station, South Pole
Deprecated. See instead
nzaklaqcasName: Casey Station, Bailey Peninsula
Time zone:
Antarctica/CaseyaqdavName: Davis Station, Vestfold Hills
Time zone:
Antarctica/DavisaqdduName: Dumont d'Urville Station, Terre Adélie
Time zone:
Antarctica/DumontDUrvilleaqmawName: Mawson Station, Holme Bay
Time zone:
Antarctica/MawsonaqmcmName: McMurdo Station, Ross Island
Time zone:
Antarctica/McMurdoaqplmName: Palmer Station, Anvers Island
Time zone:
Antarctica/PalmeraqrotName: Rothera Station, Adelaide Island
Time zone:
Antarctica/RotheraaqsywName: Syowa Station, East Ongul Island
Time zone:
Antarctica/SyowaaqtrlName: Troll Station, Queen Maud Land
Time zone:
Antarctica/TrollaqvosName: Vostok Station, Lake Vostok
Time zone:
Antarctica/VostokarbueName: Buenos Aires, Argentina
Time zone:
America/Buenos_Aires,America/Argentina/Buenos_AiresarcorName: Córdoba, Argentina
Time zone:
America/Cordoba,America/Argentina/Cordoba,America/RosarioarctcName: Catamarca, Argentina
Time zone:
America/Catamarca,America/Argentina/Catamarca,America/Argentina/ComodRivadaviaarirjName: La Rioja, Argentina
Time zone:
America/Argentina/La_RiojaarjujName: Jujuy, Argentina
Time zone:
America/Jujuy,America/Argentina/JujuyarluqName: San Luis, Argentina
Time zone:
America/Argentina/San_LuisarmdzName: Mendoza, Argentina
Time zone:
America/Mendoza,America/Argentina/MendozaarrglName: Río Gallegos, Argentina
Time zone:
America/Argentina/Rio_GallegosarslaName: Salta, Argentina
Time zone:
America/Argentina/SaltaartucName: Tucumán, Argentina
Time zone:
America/Argentina/TucumanaruaqName: San Juan, Argentina
Time zone:
America/Argentina/San_JuanarushName: Ushuaia, Argentina
Time zone:
America/Argentina/UshuaiaasppgName: Pago Pago, American Samoa
Time zone:
Pacific/Pago_Pago,Pacific/Samoa,US/SamoaatvieName: Vienna, Austria
Time zone:
Europe/ViennaauadlName: Adelaide, Australia
Time zone:
Australia/Adelaide,Australia/SouthaubhqName: Broken Hill, Australia
Time zone:
Australia/Broken_Hill,Australia/YancowinnaaubneName: Brisbane, Australia
Time zone:
Australia/Brisbane,Australia/QueenslandaudrwName: Darwin, Australia
Time zone:
Australia/Darwin,Australia/NorthaueucName: Eucla, Australia
Time zone:
Australia/EuclaauhbaName: Hobart, Australia
Time zone:
Australia/Hobart,Australia/Tasmania,Australia/CurrieauknsCurrie, Australia
Deprecated. See instead
auhbaauldcName: Lindeman Island, Australia
Time zone:
Australia/LindemanauldhName: Lord Howe Island, Australia
Time zone:
Australia/Lord_Howe,Australia/LHIaumelName: Melbourne, Australia
Time zone:
Australia/Melbourne,Australia/VictoriaaumqiName: Macquarie Island Station, Macquarie Island
Time zone:
Antarctica/MacquarieauperName: Perth, Australia
Time zone:
Australia/Perth,Australia/WestausydName: Sydney, Australia
Time zone:
Australia/Sydney,Australia/ACT,Australia/Canberra,Australia/NSWawauaName: Aruba
Time zone:
America/ArubaazbakName: Baku, Azerbaijan
Time zone:
Asia/BakubasjjName: Sarajevo, Bosnia and Herzegovina
Time zone:
Europe/SarajevobbbgiName: Barbados
Time zone:
America/BarbadosbddacName: Dhaka, Bangladesh
Time zone:
Asia/Dhaka,Asia/DaccabebruName: Brussels, Belgium
Time zone:
Europe/BrusselsbfouaName: Ouagadougou, Burkina Faso
Time zone:
Africa/OuagadougoubgsofName: Sofia, Bulgaria
Time zone:
Europe/SofiabhbahName: Bahrain
Time zone:
Asia/BahrainbibjmName: Bujumbura, Burundi
Time zone:
Africa/BujumburabjptnName: Porto-Novo, Benin
Time zone:
Africa/Porto-NovobmbdaName: Bermuda
Time zone:
Atlantic/BermudabnbwnName: Brunei
Time zone:
Asia/BruneibolpbName: La Paz, Bolivia
Time zone:
America/La_PazbqkraName: Bonaire, Sint Estatius and Saba
Time zone:
America/KralendijkbrauxName: Araguaína, Brazil
Time zone:
America/AraguainabrbelName: Belém, Brazil
Time zone:
America/BelembrbvbName: Boa Vista, Brazil
Time zone:
America/Boa_VistabrcgbName: Cuiabá, Brazil
Time zone:
America/CuiababrcgrName: Campo Grande, Brazil
Time zone:
America/Campo_GrandebrernName: Eirunepé, Brazil
Time zone:
America/EirunepebrfenName: Fernando de Noronha, Brazil
Time zone:
America/Noronha,Brazil/DeNoronhabrforName: Fortaleza, Brazil
Time zone:
America/FortalezabrmaoName: Manaus, Brazil
Time zone:
America/Manaus,Brazil/WestbrmczName: Maceió, Brazil
Time zone:
America/MaceiobrpvhName: Porto Velho, Brazil
Time zone:
America/Porto_VelhobrrbrName: Rio Branco, Brazil
Time zone:
America/Rio_Branco,America/Porto_Acre,Brazil/AcrebrrecName: Recife, Brazil
Time zone:
America/RecifebrsaoName: São Paulo, Brazil
Time zone:
America/Sao_Paulo,Brazil/EastbrssaName: Bahia, Brazil
Time zone:
America/BahiabrstmName: Santarém, Brazil
Time zone:
America/SantarembsnasName: Nassau, Bahamas
Time zone:
America/NassaubtthiName: Thimphu, Bhutan
Time zone:
Asia/Thimphu,Asia/ThimbubwgbeName: Gaborone, Botswana
Time zone:
Africa/GaboronebymsqName: Minsk, Belarus
Time zone:
Europe/MinskbzbzeName: Belize
Time zone:
America/BelizecacfqName: Creston, Canada
Time zone:
America/CrestoncaedmName: Edmonton, Canada
Time zone:
America/Edmonton,Canada/Mountain,America/YellowknifecaffsRainy River, Canada
Deprecated. See instead
cawnpcafneName: Fort Nelson, Canada
Time zone:
America/Fort_NelsoncaglbName: Glace Bay, Canada
Time zone:
America/Glace_BaycagooName: Goose Bay, Canada
Time zone:
America/Goose_BaycahalName: Halifax, Canada
Time zone:
America/Halifax,Canada/AtlanticcaiqlName: Iqaluit, Canada
Time zone:
America/Iqaluit,America/PangnirtungcamonName: Moncton, Canada
Time zone:
America/MonctoncamtrMontreal, Canada
Deprecated. See instead
catorcapntPangnirtung, Canada
Deprecated. See instead
caiqlcarebName: Resolute, Canada
Time zone:
America/ResolutecaregName: Regina, Canada
Time zone:
America/Regina,Canada/East-Saskatchewan,Canada/SaskatchewancasjfName: St. John's, Canada
Time zone:
America/St_Johns,Canada/NewfoundlandcanpgNipigon, Canada
Deprecated. See instead
catorcathuThunder Bay, Canada
Deprecated. See instead
catorcatorName: Toronto, Canada
Time zone:
America/Toronto,America/Montreal,Canada/Eastern,America/Nipigon,America/Thunder_BaycavanName: Vancouver, Canada
Time zone:
America/Vancouver,Canada/PacificcawnpName: Winnipeg, Canada
Time zone:
America/Winnipeg,Canada/Central,America/Rainy_RivercaybxName: Blanc-Sablon, Canada
Time zone:
America/Blanc-SabloncaycbName: Cambridge Bay, Canada
Time zone:
America/Cambridge_BaycaydaName: Dawson, Canada
Time zone:
America/DawsoncaydqName: Dawson Creek, Canada
Time zone:
America/Dawson_CreekcayekName: Rankin Inlet, Canada
Time zone:
America/Rankin_InletcayevName: Inuvik, Canada
Time zone:
America/InuvikcayxyName: Whitehorse, Canada
Time zone:
America/Whitehorse,Canada/YukoncayynName: Swift Current, Canada
Time zone:
America/Swift_CurrentcayzfYellowknife, Canada
Deprecated. See instead
caedmcayzsName: Atikokan, Canada
Time zone:
America/Coral_Harbour,America/AtikokancccckName: Cocos (Keeling) Islands
Time zone:
Indian/CocoscdfbmName: Lubumbashi, Democratic Republic of the Congo
Time zone:
Africa/LubumbashicdfihName: Kinshasa, Democratic Republic of the Congo
Time zone:
Africa/KinshasacfbgfName: Bangui, Central African Republic
Time zone:
Africa/BanguicgbzvName: Brazzaville, Republic of the Congo
Time zone:
Africa/BrazzavillechzrhName: Zurich, Switzerland
Time zone:
Europe/ZurichciabjName: Abidjan, Côte d'Ivoire
Time zone:
Africa/AbidjanckrarName: Rarotonga, Cook Islands
Time zone:
Pacific/RarotongaclipcName: Easter Island, Chile
Time zone:
Pacific/Easter,Chile/EasterIslandclpuqName: Punta Arenas, Chile
Time zone:
America/Punta_ArenasclsclName: Santiago, Chile
Time zone:
America/Santiago,Chile/ContinentalcmdlaName: Douala, Cameroon
Time zone:
Africa/DoualacnckgChongqing, China
Deprecated. See instead
cnshacnhrbHarbin, China
Deprecated. See instead
cnshacnkhgKashgar, China
Deprecated. See instead
cnurccnshaName: Shanghai, China
Time zone:
Asia/Shanghai,Asia/Chongqing,Asia/Chungking,Asia/Harbin,PRCcnurcName: Ürümqi, China
Time zone:
Asia/Urumqi,Asia/KashgarcobogName: Bogotá, Colombia
Time zone:
America/BogotacrsjoName: Costa Rica
Time zone:
America/Costa_Ricacst6cdtName: POSIX style time zone for US Central Time
Time zone:
CST6CDTcuhavName: Havana, Cuba
Time zone:
America/Havana,CubacvraiName: Cape Verde
Time zone:
Atlantic/Cape_VerdecxxchName: Christmas Island
Time zone:
Indian/ChristmascyfmgName: Famagusta, Cyprus
Time zone:
Asia/FamagustacynicName: Nicosia, Cyprus
Time zone:
Asia/Nicosia,Europe/NicosiaczprgName: Prague, Czech Republic
Time zone:
Europe/PraguedeberName: Berlin, Germany
Time zone:
Europe/BerlindebsngnName: Busingen, Germany
Time zone:
Europe/BusingendjjibName: Djibouti
Time zone:
Africa/DjiboutidkcphName: Copenhagen, Denmark
Time zone:
Europe/CopenhagendmdomName: Dominica
Time zone:
America/DominicadosdqName: Santo Domingo, Dominican Republic
Time zone:
America/Santo_DomingodzalgName: Algiers, Algeria
Time zone:
Africa/AlgiersecgpsName: Galápagos Islands, Ecuador
Time zone:
Pacific/GalapagosecgyeName: Guayaquil, Ecuador
Time zone:
America/GuayaquileetllName: Tallinn, Estonia
Time zone:
Europe/TallinnegcaiName: Cairo, Egypt
Time zone:
Africa/Cairo,EgypteheaiName: El Aaiún, Western Sahara
Time zone:
Africa/El_AaiunerasmName: Asmara, Eritrea
Time zone:
Africa/Asmera,Africa/AsmaraesceuName: Ceuta, Spain
Time zone:
Africa/CeutaeslpaName: Canary Islands, Spain
Time zone:
Atlantic/CanaryesmadName: Madrid, Spain
Time zone:
Europe/Madridest5edtName: POSIX style time zone for US Eastern Time
Time zone:
EST5EDTetaddName: Addis Ababa, Ethiopia
Time zone:
Africa/Addis_AbabafihelName: Helsinki, Finland
Time zone:
Europe/HelsinkifimhqName: Mariehamn, Åland, Finland
Time zone:
Europe/MariehamnfjsuvName: Fiji
Time zone:
Pacific/FijifkpsyName: Stanley, Falkland Islands
Time zone:
Atlantic/StanleyfmksaName: Kosrae, Micronesia
Time zone:
Pacific/KosraefmpniName: Pohnpei, Micronesia
Time zone:
Pacific/Ponape,Pacific/PohnpeifmtkkName: Chuuk, Micronesia
Time zone:
Pacific/Truk,Pacific/Chuuk,Pacific/YapfothoName: Faroe Islands
Time zone:
Atlantic/Faeroe,Atlantic/FaroefrparName: Paris, France
Time zone:
Europe/ParisgalbvName: Libreville, Gabon
Time zone:
Africa/LibrevillegazaGaza Strip, Palestinian Territories
Deprecated. See instead
gazastrpgazastrpName: Gaza Strip, Palestinian Territories
Time zone:
Asia/GazagblonName: London, United Kingdom
Time zone:
Europe/London,Europe/Belfast,GB,GB-EiregdgndName: Grenada
Time zone:
America/GrenadagetbsName: Tbilisi, Georgia
Time zone:
Asia/TbilisigfcayName: Cayenne, French Guiana
Time zone:
America/CayennegggciName: Guernsey
Time zone:
Europe/GuernseyghaccName: Accra, Ghana
Time zone:
Africa/AccragigibName: Gibraltar
Time zone:
Europe/GibraltargldkshvnName: Danmarkshavn, Greenland
Time zone:
America/DanmarkshavnglgohName: Nuuk (Godthåb), Greenland
Time zone:
America/Godthab,America/NuukglobyName: Ittoqqortoormiit (Scoresbysund), Greenland
Time zone:
America/ScoresbysundglthuName: Qaanaaq (Thule), Greenland
Time zone:
America/ThulegmbjlName: Banjul, Gambia
Time zone:
Africa/BanjulgmtName: Greenwich Mean Time
Time zone:
Etc/GMT,Etc/GMT+0,Etc/GMT-0,Etc/GMT0,Etc/Greenwich,GMT,GMT+0,GMT-0,GMT0,GreenwichgnckyName: Conakry, Guinea
Time zone:
Africa/ConakrygpbbrName: Guadeloupe
Time zone:
America/GuadeloupegpmsbName: Marigot, Saint Martin
Time zone:
America/MarigotgpsbhName: Saint Barthélemy
Time zone:
America/St_BarthelemygqssgName: Malabo, Equatorial Guinea
Time zone:
Africa/MalabograthName: Athens, Greece
Time zone:
Europe/AthensgsgrvName: South Georgia and the South Sandwich Islands
Time zone:
Atlantic/South_GeorgiagtguaName: Guatemala
Time zone:
America/GuatemalagugumName: Guam
Time zone:
Pacific/GuamgwoxbName: Bissau, Guinea-Bissau
Time zone:
Africa/BissaugygeoName: Guyana
Time zone:
America/GuyanahebronName: West Bank, Palestinian Territories
Time zone:
Asia/HebronhkhkgName: Hong Kong SAR China
Time zone:
Asia/Hong_Kong,HongkonghntguName: Tegucigalpa, Honduras
Time zone:
America/TegucigalpahrzagName: Zagreb, Croatia
Time zone:
Europe/ZagrebhtpapName: Port-au-Prince, Haiti
Time zone:
America/Port-au-PrincehubudName: Budapest, Hungary
Time zone:
Europe/BudapestiddjjName: Jayapura, Indonesia
Time zone:
Asia/JayapuraidjktName: Jakarta, Indonesia
Time zone:
Asia/JakartaidmakName: Makassar, Indonesia
Time zone:
Asia/Makassar,Asia/Ujung_PandangidpnkName: Pontianak, Indonesia
Time zone:
Asia/PontianakiedubName: Dublin, Ireland
Time zone:
Europe/Dublin,EireimdgsName: Isle of Man
Time zone:
Europe/Isle_of_ManinccuName: Kolkata, India
Time zone:
Asia/Calcutta,Asia/KolkataiodgaName: Chagos Archipelago
Time zone:
Indian/ChagosiqbgwName: Baghdad, Iraq
Time zone:
Asia/BaghdadirthrName: Tehran, Iran
Time zone:
Asia/Tehran,IranisreyName: Reykjavik, Iceland
Time zone:
Atlantic/Reykjavik,IcelanditromName: Rome, Italy
Time zone:
Europe/RomejeruslmName: Jerusalem
Time zone:
Asia/Jerusalem,Asia/Tel_Aviv,IsraeljesthName: Jersey
Time zone:
Europe/JerseyjmkinName: Jamaica
Time zone:
America/Jamaica,JamaicajoammName: Amman, Jordan
Time zone:
Asia/AmmanjptyoName: Tokyo, Japan
Time zone:
Asia/Tokyo,JapankenboName: Nairobi, Kenya
Time zone:
Africa/NairobikgfruName: Bishkek, Kyrgyzstan
Time zone:
Asia/BishkekkhpnhName: Phnom Penh, Cambodia
Time zone:
Asia/Phnom_PenhkicxiName: Kiritimati, Kiribati
Time zone:
Pacific/KiritimatikiphoName: Enderbury Island, Kiribati
Time zone:
Pacific/Enderbury,Pacific/KantonkitrwName: Tarawa, Kiribati
Time zone:
Pacific/TarawakmyvaName: Comoros
Time zone:
Indian/ComoroknbasName: Saint Kitts
Time zone:
America/St_KittskpfnjName: Pyongyang, North Korea
Time zone:
Asia/PyongyangkrselName: Seoul, South Korea
Time zone:
Asia/Seoul,ROKkwkwiName: Kuwait
Time zone:
Asia/KuwaitkygecName: Cayman Islands
Time zone:
America/CaymankzaauName: Aqtau, Kazakhstan
Time zone:
Asia/AqtaukzakxName: Aqtobe, Kazakhstan
Time zone:
Asia/AqtobekzalaName: Almaty, Kazakhstan
Time zone:
Asia/AlmatykzguwName: Atyrau (Guryev), Kazakhstan
Time zone:
Asia/AtyraukzksnName: Qostanay (Kostanay), Kazakhstan
Time zone:
Asia/QostanaykzkzoName: Kyzylorda, Kazakhstan
Time zone:
Asia/QyzylordakzuraName: Oral, Kazakhstan
Time zone:
Asia/OrallavteName: Vientiane, Laos
Time zone:
Asia/VientianelbbeyName: Beirut, Lebanon
Time zone:
Asia/BeirutlccasName: Saint Lucia
Time zone:
America/St_LucialivdzName: Vaduz, Liechtenstein
Time zone:
Europe/VaduzlkcmbName: Colombo, Sri Lanka
Time zone:
Asia/ColombolrmlwName: Monrovia, Liberia
Time zone:
Africa/MonrovialsmsuName: Maseru, Lesotho
Time zone:
Africa/MaserultvnoName: Vilnius, Lithuania
Time zone:
Europe/VilniusluluxName: Luxembourg
Time zone:
Europe/LuxembourglvrixName: Riga, Latvia
Time zone:
Europe/RigalytipName: Tripoli, Libya
Time zone:
Africa/Tripoli,LibyamacasName: Casablanca, Morocco
Time zone:
Africa/CasablancamcmonName: Monaco
Time zone:
Europe/MonacomdkivName: Chişinău, Moldova
Time zone:
Europe/Chisinau,Europe/TiraspolmetgdName: Podgorica, Montenegro
Time zone:
Europe/PodgoricamgtnrName: Antananarivo, Madagascar
Time zone:
Indian/AntananarivomhkwaName: Kwajalein, Marshall Islands
Time zone:
Pacific/Kwajalein,KwajaleinmhmajName: Majuro, Marshall Islands
Time zone:
Pacific/MajuromkskpName: Skopje, Macedonia
Time zone:
Europe/SkopjemlbkoName: Bamako, Mali
Time zone:
Africa/Bamako,Africa/TimbuktummrgnName: Yangon (Rangoon), Burma
Time zone:
Asia/Rangoon,Asia/YangonmncoqName: Choibalsan, Mongolia
Time zone:
Asia/ChoibalsanmnhvdName: Khovd (Hovd), Mongolia
Time zone:
Asia/HovdmnulnName: Ulaanbaatar (Ulan Bator), Mongolia
Time zone:
Asia/Ulaanbaatar,Asia/Ulan_BatormomfmName: Macau SAR China
Time zone:
Asia/Macau,Asia/MacaompspnName: Saipan, Northern Mariana Islands
Time zone:
Pacific/SaipanmqfdfName: Martinique
Time zone:
America/MartiniquemrnkcName: Nouakchott, Mauritania
Time zone:
Africa/NouakchottmsmniName: Montserrat
Time zone:
America/Montserratmst7mdtName: POSIX style time zone for US Mountain Time
Time zone:
MST7MDTmtmlaName: Malta
Time zone:
Europe/MaltamupluName: Mauritius
Time zone:
Indian/MauritiusmvmleName: Maldives
Time zone:
Indian/MaldivesmwblzName: Blantyre, Malawi
Time zone:
Africa/BlantyremxchiName: Chihuahua, Mexico
Time zone:
America/ChihuahuamxcunName: Cancún, Mexico
Time zone:
America/CancunmxcjsName: Ciudad Juárez, Mexico
Time zone:
America/Ciudad_JuarezmxhmoName: Hermosillo, Mexico
Time zone:
America/HermosillomxmamName: Matamoros, Mexico
Time zone:
America/MatamorosmxmexName: Mexico City, Mexico
Time zone:
America/Mexico_City,Mexico/GeneralmxmidName: Mérida, Mexico
Time zone:
America/MeridamxmtyName: Monterrey, Mexico
Time zone:
America/MonterreymxmztName: Mazatlán, Mexico
Time zone:
America/Mazatlan,Mexico/BajaSurmxojiName: Ojinaga, Mexico
Time zone:
America/OjinagamxpvrName: Bahía de Banderas, Mexico
Time zone:
America/Bahia_BanderasmxstisSanta Isabel (Baja California), Mexico
Deprecated. See instead
mxtijmxtijName: Tijuana, Mexico
Time zone:
America/Tijuana,America/Ensenada,Mexico/BajaNorte,America/Santa_IsabelmykchName: Kuching, Malaysia
Time zone:
Asia/KuchingmykulName: Kuala Lumpur, Malaysia
Time zone:
Asia/Kuala_LumpurmzmpmName: Maputo, Mozambique
Time zone:
Africa/MaputonawdhName: Windhoek, Namibia
Time zone:
Africa/WindhoekncnouName: Noumea, New Caledonia
Time zone:
Pacific/NoumeanenimName: Niamey, Niger
Time zone:
Africa/NiameynfnlkName: Norfolk Island
Time zone:
Pacific/NorfolknglosName: Lagos, Nigeria
Time zone:
Africa/LagosnimgaName: Managua, Nicaragua
Time zone:
America/ManaguanlamsName: Amsterdam, Netherlands
Time zone:
Europe/AmsterdamnooslName: Oslo, Norway
Time zone:
Europe/OslonpktmName: Kathmandu, Nepal
Time zone:
Asia/Katmandu,Asia/KathmandunrinuName: Nauru
Time zone:
Pacific/NaurunuiueName: Niue
Time zone:
Pacific/NiuenzaklName: Auckland, New Zealand
Time zone:
Pacific/Auckland,Antarctica/South_Pole,NZnzchtName: Chatham Islands, New Zealand
Time zone:
Pacific/Chatham,NZ-CHATommctName: Muscat, Oman
Time zone:
Asia/MuscatpaptyName: Panama
Time zone:
America/PanamapelimName: Lima, Peru
Time zone:
America/LimapfgmrName: Gambiera Islands, French Polynesia
Time zone:
Pacific/GambierpfnhvName: Marquesas Islands, French Polynesia
Time zone:
Pacific/MarquesaspfpptName: Tahiti, French Polynesia
Time zone:
Pacific/TahitipgpomName: Port Moresby, Papua New Guinea
Time zone:
Pacific/Port_MoresbypgrawName: Bougainville, Papua New Guinea
Time zone:
Pacific/BougainvillephmnlName: Manila, Philippines
Time zone:
Asia/ManilapkkhiName: Karachi, Pakistan
Time zone:
Asia/KarachiplwawName: Warsaw, Poland
Time zone:
Europe/Warsaw,PolandpmmqcName: Saint Pierre and Miquelon
Time zone:
America/MiquelonpnpcnName: Pitcairn Islands
Time zone:
Pacific/PitcairnprsjuName: Puerto Rico
Time zone:
America/Puerto_Ricopst8pdtName: POSIX style time zone for US Pacific Time
Time zone:
PST8PDTptfncName: Madeira, Portugal
Time zone:
Atlantic/MadeiraptlisName: Lisbon, Portugal
Time zone:
Europe/Lisbon,PortugalptpdlName: Azores, Portugal
Time zone:
Atlantic/AzorespwrorName: Palau
Time zone:
Pacific/PalaupyasuName: Asunción, Paraguay
Time zone:
America/AsuncionqadohName: Qatar
Time zone:
Asia/QatarrereuName: Réunion
Time zone:
Indian/ReunionrobuhName: Bucharest, Romania
Time zone:
Europe/BucharestrsbegName: Belgrade, Serbia
Time zone:
Europe/BelgraderuasfName: Astrakhan, Russia
Time zone:
Europe/AstrakhanrubaxName: Barnaul, Russia
Time zone:
Asia/BarnaulruchitaName: Chita Zabaykalsky, Russia
Time zone:
Asia/ChitarudyrName: Anadyr, Russia
Time zone:
Asia/AnadyrrugdxName: Magadan, Russia
Time zone:
Asia/MagadanruiktName: Irkutsk, Russia
Time zone:
Asia/IrkutskrukgdName: Kaliningrad, Russia
Time zone:
Europe/KaliningradrukhndgName: Khandyga Tomponsky, Russia
Time zone:
Asia/KhandygarukraName: Krasnoyarsk, Russia
Time zone:
Asia/KrasnoyarskrukufName: Samara, Russia
Time zone:
Europe/SamararukvxName: Kirov, Russia
Time zone:
Europe/KirovrumowName: Moscow, Russia
Time zone:
Europe/Moscow,W-SUrunozName: Novokuznetsk, Russia
Time zone:
Asia/NovokuznetskruomsName: Omsk, Russia
Time zone:
Asia/OmskruovbName: Novosibirsk, Russia
Time zone:
Asia/NovosibirskrupkcName: Kamchatka Peninsula, Russia
Time zone:
Asia/KamchatkarurtwName: Saratov, Russia
Time zone:
Europe/SaratovrusredName: Srednekolymsk, Russia
Time zone:
Asia/SrednekolymskrutofName: Tomsk, Russia
Time zone:
Asia/TomskruulyName: Ulyanovsk, Russia
Time zone:
Europe/UlyanovskruuneraName: Ust-Nera Oymyakonsky, Russia
Time zone:
Asia/Ust-NeraruuusName: Sakhalin, Russia
Time zone:
Asia/SakhalinruvogName: Volgograd, Russia
Time zone:
Europe/VolgogradruvvoName: Vladivostok, Russia
Time zone:
Asia/VladivostokruyekName: Yekaterinburg, Russia
Time zone:
Asia/YekaterinburgruyksName: Yakutsk, Russia
Time zone:
Asia/YakutskrwkglName: Kigali, Rwanda
Time zone:
Africa/KigalisaruhName: Riyadh, Saudi Arabia
Time zone:
Asia/RiyadhsbhirName: Guadalcanal, Solomon Islands
Time zone:
Pacific/GuadalcanalscmawName: Mahé, Seychelles
Time zone:
Indian/MahesdkrtName: Khartoum, Sudan
Time zone:
Africa/KhartoumsestoName: Stockholm, Sweden
Time zone:
Europe/StockholmsgsinName: Singapore
Time zone:
Asia/Singapore,SingaporeshshnName: Saint Helena
Time zone:
Atlantic/St_HelenasiljuName: Ljubljana, Slovenia
Time zone:
Europe/LjubljanasjlyrName: Longyearbyen, Svalbard
Time zone:
Arctic/Longyearbyen,Atlantic/Jan_MayenskbtsName: Bratislava, Slovakia
Time zone:
Europe/BratislavaslfnaName: Freetown, Sierra Leone
Time zone:
Africa/FreetownsmsaiName: San Marino
Time zone:
Europe/San_MarinosndkrName: Dakar, Senegal
Time zone:
Africa/DakarsomgqName: Mogadishu, Somalia
Time zone:
Africa/MogadishusrpbmName: Paramaribo, Suriname
Time zone:
America/ParamaribossjubName: Juba, South Sudan
Time zone:
Africa/JubasttmsName: São Tomé, São Tomé and Príncipe
Time zone:
Africa/Sao_TomesvsalName: El Salvador
Time zone:
America/El_SalvadorsxphiName: Sint Maarten
Time zone:
America/Lower_PrincessydamName: Damascus, Syria
Time zone:
Asia/DamascusszqmnName: Mbabane, Swaziland
Time zone:
Africa/MbabanetcgdtName: Grand Turk, Turks and Caicos Islands
Time zone:
America/Grand_TurktdndjName: N'Djamena, Chad
Time zone:
Africa/NdjamenatfpfrName: Kerguelen Islands, French Southern Territories
Time zone:
Indian/KerguelentglfwName: Lomé, Togo
Time zone:
Africa/LomethbkkName: Bangkok, Thailand
Time zone:
Asia/BangkoktjdyuName: Dushanbe, Tajikistan
Time zone:
Asia/DushanbetkfkoName: Fakaofo, Tokelau
Time zone:
Pacific/FakaofotldilName: Dili, East Timor
Time zone:
Asia/DilitmasbName: Ashgabat, Turkmenistan
Time zone:
Asia/Ashgabat,Asia/AshkhabadtntunName: Tunis, Tunisia
Time zone:
Africa/TunistotbuName: Tongatapu, Tonga
Time zone:
Pacific/TongataputristName: Istanbul, Türkiye
Time zone:
Europe/Istanbul,Asia/Istanbul,TurkeyttposName: Port of Spain, Trinidad and Tobago
Time zone:
America/Port_of_SpaintvfunName: Funafuti, Tuvalu
Time zone:
Pacific/FunafutitwtpeName: Taipei, Taiwan
Time zone:
Asia/Taipei,ROCtzdarName: Dar es Salaam, Tanzania
Time zone:
Africa/Dar_es_SalaamuaievName: Kyiv, Ukraine
Time zone:
Europe/Kiev,Europe/Kyiv,Europe/Zaporozhye,Europe/UzhgoroduaozhZaporizhia (Zaporozhye), Ukraine
Deprecated. See instead
uaievuasipName: Simferopol, Ukraine
Time zone:
Europe/SimferopoluauzhUzhhorod (Uzhgorod), Ukraine
Deprecated. See instead
uaievugklaName: Kampala, Uganda
Time zone:
Africa/KampalaumawkName: Wake Island, U.S. Minor Outlying Islands
Time zone:
Pacific/WakeumjonJohnston Atoll, U.S. Minor Outlying Islands
Deprecated. See instead
ushnlummdyName: Midway Islands, U.S. Minor Outlying Islands
Time zone:
Pacific/MidwayunkName: Unknown time zone
Time zone:
Etc/UnknownusadkName: Adak (Alaska), United States
Time zone:
America/Adak,America/Atka,US/AleutianusaegName: Marengo (Indiana), United States
Time zone:
America/Indiana/MarengousancName: Anchorage, United States
Time zone:
America/Anchorage,US/AlaskausboiName: Boise (Idaho), United States
Time zone:
America/BoiseuschiName: Chicago, United States
Time zone:
America/Chicago,US/CentralusdenName: Denver, United States
Time zone:
America/Denver,America/Shiprock,Navajo,US/MountainusdetName: Detroit, United States
Time zone:
America/Detroit,US/MichiganushnlName: Honolulu, United States
Time zone:
Pacific/Honolulu,US/Hawaii,Pacific/JohnstonusindName: Indianapolis, United States
Time zone:
America/Indianapolis,America/Fort_Wayne,America/Indiana/Indianapolis,US/East-IndianausinvevName: Vevay (Indiana), United States
Time zone:
America/Indiana/VevayusjnuName: Juneau (Alaska), United States
Time zone:
America/JuneauusknxName: Knox (Indiana), United States
Time zone:
America/Indiana/Knox,America/Knox_IN,US/Indiana-StarkeuslaxName: Los Angeles, United States
Time zone:
America/Los_Angeles,US/Pacific,US/Pacific-NewusluiName: Louisville (Kentucky), United States
Time zone:
America/Louisville,America/Kentucky/LouisvilleusmnmName: Menominee (Michigan), United States
Time zone:
America/MenomineeusmtmName: Metlakatla (Alaska), United States
Time zone:
America/MetlakatlausmocName: Monticello (Kentucky), United States
Time zone:
America/Kentucky/MonticellousnavajoShiprock (Navajo), United States
Deprecated. See instead
usdenusndcntName: Center (North Dakota), United States
Time zone:
America/North_Dakota/CenterusndnslName: New Salem (North Dakota), United States
Time zone:
America/North_Dakota/New_SalemusnycName: New York, United States
Time zone:
America/New_York,US/EasternusoeaName: Vincennes (Indiana), United States
Time zone:
America/Indiana/VincennesusomeName: Nome (Alaska), United States
Time zone:
America/NomeusphxName: Phoenix, United States
Time zone:
America/Phoenix,US/ArizonaussitName: Sitka (Alaska), United States
Time zone:
America/SitkaustelName: Tell City (Indiana), United States
Time zone:
America/Indiana/Tell_CityuswlzName: Winamac (Indiana), United States
Time zone:
America/Indiana/WinamacuswsqName: Petersburg (Indiana), United States
Time zone:
America/Indiana/PetersburgusxulName: Beulah (North Dakota), United States
Time zone:
America/North_Dakota/BeulahusyakName: Yakutat (Alaska), United States
Time zone:
America/YakutatutcName: UTC (Coordinated Universal Time)
Time zone:
Etc/UTC,Etc/UCT,Etc/Universal,Etc/Zulu,UCT,UTC,Universal,Zuluutce01Name: 1 hour ahead of UTC
Time zone:
Etc/GMT-1utce02Name: 2 hours ahead of UTC
Time zone:
Etc/GMT-2utce03Name: 3 hours ahead of UTC
Time zone:
Etc/GMT-3utce04Name: 4 hours ahead of UTC
Time zone:
Etc/GMT-4utce05Name: 5 hours ahead of UTC
Time zone:
Etc/GMT-5utce06Name: 6 hours ahead of UTC
Time zone:
Etc/GMT-6utce07Name: 7 hours ahead of UTC
Time zone:
Etc/GMT-7utce08Name: 8 hours ahead of UTC
Time zone:
Etc/GMT-8utce09Name: 9 hours ahead of UTC
Time zone:
Etc/GMT-9utce10Name: 10 hours ahead of UTC
Time zone:
Etc/GMT-10utce11Name: 11 hours ahead of UTC
Time zone:
Etc/GMT-11utce12Name: 12 hours ahead of UTC
Time zone:
Etc/GMT-12utce13Name: 13 hours ahead of UTC
Time zone:
Etc/GMT-13utce14Name: 14 hours ahead of UTC
Time zone:
Etc/GMT-14utcw01Name: 1 hour behind UTC
Time zone:
Etc/GMT+1utcw02Name: 2 hours behind UTC
Time zone:
Etc/GMT+2utcw03Name: 3 hours behind UTC
Time zone:
Etc/GMT+3utcw04Name: 4 hours behind UTC
Time zone:
Etc/GMT+4utcw05Name: 5 hours behind UTC
Time zone:
Etc/GMT+5,ESTutcw06Name: 6 hours behind UTC
Time zone:
Etc/GMT+6utcw07Name: 7 hours behind UTC
Time zone:
Etc/GMT+7,MSTutcw08Name: 8 hours behind UTC
Time zone:
Etc/GMT+8utcw09Name: 9 hours behind UTC
Time zone:
Etc/GMT+9utcw10Name: 10 hours behind UTC
Time zone:
Etc/GMT+10,HSTutcw11Name: 11 hours behind UTC
Time zone:
Etc/GMT+11utcw12Name: 12 hours behind UTC
Time zone:
Etc/GMT+12uymvdName: Montevideo, Uruguay
Time zone:
America/MontevideouzskdName: Samarkand, Uzbekistan
Time zone:
Asia/SamarkanduztasName: Tashkent, Uzbekistan
Time zone:
Asia/TashkentvavatName: Vatican City
Time zone:
Europe/VaticanvcsvdName: Saint Vincent, Saint Vincent and the Grenadines
Time zone:
America/St_VincentveccsName: Caracas, Venezuela
Time zone:
America/CaracasvgtovName: Tortola, British Virgin Islands
Time zone:
America/TortolavisttName: Saint Thomas, U.S. Virgin Islands
Time zone:
America/St_Thomas,America/VirginvnsgnName: Ho Chi Minh City, Vietnam
Time zone:
Asia/Saigon,Asia/Ho_Chi_MinhvuvliName: Efate, Vanuatu
Time zone:
Pacific/EfatewfmauName: Wallis Islands, Wallis and Futuna
Time zone:
Pacific/WalliswsapwName: Apia, Samoa
Time zone:
Pacific/ApiayeadeName: Aden, Yemen
Time zone:
Asia/AdenytmamName: Mayotte
Time zone:
Indian/MayottezajnbName: Johannesburg, South Africa
Time zone:
Africa/JohannesburgzmlunName: Lusaka, Zambia
Time zone:
Africa/LusakazwhreName: Harare, Zimbabwe
Time zone:
Africa/Harare
See the standard documentation for more information.
vaA Unicode Variant Identifier defines a special variant used for locales.
Transform extensions
This is used for transliterations, transcriptions, translations, etc, as per RFC6497
For example:
ja-t-itThe content is Japanese, transformed from Italian.
ja-Kana-t-itThe content is Japanese Katakana, transformed from Italian.
und-Latn-t-und-cyrlThe content is in the Latin script, transformed from the Cyrillic script.
und-Cyrl-t-und-latn-m0-ungegn-2007The content is in Cyrillic, transformed from Latin, according to a UNGEGN specification dated 2007.
The date is of format
YYYYMMDDall without space, and the month and day information should be provided only when necessary for clarification, as per the RFC6497, section 2.5(c)und-Cyrl-t-und-latn-m0-ungegnSame, but without year.
The complete list of valid subtags is as follows. They are all two to eight alphanumeric characters.
d0Transform destination: for non-languages/scripts, such as fullwidth-halfwidth conversion
See also
s0Possible values are:
accentsMap base + punctuation, etc to accented characters
asciiMap as many characters to the closest ASCII character as possible
casefoldApply Unicode case folding
charnameMap each character to its Unicode name
digitConvert to digit form of accent
fccMap string to the FCC format; http://unicode.org/notes/tn5
fcdMap string to the FCD format; http://unicode.org/notes/tn5
fwidthMap characters to their fullwidth equivalents
hexMap characters to a hex equivalents, eg
ato\u0061; for hex variants see transform.xmlhwidthMap characters to their halfwidth equivalents
lowerApply Unicode full lowercase mapping
morseMap Unicode to Morse Code encoding
nfcMap string to the Unicode NFC format
nfdMap string to the Unicode NFD format
nfkcMap string to the Unicode NFKC format
nfkdMap string to the Unicode NFKD format
npinyinMap pinyin written with tones to the numeric form
nullMake no change in the string
publishMap to preferred forms for publishing, such as
,,—removeRemove every character in the string
titleApply Unicode full titlecase mapping
upperApply Unicode full uppercase mapping
zawgyiMap Unicode to Zawgyi Myanmar encoding
h0Hybrid Locale Identifiers:
h0with the valuehybridindicates that the-t-value is a language that is mixed into the main language tag to form a hybrid.For example:
hi-t-en-h0-hybridHybrid Deva - Hinglish
Hindi-English hybrid where the script is Devanagari*
hi-Latn-t-en-h0-hybridHybrid Latin - Hinglish
Hindi-English hybrid where the script is Latin*
ru-t-en-h0-hybridHybrid Cyrillic - Runglish
Russian with an admixture of American English
ru-t-en-gb-h0-hybridHybrid Cyrillic - Runglish
Russian with an admixture of British English
en-t-zh-h0-hybridHybrid Latin - Chinglish
American English with an admixture of Chinese (Simplified Mandarin Chinese)
en-t-zh-hant-h0-hybridHybrid Latin - Chinglish
American English with an admixture of Chinese (Traditional Mandarin Chinese)
i0Input Method Engine transform: used to indicate an input method transformation, such as one used by a client-side input method. The first subfield in a sequence would typically be a
platformor vendor designation.For example:
zh-t-i0-pinyinPossible values are:
handwritHandwriting input: used when the only information known (or requested) is that the text was (or is to be) converted using an handwriting input.
pinyinPinyin input: for simplified Chinese characters. See also http://en.wikipedia.org/wiki/Pinyin_method.
undThe choice of input method is not specified. Used when the only information known (or requested) is that the text was (or is to be) converted using an input method engine
wubiWubi input: for simplified Chinese characters. For background information, see http://en.wikipedia.org/wiki/Wubi_method
k0Keyboard transform: used to indicate a keyboard transformation, such as one used by a client-side virtual keyboard. The first subfield in a sequence would typically be a
platformdesignation, representing the platform that the keyboard is intended for.For example:
en-t-k0-dvorakPossible values are:
101key101 key layout.
102key102 key layout.
600dpiKeyboard for a 600 dpi device.
768dpiKeyboard for a 768 dpi device.
androidAndroid keyboard.
azertyA AZERTY-based keyboard or one that approximates AZERTY in a different script.
chromeosChromeOS keyboard.
colemakColemak keyboard layout. The Colemak keyboard is an alternative to the QWERTY and dvorak keyboards. http://colemak.com/.
dvorakDvorak keyboard layout. See also http://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard.
dvoraklDvorak left-handed keyboard layout. See also http://en.wikipedia.org/wiki/File:KB_Dvorak_Left.svg.
dvorakrDvorak right-handed keyboard layout. See also http://en.wikipedia.org/wiki/File:KB_Dvorak_Right.svg.
el220Greek 220 keyboard. See also http://www.microsoft.com/resources/msdn/goglobal/keyboards/kbdhela2.html.
el319Greek 319 keyboard. See also ftp://ftp.software.ibm.com/software/globalization/keyboards/KBD319.pdf.
extendedA keyboard that has been enhanced with a large number of extra characters.
googlevkGoogle virtual keyboard.
isiriPersian ISIRI keyboard. Based on ISIRI 2901:1994 standard. See also http://behdad.org/download/Publications/persiancomputing/a007.pdf.
legacyA keyboard that has been replaced with a newer standard but is kept for legacy purposes.
lt1205Lithuanian standard keyboard, based on the LST 1205:1992 standard. See also http://www.kada.lt/litwin/.
lt1582Lithuanian standard keyboard, based on the LST 1582:2000 standard. See also http://www.kada.lt/litwin/.
nutaaqInuktitut Nutaaq keyboard. See also http://www.pirurvik.ca/en/webfm_send/15.
osxMac OSX keyboard.
pattaThai Pattachote keyboard. This is a less frequently used layout in Thai (Kedmanee layout is more popular). See also http://www.nectec.or.th/it-standards/keyboard_layout/thai-key.htm.
qwertyQWERTY-based keyboard or one that approximates QWERTY in a different script.
qwertzQWERTZ-based keyboard or one that approximates QWERTZ in a different script.
ta99Tamil 99 keyboard. See also http://www.tamilvu.org/Tamilnet99/annex1.htm.
undThe vender for the keyboard is not specified. Used when the only information known (or requested) is that the text was (or is to be) converted using an keyboard.
varA keyboard layout with small variations from the default.
viqrVietnamese VIQR layout, based on http://tools.ietf.org/html/rfc1456.
windowsWindows keyboard.
m0Transform extension mechanism: to reference an authority or rules for a type of transformation.
For example:
und-Latn-t-ru-m0-ungegn-2007Possible values are:
aethiopiEncylopedia Aethiopica Transliteration
alalocAmerican Library Association-Library of Congress
betametsBeta Maṣāḥǝft Transliteration
bgnUS Board on Geographic Names
buckwaltBuckwalter Arabic transliteration system
c11for hex transforms, using the C11 syntax: \u0061\U0001F4D6
cssfor hex transforms, using the CSS syntax: \61 \01F4D6, spacing where necessary
dinDeutsches Institut für Normung
es3842Ethiopian Standards Agency ES 3842:2014 Ethiopic-Latin Transliteration
ewtsExtended Wylie Transliteration Scheme
gostEuro-Asian Council for Standardization, Metrology and Certification
gurageGurage Legacy to Modern Transliteration
gutgartsYaros Gutgarts Ethiopic-Cyrillic Transliteration
iastInternational Alphabet of Sanskrit Transliteration
iesjesIES/JES Amharic Transliteration
isoInternational Organization for Standardization
javafor hex transforms, using the Java syntax: \u0061\uD83D\uDCD6
lambdinThomas Oden Lambdin Ethiopic-Latin Transliteration
mcstKorean Ministry of Culture, Sports and Tourism
mnsMongolian National Standard
percentfor hex transforms, using the percent syntax: %61%F0%9F%93%96
perlfor hex transforms, using the perl syntax: \x{61}\x{1F4D6}
plainfor hex transforms, with no surrounding syntax, spacing where necessary: 0061 1F4D6
prprnametransform variant for proper names
sattsStandard Arabic Technical Transliteration System (SATTS)
seraSystem for Ethiopic Representation in ASCII
tekiealiTekie Alibekit Blin-Latin Transliteration
ungegnUnited Nations Group of Experts on Geographical Names
unicodeto hex with the Unicode syntax: U+0061 U+1F4D6, spacing where necessary
xalegetEritrean Ministry of Education Blin-Latin Transliteration
xmlfor hex transforms, using the xml syntax: a📖
xml10for hex transforms, using the xml decimal syntax: a📖
s0Transform source: for non-languages/scripts, such as fullwidth-halfwidth conversion
See also
d0Possible values are:
accentsAccented characters to map base + punctuation, etc
asciiMap from ASCII to the target, perhaps using different conventions
hexMap characters from hex equivalents, trying all variants, eg
U+0061toa; for hex variants see transform.xmlmorseMap Morse Code to Unicode encoding
npinyinMap the numeric form of pinyin to the tone format
publishMap publishing characters, such as
,,—, to from vanilla characterszawgyiMap Zawgyi Myanmar encoding to Unicode
t0Machine Translation: used to indicate content that has been machine translated, or a request for a particular type of machine translation of content. The first subfield in a sequence would typically be a
platformor vendor designation.For example:
ja-t-de-t0-undx0Private Use.
For example:
ja-t-de-t0-und-x0-medical
Collation Options
Parametric settings can be specified in language tags or in rule syntax (in the form [keyword value] ). For example, -ks-level2 or [strength 2] will only compare strings based on their primary and secondary weights.
The options description below is taken from the LDML standard, and reflect how the algorithm works when implemented by web browser, or other runtime environment. This module does not do any of those algorithms. The documentation is only here for your benefit and convenience.
See the standard documentation and the DUCET (Default Unicode Collation Element Table) for more information.
kaorcolAlternateSets alternate handling for variable weights.
Possible values are optional and can be:
noignoreornon-ignorableDefault value.
shifted
kborcolBackwardsSets collation parameter key for backward collation weight.
Sets alternate handling for variable weights.
Possible values are optional and can be:
trueoryes,false(default) ornokcorcolCaseLevelSets collation parameter key for case level.
Specifies a boolean. If
on, a level consisting only of case characteristics will be inserted in front of tertiary level, as a "Level 2.5". To ignore accents but take case into account, set strength toprimaryand case level toon.Possible values are optional and can be:
trueoryes,false(default) ornokforcolCaseFirstSets collation parameter key for ordering by case.
If set to
upper, causes upper case to sort before lower case. If set tolower, causes lower case to sort before upper case.Possible values are:
upper,lower,false(default) ornokhorcolHiraganaQuaternarySets collation parameter key for special Hiragana handling.
This is deprecated by the LDML standard.
Specifies a boolean. Controls special treatment of Hiragana code points on quaternary level. If turned on, Hiragana codepoints will get lower values than all the other non-variable code points in shifted.
Possible values are optional and can be:
true(default) oryes,falseornokkorcolNormalizationSets collation parameter key for normalisation.
Specifies a boolean. If on, then the normal UCA algorithm is used.
Possible values are optional and can be:
true(default) oryes,falseornoknorcolNumericSets collation parameter key for numeric handling.
Specifies a boolean. If set to on, any sequence of Decimal Digits is sorted at a primary level with its numeric value.
Possible values are optional and can be:
trueoryes,false(default) ornokrorcolReorderSets collation reorder codes.
Specifies a reordering of scripts or other significant blocks of characters such as symbols, punctuation, and digits.
Possible values are:
currency,digit,punct,space,symbol, or any BCP47 script ID.Also possible:
otherswhere all codes not explicitly mentioned should be ordered. The script code Zzzz (Unknown Script) is a synonym for others.For example:
en-u-kr-latn-digitReorder digits after Latin characters.
en-u-kr-arab-cyrl-others-symbolReorder Arabic characters first, then Cyrillic, and put symbols at the end—after all other characters.
en-u-kr-othersRemove any locale-specific reordering, and use DUCET order for reordering blocks.
ksorcolStrengthSets the collation parameter key for collation strength used for comparison.
Possible values are:
level1orprimarylevel2orsecondarylevel3(default) ortertiarylevel4orquaternaryorquarternaryidenticoridentical
kvSets the collation parameter key for
maxVariable, the last reordering group to be affected byka-shifted.Possible values are:
currencySpaces, punctuation and all symbols are affected by ka-shifted.
punctSpaces and punctuation are affected by ka-shifted (CLDR default).
spaceOnly spaces are affected by ka-shifted.
symbolSpaces, punctuation and symbols except for currency symbols are affected by ka-shifted (UCA default).
vtSets the parameter key for the variable top.
This is deprecated by the LDML standard.
EXCEPTIONS
This module does not die upon errors, unless you have set fatal to a true value. Instead it sets an error object that can be retrieved.
When an error occurred, an error object will be set and the method will return undef in scalar context and an empty list in list context.
Otherwise, the only occasions when this module will die is when there is an internal design error, which would be my fault.
SERIALISATION
Locale::Unicode supports Storable::Improved, Storable, Sereal and CBOR serialisation, by implementing the methods FREEZE, THAW, STORABLE_freeze, STORABLE_thaw
For serialisation with Sereal, make sure to instantiate the Sereal encoder with the freeze_callbacks option set to true, otherwise, Sereal will not use the FREEZE and THAW methods.
See "FREEZE/THAW CALLBACK MECHANISM" in Sereal::Encoder for more information.
For CBOR, it is recommended to use the option allow_sharing to enable the reuse of references, such as:
my $cbor = CBOR::XS->new->allow_sharing;
Also, if you use the option allow_tags with JSON, then all of those modules will work too, since this option enables support for the FREEZE and THAW methods.
AUTHOR
Jacques Deguest <jack@deguest.jp>
SEE ALSO
https://github.com/unicode-org/cldr/tree/main/common/bcp47, https://en.wikipedia.org/wiki/IETF_language_tag
https://www.rfc-editor.org/info/bcp47
Unicode Locale Data Markup Language
RFC6067 on the Unicode extensions
RFC6497 on the transformation extension
See HTML::Object::Locale for an implementation of Web API class Intl.Locale
Unicode::Collate, Unicode::Collate::Locale, Unicode::Unihan
Locale::Unicode::Data for the entire CLDR data accessible as a SQLite database.
COPYRIGHT & LICENSE
Copyright(c) 2024 DEGUEST Pte. Ltd.
All rights reserved
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.