QTOpia中文化

    技术2022-05-11  46

    QTOpia中文化

    一:字符集介

       经颁布了多中文信息编码标准,常用的有:GB2312-1980GB12345GB13000GBK)以及最新GB18030,其中GB13000GB2312展,又常被成GBKGB18030向下兼容GB2312GBK,中文WINDOW98、中文WIN2000操作系采用的中文字符集是GB2312

       GB2312库仅覆盖部分,存位置索引是编码中每字的第8bit0的,如A1A1编码汉字在字中的索引是2121,而非A1A1。以下是编码规则

    00~7F

    A1~F7 A1~FE

    GBK编码规则是:

    00~7F

    81~FE 40~7E

                   80~FE

    GB18030是最新的编码标准,其编码为一、二、四变长编码

    00~7F

    81~FE 40~7E

                   80~FE

    四字81~FE 30~39 81~FE 30~39

    Unicode编码采用等长编码,二表示一字符编码ASCII也采用节来表示,unicode使用二间来描述编码,平面分256行、256列,对应编码的高低字

     

    二:Qt 国际

    在文本示上,Qt 使用了Unicode 为内编码了程序的国际化,通常我在文本示的地方不直接入本地字符,用英文代替,比如要编写一中文界面的 Qt 程序,应该在程序中使用英文,程序编写完成后,把文本提取出于需要翻的地方,首先是在文本tr()函数标识,同制作出.qm信息文件,在程序中加入QTranslator即可。比如我在某一程序中有如下句:

    setCaption(tr(“main window”));

    了能示中文,有两种方法:

    方法一:

    l         修改工程文件,加上TRANSLATIONS = xxx.ts

    l         lupdate 工程文件名

    l         linguist编辑刚生成的xxx.ts文件保存

    l         lrelease 工程文件名 xxx.qm

    l         main.cpp中加入QFont font1(“unifont”,16,50,FALSE,QFont::Unicode);

    qApp->setFont(font1);

    QTranslator *translator = new QTranslator(0);

                         translator->load("xxx.qm"".");

                         qApp->installTranslator(translator);

    方法二:

    l         findtr 文件名(通常CPP文件) > xxx.po

    l         编辑po文件,其中charset需由iso-8859-1GB2312,然后main window”翻成“主窗口”

    l         msg2qm –scope zh_CN.GB2312 xxx.po xxx.qm

    l         main.cpp中加入QFont font1(“unifont”,16,50,FALSE,QFont::Unicode);

    qApp->setFont(font1);

    QTranslator *translator = new QTranslator(0);

                         translator->load("xxx.qm"".");

    qApp->installTranslator(translator);

    方法三:

    只是提供本地用使用,无需国际化,QT提供一支持,在QT中有多本地字符集同unicode转换引擎,他QTextCodec的派生,QGbkCodecQJisCodec, QHebrewCodec等。如:

    QFont font1(“unifont”,16,50,FALSE,QFont::Unicode);

    qApp->setFont(font1);

    QString caption=“主窗口“;

    QTextCodec *gk_codec=QTextCodec::codecForName(“GBK”);

    setCaption(gk_codec->toUnicode(caption));

           上面可以看出,使用转换引擎可以实现中文示,要步如下:

    1:修改main.cpp文件,字体改unifont

    QFont font1(“unifont”,16,50,FALSE,QFont::Unicode);

    qApp->setFont(font1);

    2:在想化的文件中加入QTextCodec针变量和转换QString mytr(char *)

        #include <qtextcodec.h>

    QTextCodec* gbk;

        QString mytr(const char *);

    3:在想化的实现文件中,修改类构造函,加入:

        gbk=QTextCodec::codecForName(“GBK”);

    4:在想化的实现文件中,添加mytr

    QString Form1::mytr(const char* chars)

    {

            return gbk->toUnicode(chars,strlen(chars));

    }

    5:在想化的实现文件中,用“mytr”替tr

    2004-12-2 测试了上面的方法三,编译,如果codec员变量改成QTextCodec派生类变量,编译将通不,比如QTextCodec* gbk;改成QGbkCodec* gbk;编译将报告此错误。下面是相似的用法:

    1:修改***.cpp文件,在部加入codec文件

       #include <qgbkcodec.h>

    2:在***.h文件中,加入mytr()数声

       QString mytr(char* buffer,int size);

    3:在***.cpp文件中,加入mytr()定

       QString mytr(char* buffer,int size)

    {

                  QGbkCodec* gbk=QTextCodec::codeForName(“GBK”);

                  return gbk->toUnicode(buffer,size);

    }

    4:在需要示中文的地方,使用mytr即可

    5:修改main.cpp文件,字体改unifont

    QFont font1(“unifont”,16,50,FALSE,QFont::Unicode);

    qApp->setFont(font1);

    注:在翻转换之前必须将Unicode字体入,否则显示不出中文,上相文章未提及一点,如果不式装载该字体,系的是Latin1,于是不出

    2:在编译qt/embedded之前,必修改qconfig-qpe.h配置文件的容,将与TextCodec的宏定义给去掉,否QTextCodec::codecForName(“GBK”)返回NULL

    3:使用findtr命令可同时查找多文件的tr(),并将查果都放入一文件,源文件以空格隔即可,另外,生成的.po.qm文件的文件名最好工程文件名相同!

    4:如果要示繁体中文,需要使用QTextCodec::codecForName(“big5”)取本地的使用言,用QTextCodec::locale()返回Qstring量,通常如果是中文本地的,通常其值为zh_CN.GB2312zh_TW.Big5,根据这个返回字符串,可以加codec。如果程序只支持一种编码,也可以直接把整个应用程序的编码设编码标准,比如系只需要示中文和英文,可以直接用程序的默认编码标准是GBK,如下使用方法:

    qApp->setDefaultCodec( QTextCodec::codecForName("GBK") );

    QLabel *label = new QLabel( tr("中文标签") );

    5:如果使用本地的字符转换器,可以使用Qstring静态Qstring::fromLocal8Bit(char* buffer,int size)本地字符串转换UNICODE字符串,不置好LANGUAGE量。

     

    三:QTOpia中文化

    l         findtr 文件名 > xxx.po

    l         编辑xxx.po文件

    l         msg2qm –scope zh_CN.GB2312 xxx.po xxx.qm

    l         行文件到QPEDIR/bin

    l         xxx.poxxx.qm文件到QPEDIR/i18n/zh_CN

    l         QPEDIR/apps/Applications录创建一新.desktop文件

    l         iconv –f utf8 –t GB18030 xxx.desktop > xxx1.desktop

    l         编辑xxx1.desktop文件,主要是修改ExecIconNameName[zh_CN]

    l         iconv –f GB18030 –t utf8 xxx1.desktop > xxx.desktop

    l         rm –f  xxx1.desktop

    l         qvfb –depth 16 &

    l         cd $QPEDIR/bin

    l         ./qpe

    注:如果的系中有多qtopia版本,要特注意QTDIRQPEDIRLD_LIBRARY_PATH

    2:可按照此方法qtopia用程序

    3po文件是中文件,程序正需要的是qm文件。iconv是系内码转换工具,utf8编码的文件转换gb18030编码的文件,反之也能,转换这一步必不可少,因desktop文件缺省是utf8编码的,而我redhat linux 73中文操作系用的却是gb18030,所以在编辑器打前需转换

     

    四:qtopia-1.5.0 for Arm

           首先按照“三”的方法化的程序提取*.qm文件和*.desktop面配置文件,在做完一步后,*.qm文件down到目机的/opt/qtopia-free-1.5.0.arm/i18n/zh_CN下,同时将*.desktop文件覆盖/opt/qtopia-free-1.5.0.arm/apps下的相文件,目机的量配置如下:

    export QTDIR=/opt/qt-2.3.3.arm

    export QPEDIR=/opt/qtopia-free-1.5.0.arm

    export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

    export PATH=$QPEDIR/bin:$PATH

    export LANG=zh_CN

    启动,由于置的为简体中文,qpe动为个应用加Unifont字体,以及体中文目下的翻文件,因而示出中文,翻文件是一方面,但更关键的是要示中文必有中文字体支持,Unifont字体包含中文字,因而能示中文,有相字体的支持,光有翻文件是示不出中文的!

    经过以上的步后,有的用在示上依然会显示方框,多半是由于窗体相的字体可能不是支持中文的字体,需要直接修改源代,以下是在qtopia-free-1.5.0.arm程中的相关记录

    1.         编译qtopia程中,可能会报告找不到SetButtonGroupID()编译通不是由于并没,一般情将该语藏掉,原代的原意是ButtonButtonGroup的序该语对应用无影。出现这个问题,主要在/netsetup/dialup/dialupbase.cpp文件和/taskbar/shutdown.cpp文件,shutdown.cpp文件的相是:96149201253行。

    2.         修改mpegplayer/playlistwidget.cpp文件的143行和166行,字体置改Unifont,如下:Qfont(“unifont”,16,50,FALSE,QFont::Unicode)或者去掉该语

    3.         修改snake/interface.cpp87行和186行,字体置改Unifont,如下:Qfont(“unifont”,16,50,FALSE,QFont::Unicode)或者去掉该语

    4.         修改qasteroids/view.cpp104行和qasteroids/toplevel.cpp109行和165行,字体置改Unifont,如下:Qfont(“unifont”,16,50,FALSE,QFont::Unicode)或者去掉该语

    5.         修改sysinfo/versioninfo.cpp文件,61行的builder作者本人,50行的vtr(“corpname”),重新建立po文件,corpname为国营789北京开发部,使用msg2qm生成qm文件

    6.         修改面,位于taskbar下,生成libqpe.polibqpe.qm文件,并将libqpe.qm文件拷i18n/zh_CN

     

    五:qtopia录结构

           apps/Applications用程序面配置文件

    apps/Games:游戏桌面配置文件

    apps/Settings:系统设面配置文件

    bin:二制可行文件

    configs编译配置文件目

    docdocsqtopia考文

    etc用配置文件目

    i18n国际化目

    i18n/zh_CN体中文目

    include/qpeqtopia文件目

    inputmethods入法

    libraryqtopia部分源代

    pics与应用相片存放目

    plugins:各种插件目,如mpeg3码插件、入法件等

    sounds:音文件存放目

    taskbar面程序的源代qpe的源代

     

     

    文件修改记录

    1建于2003/6/9

    2:于2003/8/21添加实现中文示的第三方法部分

    3:于2004-1-18添加文章的“四”容,一个汉qtopia for arm例,以及“五”。

     

                                                               2003/6/9

     

     


    最新回复(0)