UIQ3 软件汉化教程+工具下载

rzrclover

普通会员
2007-08-13
1,283
0
0
这篇教程十分的浅显,是给大家一点入门的东东...

汉化,就是只把非中文的软件变成我们所用的简体中文(废话- -|||)....
首先,咱们要找出我们所需汉化的东东....
要咱们所需汉化的东东,咱们就需要将SIS解包...

[SIS解包]
我在这里用到的是uNsis3.1...
首先把这个软件打开




看图说话




我的设置如图...


这个图,就成功解出咱们所要的东东了...
信息这个框框里面是PKG的基本内容...


最后我们由SIS得到了些东东....
除了这些咱们还得到了PKG这个东东...
咱们等下再来说下这个东东的作用..

第一步咱们就完成了..
容易吧....


[汉化教程1]


背景知识:

UIQ软件的菜单、对话框、各种控件中的提示字符串,通常,都保存在资源文件中。汉化,就是要把资源文件中的英文字符串,转换成中文。
UIQ软件的资源文件通常以.RXX为后缀,最重要的资源文件是.RSC,是软件缺省资源文件。还有.R01,.R02,.R31等等,其中,01, 02,...31是国家代码。01是英文,31是中文。
软件生产出来之后,通常会有.R01,.R02,.R31这样一堆文件,但是安装的时候,在选择语言之时,安装程序会将.RXX之一,换名安装为.RSC
当然,也有的软件将所有语种的资源文件统统安装到手机,到运行时,再根据环境选择恰当的资源文件。
一言蔽之:DX们要干的事,就是把手机里的.RSC文件抓出来,替换其中的英文为中文;要是没有.RSC文件,那就根据情形,选择.RXX文件之一,汉化之。

接下来咱们就开始最重要步骤,汉化咱们所得到的RSC文件....
这个我就只是让大家了解下流程....
具体的大家看看这个....


1. 耐心。
2. 任何可以编辑二进制文件的编辑器(偶就是用UltraEdit{这里指的是原作者,我用的Hex Workshop
都会为大家提供的},别的工具也行)
3. 可以转换汉字为UNICODE代码的转换器


好了,教程开始了....

在资源文件中,UIQ的字符串采用的是ASCII和UNICODE混编的方式(不解~~~,S60就比较单纯,非此即彼)。

而字符串的组织,主要分两种:

1.有最大长度的字符串
比如,"GoodMan"这个字符串,会是:
07 07 47 6F 6F 64 4D 61 6E
- 07 表示字符串中有多少个字(这个对ASCII编码的英文来说,一个字母是一个字)
- 07 表示整个字符串占7个字节(BYTE)
- 47 是G的ASCII码,6F 是o的ASCII码,6F..到..6E,类同。
换成中文的“好人”,就应该是:
03 07 0F 59 7D 4E BA 00 20
- 03 表示有三个字!!(也就是,"好人"二汉字,再加上最后一个汉字空格,实际上,我们汉化完的字符串是“好人 ”,最后有个空格。)
- 07 表示整个串占7个字节(BYTE)
- 0F 表示此后的内容为UNICODE编码。
- 59 7D,是“好”字的UNICODE编码,按小端字节序(简单说就是和PC上反过来,你在UltraEdit看到的好字的UNICODE是7D 59,这就要反过来)
- BA E0,“人”字的UNICODE编码,小端字节序。
- 00 20,“ ”空格的UNICODE编码,小端字节序。

以ACM的About为例:



"About"这个字符串,会是:
05 05 41 62 6F 75 74
- 05 表示字符串中有多少个字
- 05 表示整个字符串占5个字节(BYTE)
- 41 是A的ASCII码,62 是b的ASCII码,6F..到..74,类同。


换成中文的“关于”,就应该是:
02 05 0F 51 73 4E 8E
- 02 表示有两个字。
- 05 表示整个串占5个字节(BYTE)。
- 0F 表示此后的内容为UNICODE编码。
- 51 73,是“关”字的UNICODE编码,按小端字节序。
- 4E 8E,是“于”字的UNICODE编码,按小端字节序。



完成后手机上的效果...


再来一个Action例子:
"Action"这个字符串,会是:
06 06 41 63 74 96 6F 6E
- 06 表示字符串中有多少个字
- 06 表示整个字符串占6个字节(BYTE)
- 41 是A的ASCII码,63 是c的ASCII码,74..到..6E,类同。


