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本地化数据交换格式。


怎么用:

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

  1. 修改xml文件中的resources标签,指定xliff格式的命名空间。
  2. 在字符串标签中引入
  3. 在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标签能够做到这一点呢?其实稍微查看一下源码就可以理解:

    @NonNull
    public 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方法。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值