返回顶部

Android国际化多国语言支持

Android国际化多国语言支持

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用来配置字符串

<resources>
    <string name="键名">字符串内容</string>
    <string name="app_name">我的app名称</string>
</resources>

图片描述

点击编辑器上的【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"属性

    <string name="app_name" formatted="false">我的名字%s</string>

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

    <string name="app_name" formatted="false">增长率%d %%</string>

本文标题: 《Android国际化多国语言支持》

文章链接: https://unyiong.com/index/index/post/id/uwoOroTIYhs%253D.html

文章作者: 荔枝君

发布时间: 2016-04-22

最后更新: 2024-04-29

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

请荔枝君喝杯咖啡☕️:-)
打赏