Интернационализация

Оригинальное название: 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, чтобы поисковые системы показывали посетителю нужную версию.

Обновлено:

Все термины раздела «Frontend»

Что будем искать? Например,Продвижение