现在还有一些linuxer的wine不能显示中文,而用修改wine的代码来让wine显示中文,希望我这个贴子能给他们帮助。
本来以为较新的wine只要重新编译就可以支持中文,但经过我的试验,发觉这是有条件的,需要freetype的开发包,一般叫libfreetype-dev之类的名字(各个版本不一样),装好以后再编译,就可以支持中文truetype字库了。
我当初装redhat7.3时,大多数软件包都装上了,所以没有中文问题,我昨天尝试在config里删除字体目录,发觉redhat中文简体不能显示,而繁体能够显示,而debian简体繁体都不能显示,粗略的看了一下代码,中文简体和繁体的处理过程是一样的,除了codepage文件和指定的默认字体,我估计正好有wine定义的默认字体,所以能够显示繁体中文软件。我以前曾定义过notepad中的simsun字体,当字体小于16时,用simsun内嵌的点阵字体,而大字体用反锯齿的truetype字体。本来没有注意,以为是wine的机制。现在才想到和freetype有关。
举一反三地试了一下支持freetype的mozilla,发觉使用simsun时小字体也是用simsun内嵌的点阵字库。而不像zysong小字体也用抗锯齿。我没试过gnome2和kde3,不过也应该类似。这样的结果令人兴奋,使用xft的任何软件,包括用kde3/qt3和gnome2/gtk2的软件,都能够在不做所谓“汉化”而直接将内嵌点阵字库的字体拷贝到Xftconfig定义的字体目录,就可以得到比windows更好的字体显示。可能现在使用的汉化方法都要作古了。
实际上这些知识linuxforum讨论过很多。xft的配制文件是/etc/Xfconfig,看一下就可以了解一二,详细资料网上可以查到。gnome2/gtk2使用xft字体设置环境变量GDK_USE_XFT=1,Qt是设置QT_XFT=1。在redhat的测试版就设置了环境变量GDK_USE_XFT=1,而Xftconfig可以设置在一定范围内antialias为false,这样可以做到小字体点阵,大字体AA的。不过我手里没有gnome2,而以前装kde3时只是用过zysong18030,也没用过内嵌点阵的truetype,所以都没有实践过。不过mozilla使用freetype可以实现这种效果,gnome2也应可以。
mozilla和xft没有关系,需要设置自己的配置文件,设置如下:
安装完全安装版的mozilla(rpm版的不支持),修改mozilla目录default/pref/unix.js,找到pref("font.FreeType2.enable", false),修改值为true,设置字体目录如:pref("font.directory.truetype.1", "/usr/share/fonts/truetype");,其他关于aa的设置自己设。以后就能在首选项的字体设置中找到ZYEC-simsun的字体,可以看看它的显示效果。
不过它现在还有个很大的缺点,不能够实现中文的粗体和斜体,因为中文的并不是真正的粗体和斜体,而是标准体变换过来的。不知道xft2如何。