--------------------------------------------------------------------------
國際化、本地化和中文化
國際化、本地化和多語言化的概念
中文化
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 國際化本地化和中文化(三)