我想从中获取ISO 639语言的列表QLocale
。我可以使用此代码来获取语言/国家/地区的所有组合。
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
通过手动遍历QLocale::Language
枚举然后解析结果来构造对象,但我强烈建议不要这样做,因为此枚举可能会更改(例如Qt 5.3确实如此),然后您的应用程序将无法捕获新的语言,直到您手动更新迭代范围。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句