Интернационализация
Оригинальное название: i18n
Коротко
Подготовка программы или сайта к работе на разных языках и в разных регионах: тексты выносят из кода, а даты, числа, валюты и направление письма форматируют по правилам локали.
Что такое «Интернационализация»
Сокращение i18n — нумероним: между первой i и последней n в слове internationalization 18 букв. Это работа разработчика, которую делают один раз: код учат не держать в себе готовых фраз и не предполагать, что дата всегда пишется как 10.10.2026. Сам перевод и подстройка под конкретную страну — уже локализация (l10n), её выполняют переводчики и редакторы, не трогая код.
Что входит в подготовку
- Все видимые строки вынесены в файлы переводов и вызываются через функцию перевода.
- Множественное число обрабатывается по правилам языка. В английском две формы (1 item, 2 items), в русском — три: 1 товар, 2 товара, 5 товаров.
- Даты, числа и валюты форматируются функциями, а не склейкой строк: в России пишут 1 234,5, в США — 1,234.5.
- Вёрстка выдерживает более длинные переводы и письмо справа налево: вместо
margin-leftиспользуют логические свойства вродеmargin-inline-start. - Язык страницы указан в атрибуте
lang, кодировка — UTF-8.
Как это выглядит в WordPress и Битриксе
WordPress построен на системе gettext: строки темы или плагина оборачивают функциями перевода с текстовым доменом, а переводы хранятся в файлах .po и скомпилированных .mo.
echo esc_html__( 'Add to cart', 'my-theme' );
printf(
esc_html( _n( '%s item', '%s items', $count, 'my-theme' ) ),
number_format_i18n( $count )
);
Функция _n() выбирает форму по числу; в русском файле перевода у этой строки будет три варианта, а правило выбора задаёт заголовок Plural-Forms. В 1С-Битрикс принцип тот же, устройство другое: фразы лежат в языковых файлах в папке lang/ru/ рядом с компонентом или модулем, а в коде их получают через класс \Bitrix\Main\Localization\Loc и его метод getMessage() с кодом фразы.
На стороне браузера
В JavaScript для форматирования есть встроенный объект Intl: new Intl.NumberFormat('ru-RU', { style: 'currency', currency: 'RUB' }) оформит сумму по российским правилам, а Intl.PluralRules подскажет нужную форму слова. Если сайт выходит на несколько языков, к интернационализации добавляются отдельные адреса для каждой версии и разметка hreflang, чтобы поисковые системы показывали посетителю нужную версию.

