メインコンテンツへスキップ

champollion

完全にカスタマイズ可能な国際化フレームワークです。コマンド一つでロケールファイルを翻訳できます。一つの設定ファイルで、すべてのメソッド・モデル・言語ペアを制御できます。組み込みメソッドでは不十分な場合は、独自のメソッドを構築し、その有効性を証明し、デプロイできます。

npx champollion sync

champollion はロケールファイル、フォーマット、ターゲット言語を自動検出します。不足している翻訳を補い、完了済みのものはスキップし、すべての結果を検証し、クリーンな出力を書き出します。これが出発点です。


なぜ自分でスクリプトを書かないのか?

各キーに対して Google Translate を呼び出す簡単なループを書くことはできます。多くの開発者がそうしています — 約30行で書けます。しかし、次のような問題が生じます:

  • 変更検出がない。 英語の文字列を更新しても、翻訳は永遠に古いままです。champollion は SHA-256 ハッシュですべてのソース値を追跡し、変更があったものだけを再翻訳します。
  • バッチ処理がない。 キーごとに1回の API 呼び出しを行うと、200キー = 200回のラウンドトリップになります。champollion はインテリジェントにバッチ処理します(設定可能、デフォルトは LLM で80キー/バッチ、Google で128)。
  • キャッシュがない。 同期のたびにすべてを再翻訳します。champollion の Translation Memory は、ソーステキスト・ロケール・メソッドの組み合わせで翻訳をキャッシュします — 1つのキーを変更した後に sync を再実行しても、ファイル全体ではなくそのキーだけが翻訳されます。
  • 品質ゲートがない。 機械翻訳はハルシネーションを起こしたり、ソースをそのまま返したり、誤ったスクリプトで出力したりします。champollion はすべての翻訳を書き出す前に検証します — 誤ったスクリプト、長さの膨張、ソースのエコーを検出して拒否します。
  • フォーマット認識がない。 JSON にハードコードされていますか? champollion は JSON、TOML、YAML、Hugo Markdown(フロントマター + 本文)を自動検出で処理します。
  • メソッド制御がない。 すべてのペアに同じメソッドが使われます。champollion では、フランス語に Google Translate、日本語に LLM、クリー語にカスタムのコミュニティホスト型パイプラインを — 同じ設定ファイルで使用できます。

champollion は、そのスクリプトの本番版です。


何が違うのか

すべてのメソッドはプラグイン

翻訳メソッドは言語ペアごとに設定可能です。同じプロジェクト内で Google Translate、LLM、コーチングプロンプト、カスタム API を組み合わせて使用できます:

champollion.config.json
{
"version": 3,
"pairs": {
"en:fr": { "method": "google-translate" },
"en:ja": { "method": "llm", "model": "google/gemini-2.5-pro" },
"en:crk": { "methodPlugin": "crk-coached-v1" }
}
}

フランス語は Google Translate(高速・低コスト)。日本語はプレミアム LLM(ニュアンスを重視)。Plains Cree は文法規則・辞書・形態論的検証を備えたコーチング済みプラグイン。同じ sync コマンド。同じ品質ゲート。同じ CLI。

証明する

あなたのメソッドが英語からスペイン語へ、トルコ語からアゼルバイジャン語へ、英語からクリー語へ翻訳できると思いますか?

証明してください。 コンパニオンの eval ハーネス は、再現可能なフィンガープリント付きスコアリングで任意の翻訳メソッドをベンチマークします。リーダーボード はすべての提出を追跡します。

eval ハーネスと本番 CLI は同じプラグインインターフェースを共有しています。ハーネスで高スコアを獲得したメソッドは、そのメソッドが対象とする言語のコミュニティが同意を与えた場合に限り、本番環境で使用できます。先住民族の言語やリソースの少ない言語では、その同意が重要です。データ主権 を参照してください。

# Benchmark your method (in the eval harness repo)
cd arena
python eval/baseline_experiment.py --dataset data/edtekla-dev-v1.json --submit

# Use it locally
npx champollion sync

同じプラグイン。接続してテストするだけです。

完全なツールキット

champollion は sync だけではありません。完全な i18n パイプラインです:

コマンド機能
sync不足・古くなったキーを翻訳する(同期後の検証付き)
watchソースファイルの変更時に自動同期する
lintソースコード内のハードコードされた文字列をスキャンする
wrapハードコードされた文字列を t() 呼び出しで自動ラップする
audit以前の実行からの [EN] フォールバックマーカーをすべて一覧表示する
verify翻訳の存在と正確性を検証する(CI ゲート)
integrityプレースホルダーの破損、エンコーディングの問題、ICU 複数形の完全性を検出する
seohreflang タグ、サイトマップ、JSON-LD スキーマを生成する
statusペア設定、プラグイン、ベンチマークスコアを表示する
provenance翻訳リソースのライセンスを監査する
pluginメソッドプラグインのインストール・削除・一覧表示を行う
fontsPUA スクリプトコンバーター用のウェブフォントをダウンロードする
tmTranslation Memory キャッシュを管理する(統計、クリア、ロケール別)
xliffプロの翻訳者によるレビュー用に XLIFF 1.2 をエクスポート/インポートする

このうち4つ — lintsyncverifyaudit — は CI パイプラインを形成し、ハードコードされた文字列を検出し、翻訳し、正確性を検証し、いずれかのロケールが不完全な場合はビルドを失敗させます。


The Arena

メソッドリーダーボード はスコアボードです。すべての提出は Git コミットにフィンガープリントされ、特定のデータセットにバージョン管理され、同じハーネスでスコアリングされます。誰でも提出できます。

何を証明できますか? ハーネスは JSON を受け取ります。プラグインは JSON を受け取ります。JSON を生成できるメソッドであれば、何でもテストできます:

アプローチ
コーチング済み LLM文法規則と辞書をフロンティアモデルのプロンプトに注入する
ファインチューニング済みモデル並列テキストでオープンモデルをトレーニングする — ただし評価データは使用しない
FST ゲート付きパイプラインLLM が生成 → 有限状態トランスデューサーが形態論を検証 → リトライ
チェーンモデルモデル A が下書き → モデル B が後編集 → モデル C がスコアリング
辞書 + LLM辞書から既知の用語を強制し、残りは LLM に任せる
進化的手法候補を生成し、スコアリングし、最良のものを変異させ、繰り返す
部分翻訳サンプルを手動で翻訳し、LLM が一致することを証明し、残りを自動翻訳する

モデルをファインチューニングする。進化的アルゴリズムをデプロイする。言語試験で生徒の回答をテストする。ルックアップテーブルを構築する。3つのモデルをチェーンする。メソッドが JSON を生成する限り、ハーネスはそれをスコアリングし、フレームワークはそれを実行します。

:::danger 唯一のルール 評価データでトレーニングしないでください。 ベンチマークデータセットにさらされたメソッドは失格となります。何でもファインチューニングして構いません。ただし、テストセットは使用しないでください。 :::

これはオープンな招待です。研究者、コミュニティメンバー、学生、または単純に関心を持つ方として、リソースの少ない言語に携わっている場合は — メソッドを構築し、ハーネスを実行し、トップスコアを獲得してください。この問題はまだ解決されていません。インフラはここにあります。

→ リーダーボードを見る


次のステップ

はじめに:

セットアップのカスタマイズ:

さらに深く: