mcpField
F
flutter-internationalization

flutter-internationalization

github.com/madteacher開発110537 回インストール26 週間前に更新
リポジトリ

flutter-internationalization について

Flutter アプリのローカライズを追加・保守する開発者向けのスキルです。設定、メッセージ作成、コード生成、検証を案内し、新規作業では gen-l10n を標準とします。

主な機能

  1. 01既存のローカライズ設定の確認
  2. 02Flutter gen-l10n の設定
  3. 03ARB メッセージとプレースホルダーの管理
  4. 04複数形と select メッセージへの対応
  5. 05ローカライズコードの生成と検証

活用シーン

  1. 01Flutter アプリのローカライズ設定
  2. 02ロケール追加や UI 文言の翻訳
  3. 03ARB メッセージやプレースホルダーの修正
  4. 04古いローカライズ import の移行

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/madteacher/mad-agents-skills --skill flutter-internationalization

インストール後、Claude Code で/flutter-internationalizationを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

assets/
app_en.arb
l10n.yaml
references/
arb-format.md
l10n-config.md
number-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 が依存関係に含まれていることを確認します。
  • マップベースのカスタムローカライズは、小規模なプロトタイプ、またはコード生成を意図的に避けている既存コードにのみ使用します。この制限について、最終回答で明記します。
  • プロジェクトに既存のローカライズ設定がある場合、デフォルトを導入する前に、そのパス、クラス名、ロケール一覧、生成スタイルに従います。

ワークフロー

  1. pubspec.yaml、l10n.yaml、既存の *.arb ファイル、生成コードのインポート、MaterialApp/CupertinoApp の設定、現在の翻訳の使用状況を確認します。
  2. 要求された変更を特定します。たとえば、l10n の初期設定、ロケールの追加、ハードコードされた UI テキストの置き換え、プレースホルダー/複数形/選択肢の追加、値の書式設定、生成の修正、古いインポート/設定の移行などです。
  3. 選択ガイドに従って、gen-l10n、レガシーな intl_translation、カスタムの代替手段から選びます。既存プロジェクトに適合する最小限の変更を優先します。
  4. タスクに必要な参照資料のみを読みます。
  5. ローカライズを変更します。
    • 不足している場合は、flutter_localizations と intl:any を追加します。
    • flutter: generate: true を設定します。
    • l10n.yaml を作成または更新します。
    • 説明とプレースホルダーのメタデータを含めて、ARB ファイルを作成または更新します。
    • AppLocalizations を MaterialApp または CupertinoApp に組み込みます。
    • ハードコードされた UI 文字列を、生成されたゲッターまたはメソッドに置き換えます。
  6. flutter gen-l10n で生成と検証を行います。その後、通常は flutter analyze または影響を受けるテストなど、関連する範囲で最小限のプロジェクトチェックを実行します。
  7. 変更したファイル、生成される動作、実施した検証、残っているロケールや翻訳の不足を報告します。

リソースの参照先

タスク参照または使用するもの理由
l10n.yaml、生成出力パス、null 許容ゲッター、遅延読み込み、未翻訳項目の追跡を設定またはデバッグするreferences/l10n-config.md現在の gen-l10n オプションと安全なデフォルト
ARB メッセージ、プレースホルダー、複数形、選択肢、エスケープ、メタデータを作成または修正するreferences/arb-format.mdARB スキーマのパターンと翻訳者向けのコンテキスト規則
数値、通貨、パーセント、日付/時刻の書式設定を追加する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、参照資料、アセット間のレイヤーの一貫性も確認してください。

コメント