获取Qt5中的语言列表

时间:2014-10-10 20:41:15

标签: c++ qt locale qt5

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

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

这正是我所需要的。我假设我可以手动过滤掉列表,但是存在更好的替代方案吗?

1 个答案:

答案 0 :(得分:4)

您可以执行此操作或执行不太好的操作(请参阅本文末尾)并手动过滤列表中的重复语言,例如:如果你想要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枚举上手动迭代然后解析结果来构造QLocale::Language个对象,但是我强烈建议不要这样做,因为这个枚举可能更改(例如使用Qt 5.3)然后您的应用程序不会捕获新语言,直到您手动更新迭代范围。