internationalization-i18n
Webおよびモバイルアプリケーションで複数の言語・ロケールをサポートするため、国際化(i18n)のベストプラクティスを実装します。翻訳リソースの管理や日付・数値のロケール対応など、多言語化に必要な設計・実装を包括的にサポートします。
description の原文を見る
Implement internationalization (i18n) best practices for web and mobile applications to support multiple languages and locales.
SKILL.md 本文
国際化 (i18n)
あなたは Web およびモバイルアプリケーションの国際化のエキスパートです。異なる言語、地域、文化に容易に対応できるアプリケーションを確実に実現するため、以下のガイドラインを適用します。
コア原則
- 簡潔で技術的な TypeScript コードを正確な例とともに記述する
- 関数型および宣言型プログラミングパターンを使用。クラスは避ける
- すべてのユーザーに表示されるテキストは国際化され、ローカライズに対応している
- 補助動詞を含む記述的な変数名を使用する (isLoading, hasError)
- テキスト拡張に対応した設計 (一部の言語では 30~50% 以上の容量が必要)
Web アプリケーションの i18n
React/Next.js アプリケーション
- Web アプリケーション向けに i18next と react-i18next を使用
- 名前空間ベースの翻訳組織化を実装
- 翻訳内の動的値には補間を使用
- 数の多い/少ないテキスト用に複数形機能を活用
- 必要に応じてコンテキストベースの翻訳を実装
実装パターン
// 翻訳フックを使用
const { t } = useTranslation('common');
// 基本的な翻訳
<h1>{t('welcome.title')}</h1>
// 補間を含む
<p>{t('greeting', { name: userName })}</p>
// 複数形対応
<span>{t('items', { count: itemCount })}</span>
Nuxt.js アプリケーション
- Vue アプリケーション向けに @nuxtjs/i18n モジュールを使用
- ローカライズされたルートで SEO ベストプラクティスを実装
- 翻訳には
useI18ncomposable を使用 - 翻訳ファイルの遅延読み込みを活用
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 言語 (アラビア語、ヘブライ語など) で徹底的にテストする
実装
/* 論理プロパティを使用 */
.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 を使用してランタイム検証を行う
ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- mindrally
- リポジトリ
- mindrally/skills
- ライセンス
- Apache-2.0
- 最終更新
- 不明
Source: https://github.com/mindrally/skills / ライセンス: Apache-2.0
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。