首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用 m17n 实现各国语言间代码移植(2)

使用 m17n 实现各国语言间代码移植(2)

字符一瞥添加新拼字法也非常简单:不需要改编 m17n 库来显示新脚本。相反,只需要创建一个新的 m17n M-text,并将 M-text 添加到 m17n 数据库上即可。
可以将 M-text 当作一个泛化的 C 字符串,因为这就可以将任意属性添加到通常与 C 字符串有关的字符代码中。一个属性可以指定语言要显示的字符,而另外一个属性则可以指定特定的字体。Bidi 信息也是使用 M-text 表示来进行编码的,并且基本的字形信息都可以出现。
例如,图 2(已经得到 m17n 开发人员的许可进行复制)展示了这些属性如何用来修改文本字符串的外观。这个字符串非常简单,内容是 “This is sample text to show the property”。然而,每个字符串都有一个 face 属性 —— 或多个 face 属性 —— 它决定了要使用哪些字体来显示字符。该图中所显示的 face 属性都故意进行了简化,但是我们可以看到这种特性所提供的灵活性,这对于世界上很多手写语言来说都是必要的。
图 2. 可以单独使用或一起使用来修改文本外观的属性有很多脚本都需要复杂的过程来重新进行排序,或重新放置各个要显示的复杂合成图形。诸如泰米尔语、缅甸语和泰国语之类的脚本在进行显示之前都需要这种重新排序过程。作为更为具体的一个例子,图 3(也已经获得作者许可进行复制)展示了单词 Hindi 是如何进行处理来使用 Devanagri 脚本正确显示的。这需要两个阶段。第一个阶段是将字符序列从字节顺序(字符在内存中如何存储)转换成正确的手写顺序(字符如何在纸面上显示)。第二个阶段负责扫描特有的字形和读音序列(如果存在)并将这个序列替换成 “复合” 字形(英语有很多这种转换来增强文本的可读性。根据所使用的字体的不同, fi 序列通常都会使用一个 fi 字形代替,这要取决于我们选择的字体)。
图 3. 显示单词 “Hindi”这个重新排序过程的通用名字是 Complex Font Layout(CFL)。通常,CFL 信息都包含在字体中,在某些情况中,已经写死到显示库中了。在 m17n 中,CFL 信息可以在 FLT(Font Layout Table)中找到。有些拼字法需要少量的 FLT 数据;另外一些字符则需要很多信息来捕获复杂的规则。
例如, Sino-Japanese   orthography 就没有前后规则可以影响单个字形组合的复合。然而,泰国语的确有一些有趣的规则可以影响 orthography 的变化,但是它对于泰国口语不会产生任何影响。泰国语的拼字法 对于周围的文本来说非常敏感,但是对于口语来说则并非如此。印度脚本中特定的组合规则也相当复杂,必须使用 FLT 来显示。
最后,诸如字体、双向显示、Unicode 和语言之类的数据都会将文本的显示呈现在屏幕上。下一个棘手的问题 —— 也可能是现在正出现在您脑海中的问题 —— 是我们如何以非 ASCII 字体的形式来输入文本。
使用有 500 个键的键盘对于英语和很多欧洲语言来说,一个字符映射为一个键(或两个键)就足够了。大写键可以直接打印,键盘驱动程序可以对很多更为特殊的情况进行编码,但是其模型是相同的:按下一个键就代表输入某个特定的字符。
那么,如果一种拼字法中有数百个字符,或者更特殊一点,它们之间有很多组合,情况如何呢?那么我们就不能简单地使用一次击键来实现了,而是需要使用 击键序列 ,或者快速连续输入多个键。有一种特别的软件叫 输入法,它可以将每个键盘序列转换成一个字符或一系列字符。
当然,有些击键序列可能就是一次击键。另外,我们可以创建一种输入法将标准的拉丁字母键盘 转换 成其他语系的拼字法。例如,老式的日语键盘就将拉丁字母转换成平假名和片假名。然而,试图使用 26 个字母(A 到 Z 的拉丁字母)表示大约 46 个平假名有些困难。
键盘映射、击键序列以及音译输入法都可以使用 m17n 数据库来表示。这种方法很大的一个优点是可以将拼字法 的规则与应用程序代码清楚地区分开来。应用程序代码最适合由程序员来开发;如何显示正确的文本则是语言学家的工作。
获取 m17n 库正如上面介绍的一样,m17n 包括 3 个库和 m17n 数据库。现在,我们可以使用一个 m17n libc,另外还可以使用一个 Xlib 的 m17n 版本进行编码。开发团队正在努力编写第 3 层的库即 m17n X 工具包,它将成为 GTK+ 的一部分。m17n 开发人员也从事语言绑定的工作,这样诸如 Perl 和 Ruby 之类的编程语言就都可以使用 m17n 了(这个工具包和绑定何时可用,尚没有进度表)。m17n 库也已经被接纳为 Linux Standard Base(LSB)的一个部分,它可能会成为 Linux 国际化标准实现的一个很好的部分。
m17n 库的最新版本是 1.3.3,这是在 2006 年 2 月 22 日发布的。我们可以按照下面的方式来获取 m17n 库:
  • 下载 。这个下载页面中还提供了使用英语和日语编写的程序员文档包。
  • 如果喜欢使用 CVS(Concurrent Versions System),也可以使用下面的 CVS 命令来下载代码:
    1
    2
    3
    $ cvs -d :pserver:anonymous@cvs.m17n.org:/cvs/m17n login
    $ cvs -d :pserver:anonymous@cvs.m17n.org:/cvs/m17n co m17n-lib
    $ cvs -d :pserver:anonymous@cvs.m17n.org:/cvs/m17n co m17n-db




    从源代码开始编译程序也非常简单:m17n 库使用了典型的配置脚本来配置系统,并为编译和安装创建合适的 Makefile(详细内容请参看 m17n 软件包中的 README 文件)。
  • 如果碰巧使用的是 Debian 的发行版本,就可以使用非常方便的 APT 安装工具来安装 m17n 库和它所依赖的库。例如,要寻找 Debian 系统上所有可用的 m17n 包,就需要使用 apt-cache,例如                                        apt-cache search m17n。                                        根据 APT 所指向的 Debian 储存库的不同,可能会看到如清单 1 所示的输出内容。
    清单 1.  apt-cache search m17n 命令的输出结果
    1
    2
    3
    4
    5
    6
    7
    libm17n-0 - a multilingual text processing library - runtime
    libm17n-dev - a multilingual text processing library - development
    m17n-db - a multilingual text processing library - database
    m17n-docs - a multilingual text processing library - documents
    m17n-env - set up multilingual X environment
    m17n-lib-bin - a multilingual text processing library - utilities
    mlterm-im-m17nlib - MultiLingual TERMinal, m17nlib input method plugin




    在找到包名之后,就可以运行 apt-get install 来自动下载并安装 m17n 包了。根据 m17n 开发人员的说法,为 Fedora Core、Mandrake、SUSE Linux 和                                                Gentoo Linux 提供的包也都可以使用。
m17n 库依赖于几个其他库,这几个库在您的系统上可能有,也可能没有。请阅读前提条件中最新的列表。
返回列表