有这样一种情形,不知道你是否遇到过。

我们要将 android 资源国际化,但是有时候还需要动态的改变字符串的内容,你不可能把所有的情况都写到 string.xml

里面,那怎么办?

假设,现在我们做了一款 app,但是检测到有些设备不支持我们 app 的某些功能,这个时候你需要提示用户:

您的手机暂时没有 ×× ,暂时您无法使用我们的该项功能!


解决这个问题,android 为我们提供了方便的方式:可以使用 xliff 或者不使用 xliff.


Xliff 是 XML Localization Interchange File Format 的缩写,中文名为 XML 本地化数据交换格式。


还是举几个例子吧,直接简单的说明问题。


1. 不使用 xliff


在 res/values/string.xml:


<string name="info">i am is %1$d ,and myname is %2$s</string>


在代码中:


Context mContext;

String info = mContext.getResources().getString(R.string.info, 10, "mark");


输出信息:i am is 10 ,and myname is mark


可以看出,%1$d 被 10 替代,%2$s 被 mark 替代。此时你会问,为什么要标注1、2,如果都写 1,会怎么样?

测试发现,写 1 那麽输出信息为:i am is 10 ,and myname is 10.


想更加深入的了解这个问题,可以参考getString 源码。


public String getString(int id, Object... formatArgs) throws NotFoundException {
String raw = getString(id);
return String.format(mConfiguration.locale, raw, formatArgs);
}


其中,Object... formatArgs 表示一种数据类型形式,可以参考:

http://blog.csdn.net/androidbluetooth/article/details/6593632


2. 使用 xliff


在 res/values/string.xml:


<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">

<string name="info">i am is <xliff:g>%1$d</xliff:g> ,and myname is <xliff:g>%2$s</xliff:g></string>

</resources>


注意:xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" 要声明。


然后在代码中,可以像上面那样去使用了。效果一样的。


如果想更加人性化一点,可以这样写:


<string name="info">i am is <xliff:g id="age" example="20">%1$d</xliff:g>, and myname is <xliff:g id="name", example="jhon">%2$s</xliff:g></string>


id、example 只是表示说明。


那么,% 默认是格式化字符串的,如果想在 string.xml 里面使用 % 怎么办?


解决办法


1.用%%来表示 1 个%,不要使用转意符号 \ ,没有作用!


<string name="value_perc">30%%</string>


2. 增加属性:formatted="false"


<string name="value_perc" formatted="false">30%</string>




更多相关文章

  1. Android中仿QQ聊天内容中提取电话号码,URL
  2. Android中TextView实现分段显示不同颜色的字符串
  3. Android开发实践(六)字符串实现DES加密
  4. android Button设置text属性为字母时,字母自动变成大写
  5. Android自学笔记:开发常见问题总结
  6. Android应用程序打包时,出现错误:"XXX" is not translated in "af
  7. Android(安卓)修改init.rc
  8. Android日志通过logcat实时输出至文件
  9. Android字符串绘制示例

随机推荐

  1. erlang和golang的区别
  2. go语言网络编程、http处理流程详情
  3. golang gopath如何设置
  4. docker为什么用golang开发
  5. Go安装各种第三方库、包的命令
  6. golang gin可以做什么
  7. go语言函数介绍
  8. go语言一些使用经验(精选)
  9. golang flag是什么
  10. go语言的init函数详解