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