似乎QTranslator
上的大多数文档以及为QApplication
安装文档都假定QLocale
为simplistic cases。
在现实世界中,用户的语言环境必须考虑语言和国家/地区,这通常通过首先为语言(en
)提供翻译文件,然后使用该语言为每个国家/地区提供其他翻译文件来实现。语言(en_US
)。
使用默认的QLocale()
,加载相应翻译文件的最优雅方式是什么(一个,两个或没有,具体取决于存在的文件)?
这里some code表示正确,但有点过于繁琐。
答案 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());
}