java - 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。
有谁知道为什么?如何确保它更一致地显示正确的单词?
解决方案
这取决于您如何构造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
推荐阅读
- python - 输入'int'没有可行的替代方法-带有Python Parser的ANTLR 4
- android - 工作室 3.2.1 中的 kapt 编译器问题,带有数据绑定和空间
- javascript - 在数据表中使用 column().visible() 隐藏列不起作用
- ios - UITextField 不响应以编程方式创建的 UI 中的点击
- python - 从函数调用时显示混淆矩阵
- dynamic - 具有可变长度的 Char 字段的动态类型定义
- node.js - 创建 Wrapper 类以抽象在节点 js 中使用 RabbitMQ 的最佳方式或模式是什么
- sql - 为sql server中的重复值生成ID
- c++ - 从类中返回一个函数
- http - 是否可以在浏览器中为 Back-Forward 缓存设置超时?