如何使用Android xliff:g

如何使用Android xliff:g,android,xliff,Android,Xliff,有人能解释一下字符串/本地化的xliff:g 我知道xliff:g不应该翻译内容中的任何内容,但我不知道如何在代码中使用它 我的案例中的一个例子是我的西班牙语翻译实践: <string name="order_quantity">Cantidad: <xliff:g id="quantity" example="2">%d/xliff:g</string> 类似于java: getString(R.string.quant) + quantity 因此,通

有人能解释一下字符串/本地化的
xliff:g

我知道
xliff:g
不应该翻译
内容中的任何内容,但我不知道如何在代码中使用它

我的案例中的一个例子是我的西班牙语翻译实践:

<string name="order_quantity">Cantidad: <xliff:g id="quantity" example="2">%d/xliff:g</string>
类似于java:

getString(R.string.quant) + quantity

因此,通过这种方式,它将数量变量关联到
getString

小错误中。在您的示例中,应该有一个结束标记:

<string name="order_quantity">Cantidad: <xliff:g id="quantity" example="2">%d</xliff:g></string>
至于第二个问题,为什么不使用字符串连接呢?在其他语言中,替换可能不在字符串末尾。你可以有这样的东西:

values/strings.xml
    <string name="order_quantity">%d items</string>

values-es/strings.xml
    <string name="order_quantity">Cantidad: %d</string>
values/strings.xml
%d项目
值es/strings.xml
Cantidad:%d

因此,您可以看到,在这种情况下,简单地将字符串附加在一起不会得到有效的结果

%d用于将内存的一部分表示为整数。 它最常用于将一些数字打印到标准输出,如下所示:

#include <stdio.h>
int main()
{
    int n = 42;
    printf("The answer to life, universe and everything is %d", n);
    return 0;
}
#包括
int main()
{
int n=42;
printf(“生命、宇宙和万物的答案是%d”,n);
返回0;
}
与Java不同,Java只是将数字和字符串等连接起来,C使用这个%something来表示正在编写的内容d表示,例如在printf()中,逗号后面将有一个参数(在本例中为n),该参数应表示为int

有关格式说明符的完整列表,请参阅列表


另请参阅

抱歉。我手工打字。这在实际的xml中是正确的:我的意思是连接java,而不是xml。因此,基本上是在xml中转换字符串,然后在java中连接值。同样,这不起作用,因为在我的示例中,替换参数位于不同的位置(例如,3项vs项:3)。占位符上的
id
属性实际上可能用于验证翻译:如果源语言字符串包含id=“quantity”的占位符,则您希望在目标语言中也包含此类占位符。如果字符串中有两个或多个占位符,则翻译器也可以在必要时更改它们的顺序。
example
属性包含一个翻译人员示例,以便翻译人员知道占位符代表的是整数、日期、名称、组织还是完全不同的东西,这可能会影响目标语言的语法。
values/strings.xml
    <string name="order_quantity">%d items</string>

values-es/strings.xml
    <string name="order_quantity">Cantidad: %d</string>
#include <stdio.h>
int main()
{
    int n = 42;
    printf("The answer to life, universe and everything is %d", n);
    return 0;
}