2017-10-12 90 views
0

看起来大多数关于QTranslator的文档和安装它们的QApplication对于QLocale都假设为simplistic cases具有真实世界的Canonical QTranslator示例QLocale

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

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

这里some code得到它的权利,但是有点太麻烦。

回答

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