换成中文的“动作”,就应该是:
02 06 0F 52 A8 4F 5C E0
- 02 表示有两个字!
- 06 表示整个串占6个字节(BYTE)
- 0F 表示此后的内容为UNICODE编码。
- 52 A8,是“动”字的UNICODE编码,按小端字节序。
- 4F 5C,是“作”字的UNICODE编码,按小端字节序。
- E0 表示UNICODE编码结束此后的内容为ASCII码。(有0F前导,还有E0结束,就是E0以后的字符,又是ASCII码)
以上例子,0F 52 A8 4F 5C E0恰好填满6个字节,比如刚才“About”的情形,E0可以省略。



完成后手机上的效果....

2.无最大长度的字符串

还是"GoodMan"这个串,会是:
07 47 6F 6F 64 4D 61 6E
- 07 表示有7个字节
- 47 6F 6F 64 4D 61 6E,GoodMan 的ASCII编码

换成中文,就是:
07 0F 59 7D 4E BA 00 20
- 07 表示有7个字节。
- 0F UNICODE编码开始。
- 59 7D,“好”字的UNICODE编码,小端字节序。
- BA E0,“人”字的UNICODE编码,小端字节序。
- 00 20,“ ”空格的UNICODE编码,小端字节序。
 
又以ACM的Getting Divert Information ...为例:
“Getting Divert Information ...”这个字符串,会是:
1E 47 65 74 74 69 6E 67 20 44 69 76 65 72 74 20 49 6E 66 6F 72 6D 61 74 69 6F 6E 20 2E 2E 2E
- 1E 表示有30个字节。
- 47 65 74 ... 2E,是“Getting Divert Information ... ”的ASCII编



换成中文的“正在获取转移信息 ...”,就应该是:
1E 0F 6B 63 57 28 83 B7 53 D6 8F 6C 79 FB 4F E1 60 6F E0 20 2E 2E 2E 20 20 20 20 20 20 20 20
- 1E 表示有30个字节。
- 0F UNICODE编码开始。
- 6B 63...60 6F,是“正在获取转移信息”的UNICODE编码,按小端字节序。
- 4F 5C,是“作”字的UNICODE编码,按小端字节序。
- E0 表示UNICODE编码结束此后的内容为ASCII码。
- 20 表示“ ”空白的ASCII码。
- 2E 表示“.”点的ASCII码。
- 最后几个20 表示“ ”空白的ASCII码,填满不足30个字节的位置。
[strike]浏览附件3823748[/strike]
换成中文的“正在获取转移信息 ...”,就应该是:
1E 0F 6B 63 57 28 83 B7 53 D6 8F 6C 79 FB 4F E1 60 6F E0 20 2E 2E 2E 20 20 20 20 20 20 20 20
- 1E 表示有30个字节。
- 0F UNICODE编码开始。
- 6B 63...60 6F,是“正在获取转移信息”的UNICODE编码,按小端字节序。
- 4F 5C,是“作”字的UNICODE编码,按小端字节序。
- E0 表示UNICODE编码结束此后的内容为ASCII码。
- 20 表示“ ”空白的ASCII码。
- 2E 表示“.”点的ASCII码。
- 最后几个20 表示“ ”空白的ASCII码,填满不足30个字节的位置。

接下来,是个人觉得最有技巧的地方...

借用字节:

当我们汉化时发现字节不足以汉化足够的中文字时,这时候我们就可以借用字节。
比如我们要汉化“File”这个英文,中文汉化为“文件”。但“File”只有4个字节,“文件”两个字需要5个字节才行,那我们只能借用其它汉化字多出的字节
以sCapture7为例

如图




我们看到红圈圈住的两个英文“SCap”和“Options”,分别汉化成“撷取”和“选项”。

大家看到“SCap”有4个字节,汉化成“撷取”需要5个字节,所以字节不足。
04 04 53 43 61 70

“Options”有7个字节,汉化成“选项”需要5个字节,有两个字节可以借用。
07 07 4F 70 74 69 6F 6E 73


[hr][汉化教程2]

一般在同一个区域内的字都可以互相借用,但一定不能更改同一个区域内字符串的最大长度。注意也要修改相应的字节数,就是说想“SCap”增加了1个字节,“Options”就要减去1个字节。那些汉化不够的地方插入相应的字节数,也要减去汉化多出字节的相应字节数。

如图

