i18n-key-difflisted
Install: claude install-skill kimny1143/claude-code-template
# i18n-key-diff — en.json ↔ ja.json キー差分検出
`en.json` と `ja.json` のペアをスキャンし、一方にしか存在しないキーを列挙する。
next-intl(`messages/` 配下)と content JSON(`content/` 配下)の両方に対応。
---
## 使い方
```
「i18nの差分を確認して」
「翻訳キーが全部揃ってるか確認して」
「en.jsonにあってja.jsonにないキーを教えて」
```
---
## 実行手順
### Step 1: 対象ファイルペアを検索
プロジェクトルートから以下のコマンドで en.json/ja.json ペアを列挙する(node_modules除外):
```bash
find . -name "en.json" -not -path "*/node_modules/*" | sort
find . -name "ja.json" -not -path "*/node_modules/*" | sort
```
同一ディレクトリに en.json と ja.json が両方存在するものをペアとして処理する。
### Step 2: キー差分を抽出
以下の Python スクリプトで各ペアのキー差分を取得する:
```python
import json, os, sys
def get_flat_keys(obj, prefix=''):
keys = set()
if isinstance(obj, dict):
for k, v in obj.items():
full = f'{prefix}.{k}' if prefix else k
if isinstance(v, dict):
keys |= get_flat_keys(v, full)
else:
keys.add(full)
return keys
def diff_pair(en_path, ja_path):
with open(en_path) as f:
en_keys = get_flat_keys(json.load(f))
with open(ja_path) as f:
ja_keys = get_flat_keys(json.load(f))
return en_keys - ja_keys, ja_keys - en_keys
# 使用例
only_en, only_ja = diff_pair('messages/en.json', 'messages/ja.json')
```
### Step 3: 結果を整理して報告
---
## 出力フォーマット
```
## i18n キー差分レポート
### messages/en.json ↔ ja.json
- EN総キー数: 1220 / JA総キー数: 1220
- **ENにあってJAにない(翻訳追加が必要)**: 3件
- `landing.products.muednote.features.newBadge`
- `onboarding.step3.title`
- `auth.errors.tokenEx