Intl: интернационализация в JavaScript

Внедрение стандарта ES2021 добавило в язык JavaScript встроенные возможности локализации. Intl API включает несколько конструкторов, добавленных в пространство имен:

Аргументы

locale
Локаль - первый и самый важный аргумент всех конструкторов, связанных с интернационализацией.

Локаль описывается строкой из трёх компонентов, которые разделяются дефисом: Код языка - Код способа записи - Код страны. На практике не всегда указаны три, обычно меньше:

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

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

Все методы принимают локаль в виде строки или массива, содержащего несколько локалей в порядке предпочтения.

Если локаль не указана или undefined – берётся локаль по умолчанию, установленная в окружении (браузере).

localeMatcher
– вспомогательная настройка, которую тоже можно везде указать, она определяет способ подбора локали, если желаемая недоступна. У него два значения:
  • "lookup" – означает простейший порядок поиска путём обрезания суффикса, например zh-Hans-CNzh-Hanszh → локаль по умолчанию.
  • "best fit" – использует встроенные алгоритмы и предпочтения браузера (или другого окружения) для выбора подходящей локали.

По умолчанию стоит "best fit".

Если локалей несколько, например ["zh-Hans-CN", "ru-RU"] то localeMatcher пытается подобрать наиболее подходящую локаль для первой из списка (китайская), если не получается – переходит ко второй (русской) и так далее. Если ни одной не нашёл, например на компьютере не совсем поддерживается ни китайский ни русский, то используется локаль по умолчанию.

Как правило, "best fit" является здесь наилучшим выбором.

Для всех Intl-объектов применимы два метода:
  1. supportedLocalesOf() - - это встроенный метод в JavaScript, который используется для возврата массива, содержащего те из предоставленных локалей, которые поддерживаются в сопоставлении, без необходимости возвращаться к локали среды выполнения по умолчанию.
  2. resolvedOptions() - метод возвращает новый объект со свойствами , отражающих локальные настройки и параметры, вычисленные во время инициализации Intl=объекта Intl.ListFormat. Например, можно получить часовой пояс клиента из браузера
    alert(new Intl.DateTimeFormat().resolvedOptions().timeZone);

Intl.Collator

Конструктор для «сортировщиков», которые представляют собой объекты, позволяющие сравнивать строки с учетом языка

Синтаксис:

let collator = new Intl.Collator([locales, [options]])

Параметры:

locales

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

options
Объект с дополнительными настройками:
  • localeMatcher – алгоритм выбора подходящей локали.
  • sensitivity – чувствительность: какие различия в символах учитывать, а какие – нет, варианты:
    • base – учитывать только разные символы, без диакритических знаков и регистра, например: а ≠ б, е = ё, а = А.
    • accent – учитывать символы и диакритические знаки, например: а ≠ б, е ≠ ё, а = А.
    • case – учитывать символы и регистр, например: а ≠ б, е = ё, а ≠ А.
    • variant – учитывать всё: символ, диакритические знаки, регистр, например: а ≠ б, е ≠ ё, а ≠ А, используется по умолчанию.
  • ignorePunctuation – игнорировать знаки пунктуации: true/false, по умолчанию false.
  • sensitivity – чувствительность: какие различия в символах учитывать, а какие – нет, варианты:
    • base – учитывать только разные символы, без диакритических знаков и регистра, например: а ≠ б, е = ё, а = А.
    • accent – учитывать символы и диакритические знаки, например: а ≠ б, е ≠ ё, а = А.
    • case – учитывать символы и регистр, например: а ≠ б, е = ё, а ≠ А.
    • variant – учитывать всё: символ, диакритические знаки, регистр, например: а ≠ б, е ≠ ё, а ≠ А, используется по умолчанию.
  • ignorePunctuation – игнорировать знаки пунктуации: true/false, по умолчанию false.
  • numeric – использовать ли численное сравнение: true/false, если true, то будет 12 > 2, иначе 12 < 2.
  • caseFirst – в сортировке должны идти первыми прописные или строчные буквы, варианты: "upper" (прописные), "lower" (строчные) или "false" (стандартное для локали, также является значением по умолчанию). Не поддерживается IE11.

В подавляющем большинстве случаев подходят стандартные параметры, то есть options указывать не нужно.

