unicode implementation: many fonts, or one large font?
我正在将应用程序国际化为多种不同的语言,并且必须支持以下语言:
我们也可能会增加对以下方面的支持:
我应该为每种语言安装不同的字体,还是应该安装Arial Unicode MS的大量字体安装? 如果我做后者,将字体添加到安装程序中会有法律上的含义吗?
.NET 3.5中存在此问题,但我认为一般问题是与(编程)语言无关。
Arial Unicode MS不可重新分发,并与Microsoft Office一起安装:Lucida Sans Unicode随Windows一起提供,并且具有列表中大多数语言的字符(不过,我相信不是中文)。
http://alanwood.net/unicode/fonts.html是查看哪些字体包含哪些字符的好资源。
GNU Unifont是唯一涵盖全部(或几乎全部,超过63,000个)字符的字体。不幸的是,它是位图,因此渲染非常难看。
如果需要TrueType字体,则最好使用WenQuanYi Zen Hei或Arial Unicode MS。
它们的覆盖范围大致相同(约35,000个字符),但是WenQuanYi Zen Hei是开源(GPL),Arial Unicode MS是专有的。
当您限制自己使用Windows和Internet Explorer附带的字体时,这不太可能成为真正的问题。用户将安装这些字体的版本,该版本能够以其本地语言呈现字形。
许多Windows API都会对知名字体进行字体链接。例如,如果您选择Tahoma并尝试使用任何更高级别的函数进行绘制,我相信它将自动进行字体链接。我怀疑几乎所有的.NET接口都具有较高的功能。
Raymond Chen展示了如何滚动自己的字体链接。
Michael Kaplan还进行了一系列字体链接。
我们决定走以下路线:
对于基于拉丁语的字符集,我们将使用基于Gentium的字体。这些字体受开放字体许可的保护,这意味着我们必须在软件中包含版权声明,并在UI中包含确认信息。
当我们使用亚洲语言时,我们可能会通过电子邮件发送WenQuanYi Zen He的创建者(在他的网站上,他说他可以商业使用,但要付费)或Code2000的创建者。顺便说一句,对于印地语字体,Code2000看起来确实不错,但对于Latin-1字体却不是那么好(有点宽,非常印刷,而不是基于屏幕)。