【问题标题】:How to get the language/country name in my system locale language如何以我的系统区域设置语言获取语言/国家/地区名称
【发布时间】:2017-08-30 18:37:46
【问题描述】:

我正在使用 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 中是不可能的,我建议创建一个包含该信息的文件并从那里读取。

标签: c++ qt


【解决方案1】:

您可以使用 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";
  }
}

【讨论】:

  • 很高兴为您提供帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
  • 1970-01-01
相关资源
最近更新 更多