关于S60软件的汉化文章有很多了,这里主要是说说比较难汉化的ASCII字符串。
首先,先简单的介绍一下S60软件的汉化资源位置。
一般的S60软件中需要汉化的资源在.rsc文件中,软件的资源文件通常以.RXX为后缀,最重要的资源文件是.RSC,是软件缺省资源文件。还有.R01,.R02,.R31等等,其中,01, 02,...31是国家代码。01是英文,31是中文。极个别的也会存在于.APP文件中。软件生产出来之后,通常会有.R01,.R02,.R31这样一堆文件,但是安装的时候,在选择语言之时,安装程序会将.RXX之一,换名安装为.RSC。那么,都什么是需要汉化的资源呢?
S60的文本资源分两种字符串结构:Unicode字符串和ASCII字符串。
一,Unicode编码:
用Unicode编码的软件比较常见,汉化起来也比较简单。下面简单介绍一下:
Unicode编码的字符无论中文还是英文都是占两个字节,只要用中文的字符替换英文的字符就可以汉化了,如英文的Unicode的“OK”是两个字符占四个字节,中文的“确定”也是两个字符占四个字节,直接替换即可。因为英文的单词一般比起中文较长,所以长出的部分我们可以用空格进行代替,必须保证文件的大小不改变,如英文的Unicode的“Options”是占用七个字符十四个字节,中文的“选项”则只占两个字符四个字节,所以就要在后面加上五个“空格”来补充字节(“空格”的Unicode代码为2000),只要保证文件的大小不改变就不会出问题的。
OK 4F 00 4B 00
确定 6E 78 9A 5B
Options 4F 00 70 00 74 00 69 00 6F 00 6E 00 73 00
选项 09 90 79 98 20 00 20 00 20 00 20 00 20 00
相信大家对Unicode编码的汉化已经了如指掌了,我就不罗嗦了。
二,ASCII编码:
现在越来越多的英文软件已经开始使用ASCII码资源。对于英文程序开发员来说,这是完全可以理解的,因为本身英文字符只有26个,加上其它标点等字符,最多也就一百多个字符,所以英文的字体文件比中文字体文件要小得多。要让英文字符无缘无故地占用两个字节,在他们看来的确是非常大的浪费。所以ASCII码资源文件的软件也不断开始涌现。
相对上面的Unicode编码来说,ASCII编码的文件汉化起来要困难得多了,很是麻烦的。大家要有细心的哦。
要介绍一下ASCII编码资源的特点:每个英文字母占一个字符一个字节!!
那么我们象汉化Unicode编码的方法用中文的ASCII字符直接替换不行吗?反正英文字母也多于中文的。但是不行,我曾经试过,但不能正常显示中文,全部都是乱码。所以我们必须用中文的Unicode字符去替换,因为只有Unicode字符才能正常显示中文。那么是不是直接替换就行呢?不是的,下面我就以Camcoder pro for 6600为例说明汉化的方法。
中文编码的使用是需要再加上标识符的,这个标识符是以0F开头(表示以下内容为Unicode编码),以E0结尾(E0表示以后为ASCII编码)不是在一句话里穿插翻译的话E0可以省略,只要有0F就行了。
符串的组织,主要分两种:
1.有最大长度的字符串 ,如“Options”的ASCII字符串是:
07 07 4F 70 74 69 6F 6E 73
其中:
-07是七个字符(前面说过了,英文一个字母占一个字符)。
-07是七个字节(一个英文字母占一个字节)。
-4F是“O”的代码。
-70是“p”的代码。
-74是“t”的代码... 69.. 6F.. 6E.. 73...。(第1图)
换成中文的Unicode的“选项”是:
03 07 0F 90 09 98 79 00 20
其中:
-03表示有三个字(“选项”两个字,加一个“空格”)
-07依然表示占用七个字节。
-0F表示以下内容为Unicode编码。
-90 09是“选”的Unicode编码的代码(小端字节序,简单说就是和PC上反过来,你查到的“选”的Unicode代码是09 90,这就要反过来)。
-98 79则是“项”的Unicode编码的代码(小端字节序)
-00 20是“空格”的Unicode编码的代码(小端字节序)
*如果采用开头用0F,结尾用E0的格式是:
03 07 0F 90 09 98 79 E0 20
其中:
-03表示有三个字(“选项”两个字,加一个“空格”)
-07依然表示占用七个字节。
-0F表示以下内容为Unicode编码。
-90 09是“选”的Unicode编码的代码(小端字节序,简单说就是和PC上反过来,你查到的“选”的Unicode代码是09 90,这就要反过来)。
-98 79则是“项”的Unicode编码的代码(小端字节序)
-E0表示以后为ASCII编码。
-20是“空格”的ASCII编码的代码。
2.无最大长度的字符串 ,“STOPPING”是:
08 53 54 4F 50 50 49 4E 47
其中:
-08是八个字节(一个英文字母占一个字节)。
-53是“S”的代码。
-54是“T”的代码。
-4F是“O”的代码... 50.. 50.. 49.. 4E...47。(第2图)
换成中文的Unicode的“停止”是:
08 0F 50 5C 6B 62 00 20 E0
其中:
-08依然表示占用七个字节。
-0F表示以下内容为Unicode编码。
-50 5C是“停”的Unicode编码的代码(小端字节序)
-6B 62则是“止”的Unicode编码的代码(小端字节序)
-00 20是“空格”的Unicode编码的代码(小端字节序)
-E0表示以后为ASCII编码。(第3图)
这样一个个的汉化很是麻烦,所以对S60软件有汉化爱好的朋友一定要有耐心的哦,还有呢。
当你发现有的英文只有四个字母,如:Exit,
45 78 69 74
只占四个字节,而译成中文的“退出”,
0F 90 00 51 FA
最少就要五个字节(只加0F不加E0)。
那么我们怎么办呢?我在这里交大家一个方法。就是借。。。
就以这个“Exit”为例,在软件中代码如(第4图)
04 04 45 78 69 74
汉化成“退出”,是根本不够的。
02 05 0F 90 00 51 FA
那么我们向上看02 06 0F 66 F4 54 0D 00那个位置是被翻译成“更名”的代码。在他的后面好象多了一个字节00没有什么用哦。你不用,我来用。把他剪切下来,插入到74后面。要注意哦,你剪切了一个字节哦,对了,要把06改成05。
那么,“Exit”就变成了如(第5图):
04 04 45 78 69 74 00
正好五个字节。赶快替换吧!(第6图)
放到手机上看看~!(第7图)
**注意啦:最关键的在下面!!!!
但是,并不是这里的字节不够了就可以到处去借的,我经验所得,当在字节不够是可以向同一菜单内的单词借字节(在那个单词汉化后有空余字节时,如“0020”“00”)(第7图)中的“Exit”就是 向上面的“更名”借了一个字节,这就是允许的,也可以向“删除”“关于”借,只要他们有空余的字节可提供给你使用。而不能向(第8图)
“发送”的扩展菜单中的“经邮件”“经多媒体”“经蓝牙”“经红外线”去借,就算他们有再多的字节空余,你也不能借来用,会出错误,“经邮件”“经多媒体”“经蓝牙”“经红外线”只能在他们之间互相补充字节。
其他同理,也就是说:在同一菜单下的单词,字节多少可以互相补充;而不在同一菜单下的单词,不可以补充字节的多少。
补充字节时要注意:
被剪切的单词前的字节数需要改变,有时还要改变字符数,如剪切了“0020”中两个字节的一个字节“20”,要保证与事实相符。其实字符串的剪切是不符合标准汉化的,而且在没有可以补充的时候就不能汉化了,此软件就碰到了“On”就没有汉化,因为“Off”只有三个字节,没有空余。标准方法是利用偏移量,而暂时还没有找到支持16位windows软件的偏移量转换器,所以,只能暂时用此方法代替。
汉化工具可以用Hex Workshop,我就是用它,很好用。这是汉化ASCII编码文件的经验总结,希望大家能够学到点什么。