Перевірка перекладів до релізу
Працює на вашій машині, не потребує ключа і нікуди нічого не надсилає. Знаходить загублені змінні, як {name}, змінені числа, відсутні ключі та порожні рядки. Через помилки завершується з кодом 1, щоб CI міг зупинити злиття; порожній рядок — лише попередження, до коду 1 він призводить тільки з --strict.
npx kaeris check --source en.json --langs de
Python не потрібен: npx запускає пакет npm на Node 18 і новіших. З Python pip install kaeris дає ту саму команду kaeris check.
{
"greeting": "Hallo!",
"delete": "50 Dateien löschen",
"save": "",
"terms": "Lies unsere <b>AGB</b>"
}
✗ de: 1 placeholder mismatch(es): greeting: missing ['{name}'], added - ✗ de: 3 translation fault(s): greeting: lost placeholder {name} delete: number 50 appears in the translation but not the source delete: number 5 from the source is missing or changed in the translation ! de: 1 warning(s): save: empty translation — the source has text ✗ 1 placeholder mismatch, 3 translation faults
Джерело: {"greeting": "Hello, {name}!", "delete": "Delete 5 files", "save": "Save changes", …}
| Прапорець | Значення |
|---|---|
--strict | Падати також на попередженнях (наприклад, на порожньому перекладі) і на зайвих ключах, яких немає у вихідному файлі. |
--pattern '{lang}/common.json' | Де лежать переклади. За замовчуванням — там, куди їх пише translate, поруч із вихідним файлом (de.json, app_de.arb, values-de/strings.xml). |
--json | Машинно-зчитуваний результат замість звіту. |
--sarif kaeris.sarif | Також записує звіт SARIF 2.1.0 для GitHub, див. нижче. |
Вихідний файл: будь-який із 13 форматів (JSON, YAML, .strings, .xcstrings, Markdown/MDX, .po, ARB, Android XML, CSV, XLIFF, .properties, .resx, Fluent). Коди виходу: 0 — усе чисто, 1 — знайдено проблеми, 2 — неправильний виклик або файл, який не вдалося прочитати.
Посібники за форматами: JSON · YAML · PO · XLIFF · ARB · .strings · .xcstrings · Fluent · .properties · .resx · CSV · Markdown · Android XML
CI recipes (in English): GitHub Actions · GitLab CI · pre-commit · Make and npm scripts
Глосарій: одне слово на термін у кожній мові
--keep залишає слово як є. Якщо термін треба перекладати, але завжди однаково, запишіть його в kaeris-glossary.json поруч із kaeris.json. translate передає узгоджені слова моделі, а check не пропускає переклад, у якому стоїть інше слово.
{"terms": [
{"term": "workspace", "pos": "noun",
"note": "the shared project area, not a desk",
"translations": {"de": "Arbeitsbereich",
"fr": "espace de travail",
"ru": "рабочее пространство"}},
{"term": "KAERIS", "keep": true}
]}
→ Glossary: 1 term(s), 1 kept as is ✗ fr: 1 translation fault(s): open: glossary: "workspace" should be "espace de travail" ! ru: 1 warning(s): leave: glossary: "workspace" should be "рабочее пространство" — not found, not even as an inflected form; check this line ✗ 1 translation fault
Джерело: {"open": "Open the workspace", "leave": "Leave the workspace"}. У французькому перекладі стоїть «bureau», у російському — «рабочей области».
Термін рахується цілим словом: Pro не знаходиться в «product». Змінена форма узгодженого слова проходить. Там, де слова змінюють форму або зливаються у складні (російська, польська, німецька та інші), промах — попередження, а не помилка: це ще може бути правильна граматика. Список слів задає допустимі варіанти. Працює на всіх тарифах, включно з безкоштовним демо.
Знахідки просто на рядку в pull request
З --sarif кожна знахідка стає приміткою на потрібному рядку мовного файлу, поруч із коментарями рецензента.
- uses: kaeris-io/kaeris-action@v1
with:
mode: check
source: locales/en.json
languages: de,fr,es
sarif-file: kaeris.sarif
- uses: github/codeql-action/upload-sarif@v3
if: always()
with:
sarif_file: kaeris.sarif
"greeting": "Hallo, {name}!",
- "delete": "5 Dateien löschen",+ "delete": "50 Dateien löschen",KAERIS i18n · delete: number 5 from the source is missing or changed in the translation "save": "Änderungen speichern"
Звіт пишеться навіть під час чистого прогону, бо upload-sarif падає, якщо файлу немає. Примітки на рядках безкоштовні в публічних репозиторіях; у приватних потрібен GitHub Advanced Security. Без нього перевірка все одно працює: завдання падає, а журнал перелічує всі знахідки.
KAERIS переклав цю сторінку та перевірив кожен рядок зворотним перекладом. Носій мови ще не переглядав її. Оригінал англійською