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 %%