当前位置:Linux教程 - Linux文化 - Linux 国际化本地化和中文化(四)

Linux 国际化本地化和中文化(四)


--------------------------------------------------------------------------
国际化、本地化和中文化 国际化、本地化和多语言化的概念 中文化 X11 国际化的历史和级别 国际化标准组织 国际化的意义

Locale Locale 的概念 在X中使用Locale 文化习俗的差别

X 窗口系统的国际化 显示的国际化 字符集和编码 多字节字符(Multibyte)和宽字符(WideChar)的使用 Unicode 字体(Font)和字体集(FontSet) 信息的国际化 输入的国际化 打印的国际化 客户程序间通讯的国际化

开发符合国际化标准的软件 开发国际化软件 使非国际化软件国际化

目前中文化中存在的问题 编码动态切换的问题 中文编码自动识别问题 Linux上的中文平台到国际化的过渡

附录 宽字符处理函数函数与普通函数对照表 X 窗口系统下支持中文的函数库 支持多语言的典型软件 支持Unicode的软件 --------------------------------------------------------------------------

四 开发符合国际化标准的软件

在X窗口系统下开发软件, 应尽量符合国际化标准. 它包括, 设置合适 的locale(见前 面讲述的在X下使用locale), 注意选择字符集和字体集, 本地化文本的处理, 输入方法 等等. 这里推荐用户尽量使用在国际化方面 已经比较完善的高层图形库, 如Qt, gtk+, Java等, 这样可以避免考虑以 上问题. 选择Motif时需要考虑资源的国际化问题和 FontList等.

1. 开发国际化软件

使用已经支持国际化的高层图形库开发支持国际化的软件基本上可以不用 考虑国 际化问题. 特别是输入问题, 在标准的输入区内(单行输入和多行输入), 都可以 自动输入汉字. 在字体处理上, 注意使用字体集. 许多软件需要在资源 文件中指 定字体和字体集, 所以开发的软件应提供一个缺省支持字体集的资源 文件.

下面所介绍的开发国际化的软件是基于libX11的开发方法. 除了前面所说的 在软 件初始化时调用一些Locale的函数外, 在实际编程时, 还应注意以下问题: 1. 字体载入: 在处理字符串时, 使用FontSet, 而不是Font:

XCreateFontSet() - 建立字体集 XFreeFontSet() - 释放字体集内存 XFontsOfFontSet() - 返回XFontStruct和字体名 XBaseFontNameListOfFontSet() - 返回字体集的名称 XLocaleOfFontSet() - 返回XFontSet的locale名 XExtentsOfFontSet() - 获得FontSet的最大Extents

2. 计算字符串的屏幕尺寸并画字符串:

Xmb/XwcDrawString() - 只画字型(glyphs)的前景 Xmb/XwcDrawImageString() - 画前景和背景 Xmb/XwcDrawText() - 复杂的间隔和字体集 Xmb/XwcTextEscapement() - X 方向像素 Xmb/XwcTextExtents() - 字符串轮廓

3. 客户程序间通讯:

Xmb/wcTextListToTextProperty() - 根据locale的文本转换 Xmb/wcTextPropertyToTextList() - 根据locale的文本转换 XFreeStringList() Xmb/wcFreeStringList() - 释放StringList XSetWMProperties() - 设置窗口管理器属性 XSetWMName() - 设置窗口窗口名 XSetWMIconName() - 设置窗口图标名

4. 输入:

XOpenIM()/XCloseIM() - 打开/关闭输入服务器 XDisplayOfIM()/XLocaleOfIM() XSetIMValues()/XGetIMValues() - 设置/获取输入服务器属性 XCreateIC()/XDestroyIC() - 建立/释放IC XIMOfIC() XSetICValues()/XGetICValues() - 设置/获取IC的值 XSetICFocus()/XUnsetICFocus() - 聚焦/取消聚焦 XmbResetIC()/XwcResetIC() - 重设IC XFilterEvent() - 过滤事件 Xmb/wcLookupString() - 查找字符串 XRegister/UnregisterIMInstantiateCallback() - 注册/取消回调

2. 使非国际化软件国际化

修改已经存在的非国际化软件, 应根据具体情况采用不同的补丁. 需要 注意的是 修改后的软件应与原来的软件兼容, 不会对软件以前在西文和其它 语言的支持造 成影响. Locale应该是软件的语言切换中心点. 下面是笔者在 修改软件的过程中 一些经验, 仅供参考.

o 在软件初始化时设置Locale. o 定义gettext的宏, 并且把它与信息文件绑定. o 对所有静态信息使用gettext o 对文本绘制使用字体集代替字体 o 绘制函数使用X下的多字节或宽字符函数 o 初始化和XIM服务器的联接 o 在事件循环中用XFilterEvent()过滤事件到XIM服务器 o 使用Xmb/wcLookupString()查找字符串

相关链接: Linux 国际化本地化和中文化(三)