2007年3月18日星期日

关于I18N与字体

  前阵子一直困惑于字符编码、字体及locale。这两天在网上goole了很多文件,总算有了点头绪,写一个学习总结。
  字符编码是计算机用于表示人类各类字符的"密码本",也就是通常我们讲的“内码”。对于英语来讲ANSIC码已经完全足够了,但对于非英语的其它语言却远远不够,因此就有了其它的许多字符编码,如简体中文编码就有GB2312,GB18030等;繁体中文的BIG5编码。 计算机之间的通信采用相应的字符编码进行,但人要想阅读这些传递过来的信息,就必须让计算机把相应的编码翻译成相应的字符,这就需要相应的字体文件了。字体有点阵字体和矢量字体两种。字体都是一个个小小的方块图片,点阵字体实际上就是记录着如何显示方块图片的一些控制信息,矢量字体则是使用数学函数来描述如何显示方块图片。矢量字体可缩放。字体的显示则由相应的字体渲染工具完成。
  
  linux中为了解决不同地区和语言的信息通信与存储问题,就有了所谓国际化(简称为I18N)与本土化。对于中文用户来说,这实际上就包括看中文、写中文及与windows中文系统的兼容与通信。linux通过locale的设置来实现。当然在英文的locale环境中,也可以实现看中文,这只需要系统中有相应的字符编码和合适的字体文件。如果系统编码设置不对,那么就会出现乱码。光能显示中文是不够的,我们还需要写中文。这就需要设置local环境了。locale这个单词的意思是地区,那么此处讲的locale实际上是指一个地区的一个交流习惯或者文化传统。在linux中通过一系统的环境变量来描述。它主要包括所使用的语言符号及分类(LC_CTYPE),非货币数字显示格式(LC_NUMBER),比较和排序习惯(LC_COLLATE),时间显示格式(LC_TIME),货币单位(LC_MONETARY),提示信息(LC_MESSAGES),姓名书写方式(LC_NAME),地址书写方式(LC_ADDRESS),电话号码书写方式(LC_TELEPHONE),度量衡表达方式(LC_MEASUREMENT),默认纸张大小(LC_PAPER)。另外还有两个变量LC_ALL和LANG,这些变量的默认值为C或POSIX。locale的命名规则为<语言>_<地区>.<字符集编码>,如zh_CN.UTF-8,zh代表中文,CN代表大陆地区,UTF-8表示字符集。在ubuntu中,所有的字符集都放在/usr/share/i18n/charmaps目录下。
  
  在ubuntu中,安装locales: sudo apt-get install locales
  查看当前系统中可用的locale: locale -a
  查看当前系统的locale设置: locale
  增加新的locale: dpkg-reconfigure locales

  字体是我们一进入X window就必须整天面对的,清晰、美观的字体会使我们使用电脑赏心悦目,轻松愉快。X中支持TrueType字体的主要有两类字体渲染引擎:Xft和X核心字体系统。
  Xft是一个library,它没有自已的配置机制,它依靠fontconfig库来配置和定制字体,Xft负责字体的显示。也就是说, fontconfig是一种让X系统可以找到某种字体的库,而Xft是负责在X系统中把fontconfig库找到的字体如何显示出来的库。GTK+2.x和QT程序都可以使用Xft字体系统,但GTK+1.x程序是不支持Xft字体系统的,它只能使用X11核心字体系统。为Xft系统字装字体很简单,只需把相应的字体文件拷贝到fonts.conf中指定的字体文件目录即可,fontconfig会自动感知新字体。用fc-cache命令手动更新系统字体配置。
  配置X11核心字体有两步,第一步是建立字体目录,在该目录中包含字体文件。第二步是配置X服务器,使它能使用这些字体。
  字体目录建立后,进入到该目录运行mkfontdir生成fonts.dir索引文件;运行mkfontscale生成fonts.scale索引文件。如果是位图文件只需要fonts.dir文件,如果是TrueType的可缩放字体,则需要fonts.scale。设置Xorg配置文件确定包含上述字体路径和正确加载X字体模块。重启X服务器后就可使用刚安装好的中文字体了。
  

没有评论: