环境
Flutter 3.29
macOS Sequoia 15.4.1
Xcode 16.3
配置
安装依赖包
默认情况下,Flutter只提供美式英语的本地化,可以通过flutter_localizations这个package来实现国际化。
创建flutter工程后执行
¥ flutter pub add flutter_localizations --sdk=flutter
¥ flutter pub add intl:any
执行后的pubspec.yaml文件的效果
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^1.0.8
flutter_localizations:
sdk: flutter
intl: any
安装对应的package
¥ flutter pub get

pubspec.yaml文件
在 Flutter 项目的根目录中添加一个新的 yaml 文件,命名为 l10n.yaml,其内容如下:
arb-dir: lib/common/localization/l10n
template-arb-file: app_en.arb
output-localization-file: app_localizations.dart
- 将 应用资源包 (.arb) 的输入路径指定为 ${FLUTTER_PROJECT}/lib/common/localization/l10n。
- 将英文的语言模板设定为 app_en.arb。
- 指定 Flutter 生成本地化内容到 app_localizations.dart 文件。
要在pubspec.yaml 文件中,设置generate为true,执行命令时才会生成对应的app_localizations.dart文件
flutter:
generate: true
指定这个是为了生成项目时能自动生成对应的.dart代码文件
在 ${FLUTTER_PROJECT}/lib/common/localization/l10n 添加 app_en.arb 模板文件
{
"helloWorld": "Hello World!"
}
在同一目录下添加中文的模板文件 app_zh.arb
{
"helloWorld":"你好,世界"
}
执行命令生成.dart文件
¥ flutter run
运行报错
Synthetic package output (package:flutter_gen) is deprecated: https://flutter.dev/to/flutter-gen-deprecation. In a future release, synthetic-package will
default to `false` and will later be removed entirely.
Generating synthetic localizations package failed with 1 error:
Error: Attempted to generate localizations code without having the flutter: generate flag turned on.
Check pubspec.yaml and ensure that flutter: generate: true has been added and rebuild the project. Otherwise, the localizations source code will not be
importable.
有两个问题,一个是使用flutter_gen生成synthetic package 的方式已经过期,推荐使用在 Flutter 项目中指定的目录下生成国际化资源代码文件。该标志默认为 true,还有一个报错是因为pubspec.yaml没有设置允许自动生成代码
解决方案: l10n.yaml文件中追加设置不使用Synthetic package的方式生成国际化资源文件
synthetic-package: false
解决方案: pubspec.yaml设置允许自动生成代码
flutter:
generate: true
重新运行 flutter run
报错消失,并在l10n目录下生成对应的.dart代码文件

打开 app_localizations.dart
import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:intl/intl.dart' as intl;
import 'app_localizations_en.dart';
import 'app_localizations_zh.dart';
abstract class AppLocalizations {
AppLocalizations(String locale) : localeName = intl.Intl.canonicalizedLocale(locale.toString());
final String localeName;
static AppLocalizations? of(BuildContext context) {
return Localizations.of<AppLocalizations>(context, AppLocalizations);
}
static const LocalizationsDelegate<AppLocalizations> delegate = _AppLocalizationsDelegate();

最低0.47元/天 解锁文章
963

被折叠的 条评论
为什么被折叠?



