Android多语言支持:占位符计数不同导致字符串格式问题
我正在制作一个法语安卓应用程序,我正在努力支持英语 我使用“占位符”来设置字符串的格式,这样我就可以使它们适应男性和女性用户。例如,我的Android多语言支持:占位符计数不同导致字符串格式问题,android,xml,string,localization,string-formatting,Android,Xml,String,Localization,String Formatting,我正在制作一个法语安卓应用程序,我正在努力支持英语 我使用“占位符”来设置字符串的格式,这样我就可以使它们适应男性和女性用户。例如,我的strings.xml文件中的此字符串: <string name="encouraging_comment"> Les %1$s sont compliqué%2$ss... </string> Les%1$s sont Compliqueé%2$s。。。 将变成“男人”(男人很复杂)或“女人”(女人很复杂) 这就是我的问
strings.xml
文件中的此字符串:
<string name="encouraging_comment">
Les %1$s sont compliqué%2$ss...
</string>
Les%1$s sont Compliqueé%2$s。。。
将变成“男人”(男人很复杂)或“女人”(女人很复杂)
这就是我的问题所在。字符串翻译,如下所示
<string name="encouraging_comment">
%1$s are complicated...
</string>
%1美元是复杂的。。。
…只需要一个占位符,而法语对等词需要两个占位符
我如何处理这个问题?
提前感谢。好的,您可以通过在代码中添加check-in来实现这一点,如
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);
希望这对您有所帮助:)一种方法是在
strings.xml中创建字符串locale
对于English Strings.xml
<string name="locale">En</string>
<string name="locale">Fr</string>
渲染字符串时,只需省略英文模板字符串中的第二个占位符,并为第二个参数使用空字符串(或任何其他字符串,无所谓,该值将被忽略):
XML:
这是因为只有当参数少于占位符时,如果参数多于占位符,这不是错误
我假设您将有某种表或映射,在其中根据语言和性别查找占位符值。在伪代码中:
(French, Female) -> ("femmes", "e")
(French, Male) -> ("hommes", "" )
(English, Female) -> ("women", "" )
(English, Male) -> ("men", "" )
不幸的是,这在“english”块中给了我一个错误的参数计数错误;我猜它会计算默认字符串的参数。@Eva你能分享错误或你的代码吗?你是如何使用这个代码的呢有趣的是:对于这个代码if(getString(R.string.locale).equals(constants.locale_EN)){s=res.getString(R.string.str,“…”,”;}
错误/警告如下所示“参数计数错误,format string鼓励注释需要2,但format调用提供1”。而对于这一个if(getString(R.string.locale).equals(constants.locale_EN)){s=res.getString(R.string.str,“…”,”;}
它变为“参数计数错误,格式字符串<代码>鼓励注释代码>需要1,但格式调用提供2“。在这两种情况下,尽管应用程序工作时会崩溃!
<string name="encouraging_comment">
%1$s are complicated...
</string>
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", "" )