我们在上一章回中介绍了国际化相关的内容,本章回中将介绍如何使用intl实现国际化.闲话休提,让我们一起Talk Flutter吧。
概念介绍
我们在这里介绍的intl
是Flutter官方提供的包,主要用来生成自定义的语言包。本章回中将介绍如何使用该包生成自定义的语言包。
使用方法
安装包
在yaml配置文件中添加intl包依赖,并且打开generate
功能;具体的代码如下:
dependencies:
intl: any
flutter:
generate: true
输入以上内容后IDE会在文件上方提示flutter tool中的命令,选择Pub get
命令,开发工具会自动到包库中下载intl包到本地项目中。
生成自定义语言包
安装完intl包后主可以使用intl工具生成自定义语言包,下面是详细的操作步骤:
- 在项目根目录下创建配置文件:l10n.yaml文件,该文件主要指出语言包的位置,模板和生成文件,详细内容如下:
arb-dir: lib/l10n
template-arb-file: app_en.arb
output-localization-file: app_localizations.dart
- 在lib目录下创建l10n目录,并且在目录中创建app_en.arb文件,示例内容如下:
{
"helloWorld": "Hello World!",
"@helloWorld": {
"description": "The conventional newborn programmer greeting"
}
}
- 给文件中添加文字,添加的文字就是我们在App中使用的文字,注意其语法是json格式;
- 在l10n目录下添加其它语言的arb文件,文件内容相同,只是文字的翻译不同;
- 在终端中运行命令:
flutter gen-l10n
生成语言包文件,生成的包在projectName/.dart_tool/flutter_gen/gen_l10n/
目录下; - 把上一步中生成的语言包添加到当前App中,也就是给localizationsDelegates属性和supportedLocales属性赋值;
- 在项目中使用自定义语言包中的内容:首先import包,然后在代码使用包中的文字:
AppLocalizations.of(context)!.helloWorld;
经验分享
下面分享一些我们实现过程中遇到的问题,以及我是如何解决问题的:
- 使用命令:flutter gen-l10n时报错:
Because l10n.yaml exists, the options defined there will be used instead.
解决方法是报自己添加的l10n.yaml文件删除后就可以了,后来发现不删除也不会报错,因为我在执行命令前做了一次全编译(不是热加载),我说的全编译是点击IDE上绿色的编译并运行图标,而不是点击该图标旁边黄色的火焰图标(热加载)。 - 添加语言包时不能只添加自定义的包,系统的语言包也要添加;
- 添加支持的语言时只添加自定义包中的语言就可以,因为该包中包含了所有支持的语言,不再需要一个语言,一个语言地添加。示例代码如下:
supportedLocales: AppLocalizations.supportedLocales,
内容总结
自定义语言包是实现App国际化必不可少的工作,我将其总结为:把JSON格式的arb文件生成了语言包,在代码中使用语言包实现不同国家和地区语言的切换功能。
这个切换是自动的,开发人员需要做的事:提供不同语言的arb文件,然后使用intl工具生成语言包。arb文件有多少种语言,包中就包含多少语言。我的经验是只需要写好英文格式的arb文件就可以,其它语言对应的arb文件只需要在英文基础上进行翻译就可以。
看官们,关于"如何使用intl实现国际化"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!