Методы

  1. let collator = new Intl.Collator([locales, [options]]);
    
    collator.compare(str1,str2)
    Метод compare() возвращает значение 1 (больше), 0 (равно) или -1 (меньше).

    Пример

    let collator = new Intl.Collator();
    let s = ( "ёжик" > "яблоко" )        // true (ёжик больше, что неверно)
    s += `\n${ collator.compare("ёжик", "яблоко") }`; // -1 (ёжик меньше, верно)
    
    let collator1 = new Intl.Collator();
    s += `\n${ collator1.compare("ЁжиК", "ёжик") }`;  // 1, разные
    
    let collator2 = new Intl.Collator(undefined, {sensitivity: "accent"});
    s += `\n${ collator2.compare("ЁжиК", "ёжик") }`; // 0, одинаковые
    alert(s);
    

  2. Intl.Collator.supportedLocalesOf(locales[, options])
    Метод возвращает массив, содержащий те из предоставленных локалей, что поддерживаются при сравнении строк без отката к локали по умолчанию среды выполнения. Необязательный параметр options может содержать следующее свойство: localeMatcher

    Пример

    var locales = ['ban', 'id-u-co-pinyin', 'de-ID'];
    var options = { localeMatcher: 'lookup' };
    alert(Intl.Collator.supportedLocalesOf(locales, options).join(', '));

  3. let collator = new Intl.Collator([locales, [options]]);
    
    collator.resolvedOptions()
    Метод resolvedOptions() возвращает новый объект со свойствами , отражающих локальные настройки и параметры сортировки , вычисленные во время инициализации объекта Intl.Collator.

    Пример

    var ru = new Intl.Collator('ru', { sensitivity: 'base' });
    var usedOptions = ru.resolvedOptions();
    let s="";
    for(var p in usedOptions) s+="usedOptions."+p+" = "+usedOptions[p]+"\n";
    alert(s);

Intl.DateTimeFormat

Конструктор для объектов, которые включают чувствительное к языку форматирование даты и времени.

Синтаксис:

new Intl.DateTimeFormat([locales, [options]])

Параметры:

locales

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

options
СвойствоОписаниеВозможные значенияПо умолчанию
localeMatcherАлгоритм подбора локалиlookup, best fitbest fit
formatMatcherАлгоритм подбора форматаbasic, best fitbest fit
hour12Включать ли время в 12-часовом форматеtrue -- 12-часовой формат, false -- 24-часовой
timeZoneВременная зонаВременная зона, например Europe/MoscowUTC
weekdayДень неделиnarrow, short, long
eraЭраnarrow, short, long
yearГод2-digit, numericundefined или numeric
monthМесяц2-digit, numeric, narrow, short, longundefined или numeric
dayДень2-digit, numericundefined или numeric
hourЧас2-digit, numeric
minuteМинуты2-digit, numeric
secondСекунды2-digit, numeric
timeZoneNameНазвание таймзоны (нет в IE11)short, long

Все локали обязаны поддерживать следующие наборы настроек:

  • weekday, year, month, day, hour, minute, second
  • weekday, year, month, day
  • year, month, day
  • year, month
  • month, day
  • hour, minute, second

Если указанный формат не поддерживается, то настройка formatMatcher задаёт алгоритм подбора наиболее близкого формата: basic – по стандартным правилам и best fit – по умолчанию, на усмотрение окружения (браузера).

