我创建了一个QComboBox来列出Qt应用程序中支持的各种语言。为了填充组合框中的项,我在所有.qm文件中搜索可用的语言代码。
QDir dir(TRANSLATION_PATH);
QStringList file_names = dir.entryList(QStringList("MyApp_*.qm"));
QStringList language_codes;
for (const QString& file_name : file_names) {
QString code = file_name; // "MyApp_de.qm"
code.truncate(code.lastIndexOf('.')); // "MyApp_de"
code.remove(0, code.indexOf('_') + 1);// "de"
language_codes.push_back(code);
}然后,通过从语言代码构造一个QLocale来获得语言名称。
for (const QString& language_code : language_codes) {
QString lang = QLocale::languageToString(QLocale(language_code).language());
_ui->cboLanguage->addItem(lang, language_code);
}问题是,我有相同名称的语言zh_CN和zh_TW显示为中文,en_US和en_UK显示为英语。
我的问题是:是否有一种简单、非易碎的方法来获得这些语言的“长”名称?例如,如果存在类似于以下内容的内容:
QString ui_text = QLocale(language_code).longLanguageName();
// language_code -> ui_text
// ============= =======
// "zh_CN" "Chinese (Simplified)"
// "zh_TW" "Chinese (Traditional)"
// "en_US" "English (U.S.)"
// "en_UK" "English (U.K.)"发布于 2019-01-05 00:57:46
您可以根据使用的格式检查语言代码是否包含“分隔符”符号( -或_ ),如果包含,则通过QLocale::languageToString()和QLocale::countryToString()组合长字符串。否则你只需要语言。
当然,该解决方案将为您提供Chinese (Taiwan)而不是Chinese (Traditional)和English (United Kingdom),而不是English (U.K.)。
或者,您可以简单地使用地图,并为支持的语言手工填充自定义和地缘政治正确的条目。
虽然更常见的做法似乎是让每种语言的名称都用母语书写。
还请注意,英国的英语代码实际上是en_GB,en_UK将给您美国,至少在Qt中。(我想是挥之不去的帝国主义;)
https://stackoverflow.com/questions/54047034
复制相似问题