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 火了呢
更多:
- 这篇文写了各种引用模板的手法:Android String Placeholders