Методы

  1. let datetimeformat = new Intl.DateTimeFormat([locales, [options]])
    
    datetimeformat.resolvedOptions()
    Метод resolvedOptions() возвращает новый объект со свойствами, отражающими локаль и параметры форматирования даты и времени, вычисленные во время инициализации соответствующего объекта DateTimeFormat.

    Пример

    var ru = new Intl.DateTimeFormat('ru');
    var usedOptions = ru.resolvedOptions();
    let s="";
    for(var p in usedOptions) s+="usedOptions."+p+" = "+usedOptions[p]+"\n";
    alert(s);

  2. let datetimeformat = new Intl.DateTimeFormat([locales, [options]])
    
    datetimeformat.format(date)
    Метод format() форматирует дату (date) согласно локали и параметрам форматирования этого Intl.DateTimeFormat объекта.

    Пример

    // Короткая дата:
    let now = new Date();
    let ru1 = new Intl.DateTimeFormat('ru').format(now);
    let us  = new Intl.DateTimeFormat('en-US').format(now);
    
    // Длинная дата:
    let options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
    let ru2 = new Intl.DateTimeFormat('ru',options).format(now);
    let es = new Intl.DateTimeFormat('es-ES',options).format(now);
    
    // Только время:
    let tt = new Intl.DateTimeFormat('ru', {hour:'numeric', minute:'numeric', second:'numeric'}).format(now);
    alert ( `${ru1}\n${us}\n\n${ru2}\n${es}\n\n${tt}` );
    
  3. let datetimeformat = new Intl.DateTimeFormat([locales, [options]])
    
    datetimeformat.formatToParts(date)
    Метод formatToParts() возвращает массив объектов, содержащих форматированную дату в виде пар ключ/значение. Структура возврата метода formatToParts() похожа на это:
    [
      { type: 'day', value: '17' },
      { type: 'weekday', value: 'Monday' }
    ]

    Пример

    let date = Date.UTC(2021, 12, 13, 3, 0, 42);
    
    let formatter = new Intl.DateTimeFormat('ru', {
      weekday: 'long', year: 'numeric', month: 'numeric', day: 'numeric',
      hour: 'numeric', minute: 'numeric', second: 'numeric',
      fractionalSecondDigits: 3, hour12: false, timeZone: 'UTC' 
    });
    
    let s = "[\n";
    let a = formatter.formatToParts(date);
    for (let i=0; i < a.length; i++) 
     { s += `  { type: '${a[i].type}',\t value: '${a[i].value}'\t },\n`; }
    alert(s+']');
    

Intl.DisplayNames

Конструктор DisplayNames используется для форматирования названий языков, диалектов, регионов и валют на другом языке.

Синтаксис:

new Intl.DisplayNames([locales, [options]])

Параметры:

locales

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

options

Параметр options представляет дополнительный набор опций:

  • localeMatcher: алгоритм поиска соответствий. Может принимать два значения: "lookup" и "best fit".
    Значение по умолчанию - "best fit".

  • style: длина форматируемой строки. Возможные значения: "long", "short" и "narrow" (например, A, B,C).
    Значение по умолчанию - "long"

  • type: тип названий, которые будут локализованы. Возможные значения:

    • "language": возвращает название языка

    • "region": возвращает название страны/региона

    • "script": возвращает название письменного скрипта

    • "currency": возвращает название валюты

    Обратите внимание: настройка type является обязательной.
  • fallback: задает альтернативнй вариант. Возможные значения: "code" и "none".
    "code" задает код, который определяет локализуемое название.

Какое именно название будет локализоваться, задается с помощью метода of().

Методы

  1. let displaynames = new Intl.DisplayNames([locales, [options]])
    
    displaynames.resolvedOptions()
    Метод resolvedOptions() возвращает новый объект со свойствами , отражающих локальные настройки и параметры, вычисленные во время инициализации объекта Intl.DisplayNames.

    Пример

    var ru = new Intl.DisplayNames('ru',{type:"language"});
    var usedOptions = ru.resolvedOptions();
    let s="";
    for(var p in usedOptions) s+="usedOptions."+p+" = "+usedOptions[p]+"\n";
    alert(s);
  2. let displaynames = new Intl.DisplayNames([locales, [options]])
    
    displaynames.of(code)
    Метод of() возвращает локализованное наименование. code зависит от type:
    • Если type является "region", code: код ISO-3166 из двух букв (например, US, RU, DE и т.д.) или трехчисловой код UN M49.
    • Если type является "script", code: четырехбуквенный код ISO-15924.
    • Если type является "language", code: код языка в формате languageCode[-scriptCode][-regionCode](-variant), где компонент languageCode представляет двухбуквенный код языка в формате ISO 639-1 или трехбуквенный код в формате ISO 639-2.
    • Если type является "currency", code:трехбуквенный код ISO 4217.

    Пример

    let s = `
     ${ GermanyInEnglish = new Intl.DisplayNames("en", {type: "region"}).of("DE") }
     ${ GermanyInRussian = new Intl.DisplayNames("ru", {type: "region"}).of("DE")}
     ${ GermanyInGerman = new Intl.DisplayNames("de", {type: "region"}).of("DE") }
    
     ${ CyrlInEnglish = new Intl.DisplayNames("en", {type: "script"}).of("Cyrl") }
     ${ CyrlInRussian = new Intl.DisplayNames("ru", {type: "script"}).of("Cyrl") }
    
     ${ enRussian = new Intl.DisplayNames("en", {type: "language"}).of("ru") }
     ${ ruRussian = new Intl.DisplayNames("ru", {type: "language"}).of("ru") }
     ${ deRussian = new Intl.DisplayNames("de", {type: "language"}).of("ru") }
    
     ${ enUS = new Intl.DisplayNames("ru", {type: "language"}).of("en-US") }
     ${ enGB = new Intl.DisplayNames("ru", {type: "language"}).of("en-GB") }
    
     ${ usd = new Intl.DisplayNames("ru", {type: "currency"}).of("USD") }
     ${ euro = new Intl.DisplayNames("ru", {type: "currency"}).of("EUR") }
     ${ ruble = new Intl.DisplayNames("ru", {type: "currency"}).of("RUB") }
    `;
    alert(s);
    

