Android多语言支持:由于占位符计数不同导致的字符串格式问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android多语言支持:由于占位符计数不同导致的字符串格式问题相关的知识,希望对你有一定的参考价值。
我正在制作法语android应用程序,我正在努力支持英语。
我使用“占位符”来格式化我的字符串,因此我可以将它们调整为男性和女性用户。例如,我的strings.xml
文件中的这个字符串:
<string name="encouraging_comment">
Les %1$s sont compliqué%2$ss...
</string>
将成为“男人复杂”或“女人复杂”。
我的问题就在于此。字符串翻译,如下......
<string name="encouraging_comment">
%1$s are complicated...
</string>
......当法语等价物需要两个时,只需要一个占位符。
我该如何处理这个问题?提前致谢。
答案
只需从英语模板字符串中省略第二个占位符,并在渲染字符串时使用空字符串作为第二个参数(或任何其他字符串,无关紧要,值将被忽略):
XML:
<string name="encouraging_comment">
%1$s are complicated...
</string>
Java的:
getString(R.string.encouraging_comment, "women", "");
getString(R.string.encouraging_comment, "men", "");
这是有效的,因为如果参数多于占位符,则不是错误,只有参数少于占位符。
我假设你会有一些表或映射,你可以根据语言和性别查找占位符值。在伪代码中:
(French, Female) -> ("femmes", "e")
(French, Male) -> ("hommes", "" )
(English, Female) -> ("women", "" )
(English, Male) -> ("men", "" )
另一答案
AFAIK,您可以通过添加检查代码来完成此操作
String result;
if ( Locale.getDefault().getLanguage().equals("en")){ // examples "en", "fr", "sp"
result= getString(R.string.encouraging_comment, myString);
}
else{
result= getString(R.string.encouraging_comment, myString, myStringTwo);
}
textView.setText(result);
希望这可以帮助你:)
另一答案
一种方法是在你的locale
中创建一个字符串strings.xml
对于English Strings.xml
<string name="locale">En</string>
对于French Strings.xml
<string name="locale">Fr</string>
然后设置字符串
switch (getString(R.string.locale)) {
case "Fr":
//set your string for French
break;
case "En":
//set your string for English
break;
}
以上是关于Android多语言支持:由于占位符计数不同导致的字符串格式问题的主要内容,如果未能解决你的问题,请参考以下文章
使用gettext提取c#中的多语言占位符(nopCommerce示例篇)
多语言(Java&C#&Ruby&C++&Objective-C&Android)互通的TripleDES加解密算法实现