vc++ + UI 的 QT 翻译不工作
vc++ + QT translation of UI is not working
我在 vc++ 中有一个 QT 项目,我需要将 UI 中的字符串定位到不同的语言。我在 visual studio 2012 的 visual studio 插件中通过 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>
然后我将其添加到我的 main.cpp:
QTranslator translator;
bool loaded = translator.load("languagefileqt_es");
qDebug() << "loaded " << loaded;
a.installTranslator(&translator);
并在所有情况下加载 returns true。我的问题是 UI 在应用程序执行时没有被翻译。这很奇怪,因为它没有效果。
关于我遗漏了什么或我可以检查什么的任何线索?
非常感谢
您确定 "languagefileqt_es" 是您的语言文件的正确名称吗?我希望 "languagefileqt_es.qm" 相反。
您确定从正确的目录加载吗?除非您从内部 compiled-in 资源 (:/languagefileqt_es.qm) 加载,否则您应该参考绝对路径以确保您加载正确的内容。
我发现了问题所在。感谢@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);
加载过程完成后,它将 return 字符串正确翻译。所以我在国际化之后改变了我的 UI 的定义并且它起作用了。显然,翻译是在构造函数中调用的名为 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();
}
我在 vc++ 中有一个 QT 项目,我需要将 UI 中的字符串定位到不同的语言。我在 visual studio 2012 的 visual studio 插件中通过 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>
然后我将其添加到我的 main.cpp:
QTranslator translator;
bool loaded = translator.load("languagefileqt_es");
qDebug() << "loaded " << loaded;
a.installTranslator(&translator);
并在所有情况下加载 returns true。我的问题是 UI 在应用程序执行时没有被翻译。这很奇怪,因为它没有效果。
关于我遗漏了什么或我可以检查什么的任何线索?
非常感谢
您确定 "languagefileqt_es" 是您的语言文件的正确名称吗?我希望 "languagefileqt_es.qm" 相反。
您确定从正确的目录加载吗?除非您从内部 compiled-in 资源 (:/languagefileqt_es.qm) 加载,否则您应该参考绝对路径以确保您加载正确的内容。
我发现了问题所在。感谢@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);
加载过程完成后,它将 return 字符串正确翻译。所以我在国际化之后改变了我的 UI 的定义并且它起作用了。显然,翻译是在构造函数中调用的名为 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();
}