Intl.ListFormat

Конструктор для объединения строк, использующий конъюнкцию и дизъюнкцию, чтобы сформировать понятную фразу.

Синтаксис:

new Intl.ListFormat([locales, [options]])

Параметры:

locales

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

options
Параметр options представляет дополнительный набор опций:
  • localeMatcher: алгоритм поиска соответствий. Может принимать два значения: "lookup" и "best fit".
    Значение по умолчанию - "best fit".
  • style: длина форматируемой строки.
    Возможные значения: "long" (например, A, B, and C), "short" или "narrow" (например, A, B,C).
    Значение по умолчанию - "long"
  • type: формат выходной строки.Возможные значения:
    • "conjunction" (предпоследний и последний элементы в списке соединяются союзом "и" ("and") - A, B и C),
    • "disjunction" (предпоследний и последний элементы в списке соединяются союзом "или" ("or") - A, B или C),
    • "unit" (применяется для списков с числовыми значениями и добавляет к ним единицы измерения).
    Значение по умолчанию - "conjunction"
Для форматирования списка данный объект предоставляет метод format().

Методы

  1. let listformat = new Intl.ListFormat([locales, [options]])
    
    listformat.resolvedOptions()
    Метод resolvedOptions() возвращает новый объект со свойствами , отражающих локальные настройки и параметры, вычисленные во время инициализации объекта Intl.ListFormat.

    Пример

    var ru = new Intl.ListFormat('ru');
    var usedOptions = ru.resolvedOptions();
    let s="";
    for(var p in usedOptions) s+="usedOptions."+p+" = "+usedOptions[p]+"\n";
    alert(s);
  2. let listformat = new Intl.ListFormat([locales, [options]])
    
    listformat.format(list)

    Метод format() возвращает отформатированный локализованный список (list) в виде строки.

    Пример

    const people = ["Андрей", "Antonio", "Sam"];
    let s = `
     ${ andList = new Intl.ListFormat("ru" , { style:"long", type: "conjunction" }).format(people) }
     ${ new Intl.ListFormat("es-ES" , { style:"long", type: "conjunction" }).format(people) }
     ${ new Intl.ListFormat("en-US" , { style:"long", type: "conjunction" }).format(people) }
     ${ new Intl.ListFormat("en-US" , { style:"short", type: "conjunction" }).format(people) }
    
     ${ unitList = new Intl.ListFormat("ru" , { style:"short", type: "unit" }).format(people) }
    
     ${ orList = new Intl.ListFormat("ru" , { style:"long", type: "disjunction" }).format(people) }
     ${ new Intl.ListFormat("es" , { style:"long", type: "disjunction" }).format(people) }
     ${ new Intl.ListFormat("en" , { style:"long", type: "disjunction" }).format(people) }
     ${ new Intl.ListFormat("zh" , { style:"long", type: "disjunction" }).format(people) }
    `;
    alert(s);
    

Intl.NumberFormat

Конструктор NumberFormat используется для форматирования чисел, валюты, процентов и единиц измерения, таких как длина, температура и др.

Синтаксис:

new Intl.NumberFormat([locales[, options]]);

Параметры:

locales

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

