翻訳

リリース前に翻訳をチェック

マシン上で実行し、キー不要かつ何も送信しません。{name} のような失われた変数、変更された数値、欠落キー、空行を検出します。エラーがあればコード1で終了するため、CIがマージを停止できます。空行は警告で、コード1になるのは --strict を付けたときだけです。

実行
npx kaeris check --source en.json --langs de

Python は不要です。npx が Node 18 以降で npm パッケージを実行します。Python なら pip install kaeris で同じ kaeris check が使えます。

de.json
{
  "greeting": "Hallo!",
  "delete": "50 Dateien löschen",
  "save": "",
  "terms": "Lies unsere <b>AGB</b>"
}
出力終了コード 1
✗ de: 1 placeholder mismatch(es):
    greeting: missing ['{name}'], added -
✗ de: 3 translation fault(s):
    greeting: lost placeholder {name}
    delete: number 50 appears in the translation but not the source
    delete: number 5 from the source is missing or changed in the translation
! de: 1 warning(s):
    save: empty translation — the source has text
✗ 1 placeholder mismatch, 3 translation faults

ソース: {"greeting": "Hello, {name}!", "delete": "Delete 5 files", "save": "Save changes", …}

フラグ意味
--strict警告(空の翻訳など)と、ソースにない余分なキーも失敗として扱います。
--pattern '{lang}/common.json'翻訳ファイルの場所。デフォルトは translate が書き出す場所(ソースの隣)で、de.json, app_de.arb, values-de/strings.xml など。
--jsonレポートの代わりに機械判読可能な結果を出力。
--sarif kaeris.sarifGitHub用のSARIF 2.1.0レポートも作成します。詳細は下記参照。

ソースファイル: 13 形式のいずれか(JSON, YAML, .strings, .xcstrings, Markdown/MDX, .po, ARB, Android XML, CSV, XLIFF, .properties, .resx, Fluent)。終了コード: 0 クリーン、1 問題あり、2 誤った使用法または読み込み不可ファイル。

形式別ガイド: JSON · YAML · PO · XLIFF · ARB · .strings · .xcstrings · Fluent · .properties · .resx · CSV · Markdown · Android XML

CI recipes (in English): GitHub Actions · GitLab CI · pre-commit · Make and npm scripts

用語集:用語ごと、言語ごとに一つの訳語

--keep は単語をそのまま残します。用語を翻訳しつつ常に同じ訳にしたい場合は、kaeris.json と同じ場所の kaeris-glossary.json に書きます。translate は決めた訳語をモデルに渡し、check は別の語を使った翻訳を失敗にします。

kaeris-glossary.json
{"terms": [
  {"term": "workspace", "pos": "noun",
   "note": "the shared project area, not a desk",
   "translations": {"de": "Arbeitsbereich",
                    "fr": "espace de travail",
                    "ru": "рабочее пространство"}},
  {"term": "KAERIS", "keep": true}
]}
出力終了コード 1
→ Glossary: 1 term(s), 1 kept as is
✗ fr: 1 translation fault(s):
    open: glossary: "workspace" should be "espace de travail"
! ru: 1 warning(s):
    leave: glossary: "workspace" should be "рабочее пространство" — not found, not even as an inflected form; check this line
✗ 1 translation fault

ソース: {"open": "Open the workspace", "leave": "Leave the workspace"}。フランス語訳は「bureau」、ロシア語訳は「рабочей области」でした。

用語は単語単位で数えます。Pro は「product」の中には見つかりません。決めた訳語の活用形は合格です。語形が変わる言語や複合語を作る言語(ロシア語、ポーランド語、ドイツ語など)では、見つからなくてもエラーではなく警告です。正しい文法である可能性があるためです。単語のリストで許容する別形を指定できます。無料デモを含むすべてのプランで使えます。

プルリクエストの該当行に検出結果を表示

--sarif を付けると、すべての検出が言語ファイルの正確な行に注釈となり、レビュワーのコメント横に表示されます。

.github/workflows/i18n-check.yml
- uses: kaeris-io/kaeris-action@v1
  with:
    mode: check
    source: locales/en.json
    languages: de,fr,es
    sarif-file: kaeris.sarif

- uses: github/codeql-action/upload-sarif@v3
  if: always()
  with:
    sarif_file: kaeris.sarif
locales/de.json · Files changed
  "greeting": "Hallo, {name}!",
- "delete": "5 Dateien löschen",+ "delete": "50 Dateien löschen",KAERIS i18n · delete: number 5 from the source is missing or changed in the translation  "save": "Änderungen speichern"

クリーン実行でもレポートは書き込まれます。これは upload-sarif がファイル欠損時に失敗するためです。行上の注釈は公開リポジトリでは無料で、プライベートはGitHub Advanced Securityが必要です。未導入でもチェックは動作し、ジョブは失敗しログにすべての検出が記録されます。

KAERISはこのページを翻訳し、すべての行を逆翻訳して確認しました。ネイティブスピーカーによるレビューはまだ行われていません。 英語原文