Android多语言支持(由于占位符计数不同导致的字符串格式问题)

白日放歌须纵酒,青春作伴好还乡。这篇文章主要讲述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>

【Android多语言支持(由于占位符计数不同导致的字符串格式问题)】然后设置字符串
switch (getString(R.string.locale)) { case "Fr": //set your string for French break; case "En": //set your string for English break; }


    推荐阅读