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

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

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

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

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

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

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

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

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

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

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

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

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

Коды кода

КодЧто обнаруженоБлокируется по умолчанию
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 Check применяет один и тот же стандарт ко всем изменениям, независимо от того, кто их внес:

  • Coroid's agents При работе над международным проектом в каждой задаче указываются: исходный каталог и функция перевода, одно сообщение на предложение, форматтер проекта, логическая разметка для языков с письмом справа налево и нормы рынков от Culture.
  • Pull-запросы от людей и других инструментов проходят проверку через Coroid Check с теми же Результатами и аннотациями. Она запускается на каждом pull request после установки приложения Coroid GitHub в репозиторий, а политика проекта применяется при создании pull-запросов.
  • Изменения, влитые без прохождения проверки выявляются уже после слияния. Перевести строки, влитые вне Coroid Система считывает результат проверки, выполненной в pull request. Затем она создаёт задачу на перевод строк, которые в 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 — для формирования отчёта, пригодного для машинной обработки.