首先,本文用于记录Android中琐碎的string.xml声明。
不要复用
不要复用同一个string。
1.假如你在登陆和注册界面都用了一个Dialog来提示处理中,我们需要再string.xml中声明—R.string.loading.并把这个string应用到各自的Dialog中去。
Loading please wait...
版本发布之后产品经理说这样提示不太友好,登陆应该是“Sign in…”,注册才应该是“Sign up…”,这时候你就要再去声明一个string并且还需要在代码中做修改,所以一开始为什么不分开声明string呢。
Sign in...
Sign up...
2.如果你的应用国际化这时候你可能无法预知是该显示哪种语言,不一定那个国家或者地区就能用同一个词来显示同一个string的意思。
Yes Yes 下载完成 同意条款是吧,如果是英文两个意思相同的能用同一个词来表示,但是在中文下就是两个不同意思了。(ps: 原文中用的不知道是哪国的语言,我采用了中文替换)。
独立化
给不同的界面通过增加前缀使它们独立明了,什么意思呢?直接看例子。
Log Out
Notification
Contact Us
Name
Email
Work
这么做有下面几点好处:
1.通过增加前缀能让你一眼就看出这些strings是在哪个界面被使用。
2.更加明了的string.xml让你以后再国际化中容易一个界面一个界面翻译过去。
当然你也可以针对不同的界面通过声明不同的string.xml来区分strings也是一种可取的方式,比如说setting_strings.xml、profile_strings.xml。
格式化
通过Resources#getString(int id, Object… formatArgs).来格式化strings。
- welcome back
假设我们这么声明一个string,下面这段代码采用“+”来拼接字符串。
String username = "Jone Doe";
String result = username + getString(R.string.login_welcome_back);
不提倡采用这种方式来拼接字符串,因为在其他语言中词语顺序可能有所不同,我们应该采用Resources#getString(int id, Object… formatArgs)这种方式。
$s - welcome back
欢迎 - $s 回来
String username = "Jone Doe";
String result = getString(R.string.login_welcome_back, username);
这里同上采用中文跟英文的方式来做比较,因为原文那个国家字打不出来。
复数
使用Resources#getQuantityString (int id, int quantity)来处理复数。
因为在不同语言环境下复数的表现方式不一样,所以最好不要再代码中来标示:
minute
minutes
String text;
int minute = Calendar.getInstance().get(Calendar.MINUTE);
if (minute == 0) {
text = getString(R.string.minute);
} else {
text = getString(R.string.minutes);
}
正确的方式应该采用Resources#getQuantityString (int id, int quantity)来处理:
minute
minutes
int minutes = Calendar.getInstance().get(Calendar.MINUTE)
String text = getResources.getQuantityString(R.plurals.minutes, minutes)
string高亮
使用html文本来使string高亮。
如果你想改变字符串中的某些string高亮处理TextView — ForegroundColorSpan并不是最好的解决方式因为高亮是采取索引但是在多语言的app上并不是安全的做法。最好的方法是在string.xml中声明一个采用html的font color标签来的string。
假设你有这么一个字符串“Discover and play games.”你想高亮
Discover和play两个词,你应该这么做:
Discoverandplaygames.
]]>
TextView textView = (TextView) findViewById(R.id.textview)
text.setText(Html.fromHtml(R.string.html_text))