zoukankan      html  css  js  c++  java
  • 对在Qtopia中添加国际化支持一文补充

    经过对Qt的分析,  发现实际上qt的原理是将各种文字编码先转化为utf8编码,然翻译为qm文件来显示本地字符!
    这里不使用findstr、msg2qm工具,而采用另外的qt工具lupdate 、lrelease、linguist来完成本地化操作


    以qt2/tutorial/t1 作为中文翻译例子
    进行了少部分修改,加入了中文字体支持
    #include <qapplication.h>
    #include <qpushbutton.h>
    #include <qtranslator.h>

    int main( int argc, char **argv )
    {
        QApplication a( argc, argv );

       //加载中文字体
        //QFont font("wenquanyi",14,50,FALSE,QFont::Unicode);
        QFont font("unifont",14,50,FALSE,QFont::Unicode);

        a.setFont( font );

        //关键代码 ,加载qm
        QTranslator *translator = new QTranslator(0);
        translator->load( "t1_zh.qm", "." );

        a.installTranslator( translator );
        QPushButton hello( QPushButton::tr("Hello world!"), 0 );
        hello.resize( 100, 30 );

        a.setMainWidget( &hello );
        hello.show();
        return a.exec();
    }

    1. 先修改t1.pro文件,添加TRANSLATIONS

    lupdate与findstr功能差不多,只是生成XML格式的文字采集文本
    TEMPLATE    = app
    CONFIG      += qt warn_on release
    HEADERS     =
    SOURCES     = main.cpp
    TARGET      = t1
    REQUIRES=small-config
    #  加入需要生成的翻译文件,这里采用中文
    TRANSLATIONS = t1_zh.ts

    执行
    lupdate t1.pro
    就会在当前目录下生成t1_zh.ts采集的文本文件了,修改为你采用的编码文本!

    修改后的t1_zh.ts
    <!DOCTYPE TS><TS>
    <context>
        <name>QPushButton</name>
        <message>
            <source>Hello world!</source>
            <translation>你好!</translation>
        </message>
    </context>
    </TS>


    2. 使用linguist修改t1_zh.ts生成qm翻译文件

    这个工具是完全图形话操作的,这里就不再赘述
    在文件菜单选择release, 提示保存为qm翻译文件即可

     

    3.另类方法实现

    使用iconv与lrelease结合来完成linguist的功能
    既然知道qt是采用utf8编码才操作各种文本, 我们就可以借助iconv强大的编码转换功能完成同样的工作! 我是因为linguist在我平台上无法翻译才只好这么做!
    修改t1_zh.ts后转换编码,这里采用gb2312->utf8转换.
    iconv -f gb2312 -t utf8  t1_zh.ts t1.ts
    lrelease翻译编码文件
    lrelease t1.ts -qm t1_zh.qm
    运行t1
    ./t1 -qws
    显示中文
    要注意的是ts文件中<translation></translation>不能有空格,
    <translation ></translation> 翻译成的qm文件是不能够显示的!



    参考:

    [1]Internationalization with Q thttp://doc.trolltech.com/qtopia2.2/html/i18n.htm
    [2]Qt 国际化编程 http://www.ibm.com/developerworks/cn/linux/guitoolkit/qt/i18n/index.html


  • 相关阅读:
    P1847 轰炸II
    c++ 如何对拍
    P2689 东南西北
    P2006 赵神牛的游戏
    P1320 压缩技术(续集版)
    vuex
    less
    将二维数组转化成一维数组
    剩余数组(从'水果数组'筛选掉'吃了的数组')
    将一维数组转化成二维数组
  • 原文地址:https://www.cnblogs.com/xiaowangba/p/6314594.html
Copyright © 2011-2022 走看看