我创建了一个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
从语言代码构造 a 来获取语言名称。
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.)"