美文网首页
Flutter Intl国际化

Flutter Intl国际化

作者: 郑了了了 | 来源:发表于2021-06-11 10:30 被阅读0次

准备工作

1.搜索插件并安装 : Flutter Intl

项目配置

dev_dependencies:
  //add this
  flutter_localizations:
    sdk: flutter

2.在菜单栏的Tool下找到Flutter Intl 并选择Initalize for the project
3.会在 pubspec.yaml中增加以下字段

flutter_intl:  
    enabled: true

4.会在lib目录下生成 generated 和 l10n两个包

  • generated包下的intl包默认存在一个messages_all.dart和messages_en.dart文件,messages开头的文件会在添加语言后自动生成
  • l10n包下存在一个intl_en.arb文件

添加语言

1.使用Add Locale生成其他语言的arb文件
2.在菜单栏的Tool下找到Flutter Intl 并选择Add Local

  • 例如:zh_CN , 会在l10n包下生成Intl_zh_CN.arb文件 , 可在其中填入对应的文案.

设置国际化语言

return MaterialApp(
  ...
    localizationsDelegates: const [
      S.delegate,
      GlobalMaterialLocalizations.delegate,
      GlobalCupertinoLocalizations.delegate,
      GlobalWidgetsLocalizations.delegate
    ],
    supportedLocales: S.delegate.supportedLocales,
    localeListResolutionCallback: (locales, supportedLocales) {
      print(locales);
      return;
    },
  ...
);

使用

1.在需要配置国际化的地方调用S.of(context).key即可.
2.没有context 时可以使用S.current.key

注意 :
  • 支持语言的顺序为字符串排序 (如zh_A会在zh_B之前) , 并非添加语言的顺序.
  • 假设系统语言为zh_TW , 项目并不支持,会优先寻找zh的其他语言 , 以supportedLocales顺序从上向下寻找.
  • 旧版本i18n插件生成的为i18n文件夹 , 而flutter intl生成的为l10n , 首字母不同 , 需要注意.
  • 此方式无需依赖intl包 , 但不提供intl相关功能. 需要额外功能才需要依赖intl.
  • 如不想弃用旧版intl的AS插件,但AS版本又不支持,可使用该插件生成的dart代码替代i18n中的代码,但可能需要修改类名.

相关文章

网友评论

      本文标题:Flutter Intl国际化

      本文链接:https://www.haomeiwen.com/subject/wrbmeltx.html