Flutter如何通过build_runner实现国际化脚本

在Flutter项目中,我想通过build_runner实现国际化脚本的自动生成,但遇到了一些问题。具体步骤如下:

  1. 在pubspec.yaml中添加了flutter_localizations和intl依赖,并配置了build_runner
  2. 创建了arb文件并定义了多语言内容
  3. 运行flutter pub run build_runner build命令

但执行时出现了以下错误:[错误信息]。请问正确的实现流程是什么?还需要配置哪些额外的步骤?如何确保生成的dart文件能正确集成到项目中?

2 回复

在Flutter中,使用build_runner实现国际化的步骤如下:

  1. 添加依赖:flutter_localizationsintlbuild_runner
  2. 创建l10n.yaml文件,配置生成路径。
  3. 编写.arb文件定义多语言键值对。
  4. 运行flutter pub run build_runner build生成localizations.dart文件。
  5. MaterialApp中配置localizationsDelegatessupportedLocales

更多关于Flutter如何通过build_runner实现国际化脚本的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 中,通过 build_runner 实现国际化通常使用 flutter_genintl 包来自动生成国际化代码。以下是使用 flutter_gen 的步骤(推荐,更简洁):

步骤 1:添加依赖

pubspec.yaml 中添加:

dependencies:
  flutter:
    sdk: flutter
  flutter_localizations: # 支持本地化
    sdk: flutter

dev_dependencies:
  build_runner: ^2.4.0
  flutter_gen_runner: ^5.4.0

步骤 2:配置 flutter_gen

pubspec.yaml 同级目录创建 flutter_gen.yaml

output: lib/gen/ # 生成代码路径
integrations:
  flutter_localizations: true # 启用本地化集成

步骤 3:创建国际化资源文件

在项目根目录创建 assets/lang 文件夹,并添加 JSON 文件(如 en.jsonzh.json):

  • en.json:
{
  "hello": "Hello",
  "welcome": "Welcome {name}!"
}
  • zh.json:
{
  "hello": "你好",
  "welcome": "欢迎 {name}!"
}

步骤 4:配置资源路径

pubspec.yaml 中声明资源:

flutter:
  assets:
    - assets/lang/

步骤 5:生成代码

运行命令生成国际化类:

flutter packages pub run build_runner build

生成的文件位于 lib/gen/,包含 l10n.dart,提供 AppLocalizations 类。

步骤 6:使用生成代码

  1. MaterialApp 中配置:
return MaterialApp(
  localizationsDelegates: AppLocalizations.localizationsDelegates,
  supportedLocales: AppLocalizations.supportedLocales,
  home: MyHomePage(),
);
  1. 在界面中调用:
Text(AppLocalizations.of(context)!.hello);
Text(AppLocalizations.of(context)!.welcome(name: 'Flutter'));

更新资源后重新生成

修改 JSON 文件后运行:

flutter packages pub run build_runner build --delete-conflicting-outputs

优点

  • 自动生成类型安全的代码,避免手写错误。
  • 支持参数化文本(如 {name})。
  • 与 Flutter 本地化无缝集成。

如果需要更复杂的国际化(如复数、性别),可结合 intl 包,但 flutter_gen 对大多数场景足够高效。

回到顶部