900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Android中xliff:g/xliff:g的用法

Android中xliff:g/xliff:g的用法

时间:2020-08-31 14:11:07

相关推荐

Android中xliff:g/xliff:g的用法

在查阅修改Android源码的过程中经常能在字符串资源中看到类似下面的标签:

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"><string name="xliff_string">今天是<xliff:g id="WEEK">%1$s</xliff:g>,<xliff:g id="DAY">%2$d</xliff:g>号</string></resources>

今天我们就从是什么、怎么用、为什么三个方面来学习一下。

是什么:

通过查看相关资料后得知xliff是一个缩写,全称XML Localization Interchange File Format ,即XML本地化数据交换格式。

怎么用:

用法其实也很简单,可简单分为三步:

修改xml文件中的resources标签,指定xliff格式的命名空间。在字符串标签中引入在java文件中通过Resources类的的getString(@StringRes int id, Object… formatArgs)方法给占位符提供值,并获取对应的字符串。

下面是一个例子:

一:首先在xml中定义字符串以及指定命名空间。

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"><string name="xliff_string">今天是<xliff:g id="WEEK">%1$s</xliff:g>,<xliff:g id="DAY">%2$d</xliff:g>号</string></resources>

二:在java代码中引用并提供参数。

String s = getResources().getString(R.string.xliff_string,"星期一",13);

最终s的内容是:今天是星期一,13号。

现在我们来对用法进行分析:

在id=”WEEK”的xliff标签中的格式是%1$s,其中1代表的是它的位置,s代表了传入的应该是个字符串,因此getString中传入的值“星期一”作为了第一个参数进行了替换,同理,id=”DAY”的xliff标签数字为2,最后一个字母为d,代表传入的应该是一个整形,因此13作为第二个参数进行了替换。

为什么:

为什么通过xliff标签能够做到这一点呢?其实稍微查看一下源码就可以理解:

@NonNullpublic String getString(@StringRes int id, Object... formatArgs) throws NotFoundException {final String raw = getString(id);return String.format(mResourcesImpl.getConfiguration().getLocales().get(0), raw,formatArgs);}

可以看到getString方法其实是调用了String.format方法来进行解析。相信很多人在学习xliff的用法的时候也会觉得xliff的参数格式很熟悉,这就是因为在Java层用的就是我们熟悉的String.format去进行解析的。

因此xliff的参数格式肯定也不只有上面这么少这么简单,具体的参数可参考String.format方法。

本篇博客到此为止,欢迎拍砖指教。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。