我正在开发一个在Linux和Windows上运行的Qt应用程序。我在德语区域。为什么我需要一个QTranslator来处理Windows上的QMessageBox中的本地化按钮文本?
在Linux上构建它时,我得到了e显示的标准按钮的正确翻译。 G。一个QMessageBox::question
与QMessageBox::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上的附加代码?
我不认为这会改变任何事情。在我的Linux机器上,'QLibraryInfo :: location(QLibraryInfo :: TranslationsPath)'给了我'/ usr/share/qt5/translations',它甚至不存在。所以它会在Linux上再次失败。那么,在Windows上,它的工作原理就像我在上面发布的那样...我仍然想知道为什么我需要在Windows上而不是在Linux上的代码! –
@TobiasLeupold您使用的是哪个版本的qt? – iMashine
首先5.6.2,然后是5.7.1。两个版本的行为相同。 –