mcpField
I
i18n-LE

i18n-LE

ローカル
letools.dev開発ツール11 日前に更新

i18n-LE について

i18n-LE は翻訳カタログをソースロケールと照合し、キー、プレースホルダー、構造、空または未翻訳の値を検査します。翻訳文字列自体は返しません。ローカライズを確認する開発者向けで、i18next、next-intl、VS Code bundles、Flutter ARB に応じて解析します。

主な機能

  1. 01カタログをソースロケールと照合
  2. 02キーの不足と過剰を検出
  3. 03プレースホルダー名と形式を確認
  4. 04重複キーと構造の不一致を検出
  5. 05対応カタログライブラリを識別

活用シーン

  1. 01リリース前にロケールを確認
  2. 02機械翻訳後のプレースホルダーを点検
  3. 03翻訳者のカタログ変更を監査

MCP 対応

MCP サーバーは `check_catalogues` を公開し、カタログ内容とライブラリ名を受け取って監査結果を返します。ファイルへのアクセスやネットワーク要求は行いません。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"nolindnaidoo-i18n-le": {
"command": "npx",
"args": [
"-y",
"i18n-le-mcp"
]
}
}
}
起動コマンドnpx -y i18n-le-mcp

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmi18n-le-mcp1.1.0

ツール

1

掲載時のツール一覧 · 3 週間前に更新

パラメーター型必須説明
filesarrayはい監査する翻訳カタログ。JSON 形式で、ネスト形式またはフラット形式に対応します。
sourcestringいいえ契約となるカタログを指定します。パスまたは言語タグを指定できます。指定がない場合、英語の候補がちょうど 1 つ存在しなければ、推測せずに監査を拒否します。
libraryenumはいこれらの翻訳カタログを生成した i18n ライブラリを指定します。プレースホルダー構文、複数形モデル、メタデータに該当するキーを判定します。i18next | next-intl | vscode-l10n | flutter-arb
maxResultsintegerいいえ返される指摘数の上限(デフォルトは 500)。meta.truncated は省略された結果があるかどうかを示します。
keysAreSourcebooleanいいえキー自体が英語の文字列です。VS Code の bundle.l10n.json のような形式です。

詳細

i18n-LE ロゴ

i18n-LE:完成したように見えるだけのロケール

キーを1回押すだけで、翻訳カタログをソースロケールと照合して監査
i18next、next-intl、VS Code バンドル、Flutter ARB — 翻訳済み文字列ではなく、キーとトークンを対象にします

VS Code Marketplace からインストール Open VSX のダウンロード数 npm 上の i18n-le-mcp npm 上の i18n-le crates.io 上の i18n-le LE Tools


VS Code の i18n-LE

役に立ちましたか? 星や評価を付けると、ほかの開発者にも見つけてもらいやすくなります — ★ GitHub · ★ Open VSX · ★ Marketplace

できること

スペイン語版を先週リリースしたのに、メトリクス画面ではそれ以来すべてのユーザーに {{periodo}} と表示されています。カタログにはすべてのキーがあり、解析も通っていました。機械翻訳でプレースホルダー名まで翻訳されて戻ってきたため、コンパイルは完全に成功し、文字列がそのまま表示されてしまったのです。

カタログを開いて i18n-LE: Audit Catalogues を実行すると、そのカタログが属するセットをソースロケールと照合して監査します。ロケールで不足しているキーや多すぎるキー、翻訳で欠落または改名されたプレースホルダー、別のライブラリの規約に由来する構文、空のままの値、重複定義されたキー、あるロケールではオブジェクトで別のロケールでは文字列になっているパスを検出します。レポートはエディターの横に表示されます。エクスプローラーから任意のフォルダーを対象に実行することもできます。VS Code と、Cursor や VSCodium などの VS Code ベースのエディターで動作します(Open VSX からインストール可能)。

  • リリース前 — このロケールはリリース可能でしょうか。それとも、そう見えるだけでしょうか?
  • 機械翻訳の後 — {{timeframe}} が {{periodo}} になって戻ってきても、トークン名から検出します
  • 翻訳者のプルリクエストをレビューするとき — 翻訳を読まずに、形が変わったキーを確認できます

レポートに翻訳済み文字列が含まれることはありません。 キー、プレースホルダートークン、数、構造だけを示します。未翻訳の文字列は、表示することなく、ソースとバイト単位で同一であることによって証明されます。内容を書き換えることはありません。

インストール

場所得られるものインストール
VS Codeエディター内で、キー操作ひとつで監査できますMarketplace
Cursor, VSCodium, Windsurf同じ拡張機能Open VSX
ターミナルまたは CI のステップ終了コード付きで、同じ監査を実行できますcargo install i18n-le · crates.io
Node 経由のターミナルRust 版とバイト単位で完全に一致する、同じコマンドラインnpx i18n-le · npm
Node 経由の任意の MCP エージェントstdio 経由の check_cataloguesnpx i18n-le-mcp · npm

