1.介绍
首先在这里提前祝大家新春大吉,最近发现有粉丝私聊我,Flutter i18n插件在idea中的插件市场已经找不到了,然后我就到Flutter i18n 官网 看到了作者的留言,大致意思是:由于作者的时间和可用性问题,插件项目不再维护,并且,另一个更加轻便的项目给予我们使用,而今天,我们就来学习以下新项目的使用(纯dart cli工具,无需安装任何插件,在这里,感谢作者!也希望大家能到上面的官网给作者大大给个star)
2.安装
打开我们的项目,然后在项目根目录下的pubspec.yaml
文件添加下面代码
dev_dependencies:
#new
flutter_l10n: ^0.1.3
#new
注意,这里是放到dev_dependencies
节点下,目的是在开发项目的时候才进行使用,而打包项目是不会把库里面的代码打包进来,然后我们在命令行下运行flutter pacakges get
代码即可
3.新建.arb文件
关于.arb
文件的介绍,可以到我上一篇文章进行查看,在根目录/lib
下新建.arb
文件
新建.arb文件.png
这里新建了一个en
和zh
,目的是支持英文和中文语言环境,内容也是跟之前使用的一样
完成之后,我们在命令行下运行
flutter pub run flutter_l10n:build
命令即可4.产物分析
运行命令之后,会生成三个文件
-
l10n/s.dart
主要用于初始化代理,获取字符串 -
l10n/en.dart
英文语言环境下的字符串内容,对应en.arb
文件 -
l10n/zh.dart
中文语言环境下的字符串内容,对应zh.arb
文件
这里需要注意,生成的文件对应判断languageCode
,如果你要指定对应的countryCode
,需要在新建.arb
文件时指定,如:en_US.arb
,下面时s.dart
文件中的一段代码
class _Delegate extends LocalizationsDelegate<S> {
const _Delegate();
@override
Future<S> load(Locale locale) {
String tag = locale.countryCode == null || locale.countryCode.isEmpty
? locale.languageCode
: locale.toString();
switch (tag) {
case 'zh':
return SynchronousFuture<S>(const $zh());
case 'en':
return SynchronousFuture<S>(const $en());
}
return SynchronousFuture<S>(const S());
}
@override
bool isSupported(Locale locale) => true;
@override
bool shouldReload(_Delegate old) => false;
}
5.切换语言
切换语言的时候需要注意,更改的地方需要两处
MaterialApp(
localizationsDelegates: const [
S.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate
],
//new
locale: Locale('zh',''),
localeResolutionCallback:(Locale locale, Iterable<Locale> supportedLocales) {
return Locale('zh','');
},
//new
// ...
)
我们可以把Locale('zh','')
作为一个变量即可
6.最后
使用方法跟插件的使用方法类似,但存在以下问题
- 不支持语法
- 不能够通过
alt+enter
生成字符串 -
supportedLocales: S.delegate.supportedLocales,
该代码失效
如果有其它更新,该文章会一直更新,请持续关注。。。