分享
 
 
 

Linux中文化之LINUX终端国际化解决方案

王朝system·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

一.Linux国际化现状

随着INTERNET的普及,世界各国,特别是使用亚洲多字节语种的国家,开始意识到国际化的重要性。目前,

各国有自己的编码,例如,日本有JIS,韩国有KSC,中国有GBK和即将要实施的GB13080等等。如此多

的编码,使得系统兼容和国际交流成为很大的问题。

值得令人高兴的是,Linux国际标准化组织在近日发布了LI18NUX2000国际化规格草案。该草案的 发布向实现Linux操作系统标准化更迈进了一步,这必将使全体开发人员和各机构从中受益。Linux的国际化 是一项庞大的工程,它对于支持亚洲语言和其它多字节字符集是不可或缺的,将极大推动Linux在世界各地的普及。国际化组织制定UNICODE标准,在很大程度上解决了问题。目前是向UNICODE过渡的时期,所以,我们

还必须支持各国的标准。

目前LINUX国际化基本上还是在传统的UNIX方式上。通常是以LOCALE为基础国际化,由于内核不支持双字节、XFree86不支持多字节语言,使得国际化工作就是一些Hacking的工作。人们采用各种方式,如修改内核(UNICON), 编写新的TTY, 修改运行库,甚至修改X服务器。但一些方法已经固定下来,比如LOCALE等。更好的方法要等到国际化的新标准。

二.什么是Unicon?

Unicon是在Linux内核基础上,增加国际化支持的程序包。它包括内核补丁、键盘设备程序、 输入法服务器和Unicon客户。应用程序可以在此基础上处理各种语言。与其它终端中文系统相比,

Unicon有以下优点:

1. 最大限度支持国际化,目前本系统可以支持Big5, GB, GBK, JIS, KSC等.

2. 良好的兼容性

Unicon以最小的内核改动换取最大的系统兼容。和其它终端软件相比,它可以对鼠标,键盘,显示有良好的支持。最使人欣慰的是,它可以支持滚屏。其它西文软件,不需要经过修改,就可以轻松地处理

各国语言。

2. 每个TTY是独立的机器,有自己独立的状态(字体和输入法,Locale等)

3. 良好的分层结构,使系统易于扩展本系统采用了类似于UNIX系统结构的方案。系统分三层:内核及驱动程序,输入法服务器,输入法。

此结构容易扩展、移植。例如,当我们需要将系统移植到一个新的机器上时,主要的工作是在设备及驱动程序上,其余部分基本上不需要作很大修改。

4. 提供API和通用输入法接口

为普通程序员提供接口程序。这里包括两个方面的含义,1. 输入法模块的接口,用户只需按此接口就可以将自己的输入法加到本系统上去;2. Client & Server 的接口,当系统改变时,只需修改这部分,而保持系统不变。

5. 支持多种字体

系统支持多字体内核,并在此基础上,提供字体的动态切换。

6. 支持动态切换语言及输入法

系统在字体管理程序和输入法服务器的基础上,提供动态切换。另外,对环境变量,如LOCALE, 同样进行切换,极大方便了用户。

7. 为XFree86的Chinput提供输入法 由于XFree86的Chinput和Unicon使用同一输入法服务器,所以,它们可以共享输入法。

三.Unicon总体设计和其它系统不同,在Unicon设计时,我们假定每个TTY是一个独立的机器,有自己的状态。由此,每个有自己独立的输入法和字体。在系统设计上,我们依照Unix操作系统的特点,将整个系统分为若干层,并尽可能将内核的修改减少到最小。将系统分为以下几层:

1. 内核补丁

智能制表符识别

提供制表符智能识别。以支持系统菜单等的正确显示, 这部分代码在

drivers/char/console.c。

字体显示程序

字体显示部分是在FrameBuffer的总体控制程序上。这样,我们只须修改高层模块,而无需去管底层得各个驱动程序,使得我们得兼容性达到最佳。其次,UNIKEY可以方便地调用补丁程序,方便地控制显示条。详细可以参见drivers/video/fbcon.c

键盘过滤程序(UNIKEY) 我们在两个地方对键盘进行过滤。一个是在键盘中断,另外是在TTY键盘处理程序上。之所以 这样处理,是因为:1. 我们必须过滤键,尤其是一些功能键,组合键;2. 我们必须将翻译后

的结果发送回操作系统。而当我们将翻译得结果发送回系统时,最快、最方便得方法是将他们 写回到TTY上去。这样,UNIKEY可以很方便地对键进行过滤。

详细参见drivers/char/pc_keyb.c, include/linux/tty_flip.c

字体管理程序

