Flutter如何通过build_runner实现国际化脚本
在Flutter项目中,我想通过build_runner实现国际化脚本的自动生成,但遇到了一些问题。具体步骤如下:
- 在pubspec.yaml中添加了flutter_localizations和intl依赖,并配置了build_runner
- 创建了arb文件并定义了多语言内容
- 运行
flutter pub run build_runner build命令
但执行时出现了以下错误:[错误信息]。请问正确的实现流程是什么?还需要配置哪些额外的步骤?如何确保生成的dart文件能正确集成到项目中?
2 回复
在Flutter中,使用build_runner实现国际化的步骤如下:
- 添加依赖:
flutter_localizations、intl和build_runner。 - 创建
l10n.yaml文件,配置生成路径。 - 编写
.arb文件定义多语言键值对。 - 运行
flutter pub run build_runner build生成localizations.dart文件。 - 在
MaterialApp中配置localizationsDelegates和supportedLocales。
更多关于Flutter如何通过build_runner实现国际化脚本的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在 Flutter 中,通过 build_runner 实现国际化通常使用 flutter_gen 或 intl 包来自动生成国际化代码。以下是使用 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.json 和 zh.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:使用生成代码
- 在
MaterialApp中配置:
return MaterialApp(
localizationsDelegates: AppLocalizations.localizationsDelegates,
supportedLocales: AppLocalizations.supportedLocales,
home: MyHomePage(),
);
- 在界面中调用:
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 对大多数场景足够高效。

