Перевіряйте переклади за допомогою pre-commit
За допомогою pre-commit, коміт, що торкається файлу локалі, спочатку виконує kaeris check і відхиляється, коли переклад втратив плейсхолдер або ключ. Це офлайн і безкоштовно: без API ключа, без облікового запису.
KAERIS переклав цю сторінку та перевірив кожен рядок зворотним перекладом. Носій мови ще не переглядав її. Оригінал англійською
Рецепт
Хук
Збережіть його як .pre-commit-config.yaml у корені проєкту. Це локальний хук: pre-commit створює власне середовище та встановлює kaeris з PyPI у нього, тому нічого іншого встановлювати не потрібно. files обмежує його комітами, які додають щось під locales/.
repos:
- repo: local
hooks:
- id: kaeris-check
name: kaeris check (translations)
entry: kaeris check --source locales/en.json --langs de,fr --ci
language: python
additional_dependencies: ["kaeris==0.2.35"]
files: ^locales/
pass_filenames: false
Що друкується під час реальних запусків
Вивід kaeris 0.2.35, захоплено 27 жовтня 2026 року. Остання строка кожного блоку — це код виходу, який бачить CI-завдання.
Що виводить коміт
Ліворуч: коміт з файлами, які в порядку. Праворуч: коміт з de.json, який має {nam} замість {name} та відсутній ключ checkout; коміт відхилено.
$ git commit -m "add locales" kaeris check (translations)..............................................Passed [main (root-commit) 96c8a87] add locales 4 files changed, 25 insertions(+) create mode 100644 .pre-commit-config.yaml create mode 100644 locales/de.json create mode 100644 locales/en.json create mode 100644 locales/fr.json exit code: 0
$ git commit -m "break de"
kaeris check (translations)..............................................Failed
- hook id: kaeris-check
- exit code: 1
✗ 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
Коміт, який не торкається жодного файлу локалі
Хук пропускається, тому непов'язані коміти залишаються швидкими.
$ git commit -m "readme" # nothing under locales/ is staged kaeris check (translations)..........................(no files to check)Skipped [main e82b41d] readme 1 file changed, 1 insertion(+) create mode 100644 README.md exit code: 0
Налаштуйте це за три кроки
Додайте хук
Збережіть конфігурацію вище як
.pre-commit-config.yamlта встановіть власні--sourceі--langs. Зберігайте версію та оновлюйте її під час апгрейду.Встановіть git-хук
Запустіть
pip install pre-commit, а потімpre-commit installодин раз для кожного клону.Коммітьте як зазвичай
Комміт, який додає файл до індексу в
locales/, запускає перевірку та відхиляється, якщо вона не проходить.pre-commit run --all-filesзапускає ту саму перевірку за вимогою, наприклад, у CI.
Як ми це перевіряли
Кожна команда на цій сторінці була виконана перед тим, як її тут написали. Те, що не було виконано, також перелічено.
Що спрацювало
pre-commit 4.7.0 з конфігурацією вище у новому git-репозиторії:
pre-commit install, потім реальнийgit commit. Середовище хука було зібрано з PyPI (kaeris 0.2.35). Правильні файли: комміт пройшов. Пошкодженийde.json: хук завершився з кодом виходу 1, і git відхилив комміт. Комміт без файлу локалізації: пропущено.Що не спрацювало
Завдання CI, яке викликає
pre-commit run --all-files, не було запущено на runner. Немає опублікованого репозиторію хуків для kaeris, тому рецепт використовує локальний хук; немає рядкаrepo: https://github.com/…для додавання.
Опції, які варто знати
Помилка також на застарілих ключах
--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), відсутній ключ та файл локалі, якого немає. Порівняння є локальним та статичним. Що перевіряється, з усіма прапорцями
Чи сповільнює це кожен комміт?
Тільки комміти, які додають файл, що відповідає files. Перший запуск створює середовище хука, яке потребує мережі; наступні запуски його повторно використовують. Ми не вимірювали час, тому тут немає цифр.
Продовжуйте
Інші рецепти: GitHub Action · GitLab CI · Make та npm скрипти
Довідник CLI · Довідник Check · Довідник GitHub Action · Безкоштовна перевірка в браузері · Переклад у браузері