QTOpia中文化

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值