| name | flutter-localization |
| description | Configure your Flutter app to support different languages and regions |
| metadata | {"model":"models/gemini-3.1-pro-preview","last_modified":"Tue, 03 Mar 2026 18:07:09 GMT"} |
Flutter Localization Setup
Goal
Configures and implements internationalization (i18n) and localization (l10n) in a Flutter application. This skill manages dependency injection (flutter_localizations, intl), code generation configuration (l10n.yaml), root widget setup (MaterialApp, CupertinoApp, or WidgetsApp), .arb translation file management, and platform-specific configurations (iOS Xcode project updates). It ensures proper locale resolution and prevents common assertion errors related to missing localization delegates in specific widgets like TextField and CupertinoTabBar.
Decision Logic
- Determine App Root: Identify if the application uses
MaterialApp, CupertinoApp, or WidgetsApp to inject the correct global delegates.
- Identify Target Platforms: If iOS is a target platform, Xcode project files (
Info.plist / project.pbxproj) must be updated to expose supported locales to the App Store.
- Analyze Widget Tree: Check for isolated
TextField or CupertinoTabBar widgets that might exist outside the root app's localization scope. If found, wrap them in explicit Localizations widgets.
- Determine Locale Complexity: If supporting languages with multiple scripts/regions (e.g., Chinese
zh_Hans_CN), use Locale.fromSubtags instead of the default Locale constructor.
Instructions
-
Configure Dependencies
Update pubspec.yaml to include required packages and enable code generation.
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
intl: any
flutter:
generate: true
-
Configure Code Generation
Create an l10n.yaml file in the project root to define the localization tool's behavior.
arb-dir: lib/l10n
template-arb-file: app_en.arb
output-localization-file: app_localizations.dart
synthetic-package: false
-
Define Supported Locales
STOP AND ASK THE USER: "Which languages and regions do you want to support? Please provide a list of language codes (e.g., 'en', 'es', 'zh_Hans_CN')."
-
Create ARB Files
Generate the template .arb file (e.g., lib/l10n/app_en.arb) and corresponding translation files. Implement placeholders, plurals, and selects as needed.
{
"helloWorld": "Hello World!",
"@helloWorld": {
"description": "Standard greeting"
},
"greeting": "Hello {userName}"
Constraints
- No Synthetic Packages: Ensure
synthetic-package: false is considered if the user's environment requires direct source generation, or rely on standard generate: true behavior for modern Flutter versions. Do not use package:flutter_gen imports if synthetic-package: false is set.
- Widget Requirements:
TextField MUST have a MaterialLocalizations ancestor. CupertinoTabBar MUST have a Localizations ancestor.
- Complex Locales: Always use
Locale.fromSubtags for languages requiring script codes (e.g., Chinese zh_Hans, zh_Hant).
- ARB Syntax: Ensure all placeholders used in
.arb strings are explicitly defined in the corresponding @ metadata object.
- Escaping: If literal curly braces
{} or single quotes ' are needed in .arb files, enable use-escaping: true in l10n.yaml and use consecutive single quotes '' for escaping.