まず使用しているライブラリを特定します

{name} は next-intl ではプレースホルダーですが、i18next ではリテラルテキストです。{{ name }} は i18next の変数ですが、単語を囲む ICU のリテラル波括弧でもあります。バイト列をいくら調べても判別できないため、カタログを読み込む前にライブラリを特定し、プレースホルダーの文法、複数形のモデル、メタデータとして扱うキーを判定結果から決定します。

5 種類の根拠のうち、2 つが一致すれば特定できます。根拠は、マニフェストの依存関係(package.json、pubspec.yaml)、設定ファイル、ディレクトリ構成、カタログ自体の構文、ソース内の呼び出し箇所です。@key メタデータと並んだ ARB ファイルの @@locale だけで特定できる場合もあります。どれも一致しない場合や、2 つのライブラリが見つかった場合は、どちらかを選ぶのではなく、見つかった内容を示して処理を拒否します。特定を省略するには i18n-le.library を設定してください。

ライブラリプレースホルダー複数形構成
i18next{{name}}、$t(key) によるネストkey_one / key_other の接尾辞locales/<locale>.json、locales/<locale>/<namespace>.json
next-intlICU {name}、{count, plural, …}メッセージ内messages/<locale>.json
vscode-l10n{0}なしl10n/bundle.l10n.<locale>.json、package.nls.<locale>.json
flutter-arb@key メタデータ付きの ICUメッセージ内<prefix>_<locale>.arb

VS Code 拡張機能の package.nls.json はルートにあり、翻訳は別の場所にあります。この分割はひとまとまりとして読み取られます。ソースファイルを読むのはライブラリの特定に限られ、問題の検出には使用しません。

検出される内容

種類重大度内容
missing-keyerrorソースにはあるが、ターゲットにない
extra-keyerrorターゲットにはあるが、ソースにない
placeholder-count-mismatcherrorプレースホルダーが削除または追加されている
placeholder-name-mismatcherror数は同じでも名前が異なる — {{timeframe}} が {{periodo}} になっている
placeholder-style-mismatcherrorソースに実際のプレースホルダーがある箇所で、このライブラリが読み取らない形式で記述されている
convention-mismatcherrorローダーがそのまま表示する、別の規約の構文 — ICU、Fluent、printf、${…}、$t()
duplicate-key-within-fileerrorキーが重複して定義されている。すべてのローダーが最後の定義を保持する
structure-mismatcherrorあるロケールではオブジェクト、別のロケールでは文字列になっている — flatten-and-compare テストでは見逃される問題
empty-valuewarning空、または空白のみ
untranslatedinfoソースとバイト単位で同一

契約となるのはカタログ 1 つだけであり、すべてのカタログをまとめたものではありません。まとめてしまうと、ある翻訳者の誤字が、ほかのすべての翻訳者にとっての missing key になってしまいます。基準となるのは、1 つの英語カタログ、または i18n-le.source で指定されたカタログです。複数形のカテゴリは基底キーに集約されるため、ポーランド語の正当な _few が余分なキーになることはありません。複数形カテゴリがすべて揃っているかどうかは、意図的にチェックしません。

AI エージェントから使用する

同じエンジンはMCPサーバーとしても動作するため、エージェントに25個のカタログを渡して自力で差分を確認させる代わりに、直接呼び出せます。

エディター方法
VS Code 1.101+インストールは不要です。拡張機能がエージェントモードにcheck_cataloguesを登録します
Claude Codeclaude mcp add i18n-le -- npx -y i18n-le-mcp
Cursor、Windsurf、その他すべてnpx i18n-le-mcpを指定します

Claude Codeのエージェントがi18n-le MCPサーバーを呼び出す様子

check_catalogues(library, files, source?, keysAreSource?, maxResults?)

このツールはカタログの内容とライブラリ名を受け取ります。プロジェクトを参照できないため、ライブラリを特定できず、推測もしません。エディターに表示されるものと同じレポートをデータとして返し、デフォルトでは最大500件の検出結果を返します。上限に達した場合はmeta.truncatedで示します。ファイルの読み取りやネットワークリクエストは行いません。npmではi18n-le-mcpとして、MCP レジストリではio.github.nolindnaidoo/i18n-leとして公開されています。Rust CLIのサーバーとまったく同じ結果を返します。1つのコーパスを両方で実行し、差分テストでは生成した何千ものカタログセットを両方に渡して比較します。壊れたカタログも対象で、その場合は両方がパーサー独自のメッセージと位置を報告し、すべての回答を照合します。

