オープンソースCLIツール

コードベースのためのエージェント型ローカライゼーション

l10nはLLMでコンテンツを翻訳し、すべてをリポジトリ内に保持し、出力をローカルで検証します。外部プラットフォームとのやり取りなしに、チームがレビューできるドラフトを生成します。

Tuistがこれを作った理由

CrowdinWeblate を試しました。コンテンツのエクスポートとインポートの間接的なワークフローがスピードを落とし、独自のバリデーションをループに組み込むことができませんでした。コードと同じワークフローが欲しかったのです:変更、テスト、レビュー、リリース。

今では翻訳はその場で生成され、ツールチェーンでチェックされ、人間のレビューは本当に必要な時だけ行われます。

仕組み

01
エージェントにコンテキストを与える

コンテンツと一緒にL10N.mdコンテキストファイルを配置します。l10nは依存関係を追跡するので、コンテキストやコンテンツが変更されると、影響を受ける翻訳だけが再生成されます。

02
モデルを選択する

エージェントセッションを調整するモデルと、正確に翻訳するモデルをそれぞれ選びます。OpenAI互換エンドポイント、Vertex AI、または自前でホストしたモデルを使用できます。

03
エージェントが自身の作業を検証する

エージェントは組み込みの構文チェックと、あなたが定義したカスタムコマンドにアクセスできます。各翻訳後にバリデーションを実行し、エラー時にはリトライするので、レビュー前に正しい出力が得られます。

Tools

Agents use tools to automate verification after every translation.

Syntax validators

Parse output to ensure it is valid before it is saved.

  • JSON
  • YAML
  • PO
  • Markdown frontmatter

Preserve checks

Guarantee critical tokens survive translation.

  • Code blocks
  • Inline code
  • URLs
  • Placeholders

Custom commands

Bring your own validators with check_cmd and check_cmds.

  • Linters
  • Compilers
  • Schema validators

Tool failures trigger retries until the output is valid.

設定はリポジトリ内に置く

L10N.md

TOMLフロントマターで翻訳ソース、ターゲット、出力パターンを定義します。

+++
[[translate]]
source = "site/src/_data/home.json"
targets = ["es", "de", "ko", "ja", "zh-Hans", "zh-Hant"]
output = "site/src/_data/i18n/{lang}/{basename}.{ext}"
+++

# Context for the translating agent...

CLIコマンド

翻訳、検証、更新が必要なものの追跡を行います。

  • l10n init 対話形式でプロジェクトをセットアップ
  • l10n translate 翻訳を生成
  • l10n status 不足または古くなった出力をレポート
  • l10n check 出力の構文を検証
  • l10n clean 古くなった翻訳出力を削除

--force ですべてを再翻訳できます。

実際のワークフローのために設計

#

コンテキスト対応ハッシュ

ソースコンテンツまたは上位のL10N.mdコンテキストが変更されると、翻訳が更新されます。

バリデーションフック

JSON、YAML、PO構文チェックに加え、オプションで外部lintコマンドも実行可能。

»

エージェントパイプライン

コーディネーターと翻訳者のモデルを分離し、バリデーションエラー時にはリトライ。

人間のレビューに対応

ドラフトを素早く生成し、必要に応じてレビューし、すべてをGitで管理。

プログレッシブ・リファインメント

翻訳は初日から完璧である必要はありません。コードと同じように、反復を通じて改善されます。

LLMによる初回ドラフトは構造的に正しいものの、ニュアンスやトーン、ドメイン固有の表現を外すことがあります。それは設計通りです。レビューサイクルの度に — プルリクエストでのコメント、コンテキストファイルの更新、用語集の修正 — 次の翻訳実行にフィードバックされます。品質は一回で完成するのではなく、繰り返しの中で収束していきます。

ドラフト

LLMがコンテキストファイルに基づき、構造的に有効な初回パスを生成します。

レビュー

チームがコードレビューと同じようにプルリクエストで問題を指摘します。

改善

更新されたコンテキストと用語集の修正が次の実行にフィードバックされ、品質の差を縮めます。

収束

各サイクルが本番品質との距離を縮めます。システムはプロダクトの声を学んでいきます。

これは製造業のカイゼン、プロの翻訳におけるポストエディティング(PEMT)、工学における逐次近似と同じ原則に従っています:十分に良いベースラインから始め、人間の判断をループに入れて体系的に改善していきます。

FAQ

従来の翻訳ツールと何が違うのですか?

従来のツールは翻訳メモリ、つまり類似度でマッチングされる過去の翻訳の静的データベースに依存しています。l10nはそれをLLMコンテキストをメモリとして置き換えます:エージェントが読み取り、学習し、チームが時間をかけて改善できるコンテキストファイルです。曖昧なマッチを検索する代わりに、エージェントはあなたのプロダクトのトーン、用語、規約を理解します。そして開発者がコンパイルやlintでコード変更を検証するように、エージェントはあなたの環境にある同じツールを使って翻訳を検証します。CIでもローカルでも実行でき、エージェントはあなたのlinter、コンパイラ、バリデーターを使って自身の出力を修正します。

自分でモデルを用意する必要がありますか?

はい。l10nはCLIツールであり、ホスティングサービスではありません。OpenAI互換エンドポイント、Vertex AI、または自前のモデルを指定します。コスト、データ、品質はあなたがコントロールします。

人間はどのように翻訳をレビューしますか?

現在、レビュアーはプルリクエストとdiffを通じて翻訳されたコンテンツを確認し、必要に応じてコンテキストファイルを更新して再翻訳を強制できます。将来的には、開発者がCodexのようなコーディングエージェントを使うのと同じように、l10nをローカルで実行することでループの一部になることを想定しています。