背景描述
在App需要适配语言切换时,存在单复数问题。
例如:英文中,单次旅程“1 trip”,多次旅行 “n trips”,如果不做单复数区分会很奇怪。
getQuantityString()
关于单复数的问题,决定为给定语言和数量使用哪一种情况的规则可能非常复杂,Android 提供了 getQuantityString() 等方法来选择适合您的资源,Android 支持的完整集合包括 zero、one、two、few、many 和 other。
google android官网
https://developer.android.com/guide/topics/resources/string-resource
实现
资源定义语法如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<plurals
name="plural_name">
<item
quantity=["zero" | "one" | "two" | "few" | "many" | "other"]
>text_string</item>
</plurals>
</resources>
实现背景中提到的trip变复数
strings.xml(value文件夹):
<plurals name="trip_num">
<item quantity="one">%1$d trip</item>
<item quantity="other">%1$d trips</item>
</plurals>
strings.xml(values-zh-rCN/strings.xml文件夹):
<plurals name="trip_num">
<item quantity="other">%1$d个待出发</item>
</plurals>
java代码
int count = allData.size();
Resources res = getResources();
String tripNum= res.getQuantityString(R.plurals.trip_num, count, count);
tvSmartTripCardNum.setText(tripNum);//展示设置
使用 getQuantityString() 方法时,字符串包括的字符串格式设置带有数字,则需要传递 count 两次。 例如,对于字符串 %d trips,第一个 count 参数选择相应的复数字符串,第二个 count 参数将插入 %d 占位符内。 如果复数字符串不包括字符串格式设置,则无需向 getQuantityString 传递第三个参数。