Международна интернационализация в JavaScript
Всички съвременни браузъри, с изключение на IE10- (но има библиотеки за него) поддържат стандарта ECMA 402, който има за цел да реши тези проблеми завинаги.
Основни обекти
Локалът е първият и най-важен аргумент от всички методи, свързани с интернационализацията.
Локалът е описан от низ от три компонента, разделени с тире:
- Езиков код.
- Напишете кода на метода.
- Код на страната.
На практика не винаги са посочени три, обикновено по-малко:
- ru – български език, без уточнение.
- en-GB е английският език, използван в Англия (GB).
- en-US е английският език, използван в Съединените щати (US).
- 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 определя алгоритъма за избор на най-близкия формат: основен - според стандартните правила и най-подходящ - по подразбиране, по преценка на средата (браузър).