好久没写博客了,最佳一直在看官网的training啊,突然看到一个奇怪的东西,没错就是标题的那个东西,官网是这样子介绍的:

Often strings contain contain text that should not be translated into other languages. Common examples might be a piece of code, a placeholder for a value, a special symbol, or a name. As you prepare your strings for translation, look for and mark text that should remain as-is, without translation, so that the translator doesn’t change it.

这几句话大家应该都能看得懂,大概意思就是不让字符串中的代码,占位符,特殊标识或者名字什么的被翻译,而你就要控制他们不被改变。我其实看完有点无语,意思很明显,但是我看不懂啊,于是我把它的示例的string资源打印了一下看看是什么效果(我也是很无聊的):

1
2
3
<string name="countdown">
<xliff:g id="time" example="5 days>%2$8s</xliff:g> until holiday
</string>

就是上面这段资源,粘贴到string.xml里面,然后在java中代码动态改变值:

1
tv.text(resources.getString(R.string.countdown, "shark", "louis"))

对了上面这是Kotlin的写法,最近也是在学习这一门大热的语言,这不是重点啊,让我们看看打印的结果:

1
louis until holiday

看到没有,我也是试了几下才知道的,**%2$8s你们猜到什么意思了吧,没错,2表示的是getString后面的可变参数的位置,意思就是从id后面数起的第二个取代这个占位符,而$8s**则表示前面8个空格,并且是字符串

属性id可以随便命名
属性example表示举例说明,可以省略
%n$ms:代表输出的是字符串,n代表是第几个参数,设置m的值可以在输出之前放置空格
%n$md:代表输出的是整数,n代表是第几个参数,设置m的值可以在输出之前放置空格,也可以设为0m,在输出之前放置m个0
%n$mf:代表输出的是浮点数,n代表是第几个参数,设置m的值可以控制小数位数,如m=2.2时,输出格式为00.00

贴出官方说法。

注意在String.xml中加命名空间<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">

以上。。


在这其中我发现了一个方法getQuantityString

这个和上面那个很像啊有木有,于是我查了一下资料发现这是对不同语言的单复数的定义不同时的写法,对某些语言的特殊写法吧,这个得和你们的翻译人员问问了。

描述
zero 语言需要对数字0进行特殊处理。(比如阿拉伯语)
one 语言需要对类似1的数字进行特殊处理。(比如英语和其它大多数语言里的1;在俄语里,任何以1结尾但不以11结尾的数也属于此类型。)
two 语言需要对类似2的数字进行特殊处理。(比如威尔士语)
few 语言需要对较小数字进行特殊处理(比如捷克语里的2、3、4;或者波兰语里以2、3、4结尾但不是12、13、14的数。)
many 语言需要对较大数字进行特殊处理(比如马耳他语里以11-99结尾的数)
other 语言不需要对数字进行特殊处理。

看到这个表格我在试一试呗。

1
2
3
4
<plurals name="subtitle_plural">
<item quantity="one">one crime</item>
<item quantity="other">%1$s crimes</item>
</plurals>

在activity中这样写,对比一下效果

1
2
tv.append(resources.getQuantityString(R.plurals.subtitle_plural, 3, 3).toString() + "\n")
tv.append(resources.getQuantityString(R.plurals.subtitle_plural, 1, 1))

结果:

1
2
3 crimes
one crime

看到这里你也应该明白了,这次的博客内容就这些了,谢谢大家。