自 Tcl 8.1 以来,Tcl 就具有国际化支持,尽管仍然存在一些当前问题(特别是 Unicode BMP 之外的字符,需要使区域设置感知的一些字符串操作,以及缺乏规范化引擎;这些都不适用于此情况)。Tk的状态不是很好。
Tk 将字符串的显示委托给字体渲染引擎,该引擎是特定于平台的(在 Unix/X11 上,也是特定于构建的)。字体渲染引擎负责将字符序列转换为字形集合(必须如此,因为不同的字体会产生不同的字形),然后将其绘制在屏幕上以生成文本的渲染。在某些书写系统(尤其是欧洲和东亚的)中,这主要是相对简单的,但在其他书写系统中,由于使用了非常多的连字,这非常困难;阿拉伯语是这里最困难的案例之一!
旧 X11 版本中使用的经典字体渲染引擎根本无法处理像阿拉伯语这样的复杂字体系统。这不太可能改变。较新的 X11 字体渲染引擎构建在 Xft 之上(实际上几乎所有工作都委托给该库),因此可能会做得更好。在 Windows 和 OSX/Aqua 上,字体渲染引擎使用系统库,无论它们的质量如何。(OSX 对我来说看起来不错,但我不敢肯定知道。)如果有人要贡献一个基于 Pango 的 Unix 字体渲染引擎,那将是非常受欢迎的;不过,这可能需要做很多工作。
也有可能在可编辑的小部件 ( entry
, text
) 中情况看起来更糟,因为这些小部件可能一次只通过一个字符。不可编辑的小部件(label
、button
等)应该看起来更好,因为它们至少可以一次传递多个字符,而不必担心保留有关光标应该去哪里的信息。我还怀疑 Tk 在与从左到右的文本相关的地方有一些相当硬编码的假设。我不知道该怎么处理他们。