How to get the language/country name in my system locale language
我正在使用Qt编写一个必须将某些语言的名称显示为文本的应用程序。 我已将系统语言环境设置为es_ES。 这样,我想用西班牙语获得几种语言和国家名称。 但是,我只能使用母语或英语:
1 2 3 4 | QLocale lsystem = QLocale::system(); QLocale lswiss("de_CH"); qDebug()<<"system"<<lsystem.name() << lsystem.languageToString(lsystem.language()) << lsystem.nativeLanguageName(); qDebug()<<"swiss"<<lswiss.name() << lsystem.languageToString(lswiss.language()) << lswiss.nativeLanguageName(); |
此源代码显示以下文本:
1 2 | 20:17:09.229 [DEBUG]: system "es_ES""Spanish""espa?ol de Espa?a" 20:17:09.229 [DEBUG]: swiss "de_CH""German""Schweizer Hochdeutsch" |
我期望的是
如果不使用Qt的翻译工具来翻译每种语言名称,我能否得到想要的东西? 先感谢您。
您可以使用Qt的翻译系统来进行此操作,此外,它已经为多语言应用程序做好了准备,不仅是西班牙语。 缺点是您必须创建列表并将其翻译(您可以用Google搜索一些几种语言的预建表格)。
1 2 3 | QString languageNameInCurrentLocale(const QLocale& loc) { return qApp->translate("locale_name", loc.name().toStdString().c_str()); } |
由于您的代码中没有字符串文字,因此必须手动将它们添加到翻译系统中。 您可以使用
初始列表可以在预编译步骤中生成,该步骤在所有语言环境中进行迭代(例如,如此答案所示),并打印出此类信息(在此示例中,将输出重定向到C ++文件)。 将文件添加到您的项目并更新翻译文件。
1 2 3 4 5 6 7 8 9 10 | void printLocaleList() { const auto allLocales = QLocale::matchingLocales(QLocale::AnyLanguage, QLocale::AnyScript, QLocale::AnyCountry); for (auto loc : allLocales) { std::cout <<"QT_TRANSLATE_NOOP("locale_name", "" << loc.name().toStdString() <<""); "; } } |