我们先将“Options”汉化成“选项”
02 06 0F 90 09 98 79 E0
留下一个字节给“撷取”用。
02 表示有两个字,06 表示整个串占6个字节。减掉1个字节。
再将“SCap”汉化成“撷取”
02 05 0F 64 B7 53 D6
这里就增加了1个字节,是刚才借用“选项”减掉的那1个字节。
02 表示有两个字,05 表示整个串占5个字节。增加了1个字节。

完成后的效果...

接下来,也是用得比较巧妙的地方...

增加字节:
上面说了如何借用字节,但有时遇到全部字节借完了还是不够用。
这时我们就准备增加字节,增加字节是比较麻烦,为要改动很多编码,一不小心就~~~ 不说大家都知道了!
首先大家先了解一下文件结构!
我以Handy Expense为例,先看图:



我们看到最尾部的4E 0E编码,表示文件编码最尾部份去到0F 4E这个位置。(大端字节序,所以要反过来看)
也就是说,图中反白部份就是文件的字节位置,每个编码都代表了文件的位置。
我们再看图

这个菜单只剩下“New”字没有汉化,因为不够字节。

少2个字节才够汉化成“新建”,所以我们要增加2个字节,但就加2个字节软件一定会出错。

现在开始要讲如何增加字节了
现在我在“New”字后面加了两个字,变成“New12”。增加了字节后同时也要更改字数和字节数。
最尾部的4E 0E编码也向后移了两格。这时我们就要看看前一张图新加的“1、2”是在什么位置。

看到是在00 CF,再看看上图那组字节复盖了00 CF。发现3B 01,反过来看应该是01 3B。所以01 3B之后的字节都需要增加字节数,因为本来是在01 3B位置上的,增加字节后就会变成01 3D了。之后的02 83要改成02 85,一直改到最后的0F 4E变成0F 50了
改完后的图片
很辛苦的把字节数加完了,再看看效果:

嘿嘿...效果不错吧.....


说了这么多....怎么修改....
那咱们怎们知道代码呢?
接下来看看这个吧....


查看中文字的UNICODE编码:
1. 用UltraEdit。
2. 打开一个新窗口。
3. 输入中文字,例如输入“中文数码论坛”



4.按下“File”--->“Conversions”--->“ASCII To Unicode”(我提供的这个为汉化版,非原作者教程所用这个...这个选项在转换里面..)


5.然后按Ctrl-H或下图Toggle HEX Mode在Text View和HEX View两种方式间切换。

好了.....看完这里,你已经是完成了一大半了.....
汉化最需要的是耐心和细心.....
相信看完的朋友一定能汉出好的作品来.....enjoy it....

[PKG]


最开始我们不是得到了一个PKG吗....
下面咱们就来说下这个PKG....

创建 SIS 文件,它使用打包文件 (.PKG) 提供的信息来组装文件。

一个打包 (PKG) 文件是由一个文本文件包含一些定义的安装内容。
PKG 文件格式, 大致包含以下几类组成:
1 languages (语言)
2 package-header (打包的首部)
3 vendor (供应商)
4 logo (标识)
5 [package-signature] (打包 - 签名)
6 dependency (支持平台的UID)
7 package-body (打包内容)


annotation 注解行:
;Installation file for filename application
凡是前面带有分号〝;〞 的,都是注解行,内容可以省略(打包时不会引用和读取)

languages 支持的语言:
;Languages
&EN,ZH
第一个非注解行〝&〞指定支持的语言变体。一个 SIS 文件可能包含多于一个的语言变体,但每次只能安装一个变体。
后面〝EN,ZH〞代表英文与简体语言。

package-header 打包的首部:
;UID is the app's UID
#{"MyApp-EN", "MyApp-ZH"}, (0x1000001F), 1, 20, 3000, TYPE=SA
第一个非注解行〝#〞是指定首部标识。

第一部分 {"MyApp-EN", "MyApp-ZH"} 是程序名称。
第一个MyApp-EN是英语程序名称,第二个 MyApp-ZH 就是中国汉语程序名称了。

第二部分 (0x1000001F) 是程序的 UID。
程序的 UID 数字是程序的唯一鉴定,每个程序的UID都不相同,如果两个应用程序都使用一样的UID,安装后将仅仅可见一个程序在你的主菜单上。
如果你要发表你的软件,你可以发电邮 uid@symbiandevnet.com 申请你的程序UID。

第三部分 1, 20, 3000
是程序的版本号。分别主版本号,次版本号,编译版本号。以上是:版本 1.20build 3000

最后部份 TYPE=SA
是选择安装类型。

