Android 国际化多国语言支持

5,742 阅读1分钟

internationalization (国际化)简称 i18n。在Android开发中,如果我们需要支持多个国家的语言,要该怎么办呢?这里我们就讨论下如何在Android studio中使用string.xml来支持i18n。

Android 对i18n和L10n提供了非常好的支持。android没有专门的API来提供国际化,而是通过对不同resource的命名来达到国际化。

在Android studio项目中,res -> values -> strings.xml

Android studio配置string.xml

strings.xml用来配置字符串


    字符串内容
    我的app名称

点击编辑器上的【Open editor】可以打开字符串可视化编辑窗口

java代码中使用strings.xml资源

在java代码中,使用etResources().getString()方法获取对应的字符串。

String s = getResources().getString(R.string.app_name);

如果使用了多种语言的strings.xml支持,在不同手机环境下,则会显示对应语言环境的strings.xml内容。

String格式化

很多情况下,我们需要实现固定字符串和变量拼接,类似C语言中printf函数,我们可以用占位符,很好的输出字符串内容。
在java中,也能使用字符串格式化来达到相同的效果

String s = String.formate("My name is %s","lizhijun");

同样,如果我们在strings.xml设置的内容为包含占位符的字符串,我们也能这样来格式化字符串,比如:

String s = String.formate("getResources().getString(R.string.app_name)","lizhijun");

异常

格式化异常

Type error: Multiple substitutions specified in non-positional format; did you mean to add the formatted=”false” attribute?
问题分析:异常定位的异常位置,正是有占位符的字符串这一行。

解决方案

增加formatted=”false”属性

我的名字%s

如果字符串中的确有特殊符号%,则可用%%或\%,这种方法会使得字符串丧失格式化的能力

增长率%d %%