web*_*man 5 c++ translation symbian qml qt-quick
我尝试在QML中使用翻译.我开了一个新项目QtQuick项目,我选择QtQuick Componenets for Symbian作为QtQuick应用程序类型.Qt Creator创建了一个包含所有标准文件的应用程序源代码树(main.cpp,main.qml,mainpage.qml ...)
MainPage.qml非常简单:
import QtQuick 1.1
import com.nokia.symbian 1.1
Page {
id: mainPage
Text {
anchors.centerIn: parent
text: qsTr('Hello world!')
color: platformStyle.colorNormalLight
font.pixelSize: 20
}
}
Run Code Online (Sandbox Code Playgroud)
我的main.cpp文件看起来像这样实现QTranslator:
#include "qmlapplicationviewer.h"
#include <QTranslator>
#include <QPushButton>
#include <QDebug>
Q_DECL_EXPORT int main(int argc, char *argv[])
{
QScopedPointer<QApplication> app(createApplication(argc, argv));
QTranslator* translator = new QTranslator;
qDebug()<<"Translating: "<<translator->load(QString("qml/International/inter_en"));
app->installTranslator(translator);
//QPushButton hello(QPushButton::tr("Hello world!"));
// hello.resize(100, 30);
// hello.show();
QScopedPointer<QmlApplicationViewer> viewer(QmlApplicationViewer::create());
viewer->setMainQmlFile(QLatin1String("qml/International/main.qml"));
viewer->showExpanded();
return app->exec();
}
Run Code Online (Sandbox Code Playgroud)
然后我运行lupdate mainpage.qml -ts inter_en.ts,我用语言学家来翻译POSIX表达式"Hello world!" 别的东西只是测试它正在翻译.然后我用语言学家创建了inter_en.qm文件.
但是当我在模拟器上运行应用程序时,我不会得到"Hello world!" 翻译,虽然翻译成功加载(我在qDebug中得到"翻译:真实").
我确信翻译工作正常,因为当我用QPushButton去除部分代码时,(我再次为此目的重复lupdate和语言学的东西),然后是"Hello world!" QPushButton中的表达式被正确翻译.
只有QmlApplicationViewer和QML文件无法正确执行转换.有问题?????
谢谢
UPDATE
我发现了以下内容:MainPage.qml作为可重用组件导入main.qml.如果我在main.qml中使用qsTr(),则在main.qml中正确翻译文本.但是,MainPage.qml中的文本未正确转换.我想由于将其导入为可重用组件.任何意见?经验?
更新2 - 解决方案
需要以区分大小写的方式创建翻译文件:
lupdate mainpage.qml -ts myapp_sk.ts is wrong
lupdate MainPage.qml -ts myapp_sk.ts is correct
Run Code Online (Sandbox Code Playgroud)
小智 0
我还使用 QML 文件作为可重用组件,并且翻译完全没有问题。所以我想以下内容也可以帮助你。
我还猜想您不想为每个文件手动调用 lupdate 。因此,您应该在 .pro 文件中使用以下行,使其自动查找 QML 和 JS 文件中的所有可翻译短语(更正您的路径)...
lupdate_hack{
SOURCES += qml/*.qml \
qml/*.js
}
TRANSLATIONS = \
langs/WakeOnLAN_cs.ts \
langs/WakeOnLAN_pl.ts \
langs/WakeOnLAN_es.ts \
langs/WakeOnLAN_fr.ts \
langs/WakeOnLAN_it.ts \
langs/WakeOnLAN_hu.ts \
langs/WakeOnLAN_fa.ts \
langs/WakeOnLAN_de.ts \
langs/WakeOnLAN_pt.ts
CODECFORTR = UTF-8
Run Code Online (Sandbox Code Playgroud)
它不是来自我的头脑,所以这里是来源(还有关于动态翻译的注释):https ://forum.qt.io/topic/30076/is-there-a-way-to-use -全球语境中的语言学家
| 归档时间: |
|
| 查看次数: |
2027 次 |
| 最近记录: |