Android 多语言支持:由于占位符计数不同导致的字符串格式问题
Android multilanguage support: string formatting issue due to different placeholder counts
我正在制作一个法语 Android 应用程序,我正在努力支持英语。
我使用 "placeholders" 来格式化我的字符串,这样我就可以使它们适应男性和女性用户。例如,我的 strings.xml
文件中的这个字符串:
<string name="encouraging_comment">
Les %1$s sont compliqué%2$ss...
</string>
会变成"Les hommes sont compliqués"(男人很复杂)或者"Les femmes sont compliquées"(女人很复杂").
这就是我的问题。字符串翻译,如下...
<string name="encouraging_comment">
%1$s are complicated...
</string>
...只需要一个占位符,而对应的法语需要两个。
我该如何处理这个问题?
提前致谢。
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);
希望对您有所帮助:)
一种方法是在 strings.xml
中创建一个字符串 locale
用于 英语 Strings.xml
<string name="locale">En</string>
法语 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;
}
在渲染字符串时,只需省略英文模板字符串中的第二个占位符,并为第二个参数使用空字符串(或任何其他字符串,没关系,该值将被忽略):
XML:
<string name="encouraging_comment">
%1$s are complicated...
</string>
Java:
getString(R.string.encouraging_comment, "women", "");
getString(R.string.encouraging_comment, "men", "");
之所以有效,是因为如果参数比占位符多,只有当参数比占位符少时才不会出错。
我假设您会有某种 table 或映射,您可以在其中根据语言和性别查找占位符值。在伪代码中:
(French, Female) -> ("femmes", "e")
(French, Male) -> ("hommes", "" )
(English, Female) -> ("women", "" )
(English, Male) -> ("men", "" )
我正在制作一个法语 Android 应用程序,我正在努力支持英语。
我使用 "placeholders" 来格式化我的字符串,这样我就可以使它们适应男性和女性用户。例如,我的 strings.xml
文件中的这个字符串:
<string name="encouraging_comment">
Les %1$s sont compliqué%2$ss...
</string>
会变成"Les hommes sont compliqués"(男人很复杂)或者"Les femmes sont compliquées"(女人很复杂").
这就是我的问题。字符串翻译,如下...
<string name="encouraging_comment">
%1$s are complicated...
</string>
...只需要一个占位符,而对应的法语需要两个。
我该如何处理这个问题? 提前致谢。
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);
希望对您有所帮助:)
一种方法是在 strings.xml
locale
用于 英语 Strings.xml
<string name="locale">En</string>
法语 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;
}
在渲染字符串时,只需省略英文模板字符串中的第二个占位符,并为第二个参数使用空字符串(或任何其他字符串,没关系,该值将被忽略):
XML:
<string name="encouraging_comment">
%1$s are complicated...
</string>
Java:
getString(R.string.encouraging_comment, "women", "");
getString(R.string.encouraging_comment, "men", "");
之所以有效,是因为如果参数比占位符多,只有当参数比占位符少时才不会出错。
我假设您会有某种 table 或映射,您可以在其中根据语言和性别查找占位符值。在伪代码中:
(French, Female) -> ("femmes", "e")
(French, Male) -> ("hommes", "" )
(English, Female) -> ("women", "" )
(English, Male) -> ("men", "" )