Android字符串占位符在不同语言中的使用方法

4

我有一个带有两个占位符的字符串,其中包含XML:

<string name="message">%1$s告知%2$s今天不舒服。</string>

由于%2$s在葡萄牙语中表示"他"或"她",因此我们应该只保留第一个占位符,即人名:

<string name="message">%1$s informa que não se sente muito bem hoje.</string>

代码编译并正常工作,但Lint会抱怨String.format字符串与XML格式字符串不匹配

如何最好地处理这种情况?


2
作为一个快速的解决方法,在葡萄牙语字符串资源的末尾添加第二个占位符,然后将其设置为空,就像这样:<string name="message">%1$s informa que não se sente muito bem hoje.%2$s</string> ;-) - leRobot
1
你可以保持相同的格式,使用两个占位符,并在代码中处理所使用的语言,并在第二个占位符中添加空字符串以供葡萄牙语使用。 - Rajen Raiyarela
1
@leRobot解决了警告,但%2$s被附加到翻译字符串中。我需要创建另一个字符串,在葡萄牙语中不进行翻译,只针对这种特殊情况...很丑陋。 - Ricardo Belchior
1
@RajenRaiyarela 这不是最优雅的解决方案,但如果没有更好的方法,那就这么做吧。 - Ricardo Belchior
1
@tato.rodrigo,这不仅仅是一个“空字符串资源”,它是一种只在葡萄牙语中为空的字符串。我们的应用程序已翻译成11种语言,由第三方平台上的不同人员进行翻译。因此,是的,我更喜欢在XML中保持简单,并在需要时在代码中创建一个条件。 - Ricardo Belchior
显示剩余2条评论
2个回答

2

Lint会抱怨,因为它正在寻找第二个参数。 您可以将占位符放在代表他和她的单词的位置,并对两个含义保持相同。或者,如果这种语言中没有代表他和她的单词,只需将占位符放在那里,并将其替换为空字符串。


2
<string name="message">%1$s informa que não %2$s sente muito bem hoje.</string>

%2$s 为 "se",然后... "se" :)


1
%2$s来自于“他”/“她”。将其翻译成不同的语言是没有意义的。我们从第三方平台获取翻译,所以我不想这样做。感谢您的建议! - Ricardo Belchior
@RicardoBelchior 在所有语言中都应该有一个占位符,这就是它的工作原理。因此,有时候需要做出例外。 - Rahul Tiwari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接