gpt4 book ai didi

c++ - 如何以我的系统区域设置语言获取语言/国家/地区名称

转载 作者:行者123 更新时间:2023-11-30 03:29:04 30 4
gpt4 key购买 nike

我正在使用 Qt 编写一个应用程序,该应用程序必须将某些语言的名称显示为文本。我已将我的系统区域设置为 es_ES。这样,我想用西类牙语获得几种语言和国家名称。但是,我只能得到母语,或者英文:

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();

此源代码打印以下文本:

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"

我期望的是 QLocale::languageToString() 方法可以用我的系统区域设置语言返回名称,但事实并非如此。我想获得西类牙语(español、alemán)的名字,但我不知道该怎么做。

我是否可以在不使用 Qt 的翻译实用程序翻译每种语言名称的情况下获得我想要的内容?提前谢谢你。

最佳答案

您可以使用 Qt 的翻译系统来做到这一点,此外,它已经为多语言应用程序做好了准备,而不仅仅是西类牙语。缺点是您必须创建列表并翻译它(您可以在谷歌上搜索一些预建的多种语言的表格)。

QString languageNameInCurrentLocale(const QLocale& loc) {
return qApp->translate("locale_name", loc.name().toStdString().c_str());
}

由于您的代码中没有字符串文字,因此您必须手动将它们添加到翻译系统中。您可以使用 QT_TRANSLATE_NOOP去做。

初始列表可以在遍历所有语言环境的预编译步骤中生成(例如 this answer 中所示)并打印此类信息(在此示例中将输出重定向到 C++ 文件)。将文件添加到您的项目并更新您的翻译文件。

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() << "\");\n";
}
}

关于c++ - 如何以我的系统区域设置语言获取语言/国家/地区名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45967608/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com