第四百一十回 在使用intl插件时遇到的问题

本文讲述了在使用Flutter的Intl插件处理多国语言时遇到的两个问题:字符串未生成和生成内容错误。解决方法包括检查arb文件中的json字符串格式,以及messages_zh.dart文件的自动生成机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


我们在上一章回中介绍了"自定义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插件时遇到的问题"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

talk_8

真诚赞赏,手有余香

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

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

打赏作者

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

抵扣说明:

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

余额充值