在开发过程中本地化UIQ3程序

在开发过程中本地化UIQ3程序 

翻译自UIQ3官方开发文档;
本文档英文名称:LocalizingApplications-part3_v1.1.pdf   Version 1.1
翻译者:yzhv@IOICN
欢迎转载,请注明出处作者.

在开发过程中本地化UIQ3程序

1 、简介

      Symbian OS v9 的发布是一个显著的分水岭,系统引入了增强的安全架构。 安全模型也导致了程序结构的变化,因此程序资源文件的结构和位置也产生了一些变化。安全平台的详细介绍和软件的移植方法,参看 “Symbian OS Platform Security” by Craig Heath (Wiley 2006).
      本文主要介绍与本地化过程相关的一些变化,幸运的是这些变化非常小,UIQ2上的一些基本原则仍然有效。


2 、软件的本地化
     首先,看一下 (UIQ) .MMP 文件:


SOURCEPATH .
SOURCE HelloWorld_Main.cpp
SOURCE HelloWorld_Application.cpp
SOURCE HelloWorld_Document.cpp
SOURCE HelloWorld_AppUi.cpp
SOURCE HelloWorld_AppView.cpp

USERINCLUDE .
SYSTEMINCLUDE /epoc32/include

START RESOURCE HelloWorld.rss
HEADER
TARGETPATH /resource/apps
LANG 01 02
END

START RESOURCE HelloWorld_reg.rss
#ifdef WINSCW
TARGETPATH /private/10003a3f/apps
#else
TARGETPATH /private/10003a3f/import/apps
#endif
END

START RESOURCE HelloWorld_loc.rss
TARGETPATH /resource/apps
LANG 01 02
END

LIBRARY euser.lib, apparc.lib, cone.lib, eikcore.lib
LIBRARY qikctl.lib eikctl.lib qikcore.lib qikutils.lib qikdlg.lib

   symbian v9 中 .MMP文件的变化主要与 RESOURCE 语法有关,例如
HEADER 关键字可选,该关键字导致在 系统包含目录  …/epoc32/include中产生一个资源头文件(.RSG) 。
TARGETPATH 定义资源文件编译后的(.RSC)存储位置。在 Symbian OS v9中, data caging (平台安全架构的一部分)要求资源必须放入正确的路径,要么是 公共只读目录/resource,要么是存储程序私有资源的 /private/<secure_ID>目录,<secure_ID> 是程序的UID3.
LANG 的意义与UIQ2.XX一致,因此在上面的例子中,资源编译将执行两次,每种语言一次。

3 、本地化程序的资源
看一下.RSS文件的内容 ,对于 UIQ 用户界面:


RESOURCE EIK_APP_INFO
{
    hotkeys=r_example_hotkeys;
    menubar=r_example_menubar;
}

RESOURCE HOTKEYS r_example_hotkeys
{
    control=
    {
          HOTKEY { command=EEikCmdExit; key='e'; }
    };
}
RESOURCE MENU_BAR r_example_menubar
{
    titles=
    {
         MENU_TITLE { menu_pane=r_example_first_menu; txt=STRING_r_example_first_menu; }
    };
}
RESOURCE MENU_PANE r_example_first_menu
{
     items=
     {
          MENU_ITEM { command=EExampleItem0; txt=STRING_r_example_item0; },
          MENU_ITEM { command=EExampleItem1; txt=STRING_r_example_item1; },
          MENU_ITEM { command=EExampleItem2; txt=STRING_r_example_item2; },
          MENU_ITEM { command=EEikCmdExit; txt=STRING_r_example_close; }
     };
}
RESOURCE TBUF r_example_text_Hello { buf=STRING_r_example_text_hello; }
RESOURCE TBUF r_example_text_Item0 { buf=STRING_r_example_item0; }
RESOURCE TBUF r_example_text_Item1 { buf=STRING_r_example_item1; }
RESOURCE TBUF r_example_text_Item2 { buf=STRING_r_example_item2; }


     与 v9以前的版本像同 ,使用条件包含,来引用 .RLS :

3.1 本地化资源字符串
       包含本地化字符串的文件,其文件名与程序名字一样,后缀采用 _lXX扩展名,XX是语言编号.这些文件被 .RSS文件使用如下语句加载:


4、程序注册文件
      v9 的另一个主要改变是程序注册文件 。 GUI程序现在是 .EXE文件 (v9以前是.APP文件),程序注册文件用于告诉应用程序架构,该 .exe是一个 GUI程序。再看一下MMP文件的如下结构:


     程序注册文件名与程序名字相同,添加 _reg后缀,替代了UIQ2.x上支持的AIF文件。这些注册文件必须放进私有的 data caged 目录,由应用程序架构服务器拥有,该服务器负责软件的启动加载过程。将 _reg文件放入私有目录可以避免恶意用户伪造、替换程序的 _reg 文件。程序注册文件的内容如下:


     APP_REGISTRATION_INFO 结构使用app_file声明 提供了二进制文件的文件名 (不含扩展名) 。如果提供了本地化 图标/标题 ,需要提供完整的文件路径(象上例一样),除了盘符和扩展名。这个文件定义了程序的标题和图标文件。通常文件名与程序名一样,不过使用 _loc 后缀。
      HelloWorld_loc.rss 文件是个标准的 Symbian本地化资源文件,通过在程序的.MMP 文件中包含,由资源编译器编译:

