获取Qt5中的语言列表

Get list of languages in Qt5

本文关键字:语言 列表 Qt5 获取      更新时间:2023-10-16

我想从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;

CCD_ 2则包含由ISO639分类并由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中发生了变化),然后您的应用程序在手动更新迭代范围之前不会捕获新语言。