Canonical QTranslator与真实世界QLocale的例子

时间:2017-10-12 19:32:02

标签: c++ qt internationalization qtranslator

似乎QTranslator上的大多数文档以及为QApplication安装文档都假定QLocalesimplistic cases

在现实世界中,用户的语言环境必须考虑语言和国家/地区,这通常通过首先为语言(en)提供翻译文件,然后使用该语言为每个国家/地区提供其他翻译文件来实现。语言(en_US)。

使用默认的QLocale(),加载相应翻译文件的最优雅方式是什么(一个,两个或没有,具体取决于存在的文件)?

这里some code表示正确,但有点过于繁琐。

1 个答案:

答案 0 :(得分:0)

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