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

i18n-rosetta

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

npx i18n-rosetta sync

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


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

各キーに対してGoogle Translateを呼び出す簡単なループを書くことは可能です。多くの開発者がそうしており、約30行で済みます。しかし、以下の点で破綻します:

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

rosettaは、そのスクリプトのプロダクション版(本番環境用)です。


何が違うのか

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

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

i18n-rosetta.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で実行できます。

動作を証明する

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

それを証明してください。 付属のeval harnessは、再現性のあるフィンガープリント付きのスコアリングで、あらゆる翻訳メソッドをベンチマークします。leaderboardはすべての提出を追跡します。

eval harnessとプロダクションCLIは、同じプラグインインターフェースを共有しています。harnessで高スコアを出したメソッドは、その言語を使用するコミュニティの同意があれば、本番環境で使用できます。先住民の言語や低資源言語において、その同意は重要です。Data Sovereignty(データ主権)を参照してください。

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

# Use it locally
npx i18n-rosetta sync

同じプラグインです。組み込んでテストするだけです。

完全なツールキット

rosettaは単なる sync ではありません。完全なi18nパイプラインです:

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

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


アリーナ

Method Leaderboardはスコアボードです。すべての提出物はGitコミットにフィンガープリントされ、特定のデータセットにバージョン付けされ、同じharnessによってスコアリングされます。誰でも提出できます。

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

アプローチ
コーチング済みLLM最先端モデルのプロンプトに文法規則と辞書を注入する
ファインチューニング済みモデルパラレルテキストでオープンモデルをトレーニングする(ただし評価データは除く)
FSTゲートパイプラインLLMが生成 → 有限状態トランスデューサー(FST)が形態素を検証 → 再試行
連鎖モデルモデルAが下書き → モデルBがポストエディット → モデルCがスコアリング
辞書 + LLM辞書から既知の用語を強制し、残りをLLMに処理させる
進化的アプローチ候補を生成し、スコアリングし、最良のものを変異させ、繰り返す
部分翻訳サンプルを手動で翻訳し、LLMが一致することを証明し、残りを自動翻訳する

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

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

これは皆様への招待状です。もしあなたが低資源言語に携わっているなら(研究者、コミュニティメンバー、学生、あるいは単に関心がある人として)、メソッドを構築し、harnessを実行し、トップスコアを獲得してください。問題はまだ解決されていません。インフラはここにあります。

→ リーダーボードを見る


次のステップ

はじめに:

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

さらに詳しく: