Как проводится тестирование интернационализации (i18n) и локализации (l10n) в веб-приложениях?

«Как проводится тестирование интернационализации (i18n) и локализации (l10n) в веб-приложениях?» — вопрос из категории Веб-тестирование, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Тестирование интернационализации (i18n — подготовка кода) и локализации (l10n — адаптация контента) гарантирует, что приложение корректно работает для пользователей по всему миру.

Основные аспекты тестирования:

  1. Полнота и корректность перевода:

    • Все интерфейсные строки переведены на целевой язык.
    • Отсутствие "битых" или пропущенных ключей перевода (часто видно как common.button.submit).
    • Перевод контекстуально верен (например, "Open" как глагол и как прилагательное).
    • Проверка динамических подстановок (плейсхолдеры {name}) — они не должны ломать грамматику.
  2. Форматирование данных (культурные особенности):

    • Даты: MM/DD/YYYY (США) vs DD.MM.YYYY (Германия) vs YYYY年MM月DD日 (Япония).
    • Время: 12-часовой vs 24-часовой формат.
    • Числа и валюты: 1,000.50 (США) vs 1.000,50 (Германия) vs 1 000,50 (Франция). Символ валюты ($, , ¥) и его положение.
    • Адреса, телефонные номера, единицы измерения.
  3. Верстка и UI (Layout & UX):

    • Длина текста: Немецкие слова часто длиннее английских. Кнопки, заголовки не должны обрезаться, не должно быть наложений.
    • Направление текста:
      • LTR (Left-to-Right): Английский, русский.
      • RTL (Right-to-Left): Арабский, иврит. Проверяется зеркальное отображение всего интерфейса (навигация, выравнивание текста, иконки-стрелки).
    • Шрифты поддерживают все необходимые символы (кириллица, иероглифы, диакритические знаки).
  4. Функциональность:

    • Все функции работают после смены языка без перезагрузки страницы (если это 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 — метод, при котором текст заменяется на символы, имитирующие длинные строки или специальные символы (например, [### Привет мир ###]). Это помогает выявить проблемы с версткой и отсутствующие переводы на ранних этапах, даже до готовности реальных переводов.