我从几周开始就在 tcltk 源代码中进行阿拉伯语归纳,我从 People Reviews 和 tcltk 源代码文档中了解到 tcltk 不支持阿拉伯语。我的问题是有人知道我可以在 tcltk 中使用哪些库来支持国际化吗?其次,我可以在 tcltk 中使用 Windows 库进行国际化,Windows 是否存在版权问题?第三,当我们从文本小部件或条目小部件写入文本时,有人知道字符串最终存储在哪里吗?存储和显示的功能是什么?或者存储字符串的链接列表指针在哪里?
1 回答
双向文本输入和输出
虽然 Tcl 语言支持许多脚本中的文本(目前任何使用 Unicode 基本多语言平面的语言,这是最常见的语言,肯定包括阿拉伯语),但 Tk 存在一些重大问题。特别是,目前绝对没有双向文本输入支持。渲染可能正常工作(特别是在 OSX 上,但可能在 Windows 上,也可能在 Unix 上,如果 Xft 做正确的事情),但输入肯定是错误的。
我不知道哪些库可能适合或不适合使用;在 Windows 上,Tk 当前使用直接调用 Windows 核心库本身来呈现文本。(版权从来没有问题,但许可证是一个更微妙的问题。不过,只要库不是 GPL 或 AGPL,就应该没问题。)
字符串存储
字符串最终存储为 Unicode 字符序列——可能以 UTF-8 编码,但不一定,而且你不应该太在意它们的存储方式,因为 Tcl 有一些相当高效的字符集翻译引擎——即存储在从Tcl_Obj *
句柄引用的内存中。您通常不会直接访问该内存,而是会询问Tcl_UniChar
您可以访问的特定形式(例如,一个两字节值的序列)。细节变得复杂,除非您要深入了解内存管理引擎,否则这些细节并不重要。通常,Tcl_Obj *
句柄将存储在某个 Tcl 变量中;这是鼓励的做事方式。
除非您正在使用text
小部件。那要复杂得多。请先使用其他东西,因为这个小部件是最难的情况!(它有一个内部可共享的 B 树模型,这让我非常害怕。)