关于安卓国际化相关的一些东西
1.普通资源的国际化
创建对应语言的资源目录。
默认资源目录 values (这个APP默认语言,比如你的国际化里面包括了 中文,英文。然后用户使用的是泰语,但是你没有设置这个资源目录,那就回去拿默认的用来展示。)
英文的目录 values-en
印尼的资源目录 values-in (当然,你如果需要其他国家,都可以创建对应的语言目录。)
相对应的,所有的dimens colors这些全部都可以根据对应的语言设置对应的值。
2.图片资源的国际化
和资源类似,不过这个检查会更严格。命名的规则是(drawable-{国家代码}-xhdpi)。
要注意的是: 某一些国家的图片资源的缩写无法正常加载多语言。所以我们需要完整的命名。
例如,上面的英语。我们写drawable-en-xhdpi没关系。但是印尼语,我们必须写成drawable-in-rID-xhdpi,系统才能为我们成功加载成印尼语下的图片资源。
3.英语单复数问题(这个比较坑。后来想想还是用if判断算了。)
关于单复数问题,一般语言中就只要判断是1 或者不是1 就可以了。但是如果我们在代码里面直接使用
if(a == 1) {
...
} else {
...
}
这样的代码会很奇怪。所以我们直接使用官方的
<plurals name="total_subscrite">
<item quantity="one">%d following</item>
<item quantity="other">%d followings</item>
</plurals>
代码中需要使用的时候,调用getQuantityString()
这个包括了3个参数。第一个就是我们的string字符串。第二个是传进去用来判断显示单复数的值。第三个是具体显示的值。
getResources().getQuantityString(R.plurals.total_subscrite, a, a)
当然 有一个问题。第二个参数是int类型的。如果我们正好在用的时候这个a是一个long类型的,那就没法用这个方法了。
然后又回到了用if else 判断。。。
而且使用这个方法,还有一个问题,一定要在英文下才能正常的显示单复数。切换到别的语言,就没法单复数了。
4.强制应用加载某种语言
这个一定要在onCreateView之前设置好对应的语言才能正常显示。
所以一般要强制使用某一种语言的时候,我们一般在application类里面写设置语言的方法。
这个地方有一个需要注意一下,我们系统的Locale里面会有很多常用的国家。但是肯定不会包括所有的国家。所以我们在用的时候,如果不是系统里面的,我们
需要通过自己new 一个Locale()。然后传入对应的国家码就可以了。