Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Интернационализация (Internationalization, i18n) в приложениях
Интернационализация — это критичный аспект современных приложений, которые должны работать для пользователей по всему миру. За 10+ лет работы я тестировал приложения на 20+ языках и глубоко понимаю, как правильно проверять локализацию. Расскажу все, что нужно знать QA инженеру.
Определение
Интернационализация (i18n) — это процесс проектирования приложения так, чтобы оно могло поддерживать разные языки, культуры и регионы БЕЗ кода изменений.
Локализация (L10n) — это процесс адаптации приложения для КОНКРЕТНОГО языка/региона.
Разница:
- i18n — общий процесс (код должен поддерживать разные языки)
- L10n — частный процесс (конкретный перевод для конкретного языка)
Типичная структура приложения с i18n
APP CODE (одна версия для всех):
├── config.js (определяет текущий язык)
├── en.json (тексты на английском)
├── ru.json (тексты на русском)
├── de.json (тексты на немецком)
└── ar.json (тексты на арабском)
Вместо:
APP_EN (английская версия)
├── home.html (текст на английском)
├── about.html
└── ...
APP_RU (русская версия)
├── home.html (текст на русском)
├── about.html
└── ...
Что нужно локализовать
1. Текст (Strings)
Все видимые пользователю тексты:
- Кнопки: "Sign Up" → "Зарегистрироваться"
- Labels: "Email" → "Электронная почта"
- Messages: "Order confirmed" → "Заказ подтвержден"
- Error messages: "Invalid password" → "Неверный пароль"
2. Числа и валюты
В разных странах разные форматы:
Англия: 1,234.56 (запятая как separator)
Россия: 1 234,56 (точка как separator)
Австралия: 1,234.56 (запятая)
Цены:
$1,234.56 (американский доллар)
€1.234,56 (евро в Германии)
£1,234.56 (фунт в Англии)
₽1 234,56 (рубль в России)
3. Даты и время
Америка: 12/25/2024 (MM/DD/YYYY)
Европа: 25.12.2024 (DD.MM.YYYY)
Китай: 2024-12-25 (YYYY-MM-DD)
Время:
Америка: 3:45 PM (12-hour format с AM/PM)
Европа: 15:45 (24-hour format)
4. Язык и направление текста
Большинство языков слева-направо (LTR):
- Английский, русский, немецкий
Но есть языки справа-налево (RTL):
- Арабский
- Иврит
- Фарси
Для RTL нужно:
- Расположить UI элементы справа
- Текст выравнивается справа
- Стрелки смотрят в другую сторону
5. Размер текста
Разные языки занимают разный размер:
Английский: "Hi" (2 символа)
Немецкий: "Hallo" (5 символов)
Русский: "Привет" (6 символов)
Японский: "こんにちは" (5 символов, но может быть шире на экране)
Для русского нужно 20-30% больше места. Для немецкого нужно 30-50% больше места ("Willkommen" вместо "Welcome").
6. Форматирование и множественные числа
Английский:
"You have 1 message" → "You have 2 messages"
Русский:
"У вас 1 сообщение" → "У вас 2 сообщения" → "У вас 5 сообщений"
(разные окончания для 1, 2-4, 5+)
Польский:
Еще более сложные правила
Как тестировать интернационализацию
1. Переключение языка
Тест: User переключает язык → приложение переводится
Шаги:
1. Открыть приложение (English по умолчанию)
2. Нажать на флаг Russian
3. ✓ Весь текст изменился на русский
4. ✓ При перезагрузке остается русский
5. ✓ Переключение обратно на English работает
2. Полнота перевода
Тест: На каждом языке все тексты переведены
Проверка:
- [ ] Русский: все тексты переведены, нет English текстов
- [ ] Немецкий: все тексты переведены
- [ ] Китайский: все тексты переведены
- [ ] Испанский: все тексты переведены
Ошибка: На странице видно "Sign Up" вместо "Зарегистрироваться"
3. Качество перевода
Тест: Переводы имеют смысл и правильны
Примеры ПЛОХИХ переводов:
- "Payment method" → "Способ платежа" (правильно)
- "Payment method" → "Метод платежей" (странновато, но понятно)
- "Payment method" → "Платеж способ" (совсем неправильно!)
Примеры ХОРОШИХ переводов:
- "Order" → "Заказ" (правильное слово в правильном контексте)
- "Welcome" → "Добро пожаловать" (естественный, дружеский тон)
4. RTL (справа-налево) языки
Тест: Для арабского/иврита всё зеркально
Проверка для арабского:
- [ ] Текст выравнивается справа
- [ ] Кнопки в правой части
- [ ] Стрелки-навигаторы смотрят влево (←)
- [ ] Лист прокручивается справа-налево
Пример ошибки: Все приложение на арабском, но кнопка "Next" → остается слева вместо справа.
5. Форматирование дат/времени/чисел
Тест: Дата/время/числа отображаются в правильном формате
Тест 1: Числа
- Англия: 1,234.56 ✓
- Россия: 1 234,56 ✓
- Франция: 1 234,56 ✓
Тест 2: Дата
- Америка: 12/25/2024 ✓
- Европа: 25.12.2024 ✓
Тест 3: Валюта
- USD: $1,234.56 ✓
- EUR: €1.234,56 ✓
- RUB: ₽1 234,56 ✓
Ошибка: В русской версии видно "$1,234.56" вместо "₽1 234,56"
6. Размер текста и переполнение
Тест: Длинные тексты не ломают UI
Тест на немецком (текст длиннее):
- "Sign Up" → "Jetzt anmelden" (длиннее)
- Кнопка увеличила размер? ✓
- Текст не выходит за границы? ✓
- На мобильном текст не обрезается? ✓
Ошибка: На немецком текст кнопки обрезается: "Jetzt anm..."
7. Множественные формы
Тест: Правильные окончания для разных количеств
Русский:
- 1 заказ ✓
- 2 заказа ✓
- 5 заказов ✓
Ошибка:
- 2 заказ (неправильное окончание)
- 5 заказа (неправильное окончание)
8. Специальные символы и кодировка
Тест: Все символы отображаются правильно
Китайский: "欢迎" (Chinese characters) ✓
Арабский: "مرحبا" (Arabic script) ✓
Японский: "こんにちは" (Japanese hiragana) ✓
Русский: "Привет" (Cyrillic) ✓
Ошибка: Видны "????" вместо символов (кодировка UTF-8 не установлена)
Типичные ошибки при i18n
Ошибка 1: Хардкод текстов
Плохо:
button.textContent = "Sign Up"; // Hardcoded
Хорошо:
button.textContent = i18n.t('sign_up_button'); // From translation file
Когда переводят → меняют translation file, не код.
Ошибка 2: Сцепление строк
Плохо:
const message = "You have " + count + " messages";
// На русском это будет "You have 2 messages" (неправильно)
Хорошо:
const message = i18n.t('message_count', { count: 2 });
// Перевод может быть разным в зависимости от count
Ошибка 3: Забыли перевести части приложения
Ошибка: Основное меню переведено, но:
- Модальные окна на английском
- Error сообщения на английском
- System notifications на английском
Ошибка 4: Неправильная кодировка (UTF-8)
Если файлы не в UTF-8 → специальные символы отображаются неправильно:
- Русский: кириллица ломается
- Арабский: не отображается вообще
- Китайский: иероглифы становятся "?????"
Ошибка 5: Забыли про RTL языки при дизайне
Система работает на LTR, но при добавлении RTL (арабский, иврит):
- UI выглядит странно
- Нужно переделывать CSS
- Требует больше времени на фиксирование
Инструменты для i18n тестирования
1. Browser DevTools
// В console проверить текущий язык
i18n.locale // 'en'
i18n.t('welcome') // "Welcome"
// Переключить язык
i18n.setLocale('ru')
i18n.t('welcome') // "Добро пожаловать"
2. Translation management tools
- Crowdin — платформа для управления переводами
- OneSky — совместная работа переводчиков
- Lokalise — инструмент для локализации
3. Языковые паки (для браузера)
Для тестирования RTL:
# Chrome DevTools → Toggle device toolbar → Emulate language
# Выбрать arабский, иврит
4. Pseudo-localization
Для проверки, готово ли приложение к i18n:
Псевдо-перевод: Добавить префиксы/суффиксы
"Welcome" → "[!Welcome!]" (чтобы видно было где текст)
Проверка:
- Все ли тексты обернуты в i18n.t()?
- Есть ли hardcoded тексты?
- Достаточно ли места для дольших переводов?
Моя чек-листа для i18n тестирования
☐ Все языки поддерживаются без ошибок
☐ Языки правильно определяются по браузеру
☐ Переключение языка работает
☐ Выбранный язык сохраняется
☐ Нет hardcoded текстов на английском
☐ RTL языки: текст, элементы, стрелки зеркальны
☐ Дата/время/числа в правильном формате
☐ Валюты в правильном символе
☐ Множественные формы работают правильно
☐ Специальные символы отображаются (UTF-8)
☐ Длинные переводы не ломают UI
☐ Мобильная версия поддерживает i18n
☐ RTL переводы протестированы
☐ Нет забытых переводов
Реальный пример: Тестирование e-commerce на 5 языках
Проект: Интернет магазин, поддерживает английский, русский, немецкий, арабский, китайский
Что я тестировал:
- Переключение между языками (5 × 5 = 25 комбинаций)
- Весь checkout процесс на каждом языке
- Форматирование цен (разные валюты)
- Дата доставки в правильном формате
- Error сообщения при заполнении формы
- Email подтверждение на нужном языке
- RTL для арабского
Результаты: Нашел 12 багов:
- 3 забытых перевода
- 2 ошибки форматирования дат
- 2 ошибки с множественными формами
- 1 RTL проблема (стрелка не зеркальна)
- 4 проблемы с размером текста
Итог
Интернационализация — это не просто переводы. Это:
- Техническая реализация (хранение текстов в файлах, не в коде)
- Культурная адаптация (форматы дат, числ, символы)
- UI адаптация (RTL, размер текста, направление)
- Лингвистическая корректность (множественные формы, правильные слова)
Для QA инженера это означает:
- Тестировать на всех поддерживаемых языках
- Проверять не только текст, но и форматирование
- Особое внимание к RTL языкам
- Проверять длинные переводы и размер текста
- Документировать все ошибки по языкам
Правильная i18n делает приложение доступным для миллионов пользователей по всему миру.