具有真实 QLocale 的 Canonical QTranslator 示例

Posted

技术标签:

【中文标题】具有真实 QLocale 的 Canonical QTranslator 示例【英文标题】:Canonical QTranslator example with real-world QLocale 【发布时间】:2017-10-12 19:32:02 【问题描述】:

似乎大多数关于QTranslator 和为QApplication 安装它们的文档都假定simplistic cases 为QLocale

在现实世界中,用户的区域设置必须考虑语言和国家/地区,这通常通过首先为一种语言 (en) 获取翻译文件,然后为使用该语言的每个国家/地区添加额外的翻译文件来实现 ( en_US)。

使用默认的QLocale(),加载适当的翻译文件(一个、两个或无,取决于存在哪些)最优雅的方式是什么?

这里some code 是正确的,但是有点太麻烦了。

【问题讨论】:

【参考方案1】:
bool Application::installTranslator(QString localeName)

  QTranslator* translator = new QTranslator(this);

  QString fileToLoad = ":/translators/translation_" + localeName + ".qm";

  if (!QFile::exists(fileToLoad))
    return;

  if (translator->load(fileToLoad)) // Caution this will perform stripping of '_' heuristic
    QApplication::installTranslator(translator);


void Application::installTranslator()

  QLocale locale;
  boost::optional<QString> optLanguage = m_commandLineParser->getLanguage();
  if (optLanguage)
    locale = QLocale(optLanguage.get());

  // Load language (en, de, etc.) translator first
  QString language = locale.name().left(2);
  installTranslator(language);

  // Load country translator (en_US, de_CH, etc.) translator second
  installTranslator(locale.name());

【讨论】:

以上是关于具有真实 QLocale 的 Canonical QTranslator 示例的主要内容,如果未能解决你的问题,请参考以下文章

QLocale::Language相关枚举结果

QLocale::Language相关枚举结果

QLocale::Language相关枚举结果

如何在 Qt/PyQt/PySide 中找到当前的 QLocale?

Qt国际化相关类(以前没见过codec->toUnicode,QTextCodec,QLocale.toString和QLocale::setDefault,QInputMethod::loca

如何强制 QLocale::system 改变