pre-commitで翻訳をチェックする
pre-commit を使用すると、ロケールファイルに触れるコミットは最初に kaeris check を実行し、翻訳がプレースホルダーまたはキーを失った場合に拒否されます。オフラインで無料です:APIキー不要、アカウント不要。
KAERISはこのページを翻訳し、すべての行を逆翻訳して確認しました。ネイティブスピーカーによるレビューはまだ行われていません。 英語原文
レシピ
フック
プロジェクトのルートに .pre-commit-config.yaml として保存します。ローカルフックです:pre-commitは独自の環境を構築し、PyPIから kaeris をインストールするため、他に何もインストールする必要はありません。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 の出力、2026年10月27日取得。各ボックスの最後の行は、CIジョブが認識する終了コードです。
コミットが出力するもの
左:問題のないファイルを持つコミット。右:{name} の代わりに {nam} を持ち、checkout キーが欠落している de.json を持つコミット。コミットは拒否されます。
$ 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
3つのステップで設定します
フックを追加する
上記のconfigを
.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が、上記のconfigと全く同じ状態で、新規のgitリポジトリで実行されました:
pre-commit install、その後実際のgit commitを実行。フック環境はPyPI(kaeris 0.2.35)からビルドされました。正常なファイル: コミットは成功しました。壊れたde.json: フックは終了コード1で失敗し、gitはコミットを拒否しました。ロケールファイルのないコミット: スキップされました。実行されなかったもの
pre-commit run --all-filesを呼び出すCIジョブがランナーで実行されませんでした。kaeris用の公開されたフックリポジトリがないため、レシピはローカルフックを使用します。追加するrepo: https://github.com/…行はありません。
知っておくと便利なオプション
古いキーでも失敗する
--strictは、翻訳にソースに存在しないキーがある場合にも失敗します。ブランド名をそのまま保持する
--glossary 'KAERIS,GitHub'は、いずれかの用語が欠落しているターゲットを失敗させます。同じリストはkaeris.jsonのkeepの下に置くこともできます。異なるファイルレイアウト
--outは翻訳が含まれるフォルダで、--pattern '{lang}/common.json'はファイル名です。デフォルト:kaeris translateが書き出すレイアウト。フラグなし
プロジェクトに
kaeris.jsonがある場合(kaeris initが作成します)、kaeris checkはそこからソース、言語、フォルダを取得します。
よくある質問
APIキーやアカウントは必要ですか?
いいえ。kaeris check はそのヘルプで静的、ローカル、API不要と説明されているため、ジョブにシークレットは不要です。翻訳は別のコマンドであり、キーが必要です。
チェックは何を検出しますか?
失われたまたは発明されたプレースホルダー({name}、%s、{{x}}、ICU複数形)、欠落しているキー、および存在しないロケールファイル。比較はローカルかつ静的です。チェック内容とすべてのフラグ
すべてのコミットを遅くしますか?
filesに一致するファイルをステージングするコミットのみです。最初の実行でフック環境がビルドされ、ネットワークが必要です。それ以降の実行では再利用されます。時間を計測していないため、具体的な数値はありません。
続ける
その他のレシピ: GitHub Actions · GitLab CI · Makeとnpmスクリプト
CLIリファレンス · Checkリファレンス · GitHub Actionリファレンス · ブラウザでの無料チェック · ブラウザでの翻訳