图形环境的启动及中文化
本文是构造Linux的图形化安装程序系列文章的第二部分,主要介绍在安装程序装入内存之后,如何启动图形环境并设置中文语言环境。文中除了介绍安装程序对这两个功能的具体编程实现,还介绍了Linux中文化的一些基本知识,包括如何定制安装程序显示中所需要的Locale环境(Glibc和XWindow系统两部分),po文件的处理。
在安装程序的第二阶段运行结束之后,整个安装程序已经被调入了内存,这时控制从安装程序的加载程序转到了安装程序的主程序执行。这时的安装程序就像是一个从Linux的控制台环境启动的程序,这个程序进行自动检测并进行基本的设备配置。为了进行图形化安装,安装程序的主程序会启动XFree86子系统并设置,同时设置当前的语言环境为中文环境。
1.多语言环境支持
为了在Linux下实现多语言支持,必须在定制安装程序时,引入与glibc和图形环境两者对应的多语言环境支持。对于glibc环境而言,它是整个Linux中文化的基础,我们需要在/usr/share/locale目录下保存Locale信息,在/usr/share/consolefonts目录下保存字体信息,在/usr/lib/gconv目录下保存字符转换模块的信息。
对于XWindows环境,我们需要在/usr/X11R6/lib/X11/locale目录下保存XLocale的配置,同时在/usr/X11R6/lib/X11/fonts目录下保存正常显示所需要的字体集。
在安装程序启动之后,必须正确设置LC_*变量同时调用setlocale函数。为了能显示中文,安装程序还必须加载正确的中文字体。
1.1.国际化的基本概念
国际化(Internationalization,简写为I18N)是指软件在设计结构和机制上支持多语言的扩展特性,其功能和代码设计不针对某一特定语言和地域。Locale是ANSIC语言中最基本的支持国际化的标志,对中文Linux来说,支持中文Locale是最基本的要求。
1.1.1.Locale环境
Locale的命名规则:<语言>_<地区名>.<字符编码名称>
对于zh_CN.GB2312而言,zh表示中文,CN表示大陆地区,GB2312表示使用的字符集为GB2312。
Locale使用一组分类,用户可以独立的操纵每一组分类。用户既能用设置环境变量的方法,也能使用setlocale设置它们。这些分类都保存在/usr/share/locale下。它们包含了:
LC_COLLATE用于比较和排序。
LC_CTYPE用于字符分类和字符串处理,控制所有字符的处理方式,包括字符编码,字符是单字节还是多字节,如何打印等。
LC_MONETORY用于格式化货币单位。
LC_NUMERIC用于格式化非货币的数字显示。
LC_TIME用于格式化时间和日期。
LC_MESSAGES用于控制程序输出时所使用的语言,主要是提示信息,错误信息,状态信息,标题,标签,按钮和菜单等。
LC_ALL它不是环境变量,只是一个宏,可使用setlocale设置所有的LC_*环境变量。这个变量设置之后,可以废除LC_*和LANG的设置值,使得这些变量的设置值与LC_ALL的值一致。
LANG它的值用于指定上面环境变量没有设置的所有变量值。如果指定了上面任何一个变量的值,则会废除对应的LANG值的缺省设置。
还可以包括其他的环境变量LC_ADDRESS,LC_IDENTIFICATION,LC_PAPER,LC_NAME,LC_TELEPHONE,LC_MEASUREMENT。
标准Locale:"C"这是标准的CLocale。它所指定的属性和行为由ISOC标准所指定。它是程序启动时缺省使用Locale。
"POSIX"这是标准的POSIXLocale。它是标准的CLocale的别名。
""空名字是让程序选择当前环境设置值。
设置一个中文环境需要正确的设置上述Locale变量,举例来说,在使用zh_CN.GB2312环境时,使用locale命令,所见到的系统环境为:
LANG="zh_CN.GB2312"
LC_CTYPE="zh_CN.GB2312"
LC_NUMERIC="zh_CN.GB2312"
LC_TIME="zh_CN.GB2312"
LC_COLLATE="zh_CN.GB2312"
LC_MONETARY="zh_CN.GB2312"
LC_MESSAGES="zh_CN.GB2312"
LC_PAPER="zh_CN.GB2312"
LC_NAME="zh_CN.GB2312"
LC_ADDRESS="zh_CN.GB2312"
LC_TELEPHONE="zh_CN.GB2312"
LC_MEASUREMENT="zh_CN.GB2312"
LC_IDENTIFICATION="zh_CN.GB2312"
LC_ALL=
1
2
3
下一页>>
下载本文示例代码
阅读(375) | 评论(0) | 转发(0) |