locale.getDisplayName() 有时有效,有时无效

locale.getDisplayName() sometimes works, sometimes does not

我正在编写一个 android 应用程序来帮助人们练习外语。有两个按钮允许用户在语言之间进行选择。然后按钮的文本相应地改变。此外,所选语言会保存并在应用下次启动时重新加载。

我使用以下方法来做到这一点:

public static Locale[] language = new Locale[2];
public static TextToSpeech[] tts = new TextToSpeech[2];
private Button[] langButton = new Button[2];

public void setLanguageTtsButton(int listNum) {
        tts[listNum].setLanguage(language[listNum]);
        String s = language[listNum].getDisplayName().replace("(", "\n(");
        langButton[listNum].setText(s);
    }

并且整个应用程序中没有其他代码设置这些按钮的文本。

问题是有时能正常显示按钮,例如英文(美国),中文(简体中文,中国)等。但是,有时它只显示原始语言环境代码,例如en_us、zh_ch_#hans 等

有谁知道为什么?我怎样才能确保它更一致地显示正确的单词?

这取决于您如何构建 Locale 对象

以下是示例及其输出

Log.d("TAG", new Locale("ENGLISH", "US").getDisplayName());  // english (United States)
Log.d("TAG", new Locale("ENGLISH").getDisplayName()); // english
Log.d("TAG", new Locale("En").getDisplayName()); // English
Log.d("TAG", new Locale("ENGLISH", "CA").getDisplayName()); // english (Canada)
Log.d("TAG", new Locale("ENGLISH", "AU").getDisplayName()); // english (Australia)
Log.d("TAG", new Locale("ENGLISH", "EG").getDisplayName()); // english (Egypt)
Log.d("TAG", new Locale("ENGLISH", "CA", "Canadian").getDisplayName()); // english (Canada,CANADIAN)
Log.d("TAG", new Locale("en_us").getDisplayName()); // en_us