Проверка корректности переводов

Проверка корректности переводов в программных интерфейсах интернационализации опирается на сопоставление локалей, форматных правил и семантики строковых данных. Основная сложность заключается в том, что перевод представляет собой не только замену текста, но и перестройку структуры выражений: чисел, дат, множественных форм, единиц измерения и контекстных вариантов слов.

Локализация как источник структурных расхождений

Корректность перевода определяется согласованностью с правилами целевой локали. Даже при лексически точном переводе возникают ошибки, связанные с форматированием:

  • различия в порядке компонентов даты;
  • различия в десятичном и тысячном разделении чисел;
  • различия в правилах множественного числа;
  • различия в направлении письма;
  • различия в грамматических родах и контекстных формах.

Эти аспекты требуют не только лингвистической проверки, но и структурного контроля через API интернационализации.


Сопоставление числовых форматов

Для проверки корректности числовых значений используется Intl.NumberFormat, который задаёт единый стандарт отображения чисел в зависимости от локали.

const formatter = new Intl.NumberFormat('de-DE');
formatter.format(1234567.89);

Разные локали формируют различные представления одной и той же величины. Например:

  • en-US1,234,567.89
  • de-DE1.234.567,89
  • fr-FR1 234 567,89

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

  • сохранения числового значения;
  • соответствия локальному формату;
  • отсутствия смешивания разделителей разных систем.

Ошибкой считается использование исходного форматирования в целевой локали, например американских разделителей в немецком тексте.


Контроль дат и времени

Intl.DateTimeFormat используется для унификации представления временных значений в зависимости от локали и календаря.

const dtf = new Intl.DateTimeFormat('ja-JP', {
  year: 'numeric',
  month: 'long',
  day: 'numeric'
});

Проверка корректности перевода включает:

  • соответствие порядка элементов даты;
  • использование локальных названий месяцев;
  • корректное отображение 12/24-часового формата;
  • отсутствие заимствованных шаблонов форматирования.

Различия могут быть радикальными: европейский формат DD.MM.YYYY и японский YYYY年MM月DD日 требуют полной перестройки строки.


Проверка правил множественного числа

Intl.PluralRules обеспечивает определение грамматической формы в зависимости от числа и локали.

const pr = new Intl.PluralRules('ru-RU');
pr.select(5);

Возвращаемые категории (one, few, many, other) используются для выбора корректной формы перевода.

Типовые ошибки при переводах:

  • фиксация одной формы для всех чисел;
  • игнорирование категории many в славянских языках;
  • перенос английской логики plural = singular + s.

Проверка корректности включает сопоставление числа с ожидаемой грамматической формой и наличие всех необходимых вариантов в переводческом ресурсе.


Лексическая согласованность через сортировку и сравнение

Intl.Collator используется для проверки корректности упорядочивания строк и лексической эквивалентности в рамках локали.

const collator = new Intl.Collator('tr-TR');
collator.compare('i', 'ı');

В контексте переводов это позволяет выявлять:

  • неправильную сортировку списков в интерфейсе;
  • несоответствие языковым правилам сравнения;
  • ошибки в поисковых индексах, зависящих от локали.

Особое значение имеет различие между бинарным и лингвистическим сравнением строк.


Сегментация текста и контроль границ

Intl.Segmenter используется для проверки корректности разбиения текста на слова, предложения или графемы.

const segmenter = new Intl.Segmenter('zh', { granularity: 'word' });

Проблемы, выявляемые при проверке переводов:

  • некорректное разбиение слов в языках без пробелов;
  • разрушение границ слов при вставке переводов;
  • неправильная обработка эмодзи и сложных графемных кластеров.

Сегментация используется для валидации UI-компонентов, зависящих от длины текста.


Локализация названий и категорий

Intl.DisplayNames применяется для проверки корректности перевода названий языков, стран и регионов.

const dn = new Intl.DisplayNames('ru', { type: 'region' });
dn.of('US');

Основные задачи проверки:

  • соответствие официальным локализованным названиям;
  • отсутствие транслитерации вместо перевода;
  • единообразие обозначений в разных частях интерфейса.

Ошибкой считается смешивание локализованных и англоязычных кодов в одном интерфейсе.


Контроль структуры строк и плейсхолдеров

Переводы часто содержат шаблонные строки с переменными значениями. Хотя Intl API не управляет шаблонизацией напрямую, проверка корректности включает анализ совместимости форматирования с локалью.

Типовые элементы:

  • {count}
  • {name}
  • {date}

Ошибки включают:

  • потерю плейсхолдеров при переводе;
  • изменение порядка параметров без учета синтаксиса;
  • некорректное форматирование вставленных значений.

Сопоставление осуществляется через валидацию структуры строк до и после локализации.


Нормализация строк и Unicode-согласованность

Для проверки корректности переводов применяется Unicode-нормализация:

'café'.normalize('NFC');

Проблемы, выявляемые на этом уровне:

  • различие между составными и декомпозированными символами;
  • визуально идентичные строки с разными кодовыми последовательностями;
  • ошибки сравнения строк при проверке дубликатов переводов.

В системах локализации нормализация используется перед сравнением ключей и значений.


Проверка направленности текста

Некоторые языки используют правостороннее письмо (RTL). Intl API не управляет направлением напрямую, но локаль влияет на форматирование через связанные механизмы.

Контроль включает:

  • корректное отображение чисел в RTL-контексте;
  • отсутствие инверсии символов в смешанных строках;
  • согласованность UI-структуры при смене направления письма.

Ошибки часто возникают при объединении LTR и RTL сегментов без изоляции.


Согласование локалей между компонентами системы

Корректность перевода зависит от единообразия локали во всех API:

  • Intl.NumberFormat
  • Intl.DateTimeFormat
  • Intl.PluralRules
  • Intl.Collator
  • Intl.Segmenter

Несогласованность приводит к следующим дефектам:

  • дата форматируется в одной локали, а числа — в другой;
  • сортировка списка не соответствует языку интерфейса;
  • множественные формы рассчитываются по иной локали.

Проверка включает контроль единого источника локали на уровне приложения и отсутствие смешанных конфигураций.


Проверка устойчивости к пограничным значениям

Валидация переводов включает анализ крайних случаев:

  • очень большие числа;
  • нулевые значения;
  • отрицательные значения;
  • пустые строки;
  • строки с управляющими символами.

Intl API обеспечивает корректное форматирование числовых и временных значений, но логика перевода должна учитывать семантическую интерпретацию этих значений в конкретной локали.


Согласование форматирования в пользовательских интерфейсах

Финальная проверка корректности переводов опирается на согласованность всех форматируемых элементов:

  • числовые значения;
  • даты и время;
  • грамматические формы;
  • сортировка списков;
  • сегментация текста.

Каждый элемент должен соответствовать одной локальной модели, иначе возникает системная рассинхронизация отображения данных.