手動で設定する — MCP 設定ファイルを持つ任意のホスト
{
  "mcpServers": {
    "i18n-le": {
      "command": "npx",
      "args": ["-y", "i18n-le-mcp"]
    }
  }
}

または、npm install -g i18n-le-mcpで一度インストールし、i18n-le-mcpを指定します。環境変数、APIキー、独自の設定は必要ありません。動作を確認するには、次を実行します。

echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | npx -y i18n-le-mcp

CLI

同じ監査をターミナルまたはCIステップから実行できます。Rust CLIはcrate/にあり、拡張機能とcrate/fixtures/のコーパスを共有するため、2つがカタログを異なる方法で読み取ることはありません。同じコマンドラインツールは、RustがないNode環境向けにnpmでもi18n-leとして提供されており、CIでは3つのオペレーティングシステム上でcrate版とバイト単位で一致することを確認しています。

ターミナル上のi18n-le

npm(i18n-le)またはcrates.io(i18n-le)からインストールできます。どちらをインストールしても、同じi18n-leコマンドが使えます。

npm上のi18n-le crates.io上のi18n-le

npm install -g i18n-le   # or run it once: npx i18n-le
cargo install i18n-le
i18n-le locales/                       # the set in that directory; JSON on stdout when piped
i18n-le --system vscode-l10n l10n/     # name the library, skip identification
i18n-le --fail-on untranslated locales/
i18n-le mcp                            # the same audit over MCP on stdio

終了コードがAPIです — 0は問題なし、1は検出結果あり、2は質問の形式が正しくありません(ライブラリが特定されていない、2つ特定されている、または単一のソースがない)。カタログが1つも見つからない場合は0です。問題にできるものがないためです。

コマンド

コマンド説明
i18n-LE: Audit Cataloguesアクティブなカタログが属するセット、またはExplorerで選択したフォルダーを監査します
i18n-LE: Open Settingsi18n-LEの設定を開きます
i18n-LE: Help & Troubleshooting組み込みドキュメント

デフォルトでは、どのコマンドにもキーは割り当てられていません。エディターのキーボードショートカットで、任意のコマンドにキーを割り当ててください。

設定

設定デフォルト説明
i18n-le.libraryautoカタログを作成したライブラリです。auto はプロジェクトからライブラリを判定します
i18n-le.source""ほかのすべてのカタログが比較対象とするカタログです。ファイル名または言語タグを指定します。空の場合は、唯一の英語カタログを使用します
i18n-le.keysAreSourcefalseキーが英語の文字列です。VS Code の bundle.l10n.json のような形式で、通常はレイアウトに基づいて決まります
i18n-le.openResultsSideBySidetrue現在のエディターの横にレポートを開きます
i18n-le.copyToClipboardEnabledfalseレポートをクリップボードにもコピーします
i18n-le.notificationsLevelsilentall = すべての通知、important = 警告とエラー、silent = エラーのみ
i18n-le.statusBar.enabledtrueステータスバー項目を表示します
i18n-le.telemetryEnabledfalseローカルのみのイベントログです(プライバシーを参照)

対応言語

英語以外に12言語に対応しています。

ドイツ語 · スペイン語 · フランス語 · インドネシア語 · イタリア語 · 日本語 · 韓国語 · ポルトガル語(ブラジル) · ロシア語 · ウクライナ語 · ベトナム語 · 中国語(簡体字)

両方の部分に対応しています。マニフェスト(コマンドのタイトル、設定名と説明)と、拡張機能の実行中に表示されるすべての内容(通知、ステータスバー、レポートの見出し)です。拒否理由はエンジンの英語で、CLI と同一です。

プライバシーとセキュリティ

  • ネットワークアクセスはありません。 拡張機能がデータを外部に送信することはありません。telemetryEnabled 設定は、確認できるローカルの出力チャンネル(i18n-LE)にイベントを書き込むだけです。
  • 翻訳された値がレポート、通知、MCP 境界に渡ることはありません。 キーは意図的な例外です。レイアウト上、キーが英語の文になる場合は、その英語が表示されます。
  • MCP サーバーでも同じ方針を徹底しています。 コンテンツを引数として受け取り、データを返します。ファイルシステムへのアクセス、ネットワーク呼び出し、テレメトリはありません。翻訳が標準出力に出力された場合、check:mcp-bundle がビルドを失敗させます。
  • エラー通知では、ホームディレクトリと認証情報のような形式の文字列を伏せます。
  • 評価の案内は最大2回までです。 拡張機能を3回正常に使用すると、評価していただけるかどうかを一度だけ尋ねます。後でを選択するか、案内を閉じた場合は、20回目にもう一度だけ尋ねます。再度尋ねないを選ぶと、案内は終了します。notificationsLevel を自分で important または silent に設定すると、案内は無効になります。回数は VS Code の拡張機能ストレージに保存され、外部に送信されることはありません。評価するを選ぶと、インストール元の一覧(VS Code Marketplace または Open VSX)がブラウザーで開きます。

