首页 > 其他 > 详细

qml国际化

时间:2014-03-07 08:12:39      阅读:747      评论:0      收藏:0      [点我收藏+]

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 t1_fr.ts
        可以同时对qml文件生成多种语言的ts文件                                   eg.     lupdate  main.qml text.qml button.qml -ts t1_fr.ts t1_en_ts
        note:  ts不会覆盖,可以多次lupdate更新
         
    三、使用Qt自带的Linguist工具翻译为目标语言 
     
    四、生成qm文件,既是我们需要的语言转换文件         
            可以使用两种方法生成:   1、命令行中使用lrelease生成qm文件    eg.  lrelease t1_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翻译
            eg1.  
            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);
        }
 
        

  

qml国际化,布布扣,bubuko.com

qml国际化

原文:http://www.cnblogs.com/fuyanwen/p/3585025.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!