第七十二回:如何使用intl实现国际化

我们在上一章回中介绍了国际化相关的内容,本章回中将介绍如何使用intl实现国际化.闲话休提,让我们一起Talk Flutter吧。

概念介绍

我们在这里介绍的intl是Flutter官方提供的包,主要用来生成自定义的语言包。本章回中将介绍如何使用该包生成自定义的语言包。

使用方法

安装包

在yaml配置文件中添加intl包依赖,并且打开generate功能;具体的代码如下:

dependencies:
  intl: any

flutter:
  generate: true

输入以上内容后IDE会在文件上方提示flutter tool中的命令,选择Pub get命令,开发工具会自动到包库中下载intl包到本地项目中。

生成自定义语言包

安装完intl包后主可以使用intl工具生成自定义语言包,下面是详细的操作步骤:

  1. 在项目根目录下创建配置文件:l10n.yaml文件,该文件主要指出语言包的位置,模板和生成文件,详细内容如下:
arb-dir: lib/l10n
template-arb-file: app_en.arb
output-localization-file: app_localizations.dart
  1. 在lib目录下创建l10n目录,并且在目录中创建app_en.arb文件,示例内容如下:
{
  "helloWorld": "Hello World!",
  "@helloWorld": {
    "description": "The conventional newborn programmer greeting"
  }
}
  1. 给文件中添加文字,添加的文字就是我们在App中使用的文字,注意其语法是json格式;
  2. 在l10n目录下添加其它语言的arb文件,文件内容相同,只是文字的翻译不同;
  3. 在终端中运行命令:flutter gen-l10n生成语言包文件,生成的包在projectName/.dart_tool/flutter_gen/gen_l10n/目录下;
  4. 把上一步中生成的语言包添加到当前App中,也就是给localizationsDelegates属性和supportedLocales属性赋值;
  5. 在项目中使用自定义语言包中的内容:首先import包,然后在代码使用包中的文字:AppLocalizations.of(context)!.helloWorld;

经验分享

下面分享一些我们实现过程中遇到的问题,以及我是如何解决问题的:

  1. 使用命令:flutter gen-l10n时报错:Because l10n.yaml exists, the options defined there will be used instead.
    解决方法是报自己添加的l10n.yaml文件删除后就可以了,后来发现不删除也不会报错,因为我在执行命令前做了一次全编译(不是热加载),我说的全编译是点击IDE上绿色的编译并运行图标,而不是点击该图标旁边黄色的火焰图标(热加载)。
  2. 添加语言包时不能只添加自定义的包,系统的语言包也要添加;
  3. 添加支持的语言时只添加自定义包中的语言就可以,因为该包中包含了所有支持的语言,不再需要一个语言,一个语言地添加。示例代码如下:
supportedLocales: AppLocalizations.supportedLocales,

内容总结

自定义语言包是实现App国际化必不可少的工作,我将其总结为:把JSON格式的arb文件生成了语言包,在代码中使用语言包实现不同国家和地区语言的切换功能。

这个切换是自动的,开发人员需要做的事:提供不同语言的arb文件,然后使用intl工具生成语言包。arb文件有多少种语言,包中就包含多少语言。我的经验是只需要写好英文格式的arb文件就可以,其它语言对应的arb文件只需要在英文基础上进行翻译就可以。

看官们,关于"如何使用intl实现国际化"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值