用户界面的 vc++ + QT 翻译不起作用

vc++ + QT translation of UI is not working

本文关键字:翻译 不起作用 QT vc++ 用户界面      更新时间:2023-10-16

我有一个使用 vc++ 的 QT 项目,我需要在 UI 中找到不同语言的字符串。我通过Visual Studio 2012的Visual Studio Add中的QTdesigner创建了一个UI,并且我还安装了QT插件来使用Qt功能。

我创建了一个 .pro 文件并添加了:

SOURCES      += main.cpp
TRANSLATIONS += languagefileqt_es.ts

在我生成一个语言学家文件 SOURCES emminensmultiportqt_es.ts 并且它正确检测到我的 IU 中的所有字符串后。之后,我使用 Qtlinguist 的发布功能生成 .qm 文件。

我的资源文件是:

<RCC>
    <qresource prefix="MyAppQT">
        <file>languagefileqt_es.qm</file>
    </qresource>
</RCC>

然后我把它添加到我的主.cpp:

QTranslator translator;
bool loaded = translator.load("languagefileqt_es");
qDebug() << "loaded " << loaded;
a.installTranslator(&translator);

并且加载在所有情况下都返回 true。我的问题是执行应用程序时未转换 UI。这很奇怪,因为它没有效果。

关于我缺少什么或我可以查看什么的任何线索?

多谢

您确定"languagefileqt_es"是您的语言文件的正确名称吗?我希望改为"languagefileqt_es.qm"。

您确定从正确的目录加载吗?除非是从内部编译的资源 (:/languagefileqt_es.qm) 加载的,否则您应该引用绝对路径以确保加载正确的内容。

我发现了问题所在。 感谢@Jens尝试提供帮助。

我想我犯了一个错误,不知道翻译机制是如何工作的。在我的主要.cpp我有:

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindowQT w;
QTranslator translator;
bool loaded = translator.load("languagefileqt_es");
qDebug() << "loaded " << loaded;
a.installTranslator(&translator);
w.show();
return a.exec(); 
} 

但我意识到,如果我执行

qDebug() <<  QApplication::translate("MainWindowQTClass", "...BOARDING", 0);

加载过程完成后,它将返回正确翻译的字符串。所以我在国际化后更改了我的 UI 的定义,它奏效了。显然,翻译是在一个名为retranslateUi()的函数中完成的,该函数在构造函数中调用。

正确的主.cpp应该是:

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTranslator translator;
bool loaded = translator.load("languagefileqt_es");
qDebug() << "loaded " << loaded;
a.installTranslator(&translator);
MainWindowQT w;
w.show();
return a.exec(); 
}