В библиотеке Globalize семантическая разметка выступает как слой представления значений, в котором данные отделяются от их текстового отображения и приобретают контекстную структуру, необходимую для корректной локализации. В отличие от простого форматирования строк, семантическая разметка опирается на смысловые категории: число, дата, валюта, множественность, род, относительное время и параметры сообщения.
Ключевая идея заключается в том, что любое значение должно интерпретироваться не как строка, а как сущность с типом и правилами отображения.
Базовый принцип:
Например, число 1000 не является строкой
"1000", а представляет числовую сущность, которая в разных
локалях может быть отображена как:
1,000 (en-US)1.000 (de-DE)1 000 (fr-FR)Globalize использует CLDR (Unicode Common Locale Data Repository) как источник семантических правил.
Система локализации строится вокруг набора типов данных, каждый из которых имеет собственную модель представления.
Числа в семантической разметке включают:
Globalize.numberFormatter()(12345.678);
// "12,345.678" (en-US)
Globalize.locale("de");
// "12.345,678"
Смысловой уровень: число остается числом, но его визуальное представление зависит от контекста локали.
Валюта добавляет второй слой семантики — экономическую категорию.
Globalize.currencyFormatter("USD")(1000);
// "$1,000.00"
Globalize.locale("ja");
Globalize.currencyFormatter("JPY")(1000);
// "¥1,000"
Семантическая разметка включает:
Дата в семантической модели — это не строка, а временная точка с контекстом представления.
Globalize.dateFormatter({ datetime: "medium" })(new Date());
Семантика включает:
Одним из ключевых элементов является система сообщений, где строка становится структурированным выражением с переменными и правилами интерпретации.
Globalize.messageFormatter("welcome")({
name: "Alex"
});
Шаблон:
Hello, {name}!
Здесь {name} — не просто подстановка, а семантический
слот.
Семантическая разметка сообщений позволяет учитывать тип переменной:
Одна из наиболее сложных областей — plural rules. В разных языках множественность работает по-разному.
Globalize.messageFormatter("items")({
count: 5
});
Пример шаблона:
{count, plural,
one {# item}
other {# items}
}
Семантика:
count — числовая сущность# — представление значения в контексте формыВ разных локалях:
CLDR определяет набор правил, которые интерпретируют значения в зависимости от языка.
Русский язык:
Семантика здесь выражается не в строке, а в категории числа.
Даты в Globalize включают несколько уровней интерпретации:
Globalize.relativeTimeFormatter("day")(1);
// "in 1 day"
Семантика:
Каждый формат — это отдельная семантическая конфигурация.
Форматирование валют включает:
Globalize.currencyFormatter("EUR")(2500);
// "2,500.00 €"
Семантический уровень отделяет:
Каждый форматер Globalize можно рассматривать как функцию преобразования семантического значения:
семантическое значение → локализационная функция → строка представления
Типы форматеров:
Сложные сообщения часто комбинируют несколько типов данных:
Globalize.messageFormatter("invoice")({
amount: 1234.56,
currency: "USD",
date: new Date()
});
Шаблон:
Invoice of {amount, number, currency} issued on {date, date, medium}
Семантика:
Перед применением семантической разметки данные приводятся к нормализованному виду:
Это обеспечивает корректную работу CLDR-правил.
Нарушения семантической модели приводят к ошибкам локализации:
Пример ошибки:
Globalize.currencyFormatter("USD")("1000"); // некорректный тип
CLDR обеспечивает:
Globalize выступает как интерпретатор этих данных, превращая их в прикладную семантическую систему.
Семантическая разметка строится в несколько уровней:
Базовый уровень данных
Семантический уровень
Локализационный уровень
Представление
Система сообщений объединяет все типы данных в единый механизм интерпретации, где строка становится декларацией, а не результатом.
{name} has {count, plural, one {1 message} other {# messages}}
Здесь:
{name} — строковая сущность{count} — числовая семантикаplural — правило выбора формыИспользование Globalize позволяет интерфейсам сохранять стабильную структуру независимо от языка:
Это достигается за счет строгой семантической модели данных и правил их интерпретации.