Ответ
Интернационализация (i18n) — это проектирование и разработка приложения, позволяющее легко адаптировать его для разных языков и регионов без изменений в коде.
Локализация (l10n) — это процесс адаптации уже интернационализированного приложения под конкретный язык, регион или культуру (переводы, форматы дат, валют).
i18n — подготовка, l10n — реализация.
Пример i18n в коде (подготовка):
// Плохо: хардкод строк
console.log("Welcome");
// Хорошо: использование ключей
console.log(i18n.t('welcome.message'));
Пример файлов локализации (l10n):
en.json:
{
"welcome.message": "Welcome"
}
ru.json:
{
"welcome.message": "Добро пожаловать"
}
Практические аспекты i18n:
- Вынос всех строк в ресурсные файлы.
- Поддержка Юникода (UTF-8).
- Учет разной длины текста при верстке.
- Абстрагирование форматов дат, чисел, валют.
Практические аспекты l10n:
- Перевод текстов и интерфейса.
- Адаптация графики и цветов.
- Настройка региональных форматов (например, дата
DD.MM.YYYYvsMM/DD/YYYY).
Ответ 18+ 🔞
Давай разберемся с этой парой терминов, а то они как близнецы-братья, которых постоянно путают, пока один из них не даст тебе по ебалу.
Вот смотри, представь, что ты строишь дом. Интернационализация (i18n) — это когда ты с самого начала делаешь фундамент и стены такими, чтобы к ним можно было потом легко прикрутить хоть немецкие, хоть японские, хоть, блядь, марсианские розетки и двери. Ты не знаешь, кто будет жить, но ты готов к любому. Это подготовка, проектирование.
А Локализация (l10n) — это когда приехали конкретные жильцы, немцы, и ты им начинаешь вкручивать евро-розетки, вешать табличку «Achtung!» на подвал и ставить унитаз с полочкой. Это уже реализация под конкретных ребят.
Короче: i18n — «я сделал так, чтобы можно было», l10n — «я сделал для немцев».
Теперь смотри, как это выглядит в коде, если делать по-человечески, а не как олух царя небесного.
Допустим, ты пишешь код и тебе надо вывести приветствие. Первый порыв — написать прямо в коде:
// Плохо, блядь! Прям как в лоб.
console.log("Добро пожаловать");
А потом приходит заказчик и говорит: «А сделай-ка нам ещё на испанский, друг мой». И ты начинаешь везде искать эти строки, копипастить, хуячить условия if (lang === 'es')... Пиздец, а не поддержка. Это путь в ад.
Вот как надо, с прицелом на будущее (это и есть i18n):
// Хорошо! Используем ключ, а не жесткую строку.
console.log(i18n.t('welcome.message'));
Видишь? Мы не пишем текст напрямую. Мы говорим системе: «Дай-ка мне перевод для ключа welcome.message». А сама система уже лезет в нужную папку с переводами.
А где эти переводы? А вот они, локализация (l10n) в чистом виде. Просто файлики:
en.json (для англичан):
{
"welcome.message": "Welcome"
}
ru.json (для наших):
{
"welcome.message": "Добро пожаловать"
}
es.json (для тех, кто говорит «о́ле»):
{
"welcome.message": "Bienvenido"
}
Красота, да? Хочешь добавить язык — просто новый файлик создал. Код вообще не трогаешь. Это и есть магия правильной подготовки.
На что ещё смотреть, чтобы не облажаться (практические аспекты i18n):
- Все строки — вон! Выноси в ресурсы абсолютно всё, что может быть прочитано человеком. Даже ту мелочь, типа «ОК» или «Сохранить». Потом охуеешь искать.
- Кодировка — UTF-8. Без вариантов. Чтобы твои «Приветы» не превращались в кракозябры «РџСЂРёРІРµС‚».
- Место — мать денег. Немецкое слово может быть в три раза длиннее русского. Верстка должна это выдерживать, а не разъезжаться, как дерьмо по волнам.
- Даты, числа, валюта. Абстрагируй их форматы сразу. Потому что американец увидит
05/07/2023и подумает, что это 5 июля, а европеец — что это 7 мая. Ёперный театр!
А что делаем при локализации (l10n):
- Переводим, сука, всё. Тексты, кнопки, ошибки, тултипы. Всё.
- Картинки и цвета. Свинья — символ удачи в Германии и чуть ли не оскорбление в мусульманских странах. Красный — опасность у нас и праздник в Китае. Думай головой.
- Форматы подгоняем. Точка или запятая в дробях? Первый день недели — понедельник или воскресенье? Валюта до суммы или после? Всё это настраивается.
Вот и вся философия. Сначала закладываешь возможность (i18n), потом наполняешь её конкретикой (l10n). Делаешь так — и жить спокойно, а не бегать потом с криками «бляяядь, опять всё переписывать!».