尽管FC5(Fedora Core 5)相比FC4中文显示效果比较好,但是因其不带内核源代码,加之带来一些新问题,所以FC4仍然是目前主流的中小网站数据库平台。本文介绍如何对FC4中文显示进行美化。
现在Fedora Core操作系统的最新版本是FC5,实用中笔者也发现FC5有许多优点,例如,FC5简体中文显示清晰,支持scim中文输入,防火墙iptable设置未定义的端口也不会出错等。但FC5的缺点也非常明显,它不带内核源代码,不熟悉Linux内核的人如果需要安装驱动程序将会很困难,FC5的磁盘卷组(vg-group)功能导致过多I/O开销,重要的是不能安装Oracle 10g for x86-64。因此,FC4还是当前网站数据库开发首选的开源64位操作系统。FC4及oracle 10g在目前64位PC服务器可组成强大的64位数据处理平台,本文主题就是该平台下简体中文的使用,硬件平台是IBM326m AMD 双核PC服务器。
FC4安装设置
FC4安装基本上可以一直按“下一步”完成,为简化设置,应设置安装语言为简体中文。FC4可识别2005年前的主流声卡、网卡、SATA硬盘、LSI SCSI阵列。进行基本配置时要注意,用图形工具定义防火墙端口必须先在/etc/services中定义,否则防火墙会出错。FC4中自带的vsftpd2.0.3不能实现FTP虚拟用户,要虚拟用户实现文件服务器需要自行安装认证等模块。FC4的主要问题是自带中文显示模糊,类似在Word中使用仿宋体或楷体。下面着重说明中文字体美化。
在IBM326m平台上,BCM5700网卡不能识别,必须编译安装网卡驱动,原机提供的驱动源程序(bcm5700-8.3.14.tar.gz)含有未定义的函数,编译无法通过,必须手工修改b57um.c,注释掉有关ioctl32函数定义可正常驱动网卡。
FC4中文字体美化
将Windows下的宋体字体simsun,以及tahoma和times两种比较美观的英文字体加入到FC4,应用中设为英文字体,在无法满足时就会使用缺省的simsun字体。
1.复制字体文件
从Windows的fonts文件夹里,复制simsun.ttc、times.ttf、 tahoma.ttf到/usr/share/fonts/local/TrueType,并将simsun.ttc 更名为simsun.ttf。
2.在命令行运行如下命令:
fc-cache /usr/share/fonts/local/TrueType
3.打开 /etc/fonts/fonts.conf,并且在说明亚洲字符集的注释前插入新字体说明。
< !--
Some Asian fonts misadvertise themselves as monospaced when in fact they are Undo
…… this magic by disabling the width forcing code -->
前面,插入:
< match target="font">
< test name="family">< string>SimSun< /string>< /test>
< edit name="antialias" mode="assign">< bool>false< /bool>< /edit>
< /match>
这样可以避免字体被过分平滑。
4.在 /etc/fonts/fonts.conf中,所有类似如下的地方,全部插入simsun字体:
……
< family>Kochi Mincho< /family>
< family>SimSun< /family> < !--增加这样的一行 -->
< family>AR PL SungtiL GB< /family>
……
< default>< family>serif< /family>< /default>
需要注意的是,simsun要插入到所有英文字体的最后面、非英文字体的最前面。
5.在 /usr/share/fonts/local/TrueType/fonts.dir和fonts.scale前面,插入字体配置语句。注意要修正第一行的数字,使其等于下面内容的行数。注意将新字体放在/usr/share/fonts/local/TrueType不会被自动修改。如果将字体及置文件放在缺省中文字体目录/usr/share/fonts/chinese/TrueType下,则系统重启后会自动修改字体配置文件,导致一些配置丢失。文件片段如下:
tahoma.ttf-arphic technology co.-ar pl Tahoma-medium-r-normal--0-0-0-0-p-0-iso8859-9
simsun.ttf-arphic technology co.-ar pl simsun gb-medium-r-normal--0-0-0-0-c-0-ascii-0
字体配置文件的每一行都说明字体的设置和定义,如粗体的宽度、斜体的倾斜度等,字体文件包括要用的2种英文字体和simsun中文宋体的配置信息。
6.最后一步,用simsun.ttf文件覆盖原来中文字体文件,/usr/share/fonts/chinese/TrueType下的中文字体文件bkai00mp.ttf、bsmi00lp.ttf、gbsn00lp.ttf、gkai00mp.ttf或删除该目录下的所有字体文件。
完成上述步骤后,在Preferences(首选项)里的font(字体)里,不管是中文语言环境还是英文语言环境,都将字体设为英文,系统缺省使用宋体显示中文,这样中英文显示都很清晰,和Windows环境一样。个人感觉最佳设置应该是:应用程序选tahoma,桌面字体选luxi sans,窗口标题字体选luxi sans,终端字体选luxi mono。
Oracle数据库安装设置
Oracle 10g for x86_64可从Oracle官方网站下载试用。Oracle数据库安装基本可按其快速安装文档进行。但由于其安装程序基于自带的Java,未汉化,故安装程序应使用英文环境:在/etc/profile中设置LANG=en_US;export LANG;LC_ALL=en_US;export LC_ALL,重启后开始安装。Oracle官方文档说明不支持FC4,故安装时指定忽略系统检查后可正常安装使用:
./runInstaller-ignoreSysPrereqs
安装中选择默认语言为zh_gbk,安装完成后可支持中文。
Oracle Java应用汉化
执行下面2条命令启动Oracle的Em和Isqlplus Java服务端。
$ORACLE_HOME /bin/isqlplusctl start
$ORACLE_HOME/bin/emctl start dbconsole
这样可以使用IE浏览器进行数据库操作和管理,不过其中中文按钮显示为□,一般解决方式是在IE/INTERNET选项/语言中添加“美国英语”并移动到中文之上,IE中按钮可显示为英文,不过页面也变成英文。
经过笔者研究,发现按钮是Oracle的Java应用启动时自动绘制的,汉化的方法就是汉化Oracle自带的Jre,Oracle 10g自带的Jre版本为Java1.4.2,所以不能象Java 1.50的汉化,简单地向fallback目录拷贝中文字体文件,而是比较复杂地汉化Java 1.4的方式,步骤与Java 1.4添加简体中文支持相同(见下文)。
汉化jre后重新启动服务发现汉化不完全,可能一些按钮是中文,另一部分还是方块。经过深入分析,发现原因是Oracle java引擎启动时只对原来不存在的按钮图片重新生成,原来已生成的图片文件就不重新生成了,因此汉化后要删除原来旧的按钮图片:
rm-rf $ORACLE_HOME/oc4j/j2ee/oc4j_applications/applications/isqlplus/isqlplus/cabo/images/cache/zhs/*.gif
rm -rf $ORACLE_HOME/oc4j/j2ee/oc4j_applications/applications/em/em/cabo/images/cache/zhs/*.gif
再重新启动isqlplus和em控制器,强迫Oracle重新生成图片,简体中文按钮出现了,IE出现的界面也是简体中文。
Oracle Java汉化步骤
Oracle 10g的Jre汉化与一般的Java1.4汉化步骤相同,有大量文章可以参考。汉化时需要注意以下几点:
1.Oracle 10g的Jre目录是$ORACLE_HOME/jdk/jre。
2.增加中文字体和配置文件
将simsun.ttf复制到$ORACLE_HOME/jdk/jre/lib/fonts/目录下。修改fonts.dir加入simsun字体。首行由72改为74,并在尾部追加2行:
simsun.ttf -misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1
simsun.ttf -misc-simsun-medium-r-normal--0-0-0-0-c-0-gb2312.1980-0
3.确定区域信息
Java应用程序在具体的区域设置根据文件名选择具体使用哪个字体属性文件,文件命名规则为:font.properties.语言_区域.编码。如果个别属性文件缺失,就使用上一级的属性文件,最顶端就是不带后缀的font.properties文件。
编写一段java程序在服务器上运行确定locale信息:
System.out.println(System.getProperty("user.language"));
System.out.println(System.getProperty("user.region"));
System.out.println(System.getProperty("file.encoding"));
System.out.println(System.getProperty("os.version"));
笔者所用服务器配置为中文环境,字体属性文件确定应用程序得到结果user.language为zh,确定locale为zh.GBK,为保险起见,使用上一级的字体属性文件,即$ORACLE_HOME/jdk/jre/lib/font.properties.zh文件使其支持simsun中文字体。
4.修改字体属性文件
Java的字体属性文件和FC4 X-window系统所用的字体配置文件作用类似,但格式不相同,文件中要加入类似如下一些行:
dialog.0=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-iso8859-1
dialog.1=-misc-simsun-medium-r-normal-*-*-110-*-*-c-*-gb2312.1980-0
至此,完成了Oracle Java的汉化,Oracle提供的java web应用都可以中文显示。美中不足的是使用isqlplus查询中文字符串有时不能正确显示,而且在多台服务器测试发现isqlplus 服务端有时会死机,需要重启。涉及较多中文显示的查询最好还是使用Oracle提供的客户端“SQLPlus Worksheet”。
经过以上配置,基本完成FC4在64位PC服务器上架设数据库服务器工作,且FC4具有良好中文显示界面,Oracle的IE操作界面也具备中文界面。
(计算机世界报 2006年11月27日 第46期 B27)