flutter-internationalization について
Flutter アプリのローカライズを追加・保守する開発者向けのスキルです。設定、メッセージ作成、コード生成、検証を案内し、新規作業では gen-l10n を標準とします。
主な機能
- 01既存のローカライズ設定の確認
- 02Flutter gen-l10n の設定
- 03ARB メッセージとプレースホルダーの管理
- 04複数形と select メッセージへの対応
- 05ローカライズコードの生成と検証
活用シーン
- 01Flutter アプリのローカライズ設定
- 02ロケール追加や UI 文言の翻訳
- 03ARB メッセージやプレースホルダーの修正
- 04古いローカライズ import の移行
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ madteacher/ mad-agents-skills --skill flutter-internationalizationインストール後、Claude Code で/flutter-internationalizationを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/app_en.arbl10n.yamlreferences/arb-format.mdl10n-config.mdnumber-date-formats.md詳細
Flutter の国際化
Flutter のローカライズを実装する担当者として、ローカライズされたアプリをビルドし、生成し、対象ロケールで自然に表示できるようにします。
原則 0
生成されるローカライズコードは、現在の Flutter プロジェクトと SDK に適合している必要があります。古い package:flutter_gen インポートをコピーしたり、synthetic-package を有効にしたりしないでください。古い Flutter のワークフローを使用しているとプロジェクトから確認できる場合を除き、ソース生成された AppLocalizations のインポートを使用します。
選択ガイド
- 新規開発、ほとんどの移行、ARB の管理、複数形・選択メッセージ、生成される
AppLocalizations、および Material/Cupertino アプリにはgen-l10nを使用します。 - レガシーな
intl_translationは、プロジェクトがすでにIntl.message()と生成済みのmessages_all.dartを使用している場合、またはユーザーからそのワークフローを維持するよう明示的に求められた場合にのみ使用します。ジェネレーターを実行する前に、intl_translationが依存関係に含まれていることを確認します。 - マップベースのカスタムローカライズは、小規模なプロトタイプ、またはコード生成を意図的に避けている既存コードにのみ使用します。この制限について、最終回答で明記します。
- プロジェクトに既存のローカライズ設定がある場合、デフォルトを導入する前に、そのパス、クラス名、ロケール一覧、生成スタイルに従います。
ワークフロー
pubspec.yaml、l10n.yaml、既存の*.arbファイル、生成コードのインポート、MaterialApp/CupertinoAppの設定、現在の翻訳の使用状況を確認します。- 要求された変更を特定します。たとえば、l10n の初期設定、ロケールの追加、ハードコードされた UI テキストの置き換え、プレースホルダー/複数形/選択肢の追加、値の書式設定、生成の修正、古いインポート/設定の移行などです。
- 選択ガイドに従って、
gen-l10n、レガシーなintl_translation、カスタムの代替手段から選びます。既存プロジェクトに適合する最小限の変更を優先します。 - タスクに必要な参照資料のみを読みます。
- ローカライズを変更します。
- 不足している場合は、
flutter_localizationsとintl:anyを追加します。 flutter: generate: trueを設定します。l10n.yamlを作成または更新します。- 説明とプレースホルダーのメタデータを含めて、ARB ファイルを作成または更新します。
AppLocalizationsをMaterialAppまたはCupertinoAppに組み込みます。- ハードコードされた UI 文字列を、生成されたゲッターまたはメソッドに置き換えます。
- 不足している場合は、
flutter gen-l10nで生成と検証を行います。その後、通常はflutter analyzeまたは影響を受けるテストなど、関連する範囲で最小限のプロジェクトチェックを実行します。- 変更したファイル、生成される動作、実施した検証、残っているロケールや翻訳の不足を報告します。
リソースの参照先
| タスク | 参照または使用するもの | 理由 |
|---|---|---|
l10n.yaml、生成出力パス、null 許容ゲッター、遅延読み込み、未翻訳項目の追跡を設定またはデバッグする | references/l10n-config.md | 現在の gen-l10n オプションと安全なデフォルト |
| ARB メッセージ、プレースホルダー、複数形、選択肢、エスケープ、メタデータを作成または修正する | references/arb-format.md | ARB スキーマのパターンと翻訳者向けのコンテキスト規則 |
| 数値、通貨、パーセント、日付/時刻の書式設定を追加する | references/number-date-formats.md | サポートされている NumberFormat と DateFormat の値 |
| 新しい gen-l10n 設定を初期化する、またはスモークテスト用フィクスチャを実行する | assets/l10n.yaml、assets/app_en.arb | 再利用可能な最小テンプレート |
gen-l10n の仕様
新しい gen-l10n 設定に必要な、現在の最小構成は次のとおりです。
flutter:
generate: true
arb-dir: lib/l10n
template-arb-file: app_en.arb
output-localization-file: app_localizations.dart
生成されたファイルの場所に合わせたソースインポートを使用します。一般的な例は次のとおりです。
import 'l10n/app_localizations.dart';
可能であれば、生成されたリストを優先して使用します。
localizationsDelegates: AppLocalizations.localizationsDelegates,
supportedLocales: AppLocalizations.supportedLocales,
生成ファイルがカスタムの output-dir に書き込まれる場合は、そのディレクトリに合わせてインポートを更新します。ローカルプロジェクトが意図的に古い Flutter のワークフローに固定されている場合を除き、package:flutter_gen/gen_l10n/app_localizations.dart をインポートしないでください。
レガシーな Intl フォールバック
Intl.message() を維持する場合:
- 抽出/生成の前に、開発依存関係として
intl_translationが必要です。 - 生成ファイルとインポートを、既存のプロジェクトと整合させてください。
- 生成の前に抽出を実行してください。
- Windows、またはワイルドカード展開に対応していないシェルでは、ARB ファイルを明示的に列挙してください。
一般的なコマンド:
dart run intl_translation:extract_to_arb --output-dir=lib/l10n lib/main.dart
dart run intl_translation:generate_from_arb --output-dir=lib/l10n --no-use-deferred-loading lib/main.dart lib/l10n/intl_*.arb
このワークフローがまだ導入されていない場合は、gen-l10n をより安全なデフォルトとして推奨する理由を説明してください。
制約事項
- 翻訳を創作しないでください。対象言語のテキストが提供されていない場合は、ユーザーが承認したときに限り、明確なプレースホルダー翻訳を追加するか、不足している翻訳を報告してください。
- ローカライズされた文字列を連結しないでください。プレースホルダー、複数形、または選択メッセージを使用してください。
gen-l10nのプレースホルダー書式設定で対応できる場合、数値、通貨、割合、日付、時刻を手動で書式設定しないでください。synthetic-package: trueを追加しないでください。現在の Flutter では、synthetic package の生成は非推奨で利用できません。- プロジェクトが null 以外の生成 getter の動作を許容する場合に限り、
nullable-getter: falseを設定してください。それ以外の場合はプロジェクトのデフォルトを維持し、コード内で必要な null 処理を行ってください。 - 翻訳者向けの説明と例は、テンプレート ARB ファイルに残してください。
- RTL ロケールでは、テキストの方向、レイアウトの前提、反転するアイコン、ロケール固有のウィジェットを確認してください。
検証
ローカライズの変更を完了したら、必ず検証してください。
flutter gen-l10nがプロジェクトのl10n.yamlで正常に実行されること。- 生成されたインポートパスがコンパイルできること。
- 新しい ARB キーがすべてテンプレートファイルと必要なロケールファイルに存在すること。
- 翻訳された ARB 値内のプレースホルダーがテンプレートのメタデータと一致すること。
- 複数形/選択メッセージに
otherが含まれていること。 - 数値/日付のプレースホルダーで、
references/number-date-formats.mdにあるサポート対象の形式を使用していること。 - 関連する
flutter analyzeまたはテストが成功すること。成功しない場合は、阻害要因を報告してください。
スキルのメンテナンスでは、YAML フロントマター、ローカルの Markdown リンク、ARB アセットの JSON の妥当性、l10n.yaml の YAML の妥当性、リソースのルーティング、SKILL.md、参照資料、アセット間のレイヤーの一貫性も確認してください。