Перекласти

Перевірка перекладів до релізу

Працює на вашій машині, не потребує ключа і нікуди нічого не надсилає. Знаходить загублені змінні, як {name}, змінені числа, відсутні ключі та порожні рядки. Через помилки завершується з кодом 1, щоб CI міг зупинити злиття; порожній рядок — лише попередження, до коду 1 він призводить тільки з --strict.

Запуск
npx kaeris check --source en.json --langs de

Python не потрібен: npx запускає пакет npm на Node 18 і новіших. З Python pip install kaeris дає ту саму команду kaeris check.

de.json
{
  "greeting": "Hallo!",
  "delete": "50 Dateien löschen",
  "save": "",
  "terms": "Lies unsere <b>AGB</b>"
}
Вивідкод виходу 1
✗ 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 не пропускає переклад, у якому стоїть інше слово.

kaeris-glossary.json
{"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}
]}
Вивідкод виходу 1
→ 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 кожна знахідка стає приміткою на потрібному рядку мовного файлу, поруч із коментарями рецензента.

.github/workflows/i18n-check.yml
- 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
locales/de.json · Files changed
  "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 переклав цю сторінку та перевірив кожен рядок зворотним перекладом. Носій мови ще не переглядав її. Оригінал англійською