internationalization-i18n について
Web・モバイルアプリ開発者向けの国際化ガイダンススキルです。翻訳の構成、ロケール対応の書式、RTL レイアウト、テスト手法を扱います。
主な機能
- 01翻訳キーの整理
- 02ロケールに応じた日付と数値の書式
- 03RTL レイアウトの指針
- 04ローカライズのテスト手法
活用シーン
- 01Web アプリへの言語対応の追加
- 02React Native アプリのローカライズ
- 03ロケール別の日付と通貨の書式設定
- 04RTL レイアウトとテキスト拡張の確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mindrally/ skills --skill internationalization-i18nインストール後、Claude Code で/internationalization-i18nを入力して読み込まれたか確認します。
詳細
国際化(i18n)
Web アプリケーションとモバイルアプリケーションの国際化に精通しています。アプリケーションをさまざまな言語、地域、文化に容易に適応できるよう、以下のガイドラインを適用してください。
基本原則
- 正確な例を用いて、簡潔で技術的な TypeScript コードを記述します
- 関数型および宣言型のプログラミングパターンを使用し、クラスは避けます
- ユーザー向けのすべてのテキストを国際化し、ローカライズに対応させます
- 助動詞を含む説明的な変数名を使用します(isLoading、hasError)
- テキストの拡張を想定して設計します(言語によっては、必要なスペースが30~50%増加します)
Web アプリケーションの i18n
React/Next.js アプリケーション
- Web アプリケーションには i18next と react-i18next を使用します
- 名前空間ベースで翻訳を整理します
- 翻訳内の動的な値には補間を使用します
- 数に基づくテキストには複数形化機能を活用します
- 必要に応じて、コンテキストベースの翻訳を実装します
実装パターン
// Use translation hooks
const { t } = useTranslation('common');
// Basic translation
<h1>{t('welcome.title')}</h1>
// With interpolation
<p>{t('greeting', { name: userName })}</p>
// With pluralization
<span>{t('items', { count: itemCount })}</span>
Nuxt.js アプリケーション
- Vue アプリケーションには @nuxtjs/i18n モジュールを使用します
- ローカライズされたルートで SEO のベストプラクティスを実装します
- 翻訳には
useI18nコンポーザブルを使用します - 翻訳ファイルの遅延読み込みを活用します
React Native/Expo アプリケーション
モバイルの i18n 設定
- React Native アプリには expo-localization を使用します
- 翻訳には react-native-i18n または i18n-js を使用します
- デバイスのロケールを自動検出します
- フォールバック言語に対応します
モバイル固有の考慮事項
- RTL(右から左)レイアウトに対応します
- アクセシビリティのため、適切なテキストの拡大縮小を確保します
- デバイスのロケール変更を動的に処理します
- システム言語が異なるデバイスでテストします
翻訳ファイルの整理
ファイル構成
locales/
en/
common.json
auth.json
errors.json
es/
common.json
auth.json
errors.json
fr/
common.json
auth.json
errors.json
翻訳キーのベストプラクティス
- 説明的な階層型キーを使用します(例:
auth.login.button、errors.network.timeout) - 可能な限り、翻訳に HTML を埋め込まないようにします
- 文脈に応じた意味の明確な翻訳にします
- 翻訳者向けに翻訳の文脈を記載します
ロケールに応じた書式設定
日付と時刻
- 日付の書式設定には Intl.DateTimeFormat を使用します
- ユーザーのロケール設定を尊重します
- 日付は UTC で保存し、現地のタイムゾーンで表示します
- 複数の日付書式設定に対応します
数値と通貨
- 数値の書式設定には Intl.NumberFormat を使用します
- ユーザーの希望する書式で通貨を表示します
- ロケールごとの小数点区切りと桁区切りを処理します
- 必要に応じて、右から左への数値表示に対応します
並べ替えと比較
- ロケールに応じた文字列比較には Intl.Collator を使用します
- ロケール固有の並べ替え規則を実装します
- 発音区別符号や特殊文字を正しく処理します
RTL(右から左)への対応
レイアウトに関する考慮事項
- CSS 論理プロパティ(margin-inline-start、padding-inline-end)を使用します
- 双方向テキストに対応します
- RTL 言語向けに UI レイアウトを反転します
- RTL 言語(アラビア語、ヘブライ語など)で十分にテストします
実装
/* Use logical properties */
.element {
margin-inline-start: 1rem;
padding-inline-end: 0.5rem;
}
ベストプラクティス
開発ガイドライン
- ユーザー向けの文字列をハードコードしないでください
- すべてのテキストを翻訳ファイルに抽出します
- 複雑な翻訳には ICU メッセージ形式を使用します
- 翻訳が見つからない場合のフォールバック機構を実装します
- ページを再読み込みせずに言語を切り替えられるようにします
コンテンツに関する考慮事項
- 画像内のテキストは避け、可能であれば CSS/SVG のテキストを使用します
- テキストの拡張に対応できる柔軟なレイアウトを設計します
- アイコンだけでなく、テキストラベル付きのアイコンを使用します
- 画像や色に関する文化的な違いを考慮します
テスト要件
- 開発中に擬似ローカライズでテストします
- テキストがコンテナーからはみ出さないことを確認します
- リリース前に実際の翻訳でテストします
- ネイティブスピーカーと RTL レイアウトを確認します
- 複数のロケールで通貨と日付の書式をテストします
i18n の状態管理
ユーザー設定の保存
- 言語の状態管理には Zustand または React Context を使用します
- 言語設定を永続化します(localStorage、AsyncStorage)
- 言語設定をユーザーアカウントと同期します
- 正しいロケールでサーバーサイドレンダリングを処理します
データの取得
- 翻訳済みコンテンツのキャッシュには TanStack React Query を使用します
- 必要に応じて、言語変更時にクエリを無効化します
- API からロケール固有のコンテンツを取得します
- 翻訳の読み込み状態を適切に処理します
エラー処理
- 翻訳されたエラーメッセージを表示します
- 翻訳がない場合はデフォルト言語にフォールバックします
- 開発環境では、欠落している翻訳キーをログに記録します
- エラー表示では、RTL/LTR のテキスト方向に対応します
- ローカライズされたエラーメッセージを使用し、実行時検証には Zod を使用します
コメント
Markdown 対応