我希望从QLocale
获取ISO 639语言列表。我可以使用此代码获取语言/国家/地区的所有组合。
QList<QLocale> allLocales = QLocale::matchingLocales(
QLocale::AnyLanguage,
QLocale::AnyScript,
QLocale::AnyCountry);
这正是我所需要的。我假设我可以手动过滤掉列表,但是存在更好的替代方案吗?
答案 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)然后您的应用程序不会捕获新语言,直到您手动更新迭代范围。