Skip to content

Latest commit

 

History

History
95 lines (43 loc) · 4.43 KB

关于Android strings.xml你要记住的一些事.md

File metadata and controls

95 lines (43 loc) · 4.43 KB

原文:Android strings.xml — things to remember

译文的GitHub地址:关于Android strings.xml你要记住的一些事

译者注:都是一些很实用的技巧 ,尤其是对于多语言国际化开发,感同身受 。

这篇文章是关于android开发再平常不过的东西--strings.xml

#不要复用

不要在多个页面复用字符串

**1.**假设你在登录和注册页面都有一个loading加载框,你打算让2个加载框使用同一个字符-R.string.loading.

res/values/strings.xml

不久后你决定让其中一个加载框换个字符,然后你不得不创建2个新的字符串并修改你的java代码,如果你一开始就用了2个string,你就只需要修改一个strings.xml文件就可以了 res/values/strings.xml

**2.**你永远不知道你的app将来会支持哪种语言,在某个语言-你可能可以用同一个单词表达不同的内容(译者:done可以表达中文的确定,下一步等等),但是在另外一个语言-你不得不用多个单词表达不同的内容。

res/values/strings.xml

res/values-UA/strings.xml

可以看到英语版本的strings.xml用了同样的单词 “YES”给R.string.download_file_yes 和 R.string.terms_of_use_yes

但是乌克兰版本的strings.xml使用了2个不同单词 “Гаразд”给R.string.download_file_yes,“Так”给R.string.terms_of_use_yes。

#分开

用前缀和注释让不同页面的字符串分开

res/values/strings.xml

**1.**给每个字符添加页面前缀用于帮助识别当前字符串属于哪个界面

**2.**清晰的strings.xml可以让维护变的简单,同时可以一个页面接一个页面翻译成其他语言

#Format格式化

使用Resources#getString(int id, Object… formatArgs)格式化字符串

千万别用“+”这种操作符,因为在不同语言单词排列顺序可能是不一样的

res/values/strings.xml

java code

正确的方式是使用 Resources#getString(int id, Object… formatArgs)

res/values/strings.xml

res/values-UA/strings.xml

java code

#Plurals复数

使用Resources#getQuantityString (int id, int quantity)获取数量字符串

不要在你的java代码里面手动解析复数,因为不同语言有不同的规则和数量语法协议。

res/values/strings.xml

java code

正确的方式是使用Resources#getQuantityString (int id, int quantity)

res/values/strings.xml

java code

#字符高亮

使用html文本高亮静态字符

如果你想改变TextView字符串的颜色-ForegroundColorSpan并不是一个任何时候都好用的一个选择,因为高亮是通过下标index来实现的,在多语言app里面并不安全(译者:你要手动计算不同语言同一个单词的index,容易数组下标越界)。更好的做法是使用strings.xml里面的html font颜色标签。

假设你有一个文本“Discover and play games.” 然后你想高亮“Discover”单词和“play”单词成蓝色。

res/values/strings.xml

java code