步骤
- 在项目根目录下创建一个i10n-arb目录,该目录用于保存arb文件
- 在lib目录下创建一个i10n的目录,该目录用于保存从arb文件生成的dart代码文件。
- 在i10n目录下面,创建一个localization_intl.dart 文件,用来实现Localizations和Delegate类
- 在localization_intl.dart 文件中添加需要国际化的属性
flutter packages pub run intl_translation:extract_to_arb --output-dir=i10n-arb lib/i10n/localization_intl.dart
通过这个intl_translation命令把项目中Intl API标识的属性和字符串生成arb文件- 基于上面生成的arb文件,创建其它我们想支持的语言对应的arb文件
flutter packages pub run intl_translation:generate_from_arb --output-dir=lib/i10n --no-use-deferred-loading lib/i10n/localization_intl.dart i10n-arb/intl_*.arb
根据arb生成dart文件
说明
官方的教程中第五步和第七步有用到两个命令:
flutter packages pub run intl_translation:extract_to_arb --output-dir=i10n-arb lib/i10n/localization_intl.dart
1 | { |
这个是生成的默认的Locale资源文件,如果我们现在要支持中文简体,只需要在该文件同级目录创建一个”intl_zh_Hans.arb”文件。
然后将”intl_messages.arb”的内容拷贝到”intl_zh_Hans.arb”文件,接下来将英文翻译为中文即可,翻译后的”intl_zh_Hans.arb”文件内容如下:
1 | { |
flutter pub pub run intl_translation:generate_from_arb --output-dir=lib/i10n --no-use-deferred-loading lib/i10n/localization_intl.dart i10n-arb/intl_*.arb
感受
经过学习实践官方的国际化方案后,我觉得相对还是有点复杂了。需要dart转arb,arb再转一次dart。对于没有开发过原生app的新手来说,也不是很直观的理解其中的逻辑。
基于上面原因,我目前发现了一些其它方案,
- 基于 Flutter i18n IDE插件,按照插件提供的文档去实现国际化。
- 这样步骤和逻辑都相对简单些。这个插件也是基于官方的教程逻辑实现的,只是将一些步骤通过插件替代了,主要的作用是省略dart转arb这步。
- 基于 fluintl 库实现