繁体   English   中英

获取Qt5中的语言列表

[英]Get list of languages in Qt5

我想从QLocale获取ISO 639语言的列表。 我可以使用此代码来获取语言/国家/地区的所有组合。

QList<QLocale> allLocales = QLocale::matchingLocales(
        QLocale::AnyLanguage,
        QLocale::AnyScript,
        QLocale::AnyCountry);

这正是我所需要的。 我假设可以手动过滤列表,但是是否存在更好的选择?

您可以执行此操作,也可以执行不尽人意的操作(请参阅本文结尾),并手动从列表中过滤重复的语言,例如,如果您想要ISO 639语言名称:

QList<QLocale> allLocales = QLocale::matchingLocales(
            QLocale::AnyLanguage,
            QLocale::AnyScript,
            QLocale::AnyCountry);
QSet<QString> iso639Languages;

for(const QLocale &locale : allLocales) {
    iso639Languages.insert(QLocale::languageToString(locale.language()));
}

qDebug() << iso639Languages;

然后, iso639Languages包含由ISO 639分类并由Qt已知的所有语言的名称。 请注意,它确实包含语言名称(例如德语), 而不包含ISO 639代码(例如de)。

如果您需要ISO 639代码,请执行以下操作:

QList<QLocale> allLocales = QLocale::matchingLocales(
            QLocale::AnyLanguage,
            QLocale::AnyScript,
            QLocale::AnyCountry);
QSet<QString> iso639LanguageCodes;

for(const QLocale &locale : allLocales) {
    iso639LanguageCodes.insert(locale.name().split('_').first());
}

qDebug() << iso639LanguageCodes;

也可以通过在QLocale::Language枚举上手动迭代然后解析结果来构造QLocale对象, 我强烈建议不要这样做,因为此枚举可能会更改(例如Qt 5.3会更改),然后您的应用程序将赢得在您手动更新迭代范围之前,请不要使用新的语言。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM