Когда просят "сделать приложение на нескольких языках", обычно представляют перевод: взять надписи и заменить на другой язык. Но человек - это не только язык, на котором он читает. У него есть целый набор привычек, по которым он узнаёт "своё": как пишется дата, где стоит запятая в числе, в каких единицах измеряется расстояние, в какой валюте цена, с какого дня начинается неделя. Переведёшь только надписи - получишь приложение, формально на его языке, но всё равно чужое.
Настоящая локализация - это совпасть с человеком по всем этим привычкам сразу. Ниже - полный список того, что на самом деле входит в "сделать мультиязычным и мультирегиональным", а не только перевод кнопок.
Текст - это не только надписи
- Перевод интерфейса. Все надписи, подсказки, письма, ошибки - очевидная часть, с которой всё начинается.
- Перевод самих данных. Статусы, категории, названия стран и регионов тоже должны читаться на языке пользователя, а не только надписи вокруг них. Половина экрана на твоём языке, а данные внутри на чужом - и ощущение "переведено наспех" никуда не девается.
- Множественное число. У языков разные правила: в английском две формы (1 item / 5 items), в славянских - три и больше (1 деталь / 2 детали / 5 деталей). Наивное "деталь(и)" выдаёт машинность сразу.
- Длина текста. Немецкая фраза бывает длиннее английской чуть ли не на треть, а другая, наоборот, короче. Вёрстка должна тянуться под текст, а не ломаться и не обрезать слова.
- Порядок сортировки. Алфавит - вещь локальная: где-то "ё" отдельная буква, где-то диакритика и буквосочетания меняют порядок. Список, отсортированный "как в базе", на другом языке выглядит как попало.
- Направление письма. Арабский и иврит пишутся справа налево - это не "ещё один перевод", а зеркальный разворот всего макета.
Числа, деньги и единицы
- Формат чисел.
1 234,56или1,234.56- какой разделитель тысяч и дробной части. Одно и то же число, записанное непривычно, читается с запинкой. - Единицы измерения. Расстояние (километры или мили), объём (литры или галлоны), вес, температура (°C или °F). Американец мыслит в милях и Фаренгейтах, европеец - в километрах и Цельсиях; показывать надо каждому его.
- Валюта - и здесь тонкость, на которой легко обжечься. Формат валюты (символ, его место, число знаков) локализуется всегда. А вот конвертацию сумм трогать нужно осторожно:
Показать цену в валюте пользователя - можно. Молча пересчитывать хранимые финансовые записи - нельзя. Счёт, выставленный в евро, остаётся в евро; конвертация допустима только по актуальному курсу и только для показа, а не подменяет исходную сумму. Перепутать "перевести для отображения" и "пересчитать данные" - дорогая ошибка: деньги должны сходиться копейка в копейку.
Время
- Форматы. Дата (
09.07.2026против07/09/2026), время (24 часа против 12 с AM/PM), первый день недели (понедельник или воскресенье - от него считаются календари и отчёты). - Часовой пояс. Момент времени хранится внутри в едином всемирном времени, а показывается каждому в его поясе и формате; точное всемирное время при этом всегда под рукой. Об этом - отдельная заметка.
- Относительное время. "2 часа назад", "вчера", "через 3 дня" - это тоже текст, и он переводится вместе с правилами множественного числа.
Как система угадывает регион
- Определение на первом визите. Браузер уже знает, на каких языках человек читает, в каком он поясе, как в его системе пишутся даты и числа. Разумно прочитать эти подсказки и предложить готовые значения, а не встречать нового пользователя анкетой из десяти настроек.
- Выбор всегда главнее. Как только человек сам поменял язык или формат, его решение запоминается и с тех пор важнее любых сигналов браузера. Подсказка - для тех, кто ещё ничего не выбрал.
- Чей это выбор. Иногда язык - личная настройка пользователя, иногда общая для всей компании или площадки. Стоит заранее решить, чья привычка главнее и что берётся по умолчанию.
- Запасной вариант. Если для какого-то текста перевода на нужный язык нет, система показывает его на запасном языке, а не пустоту или ключ-заглушку.
Инженерная дисциплина под этим
Три вещи, без которых всё выше расплывается:
- Один источник правды для переводов. Тексты живут в одном месте, а то, что грузит браузер, собирается из них автоматически. Иначе ловушка: правишь перевод в уже собранном файле, а следующая сборка его затирает - и перевода будто не было.
- Хранить эталон, форматировать на границе. Внутри - одно каноническое значение: время в едином поясе, сумма в своей валюте, величина в базовых единицах. Привычный формат наводится в самый последний момент, на экране. Тогда расчёты остаются точными, а каждый видит своё.
- Регион - это фундамент, а не заплатка. Если язык и форматы заложены как отдельные настройки с самого начала, новый язык или рынок - это добавить слой, а не переписать приложение. Приделываешь перевод потом - платишь переделкой всего, что успел завязать на один язык.
Сэкономить на локализации не выходит - можно только заплатить позже, переписывая всё, что наспех завязали на один язык.