vendor 供应商名称: 供应商名称分为二种,一种是本地,另一种为非本地
;Localised vendor names
%{"Vendor-EN", "Vendor-ZH"}
第一个非注解行〝%〞是供应商名称标释。
{"Vendor-EN", "Vendor-ZH"} 是本地供应商名称。
第一个 Vendor-EN 是英语供应商名称,第二个 Vendor-ZH 就是中国汉语供应商名称了。
;Non-localised vendor names

:"Unique vendor name"

第一个非注解行〝:〞是非本地供应商名称标识。

"Unique vendor name" 是非本地供应商名称。

logo 标识:
The syntax for a logo item is as follows:


="logo.jpg","image/jpeg","target.jpg"


第一个非注解行〝=〞是图标标识。

第一部分 "logo.jpg" 是图标路径与名称。

第二部分 "image/jpeg" 是图标类型。

第三部分 "target.jpg" 是安装目标位置与名称。

[package-signature] 签名:
;Package signature

*privatekey-filename,certificates-filename[,KEY=privatekey-password]
第一个非注解行〝*〞是签名标识。
第一部分 privatekey-filename 是私钥的路径与名称。
第二部分 certificates-filename 是Symbian签发的证书路径与名称。
第三部分 KEY=privatekey-password 是私钥的口令。

Dependency 支持平台的UID:
;Dependency on another component
{0x101F6300), 3, 0, 0, {"UIQ30ProductID","UIQ30ProductID"}
第一部分 (0x101F6300) 是UIQ 3.0的UID。
如:
UIQ 3 - 0x101F6300
S60v3 - 0x101F7961
第二部分 3,0,0 是平台的UID的版本号。分别主版本号,次版本号,编译版本号。
第三部分 {"UIQ30ProductID","UIQ30ProductID"}
是平台鉴定字串符。 使用“UIQ30ProductID〞为 UIQ3.0 平台。

显示文本或版权信息:
;Display new features

"\Symbian\CopyRigght.txt" - "",FT,TE
IF (LANGUAGE = 1)
第一部分 "\Symbian\CopyRigght.txt" 是在安装过程显示。
将这个文本文件放在和PKG文件相同的目录下(如果不是,你必须指定路径)。
显示多于一个的语言文本或版权信息:
;Display Release notes

IF (LANGUAGE = 1)
"\Symbian\CopyRigght-EN.txt" - "",FT,TE
ELSEIF (LANGUAGE = 31)
"\Symbian\CopyRigght.txt-ZH" - "",FT,TE
ENDIF

第二部分 "",FT, TE 说明:
FT FILETEXT 被规定FILETEXT使用的命令

TC TEXTCONTINUE 在文本窗中只有一个按钮“继续”给用户按下继续安装。

TS TEXTSKIP 在文本窗中只有"是"和"否"的按钮。如果按"是",程序将继续安装。如果按"否",程序也会继续安装, 但是在PKG文件内这个文本以下的元件将不被执行安装。

TE TEXTEXIT 在文本窗中只有"是"和"否"的按钮。 如果按"是",程序将继续安装。如果按"否",程序将会退出安装。

TA TEXTABORT 在文本窗中只有"是"和"否"的按钮。 如果按"是",程序将继续安装。如果按"否",程序将会退出安装,通常针对局部的安装。

package-body (打包内容):

;Files to install (独立安装的语言文件)

"\Symbian\UIQ3\files\myFile.rsc" - "!:\Resource\Apps\myFile.rsc"
"\Symbian\UIQ3\files\myFile_reg.rsc" - "c:\private\10000000\import\Apps\myFile_reg.rsc"
"
"编译生成的文件路径"-"目标设备目录"
第一部分 "\Symbian\UIQ3\files\myFile.rsc" 是编译生成的本地文件路径与文件名称。

第二部分 "!:\Resource\Apps\myFile.rsc" 是目标设备目录与文件名称。

目标驱动器!
如果目标驱动器字母被指定为一个感叹号“!”,用户可以在安装时选择驱动器。
如果你不想用户选择目标驱动器,你可指定驱动器位置,例如: "c:\private\10000000\import\Apps\myFile_reg.rsc"

;Install language dependent data (选择程序安装的语言文件)


"\Symbian\UIQ3\files\myFile.r01"
"\Symbian\UIQ3\files\myFile.r31"
- "!:\Resource\Apps\myFile.rsc"


第一部分 "\Symbian\UIQ3\files\myFile.r01" 是编译生成的英文语言文件路径与文件名称

第二部分 "\Symbian\UIQ3\files\myFile.r31" 是编译生成的汉语文件路径与文件名称。

