美文网首页Android KnowledgeAndroid知识Android开发
Quick Tip: 模板化字符串资源(Formatting R

Quick Tip: 模板化字符串资源(Formatting R

作者: 莫威權在B612等着那温柔的风 | 来源:发表于2016-12-09 10:32 被阅读59次

Android 开发

原因:

在支持多语言的 App 上常常会出现有些情况很难通过字符串串连 (利用 + 拼接两个字符串) 的方法解决:

譬如,App 系统下不同语言的支持下,常常会有些句子:

英文:

A group of 5 people

中文:

5个人的小组

5 是用户挑选的数字,是一个 变量, 这两个短语虽是同一个意思,但是 5 的位置是不一样的, 那么用字符串串连的方法来实现这种支持就难了。

不推荐的方式:

int numberOfPeople = 5;
String englishMessage = "A group of" + numberOfPeople + "people";
String chinaMessage = numberOfPeople + "个人的小组";

先定义字符串,然后再串连,然后还要监测系统用哪种语言,才决定用那个字符串。 以后没增加一种语言支持都要对这段代码进行调整,比较复杂和难以维护

解决方法:

这个时候可以在相应语言版本的 strngs.xml 文件下定义个模板:

英文, /values/strings.xml

<string name="message">A group of %d people</string>

中文, /values-zh/strings.xml :

<string name="message">%d 个人的小组</string>

其中上面的 %d 是一个占位符,用来标记这里将会填上一个十进制的整型数字,还有其它的譬如:%s 代表字符串等等,详细看这里

代码, 使用 getString() 套用模板,手机会根据语言设置引用相应的 stirngs.xml 的, 有关这个原理可以看这个帖子 :

int numberOfPeople = 5;
String message = res.getString(R.string.message, numberOfPeople); 

手机语言为 中文 时,则 message 的值为:5个人的小组
英文时,则值为:A group of 5 people

建议


在平时写代码的时候要留意这样的情况,即使是 App 不支持多种语言,能够用模板的尽量用模板,不要把字符串硬编码在代码里,拥抱变化,拥抱未来,毕竟未来万一 App 火了呢

更多:

相关文章

网友评论

本文标题:Quick Tip: 模板化字符串资源(Formatting R

本文链接:https://www.haomeiwen.com/subject/gksemttx.html