为啥我需要一个 QTranslator 来在 Windows 上的 QMessageBox 中本地化按钮文本?
Posted
技术标签:
【中文标题】为啥我需要一个 QTranslator 来在 Windows 上的 QMessageBox 中本地化按钮文本?【英文标题】:Why do I need a QTranslator for localized button texts in a QMessageBox on Windows?为什么我需要一个 QTranslator 来在 Windows 上的 QMessageBox 中本地化按钮文本? 【发布时间】:2017-07-16 19:57:34 【问题描述】:我正在开发一个在 Linux 和 Windows 上运行的 Qt 应用程序。我在德国地区。
在 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
块中。
这可行,但对我来说似乎有点 hacky。另外,我不明白为什么我默认在 Linux 上而不是在 Windows 上得到翻译后的字符串。
我的做法是正确的解决方案吗?如果是这样,我为什么在 Windows 上需要额外的代码?
【问题讨论】:
【参考方案1】:尝试在此替换您的代码并进行测试。
static QTranslator qtTr;
qtTr.load("qt_" + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath));
installTranslator(&qtTr);
【讨论】:
我认为这不会改变任何事情。在我的 linux 机器上,QLibraryInfo::location(QLibraryInfo::TranslationsPath)
给了我/usr/share/qt5/translations
,它甚至不存在。所以它会在 Linux 上再次失败。好吧,在 Windows 上,它就像我在上面发布的那样工作......我仍然想知道为什么我需要在 Windows 上而不是在 Linux 上的代码!
@TobiasLeupold 你用的是什么版本的qt?
先是 5.6.2,然后是 5.7.1。两个版本的行为相同。
@TobiasLeupold 编译器呢? msvc, mingw?
Linux 上的 cmake + gcc,Windows 上的 cmake + mingw 和 qmake + mingw。以上是关于为啥我需要一个 QTranslator 来在 Windows 上的 QMessageBox 中本地化按钮文本?的主要内容,如果未能解决你的问题,请参考以下文章
为啥需要方括号来在 Javascript 中对 Map 的所有元素进行字符串化?
为啥 g++ 需要 -fpermissive 标志来在 c++ 中打印迭代器值? [关闭]
如何基于 QTranslator 更改 QPushButton 的图标字符串