Документация

Проверка Глобализации

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

Это Глобализация Проверка в модуле Quality Control обеспечивает готовность международного проекта к работе. Она выполняется при задачах QA и в pull-запросах и анализирует только то, что затронули изменения:

  1. Каталоги. Строки, добавленные или изменённые изменением, на всех языках.
  2. Код. Строки, добавленные изменением, для текста и форматирования, зависящих от конкретного языка или культуры.
  3. Страницы. Когда проект указывает, как запустить свое приложение, его страницы отображаются с использованием псевдоперевода.

Мастер включает эту проверку по умолчанию после объединения pull request. Её настройки находятся в Quality Control → Глобализация; в рабочей области Настройки показывает, включена ли она.

Что блокируется по умолчанию

Изменение возвращается на доработку, если в нём не хватает или повреждены строки, либо если добавленный код помещает читаемый пользователем текст прямо в код или собирает предложение из частей. Все остальные найденные проблемы отображаются как замечания и ничего не блокируют, пока вы сами не решите их заблокировать. Замечания по форматированию, сортировке и верстке остаются в отчёте, пока проект сам не столкнётся с ними в своём коде.

Выберите, что блокировать в разделе Quality Control → Глобализация: коды каталогов, Что в коде приводит к возврату изменения, и Проблемы со страницами, вызывающие возврат изменения на доработку. Проверить исходный код и Отобразить страницы отключить этапы проверки кода и страниц.

Коды каталогов

КодЗначениеБлокируется по умолчанию
missingУ строки нет переводаДа
invalid_syntaxПеревод не распознаётся, например, нарушен формат ICUДа
placeholder_mismatchПлейсхолдеры отличаются от исходныхДа
plural_categoriesОтсутствует нужная форма множественного числа для данного языкаДа
staleИсходный текст изменился после перевода строкиНет

Глоссарий, правила длины и запрещённых терминов выдают собственные коды, если в файле конфигурации заданы соответствующие параметры.

Коды кодов

КодЧто обнаруживаетсяБлокируется по умолчанию
hardcoded_textТекст, который читают люди, помещённый в код вместо каталога: текст JSX и шаблонов, видимые атрибуты, такие как placeholder, title, alt и aria-label, всплывающие подсказки и уведомленияДа
concatenated_textПредложение, собранное из частей: перевод, соединённый с текстом или значением с помощью +, литерала шаблона или соседних элементовДа
locale_numberЧисло отформатировано без учёта локали пользователя, например toFixed в коде интерфейса или toLocaleString() без указания локалиНет
locale_dateДата или время отформатированы без учёта локали пользователя или с фиксированным шаблоном, таким как MM/dd/yyyyНет
hardcoded_currencyСимвол валюты или код рядом с суммойНет
ordinal_sortТекст отсортирован или сравнен по коду символов, или localeCompare без учёта локалиНет
case_mappingtoUpperCase() или toLowerCase() для текста без учёта локалиНет
physical_directionЛевый и правый отступы в CSS и утилитарных классах в проекте с языком, пишущимся справа налевоНет
postal_code_formatПочтовый индекс, проверенный по шаблону одной страныНет
phone_number_formatНомер телефона, проверенный как североамериканскийНет
latin_only_inputИмя, город, улица или адрес, ограниченные диапазоном a–zНет
joined_listСписок, который читают люди, соединённый запятой или словом «и»Нет
calendar_namesНазвания дней недели или месяцев, записанные в коде, или фиксированный первый день неделиНет
paper_sizeБуква, формат А4 и подобные параметры, жёстко заданные в настройках печати или PDFНет
fixed_unitЕдиница измерения, такая как миля, фунт или градус по Фаренгейту, указанная рядом с отображаемым числомНет
locale_parsingЧисло, введённое пользователем и считанное с помощью parseFloat или NumberНет
ime_compositionОбработка нажатия Enter в поле ввода текста без проверки, не продолжает ли пользователь вводить китайское, японское или корейское словоНет

Дизайн для любого рынка показывает исправление для каждой проблемы.

Что анализирует эта проверка

