# 翻訳ファイル比較・i18n 抜けチェック

基準の言語のファイルと、ほかの言語のファイルを入れるだけで、抜けているキーや {name}・%s の食い違いを言語ごとに一覧します。翻訳者に渡す CSV を作り、返ってきた CSV から翻訳ファイルへ戻すこともできます。

- URL: https://tools.itlibra.com/ja/localization-studio
- 端末内で処理・アップロードなし
- 最終更新: 2026-10-26

## 使い方

1. 「基準の言語」の欄に、英語など基準にするファイルの内容を貼るか、「ファイルを選択」で読み込みます。
2. 「言語を追加」で翻訳ファイルを増やし、言語コード（ja・fr など）を入れます。形式は中身と拡張子から自動判定されます。
3. 「比較する」を押すと、言語ごとの進み具合（%）と、無いキー・空の訳・未翻訳の疑い・プレースホルダーなどの件数が出ます。
4. 検出一覧で該当のキーを確かめ、翻訳者には「CSV を書き出す」の表を渡します。
5. 返ってきた CSV は「CSV から翻訳ファイルへ戻す」で読み込み、言語と出力形式を選んでファイルを作ります。

## こんなときに

- リリース前に、英語にあるキーがほかの言語の翻訳ファイルで抜けていないか確かめたい
- Rails や i18next、Java の .properties、iOS の .strings、gettext の .po を言語間で突き合わせたい
- 翻訳者に CSV で渡し、戻ってきた訳を JSON などの翻訳ファイルに直したい
- 「{count}」「%d」などの変数名や個数が、訳で書き換わっていないか見つけたい
- 訳が長すぎて、ボタンや見出しのレイアウトを崩さないか当たりを付けたい

## できること

### 形式を中身で判定して読む

JSON（入れ子とフラットのキー）、YAML（Rails 型の言語のルートを含む）、Java の .properties、Apple の .strings、gettext の .po（msgctxt・複数形 msgstr\[n\] を含む）に対応します。拡張子が無くても中身から判定します。

### プレースホルダーを種類ごとに照合

{name}・{{name}}（i18next）・{0}（Java の番号付き）・%s %d %1$s %@（printf 系）と、ICU の引数名（{count, plural, …} の count）を取り出し、基準と並びが違う訳を見つけます。

### 複数形のカテゴリを言語の規則で確認

ICU の plural に、その言語で必要なカテゴリ（例: フランス語の many）が無い場合を、Intl の CLDR 規則で判定します。ICU 全体の文法検証はしません。

### 言語ごとの進み具合と件数

空でなく、基準と同じでない訳の割合を言語ごとに % で表示し、問題の種類ごとに件数を数えます。

### 翻訳者向け CSV の往復

キー・基準の文・各言語の文を 1 表にして書き出し（Excel で開ける BOM 付き UTF-8、数式の無害化つき）、返ってきた CSV から JSON・.properties・.strings を作り直します。

### ブラウザの中だけで処理

翻訳ファイルは送信されず、ブラウザ内で読んで比べます。社外に出せない文言や未公開の製品名を含むファイルにも使えます。


## 対応形式

### 読み込み

- JSON（.json）
- YAML（.yml / .yaml）
- Java .properties
- Apple .strings
- gettext .po / .pot

### 書き出し

- 翻訳者向け CSV（BOM 付き UTF-8、CRLF）
- JSON（入れ子に戻す）
- .properties
- .strings


## 対応状況

| 機能 | 対応 | 補足 |
| --- | --- | --- |
| 無いキー・余分なキーの検出 | 対応 | — |
| 空の訳・基準と同じ文（未翻訳の疑い）の検出 | 対応 | 「同じ」は未翻訳の疑いであり、確定ではありません |
| プレースホルダーの照合（{name}・{{name}}・{0}・%s・%1$s・ICU 引数名） | 対応 | — |
| ICU plural の必要なカテゴリの有無 | 一部対応 | カテゴリの有無だけを見ます。ICU 全体の文法は検証しません |
| HTML タグの数の比較 | 対応 | タグの種類や対応は見ず、数だけを比べます |
| 訳の長さの比（UI の崩れの当たり） | 一部対応 | 文字数の比の目安です。実際の表示幅は測りません |
| 翻訳の品質（意味・自然さ）の判定 | 非対応 | — |
| 機械翻訳・翻訳メモリとの連携 | 非対応 | — |
| XLIFF・Android strings.xml・ResX などの形式 | 非対応 | 対応する 5 形式以外は読めません |
| ファイルの保存・ウェブからの取得 | 非対応 | 読み込みは貼り付けかファイル選択だけです |

## 制限・注意事項

- 1 ファイルは 200 万文字・キー 2 万件まで。比較するのは基準を含めて 8 ファイルまでです。
- 「同じ文」は、文字（英字や日本語など）を 2 字以上含む文だけを対象にします。記号・数字だけの値は除外します。
- 長さの比は、基準の文が空白を除いて 4 文字以上のときだけ判定します。
- ICU の完全な検証（引用符のエスケープ、ネストの文法）はしません。
- YAML は一般的な形式を読みます。同じキーが重複する YAML は読み込みを止めます。
- 複数形の訳（gettext の msgstr\[n\]）は「キー\[n\]」として比べます。

## プライバシーと安全性

翻訳ファイルはブラウザの中だけで読み、比べます。サーバーへの送信・保存は行わず、キーや訳の中身・ファイル名が解析ログに記録されることもありません。ページを閉じると内容は消えます。

## よくある質問

### 翻訳ファイルの抜けを見つけるには？

基準の言語（英語など）のファイルと、確かめたい言語のファイルを入れて「比較する」を押します。無いキーは「無いキー」、空の訳は「空の訳」として言語ごとに一覧されます。

### JSON の入れ子のキーも比べられますか？

はい。入れ子は「a.b.c」の形のキーに直して比べます。フラットなキーの JSON や .properties とも、そのまま比べられます。

### プレースホルダーの食い違いとは何ですか？

{name} と {nom}、%s と %d のように、基準とその言語で変数の名前や並びが違うことです。画面の表示でエラーになったり、変数が表示されなかったりする原因になります。

### 翻訳者に渡して、戻った CSV からファイルを作れますか？

はい。「CSV を書き出す」で作った表を渡し、戻った CSV を「CSV から翻訳ファイルへ戻す」で読み込んで、JSON・.properties・.strings のどれかを作れます。

### 翻訳管理サービスの代わりになりますか？

いいえ。翻訳の進捗の管理、翻訳メモリ、機械翻訳は行いません。ファイルの抜けと形式の食い違いを確かめる用途に向いています。

### 翻訳の質（意味が正しいか）も分かりますか？

分かりません。見つかるのは、キーの抜け・変数の食い違い・未翻訳の疑いなど、機械的に確かめられる問題だけです。
