我创造了一个
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.)"