The ECMAScript 2016 Internationalization API Specification (ECMA-402 3rd Edition), provides key languagesensitive functionality as a complement to the ECMAScript 2016 Language Specification (ECMA-262 7th Edition or successor). Its functionality has been selected from that of well-established internationalization APIs such as those of the Internationalization Components for Unicode (ICU) library, of the .NET framework, or of the Java platform.
This ECMAScript specification is the first edition released under Ecma TC39's new yearly release cadence and open development process. A plain-text source document was built from the previous edition source document to serve as the base for further development entirely on GitHub. Over the year of this standard's development, dozens of pull requests and issues were filed representing numerous bug fixes, editorial fixes and other improvements. Additionally, numerous software tools were developed to aid in this effort including Ecmarkup, Ecmarkdown, and Grammarkdown. This specification adds a new method to Intl called getCanonicalLocales.
The 1st Edition API was developed by an ad-hoc group established by Ecma TC39 in September 2010 based on a proposal by Nebojša Ćirić and Jungshik Shin.
Internationalization of software is never complete. We expect significant enhancements in future editions of this specification.
This Standard defines the application programming interface for ECMAScript objects that support programs that need to adapt to the linguistic and cultural conventions used by different human languages and countries.
A conforming implementation of the ECMAScript 2016 Internationalization API Specification must conform to the ECMAScript 2016 Language Specification (ECMA-262 7th Edition, or successor), and must provide and support all the objects, properties, functions, and program semantics described in this specification.
A conforming implementation of the ECMAScript 2016 Internationalization API Specification is permitted to provide additional objects, properties, and functions beyond those described in this specification. In particular, a conforming implementation of the ECMAScript 2016 Internationalization API Specification is permitted to provide properties not described in this specification, and values for those properties, for objects that are described in this specification. A conforming implementation is not permitted to add optional arguments to the functions defined in this specification.
A conforming implementation is permitted to accept additional values, and then have implementation-defined behaviour instead of throwing a
The following referenced documents are required for the application of this document. For dated references, only the edition cited applies. For undated references, the latest edition of the referenced document (including any amendments) applies.
ECMAScript 2016 Language Specification (ECMA-262 7th Edition, or successor).
https://www.ecma-international.org/publications-and-standards/standards/ecma-262/
This section contains a non-normative overview of the ECMAScript 2016 Internationalization API Specification.
Internationalization of software means designing it such that it supports or can be easily adapted to support the needs of users speaking different languages and having different cultural expectations, and enables worldwide communication between them. Localization then is the actual adaptation to a specific language and culture. Globalization of software is commonly understood to be the combination of internationalization and localization. Globalization starts at the lowest level by using a text representation that supports all languages in the world, and using standard identifiers to identify languages, countries, time zones, and other relevant parameters. It continues with using a user interface language and data presentation that the user understands, and finally often requires product-specific adaptations to the user’s language, culture, and environment.
The ECMAScript 2016 Language Specification lays the foundation by using Unicode for text representation and by providing a few language-sensitive functions, but gives applications little control over the behaviour of these functions. The ECMAScript 2016 Internationalization API Specification builds on this by providing a set of customizable language-sensitive functionality. The API is useful even for applications that themselves are not internationalized, as even applications targeting only one language and one region need to properly support that one language and region. However, the API also enables applications that support multiple languages and regions, even concurrently, as may be needed in server environments.
The ECMAScript 2016 Internationalization API Specification is designed to complement the ECMAScript 2016 Language Specification by providing key language-sensitive functionality. The API can be added to an implementation of the ECMAScript 2016 Language Specification (ECMA-262 7th Edition, or successor).
The ECMAScript 2016 Internationalization API Specification provides several key pieces of language-sensitive functionality that are required in most applications: String comparison (collation), number formatting, date and time formatting, and case conversion. While the ECMAScript 2016 Language Specification provides functions for this basic functionality (on Array.prototype: toLocaleString; on String.prototype: localeCompare, toLocaleLowerCase, toLocaleUpperCase; on Number.prototype: toLocaleString; on Date.prototype: toLocaleString, toLocaleDateString, and toLocaleTimeString), it leaves the actual behaviour of these functions largely up to implementations to define. The ECMAScript 2016 Internationalization API Specification provides additional functionality, control over the language and over details of the behaviour to be used, and a more complete specification of required functionality.
Applications can use the API in two ways:
The Intl object is used to package all functionality defined in the ECMAScript 2016 Internationalization API Specification to avoid name collisions.
Due to the nature of internationalization, the API specification has to leave several details implementation dependent:
This standard uses a subset of the notational conventions of the ECMAScript 2016 Language Specification (ECMA-262 7th Edition), as ES2016:
As an extension to the
For ECMAScript objects, this standard may use variable-named internal slots: The notation "[[<name>]]" denotes an internal slot whose name is given by the variable name, which must have a String value. For example, if a variable s has the value
The following table extends the Well-Known Intrinsic Objects table defined in ES2016,
Intrinsic Name | Global Name | ECMAScript Language Association |
---|---|---|
%Date_now% | "Date.now" | The initial value of the |
"Intl" | The Intl object ( |
|
"Intl.Collator" | The Intl.Collator constructor ( |
|
"Intl.Collator.prototype" | The initial value of the |
|
"Intl.NumberFormat" | The Intl.NumberFormat constructor ( |
|
"Intl.NumberFormat.prototype" | The initial value of the |
|
"Intl.DateTimeFormat" | The Intl.DateTimeFormat constructor ( |
|
"Intl.DateTimeFormat.prototype" | The initial value of the |
|
%StringProto_includes% | "String.prototype.includes" | The initial value of the |
%StringProto_indexOf% | "String.prototype.indexOf" | The initial value of the |
%ArrayProto_indexOf% | "Array.prototype.indexOf" | The initial value of the |
This clause describes the String values used in the ECMAScript 2016 Internationalization API Specification to identify locales, currencies, and time zones.
The String values used to identify locales, currencies, and time zones are interpreted in a case-insensitive manner, treating the Unicode Basic Latin characters "A" to "Z" (U+0041 to U+005A) as equivalent to the corresponding Basic Latin characters "a" to "z" (U+0061 to U+007A). No other case folding equivalences are applied. When mapping to upper case, a mapping shall be used that maps characters in the range "a" to "z" (U+0061 to U+007A) to the corresponding characters in the range "A" to "Z" (U+0041 to U+005A) and maps no other characters to the latter range.
EXAMPLES "ß" (U+00DF) must not match or be mapped to "SS" (U+0053, U+0053). "ı" (U+0131) must not match or be mapped to "I" (U+0049).
The ECMAScript 2016 Internationalization API Specification identifies locales using language tags as defined by IETF BCP 47 (RFCs 5646 and 4647 or their successors), which may include extensions such as those registered through RFC 6067. Their canonical form is specified in RFC 5646 section 4.5 or its successor.
BCP 47 language tags that meet those validity criteria of RFC 5646 section 2.2.9 that can be verified without reference to the IANA Language Subtag Registry are considered structurally valid. All structurally valid language tags are valid for use with the APIs defined by this standard. However, the set of locales and thus language tags that an implementation supports with adequate localizations is implementation dependent. The constructors Collator, NumberFormat, and DateTimeFormat map the language tags used in requests to locales supported by their respective implementations.
This standard uses the term "Unicode locale extension sequence" for any substring of a language tag that is not part of a private use subtag sequence, starts with a separator "-" and the singleton "u", and includes the maximum sequence of following non-singleton subtags and their preceding "-" separators.
The IsStructurallyValidLanguageTag abstract operation verifies that the locale argument (which must be a String value)
The abstract operation returns true if locale can be generated from the ABNF grammar in section 2.1 of the RFC, starting with Language-Tag, and does not contain duplicate variant or singleton subtags (other than as a private use subtag). It returns false otherwise. Terminal value characters in the grammar are interpreted as the Unicode equivalents of the ASCII octet values given.
The CanonicalizeLanguageTag abstract operation returns the canonical and case-regularized form of the locale argument (which must be a String value that is a structurally valid BCP 47 language tag as verified by the
The specifications for extensions to BCP 47 language tags, such as RFC 6067, may include canonicalization rules for the extension subtag sequences they define that go beyond the canonicalization rules of RFC 5646 section 4.5. Implementations are allowed, but not required, to apply these additional rules.
The DefaultLocale abstract operation returns a String value representing the structurally valid (
The ECMAScript 2016 Internationalization API Specification identifies currencies using 3-letter currency codes as defined by ISO 4217. Their canonical form is upper case.
All well-formed 3-letter ISO 4217 currency codes are allowed. However, the set of combinations of currency code and language tag for which localized currency symbols are available is implementation dependent. Where a localized currency symbol is not available, the ISO 4217 currency code is used for formatting.
The IsWellFormedCurrencyCode abstract operation verifies that the currency argument (which must be a String value) represents a well-formed 3-letter ISO currency code. The following steps are taken:
The ECMAScript 2016 Internationalization API Specification identifies time zones using the Zone and Link names of the IANA Time Zone Database. Their canonical form is the corresponding Zone name in the casing used in the IANA Time Zone Database.
All registered Zone and Link names are allowed. Implementations must recognize all such names, and use best available current and historical information about their offsets from UTC and their daylight saving time rules in calculations. However, the set of combinations of time zone name and language tag for which localized time zone names are available is implementation dependent.
The IsValidTimeZoneName abstract operation verifies that the timeZone argument (which must be a String value) represents a valid Zone or Link name of the IANA Time Zone Database.
The abstract operation returns true if timeZone, converted to upper case as described in
The CanonicalizeTimeZoneName abstract operation returns the canonical and case-regularized form of the timeZone argument (which must be a String value that is a valid time zone name as verified by the
The Intl.DateTimeFormat constructor allows this time zone name; if the time zone is not specified, the host environment’s current time zone is used. Implementations shall support UTC and the host environment’s current time zone (if different from UTC) in formatting.
The DefaultTimeZone abstract operation returns a String value representing the valid (
Unless specified otherwise in this document, the objects, functions, and constructors described in this standard are subject to the generic requirements and restrictions specified for standard built-in ECMAScript objects in the ECMAScript 2016 Language Specification, 7th edition, clause 17, or successor.
The Intl object is the %Intl% intrinsic object and the initial value of the Intl
property of the
The value of the [[Prototype]] internal slot of the Intl object is the intrinsic object
The Intl object is not a function object. It does not have a [[Construct]] internal method; it is not possible to use the Intl object as a constructor with the
See
See
See
When the
The constructors for the objects providing locale sensitive services, Collator, NumberFormat, and DateTimeFormat, use a common pattern to negotiate the requests represented by the locales and options arguments against the actual capabilities of their implementations. The common behaviour is described here in terms of internal slots describing the capabilities and of abstract operations using these internal slots.
The constructors Intl.Collator, Intl.NumberFormat, and Intl.DateTimeFormat have the following internal slots:
EXAMPLE An implementation of DateTimeFormat might include the language tag "th" in its [[availableLocales]] internal slot, and must (according to
Where the following abstract operations take an availableLocales argument, it must be an [[availableLocales]]
The abstract operation CanonicalizeLocaleList takes the following steps:
The BestAvailableLocale abstract operation compares the provided argument locale, which must be a String value with a structurally valid and canonicalized BCP 47 language tag, against the locales in availableLocales and returns either the longest non-empty prefix of locale that is an element of availableLocales, or
The LookupMatcher abstract operation compares requestedLocales, which must be a
The BestFitMatcher abstract operation compares requestedLocales, which must be a
The abstract operation UnicodeExtensionSubtags splits extension, which must be a Unicode locale extension sequence, into its subtags. The following steps are taken:
The ResolveLocale abstract operation compares a BCP 47 language priority list requestedLocales against the locales in availableLocales and determines the best available language to meet the request. availableLocales, requestedLocales, and relevantExtensionKeys must be provided as
The following steps are taken:
"-x-"
»).The LookupSupportedLocales abstract operation returns the subset of the provided BCP 47 language priority list requestedLocales for which availableLocales has a matching locale when using the BCP 47 Lookup algorithm. Locales appear in the same order in the returned list as in requestedLocales. The following steps are taken:
The BestFitSupportedLocales abstract operation returns the subset of the provided BCP 47 language priority list requestedLocales for which availableLocales has a matching locale when using the Best Fit Matcher algorithm. Locales appear in the same order in the returned list as in requestedLocales. The steps taken are implementation dependent.
The SupportedLocales abstract operation returns the subset of the provided BCP 47 language priority list requestedLocales for which availableLocales has a matching locale. Two algorithms are available to match the locales: the Lookup algorithm described in RFC 4647 section 3.4, and an implementation dependent best-fit algorithm. Locales appear in the same order in the returned list as in requestedLocales. The following steps are taken:
The abstract operation GetOption extracts the value of the property named property from the provided options object, converts it to the required type, checks whether it is one of a
The abstract operation GetNumberOption extracts the value of the property named property from the provided options object, converts it to a Number value, checks whether it is in the allowed range, and fills in a fallback value if necessary.
The Intl.Collator constructor is the %Collator% intrinsic object and a standard built-in property of the Intl object. Behaviour common to all service constructor properties of the Intl object is specified in 9.1.
The abstract operation InitializeCollator accepts the arguments collator (which must be an object), locales, and options. It initializes collator as a
Several steps in the algorithm use values from the following table, which associates Unicode locale extension keys, property names, types, and allowable values:
Key | Property | Type | Values |
---|---|---|---|
kn | numeric | "boolean" | |
kf | caseFirst | "string" | "upper", "lower", "false" |
The following steps are taken:
When the
"kn"
, then"kf"
, then"%CollatorPrototype%"
, internalSlotsList).The Intl.Collator constructor has the following properties:
The value of
This property has the attributes { [[Writable]]:
When the
The value of the
The value of the [[availableLocales]] internal slot is implementation defined within the constraints described in 9.1. The value of the [[relevantExtensionKeys]] internal slot is a
The values of the [[sortLocaleData]] and [[searchLocaleData]] internal slots are implementation defined within the constraints described in 9.1 and the following additional constraints:
The Intl.Collator prototype object is the intrinsic object %CollatorPrototype%. The Intl.Collator prototype object is itself an Intl.Collator instance as specified in
In the following descriptions of functions that are properties or [[Get]] attributes of properties of
The value of
The initial value of the @@toStringTag property is the string value
This property has the attributes { [[Writable]]:
This named accessor property returns a function that compares two strings according to the sort order of this Collator object.
The value of the [[Get]] attribute is a function that takes the following steps:
"length"
, PropertyDescriptor {[[Value]]: 2, [[Writable]]: Array.prototype.sort
or other functions.
The value of the [[Set]] attribute is
A Collator compare function is an anonymous function that takes two arguments, x and y, and performs the following steps:
When the CompareStrings abstract operation is called with arguments collator (which must be an object initialized as a Collator), x and y (which must be String values), it returns a Number other than
The sensitivity of collator is interpreted as follows:
If the collator is set to ignore punctuation, then strings that differ only in punctuation compare as equal.
For the interpretation of options settable through extension keys, see Unicode Technical Standard 35.
The CompareStrings abstract operation with any given collator argument, if considered as a function of the remaining two arguments x and y, must be a consistent comparison function (as defined in ES2016,
The actual return values are implementation-defined to permit implementers to encode additional information in the value. The method is required to return 0 when comparing Strings that are considered canonically equivalent by the Unicode standard.
This function provides access to the locale and collation options computed during initialization of the object.
The function returns a new object whose properties and attributes are set as if constructed by an object literal assigning to each of the following properties the value of the corresponding internal slot of this Collator object (see
Intl.Collator instances are ordinary objects that inherit properties from
Intl.Collator instances and other objects that have been successfully initialized as a Collator have [[initializedIntlObject]] and [[initializedCollator]] internal slots whose values are
Objects that have been successfully initialized as a Collator also have several internal slots that are computed by the constructor:
Objects that have been successfully initialized as a Collator also have the following internal slots if the key corresponding to the name of the internal slot in
Finally, objects that have been successfully initialized as a Collator have a [[boundCompare]] internal slot that caches the function returned by the compare accessor (
The abstract operation InitializeNumberFormat accepts the arguments numberFormat (which must be an object), locales, and options. It initializes numberFormat as a NumberFormat object.
The following steps are taken:
When the abstract operation CurrencyDigits is called with an argument currency (which must be an upper case String value), the following steps are taken:
When a Number format function is called with optional argument value, the following steps are taken:
The
When the FormatNumber abstract operation is called with arguments numberFormat (which must be an object initialized as a NumberFormat) and x (which must be a Number value), it returns a String value representing x according to the effective locale and the formatting options of numberFormat. This abstract operation functions as follows:
Numbering System | Digits |
---|---|
arab | U+0660 to U+0669 |
arabext | U+06F0 to U+06F9 |
bali | U+1B50 to U+1B59 |
beng | U+09E6 to U+09EF |
deva | U+0966 to U+096F |
fullwide | U+FF10 to U+FF19 |
gujr | U+0AE6 to U+0AEF |
guru | U+0A66 to U+0A6F |
hanidec | U+3007, U+4E00, U+4E8C, U+4E09, U+56DB, U+4E94, U+516D, U+4E03, U+516B, U+4E5D |
khmr | U+17E0 to U+17E9 |
knda | U+0CE6 to U+0CEF |
laoo | U+0ED0 to U+0ED9 |
latn | U+0030 to U+0039 |
limb | U+1946 to U+194F |
mlym | U+0D66 to U+0D6F |
mong | U+1810 to U+1819 |
mymr | U+1040 to U+1049 |
orya | U+0B66 to U+0B6F |
tamldec | U+0BE6 to U+0BEF |
telu | U+0C66 to U+0C6F |
thai | U+0E50 to U+0E59 |
tibt | U+0F20 to U+0F29 |
When the ToRawPrecision abstract operation is called with arguments x (which must be a finite non-negative number), minPrecision, and maxPrecision (both must be integers between 1 and 21), the following steps are taken:
When the ToRawFixed abstract operation is called with arguments x (which must be a finite non-negative number), minInteger (which must be an integer between 1 and 21), minFraction, and maxFraction (which must be integers between 0 and 20), the following steps are taken:
The NumberFormat constructor is the %NumberFormat% intrinsic object and a standard built-in property of the Intl object. Behaviour common to all service constructor properties of the Intl object is specified in
When the
"%NumberFormatPrototype%"
, « [[initializedIntlObject]], [[initializedNumberFormat]], [[locale]], [[numberingSystem]], [[style]], [[currency]], [[currencyDisplay]], [[minimumIntegerDigits]], [[minimumFractionDigits]], [[maximumFractionDigits]], [[minimumSignificantDigits]], [[maximumSignificantDigits]], [[useGrouping]], [[positivePattern]], [[negativePattern]], [[boundFormat]] »).The Intl.NumberFormat constructor has the following properties:
The value of
This property has the attributes { [[Writable]]:
When the
The value of the
The value of the [[availableLocales]] internal slot is implementation defined within the constraints described in
The value of the [[relevantExtensionKeys]] internal slot is «"nu"
».
The value of the [[localeData]] internal slot is implementation defined within the constraints described in
The Intl.NumberFormat prototype object is the intrinsic object %NumberFormatPrototype%. The Intl.NumberFormat prototype object is itself an Intl.NumberFormat instance as specified in
In the following descriptions of functions that are properties or [[Get]] attributes of properties of
The initial value of
The initial value of the @@toStringTag property is the string value
This property has the attributes { [[Writable]]:
Intl.NumberFormat.prototype.format is an accessor property whose set accessor function is
"length"
, PropertyDescriptor {[[Value]]: 1, [[Writable]]: This function provides access to the locale and formatting options computed during initialization of the object.
The function returns a new object whose properties and attributes are set as if constructed by an object literal assigning to each of the following properties the value of the corresponding internal slot of this NumberFormat object (see
Intl.NumberFormat instances inherit properties from
Intl.NumberFormat instances and other objects that have been successfully initialized as a NumberFormat have [[initializedIntlObject]] and [[initializedNumberFormat]] internal slots whose values are
Objects that have been successfully initialized as a NumberFormat object also have several internal slots that are computed by the constructor:
Finally, objects that have been successfully initialized as a NumberFormat have a [[boundFormat]] internal slot that caches the function returned by the format accessor (
Several DateTimeFormat algorithms use values from the following table, which provides property names and allowable values for the components of date and time formats:
Property | Values |
---|---|
weekday | "narrow", "short", "long" |
era | "narrow", "short", "long" |
year | "2-digit", "numeric" |
month | "2-digit", "numeric", "narrow", "short", "long" |
day | "2-digit", "numeric" |
hour | "2-digit", "numeric" |
minute | "2-digit", "numeric" |
second | "2-digit", "numeric" |
timeZoneName | "short", "long" |
The abstract operation InitializeDateTimeFormat accepts the arguments dateTimeFormat (which must be an object), locales, and options. It initializes dateTimeFormat as a DateTimeFormat object. This abstract operation functions as follows:
When the ToDateTimeOptions abstract operation is called with arguments options, required, and defaults, the following steps are taken:
When the BasicFormatMatcher abstract operation is called with two arguments options and formats, the following steps are taken:
When the BestFitFormatMatcher abstract operation is called with two arguments options and formats, it performs implementation dependent steps, which should return a set of component representations that a typical user of the selected locale would perceive as at least as good as the one returned by
When a DateTime format function is called with optional argument date, the following steps are taken:
The
When the FormatDateTime abstract operation is called with arguments dateTimeFormat (which must be an object initialized as a DateTimeFormat) and x (which must be a Number value), it returns a String value representing x (interpreted as a
"useGrouping"
, "minimumIntegerDigits"
, 2)."useGrouping"
, When the ToLocalTime abstract operation is called with arguments date, calendar, and timeZone, the following steps are taken:
The Intl.DateTimeFormat constructor is the %DateTimeFormat% intrinsic object and a standard built-in property of the Intl object. Behaviour common to all service constructor properties of the Intl object is specified in
When the
"%DateTimeFormatPrototype%"
, « [[initializedIntlObject]], [[initializedDateTimeFormat]], [[locale]], [[calendar]], [[numberingSystem]], [[timeZone]], [[weekday]], [[era]], [[year]], [[month]], [[day]], [[hour]], [[minute]], [[second]], [[timeZoneName]], [[hour12]], [[hourNo0]], [[pattern]], [[boundFormat]] »).The Intl.DateTimeFormat constructor has the following properties:
The value of
This property has the attributes { [[Writable]]:
When the
The value of the
The value of the [[availableLocales]] internal slot is implementation defined within the constraints described in
The value of the [[relevantExtensionKeys]] internal slot is «"ca"
, "nu"
».
The value of the [[localeData]] internal slot is implementation defined within the constraints described in
EXAMPLE An implementation might include the following object as part of its English locale data: {hour: "numeric", minute: "2-digit", second: "2-digit", pattern: "{hour}:{minute}:{second}", pattern12: "{hour}:{minute}:{second} {ampm}"}.
The Intl.DateTimeFormat prototype object is the intrinsic object %DateTimeFormatPrototype%. The Intl.DateTimeFormat prototype object is itself an
In the following descriptions of functions that are properties or [[Get]] attributes of properties of the Intl.DateTimeFormat prototype object, the phrase "this DateTimeFormat object" refers to the object that is the this value for the invocation of the function; a
The initial value of
The initial value of the @@toStringTag property is the string value
This property has the attributes { [[Writable]]:
Intl.DateTimeFormat.prototype.format is an accessor property whose set accessor function is
"length"
, PropertyDescriptor {[[Value]]: 1, [[Writable]]: This function provides access to the locale and formatting options computed during initialization of the object.
The function returns a new object whose properties and attributes are set as if constructed by an object literal assigning to each of the following properties the value of the corresponding internal slot of this DateTimeFormat object (see
Intl.DateTimeFormat instances inherit properties from
Intl.DateTimeFormat instances and other objects that have been successfully initialized as a DateTimeFormat object have [[initializedIntlObject]] and [[initializedDateTimeFormat]] internal slots whose values are
Objects that have been successfully initialized as a DateTimeFormat also have several internal slots that are computed by the constructor:
Finally, objects that have been successfully initialized as a DateTimeFormat have a [[boundFormat]] internal slot that caches the function returned by the format accessor (
The ECMAScript Language Specification, edition 6 or successor, describes several locale sensitive functions. An ECMAScript implementation that implements this Internationalization API Specification shall implement these functions as described here.
This definition supersedes the definition provided in ES2016,
When the
The value of the
This definition supersedes the definition provided in ES2016,
This function interprets a string value as a sequence of code points, as described in ES2016,
The result must be derived according to the case mappings in the Unicode character database (this explicitly includes not only the UnicodeData.txt file, but also the SpecialCasings.txt file that accompanies it).
The value of the
This definition supersedes the definition provided in ES2016,
This function interprets a string value as a sequence of code points, as described in ES2016,
The value of the
The following definition(s) refer to the abstract operation thisNumberValue as defined in ES2016,
This definition supersedes the definition provided in ES2016,
When the
The value of the
The following definition(s) refer to the abstract operation thisTimeValue as defined in ES2016,
This definition supersedes the definition provided in ES2016,
When the
The value of the
This definition supersedes the definition provided in ES2016,
When the
The value of the
This definition supersedes the definition provided in ES2016,
When the
The value of the
This definition supersedes the definition provided in ES2016,
The following steps are taken:
The following aspects of the ECMAScript 2016 Internationalization API Specification are implementation dependent:
Ecma International
Rue du Rhone 114
CH-1204 Geneva
Tel: +41 22 849 6000
Fax: +41 22 849 6001
Web: http://www.ecma-international.org
© 2016 Ecma International
This document may be copied, published and distributed to others, and certain derivative works of it may be prepared, copied, published, and distributed, in whole or in part, provided that the above copyright notice and this Copyright License and Disclaimer are included on all such copies and derivative works. The only derivative works that are permissible under this Copyright License and Disclaimer are:
(i) works which incorporate all or portion of this document for the purpose of providing commentary or explanation (such as an annotated version of the document),
(ii) works which incorporate all or portion of this document for the purpose of incorporating features that provide accessibility,
(iii) translations of this document into languages other than English and into different formats and
(iv) works by making use of this specification in standard conformant products by implementing (e.g. by copy and paste wholly or partly) the functionality therein.
However, the content of this document itself may not be modified in any way, including by removing the copyright notice or references to Ecma International, except as required to translate it into languages other than English or into a different format.
The official version of an Ecma International document is the English language version on the Ecma International website. In the event of discrepancies between a translated version and the official version, the official version shall govern.
The limited permissions granted above are perpetual and will not be revoked by Ecma International or its successors or assigns.
This document and the information contained herein is provided on an "AS IS" basis and ECMA INTERNATIONAL DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY OWNERSHIP RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE."
All Software contained in this document ("Software") is protected by copyright and is being made available under the "BSD License", included below. This Software may be subject to third party rights (rights from parties other than Ecma International), including patent rights, and no licenses under such third party rights are granted under this license even if the third party concerned is a member of Ecma International. SEE THE ECMA CODE OF CONDUCT IN PATENT MATTERS AVAILABLE AT http://www.ecma-international.org/memento/codeofconduct.htm FOR INFORMATION REGARDING THE LICENSING OF PATENT CLAIMS THAT ARE REQUIRED TO IMPLEMENT ECMA INTERNATIONAL STANDARDS.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
THIS SOFTWARE IS PROVIDED BY THE ECMA INTERNATIONAL "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ECMA INTERNATIONAL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.