i18n Skills
i18n 文字列の監査とラップを行う AI コマンド
課題
コードベースには、コンポーネント、テンプレート、ビューに分散した 500 件のハードコード文字列があります。手作業でラップするには、単調な検索と置換に何日もかかります。ラップした後も、ドイツ語で崩れる分割文、アラビア語で機能しない複数形ロジック、ロケールファイルを肥大化させる孤立キーを見落とすことがあります。
解決策
2 つの AI スラッシュコマンドで、i18n ワークフロー全体に対応します。まず /i18n-review を実行してコードを変更せずに監査し、次に /i18n-wrap を実行してすべての問題を自動修正します。どちらのコマンドもフレームワークを検出し、ロケールファイルの形式を理解したうえで、コミット前に変更を検証します。
/i18n-review
分割文、壊れた複数形、ラップされていない文字列、未使用キーを検出する読み取り専用の監査です。コードを変更することはありません。
/i18n-wrap
ハードコードされた文字列を適切な翻訳関数で自動的にラップし、意味のあるキーを生成してロケールファイルを更新し、ビルドを検証します。
/i18n-review コマンド
review コマンドは、コードベースを読み取り専用で監査します。すべてのファイルをスキャンして i18n の問題を検出し、正確なファイル位置と修正案を含む優先順位付きレポートを生成します。コードが変更されることはありません。
/i18n-review src/
/i18n-review src/ --framework=next-intlチェック項目
- 分割文:連結された t() 呼び出しにより、他言語の語順が崩れていないか
- 過剰なラップ:技術的な文字列、CSS クラス、URL、列挙値が誤って t() でラップされていないか
- ラップ不足:ボタンラベル、見出し、エラーメッセージなど、表示される UI 文字列がハードコードされたままになっていないか
- 複数形の問題:適切な ICU 複数形構文の代わりに、三項演算子や === 1 の判定が使用されていないか
- 未使用キー:ロケールファイルで定義されている翻訳キーが、コードから一度も参照されていないか
- ハードコードされた書式値:日付、通貨、数値が Intl フォーマッターを使用せずに記述されていないか
/i18n-wrap コマンド
wrap コマンドは、ハードコードされた文字列をフレームワークに適した翻訳関数で自動的にラップします。使用中の i18n ライブラリを検出し、コンポーネントまたは機能ごとにまとめた意味のあるキーを生成して、ロケールファイルを更新し、ビルドが引き続き成功することを検証します。
/i18n-wrap src/components/
/i18n-wrap src/ --framework=react-i18next実行内容
- フレームワーク検出:i18n ライブラリとその翻訳関数(t、$t、$_、gettext など)を特定します
- 意味のあるキーの生成:汎用的なラベルではなく、nav.signIn や errors.notFound のように意味が分かるキーを作成します
- ロケールファイルの更新:翻訳元のロケールファイルに、適切な形式(JSON、YAML、PO など)で新しいキーを追加します
- ビルド検証:ラップ後にビルド、リント、テストの各コマンドを実行し、リグレッションを検出します
対応フレームワーク
どちらのコマンドも、プロジェクトの依存関係からフレームワークを自動検出します。--framework フラグで明示的に指定することもできます。対応する 10 種類のフレームワークと、その翻訳関数および複数形形式を以下に示します。
| フレームワーク | 翻訳関数 | 複数形形式 |
|---|---|---|
| react-i18next | t() | key_one / key_other |
| next-intl | t() | ICU {count, plural, ...} |
| vue-i18n | $t() | Pipe syntax | singular | plural |
| angular i18n | $localize | ICU {count, plural, ...} |
| svelte-i18n | $_() | ICU {count, plural, ...} |
| flutter intl | S.of(context) | Intl.plural() |
| django | gettext / _() | ngettext() |
| rails i18n | t() | count key |
| laravel | __() / @lang | trans_choice() |
| swift | NSLocalizedString | .stringsdict |
インストール
コマンドファイルを .claude/commands/ ディレクトリにコピーするだけです。依存関係も設定も必要ありません。コマンドはプレーンな Markdown ファイルであり、どの AI コーディングアシスタントでも実行できます。
mkdir -p .claude/commands
cp commands/i18n-review.md .claude/commands/
cp commands/i18n-wrap.md .claude/commands/使用例
React プロジェクト
react-i18next を使用する React アプリを監査し、ハードコードされたすべての文字列をラップします。コマンドは package.json から react-i18next を検出し、適切な t() 関数と key_one/key_other 複数形形式を使用します。
# Review a React project for i18n issues
/i18n-review src/ --framework=react-i18next
# Wrap all hardcoded strings automatically
/i18n-wrap src/components/ --framework=react-i18next
# Result: t() calls inserted, keys added to en/translation.jsonDjango プロジェクト
Django のテンプレートとビューに i18n の問題がないか監査し、文字列を gettext でラップします。コマンドは settings.py から Django を検出し、単純な文字列には _()、複数形には ngettext() を使用します。
# Review Django templates and views
/i18n-review myapp/ --framework=django
# Wrap hardcoded strings with gettext
/i18n-wrap myapp/templates/ --framework=django
# Result: _() calls inserted, .po file updatedi18n Agent を今すぐ試す
翻訳ファイルをここにドロップ
JSON, YAML, PO, XML, CSV, Markdown, Properties
またはクリックしてファイルを選択
翻訳先言語