Это Глобализация Проверка в модуле Quality Control обеспечивает готовность международного проекта к работе. Она запускается при тестировании задач и в pull request'ах и анализирует только те элементы, которые затронуты изменением:
- Каталоги. Строки, добавленные или изменённые в ходе изменения, на всех языках.
- Код. Строки кода, добавленные изменением, для текста и форматирования, зависящих от конкретного языка или культуры.
- Страницы. Когда проект указывает способ запуска своего приложения, его страницы отображаются с использованием псевдоперевода.
Мастер включает эту проверку по умолчанию после объединения 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_mapping | toUpperCase() или 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 mainsource Он считывает код, не обращаясь к каталогам, поэтому работает даже тогда,
когда они ещё не настроены. Без --changed или --diff он считывает весь репозиторий. Обе команды завершаются с кодом возврата 1 при обнаружении ошибок; добавьте
--format json — для формирования отчёта, пригодного для машинной обработки.