Перевіряйте переклади в GitLab CI
Завдання встановлює пакет kaeris та запускає kaeris check для merge request, які торкаються ваших файлів локалізації. Втрачений плейсхолдер або відсутній ключ призводить до збою конвеєра. Це офлайн і безкоштовно: без API ключа, без облікового запису.
KAERIS переклав цю сторінку та перевірив кожен рядок зворотним перекладом. Носій мови ще не переглядав її. Оригінал англійською
Рецепт
Завдання
Додайте його до .gitlab-ci.yml. Змініть --source на файл вашої базової мови та --langs на локалі, які ви постачаєте. Блок rules запускає завдання лише для merge request, які змінюють щось у locales/; видаліть рядки changes, щоб запускати його для кожного merge request.
i18n-check:
stage: test
image: python:3.12-slim
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
changes:
- locales/**/*
script:
- pip install kaeris
- kaeris check --source locales/en.json --langs de,fr --ci
Що друкується під час реальних запусків
Вивід kaeris 0.2.35, захоплено 27 жовтня 2026 року. Остання строка кожного блоку — це код виходу, який бачить CI-завдання.
Що друкує завдання
Два рядки script, виконані послідовно. Зліва: файли, які в порядку. Справа: de.json з {nam} замість {name} та відсутнім ключем checkout; завдання зупиняється з кодом виходу 1.
$ pip install kaeris Collecting kaeris Using cached kaeris-0.2.35-py3-none-any.whl.metadata (26 kB) Using cached kaeris-0.2.35-py3-none-any.whl (131 kB) Installing collected packages: kaeris Successfully installed kaeris-0.2.35 $ kaeris check --source locales/en.json --langs de,fr --ci ✓ de: complete & placeholder-safe ✓ fr: complete & placeholder-safe ✓ all locales complete & placeholder-safe Job succeeded exit code: 0
$ pip install kaeris
Requirement already satisfied: kaeris in C:\Users\Inzagi\AppData\Local\Temp\claude\C--Users-Inzagi-projects-kaeris\bfeebe69-3cfd-4f28-bbe7-e5600be082b9\scratchpad\venv-gl2\Lib\site-packages (0.2.35)
$ kaeris check --source locales/en.json --langs de,fr --ci
✗ 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
ERROR: Job failed: exit code 1
exit code: 1
Налаштуйте це за три кроки
Додайте завдання
Вставте завдання до
.gitlab-ci.ymlта встановіть власні--sourceі--langs.Відкрийте запит на злиття
Змініть файл локалі у гілці та відкрийте запит на злиття. Завдання виконається і покаже всі знайдені проблеми у своєму журналі.
Вимагайте конвеєр
У налаштуваннях проєкту в розділі запитів на злиття увімкніть, що конвеєри мають бути успішними. Червоне завдання тоді блокуватиме злиття.
Як ми це перевіряли
Кожна команда на цій сторінці була виконана перед тим, як її тут написали. Те, що не було виконано, також перелічено.
Що виконалося
Обидва рядки
script, взяті з розібраного YAML та виконані один за одним у чистому віртуальному середовищі Python, зупиняючись на першому невдалому рядку, як це робить завдання GitLab.pip install kaerisзавантажив kaeris 0.2.35 з PyPI. Чисті файли: код виходу 0. Пошкодженийde.json: код виходу 1.Що не виконалося
Не використовувався жоден засіб запуску GitLab або образ Docker (наведений вище журнал походить з ПК з Windows та Python 3.14, а не з
python:3.12-slim). Блокrulesтаchangesбув лише розібраний як YAML; GitLab його не оцінював. Пакет вимагає Python 3.8 або новішої версії.
Опції, які варто знати
Помилка також на застарілих ключах
--strictтакож призводить до помилки, коли переклад містить ключі, яких більше немає у вихідному файлі.Зберігайте назви брендів як написано
--glossary 'KAERIS,GitHub'призведе до помилки цільового файлу, який пропустив один із термінів. Той самий список може бути вkeepуkaeris.json.Інший макет файлів
--out— це папка з перекладами, а--pattern '{lang}/common.json'— їхні імена файлів. За замовчуванням: макет, який створюєkaeris translate.Жодних прапорців
За наявності файлу
kaeris.jsonу проєкті (його записуєkaeris init),kaeris checkбере вихідний файл, мови та папку з нього.
Запитання
Чи потрібен API ключ або обліковий запис?
Ні. kaeris check описано у його власній довідці як статичний, локальний і без API, тому завдання не потребує секретів. Переклад — це окрема команда, яка потребує ключа.
Що виявляє перевірка?
Втрачений або вигаданий плейсхолдер ({name}, %s, {{x}}, відмінки ICU), відсутній ключ та файл локалі, якого немає. Порівняння є локальним та статичним. Що перевіряється, з усіма прапорцями
Чи можна зберегти результат у файл?
Так: --json виводить результат як JSON, а --sarif PATH записує звіт SARIF. Додайте файл до artifacts, якщо хочете його зберегти. Обидва прапорці є в довідці kaeris check; ми не виконували завантаження артефактів у GitLab.
Продовжуйте
Інші рецепти: GitHub Actions · pre-commit · Make та npm скрипти
Довідник CLI · Довідник Check · Довідник GitHub Action · Безкоштовна перевірка в браузері · Переклад у браузері