2017-07-16 36 views
0

我正在开发一个在Linux和Windows上运行的Qt应用程序。我在德语区域。为什么我需要一个QTranslator来处理Windows上的QMessageBox中的本地化按钮文本?

在Linux上构建它时,我得到了e显示的标准按钮的正确翻译。 G。一个QMessageBox::questionQMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel按钮设置(在我的情况下,“Ja”,“Nein”和“Abbrechen”)。但是,如果我在Windows上构建代码,则只能获得这些按钮的C语言环境(英文)文本(“是”,“否”和“取消”)。

经过一番搜索,我加入

#include <QTranslator> 
#include <QLibraryInfo> 

QTranslator qtTranslator; 
if (qtTranslator.load(QLocale::system(), QString::fromUtf8("qt"), QString::fromUtf8("_"), 
         QLibraryInfo::location(QLibraryInfo::TranslationsPath))) { 
    app.installTranslator(&qtTranslator); 
} 

main.cpp发现了一个全球工作液。

使用这个,我也得到Windows上的翻译字符串。然而,在Linux上,qtTranslator.load调用失败,因此,我之前的状态没有任何反应,所以我最终将代码放在#ifdef Q_OS_WIN块中。

这有用,但对我来说似乎有点不好意思。另外,我不明白为什么我会在Linux上获取翻译的字符串,而不是在Windows上。

是我这样做的正确解决方案吗?如果是这样,为什么我需要Windows上的附加代码?

回答

0

试着替换你的代码并进行测试。

static QTranslator qtTr; 
qtTr.load("qt_" + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath)); 
installTranslator(&qtTr); 
+0

我不认为这会改变任何事情。在我的Linux机器上,'QLibraryInfo :: location(QLibraryInfo :: TranslationsPath)'给了我'/ usr/share/qt5/translations',它甚至不存在。所以它会在Linux上再次失败。那么,在Windows上,它的工作原理就像我在上面发布的那样...我仍然想知道为什么我需要在Windows上而不是在Linux上的代码! –

+0

@TobiasLeupold您使用的是哪个版本的qt? – iMashine

+0

首先5.6.2,然后是5.7.1。两个版本的行为相同。 –

相关问题