options
Свойство Описание Возможные значения По умолчанию
localeMatcherАлгоритм подбора локалиlookup, best fitbest fit
styleСтиль форматированияdecimal, percent, currencydecimal
currencyАлфавитный код валютыСм. Список кодов валюты, например USD
currencyDisplayПоказывать валюту в виде кода, локализованного символа или локализованного названияcode, symbol, namesymbol
useGroupingРазделять ли цифры на группыtrue, falsetrue
minimumIntegerDigitsМинимальное количество цифр целой частиот 1 до 2121
minimumFractionDigitsМинимальное количество десятичных цифрот 0 до 20для чисел и процентов 0, для валюты зависит от кода.
maximumFractionDigitsМаксимальное количество десятичных цифрот minimumFractionDigits до 20.для чисел max(minimumFractionDigits, 3), для процентов 0, для валюты зависит от кода.
minimumSignificantDigitsМинимальное количество значимых цифрот 1 до 211
maximumSignificantDigitsМаксимальное количество значимых цифрот minimumSignificantDigits до 21minimumSignificantDigits

Методы

  1. let numberformat = new Intl.NumberFormat([locales, [options]])
    
    numberformat.resolvedOptions()
    Метод resolvedOptions() возвращает новый объект со свойствами, отражающими локаль и параметры форматирования даты и времени, вычисленные во время инициализации соответствующего объекта NumberFormat.

    Пример

    var ru = new Intl.NumberFormat('ru');
    var usedOptions = ru.resolvedOptions();
    let s="";
    for(var p in usedOptions) s+="usedOptions."+p+" = "+usedOptions[p]+"\n";
    alert(s);

  2. let numberformat = new Intl.NumberFormat([locales, [options]])
    
    numberformat.format(number)
    Для форматирования числа объект Intl.NumberFormat предоставляет метод format(), в который передается форматируемое число (number) и который возвращает отформатированное число в виде строки.

    Пример

    let number = 1234567890.123;
    let s = `без опций:
     ${ new Intl.NumberFormat("en").format(number) }
     ${ new Intl.NumberFormat("ru").format(number) }
     ${ new Intl.NumberFormat("de").format(number) }
    
    С ограничением значимых цифр (важны только первые 3):
     ${ new Intl.NumberFormat("ru", { maximumSignificantDigits: 3}).format(number) }
    `;
    let value = 0.851;
    s+=`
    Проценты:
     ${ new Intl.NumberFormat("ru", {style: "percent"}).format(value) }
     ${ new Intl.NumberFormat("en", {style: "percent"}).format(value) }
     ${ new Intl.NumberFormat("tr", {style: "percent"}).format(value) }
    
    Вывод дробной части:
     ${ new Intl.NumberFormat("en", 
             {style: "percent", minimumFractionDigits: 2}).format(value) }
     ${ new Intl.NumberFormat("ru", 
             {style: "percent", minimumFractionDigits: 2}).format(value) }
    `; 
    value = 1234.5;
    s+=`
    Форматирование валюты:
     ${ new Intl.NumberFormat("en", 
             {style: "currency", currency: "USD"}).format(value) }
     ${ new Intl.NumberFormat("ru", 
             {style: "currency", currency: "USD"}).format(value) }
     ${ new Intl.NumberFormat("ru", 
             {style: "currency", currency: "USD", currencyDisplay: "name"}).format(value) }
     ${ new Intl.NumberFormat("ru", 
             {style: "currency", currency: "EUR"}).format(value) }
     ${ new Intl.NumberFormat("ru", 
             {style: "currency", currency: "EUR", currencyDisplay: "name"}).format(value) }
     ${ new Intl.NumberFormat("ru", 
             {style: "currency", currency: "RUB"}).format(value) }
     ${ new Intl.NumberFormat("ru", 
             {style: "currency", currency: "RUB", currencyDisplay: "name"}).format(value) }
    `; 
    value = 123;
    s+=`
    Форматирование единиц измерения:
     ${ new Intl.NumberFormat("ru", 
             {style: "unit", unit: "liter", unitDisplay: "long"}).format(value) }
     ${ new Intl.NumberFormat("ru", 
             {style: "unit", unit: "liter", unitDisplay: "short"}).format(value) }
     ${ new Intl.NumberFormat("zh", 
             {style: "unit", unit: "liter"}).format(value) }
    `; 
    alert(s);
    
  3. let numberformat = new Intl.NumberFormat([locales, [options]])
    
    numberformat.formatToParts(date)
    Метод formatToParts() возвращает массив объектов, представляющих числовую строку в частях, которые могут быть использованы для пользовательского форматирования с учетом текущих данных locales. Структура возвраты метода formatToParts() возвраты метода похожа на это:
    [
      { type: "integer", value: "3" },
      { type: "group", value: "." },
      { type: "integer", value: "500" }
    ]
    

    Пример

    let number = 3500;;
    
    let formatter = new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' });
    
    let s = "[\n";
    let a = formatter.formatToParts(number);
    for (let i=0; i < a.length; i++) 
     { s += `  { type: '${a[i].type}',\t value: '${a[i].value}'\t },\n`; }
    alert(s+']');
    

