0

我正在开发一个在 Linux 和 Windows 上运行的 Qt 应用程序。我在德国地区。

在 Linux 上构建它时,我得到了标准按钮的正确翻译,例如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块中。

这可行,但对我来说似乎有点hacky。另外,我不明白为什么我默认在 Linux 上而不是在 Windows 上得到翻译后的字符串。

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

4

1 回答 1

0

尝试在此替换您的代码并进行测试。

static QTranslator qtTr;
qtTr.load("qt_" + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath));
installTranslator(&qtTr);
于 2017-07-17T02:47:29.143 回答