Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android多语言支持:占位符计数不同导致字符串格式问题_Android_Xml_String_Localization_String Formatting - Fatal编程技术网

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",    "" )