引言
要确定工作内容,评估工作时间,首先我们要对需求及问题进行分析,下面给出对多国语言支持,这个需求的分析步骤、结果及一些参考资料。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
我们最终的目的是:在用户当前的操作系统环境下
1、 可以正常的显示软件的界面
2、 用户可以用多语言进行输入
3、 可以从外部各种语言的外部数据进行导入
4、 可以指定某种语言环境进行输出(可以统一为unicode输出)
一、多国语言问题的起因及发展
1)最初文字的保存
0x20以下的字节状态称为"控制码",一直编到了第127号,这样计算机就可以用不同字节来存储英语的文字了,这个方案叫做 ANSI 的"AscII"编码,当时世界上所有的计算机都用同样的ASCII方案来保存英文文字
2)扩展字符集
但是很多国家用的不是英文,他们的字母里有许多是ASCII里没有的,为了可以在计算机保存他们的文字,他们决定采用127号之后的空位来表示这些新的字母、符号,还加入了很多画表格时需要用下到的横线、竖线、交叉等形状,一直把序号编到了最后一个状态255。从128到255这一页的字符集被称"扩展字符集"。
3)各个国家的本地化编码(例如中国的GB2312,BIG5)
4)UINICODE的出现
ISO (国际标谁化组织)的国际组织决定着手解决这个问题。他们采用的方法很简单:废了所有的地区性编码方案,重新搞一个包括了地球上所有文化、所有字母和符号的编码!他们打算叫它"Universal Multiple-Octet Coded Character Set",简称 UCS, 俗称 "UNICODE"
5)从NT开始WIN系列已支持UNICODE
于是从 Windows NT 开始,MS 趁机把它们的操作系统改了一遍,把所有的核心代码都改成了用 UNICODE 方式工作的版本,从这时开始,WINDOWS 系统终于无需要加装各种本的语言系统,就可以显示全世界上所有文化的字符了。
6)UTF-8解决网络传输中的,大小端问题
UTF8就是每次8个位传输数据,而UTF16就是每次16个位,了核对双方对于高低位的认识是否是一致的,采用了一种很简便的方法,就是在文本流的开始时向对方发送一个标志符——如果之后的文本是高位在位,那就发送"FEFF",反之,则发送"FFFE"。
7)乱码---各地区自有的编码标准之间的冲突
而当你新建一个文本文件时,早期的记事本的编码默认是ANSI, 如果你在ANSI的编码输入汉字,那么他实际就是GB系列的编码方式,所以不能正常显示
二、多国语言支持需要解决哪几方面的问题
1. 操作系统,需要支持UNICODE,目前WINDOWSXP,WIN2003都已经支持
2. 编写的用户界面软件需要编译成unicode方式
在VC中设置如下
Project->Settings->C/C++ TAB中,增加Preprocessor definitions:_UNICODE
Project->Settings->link TAB中,增加Project Options:/entry:"wWinMainCRTStartup"
C++ BULIDER中应该也有相应的编译选项,以保证编译出来的执行文件是支持UNICODE的输入和输出的,具体资料可在网上查找
编译方式的选择会直接决定,所有使用控件是否能支持多国语言的输入
3. 界面显示
需要以资源的方式来保存各种语言的用户界面,并对资源进行动态加载
4. 用户输入
当应用程序是UNICODE的方式进行编译的,则用户的输入都可以正常处理。
用户所输入的语言文字是由相应的输入法保证的
对程序中关于用户输入的处理,需要修改为,保存这些输入的内存对象,需要以双字节(宽字节)的方式进行保存、运算
5. 外部数据的输入
如果外部数据是直接输入到内存中进行操作,则需要明确输入源的编码方式,并在内存处理中以宽字节处理
如果外部数据是直接以复制粘贴的方式进行,因为编译方式保证了UNICODE,则可以不用做特殊处理
6. 数据的输出
如果是和STB相关,请参后文对STB处理的描述
三、操作系统支持多国语言的步骤及条件
必须添加语言支持
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
必须添加语言包
有相应语言的字体,以确保编码方式(UNICODE)能对应到显示方式
运行的执行程序是UNICODE标准的,即前面踢到的运行程序是一UNICODE方式编译的
三、多国语言问题在系统中的分布
1、客户端
以UNICODE编译
对用户的输入需要以宽字节来处理
多国语言界面的制作及动态加载
2、服务端
以UNICODE编译
四、如何进行测试
下面的网站有各种语言的文字,可从页面种复制相应的文字,
日语取至:http://www.ruby-lang.org/ja/
韩文取至:http://www.ruby-lang.org/ko/
是否能在我们的系统中:输入输出,STB显示
建立英文操作系统环境,我们的应用程序,
是否能正常的显示界面,输入输出
五、参考资料
语系
http://baike.baidu.com/view/67325.htm
字符集和编码
http://zhidao.baidu.com/question/7057627.html
汉字编码转换
http://game.ali213.net/thread-142937-1-1.html
UTF-8 and Unicode FAQ
http://www.linuxforum.net/books/UTF-8-Unicode.html
WINDWOS XP对多语言的支持
http://www.yesadmin.com/295/174267/index.html
WIN2000中对多国语言的支持
http://www.cndw.com/tech/server/2006040328995.asp
一步一步教你用VC纯资源dll解决国际化问题
http://www.vckbase.com/document/viewdoc/?id=1567
为软件添加多国语言支持的经验总结
http://i.cn.yahoo.com/cn.chaohuilin/blog/p_10/
编写支持多国语言的程序(delphi相关,c++builder可参考)
http://www.programfan.com/article/181.html