Flutter 国际化 Intl

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:

 这样的话配置多起来,那维护起来 就是酸爽了!

不知道大家 有没有好的方案?求推荐

猜你喜欢

转载自blog.csdn.net/nicepainkiller/article/details/122921155