Международна интернационализация в JavaScript

Всички съвременни браузъри, с изключение на IE10- (но има библиотеки за него) поддържат стандарта ECMA 402, който има за цел да реши тези проблеми завинаги.

Основни обекти

Локалът е първият и най-важен аргумент от всички методи, свързани с интернационализацията.

Локалът е описан от низ от три компонента, разделени с тире:

  1. Езиков код.
  2. Напишете кода на метода.
  3. Код на страната.

На практика не винаги са посочени три, обикновено по-малко:

  1. ru – български език, без уточнение.
  2. en-GB е английският език, използван в Англия (GB).
  3. en-US е английският език, използван в Съединените щати (US).
  4. zh-Hans-CN е китайският език ( zh ), написан с опростен йероглифен шрифт ( Hans ), използван в Китай.

Можете също така да посочите разширения за локал чрез наставката -u-*, например "th-TH-u-nu-thai" е тайландският език ( th ), използван в Тайланд ( TH ), с числа, написани с тайландски букви (๐, ๑, ๒, ๓, ๔, ๕, ๖, ๗, ๘, ๙).

Стандартът, който описва локалите, е RFC 5464, езиците са описани в езиковия регистър на IANA.

Всички методи приемат локал като низ или масив, съдържащ множество локали в реда на предпочитанията.

Ако локалът не е посочен или недефиниран, се взема локалът по подразбиране, зададен в средата (браузър).

Съвпадение на локали localeMatcher

localeMatcher - спомагателна настройка, която също може да бъде зададена навсякъде, тя определя как се избира локалът, ако желаният не е наличен.

Има две значения:

  • „търсене“ означава най-простият ред на търсене чрез съкращаване на суфикса, например zh-Hans-CN → zh-Hans → zh → локал по подразбиране.
  • "най-добро прилягане" - използва вградени алгоритми и предпочитания на браузъра (илидруга среда), за да изберете подходящия локал.

По подразбиране е "най-добро прилягане".

Ако има няколко локала, например ["zh-Hans-CN", "ru-RU"], тогава localeMatcher се опитва да намери най-подходящия локал за първия от списъка (китайски), ако не работи, отива на втория (български) и т.н. Ако не бъде намерено такова, например нито китайски, нито български се поддържат напълно на компютъра, тогава се използва локалът по подразбиране.

Като цяло „най-доброто прилягане“ е най-добрият избор тук.

Strings, Intl.Collator

Локален, единичен или масив по ред на предпочитание.

Обект с допълнителни настройки:

localeMatcher - алгоритъм за избор на подходящ локал.

използване – цел на сравнението: сортиране "sort" или търсене "search", по подразбиране "sort".

чувствителност - чувствителност: кои разлики в знаците да се вземат предвид и кои не, опции:

  • база - вземат предвид само различни знаци, без диакритика и регистър, например: a ≠ b, e = e, a = A.
  • акцент - вземете под внимание символите и диакритичните знаци, например: a ≠ b, e ≠ e, a = A.
  • регистър - вземете предвид знаците и регистъра, например: a ≠ b, e = e, a ≠ A.
  • вариант - вземете под внимание всичко: знак, диакритика, регистър, например: a ≠ b, e ≠ e, a ≠ A, се използва по подразбиране.

ignorePunctuation - игнориране на препинателните знаци: true/false, false по подразбиране.

numeric - дали да се използва числово сравнение: true/false, ако е true, ще бъде 12 > 2 , в противен случай 12 .

caseFirst - първо трябва да се сортират главни или малки букви, опции: "upper" (главен регистър), долен (малък регистър) или false (локал по подразбиране, също и стойността по подразбиране). Неподдържан от IE11-.

В по-голямата част от случаите стандартните опции са подходящи, т.е. не е необходимо да се посочват опции.

Резултатът от сравнението е 1 (по-голямо), 0 (равно на) или -1 (по-малко).

По-горе бяха използвани напълно стандартни настройки. Те разграничават регистъра на символите, но тази разлика може да бъде премахната чрез регулиране на чувствителността:

Дати, Intl.DateTimeFormat

Първият аргумент е същият като в Collator, а в обекта с опции можем да определим кои части от датата да се показват (часове, месеци, години ...) и в какъв формат.

Пълен списък със свойства на опциите:

Описание на свойството Възможни стойности по подразбиране
localeMatcherАлгоритъм за избор на локалтърсене, най-добро приляганенай-подходящ
formatMatcherАлгоритъм за избор на форматосновен, най-подходящнай-подходящ
час12Дали да се включи времето в 12-часов форматtrue -- 12-часов формат, false -- 24-часов формат
часова зоначасова зонаЧасова зона, например Европа/МоскваUTC
делничен денДен от седмицататесен, къс, дълъг
ераератесен, къс, дълъг
годинагодина2-цифрен, цифровнедефиниран или числов
месецмесец2-цифрен, цифров, тесен, къс, дълъгнедефиниран или числов
денден2-цифрен, цифровнедефиниран или числов
часачас2-цифрен, цифров
минутиминути2-цифрен, цифров
второСекунди2-цифрен, цифров
име на часова зонаИме на часовата зона (не в IE11)късо, дълго

Всички локали трябва да поддържат следните предварително зададени настройки:

  • делничен ден, година, месец, ден, час, минута, секунда
  • делничен ден, година, месец, ден
  • година, месец, ден
  • година, месец
  • месец, ден
  • час, минута, секунда

Ако посоченият формат не се поддържа, тогава настройката formatMatcher определя алгоритъма за избор на най-близкия формат: основен - според стандартните правила и най-подходящ - по подразбиране, по преценка на средата (браузър).