ドキュメント

内容場所
ツールが出力できる内容 — チェック、識別、拒否、プライバシー境界crate/SPEC.md
拡張機能の構築と構成 — アーキテクチャ、不変条件、ツールチェーン、リリースAGENTS.md
CLI の構築と構成crate/AGENTS.md
変更内容CHANGELOG.md · crate/CHANGELOG.md
ツールのページと、ほかの15件letools.dev/tools/i18n-le

パフォーマンス

入力サイズ検出数時間速度スキャン速度
i18next、25ロケール2.83 MB48,00092.53 ms518,733/秒30.6 MB/s
next-intl ICU、2ロケール3.59 MB20,00047.75 ms418,877/秒75.2 MB/s
VS Code バンドル、12ロケール0.91 MB2,00419.3 ms103,839/秒46.9 MB/s

Apple M5 Pro、24 GB RAM、Node 24.3.0 で、ウォームアップ後に7回実行した中央値です。入力はチェックインされているのではなく、scripts/benchmark.ts によって生成されるため、上記のサイズは実測値そのものです。bun run benchmark で再現できます。

これらの値はマシン固有であり、CI では保証されません。ビルドを制限するベンチマークが示すのは、ランナーがどれだけビジーだったかにすぎません。

テスト

指標カバレッジ
ステートメント88.08%
分岐80.20%
関数93.33%
行90.59%

18 個のファイルにまたがる 266 件のテストケースに加え、 実際の VS Code 拡張機能ホストで実行する統合テストスイートと、ビルド済みの .vsix をクリーンなプロファイルにインストールするエンドツーエンドテストがあります。

実行結果 — coverage/coverage-summary.json と coverage/test-results.json — から scripts/coverage-readme.js で生成しています。このセクションに差異があると CI は失敗します。bun run test:coverage で再現でき、テストケース数には vitest が出力する値を使用しています。

LE ファミリーのその他のツール

あらゆるモデルの作業を支援する、単一目的のツール 16 個です。それぞれに Rust CLI と MCP サーバーが付属しています。詳細は letools.dev をご覧ください。

取り出す

  • String-LE — コードベース内のすべての文字列を抽出し、人が読めるようにします
  • Numbers-LE — コードベース内のすべてのハードコードされた数値を抽出し、人が確認できるようにします
  • Units-LE — 単位付きのすべての数量を正規化して抽出し、曖昧なものは名前を挙げて拒否します
  • Dates-LE — すべての日付とタイムスタンプを抽出し、それぞれが解決される正確な時点を示します
  • IDs-LE — すべての UUID、ULID、NanoID、ObjectId、Snowflake を抽出し、内部の時刻をデコードします
  • IPs-LE — すべての IP アドレス、CIDR ブロック、MAC アドレスを抽出し、正規化してスコープ別に分類します
  • URLs-LE — コードベース内のすべての URL を、プロトコルと正確な位置とともに抽出します
  • Paths-LE — コードベース内のすべてのファイルパスを抽出し、現在も何かを指しているかどうかを示します
  • Colors-LE — コードベース内のすべての色を抽出し、パレットに含まれていない色を示します

確認する

  • Regex-LE — コードベース内のすべての正規表現を見つけ、壊滅的なバックトラッキングを引き起こす可能性があるものを報告します
  • Versions-LE — リポジトリ内のマニフェスト間で、同じ依存関係の制約に違いがある箇所を見つけます
  • i18n-LE — プロジェクトが使用する i18n ライブラリを特定し、そのライブラリのルールに基づいてカタログを監査します
  • Scrape-LE — スクレイパーを書く前にページをスクレイピングできるか確認し、判断できない場合はその旨を示します

保護する

  • Secrets-LE — コードベース内のハードコードされた認証情報を見つけ、レポートに出力することはありません
  • EnvSync-LE — ディレクトリツリー内の dotenv ファイルを比較し、どのファイルにどのキーが不足しているかを示します
  • Unicode-LE — 意味を隠す Unicode 文字(双方向制御文字、不可視文字、ホモグリフ、混在スクリプト)を見つけます

それぞれ独立して動作し、共有クレートも公開されたコアもありません。2 つのツールが 同じ結果を出すのは、同じ答えが 2 度正しかったからです。

連絡先 — nolindnaidoo.com · GitHub · LinkedIn

nolindnaidoo によるその他のプロジェクト

Rust — pixelcoords と pixelactions はひとつのループを構成します。pixelcoords が 場所 を答え、pixelactions がそこで 操作 します。それぞれ独自のツールと独自の役割を持ち、LE ファミリーには属しません。

ライセンス

MIT © nolindnaidoo

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。