首页 > 解决方案 > locale.getDisplayName() 有时有效,有时无效

问题描述

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

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

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 , ETC。

有谁知道为什么?如何确保它更一致地显示正确的单词?

标签: javaandroidlocale

解决方案


这取决于您如何构造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

推荐阅读