仕組み
Lingo.dev CLIは、複雑なローカライゼーション処理ワークフローをエレガントなコマンドラインインターフェースの背後にカプセル化します。
npx lingo.dev@latest runを実行すると、CLIは標準のi18n.json設定ファイルを読み込み、以下の5つのステップを実行します。
1. コンテンツの検出
Lingo.dev CLIは、プロジェクトを信頼できる情報源として扱います。バケット設定に基づいて、翻訳のソースファイルとターゲットファイルをプロジェクト内で再帰的にスキャンし、処理のためにメモリに読み込みます。
検出フェーズでは以下を考慮します:
locales/[locale].jsonのようなインクルードパターン- スキップしたいファイルの除外パターン
- 異なるファイルタイプ用の複数のバケット設定
2. データのクリーニング
すべてのコンテンツが翻訳を必要とするわけではありません。本番アプリケーションには、数値、ブール値、日付、UUID、コードスニペットなど、通常は言語間で変更されないものが含まれています。
Lingo.dev CLIは以下を賢くフィルタリングします:
42や3.14のような数値- ブール値(
true/false) - ISO形式の日付とタイムスタンプ
- UUIDおよび類似の識別子
- コードブロックと技術的なスニペット
このフィルタリングにより、翻訳可能なコンテンツのみに焦点を当てることで、LLM推論コストを削減し、処理速度を向上させます。
3. 差分の計算
変更されていないコンテンツは再翻訳すべきではありません。Lingo.dev CLIは、以下を行う高度なバージョン管理システムを実装しています:
- SHA-256ハッシュを使用してコンテンツのフィンガープリントを作成
i18n.lockに保存された以前の状態と現在のコンテンツを比較- 新規、変更、削除された翻訳キーを識別
- 差分のみを翻訳エンジンに送信
この増分アプローチにより、実行ごとにコンテンツライブラリ全体ではなく、新規または変更されたものに対してのみ料金を支払うことになります。
4. ローカライゼーション
ローカライゼーションは、不安定なインターネット接続やLLMプロバイダーの障害があっても信頼できるものでなければなりません。このステップで、Lingo.dev CLIは差分を取得し、設定された翻訳バックエンドに送信します。
CLIは以下を実装しています:
- ネットワーク障害に対する指数バックオフ再試行戦略
- 自動エラー回復と部分的な進捗保存
- 生のLLM API(OpenAI、Anthropic)とLingo.dev Engineの両方をサポート
- 複数のターゲット言語の並行処理
各翻訳リクエストには、プロジェクト全体で一貫性と品質を確保するためのコンテキスト情報が含まれています。
5. コンテンツの注入
クリーンでレビュー可能な変更セットを維持するため、Lingo.dev CLIはソースコンテンツが存在する正確な位置に翻訳を注入します。このアプローチは以下を実現します:
- ファイル構造とフォーマットの保持
- 不要なgitコンフリクトの回避
- 最小限で焦点を絞った差分の作成
- 既存のPrettier設定がある場合はそれを尊重
その結果、手作業で作成されたかのようなローカライズファイルが生成され、コードレビューとデプロイの準備が整います。
完全なワークフロー
これら5つのステップは通常、2種類の変更を生成します:
- ローカライゼーションファイル — 新規および変更された翻訳で更新
- i18n.lockファイル — 状態追跡のためのコンテンツフィンガープリントで更新
両方ともリポジトリにコミットする必要があります。手動またはCI/CD統合を通じて自動的に行うことができます。
このアーキテクチャにより、Lingo.dev CLIは、数個の文字列を翻訳する単一の開発者から、数十の言語にわたって数百万語を管理するチームまで、効率的にスケールすることが保証されます。
次のステップ
Lingo.dev CLIの内部動作を理解したので、次のことができます:
- コミュニティに参加する:Discord — Lingo.dev CLIを使用している他の開発者とつながり、フィードバックを共有し、ローカライゼーションの課題についてサポートを受けることができます。
- プロジェクトに貢献する:Open issues — Lingo.dev CLIはオープンソースであり、貢献を歓迎しています。オープンイシューを閲覧し、機能を提案し、またはプルリクエストを送信して、すべての人のためにツールを改善するのを手伝ってください。
さあ、始めましょう!最初のプロジェクトを設定するには、npx lingo.dev@latest init を実行してください。