一、引言
Symbian OS是一種開放、非常健壯的嵌入式作業系統,它由Symbian公司開發。Symbian OS是針對未來無線互聯手持功能的新一代移動系統平台,其目標是把Symbian OS開發成為未來手機的產業標準。所以它對應用程式的本地化提供了便利的條件和強有力的支援。Symbian OS內建了Unicode編碼,應用程式的開發架構也將源檔案與資源檔相分離。因此對於拉丁字元集,使用不同的語言文本改編應用程式應該只需改變資源檔,因為使用者可視文本不會嵌入到源檔案當中。但對於非拉丁語言,比如生產使用漢語、日語、朝鮮語等的應用程式,文本的本地化要複雜一些,需要做一些額外的工作。下面以Symbian OS的應用開發平台Series 60為例,在重點講述Symbian OS對本地化支援的基礎上,對應用程式的漢化加以解決。
二、 Symbian OS應用開發平台Series 60介紹
由於各廠商之間在使用者介面、硬體設計及互連性上存在的差別及其自身的革新,Symbian OS給行動裝置製造商提供很大的靈活性。這種靈活性可以使用同一個核心的作業系統設計出不同的產品,而且給裝置製造商提供了更新空間,從而使得其在移動市場上支援更多的裝置。Series 60平台正是基於Symbian OS的這種靈活性,在其之上進行構建。1所示。
Series60平台的核心是Symbian OS GT(Generic Technology,通用技術)層。提供了擴充的Avkon UI層、基於Avkon和Uikon庫的完整應用程式套件以及第三方GUI應用程式所使用的使用者介面和架構API。
三、 Series 60開發平台下應用程式架構對本地化的支援
3.1 應用程式的檔案架構
在開發應用程式之前必須瞭解Series60平台的應用程式檔案架構。Carbide C++是當前諾基亞公司為自己的S60系列智能手機應用程式開發提供的新一款IDE工具。在利用Carbide C++建立一項工程後(例如工程名為HelloWorld,程式架構為單視圖),我們能看到如下的應用程式檔案架構:
(1)data檔案夾中的.rss 檔案與src中的.cpp源檔案相分離,為實現應用程式本地化提供了便利的條件。後面的內容將詳細剖析它的具體實現機制。
(2)Aif檔案夾中包含可選的應用程式資訊檔(.aif檔案),用於指定應用程式的本地化表徵圖、標題及系統特性(如可嵌入性)。
(3)inc檔案夾中包含的是定義程式骨架類的.h標頭檔,和實現本地化所定義的.loc和.lXX檔案。
(4)src檔案夾中包含的是.cpp源檔案,實現.h中定義的類。聯編時各檔案之間具體的關係2所示
3.2 應用程式架構類的關係
與編寫普通的VC MFC程式一樣,必須熟悉程式中各個類之間的關係。每一個應用程式必須定義4個對象:
l Application類定義了應用程式的屬性如UID、標題並建立一個新的文檔。是應用程式的主入口,它也將應用程式相關資訊傳遞迴架構。應用程式類並不涉及應用程式的資料和演算法。
l Document類描述應用程式的資料模型。對一個基於檔案的應用程式,它儲存和重新整理應用程式的資料,響應AppUI類產生對一個文檔編輯的請求。
l AppUI是主要的使用者介面類,它是大量架構所發出通知的接受者,例如使用者的按鍵或者重要的系統事件。AppUI將處理事件本身,或者在適當地情況下,將這些事件傳遞給它所擁有的視圖,達到處理的目的。
l View類用於在螢幕上顯示應用程式資料並允許使用者與之互動。對一個複雜的程式可能有多種方法顯示其資料,因此包含多個視圖類。它們之間的關係3所示。
可以簡單地歸納為:Application類建立一個文檔,文檔類建立AppUI,AppUI類建立視圖。從圖3我們可以看到應用程式還包括一個model類,model類用於封裝應用程式資料和它的演算法,給程式的其他部分提供良好的API。
3.3 實現應用程式的本地化機制
為詳細說明實現應用程式本地化的內部機制,我們以上面的HelloWorldLoc工程為例,只針對為實現這種機制的.rss檔案,.rsg檔案,.loc檔案,.lXX檔案進行分析。在圖2當中,我們看到.l01、.l02、.l03和.loc這類檔案。.lXX檔案中定義了不同的語言,比如HelloWorldLoc.l01中把要顯示的文本定義成英文,HelloWorldLoc.l02中定義成了法語,而HelloWorldLoc.l03中定義成了德語。通過編譯發布,可以很方便實現應用程式和資源的本地化,在真機顯示相對應的語言。例如在HelloWorldLoc.l01檔案中可以定義英文文本:
#define ELanguage ELangEnglish // Caption language
#define qtn_app_caption_string "HelloWorldLoc"
#define qtn_app_short_caption_string "HelloWL"
#define LABEL_TEXT "Hello World!"
而在HelloWorldLoc.l02中定義法語文本:
#define ELanguage ELangFrench // Caption language
#define qtn_app_caption_string "BonjourLoc"
#define qtn_app_short_caption_string "BonjourL"
#define LABEL_TEXT "Bonjour Monde!"
同樣道理,在HelloWorldLoc.l03中可以定義德語文本。
在HelloWorldLoc.loc檔案中根據本地化需求包含相應的.lXX檔案,例如包含定義英文字串的HelloWorldLoc.l01檔案。
#include "HelloWorldLoc.l01"
在.rss檔案中包含HelloWorldLoc.loc檔案,可以引用.lXX中的本地化資源。
#include “HelloWorldLoc.loc”
RESOURCE TBUF r_label_text{ buf = LABEL_TEXT;}
假如這裡引用的LABEL_TEXT是HelloWorldLoc.l01中定義的英文文本:
#define LABEL_TEXT "Hello World!"
那麼在Carbide C++整合式開發環境下,資源編譯器rcomp.exe對包含本地化資源的HelloWorldLoc.rss檔案編譯後,輸出一個二進位資源檔HelloWorldLoc.rsc和一個HelloWorldLoc.rsg標頭檔。HelloWorldLoc.rsg標頭檔中利用#define定義符號名R_LABEL_TEXT來引用本地化資源。如下定義:
#define R_LABEL_TEXT 0x2aa81006
在顯示資料的View類的.cpp源檔案中,包含HelloWorldLoc.rsg標頭檔,通過引用R_LABEL_TEXT就可以顯示它所標識的"Hello World!"字串。
3.4 實現應用程式的漢化技術
對於英語、法語、德語這些拉丁字元集均是通過Unicode標準進行編碼,Symbian OS內建了Unicode編碼,所以通過改變.loc檔案中所包含的.lXX檔案,可以很方便的產生不同語言文本的應用程式。在Symbian OS的/epoc32/Include/e32std.h標頭檔中我們可以看到定義了這些語言標識碼,每種支援的語言都具有兩位元字的標識碼。例如英語是01,法語是02,德語是03:
enum TLanguage
{ELangEnglish = 1, /** UK English. */
ELangFrench = 2, /** French. */
……
ELangHongKongChinese = 30, /** Hong Kong Chinese. */
ELangPrcChinese = 31, /** Peoples Republic of Chinas Chinese. */
……
}
在上面定義的標識代碼中,我們可以看到對漢語的標識代碼也有所定義,分別是30和31。但我們並不能簡單地在.lXX檔案中定義中文文本。中文文本屬於非拉丁語系,對於非拉丁語言,文本的本地化要複雜一些。對於生產使用漢語、日語、朝鮮語等的應用程式,Symbian OS和Series60 SDK確實提供了一些支援,但我們需要做一些額外的工作。要解決漢字問題,必須轉換我們的漢字編碼。下面是實現中文本地化的具體實現方法,稱之為靜態方法。
首先,在.lXX檔案中定義: #define LABEL_TEXT “字串_中文”
然後將這個.lXX檔案用WORD或記事本轉換成UTF8編碼。這裡要注意,有時在轉換時,會在轉換產生後的檔案頭部添加上一個文字編輯器無法看到的標誌字元,需要用edit編輯器將其開啟,刪除標誌字元,否則編譯將會出錯。在.loc檔案中包含.lXX檔案:#include ".lXX"。在.RSS檔案中定義字串:RESOURCE TBUF r_label_text{buf=LABEL_TEXT;}
同時在.RSS檔案頭添加一行代碼:CHARACTER_SET UTF8。在.cpp檔案中,包含.rsg標頭檔,通過引用R_LABEL_TEXT就可以顯示它所標識的"字串_中文"字串。
四、 Symbian OS在我國的發展前景
隨著Symbian OS對本地化的進一步支援,基於Symbain OS的我國國產智能手機軟體必將有所大力普及。作為一種面向未來無線通訊的作業系統,一方面由於它所具有的強大功能,另一方面有世界各大行動裝置商(包括其股東)的支援,還有像Intel、TI、IBM等各大公司都陸續宣布和Symbian公司合作開發無線通訊裝置軟體應用程式,Symbian OS在我國國內將具有良好的發展前景。