Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1052790
  • 博文数量: 836
  • 博客积分: 43880
  • 博客等级: 大将
  • 技术积分: 5485
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-20 17:36
文章分类

全部博文(836)

文章存档

2011年(1)

2008年(835)

我的朋友

分类: LINUX

2008-08-20 18:26:51


图形环境的启动及中文化 本文是构造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) |
给主人留下些什么吧!~~