http://qt-project.org/wiki/How_to_do_dynamic_translation_in_QML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 |
qml internationalization 步骤 一、对需要国际化的地方加上qsTr eg. text: qsTr( "Welcome to china!" ); 二、生成ts文件: ts文件生成方法: 在Qt Command Prompt命令行中使用lrelease生成 eg. lupdate main.qml -ts t 1 _fr.ts 可以同时对qml文件生成多种语言的ts文件 eg. lupdate main.qml text.qml button.qml -ts t 1 _fr.ts t 1 _en_ts note: ts不会覆盖,可以多次lupdate更新 三、使用Qt自带的Linguist工具翻译为目标语言 四、生成qm文件,既是我们需要的语言转换文件 可以使用两种方法生成: 1 、命令行中使用lrelease生成qm文件 eg. lrelease t 1 _fr.ts 2 、使用Linguist自带的工具, 点击 文件->发布(release)既可生成qm文件 五、使用Translator类load qm文件 再install Translator eg. 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的方法 (note: 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); } |
原文:http://www.cnblogs.com/fuyanwen/p/3585025.html