numfmt
Version:
Full Excel style number formatting
746 lines (677 loc) • 36.4 kB
JavaScript
import codeToLocale from './codeToLocale.js';
// Locale: [language[_territory][.codeset][@modifier]]
const re_locale = /^([a-z\d]+)(?:[_-]([a-z\d]+))?(?:\.([a-z\d]+))?(?:@([a-z\d]+))?$/i;
const locales = {};
/**
* Split a semicolon delimited string and replace instances of characters
* @ignore
* @param {string} str Semicolon delimited string
* @param {string} [tilde=''] String to be inserted on every instance of ~
* @returns {string[]} Array of strings
*/
const _ = (str, tilde = '') => str.replace(/~/g, tilde).split(';');
/**
* Generate mmm and ddd properties as needed for locales. Many of them
* are straightforward abreviations of mmmm and dddd so we can save some
* bytes by auto-generating them.
*
* Both rule parameters use the same system. If shortform prop is missing:
*
* - 0 - use long form array unchanged
* - 1...9 - shorten to N many characters
* - 11...19 - shorten to 1...9 characters and add periods
*
* @ignore
* @param {object} o Locale object
* @param {number} [ml=0] Month list rule
* @param {number} [dl=0] Day list rule
* @returns {object} The same input object, but with ddd and mmm filled in.
*/
const xm = (o, ml = 0, dl = 0) => {
if (!o.mmm) {
// eslint-disable-next-line multiline-ternary
o.mmm = ml < 1 ? o.mmmm.concat() : o.mmmm.map(d => {
const s = d.slice(0, ml % 10);
return s + (ml < 10 || d === s ? '' : '.');
});
}
if (!o.ddd) {
// eslint-disable-next-line multiline-ternary
o.ddd = dl < 1 ? o.dddd.concat() : o.dddd.map(d => {
const s = d.slice(0, dl % 10);
return s + (dl < 10 || d === s ? '' : '.');
});
}
if (!o.mmm6 && o.mmmm6) {
o.mmm6 = o.mmmm6;
}
return o;
};
/**
* @typedef {object} LocaleData
* An object of properties used by a formatter when printing a number in a certain locale.
* @property {string} group - Symbol used as a grouping separator (`1,000,000` uses `,`)
* @property {string} decimal - Symbol used to separate integers from fractions (usually `.`)
* @property {string} positive - Symbol used to indicate positive numbers (usually `+`)
* @property {string} negative - Symbol used to indicate positive numbers (usually `-`)
* @property {string} percent - Symbol used to indicate a percentage (usually `%`)
* @property {string} exponent - Symbol used to indicate an exponent (usually `E`)
* @property {string} nan - Symbol used to indicate NaN values (`NaN`)
* @property {string} infinity - Symbol used to indicate infinite values (`∞`)
* @property {Array<string>} ampm - How AM and PM should be presented
* @property {Array<string>} mmmm6 - Long month names for the Islamic calendar (`Rajab`)
* @property {Array<string>} mmm6 - Short month names for the Islamic calendar (`Raj.`)
* @property {Array<string>} mmmm - Long month names for the Gregorian calendar (`November`)
* @property {Array<string>} mmm - Short month names for the Gregorian calendar (`Nov`)
* @property {Array<string>} dddd - Long day names (`Wednesday`)
* @property {Array<string>} ddd - Shortened day names (`Wed`)
* @property {Array<string>} bool - How TRUE and FALSE should be presented
* @property {boolean} preferMDY - Is the prefered date format month first (12/31/2025) or day first (31/12/2025)
*/
/**
* @ignore
* @type {LocaleData}
*/
const baseLocaleData = {
group: '\u00A0',
decimal: '.',
positive: '+',
negative: '-',
percent: '%',
exponent: 'E',
nan: 'NaN',
infinity: '∞',
ampm: _('AM;PM'),
mmmm6: _('Muharram;Safar;Rabiʻ I;Rabiʻ II;Jumada I;Jumada II;Rajab;Shaʻban;Ramadan;Shawwal;Dhuʻl-Qiʻdah;Dhuʻl-Hijjah'),
mmm6: _('Muh.;Saf.;Rab. I;Rab. II;Jum. I;Jum. II;Raj.;Sha.;Ram.;Shaw.;Dhuʻl-Q.;Dhuʻl-H.'),
mmmm: _('January;February;March;April;May;June;July;August;September;October;November;December'),
mmm: _('Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sep;Oct;Nov;Dec'),
dddd: _('Sunday;Monday;Tuesday;Wednesday;Thursday;Friday;Saturday'),
ddd: _('Sun;Mon;Tue;Wed;Thu;Fri;Sat'),
bool: _('TRUE;FALSE'),
preferMDY: false
};
/**
* @typedef {object} LocaleToken - An object of properties for a locale tag.
* @property {string} lang - The basic tag such as `zh_CN` or `fi`
* @property {string} language - The language section (`zh` for `zh_CN`)
* @property {string} territory - The territory section (`CN` for `zh_CN`)
*/
/**
* Parse a regular IETF BCP 47 locale tag and emit an object of its parts.
* Irregular tags and subtags are not supported.
*
* @param {string} locale - A BCP 47 string tag of the locale.
* @returns {LocaleToken} - An object describing the locale.
*/
export function parseLocale (locale) {
const lm = re_locale.exec(locale);
if (!lm) {
throw new SyntaxError(`Malformed locale: ${locale}`);
}
return {
lang: lm[1] + (lm[2] ? '_' + lm[2] : ''),
language: lm[1],
territory: lm[2] || ''
};
}
// MS code format is: aabbcccc [$-aabbcccc]
// aa = numerical style (optional, 00 if absent)
// bb = calendar format (optional, 00 if absent)
// cc = language code
export function resolveLocale (l4e) {
if (typeof l4e === 'number') {
return codeToLocale[l4e & 0xffff] || null;
}
const wincode = parseInt(l4e, 16);
if (isFinite(wincode) && codeToLocale[wincode & 0xffff]) {
return codeToLocale[wincode & 0xffff] || null;
}
if (re_locale.test(l4e)) {
return l4e;
}
return null;
}
/**
* Used by the formatter to pull a locate from its registered locales. If
* subtag isn't available but the base language is, the base language is used.
* So if `en-CA` is not found, the formatter tries to find `en` else it
* returns a `null`.
*
* @param {string} locale - A BCP 47 string tag of the locale, or an Excel locale code.
* @returns {LocaleData | null} - An object of format date properties.
*/
export function getLocale (locale) {
const tag = resolveLocale(locale);
let obj = null;
if (tag) {
const c = parseLocale(tag);
obj = locales[c.lang] || locales[c.language] || null;
}
return obj;
}
// creates a new locale options object
export function createLocale (data) {
return Object.assign({}, baseLocaleData, data);
}
/**
* Register locale data for a language so for use when formatting.
*
* Any partial set of properties may be returned to have the defaults used where properties are missing.
*
* @see {LocaleData}
* @param {object} localeSettings - A collection of settings for a locale.
* @param {string} [localeSettings.group="\u00a0"]
* Symbol used as a grouping separator (`1,000,000` uses `,`)
* @param {string} [localeSettings.decimal="."]
* Symbol used to separate integers from fractions (usually `.`)
* @param {string} [localeSettings.positive="+"]
* Symbol used to indicate positive numbers (usually `+`)
* @param {string} [localeSettings.negative="-"]
* Symbol used to indicate positive numbers (usually `-`)
* @param {string} [localeSettings.percent="%"]
* Symbol used to indicate a percentage (usually `%`)
* @param {string} [localeSettings.exponent="E"]
* Symbol used to indicate an exponent (usually `E`)
* @param {string} [localeSettings.nan="NaN"]
* Symbol used to indicate NaN values (`NaN`)
* @param {string} [localeSettings.infinity="∞"]
* Symbol used to indicate infinite values (`∞`)
* @param {Array<string>} [localeSettings.ampm=["AM","PM"]]
* How AM and PM should be presented.
* @param {Array<string>} [localeSettings.mmmm6=["Muharram", "Safar", "Rabiʻ I", "Rabiʻ II", "Jumada I", "Jumada II", "Rajab", "Shaʻban", "Ramadan", "Shawwal", "Dhuʻl-Qiʻdah", "Dhuʻl-Hijjah"]]
* Long month names for the Islamic calendar (e.g. `Rajab`)
* @param {Array<string>} [localeSettings.mmm6=["Muh.", "Saf.", "Rab. I", "Rab. II", "Jum. I", "Jum. II", "Raj.", "Sha.", "Ram.", "Shaw.", "Dhuʻl-Q.", "Dhuʻl-H."]]
* Short month names for the Islamic calendar (e.g. `Raj.`)
* @param {Array<string>} [localeSettings.mmmm=["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]]
* Long month names for the Gregorian calendar (e.g. `November`)
* @param {Array<string>} [localeSettings.mmm=["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]]
* Short month names for the Gregorian calendar (e.g. `Nov`)
* @param {Array<string>} [localeSettings.dddd=["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]]
* Long day names (e.g. `Wednesday`)
* @param {Array<string>} [localeSettings.ddd=["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]]
* Shortened day names (e.g. `Wed`)
* @param {Array<string>} [localeSettings.bool=["TRUE", "FALSE"]]
* How TRUE and FALSE should be presented.
* @param {boolean} [localeSettings.preferMDY=false]
* Is the prefered date format month first (12/31/2025) or day first (31/12/2025)
* @param {string} l4e - A string BCP 47 tag of the locale.
* @returns {LocaleData} - A full collection of settings for a locale
*/
export function addLocale (localeSettings, l4e) {
// parse language tag
const c = typeof l4e === 'object' ? l4e : parseLocale(l4e);
// add the language
locales[c.lang] = createLocale(localeSettings);
// if "xx_YY" is added also create "xx" if it is missing
if (c.language !== c.lang && !locales[c.language]) {
locales[c.language] = createLocale(localeSettings);
}
return locales[c.lang];
}
export function listLocales () {
return Object.keys(locales);
}
export const defaultLocale = createLocale({ group: ',', preferMDY: true });
defaultLocale.isDefault = true;
addLocale({
group: ',',
ampm: _('上午;下午'),
mmmm: _('一月;二月;三月;四月;五月;六月;七月;八月;九月;十月;十一月;十二月'),
mmm: _('1月;2月;3月;4月;5月;6月;7月;8月;9月;10月;11月;12月'),
dddd: _('~日;~一;~二;~三;~四;~五;~六', '星期'),
ddd: _('周日;周一;周二;周三;周四;周五;周六')
}, 'zh_CN');
const _zh = {
group: ',',
ampm: _('上午;下午'),
mmmm: _('1月;2月;3月;4月;5月;6月;7月;8月;9月;10月;11月;12月'),
mmm: _('1月;2月;3月;4月;5月;6月;7月;8月;9月;10月;11月;12月'),
dddd: _('~日;~一;~二;~三;~四;~五;~六', '星期'),
ddd: _('周日;周一;周二;周三;周四;周五;周六')
};
addLocale({
..._zh,
nan: '非數值',
dddd: _('~日;~一;~二;~三;~四;~五;~六', '星期')
}, 'zh_TW');
addLocale({
..._zh,
dddd: _('~日;~一;~二;~三;~四;~五;~六', '星期')
}, 'zh_HK');
addLocale({
..._zh,
ampm: _('午前;午後'),
dddd: _('日~;月~;火~;水~;木~;金~;土~', '曜日'),
ddd: _('日;月;火;水;木;金;土')
}, 'ja');
addLocale({
group: ',',
ampm: _('오전;오후'),
mmmm: _('1월;2월;3월;4월;5월;6월;7월;8월;9월;10월;11월;12월'),
mmm: _('1월;2월;3월;4월;5월;6월;7월;8월;9월;10월;11월;12월'),
dddd: _('일요일;월요일;화요일;수요일;목요일;금요일;토요일'),
ddd: _('일;월;화;수;목;금;토')
}, 'ko');
addLocale({
group: ',',
ampm: _('ก่อนเที่ยง;หลังเที่ยง'),
mmmm: _('มกร~;กุมภาพันธ์;มีน~;เมษายน;พฤษภ~;มิถุนายน;กรกฎ~;สิงห~;กันยายน;ตุล~;พฤศจิกายน;ธันว~', 'าคม'),
mmm: _('ม.ค.;ก.พ.;มี.ค.;เม.ย.;พ.ค.;มิ.ย.;ก.ค.;ส.ค.;ก.ย.;ต.ค.;พ.ย.;ธ.ค.'),
dddd: _('วันอาทิตย์;วันจันทร์;วันอังคาร;วันพุธ;วันพฤหัสบดี;วันศุกร์;วันเสาร์'),
ddd: _('อา.;จ.;อ.;พ.;พฤ.;ศ.;ส.')
}, 'th');
addLocale(xm({
decimal: ',',
ampm: _('dop.;odp.'),
mmmm: _('ledna;února;března;dubna;května;června;července;srpna;září;října;listopadu;prosince'),
mmm: _('I;II;III;IV;V;VI;VII;VIII;IX;X;XI;XII'),
dddd: _('neděle;pondělí;úterý;středa;čtvrtek;pátek;sobota'),
bool: _('PRAVDA;NEPRAVDA')
}, -1, 2), 'cs');
addLocale(xm({
group: '.',
decimal: ',',
mmmm: _('januar;februar;marts;april;maj;juni;juli;august;september;oktober;november;december'),
dddd: _('søn~;man~;tirs~;ons~;tors~;fre~;lør~', 'dag'),
bool: _('SAND;FALSK')
}, 13, 13), 'da');
addLocale(xm({
group: '.',
decimal: ',',
ampm: _('a.m.;p.m.'),
mmmm: _('januari;februari;maart;april;mei;juni;juli;augustus;september;oktober;november;december'),
mmm: _('jan.;feb.;mrt.;apr.;mei;jun.;jul.;aug.;sep.;okt.;nov.;dec.'),
dddd: _('zondag;maandag;dinsdag;woensdag;donderdag;vrijdag;zaterdag'),
bool: _('WAAR;ONWAAR')
}, -1, 2), 'nl');
addLocale({ group: ',', preferMDY: true }, 'en');
addLocale({ group: ',', preferMDY: true }, 'en_US');
addLocale({ group: ',' }, 'en_AU');
addLocale({ group: ',' }, 'en_CA');
addLocale({ group: ',' }, 'en_GB');
addLocale({ group: ',', mmm: _('Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sept;Oct;Nov;Dec') }, 'en_IE');
addLocale(xm({
decimal: ',',
nan: 'epäluku',
ampm: _('ap.;ip.'),
mmmm: _('tammi~;helmi~;maalis~;huhti~;touko~;kesä~;heinä~;elo~;syys~;loka~;marras~;joulu~', 'kuuta'),
mmm: _('tammik.;helmik.;maalisk.;huhtik.;toukok.;kesäk.;heinäk.;elok.;syysk.;lokak.;marrask.;jouluk.'),
dddd: _('sunnun~;maanan~;tiis~;keskiviikkona;tors~;perjan~;lauan~', 'taina'),
bool: _('TOSI;EPÄTOSI')
}, -1, 2), 'fi');
const _fr = xm({
group: '\u202f',
decimal: ',',
mmmm: _('janvier;février;mars;avril;mai;juin;juillet;août;septembre;octobre;novembre;décembre'),
mmm: _('janv.;févr.;mars;avr.;mai;juin;juil.;août;sept.;oct.;nov.;déc.'),
dddd: _('~manche;lun~;mar~;mercre~;jeu~;vendre~;same~', 'di'),
bool: _('VRAI;FAUX')
}, -1, 13);
addLocale({ ..._fr }, 'fr');
addLocale({ ..._fr, mmm: _('janv.;févr.;mars;avr.;mai;juin;juill.;août;sept.;oct.;nov.;déc.') }, 'fr_CA');
addLocale({ group: "'", decimal: '.', ..._fr }, 'fr_CH');
const _de = xm({
mmmm: _('Januar;Februar;März;April;Mai;Juni;Juli;August;September;Oktober;November;Dezember'),
mmm: _('Jan.;Feb.;März;Apr.;Mai;Juni;Juli;Aug.;Sept.;Okt.;Nov.;Dez.'),
dddd: _('Sonn~;Mon~;Diens~;Mittwoch;Donners~;Frei~;Sams~', 'tag'),
bool: _('WAHR;FALSCH')
}, -1, 12);
addLocale({ group: '.', decimal: ',', ..._de }, 'de');
addLocale({ group: "'", decimal: '.', ..._de }, 'de_CH');
addLocale(xm({
group: '.',
decimal: ',',
ampm: _('π.μ.;μ.μ.'),
mmmm: _('Ιανουαρ~;Φεβρουαρ~;Μαρτ~;Απριλ~;Μαΐου;Ιουν~;Ιουλ~;Αυγούστου;Σεπτεμβρ~;Οκτωβρ~;Νοεμβρ~;Δεκεμβρ~', 'ίου'),
mmm: _('Ιαν;Φεβ;Μαρ;Απρ;Μαΐ;Ιουν;Ιουλ;Αυγ;Σεπ;Οκτ;Νοε;Δεκ'),
dddd: _('Κυριακή;Δευτέρα;Τρίτη;Τετάρτη;Πέμπτη;Παρασκευή;Σάββατο')
}, -1, 3), 'el');
addLocale({
decimal: ',',
ampm: _('de.;du.'),
mmmm: _('január;február;március;április;május;június;július;augusztus;szeptember;október;november;december'),
mmm: _('jan.;febr.;márc.;ápr.;máj.;jún.;júl.;aug.;szept.;okt.;nov.;dec.'),
dddd: _('vasárnap;hétfő;kedd;szerda;csütörtök;péntek;szombat'),
ddd: _('V;H;K;Sze;Cs;P;Szo'),
bool: _('IGAZ;HAMIS')
}, 'hu');
addLocale(xm({
group: '.',
decimal: ',',
ampm: _('f.h.;e.h.'),
mmmm: _('janúar;febrúar;mars;apríl;maí;júní;júlí;ágúst;september;október;nóvember;desember'),
dddd: _('sunnu~;mánu~;þriðju~;miðviku~;fimmtu~;föstu~;laugar~', 'dagur')
}, 13, 13), 'is');
addLocale(xm({
group: '.',
decimal: ',',
mmmm: _('Januari;Februari;Maret;April;Mei;Juni;Juli;Agustus;September;Oktober;November;Desember'),
dddd: _('Minggu;Senin;Selasa;Rabu;Kamis;Jumat;Sabtu')
}, 3, 3), 'id');
const _it = xm({
mmmm: _('gennaio;febbraio;marzo;aprile;maggio;giugno;luglio;agosto;settembre;ottobre;novembre;dicembre'),
dddd: _('domenica;lunedì;martedì;mercoledì;giovedì;venerdì;sabato'),
bool: _('VERO;FALSO')
}, 3, 3);
addLocale({ group: '.', decimal: ',', ..._it }, 'it');
addLocale({ group: "'", decimal: '.', ..._it }, 'it_CH');
const _no = {
decimal: ',',
ampm: _('a.m.;p.m.'),
mmmm: _('januar;februar;mars;april;mai;juni;juli;august;september;oktober;november;desember'),
mmm: _('jan.;feb.;mar.;apr.;mai;jun.;jul.;aug.;sep.;okt.;nov.;des.'),
dddd: _('søn~;man~;tirs~;ons~;tors~;fre~;lør~', 'dag'),
bool: _('SANN;USANN')
};
addLocale(xm({ ..._no }, -1, 13), 'nb');
addLocale(xm({ ..._no }, -1, 13), 'no');
addLocale(xm({
decimal: ',',
mmmm: _('stycznia;lutego;marca;kwietnia;maja;czerwca;lipca;sierpnia;września;października;listopada;grudnia'),
dddd: _('niedziela;poniedziałek;wtorek;środa;czwartek;piątek;sobota'),
ddd: _('niedz.;pon.;wt.;śr.;czw.;pt.;sob.'),
bool: _('PRAWDA;FAŁSZ')
}, 3, -1), 'pl');
const _pt = {
group: '.',
decimal: ',',
mmmm: _('janeiro;fevereiro;março;abril;maio;junho;julho;agosto;setembro;outubro;novembro;dezembro'),
dddd: _('domingo;segunda-feira;terça-feira;quarta-feira;quinta-feira;sexta-feira;sábado'),
bool: _('VERDADEIRO;FALSO')
};
addLocale(xm(_pt, 13, 13), 'pt');
addLocale(xm(_pt, 13, 13), 'pt_BR');
addLocale({
decimal: ',',
nan: 'не\u00A0число',
mmmm: _('января;февраля;марта;апреля;мая;июня;июля;августа;сентября;октября;ноября;декабря'),
mmm: _('янв.;февр.;мар.;апр.;мая;июн.;июл.;авг.;сент.;окт.;нояб.;дек.'),
dddd: _('воскресенье;понедельник;вторник;среда;четверг;пятница;суббота'),
ddd: _('вс;пн;вт;ср;чт;пт;сб'),
mmmm6: _('рамадан;шавваль;зуль-каада;зуль-хиджжа;мухаррам;раби-уль-авваль;раби-уль-ахир;джумад-уль-авваль;джумад-уль-ахир;раджаб;шаабан;рамадан'),
mmm6: _('рам.;шав.;зуль-к.;зуль-х.;мух.;раб. I;раб. II;джум. I;джум. II;радж.;шааб.;рам.'),
bool: _('ИСТИНА;ЛОЖЬ')
}, 'ru');
addLocale(xm({
decimal: ',',
mmmm: _('januára;februára;marca;apríla;mája;júna;júla;augusta;septembra;októbra;novembra;decembra'),
dddd: _('nedeľa;pondelok;utorok;streda;štvrtok;piatok;sobota')
}, 3, 2), 'sk');
const _es = {
group: '.',
decimal: ',',
ampm: _('a.\u00A0m.;p.\u00A0m.'),
mmmm: _('enero;febrero;marzo;abril;mayo;junio;julio;agosto;septiem~;octu~;noviem~;diciem~', 'bre'),
mmm: _('ene;feb;mar;abr;may;jun;jul;ago;sept;oct;nov;dic'),
dddd: _('domingo;lunes;martes;miércoles;jueves;viernes;sábado'),
ddd: _('dom;lun;mar;mié;jue;vie;sáb'),
bool: _('VERDADERO;FALSO')
};
const _esM3 = _('ene;feb;mar;abr;may;jun;jul;ago;sep;oct;nov;dic');
const _esM13 = _('ene.;feb.;mar.;abr.;may.;jun.;jul.;ago.;sept.;oct.;nov.;dic.');
addLocale({ ..._es }, 'es');
addLocale({ ..._es }, 'es_AR');
addLocale({ ..._es }, 'es_BO');
addLocale({ ..._es }, 'es_CL');
addLocale({ ..._es }, 'es_CO');
addLocale({ ..._es }, 'es_EC');
addLocale({ ..._es, mmm: _esM3, ampm: _('a.m.;p.m.') }, 'es_MX');
addLocale({ ..._es, mmm: _esM13 }, 'es_PY');
addLocale({ ..._es, mmm: _esM13 }, 'es_UY');
addLocale({ ..._es, mmm: _esM13, mmmm: _('enero;febrero;marzo;abril;mayo;junio;julio;agosto;setiembre;octubre;noviembre;diciembre') }, 'es_VE');
addLocale({
decimal: ',',
ampm: _('fm;em'),
mmmm: _('januari;februari;mars;april;maj;juni;juli;augusti;september;oktober;november;december'),
mmm: _('jan.;feb.;mars;apr.;maj;juni;juli;aug.;sep.;okt.;nov.;dec.'),
dddd: _('sön~;mån~;tis~;ons~;tors~;fre~;lör~', 'dag'),
ddd: _('sön;mån;tis;ons;tors;fre;lör')
}, 'sv');
addLocale(xm({
group: '.',
decimal: ',',
ampm: _('ÖÖ;ÖS'),
mmmm: _('Ocak;Şubat;Mart;Nisan;Mayıs;Haziran;Temmuz;Ağustos;Eylül;Ekim;Kasım;Aralık'),
mmm: _('Oca;Şub;Mar;Nis;May;Haz;Tem;Ağu;Eyl;Eki;Kas;Ara'),
dddd: _('Pazar;Pazartesi;Salı;Çarşamba;Perşembe;Cuma;Cumartesi'),
ddd: _('Paz;Pzt;Sal;Çar;Per;Cum;Cmt'),
bool: _('DOĞRU;YANLIŞ')
}, 3, -1), 'tr');
addLocale({
group: ',',
ampm: _('yb;yh'),
mmmm: _('Ionawr;Chwefror;Mawrth;Ebrill;Mai;Mehefin;Gorffennaf;Awst;Medi;Hydref;Tachwedd;Rhagfyr'),
mmm: _('Ion;Chwef;Maw;Ebr;Mai;Meh;Gorff;Awst;Medi;Hyd;Tach;Rhag'),
dddd: _('Dydd Sul;Dydd Llun;Dydd Mawrth;Dydd Mercher;Dydd Iau;Dydd Gwener;Dydd Sadwrn'),
ddd: _('Sul;Llun;Maw;Mer;Iau;Gwen;Sad')
}, 'cy');
addLocale({
group: '.',
decimal: ',',
mmmm: _('yanvar;fevral;mart;aprel;may;iyun;iyul;avqust;sentyabr;oktyabr;noyabr;dekabr'),
mmm: _('yan;fev;mar;apr;may;iyn;iyl;avq;sen;okt;noy;dek'),
dddd: _('bazar;bazar ertəsi;çərşənbə axşamı;çərşənbə;cümə axşamı;cümə;şənbə'),
ddd: _('B.;B.e.;Ç.a.;Ç.;C.a.;C.;Ş.')
}, 'az');
addLocale(xm({
decimal: ',',
mmmm: _('студзеня;лютага;сакавіка;красавіка;мая;чэрвеня;ліпеня;жніўня;верасня;кастрычніка;лістапада;снежня'),
dddd: _('нядзеля;панядзелак;аўторак;серада;чацвер;пятніца;субота'),
ddd: _('нд;пн;аў;ср;чц;пт;сб')
}, 3, -1), 'be');
addLocale({
decimal: ',',
ampm: _('пр.об.;сл.об.'),
mmmm: _('януари;февруари;март;април;май;юни;юли;август;септември;октомври;ноември;декември'),
mmm: _('яну;фев;март;апр;май;юни;юли;авг;сеп;окт;ное;дек'),
dddd: _('неделя;понеделник;вторник;сряда;четвъртък;петък;събота'),
ddd: _('нд;пн;вт;ср;чт;пт;сб'),
bool: _('ИСТИНА;ЛОЖЬ')
}, 'bg');
addLocale({
group: '.',
decimal: ',',
mmmm: _('de gener;de febrer;de març;d’abril;de maig;de juny;de juliol;d’agost;de setembre;d’octubre;de novembre;de desembre'),
mmm: _('de gen.;de febr.;de març;d’abr.;de maig;de juny;de jul.;d’ag.;de set.;d’oct.;de nov.;de des.'),
dddd: _('diumenge;dilluns;dimarts;dimecres;dijous;divendres;dissabte'),
ddd: _('dg.;dl.;dt.;dc.;dj.;dv.;ds.'),
ampm: _('a.\u00a0m.;p.\u00a0m.')
}, 'ca');
addLocale(xm({
group: ',',
decimal: '.',
mmmm: _('Enero;Pebrero;Marso;Abril;Mayo;Hunyo;Hulyo;Agosto;Setyembre;Oktubre;Nobyembre;Disyembre'),
dddd: _('Linggo;Lunes;Martes;Miyerkules;Huwebes;Biyernes;Sabado')
}, 3, 3), 'fil');
addLocale({
group: ',',
decimal: '.',
mmmm: _('જાન્યુઆરી;ફેબ્રુઆરી;માર્ચ;એપ્રિલ;મે;જૂન;જુલાઈ;ઑગસ્ટ;સપ્ટેમ્બર;ઑક્ટોબર;નવેમ્બર;ડિસેમ્બર'),
mmm: _('જાન્યુ;ફેબ્રુ;માર્ચ;એપ્રિલ;મે;જૂન;જુલાઈ;ઑગસ્ટ;સપ્ટે;ઑક્ટો;નવે;ડિસે'),
dddd: _('રવિ~;સોમ~;મંગળ~;બુધ~;ગુરુ~;શુક્ર~;શનિ~', 'વાર'),
ddd: _('રવિ;સોમ;મંગળ;બુધ;ગુરુ;શુક્ર;શનિ')
}, 'gu');
addLocale({
group: ',',
decimal: '.',
ampm: _('לפנה״צ;אחה״צ'),
dddd: _('~ראשון;~שני;~שלישי;~רביעי;~חמישי;~שישי;~שבת', 'יום '),
ddd: _('~א׳;~ב׳;~ג׳;~ד׳;~ה׳;~ו׳;שבת', 'יום '),
mmmm: _('ינואר;פברואר;מרץ;אפריל;מאי;יוני;יולי;אוגוסט;ספטמבר;אוקטובר;נובמבר;דצמבר'),
mmm: _('ינו׳;פבר׳;מרץ;אפר׳;מאי;יוני;יולי;אוג׳;ספט׳;אוק׳;נוב׳;דצמ׳'),
mmmm6: _('רמדאן;שוואל;ד׳ו אל־קעדה;ד׳ו אל־חיג׳ה;מוחרם;רביע אל־אוול;רביע א־ת׳אני;ג׳ומאדא אל־אולא;ג׳ומאדא א־ת׳אניה;רג׳ב;שעבאן;רמדאן'),
mmm6: _('רמדאן;שוואל;ד׳ו אל־קעדה;ד׳ו אל־חיג׳ה;מוחרם;רביע א׳;רביע ב׳;ג׳ומאדא א׳;ג׳ומאדא ב׳;רג׳ב;שעבאן;רמדאן')
}, 'he');
addLocale(xm({
group: '.',
decimal: ',',
mmmm: _('siječnja;veljače;ožujka;travnja;svibnja;lipnja;srpnja;kolovoza;rujna;listopada;studenoga;prosinca'),
mmm: _('sij;velj;ožu;tra;svi;lip;srp;kol;ruj;lis;stu;pro'),
dddd: _('nedjelja;ponedjeljak;utorak;srijeda;četvrtak;petak;subota')
}, -1, 3), 'hr');
addLocale({
decimal: ',',
mmmm: _('հունվարի;փետրվարի;մարտի;ապրիլի;մայիսի;հունիսի;հուլիսի;օգոստոսի;սեպտեմբերի;հոկտեմբերի;նոյեմբերի;դեկտեմբերի'),
mmm: _('հնվ;փտվ;մրտ;ապր;մյս;հնս;հլս;օգս;սեպ;հոկ;նոյ;դեկ'),
dddd: _('կիրակի;երկուշաբթի;երեքշաբթի;չորեքշաբթի;հինգշաբթի;ուրբաթ;շաբաթ'),
ddd: _('կիր;երկ;երք;չրք;հնգ;ուր;շբթ')
}, 'hy');
addLocale(xm({
decimal: ',',
mmmm: _('იანვარი;თებერვალი;მარტი;აპრილი;მაისი;ივნისი;ივლისი;აგვისტო;სექტემბერი;ოქტომბერი;ნოემბერი;დეკემბერი'),
dddd: _('კვირა;ორშაბათი;სამშაბათი;ოთხშაბათი;ხუთშაბათი;პარასკევი;შაბათი')
}, 3, 3), 'ka');
addLocale(xm({
decimal: ',',
mmmm: _('қаңтар;ақпан;наурыз;сәуір;мамыр;маусым;шілде;тамыз;қыркүйек;қазан;қараша;желтоқсан'),
dddd: _('жексенбі;дүйсенбі;сейсенбі;сәрсенбі;бейсенбі;жұма;сенбі'),
ddd: _('жс;дс;сс;ср;бс;жм;сб')
}, 13, -1), 'kk');
addLocale({
group: ',',
mmmm: _('ಜನವರಿ;ಫೆಬ್ರವರಿ;ಮಾರ್ಚ್;ಏಪ್ರಿಲ್;ಮೇ;ಜೂನ್;ಜುಲೈ;ಆಗಸ್ಟ್;ಸೆಪ್ಟೆಂಬರ್;ಅಕ್ಟೋಬರ್;ನವೆಂಬರ್;ಡಿಸೆಂಬರ್'),
mmm: _('ಜನವರಿ;ಫೆಬ್ರವರಿ;ಮಾರ್ಚ್;ಏಪ್ರಿ;ಮೇ;ಜೂನ್;ಜುಲೈ;ಆಗಸ್ಟ್;ಸೆಪ್ಟೆಂ;ಅಕ್ಟೋ;ನವೆಂ;ಡಿಸೆಂ'),
dddd: _('ಭಾನು~;ಸೋಮ~;ಮಂಗಳ~;ಬುಧ~;ಗುರು~;ಶುಕ್ರ~;ಶನಿ~', 'ವಾರ'),
ddd: _('ಭಾನು;ಸೋಮ;ಮಂಗಳ;ಬುಧ;ಗುರು;ಶುಕ್ರ;ಶನಿ'),
ampm: _('ಪೂರ್ವಾಹ್ನ;ಅಪರಾಹ್ನ')
}, 'kn');
addLocale({
decimal: ',',
mmmm: _('sausio;vasario;kovo;balandžio;gegužės;birželio;liepos;rugpjūčio;rugsėjo;spalio;lapkričio;gruodžio'),
mmm: _('saus.;vas.;kov.;bal.;geg.;birž.;liep.;rugp.;rugs.;spal.;lapkr.;gruod.'),
dddd: _('sekmadienis;pirmadienis;antradienis;trečiadienis;ketvirtadienis;penktadienis;šeštadienis'),
ddd: _('sk;pr;an;tr;kt;pn;št'),
ampm: _('priešpiet;popiet')
}, 'lt');
addLocale({
decimal: ',',
mmmm: _('janvāris;februāris;marts;aprīlis;maijs;jūnijs;jūlijs;augusts;septembris;oktobris;novembris;decembris'),
mmm: _('janv.;febr.;marts;apr.;maijs;jūn.;jūl.;aug.;sept.;okt.;nov.;dec.'),
dddd: _('svētdiena;pirmdiena;otrdiena;trešdiena;ceturtdiena;piektdiena;sestdiena'),
ddd: _('svētd.;pirmd.;otrd.;trešd.;ceturtd.;piektd.;sestd.'),
ampm: _('priekšpusdienā;pēcpusdienā')
}, 'lv');
addLocale({
group: ',',
decimal: '.',
mmmm: _('ജനുവരി;ഫെബ്രുവരി;മാർച്ച്;ഏപ്രിൽ;മേയ്;ജൂൺ;ജൂലൈ;ഓഗസ്റ്റ്;സെപ്റ്റംബർ;ഒക്ടോബർ;നവംബർ;ഡിസംബർ'),
mmm: _('ജനു;ഫെബ്രു;മാർ;ഏപ്രി;മേയ്;ജൂൺ;ജൂലൈ;ഓഗ;സെപ്റ്റം;ഒക്ടോ;നവം;ഡിസം'),
dddd: _('ഞായറാഴ്ച;തിങ്കളാഴ്ച;ചൊവ്വാഴ്ച;ബുധനാഴ്ച;വ്യാഴാഴ്ച;വെള്ളിയാഴ്ച;ശനിയാഴ്ച'),
ddd: _('ഞായർ;തിങ്കൾ;ചൊവ്വ;ബുധൻ;വ്യാഴം;വെള്ളി;ശനി')
}, 'ml');
addLocale({
group: ',',
decimal: '.',
mmmm: _('нэгдүгээ~;хоёрдугаа~;гуравдугаа~;дөрөвдүгээ~;тавдугаа~;зургаадугаа~;долоодугаа~;наймдугаа~;есдүгээ~;аравдугаа~;арван нэгдүгээ~;арван хоёрдугаа~', 'р сар'),
mmm: _('1~;2~;3~;4~;5~;6~;7~;8~;9~;10~;11~;12~', '-р сар'),
dddd: _('ням;даваа;мягмар;лхагва;пүрэв;баасан;бямба'),
ddd: _('Ня;Да;Мя;Лх;Пү;Ба;Бя'),
ampm: _('ү.ө.;ү.х.')
}, 'mn');
addLocale({
group: ',',
decimal: '.',
mmmm: _('जानेवारी;फेब्रुवारी;मार्च;एप्रिल;मे;जून;जुलै;ऑगस्ट;सप्टेंबर;ऑक्टोबर;नोव्हेंबर;डिसेंबर'),
mmm: _('जाने;फेब्रु;मार्च;एप्रि;मे;जून;जुलै;ऑग;सप्टें;ऑक्टो;नोव्हें;डिसें'),
dddd: _('रविवार;सोमवार;मंगळवार;बुधवार;गुरुवार;शुक्रवार;शनिवार'),
ddd: _('रवि;सोम;मंगळ;बुध;गुरु;शुक्र;शनि')
}, 'mr');
addLocale(xm({
group: ',',
decimal: '.',
mmmm: _('ဇန်နဝါရီ;ဖေဖော်ဝါရီ;မတ်;ဧပြီ;မေ;ဇွန်;ဇူလိုင်;ဩဂုတ်;စက်တင်ဘာ;အောက်တိုဘာ;နိုဝင်ဘာ;ဒီဇင်ဘာ'),
mmm: _('ဇန်;ဖေ;မတ်;ဧ;မေ;ဇွန်;ဇူ;ဩ;စက်;အောက်;နို;ဒီ'),
dddd: _('တနင်္ဂနွေ;တနင်္လာ;အင်္ဂါ;ဗုဒ္ဓဟူး;ကြာသပတေး;သောကြာ;စနေ'),
ampm: _('နံနက်;ညနေ')
}, -1, 0), 'my');
addLocale({
group: ',',
decimal: '.',
mmmm: _('ਜਨਵਰੀ;ਫ਼ਰਵਰੀ;ਮਾਰਚ;ਅਪ੍ਰੈਲ;ਮਈ;ਜੂਨ;ਜੁਲਾਈ;ਅਗਸਤ;ਸਤੰਬਰ;ਅਕਤੂਬਰ;ਨਵੰਬਰ;ਦਸੰਬਰ'),
mmm: _('ਜਨ;ਫ਼ਰ;ਮਾਰਚ;ਅਪ੍ਰੈ;ਮਈ;ਜੂਨ;ਜੁਲਾ;ਅਗ;ਸਤੰ;ਅਕਤੂ;ਨਵੰ;ਦਸੰ'),
dddd: _('ਐਤਵਾਰ;ਸੋਮਵਾਰ;ਮੰਗਲਵਾਰ;ਬੁੱਧਵਾਰ;ਵੀਰਵਾਰ;ਸ਼ੁੱਕਰਵਾਰ;ਸ਼ਨਿੱਚਰਵਾਰ'),
ddd: _('ਐਤ;ਸੋਮ;ਮੰਗਲ;ਬੁੱਧ;ਵੀਰ;ਸ਼ੁੱਕਰ;ਸ਼ਨਿੱਚਰ'),
ampm: _('ਪੂ.ਦੁ.;ਬਾ.ਦੁ.')
}, 'pa');
addLocale({
group: '.',
decimal: ',',
mmmm: _('ianuarie;februarie;martie;aprilie;mai;iunie;iulie;august;septem~;octom~;noiem~;decem~', 'brie'),
mmm: _('ian.;feb.;mar.;apr.;mai;iun.;iul.;aug.;sept.;oct.;nov.;dec.'),
dddd: _('duminică;luni;marți;miercuri;joi;vineri;sâmbătă'),
ddd: _('dum.;lun.;mar.;mie.;joi;vin.;sâm.'),
ampm: _('a.m.;p.m.')
}, 'ro');
addLocale(xm({
group: '.',
decimal: ',',
mmmm: _('januar;februar;marec;april;maj;junij;julij;avgust;september;oktober;november;december'),
mmm: _('jan.;feb.;mar.;apr.;maj;jun.;jul.;avg.;sep.;okt.;nov.;dec.'),
dddd: _('nedelja;ponedeljek;torek;sreda;četrtek;petek;sobota'),
ampm: _('dop.;pop.')
}, -1, 13), 'sl');
addLocale(xm({
group: '.',
decimal: ',',
mmmm: _('јануар;фебруар;март;април;мај;јун;јул;август;септембар;октобар;новембар;децембар'),
dddd: _('недеља;понедељак;уторак;среда;четвртак;петак;субота')
}, 3, 3), 'sr');
addLocale({
group: ',',
decimal: '.',
mmmm: _('ஜனவரி;பிப்ரவரி;மார்ச்;ஏப்ரல்;மே;ஜூன்;ஜூலை;ஆகஸ்ட்;செப்டம்பர்;அக்டோபர்;நவம்பர்;டிசம்பர்'),
mmm: _('ஜன.;பிப்.;மார்.;ஏப்.;மே;ஜூன்;ஜூலை;ஆக.;செப்.;அக்.;நவ.;டிச.'),
dddd: _('ஞாயிறு;திங்கள்;செவ்வாய்;புதன்;வியாழன்;வெள்ளி;சனி'),
ddd: _('ஞாயி.;திங்.;செவ்.;புத.;வியா.;வெள்.;சனி')
}, 'ta');
addLocale({
group: ',',
decimal: '.',
mmmm: _('జనవరి;ఫిబ్రవరి;మార్చి;ఏప్రిల్;మే;జూన్;జులై;ఆగస్టు;సెప్టెంబర్;అక్టోబర్;నవంబర్;డిసెంబర్'),
mmm: _('జన;ఫిబ్ర;మార్చి;ఏప్రి;మే;జూన్;జులై;ఆగ;సెప్టెం;అక్టో;నవం;డిసెం'),
dddd: _('ఆదివారం;సోమవారం;మంగళవారం;బుధవారం;గురువారం;శుక్రవారం;శనివారం'),
ddd: _('ఆది;సోమ;మంగళ;బుధ;గురు;శుక్ర;శని')
}, 'te');
addLocale({
decimal: ',',
mmmm: _('січня;лютого;березня;квітня;травня;червня;липня;серпня;вересня;жовтня;листопада;грудня'),
mmm: _('січ.;лют.;бер.;квіт.;трав.;черв.;лип.;серп.;вер.;жовт.;лист.;груд.'),
dddd: _('неділю;понеділок;вівторок;середу;четвер;пʼятницю;суботу'),
ddd: _('нд;пн;вт;ср;чт;пт;сб'),
ampm: _('дп;пп')
}, 'uk');
addLocale({
group: '.',
decimal: ',',
mmmm: _('~1;~2;~3;~4;~5;~6;~7;~8;~9;~10;~11;~12', 'tháng '),
mmm: _('~1;~2;~3;~4;~5;~6;~7;~8;~9;~10;~11;~12', 'thg '),
dddd: _('Chủ Nhật;Thứ Hai;Thứ Ba;Thứ Tư;Thứ Năm;Thứ Sáu;Thứ Bảy'),
ddd: _('CN;Th 2;Th 3;Th 4;Th 5;Th 6;Th 7'),
ampm: _('SA;CH')
}, 'vi');
addLocale(xm({
group: '٬',
decimal: '٫',
ampm: _('ص;م'),
mmmm: _('يناير;فبراير;مارس;أبريل;مايو;يونيو;يوليو;أغسطس;سبتمبر;أكتوبر;نوفمبر;ديسمبر'),
dddd: _('الأحد;الاثنين;الثلاثاء;الأربعاء;الخميس;الجمعة;السبت'),
mmmm6: _('رمضان;شوال;ذو القعدة;ذو الحجة;محرم;ربيع الأول;ربيع الآخرة;جمادى الأولى;جمادى الآخرة;رجب;شعبان;رمضان')
}, 0, 0), 'ar');
addLocale({
group: ',',
decimal: '.',
mmmm: _('জানুয়ারী;ফেব্রুয়ারী;মার্চ;এপ্রিল;মে;জুন;জুলাই;আগস্ট;সেপ্টেম্বর;অক্টোবর;নভেম্বর;ডিসেম্বর'),
mmm: _('জানু;ফেব;মার্চ;এপ্রি;মে;জুন;জুল;আগ;সেপ্টেঃ;অক্টোঃ;নভেঃ;ডিসেঃ'),
dddd: _('রবিবার;সোমবার;মঙ্গলবার;বুধবার;বৃহস্পতিবার;শুক্রবার;শনিবার'),
ddd: _('রবি;সোম;মঙ্গল;বুধ;বৃহস্পতি;শুক্র;শনি')
}, 'bn');
addLocale({
group: ',',
decimal: '.',
mmmm: _('जनवरी;फ़रवरी;मार्च;अप्रैल;मई;जून;जुलाई;अगस्त;सितंबर;अक्तूबर;नवंबर;दिसंबर'),
mmm: _('जन॰;फ़र॰;मार्च;अप्रैल;मई;जून;जुल॰;अग॰;सित॰;अक्तू॰;नव॰;दिस॰'),
dddd: _('रविवार;सोमवार;मंगलवार;बुधवार;गुरुवार;शुक्रवार;शनिवार'),
ddd: _('रवि;सोम;मंगल;बुध;गुरु;शुक्र;शनि'),
ampm: _('am;pm')
}, 'hi');