字体管理程序是为了支持TTY字体独立。字体显示程序必须通过调用字体管理器来确定当前TTY 的字体及编码方式,以确保正确显示。

详细参见drivers/video/fbcon.c等。

2. 设备驱动程序UNIKEY

本模块为高层模块提供了键盘过滤、字体管理,输入法显示等等。另外,对系统热键作了翻译,以传送到高层模块。它包括以下几个方面:

输入法显示本模块是对UNICON输入法条显示的支持。它是通过标准UNIX调用ioctl来实现的。

键过滤程序

本模块对TTY1-―TTY6进行模拟,包括:1. 系统键过滤,包括对功能键,组合键得翻译,以确保输入法能正确,准确地接受系统的键盘信息;2. 输入法程序向操作系统发送键的接口,通过这个接口,输入法程序将翻译得结果传送到TTY,从而应用程序接受到翻译得结果。

字体管理器

字体管理器动态管理字体。用户可以根据自己得喜好,将不同的字体模块放到系统中,从而达到用户满意得效果。

3. 输入法服务器

本模块是输入法的管理程序。它为客户端提供输入法。服务器端维护每个连接,使每个客户端有自己独立的状态。另外,通过共享词库,使系统的内存开销降低到最低。

4. 输入法客户

本模块为用户看到的终端程序。首先,它通过输入法服务器,打开一种输入法,通过打开UNIKEY,过滤系统键盘,并将所得的键传送到输入法服务器,输入法服务器翻译这个键,客户程序取回结果,并将服务器得结果显示在屏幕上。另外,它还要处理语种切换,帮助,用户造词等等。

四. Unicon 的工作原理。

1. 显示部分

显示中文(或其它文字),需要两个条件,1. 在图形方式下;2. 有编码的字库。

假定我们在TTY2运行如下程序:

main ( )

{

puts("hello, world.\n");

}

系统将通过open("/dev/tty1"), 然后,通过系统调用write(2)调用系统内核console.c的do_con_write,

而do_con_write调用内核的FrameBuffer高层管理程序fbcon.c, fbcon.c 调用具体设备驱动程序。

FrameBuffer将字符串显示到屏幕上。系统用的是默认的内核字库。

Unicon实际上,就是修改是FrameBuffer高层控制程序fbcon.c,将默认的字库指针指到我们的字库,

这样,系统就可以显示中文了。

2. 设备驱动程序

如上所述;我们的Unikey只是为应用程序(输入法)和内核之间提供了一个通讯的接口。我们采用标准

的Unix设备接口:struct file_operations, 将各自处理函数添入,这样一个设备就形成了。

当系统初始化设备驱动程序时,我们将内核有关Unicon支持的指针赋值,使内核能调用驱动程序的函数。

3. 输入法服务器

输入法服务器采用面向对象的设计技术。将系统分为接口类、输入法控制模块、输入法模块管理器、

内码转换器、共享词组模块等等。

当一个客户连接到服务器时,服务器返回一个句柄。当客户程序打开一个输入法,服务器首先检查该

输入法是否打开,如果没有打开,就将其打开,然后初始化,返回输入法句柄给客户。服务器维护该

输入法的状态。而客户程序负责到服务器上来取信息。另外,服务器负责客户状态的维护(如全角等)。

4. 输入法客户

客户程序负责和服务器连接,并通过服务器打开输入法,并将键传送到服务器。客户程序从服务器

取信息,并显示。另外,客户程序负责传送当前的状态(如全角等)。

五.Unicon系统图

Unicon User/Kernel/Hardware Architecture

========================================

+------------------+

+-------------------+ | libimm_server.so | +--------------+

| unicon | +-| |

| | | | shared input | | | |

| console | | | method server | | | |

| daemon | | +------------------+ | | X Window XIM |

| | | |.so input methods | | | |

| +------------| | | /usr/local/lib | | |--------------|

| |immclient.a |--+ +------------------+ +--| immclient.a |

+-------------------+ +--------------+

^ ^

| | +---------------+

| | | text mode |

| | | applications |

| | +---------------+

| | ^

| | | user

--------------------------------------------------------------------

| | | kernel

| +-----------------+ | font modules

v | | +--------------+

+---------------+ | | | encode-gb.o |------+

| /dev/unikey | | | +--------------+ |

| | | | +--------------+ |

| driver module | | | | encode-gbk.o |----+ |

+---------------+ | | +--------------+ | |

^ | | +--------------+ | |

| | | | encode-big5.o|--+ | |

| | | +--------------+ | | |

v v v | | |

+-------------+ +-------------+ +--------------+ | | |

| keyboard | |/dev/tty[0-6]| | frame buffer |

| driver || || driver |

| | | console tty | | |

| pc_keyb.c |

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有