i18n-localization について
i18n-localizationは、アプリ開発者向けの国際化・ローカライズ実践ガイドです。実装パターンやロケールファイルの構成、RTL対応、リリース前の確認項目を扱い、ハードコード文字列と翻訳漏れの検出スクリプトも含みます。
主な機能
- 01i18nとL10nの概念解説
- 02React、Next.js、Pythonの例
- 03ロケールファイル構成の説明
- 04複数形・日付・数値形式への対応
- 05RTLレイアウトの指針
- 06翻訳チェック用スクリプト
活用シーン
- 01アプリの多言語対応を計画
- 02React、Next.js、Pythonアプリへの翻訳導入
- 03ハードコード文字列と翻訳漏れの確認
- 04RTLレイアウトとローカライズ形式のテスト
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ davila7/ claude-code-templates --skill i18n-localizationインストール後、Claude Code で/i18n-localizationを入力して読み込まれたか確認します。
同梱ファイルscripts/i18n_checker.py
詳細
i18n と ローカライゼーション
国際化 (i18n) とローカライゼーション (L10n) のベストプラクティスです。
1. 基本概念
| 用語 | 意味 |
|---|---|
| i18n | 国際化 - アプリを翻訳可能にすること |
| L10n | ローカライゼーション - 実際の翻訳 |
| Locale | 言語 + 地域 (en-US, tr-TR) |
| RTL | 右から左へ書く言語 (アラビア語、ヘブライ語) |
2. i18n を使うタイミング
| プロジェクトの種類 | i18n は必要か? |
|---|---|
| 公開 Web アプリ | ✅ はい |
| SaaS 製品 | ✅ はい |
| 社内ツール | ⚠️ 場合による |
| 単一地域向けアプリ | ⚠️ 将来を考慮 |
| 個人プロジェクト | ❌ 任意 |
3. 実装パターン
React (react-i18next)
import { useTranslation } from 'react-i18next';
function Welcome() {
const { t } = useTranslation();
return <h1>{t('welcome.title')}</h1>;
}
Next.js (next-intl)
import { useTranslations } from 'next-intl';
export default function Page() {
const t = useTranslations('Home');
return <h1>{t('title')}</h1>;
}
Python (gettext)
from gettext import gettext as _
print(_("Welcome to our app"))
4. ファイル構成
locales/
├── en/
│ ├── common.json
│ ├── auth.json
│ └── errors.json
├── tr/
│ ├── common.json
│ ├── auth.json
│ └── errors.json
└── ar/ # RTL
└── ...
5. ベストプラクティス
DO ✅
- 生のテキストではなく翻訳キーを使用する
- 翻訳を機能ごとに名前空間で分ける
- 複数形への対応をサポートする
- 日付・数値の形式をロケールごとに扱う
- 最初からRTLを想定して計画する
- 複雑な文字列には ICU メッセージ形式を使用する
DON'T ❌
- コンポーネント内に文字列をハードコードする
- 翻訳済みの文字列を連結する
- テキストの長さを想定する (ドイツ語は30%長い)
- RTL レイアウトを忘れる
- 同じファイル内で言語を混在させる
6. よくある問題
| 問題 | 解決策 |
|---|---|
| 翻訳の欠落 | デフォルト言語にフォールバックする |
| 文字列のハードコード | リンターまたはチェックスクリプトを使用する |
| 日付形式 | Intl.DateTimeFormat を使用する |
| 数値形式 | Intl.NumberFormat を使用する |
| 複数形 | ICU メッセージ形式を使用する |
7. RTL サポート
/* CSS Logical Properties */
.container {
margin-inline-start: 1rem; /* Not margin-left */
padding-inline-end: 1rem; /* Not padding-right */
}
[dir="rtl"] .icon {
transform: scaleX(-1);
}
8. チェックリスト
リリース前に確認します:
- ユーザーに表示されるすべての文字列が翻訳キーを使用している
- サポートするすべての言語のロケールファイルが存在する
- 日付・数値の書式設定に Intl API を使用している
- RTL レイアウトをテスト済み (該当する場合)
- フォールバック言語が設定されている
- コンポーネントに文字列がハードコードされていない
スクリプト
| スクリプト | 目的 | コマンド |
|---|---|---|
scripts/i18n_checker.py | ハードコードされた文字列と翻訳の欠落を検出する | python scripts/i18n_checker.py <project_path> |
コメント
Markdown 対応