步骤
一、对需要国际化的地方加上qsTr:
text: qsTr(
"Welcome to china!"
);
二、生成ts文件:
在Qt Command Prompt命令行中使用lrelease生成:lupdate main.qml -ts t
1
_fr.ts.
可以同时对qml文件生成多种语言的ts文件:lupdate main.qml text.qml button.qml -ts t
1
_fr.ts t
1
_en_ts
ps:ts不会覆盖,可以多次lupdate更新
三、使用Qt自带的Linguist工具翻译为目标语言
四、生成qm文件,既是我们需要的语言转换文件
可以使用两种方法生成:
1
、命令行中使用lrelease生成qm文件:lrelease t
1
_fr.ts;
2
、使用Linguist自带的工具, 点击 文件->发布(release)既可生成qm文件
五、使用Translator类load qm文件再install Translator
QTranslator * translator; = new QTranslator(this); translator->load(
"t1_fr"
,
"."
);
qApp->installTranslator(translator);
六、动态切换语言时需要notifiy每个qsTr的string来刷新显示方法如下:
Q_PROPERTY(QString emptyString READ getEmptyString NOTIFY languageChanged)languageChanged为信号,
可以用qsTr(
"Welcome to china!"
) + emptyString 的方法.(ps: emptyString 需要暴露给qml,具体方法查看qt文档)。
七、关于国际化 ListElement中的数据方法有两种:
1
、ListElement使用QT_TR_NOOP进行标记,在使用时用qsTr翻译
eg
1
.
ListModel {
id: listModel
ListElement {title: QT_TR_NOOP(
"Math"
);}
ListElement {title: QT_TR_NOOP(
"Chinese"
);}
ListElement {title: QT_TR_NOOP(
"English"
);}
ListElement {title: QT_TR_NOOP("Sports);}
}
delegate: {
text: qsTr(title);
}
2
、在ListElement中用js function进行返回
ListModel {
id: listModel_
2
ListElement {}
ListElement {}
ListElement {}
ListElement {}
function title(index) {
if ( title[
"text"
] === undefined) {
title.text = [
qsTr(
"Math"
) ,
qsTr(
"Chinese"
) ,
qsTr(
"English"
) ,
qsTr(
"Sports"
)
]
}
return title.text[index]
}
}
delegate: {
text: title(index);
}