用户界面的vc ++ + QT翻译无效

时间:2016-01-27 10:15:38

标签: c++ qt visual-studio-2012 translation qt-linguist

我在vc ++中有一个QT项目,我需要在UI中找到不同语言的字符串。我通过Visual Studio 2012的visual studio add中的QTdesigner创建了一个用户界面,我也安装了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>

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

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

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

有关我遗失的内容或我可以查看的内容的任何线索?

非常感谢

2 个答案:

答案 0 :(得分:0)

你确定,那是&#34; languagefileqt_es&#34;是您的语言文件的正确名称?我希望&#34; languagefileqt_es.qm&#34;代替。

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

答案 1 :(得分:0)

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

我认为我犯了一个错误,就是不知道翻译机制是如何运作的。在我的main.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);

在加载过程之后,它将返回正确翻译的字符串。所以我在国际化之后改变了我的用户界面的定义并且它起作用了。显然,翻译是在一个名为 retranslateUi()的函数中完成的,该函数在构造函数中被调用。

正确的main.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(); 
}