在開發過程中本地化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吧  ,  

<完>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章