微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于Symbian OS的本地化技术研究

基于Symbian OS的本地化技术研究

时间:03-23 来源:互联网 点击:

一、引言

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

#d

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top