本文主要是介绍Flutter国际化 多语言 使用Flutter intl插件实现多语言,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言
开始的时候我觉得没有必要使用插件来实现国际化 , 几个json文件一加载就完事了,然后配置一下语言相关的处理.
但是使用了插件之后我真香了 , 真的是简单了太多了.
准备工作
搜索插件并安装 : Flutter Intl
项目配置
添加依赖:
dev_dependencies:
...//add thisflutter_localizations:sdk: flutter
在菜单栏的Tool下找到Flutter Intl 并选择Initalize for the project, 配置结束后效果如下:
- 会在 pubspec.yaml中增加以下字段
flutter_intl: enabled: true
- 会在lib目录下增加 generated 和 l10n两个包
- generated包下的intl包默认存在一个messages_all.dart和messages_en.dart文件,messages开头的文件会在添加语言后自动生成
- l10n包下存在一个intl_en.arb文件
-
使用
Add Locale
生成其他语言的arb文件
例如: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;},...
);
- 使用
在需要配置国际化的地方调用S.of(context).key
即可.
没有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 i18n过渡
- 成功初始化之后,复制原有的arb文件到
l10n
文件夹下, 并修改名字 ,例如:intl_en.arb , intl_zh_CN.arb - 将之前使用导入i18n.dart的地方替换成l10n.dart,一般只修改导入的头文件即可。
- flutter i18n中的带变量的写法为
${param}
,而flutter intl插件为{param}
,要注意去掉$.
这篇关于Flutter国际化 多语言 使用Flutter intl插件实现多语言的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!