我们在上一章回中介绍了"自定义Action菜单"相关的内容,本章回中将介绍 在使用intl插件时遇到的问题.闲话休提,让我们一起Talk Flutter吧。
1. 概念介绍
我们开发的项目支持多国语言时会用到intl
相关的工具,官方提供了intl包,我们可以通过该包以及命令行生成多国语言相关的字符,详细的内容可以参考第七十二回的介绍。
此外我们也可以通过三方提供的插件来生成多国语言相关的字符,它比官方提供的包更加方便一些,该插件是AndroidStudio
上的插件:Flutter intl
,详细的内容可以参考第一百四十二回的介绍,本章回中主要介绍一些在使用该工具时遇到的问题。
2. 问题描述
2.1 没有生成内容
我在查看中文的页面时发现部分字符串没有翻译成中文,仍然显示英文,不过在arb文件中确实有这些字符串。整体来看,一个App中部分内容是中文,部分内容是英文。但是这部分英文内容也有对应的中文,只是没有被显示成中文。
2.2 生成的内容错误
我在查看中文的页面时发现部分字符串翻译不对,比如我对china这个英文字符串做过两次修改,每一次翻译为瓷器,第二次翻译为中国,不过页面中仍然显示瓷器,也就
是说第二次修改没有生效。不过在arb文件中确实为中国,也就是说我修改的翻译内容没有被更新。
3. 问题解决
没有生成的问题,经过分析后发现是arb文件中json字符串格式不对引起的,只要格式正确可以,示例如下:
"china " : "中国"
"china" : "中国"
上面的示例代码中第一行是错误的格式,第二行是正确的格式。它们之间只差了一个空格。
我们在l10n
目录下的xxx_zh.arb
文件中的内容会被工具生成为对应的dart文件,也就是generated/intl
目录下的messages_zh.dart
文件,页面中使用S.current.china
读取字符串时读取是的这个文件中的内容,而不是arb格式文件中的内容。
当arb格式的文件中的json字符串包含空格时,工具无法在messages_zh.dart
文件中生成对应的字符串,因此我们在页面中读取不到相应的中文字符串。这便是问题的原因,因此我们要保证arb文件中json字符串的格式正确才可以。
生成内容错误的问题,我们没有找到原因,只是手动修改了messages_zh.dart
文件中错误的字符串,让它的翻译和arb文件中相应的字符串保持一致。但是这不是根本的解决文案。
我发现messages_zh.dart
文件会自动生成,不编译代码也会自动生成,但是它具有偶然性,有时候可以自动生成,有时候不可以。我还不清楚其中的原因,欢迎大家在评论区交流与讨论。
4. 内容总结
最后,我们对本章回的内容做一个全面的总结:
- 使用多国语言时可以使用官方的intl工具或者三方的Flutter intl插件;
- 使用三方插件时需要注意arb文件中json字符串的格式,不能包含空格等内容;
- 三方插件会把xxx_zh.arb文件中的内容自动生成messages_zh.dart文件中的内容,以供代码中使用;
- 在代码中使用生成后的字符串时要注意,它可能会与xxx_zh.arb文件中相应的字符串不一致;
看官们,与"在使用intl插件时遇到的问题"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!