我一直在使用Tcl / Tk一周,我从文档中了解到它应该提升平台独立性,因为,在Linux和Windows上,Tcl / Tk小部件的行为相同。
奇怪的是,我有不同的经历。如果我在一个Tcl / Tk小部件中输入希伯来语或阿拉伯语(复杂脚本,一般来说,我假设)中的一些文本,在Windows中运行一次,在Linux中运行一次,我会得到不同的结果。在Ubuntu上,字形不会在窗口小部件中连接在一起。在Windows上它们是,但有时不正确。
根据他们的文档,Tcl / Tk确实拥有自v.8.1以来的固有国际化支持。
有人在这方面有过一些经验吗?我的意思是,Tcl / Tk真的有国际化支持和平台独立吗?
答案 0 :(得分:1)
Tk委托将一串字符显示到字体呈现引擎,这是特定于平台的(在Unix / X11上,也是特定的构建)。它是字体渲染引擎,负责将字符序列转换为glyphs的集合(必须是,因为不同的字体会产生不同的字形),然后在屏幕上绘制这些字形以生成渲染。文本。在一些书写系统(特别是欧洲和东亚的书写系统)中,这大多是相对简单的,但在其他书写系统中,由于使用了非常多的连字,因此非常困难。阿拉伯语是这里最困难的案例之一!
旧X11版本中使用的经典字体渲染引擎无法处理像阿拉伯语这样的复杂字体系统。这不太可能改变。较新的X11字体渲染引擎构建在Xft之上(实际上几乎所有工作都委托给该库),因此可能做得更好。在Windows和OSX / Aqua上,字体渲染引擎使用系统库,无论它们是什么质量。 (OSX对我来说看起来很不错,但我并不认为这是肯定的。)如果有人要为基于Pango的Unix贡献一个字体渲染引擎,它会非常有利地看待它;这可能是很多工作。
在可编辑的小部件(entry
,text
)中,事情也可能会变得更糟,因为这些可能会一次一个地提供字符。不可编辑的小部件(label
,button
等)应该看起来更好,因为他们可以一次至少传递多个字符,而不必担心保留有关的信息游标应该去哪里。我还怀疑Tk在与文本从左到右相关的地方有一些相当硬编码的假设;我不知道该怎么办。