Intl.RelativeTimeFormat

Конструктор RelativeTimeFormat используется для локализации относительного времени, например, вчера, завтра, на следующей неделе, в прошлом месяце и т.д.

Синтаксис:

new Intl.RelativeTimeFormat([locales[, options]]);

Параметры:

locales

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

options
Объект с дополнительными настройками:
  • localeMatcher – алгоритм выбора подходящей локали.
  • numeric - формат выходного сообщения. одно из "always", т.е. "1 день назад" или "auto", т.е. "вчера".
    По усолчанию - "always"
  • style - формат выходного сообщения: "long", "short" или "narrow".
    По усолчанию - "long"

Метод

В метод format() передается числовое значение (amount) и единица измерения (unit): "year" (год), "quarter" (квартал), "month" (месяц), "week" (неделя), "day" (день), "hour" (час), "minute" (минута), или "second" (секунда):

new Intl.RelativeTimeFormat(locale, options).format(amount, unit)
Положительное число в amount означает будущее, отрицательное - прошлое.

Пример

let s = `
 ${ new Intl.RelativeTimeFormat("ru").format(-1,"day") }
 ${ new Intl.RelativeTimeFormat("ru",{numeric:"auto"}).format(1,"day") }
 ${ new Intl.RelativeTimeFormat("es",{numeric:"auto"}).format(1,"day") }
 ${ new Intl.RelativeTimeFormat("ru",{numeric:"auto"}).format(1,"month") }
`;
alert(s);

Intl.Locale

Конструктор Locale используется для создания экземпляров идентификаторов локали:

 new Intl.Locale([locales[, options]]);

Первым обязательным аргументом, передаваемым Locale, является локаль (locales). Например:

const ru = new Intl.Locale('ru-RU');

Вторым опциональным аргументом Locale является объект с настройками. Например:

const ru = new Intl.Locale( 'ru',  { region: 'RU', hourCycle: 'h24', calendar: 'gregory' } );
С полным описанием Intl.Locale можно познакомиться здесь.

Intl.getCanonicalLocales

Метод Intl.getCanonicalLocales() позволяет проверить, действительна ли локаль, и возвращает для нее правильное форматирование. Он может принимать строку или массив. Если языковой стандарт неверен выдаётся ошибка, которую можно поймать с помощью блока try/catch.

Пример
let s = `
 ${ Intl.getCanonicalLocales("it-it") }
 ${ Intl.getCanonicalLocales(["en-us", "en-gb"]) }
`;
try 
 {s+=`${ Intl.getCanonicalLocales("it_it") }` }
catch (e) {s+="Error!";}
alert(s);

Методы в Date, String, Number

Методы форматирования также поддерживаются в обычных строках, датах, числах:

  1. String.prototype.localeCompare(that [, locales [, options]])

    Сравнивает строку с другой, с учётом локали, например:

    let str = "ёжик";
    
    alert( str.localeCompare("яблоко", "ru") ); // -1
    
  2. Date.prototype.toLocaleString([locales [, options]])

    Форматирует дату в соответствии с локалью, например:

    let date = new Date(2021, 12, 13, 12, 23);
    
    alert( date.toLocaleString("ru", { year: 'numeric', month: 'long' }) ); 
    
  3. Date.prototype.toLocaleDateString([locales [, options]])

    То же, что и выше, но опции по умолчанию включают в себя год, месяц, день

    let date = new Date(2021, 12, 13, 12, 23);
    
    alert( date.toLocaleDateString("es"));
    
  4. Date.prototype.toLocaleTimeString([locales [, options]])

    То же, что и выше, но опции по умолчанию включают в себя часы, минуты, секунды

    let date = new Date(2021, 12, 13, 12, 23);
    
    alert( date.toLocaleTimeString( "ru",{ weekday: 'long' } ) );
    
  5. Number.prototype.toLocaleString([locales [, options]])

    Форматирует число, используя опции Intl.NumberFormat.

    let value = -1234567890.123;
    
    alert( value.toLocaleString("ru"));
    
  6. Все эти методы при запуске создают соответствующий объект Intl.* и передают ему опции, можно рассматривать их как укороченные варианты вызова.