Quick Tip: 模板化字符串资源(Formatting Resource Strings)

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

A group of %d people

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

%d 个人的小组

其中上面的 %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 火了呢

更多:

  • 这篇文写了各种引用模板的手法:Android String Placeholders

你可能感兴趣的:(Quick Tip: 模板化字符串资源(Formatting Resource Strings))