首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从QLocale中获得语言的“长”名称?

如何从QLocale中获得语言的“长”名称?
EN

Stack Overflow用户
提问于 2019-01-04 22:29:57
回答 1查看 361关注 0票数 1

我创建了一个QComboBox来列出Qt应用程序中支持的各种语言。为了填充组合框中的项,我在所有.qm文件中搜索可用的语言代码。

代码语言:javascript
复制
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来获得语言名称。

代码语言:javascript
复制
for (const QString& language_code : language_codes) {
    QString lang = QLocale::languageToString(QLocale(language_code).language());
    _ui->cboLanguage->addItem(lang, language_code);
}

问题是,我有相同名称的语言zh_CNzh_TW显示为中文,en_USen_UK显示为英语。

我的问题是:是否有一种简单、非易碎的方法来获得这些语言的“长”名称?例如,如果存在类似于以下内容的内容:

代码语言:javascript
复制
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.)"
EN

回答 1

Stack Overflow用户

发布于 2019-01-05 00:57:46

您可以根据使用的格式检查语言代码是否包含“分隔符”符号( -_ ),如果包含,则通过QLocale::languageToString()QLocale::countryToString()组合长字符串。否则你只需要语言。

当然,该解决方案将为您提供Chinese (Taiwan)而不是Chinese (Traditional)English (United Kingdom),而不是English (U.K.)

或者,您可以简单地使用地图,并为支持的语言手工填充自定义和地缘政治正确的条目。

虽然更常见的做法似乎是让每种语言的名称都用母语书写。

还请注意,英国的英语代码实际上是en_GBen_UK将给您美国,至少在Qt中。(我想是挥之不去的帝国主义;)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54047034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档