Flutter Setup Localization

作者 flutter0ef3972f93e2无许可证3K 个星标收录于 2026年10月8日更新于 2026年10月8日仓库2天前更新

Add `flutter_localizations` and `intl` dependencies, enable "generate true" in `pubspec.yaml`, and create an `l10n.yaml` configuration file. Use when initializing localization support for a new Flutter project.

AI 生成的概览

通过添加依赖、启用代码生成和配置 ARB 文件,为 Flutter 应用设置本地化。

功能
该技能介绍如何在 Flutter 项目中初始化国际化:添加 flutter_localizations 和 intl 依赖、在 pubspec.yaml 中启用 generate 标志,并创建 l10n.yaml 配置文件。它还涵盖定义 ARB 字符串文件、生成 AppLocalizations 类以及在组件中使用本地化字符串。内容包括占位符、复数和选择的高级格式化。
适用场景
适用于在新 Flutter 项目中开始支持本地化,或添加和编辑本地化字符串时。适合使用 ARB 文件和 Flutter 生成的本地化类的项目。
运行要求
需要带有 Flutter SDK 和 Dart 工具链的 Flutter 项目;设置过程中会添加 flutter_localizations 和 intl 包。该技能不附带脚本。

Internationalizing Flutter Applications

Contents

Core Concepts

Flutter handles internationalization (i18n) and localization (l10n) via the flutter_localizations and intl packages. The standard approach uses App Resource Bundle (.arb) files to define localized strings, which are then compiled into a generated AppLocalizations class for type-safe access within the widget tree.

Setup Workflow

Copy and track this checklist when initializing internationalization in a Flutter project:

  • Task Progress
    • 1. Add dependencies to pubspec.yaml.
    • 2. Enable the generate flag.
    • 3. Create the l10n.yaml configuration file.
    • 4. Configure MaterialApp or CupertinoApp.

1. Add Dependencies

Add the required localization packages to the project. Execute the following commands in the terminal:

bash
flutter pub add flutter_localizations --sdk=flutterflutter pub add intl:any

Verify your pubspec.yaml includes the following under dependencies:

yaml
dependencies:  flutter:    sdk: flutter  flutter_localizations:    sdk: flutter  intl: any

2. Enable Code Generation

Open pubspec.yaml and enable the generate flag within the flutter section to automate localization tasks:

yaml
flutter:  generate: true

3. Create Configuration File

Create a new file named l10n.yaml in the root directory of the Flutter project. Define the input directory, template file, and output file:

yaml
arb-dir: lib/l10ntemplate-arb-file: app_en.arboutput-localization-file: app_localizations.dartsynthetic-package: true

4. Configure the App Entry Point

Import the generated localizations and the flutter_localizations library in your main.dart. Inject the delegates and supported locales into your MaterialApp or CupertinoApp.

dart
import 'package:flutter_localizations/flutter_localizations.dart';import 'package:flutter_gen/gen_l10n/app_localizations.dart'; // Adjust path if synthetic-package is false
// ... inside build methodreturn MaterialApp(  localizationsDelegates: const [    AppLocalizations.delegate,    GlobalMaterialLocalizations.delegate,    GlobalWidgetsLocalizations.delegate,    GlobalCupertinoLocalizations.delegate,  ],  supportedLocales: const [    Locale('en'), // English    Locale('es'), // Spanish  ],  home: const MyHomePage(),);

Implementation Workflow

Follow this workflow when adding or modifying localized content.

1. Define ARB Files

  • If creating NEW content: Add the base string to the template file (lib/l10n/app_en.arb). Include a description for context.
  • If EDITING existing content: Locate the key in all supported .arb files and update the values.
json
{  "helloWorld": "Hello World!",  "@helloWorld": {    "description": "The conventional newborn programmer greeting"  }}

Create corresponding files for other locales (e.g., app_es.arb):

json
{  "helloWorld": "¡Hola Mundo!"}

2. Generate Localization Classes

Run the following command to trigger code generation:

bash
flutter pub get

Feedback Loop: Run validator -> review terminal output for ARB syntax errors -> fix missing commas or mismatched placeholders -> re-run flutter pub get.

3. Consume Localized Strings

Access the localized strings in your widget tree using AppLocalizations.of(context). Ensure the widget calling this is a descendant of MaterialApp.

dart
Text(AppLocalizations.of(context)!.helloWorld)

Advanced Formatting

Use placeholders for dynamic data, plurals, and conditional selects.

Placeholders

Define parameters within curly braces and specify their type in the metadata object.

json
"hello": "Hello {userName}","@hello": {  "description": "A message with a single parameter",  "placeholders": {    "userName": {      "type": "String",      "example": "Bob"    }  }}

Plurals

Use the plural syntax to handle quantity-based string variations. The other case is mandatory.

json
"nWombats": "{count, plural, =0{no wombats} =1{1 wombat} other{{count} wombats}}","@nWombats": {  "description": "A plural message",  "placeholders": {    "count": {      "type": "num",      "format": "compact"    }  }}

Selects

Use the select syntax for conditional strings, such as gendered text.

json
"pronoun": "{gender, select, male{he} female{she} other{they}}","@pronoun": {  "description": "A gendered message",  "placeholders": {    "gender": {      "type": "String"    }  }}

Examples

Complete l10n.yaml

yaml
arb-dir: lib/l10ntemplate-arb-file: app_en.arboutput-localization-file: app_localizations.dartsynthetic-package: trueuse-escaping: true

Complete Widget Implementation

dart
import 'package:flutter/material.dart';import 'package:flutter_gen/gen_l10n/app_localizations.dart';
class GreetingWidget extends StatelessWidget {  final String userName;  final int notificationCount;
  const GreetingWidget({    super.key,     required this.userName,     required this.notificationCount,  });
  @override  Widget build(BuildContext context) {    final l10n = AppLocalizations.of(context)!;
    return Column(      children: [        Text(l10n.hello(userName)),        Text(l10n.nWombats(notificationCount)),      ],    );  }}

来源与署名

来源:flutter/agent-plugins位于skills/flutter-setup-localization提交0ef3972

许可证: 无许可证

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架