Intl 是官方出品的,包含用于处理国际化/本地化消息,日期和数字格式和解析,双向文本以及其他国际话问题。
- pub地址:intl | Dart Package
- Github地址:https://github.com/dart-lang/intl
在之前有一个比较好用的Android Studio的插件:Flutter i18n
- 但是这个插件已经很久不再维护了,所以不再推荐给大家使用
目前我们可以使用另外一个插件:Flutter Intl
- 该插件更新维护频率很高,并且广受好评;
- 另外,在Android Studio和VSCode中都是支持的
Intl 使用
步骤1:Android Studio 添加插件
步骤2:添加依赖flutter_localizations
在项目的 pubspec.yaml 文件中 用于生成 dart 文件 dev_dependencies: flutter_localizations: sdk: flutter
注意是:dev_dependencies:
然后更新一下!
步骤3:Flutter Intl 初始化项目 (第一次)
成功后,自动在 pubspec.yaml末尾增加
flutter_intl:
enabled: true
并且在lib下生成generated 和 l10n
文件说明:
- generated包下的intl目录默认生成 messages_all.dart 和 messages_en.dart 文件,messages开头的文件无需手动修改,是自动生成的
- generated包下的 I10n.dart 是Localizations和Delegate的实现,无需手动修改,是自动生成的
- l10n包下存在一个intl_en.arb文件,这是系统默认生成的英文国际话内容
步骤4:添加语言(中文-zh)
zh 就是中文的支持;应为默认 lntl 只加入了 en 的支持
步骤5:添加系统国际化支持
pubspec.yaml文件中添加包依赖
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
MaterialApp 修改 :
MaterialApp( ... localizationsDelegates: [ S.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, GlobalCupertinoLocalizations.delegate, ], supportedLocales: S.delegate.supportedLocales, ... )
编辑 l10n 文件夹下的 .arb 文件 按照json:
{ "app_name": "GBM", "confirm": "确认", "cancel": "取消" }
.arb 文件还支持 参数的传递
{ "app_name": "GBM", "confirm": "确认", "cancel": "取消", "msg": "GBM:{msg}" }
S.of(context).app_name S.of(context).msg("大家好")
没有context的时候使用这个:
S.current.app_name
有个问题是 .arb:好像不支持 对象(不能嵌套);只能 key value:
这样的话配置多起来,那维护起来 就是酸爽了!
不知道大家 有没有好的方案?求推荐