Этап проверки кода парсит JavaScript и TypeScript с JSX, а также считывает шаблоны Vue, Svelte, Astro, HTML, ERB и Handlebars, а также текст CSS. Правило применяется только в тех контекстах, где это указано: шаблон почтового индекса отображается только рядом с полем для почтового индекса, а список, соединённый запятой, — только там, где его читают люди.

  • Переведено по определению. Текст в вызовах перевода и компонентах проекта (t(), formatMessage, <Trans>, <FormattedMessage>, $t()) и функции, перечисленные в файле конфигурации.
  • Никогда текст. Защищённые термины и слова, разрешённые в файле конфигурации.
  • Оставлено намеренно. Строка с i18n-ignore комментарием и строкой после него. Укажите причину: // i18n-ignore: product name.

Необязательный world раздел .coroid/i18n.json задаёт остальные параметры:

{
  "world": {
    "exclude": ["src/legacy/**", "scripts/**"],
    "translate": ["translateText", "i18n.translate"],
    "allow": ["Storefront", "OK"]
  }
}
ПолеЗначение
excludeШаблоны файлов, которые игнорируются правилами
translateФункции перевода помимо встроенных в фреймворки
allowСлова, которые никогда не переводятся, кроме защищённых терминов
formatter, currenciesУстанавливается на этапе выбора культуры мастера; см. Культура
renderКак запустить приложение для псевдолокализованных страниц; подробнее — в разделе Псевдо-Локализация

Результаты и исправления

Каждый результат сохраняется в протоколе выполнения проверки и отображается в разделе задачи Обнаруженные проблемыРезультаты каталогизируются по каталогу, ключу и языку, находки в коде — по файлу, строке и найденному тексту, результаты страниц — по странице, элементу и тексту. Находка считается устранённой, если при последней проверке того же элемента её больше нет.

Перевести текст оформления заказаЗадача
Обнаружены проблемы
  • Открытьui · checkout.total · fr: missingГлобализация · Не переведено
  • В процессе исправленияsrc/pricing.tsx:7 · “Простая тарифная сетка”Глобализация · Текст, прописанный непосредственно в коде
  • Открыть/{locale}/ · p#promo · “Бесплатная доставка на все заказы” · runtime_text (de-DE, ar-SA)Глобализация · Текст, не взятый из каталога
  • В процессе исправленияui · cart.items · ja: placeholder_mismatchГлобализация · Плейсхолдеры отличаются от исходного текста
  • Исправленоui · cart.count · ar: plural_categoriesГлобализация · Для данного языка отсутствуют формы множественного числа

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

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

Если проверка блокирует задачу, агент разработчика получает каждую блокирующую находку, например src/pricing.tsx:7 hardcoded_text: “Simple pricing”, вместе с инструкцией по её устранению. Для исправления переводов для задачи запускается сессия перевода; Никогда не редактируются вручную каталоги других языков. Текст переносится в исходный каталог, составные предложения переписываются в одно сообщение с плейсхолдерами, а правила кода применяются к собственным изменениям перед передачей задачи дальше.

Вклады из любых источников

Проверка обеспечивает единый стандарт для всех изменений, независимо от автора:

  • Coroid's agents В рамках проекта с поддержкой интернационализации в каждой задаче указываются исходный каталог, функция перевода, одно сообщение на один предложение, форматтер проекта, логическое отображение для языков с письмом справа налево и нормы рынков из Culture.
  • Pull-запросы от людей и других инструментов проходят проверку через Coroid Check с теми же Результатами и аннотациями. Включите Проводите рецензирование каждого PR чтобы запустить его на каждом pull request.
  • Изменения, влитые без прохождения проверки выявляются после слияния. Переведите строки, влитые вне Coroid считывает результаты проверки, выполненной на pull request. При обнаружении отсутствующих или устаревших строк он создает задачу на перевод. Если проверка выявила блокирующие код Проверки, также создается задача под названием Обеспечьте интернационализацию влитого кода в pull request, указывая места для поиска. На каждое слияние приходится не более одной задачи каждого типа.

Существующий код никогда не блокируется: Готовность к работе в глобальном масштабе перечисляет их и создает задачи на исправление, которые вы можете запустить по собственному выбору.

Запустите его самостоятельно

Движок представляет собой инструмент командной строки coroid-i18n, версия которого указана в вашем файле конфигурации:

coroid-i18n check                       # catalogues
coroid-i18n source --changed main       # the code a branch adds since main
coroid-i18n check --source --changed main

source считывает код, не обращаясь к каталогам, поэтому он работает даже тогда, когда они еще не настроены. Без --changed или --diff он считывает весь репозиторий. Обе команды завершаются с кодом возврата 1 при обнаружении ошибок; добавьте --format json для получения отчета в машиночитаемом формате.