浏览模式: 标准 | 列表
11月
27

系统汉化

 要对系统进行汉化与其说是个技术活,不如说是个力气活,但确实又少不了细心。系统汉化可以分为应用汉化、框架汉化、Luna汉化和其它部分汉化。

应用汉化

ROM中预先安装好的应用都在rootfs/usr/palm/applications中,对每个应用汉化时要注意,不同的程序编写方式,汉化方式也不一样。mojo和enyo的程序在多国语言化方面有些差异。

MOJO程序汉化

mojo程序汉化时,在相应的包名目录下,建一个resources/zh/cn目录。

如果要汉化桌面图标上的显示文字,全局搜索等内容,你需要建立一个appinfo.json的文件,这个文件内容可以直接把从软件包中的这个文件复制过去然后修改,修改时需要注意,图标位置,执行文件的位置等内容,一定要加上../../../这样的路径,否则这些文件找不到。

如果你要汉化js中的那些为实现多国语言已经做了处理的字符串(就是用$L()包含的那些字符串),那你需要再建立一个strings.json文件,其中的内容格式为:

  1. {  
  2.     "OK""确定",  
  3.     "Cancel""取消"  
  4. }  

如果字符串中包含一些特殊字符,一定要注意要用json的转义方式来写。

还有些需要汉化的字符串是在views中的html中的,这些内容的汉化,只需要在这个目录下建立对应的目录,将原始的html复制到这些目录下,对其进行汉化即可。

有时候汉化还涉及到css的一些调整,同样把css文件复制过来做修改就可以啦。

ENYO程序汉化

enyo的程序汉化相对来说简单些。

对appinfo.json的汉化与mojo相同。

对字符串的汉化只需要在resources下建一个zh_cn.json的文件就可以了,内容格式跟mojo的strings.json格式相同。

enyo没有views这种东西,所以就不用管了。

框架汉化

在rootfs/usr/palm/frameworks下的许多框架文件也需要汉化。具体那些文件需要汉化就不说了,可以参考其它多语言化文件来处理。

frameworks这里面有些目录在一些比较新版本的原始ROM中就已经包含了汉化内容,比如mojo,mojo2,enyo这些目录,所以如果发现他们里面原本就有汉化内容的,就不需要重复汉化了。

LUNA汉化

在rootfs/usr/lib/luna下,有部分资源是需要汉化的,其中包括luna-network和system。汉化的内容跟汉化的方法跟mojo应用程序相同。

其中关于信标的汉化最主要的部分也在这里。在rootfs/usr/lib/luna/system/luna-systemui/resources/zh/cn/strings.json中,添加:

  1. "CHINA  MOBILE""中国移动",  
  2. "CHN-UNICOM""中国联通",  
  3. "China Telecom""中国电信",  
  4. "China Unicom""中国联通",  
  5. "CMCC""中国移动",  

就可以实现对信标的汉化了。注意上面"CHINA  MOBILE"中间是两个空格,而不是一个。

但要实现更完美的信标汉化,还需要在:

rootfs/usr/palm/applications/com.palm.app.phoneprefs/resources/zh/cn/strings.json

rootfs/usr/palm/sysmgr/localization/zh_cn/strings.json

里面都添加上这一段内容。

对于一卡多号的用户来说,上面这些数据可以能对您的信标中文化无效,因为一卡多号的卡里面的信标内容跟上面的是不同的,有同学反映他的一卡多号的信标后面还带有手机号,所以对于这种卡就没办法做统一的汉化了,但是使用者可以按照这种方法,把自己那些特殊的信标加到这里面。

其它部分汉化

在rootfs/usr/palm/public和rootfs/usr/palm/sysmgr里面也有一点资源需要汉化。至于那些文件,可以参考这里面的其它语言的资源。

这里主要提一点关于启动器中那些页面标题的汉化,这些标题的汉化可以在rootfs/usr/palm/sysmgr/localization/zh_cn/strings.json中添加上。

而且不但可以添加默认的那几个(Applications、Extras、System这些),你还可以添加用户可能会建立的新页面的标题,比如Games、News等,这些添加之后,用户在建立具有这些名称的页面之后,当再次重启系统时候,这些英文名在中文界面下也会自动变成中文了。

最后还要强调一下,汉化是个细心的活,要想完美汉化,对每个词每个句子甚至每个缩写都要字斟句酌才能得到完美的结果。

举个例子,比如在日历的汉化中,有几个英文序数词结尾的汉化,这些序数词后缀分别是"nd"、"rd"、"st"、"th",如果你不了解上下文,当看这几个词你可能不知道什么意思(但如果你够聪明的话,当看到这几个摆在一起时应该也会想到)。我们知道在中文里序数词和基数词是没区别的(如果非要说有区别的话,那区别就是中文的序数词是在基数词前面加一个“第”字),那么在汉化这几个词时,我们就应该把它们汉化为空字符串,而不应该原样保留(因为我们没办法把后缀汉化改成前缀汉化,所以不能把它们汉化成“第”)。

类似的地方还有好多,这里仅仅是举个例子。从这里我们可以看出,汉化的确不是一件容易的事情,所以,在这里我要向一直以来提供系统汉化包的开发者们表示崇高的敬意!

汉化包的打包

汉化包在打包时,如果考虑到集成到ROM中,并且可以方便卸载的话,最好的方式是把这些新添加的汉化资源单独拿出来打成一个包,这些资源在包里面就以原始路径存在,不需要postinst、postrm之类的脚本,直接打包之后,放在<carrier>.tar中就可以啦。

这样做的好处是,便于汉化包的卸载和升级。

但是这种包直接提供给用户安装的话,用户还需要一定的Linux命令行知识,能够自己使用ipkg命令来安装卸载包才行。因为这些包是不能通过preware、WQI来安装的,否则安装位置是不对的。

现在直接提供给用户安装的汉化包,大部分都是以应用程序方式来打包,然后通过postinst方式来将汉化资源再复制到相应的汉化目录下。这种汉化包对用户来说,便于使用preware、WQI来安装,但是却不方便卸载,也不方便集成到ROM中。

所以,两种方式各有利弊,根据具体情况来做选择就行了。