当前位置:首页 > 嵌入式软件
[导读]随着Symbian OS逐渐成为未来手机的产业标准,基于Symbian OS的智能手机软件在我国必将有所普及,软件的本地化成为我们迫切需要解决的问题之一。本文以Symbian OS应用开发平台Series60为例,首先对基于Symbian OS的Series60平台应用程序的文件架构、骨架类做了全面综述,其次重点介绍Symbian OS对手机软件的本地所化提供的便利支持,最后对对实现国产软件的本地化提出了自己的解决方案。

一、引言

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的epoc32Includee32std.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在我国国内将具有良好的发展前景。

换一批

延伸阅读

[嵌入式新闻] 2020 年最漂亮的 Linux 发行版

2020 年最漂亮的 Linux 发行版

大多数程序员都会使用Linux, 对于Linux发行版,每个都有自己的优点。 今天,我将介绍7个最漂亮的Linux发行版: 1. elementary OS elementary OS是最漂亮的Linux发行版之一。它基于...

关键字: Linux os deepin elementary

[嵌入式新闻] iOS和OS X的wifi路由器设置教程

iOS和OS X的wifi路由器设置教程

今天,我将教大家如何配置iOS和OS X的WiFi路由器。 1、确保 Wi–Fi 路由器的固件是最新的。 2、如果您使用的是 Wi–Fi 基站,请参阅此文章了解有关如何更新的信息。 3、验证要使用的所有 Wi-...

关键字: Wi-Fi os iOS x

[嵌入式分享] iOS 14分屏操作神似Smartisan OS?罗永浩发博

iOS 14分屏操作神似Smartisan OS?罗永浩发博

WWDC2020即将到来,据报道,iOS 14即将登场, 曝光的信息显示iOS 14带来了分屏功能,从侧边栏拖拽应用即可实现分屏。近日,锤子科技CEO罗永浩转发了这一微博,并暗示Smartisan OS早已实现。...

关键字: os smartisan ios14

[消费电子] iOS14要改名!最后一个以 iPhone OS 命名的系统?

iOS14要改名!最后一个以 iPhone OS 命名的系统?

6月22日苹果将举行WWDC 2020开发者大会,届时将发布iOS 14、iPadOS 14、watchOS 7、tvOS、macOS等新版本系统。 不过一向爆料比较准确的Twitter爆料人士@Jon Prosser 突然曝出...

关键字: iPhone os ios14

[科技喵] 安卓 10 来了,坚果 Pro 3 推送 Smartisan OS v7.5.0 早期众测版

安卓 10 来了,坚果 Pro 3 推送 Smartisan OS v7.5.0 早期众测版

5月29日消息 据网友反馈,坚果Pro 3手机迎来了Smartisan OS v7.5.0 早期众测版本更新,其主要更新内容是系统安卓版本升级为安卓10。此前报道,坚果Pro 3手机延续了以往硬朗方正的设计风格,采用全新摄像头设计,拥有白、...

关键字: os 3 smartisan 安卓10 坚果pro

嵌入式软件

15473 篇文章

关注

发布文章

技术子站

关闭