第三部分 "!:\Resource\Apps\myFile.rsc" 是目标设备目录与文件名称。

ps: 不同的语言文件 myFile.r01 或 myFile.r31,安装后的语言文件是 myFile.rsc 。
你的应用程序包含一些语言文件(数据文件、资源文件)。要安装哪个文件是取决于用户语言选择。例如 &EN,ZH,myFile.r01就必须是英文的语言文件,myFile.r31是中国汉语的语言文件,用户选择汉语,myFile.r31安装后,汉语的语言文件会改成myFile.rsc 文件了。
如果用户将 myFile.r01 和 myFile.r31 全部安装,
;Install and run an exe (安装后运行文件)

"\Symbian\UIQ3\sys\bin\myFile.exe" - "\sys\bin\myFile.exe",FILERUN, RUNINSTALL


第一部分 "\Symbian\UIQ3\sys\bin\myFile.exe" 是编译生成的英文语言文件路径与文件名称。

第二部分 "\sys\bin\myFile.exe" 是目标设备目录与文件名称。

第三部分 FILERUN, RUNINSTALL

@"\Symbian\UIQ3\Install\myFile.sis",(0x10000000)

第一个非注解行〝@〞是安装另一个文件的标识。

第一部分 "\Symbian\UIQ3\Install\myFile.sis" 是文件路径与文件名称。

第二部分 (0x10000000) 是此程序的 UID。

在用户安装时同时安装另一个 SIS 文件,在用户卸载主文件时也同时卸载此文件。

;Make sure the configuration file is removed on uninstall (卸载运行时产生的文件)
""-"!:\Temp\temp.ini",FN


第一部分 "" 是来源文件路径,应该为空白的,也就是"" 。

第二部分 "!:\Temp\temp.ini" 是产生的文件路径与文件名称。
temp.ini 是运行时产生的文件 (如: 设置的记录文件)
当你的应用程序被卸载时保证这些安装的文件被删除。




[Copy to clipboard] [ - ]
CODE:
!({"Add-on 1"},{"Add-on 2"},{"Add-on 3"})

IF option1
"\Symbian\ioicn\Demo1.MP4"-"!:\Media files\video\Demo1.mp4"
ENDIF

IF option2
"\Symbian\ioicn\Demo2.MP4"-"!:\Media files\video\Demo2.mp4"
ENDIF

IF option3
"\Symbian\ioicn\Demo3.MP4"-"!:\Media files\video\Demo3.mp4"
ENDIF


第一个非注解行〝!〞是选择安装文件的标识。

第一部分 ({"Add-on 1"},{"Add-on 2"},{"Add-on 3"}) 是选择安装文件的名称与数目。
{"Add-on 1"} 为第一个选择,{"Add-on 2"} 为第二个选择,{"Add-on 3"} 为第三个选择。

第二部分 IF option1 是如果选择 "选项1"。

第三部分 "\Symbian\ioicn\Demo3.MP4" 是选择安装文件路径与文件名称。

第四部分 "!:\Media files\video\Demo2.mp4" 是是目标设备目录与文件名称。

第五部分 ENDIF 是 "选项1" 结束语。

(注: 多选择安装我在 UIQ3 中无法打包成功)

;Install language dependent (多于一个的语言多选项选择安装)

!({"Add-on 1 EN","Add-on 1 ZH"},{"Add-on 2 EN","Add-on 2 ZH"})

IF option1
{
"\Symbian\ioicn\Demo1_EN.doc"
"\Symbian\ioicn\Demo1_ZH.doc"
-"!:\Media files\video\Demo1.doc"
ENDIF

IF option2
"\Symbian\ioicn\Demo2_EN.doc"
"\Symbian\ioicn\Demo2_ZH.doc"
-"!:\Media files\video\Demo2.doc"

ENDIF

我看了这么久还是有点云里雾里......有明白的还要教教我....
这个为大家提供的WinSISpro....
这个工具是makekeys,MakeSIS,signsis的整合...
功能相当的强大.....
这个打包,就是由我们首先用uNsis解出来的PKG就可以很方便的搞定的....
如果要进行一个修改的话,咱们还要仔细的弄明白上面所说的PKG....


咱们的教程就到此结束了....
希望大家能汉化出好作品来.....


软件下载:

uNsis.sfx.rar

HC-HexWorkShop422-fxj.part1.rar
HC-HexWorkShop422-fxj.part2.rar

WinSiSPro.rar