Skip to main content

i18n Skills

i18n 文字列の監査とラップを行う AI コマンド

課題

コードベースには、コンポーネント、テンプレート、ビューに分散した 500 件のハードコード文字列があります。手作業でラップするには、単調な検索と置換に何日もかかります。ラップした後も、ドイツ語で崩れる分割文、アラビア語で機能しない複数形ロジック、ロケールファイルを肥大化させる孤立キーを見落とすことがあります。

手作業による i18n のラップはミスが起きやすく、開発者は分割文を見落とし、三項演算子で複数形を壊し、例外的な箇所にハードコード文字列を残してしまいます。こうしたバグは翻訳後になって初めて表面化し、その時点での修正費用は 10 倍にもなります。

解決策

2 つの AI スラッシュコマンドで、i18n ワークフロー全体に対応します。まず /i18n-review を実行してコードを変更せずに監査し、次に /i18n-wrap を実行してすべての問題を自動修正します。どちらのコマンドもフレームワークを検出し、ロケールファイルの形式を理解したうえで、コミット前に変更を検証します。

/i18n-review

分割文、壊れた複数形、ラップされていない文字列、未使用キーを検出する読み取り専用の監査です。コードを変更することはありません。

/i18n-wrap

ハードコードされた文字列を適切な翻訳関数で自動的にラップし、意味のあるキーを生成してロケールファイルを更新し、ビルドを検証します。

/i18n-review コマンド

review コマンドは、コードベースを読み取り専用で監査します。すべてのファイルをスキャンして i18n の問題を検出し、正確なファイル位置と修正案を含む優先順位付きレポートを生成します。コードが変更されることはありません。

Terminal
/i18n-review src/
/i18n-review src/ --framework=next-intl

チェック項目

  • 分割文:連結された t() 呼び出しにより、他言語の語順が崩れていないか
  • 過剰なラップ:技術的な文字列、CSS クラス、URL、列挙値が誤って t() でラップされていないか
  • ラップ不足:ボタンラベル、見出し、エラーメッセージなど、表示される UI 文字列がハードコードされたままになっていないか
  • 複数形の問題:適切な ICU 複数形構文の代わりに、三項演算子や === 1 の判定が使用されていないか
  • 未使用キー:ロケールファイルで定義されている翻訳キーが、コードから一度も参照されていないか
  • ハードコードされた書式値:日付、通貨、数値が Intl フォーマッターを使用せずに記述されていないか
review コマンドは完全に読み取り専用です。意図しない変更の心配なく、開発中でも CI/CD パイプラインでも、必要なだけ何度でも実行できます。

/i18n-wrap コマンド

wrap コマンドは、ハードコードされた文字列をフレームワークに適した翻訳関数で自動的にラップします。使用中の i18n ライブラリを検出し、コンポーネントまたは機能ごとにまとめた意味のあるキーを生成して、ロケールファイルを更新し、ビルドが引き続き成功することを検証します。

Terminal
/i18n-wrap src/components/
/i18n-wrap src/ --framework=react-i18next

実行内容

  • フレームワーク検出:i18n ライブラリとその翻訳関数(t、$t、$_、gettext など)を特定します
  • 意味のあるキーの生成:汎用的なラベルではなく、nav.signIn や errors.notFound のように意味が分かるキーを作成します
  • ロケールファイルの更新:翻訳元のロケールファイルに、適切な形式(JSON、YAML、PO など)で新しいキーを追加します
  • ビルド検証:ラップ後にビルド、リント、テストの各コマンドを実行し、リグレッションを検出します
wrap コマンドは、ビルドとテストスイートを実行してすべての変更を検証します。いずれかが失敗した場合は、自動的にロールバックします。

対応フレームワーク

どちらのコマンドも、プロジェクトの依存関係からフレームワークを自動検出します。--framework フラグで明示的に指定することもできます。対応する 10 種類のフレームワークと、その翻訳関数および複数形形式を以下に示します。

フレームワーク翻訳関数複数形形式
react-i18nextt()key_one / key_other
next-intlt()ICU {count, plural, ...}
vue-i18n$t()Pipe syntax | singular | plural
angular i18n$localizeICU {count, plural, ...}
svelte-i18n$_()ICU {count, plural, ...}
flutter intlS.of(context)Intl.plural()
djangogettext / _()ngettext()
rails i18nt()count key
laravel__() / @langtrans_choice()
swiftNSLocalizedString.stringsdict

インストール

コマンドファイルを .claude/commands/ ディレクトリにコピーするだけです。依存関係も設定も必要ありません。コマンドはプレーンな Markdown ファイルであり、どの AI コーディングアシスタントでも実行できます。

Terminal
mkdir -p .claude/commands
cp commands/i18n-review.md .claude/commands/
cp commands/i18n-wrap.md .claude/commands/
これらは標準的なスラッシュコマンドファイルです。Claude Code ですぐに動作し、カスタムコマンドに対応する他の AI コーディングアシスタント向けにも適応できます。

使用例

React プロジェクト

react-i18next を使用する React アプリを監査し、ハードコードされたすべての文字列をラップします。コマンドは package.json から react-i18next を検出し、適切な t() 関数と key_one/key_other 複数形形式を使用します。

React Project
# 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.json

Django プロジェクト

Django のテンプレートとビューに i18n の問題がないか監査し、文字列を gettext でラップします。コマンドは settings.py から Django を検出し、単純な文字列には _()、複数形には ngettext() を使用します。

Django Project
# 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 updated

i18n Agent を今すぐ試す

翻訳ファイルをここにドロップ

JSON, YAML, PO, XML, CSV, Markdown, Properties

またはクリックしてファイルを選択

翻訳先言語

登録不要すぐに見積もり

よくある質問