Библиотека Globalize используется для интернационализации в JavaScript и основана на стандарте CLDR (Unicode Common Locale Data Repository). Основная особенность — отсутствие встроенных локалей: все данные подключаются отдельно, что позволяет собирать минимально необходимый набор ресурсов.
Установка через npm:
npm install globalize
npm install cldr-data
Дополнительно часто требуется загрузка дополнительных пакетов для работы с форматированием дат, чисел и сообщений.
Globalize не содержит локализационных данных внутри пакета. Вместо этого используется CLDR:
CLDR подключается вручную, что делает сборку предсказуемой и уменьшает размер бандла.
Для запуска минимального примера требуется загрузить базовые JSON-файлы CLDR:
const Globalize = require("globalize");
const cldrData = require("cldr-data");
// загрузка обязательных данных
Globalize.load(
cldrData.entireSupplemental(),
cldrData.entireMainFor("en")
);
Без загрузки supplemental и main данные
форматирование работать не будет, даже если библиотека импортирована
корректно.
После загрузки CLDR создаётся экземпляр локали:
const enGlobalize = new Globalize("en");
Строка "en" определяет активную локаль. Для разных
языков создаются отдельные экземпляры.
const Globalize = require("globalize");
const cldrData = require("cldr-data");
Globalize.load(
cldrData.entireSupplemental(),
cldrData.entireMainFor("en")
);
const en = new Globalize("en");
const formattedNumber = en.numberFormatter()(1234567.89);
console.log(formattedNumber);
Результат:
1,234,567.89
Для валютного форматирования требуется дополнительный тип данных CLDR.
const currencyFormatter = en.currencyFormatter("USD");
console.log(currencyFormatter(1999.99));
Результат:
$1,999.99
Globalize использует CLDR-форматы для дат.
const dateFormatter = en.dateFormatter({
datetime: "medium"
});
console.log(dateFormatter(new Date()));
Формат зависит от локали и настроек CLDR.
Механизм сообщений позволяет работать с интернационализацией строк.
Globalize.loadMessages({
en: {
welcome: "Welcome, {name}!"
}
});
const messageFormatter = en.messageFormatter("welcome");
console.log(messageFormatter({ name: "Alex" }));
Результат:
Welcome, Alex!
const Globalize = require("globalize");
const cldrData = require("cldr-data");
// загрузка CLDR
Globalize.load(
cldrData.entireSupplemental(),
cldrData.entireMainFor("en")
);
// сообщения
Globalize.loadMessages({
en: {
welcome: "Welcome, {name}!"
}
});
// инициализация локали
const en = new Globalize("en");
// число
const number = en.numberFormatter()(9876543.21);
// валюта
const currency = en.currencyFormatter("USD")(2500);
// дата
const date = en.dateFormatter({ datetime: "medium" })(new Date());
// сообщение
const message = en.messageFormatter("welcome")({ name: "User" });
console.log(number);
console.log(currency);
console.log(date);
console.log(message);
В браузерной среде требуется сборка через bundler (Webpack, Vite, Rollup), так как CLDR-файлы подключаются как модули.
Пример структуры:
import Globalize from "globalize";
import "cldr-data";
import supplemental from "cldr-data/supplemental/likelySubtags.json";
import numbers from "cldr-data/main/en/numbers.json";
Globalize.load(supplemental, numbers);
const g = new Globalize("en");
console.log(g.numberFormatter()(1000));
cldr-data/supplemental/likelySubtagscldr-data/supplemental/numberingSystemscldr-data/main/<locale>/*supplemental данныхglobalize и cldr-dataGlobalize(locale)Globalize допускает параллельное использование разных локалей:
const en = new Globalize("en");
const de = new Globalize("de");
const ru = new Globalize("ru");
console.log(en.numberFormatter()(1234.5));
console.log(de.numberFormatter()(1234.5));
console.log(ru.numberFormatter()(1234.5));
Каждая локаль использует собственные данные CLDR, если они загружены.