GitLab CIで翻訳をチェックする
ジョブはkaerisパッケージをインストールし、ロケールファイルに触れるマージリクエストに対してkaeris checkを実行します。プレースホルダーの欠落やキーの欠落はパイプラインを失敗させます。オフラインで無料です:APIキー不要、アカウント不要。
KAERISはこのページを翻訳し、すべての行を逆翻訳して確認しました。ネイティブスピーカーによるレビューはまだ行われていません。 英語原文
レシピ
ジョブ
.gitlab-ci.yml に追加します。--source をベース言語ファイルに、--langs を出荷するロケールに変更します。rules ブロックは、locales/ 以下を変更するマージリクエストでのみジョブを実行します。すべてのマージリクエストで実行するには、changes の行を削除してください。
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 の出力、2026年10月27日取得。各ボックスの最後の行は、CIジョブが認識する終了コードです。
ジョブが出力する内容
2つのscript行が順番に実行されます。左:問題のないファイル。右:de.json で {name} の代わりに {nam} が使われ、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
3つのステップで設定します
ジョブを追加する
.gitlab-ci.ymlにジョブを貼り付け、独自の--sourceと--langsを設定します。マージリクエストを開く
ブランチでロケールファイルを変更し、マージリクエストを開きます。ジョブが実行され、ログにすべての検出結果が表示されます。
パイプラインを必須にする
プロジェクト設定のマージリクエストの下で、パイプラインが成功しなければならないようにします。すると、赤いジョブがマージをブロックします。
どのようにチェックしたか
このページにあるすべてのコマンドは、ここに書かれる前に実行されました。実行されなかったものもリストされています。
実行された内容
解析されたYAMLから取得された両方の
script行が、クリーンなPython仮想環境で順番に実行され、GitLabジョブのように最初に失敗した行で停止します。pip install kaerisは PyPI から kaeris 0.2.35 をダウンロードしました。クリーンなファイル: 終了コード 0。壊れたde.json: 終了コード 1。実行されなかった内容
GitLabランナーもDockerイメージも使用されませんでした(上記のログは
python:3.12-slimからではなく、Python 3.14 がインストールされたWindows PCからのものです)。rulesおよびchangesブロックはYAMLとして解析されただけで、GitLabによって評価されませんでした。パッケージはPython 3.8以降を要求します。
知っておくと便利なオプション
古いキーでも失敗する
--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複数形)、欠落しているキー、および存在しないロケールファイル。比較はローカルかつ静的です。チェック内容とすべてのフラグ
結果をファイルとして保存できますか?
はい:--json は結果をJSONとして出力し、--sarif PATH はSARIFレポートを書き込みます。保持したい場合は、artifacts の下にファイルを追加します。両方のフラグは kaeris check のヘルプにあります。GitLabでアーティファクトのアップロードは実行しませんでした。
続ける
その他のレシピ:GitHub Actions · pre-commit · Makeとnpmスクリプト
CLIリファレンス · Checkリファレンス · GitHub Actionリファレンス · ブラウザでの無料チェック · ブラウザでの翻訳