Перевести

Проверяйте переводы в GitHub Actions

Перевод, который теряет {name} или пропускает ключ, приводит к сбою приложения во время выполнения, и проверка редко это обнаруживает. Этот рабочий процесс запускает kaeris check для каждого pull request и окрашивает задачу в красный цвет. Он работает офлайн и бесплатно: без API-ключа, без аккаунта.

Эту страницу перевёл KAERIS и проверил каждую строку обратным переводом. Носитель языка ещё не проверял. Оригинал на английском

Рецепт

Рабочий процесс

Сохраните его как .github/workflows/i18n-check.yml. Измените source на ваш файл базового языка и languages на локали, которые вы используете.

Конфигурация.github/workflows/i18n-check.yml
name: i18n check
on: pull_request
jobs:
  check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: kaeris-io/kaeris-action@v1
        with:
          mode: check
          source: locales/en.json
          languages: de,fr

Без Python: npx

Пакет npm kaeris запускает ту же проверку на Node 18 и новее; npx скачивает его сам, отдельной установки нет. В пакете только check: для перевода нужен пакет Python.

Конфигурация.github/workflows/i18n-check.yml (steps)
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
      - run: npx kaeris check --source locales/en.json --langs de,fr

То же самое без Action

Простые шаги с Python и pip. Затем в журнале отображается каждая находка построчно вместо таблицы, которую печатает Action.

Конфигурация.github/workflows/i18n-check.yml (steps)
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: "3.12"
      - run: pip install kaeris
      - run: kaeris check --source locales/en.json --langs de,fr --ci

Находки в точной строке pull request (необязательно)

Action также может записывать отчет SARIF; его загрузка превращает каждую находку в аннотацию в diff. Загрузка для сканирования кода бесплатна для общедоступных репозиториев; для частных требуется GitHub Advanced Security.

Конфигурация.github/workflows/i18n-check.yml
name: i18n check
on: pull_request
permissions:
  contents: read
  security-events: write
jobs:
  check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: kaeris-io/kaeris-action@v1
        with:
          mode: check
          source: locales/en.json
          languages: de,fr
          sarif-file: kaeris.sarif
      - uses: github/codeql-action/upload-sarif@v3
        if: always()
        with:
          sarif_file: kaeris.sarif

Что он выводит при реальных запусках

Вывод kaeris 0.2.35, захваченный 27 октября 2026 г. Последняя строка каждого блока — это код выхода, который видит задача CI.

Что выводит задача

Action выводит сводную таблицу для каждого языка и завершается строкой ошибки, когда что-то не так. Слева: файлы, которые в порядке. Справа: de.json с {nam} вместо {name} и отсутствующим ключом checkout.

Файлы, которые в порядкеAction step output
## KAERIS i18n — CI check

Placeholder-loss: **0** (should be 0).

| Language | Status | Missing | Placeholder issues | Translated |
|---|---|---|---|---|
| de | ✓ complete | 0 | 0 | – |
| fr | ✓ complete | 0 | 0 | – |

_Generated from `kaeris check --json` — no fabricated numbers._
step exit=0
--- GITHUB_OUTPUT (without summary body):
missing=0
placeholder-issues=0
changed=false
check-exit-code=0
translate-exit-code=0
Неправильный переводAction step output
## KAERIS i18n — CI check

Placeholder-loss: **1** (should be 0).
Missing keys remaining: **1**.

| Language | Status | Missing | Placeholder issues | Translated |
|---|---|---|---|---|
| de | ⚠ 1 missing, 1 placeholder issue | 1 | 1 | – |
| fr | ✓ complete | 0 | 0 | – |

_Generated from `kaeris check --json` — no fabricated numbers._
::error::kaeris check found incomplete/broken translations — see the job summary for the language matrix
step exit=1
--- GITHUB_OUTPUT (without summary body):
missing=1
placeholder-issues=1
changed=false
check-exit-code=1
translate-exit-code=0

Что печатает шаг с npx

Тот же проект, проверенный через npx: kaeris 0.2.37 из npm, пустой кэш npm и CI=true, как на чистом раннере. Первая строка — npm устанавливает пакет.

Файлы, которые в порядкеnpx step output
$ npx kaeris check --source locales/en.json --langs de,fr
npm warn exec The following package was not found and will be installed: [email protected]
✓ de: complete & placeholder-safe
✓ fr: complete & placeholder-safe
✓ all locales complete & placeholder-safe
exit code: 0
Неправильный переводnpx step output
$ npx kaeris check --source locales/en.json --langs de,fr
npm warn exec The following package was not found and will be installed: [email protected]
✗ de: 1 missing key(s): checkout
✗ de: 1 placeholder mismatch(es):
    greeting: missing ['{name}'], added ['{nam}']
✗ de: 2 translation fault(s):
    greeting: lost placeholder {name}
    greeting: invented placeholder {nam} (not in source)
✓ fr: complete & placeholder-safe
✗ 1 missing key, 1 placeholder mismatch, 2 translation faults
exit code: 1

Настройте его в три шага

  1. Сохраните рабочий процесс

    Создайте .github/workflows/i18n-check.yml с рабочим процессом выше, указав свои source и languages.

  2. Откройте pull request

    Отправьте ветку, которая изменяет файл локали. Задача выполняется для каждого pull request и становится красной при потере плейсхолдера или отсутствии ключа.

  3. Сделайте проверку обязательной

    В настройках репозитория добавьте задачу как обязательную проверку состояния в защите ветки. Красная задача затем блокирует слияние.

Как мы это проверили

Каждая команда на этой странице была выполнена до того, как она была здесь написана. То, что не было выполнено, также перечислено.

Стоящие внимания параметры

Вопросы

Нужен ли API-ключ или учетная запись?

Нет. kaeris check описан в своей справке как статический, локальный и не требующий API, поэтому задаче не нужен секрет. Перевод — это отдельная команда, которая требует ключ.

Какие форматы файлов он читает?

Справка по kaeris check перечисляет JSON, ARB, YAML, .strings, .xcstrings, .po, Android XML, CSV, XLIFF, .properties, .resx, Fluent и Markdown как исходные форматы (kaeris 0.2.35 и новее). Руководства по форматам

Что приводит к сбою задачи?

Код выхода kaeris check: 0 — чисто, 1 — найдена проблема, 2 — неправильное использование или файл, который он не может прочитать. Проблема, которую проверка называет красной, приводит к сбою задачи; strict также приводит к сбою устаревших ключей. Справочник по GitHub Action

Продолжайте

Другие рецепты: GitLab CI · pre-commit · Make и npm скрипты

Справочник по CLI · Справочник по проверке · Справочник по GitHub Action · Бесплатная проверка в браузере · Перевод в браузере