Ответ
Тестирование интернационализации (i18n — подготовка кода) и локализации (l10n — адаптация контента) гарантирует, что приложение корректно работает для пользователей по всему миру.
Основные аспекты тестирования:
-
Полнота и корректность перевода:
- Все интерфейсные строки переведены на целевой язык.
- Отсутствие "битых" или пропущенных ключей перевода (часто видно как
common.button.submit). - Перевод контекстуально верен (например, "Open" как глагол и как прилагательное).
- Проверка динамических подстановок (плейсхолдеры
{name}) — они не должны ломать грамматику.
-
Форматирование данных (культурные особенности):
- Даты:
MM/DD/YYYY(США) vsDD.MM.YYYY(Германия) vsYYYY年MM月DD日(Япония). - Время: 12-часовой vs 24-часовой формат.
- Числа и валюты:
1,000.50(США) vs1.000,50(Германия) vs1 000,50(Франция). Символ валюты ($,€,¥) и его положение. - Адреса, телефонные номера, единицы измерения.
- Даты:
-
Верстка и UI (Layout & UX):
- Длина текста: Немецкие слова часто длиннее английских. Кнопки, заголовки не должны обрезаться, не должно быть наложений.
- Направление текста:
- LTR (Left-to-Right): Английский, русский.
- RTL (Right-to-Left): Арабский, иврит. Проверяется зеркальное отображение всего интерфейса (навигация, выравнивание текста, иконки-стрелки).
- Шрифты поддерживают все необходимые символы (кириллица, иероглифы, диакритические знаки).
-
Функциональность:
- Все функции работают после смены языка без перезагрузки страницы (если это SPA).
- Поиск, сортировка и фильтрация корректно работают с локализованными данными.
- Ввод данных (например, имена, адреса) на разных языках.
Пример юнит-теста для проверки форматирования даты (JavaScript/Node.js):
const { formatDate } = require('./i18nUtils');
describe('Date Formatting i18n', () => {
test('formats date correctly for US locale', () => {
const date = new Date('2023-12-25');
const result = formatDate(date, 'en-US');
expect(result).toBe('12/25/2023'); // MM/DD/YYYY
});
test('formats date correctly for German locale', () => {
const date = new Date('2023-12-25');
const result = formatDate(date, 'de-DE');
expect(result).toBe('25.12.2023'); // DD.MM.YYYY
});
test('formats date correctly for Japanese locale', () => {
const date = new Date('2023-12-25');
const result = formatDate(date, 'ja-JP');
expect(result).toBe('2023年12月25日'); // YYYY年MM月DD日
});
});
Практический совет: Используйте pseudo-localization — метод, при котором текст заменяется на символы, имитирующие длинные строки или специальные символы (например, [### Привет мир ###]). Это помогает выявить проблемы с версткой и отсутствующие переводы на ранних этапах, даже до готовности реальных переводов.