qml国际化

步骤
     一、对需要国际化的地方加上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);
         }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值