5 、本地化程序的安装

      本地化过程的最后一步就是创建安装包 (.SIS)文件。安装包可以在安装的时候根据电话设备的语言类型 安装相应的文件。Hello World 程序的PKG文件如下:


"/Symbian/UIQ3SDK/EPOC32/RELEASE/ARMV5/UREL/HelloWorld_UIQ.exe" -"!:/sys/bin/HelloWorld_UIQ.exe"
"/Symbian/UIQ3SDK/EPOC32/data/Z/private/10003a3f/apps/HelloWorld_reg.RSC" - "!:/private/10003a3f/import/apps/HelloWorld_reg.RSC"


{"/Symbian/UIQ3SDK/EPOC32/data/Z/resource/apps/HelloWorld.R01"
"/Symbian/UIQ3SDK/EPOC32/data/Z/resource/apps/HelloWorld.R02"
} -"!:/resource/apps/HelloWorld.RSC"


{"/Symbian/UIQ3SDK/EPOC32/data/Z/resource/apps/HelloWorld_loc.R01"
"/Symbian/UIQ3SDK/EPOC32/data/Z/resource/apps/HelloWorld_loc.R02"
} -"!:/resource/apps/HelloWorld_loc.RSC"

QUOTE:

// HelloWorld.mmp
TARGET HelloWorld.exe
TARGETTYPE exe
UID 0x100039CE 0xE0000003

 

QUOTE:

START RESOURCE HelloWorld.rss
HEADER
TARGETPATH /resource/apps
LANG 01 02
END

每个 .RSS 文件定义了一个 RESOURCE block 块,以 START 开始, END结束。

QUOTE:

NAME HEWO
#include <eikon.rh>
#include <eikcore.rsg>
#include <appinfo.rh>
#include "helloworld.hrh"
#ifdef LANGUAGE_01
#include "helloworld.l01"
#elif defined LANGUAGE_02
#include "helloworld.l02"
#endif
RESOURCE RSS_SIGNATURE { }
RESOURCE TBUF r_default_document_name
{
    buf="HEWO";
}

 

QUOTE:

#ifdef LANGUAGE_01
#include "01-strings.rls"
#else if defined LANGUAGE_02
#include "02-strings.rls"
#endif

 

QUOTE:

#ifdef LANGUAGE_01
#include "helloworld.l01"
#elif defined LANGUAGE_02
#include "helloworld.l02"
#endif

helloworld.l02的内容如下,里面包含了语言 02 (France)的字符串资源.

QUOTE:

// Strings localised for France
rls_string STRING_r_example_first_menu "Bonjour"
rls_string STRING_r_example_item0 "Élément 0"
rls_string STRING_r_example_item1 "Élément 1"
rls_string STRING_r_example_item2 "Élément 2"
rls_string STRING_r_example_close "Fin"
rls_string STRING_r_example_text_hello "Bonjour Monde!"
rls_string STRING_r_example_short_caption "B M"
rls_string STRING_r_example_caption "Bonjour tout le monde"

 

QUOTE:

START RESOURCE HelloWorld_reg.rss
TARGETPATH /private/10003a3f/apps
END

 

QUOTE:

#include <appinfo.rh>
UID2 KUidAppRegistrationResourceFile
UID3 0xE0000003 // application UID
RESOURCE APP_REGISTRATION_INFO
{
     app_file = "HelloWorld";
     localisable_resource_file = //resource//apps//HelloWorld_loc;
}

 

QUOTE:

#include <AppInfo.rh>
#ifdef LANGUAGE_01
#include "helloworld.l01"
#elif defined LANGUAGE_02
#include "helloworld.l02"
#endif
RESOURCE LOCALISABLE_APP_INFO
{
       short_caption = STRING_r_example_short_caption;
       caption_and_icon =
       {
               CAPTION_AND_ICON_INFO
              {
                       caption = STRING_r_example_caption;
                       number_of_icons = 1;
                       icon_file = //resource//apps//helloworld.mbm;
              }
       };
}

 

QUOTE:

START RESOURCE HelloWorld_loc.rss
TARGETPATH /resource/apps
LANG 01 02
END

 

QUOTE:

&01,02
#{"HelloWorld_v9_UIQ_EN","HelloWorld_v9_UIQ_FR"},(0xE0000003),1,0,1, TYPE=SA, NC
:"Symbian Software Ltd"
%{"Symbian Software","Symbian Logiciel."}

PKG文件具体细节不写了,请教modifier@IOICN吧  ,   

<完>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值