今天我们聊聊一个特别接地气的项目,就是把公司买的那个“企业人寿”的安卓应用,自己给汉化了。这事儿纯属被逼无奈,但做完之后成就感是真的强。
本站为89游戏官网游戏攻略分站,89游戏每日更新热门游戏,下载请前往主站地址:www.gm89.me
怎么开始的?
我们公司前两年花大价钱买了一套国外的企业员工福利管理系统,说是高端大气上档次。确实,功能是挺全,但配套的手机App,也就是员工日常查保单、看福利的那个东西,全TM是英文。销售当初拍着胸脯说,可以加钱做本地化,结果一报价,好家伙,比我们一年的维护费还贵。老板一听就炸了,说:“不就是几个翻译吗?我们自己找个大学生搞定!”
结果当然是大学生搞不定。那玩意儿里头全是保险和金融的专业术语,光是“年金”和“退休账户”的几种英文表达,就搞得他们头大如斗。而且我们又不能直接把源代码给外人看。这事儿就这么拖着,每次员工抱怨App看不懂,我们IT部门就得背锅。
我当时正赶上手上项目收尾,闲着也是闲着,就跟领导说,我试试自己能不能搞定。反正最差的结果,也就是浪费点时间,但要是成功了,那可就给公司省了一大笔钱,年底绩效起码跑不掉。
动手前的准备工作
我接下这个活儿,第一步就是把App的安装包先扒拉下来。这个App是内部部署的,不是从应用商店下的,所以文件就在我们服务器上躺着。拿到APK文件之后,我心里有数了,这活儿就是个逆向工程,把人家的包拆了,换个语言文件,再装回去。
我翻出我以前装满各种小工具的笔记本电脑,准备了一个专门用来拆解安卓包的工具箱。这玩意儿说起来玄乎,就是几个批处理脚本和一些小软件集合。我先在新电脑上把环境都配确保各种Java和运行环境都对得上,不然一运行就报错,那才叫耽误事。
这一步花了我一个下午。主要是要保证,我后面不管怎么折腾这个包,都能原封不动地重新封而且能被安卓系统接受。这个准备工作是基础,要是没搞定,后面的工作都是白搭。
第一次尝试:把文字挖出来
我把那个“企业人寿”的APK文件拖进我的工具里,一键分解。我的屏幕上瞬间刷出来一大堆文件和文件夹,跟个蜂窝煤一样,密密麻麻的。
要做的就是大海捞针,找到App里所有的英文文字到底藏在哪了。我凭着经验,直接奔着res(资源)文件夹里去了,果然在values这个目录下面,我看到了一个文件。点开一看,全TM是英文!这就是App里所有的显示文字了。
但是事情没有这么简单。这App毕竟是企业级的,功能复杂,光是一个根本不够。我发现,很多复杂的界面文字,比如菜单名称、弹窗提示,以及一些动态生成的文字,都不在这个主文件里。它们被拆分到了几十个不同的XML文件里,有些甚至被硬编码在了程序的逻辑文件里(虽然我得装作没看见,因为改那个太麻烦,而且风险大)。
我决定,先集中力量,把那些XML里的文字全部挖出来。我写了个脚本,把所有包含
翻译和上下文的苦头
这个表格光行数就有快五千行,堆满了各种专业名词和缩略语。
第一关:机翻的惨状。我一开始图省事,想用谷歌翻译批量处理。结果出来的中文简直不能看,很多句子虽然翻译过来了,但完全不符合国内的语境,读起来像机器人在说话。比如把“Policy Holder”翻译成了“政策持有者”,而不是更自然的“保单持有人”。
第二关:请教专业人士。我立刻意识到,光靠我这个IT宅男自己翻,肯定要出事。我赶紧拉了公司财务部和HR部门的两个懂保险的小姐姐,请她们帮忙审阅和润色。我们三个人,周末窝在会议室里,逐条对着英文原文,讨论最合适的中文表达。那段时间,我学会了好多以前根本没听过的保险术语。
第三关:字符编码。在把小姐姐们翻译好的中文文本塞回去的时候,新的问题来了。因为涉及中文字符,我必须保证XML文件是用正确的UTF-8编码保存的,不然App跑起来就是一堆乱码,问号连着方框,那画面太美不敢看。我反复确认了所有文件的编码格式,确保万无一失。
重新打包和签字
文字都搞定了,下一步就是重新封装这个App包。我再次动用我的工具箱,把那些修改过的XML文件和原来的程序代码重新合在了一起,生成了一个新的APK文件。
但是,安卓系统是很轴的。任何从外部修改过的App,在安装的时候都会因为“数字签名”不匹配而被拒绝安装。原来的App是有原厂的“盖章”的,我拆开重装后,那个章就失效了。
我没法拿到原厂的私钥,所以只能自己给它盖个章。我用我们公司内部的测试证书给它签了名。我必须跑一遍命令行,用一堆复杂的参数去给这个新包打上新的“烙印”。
这个签名过程是反复失败的。不是证书路径不对,就是算法没选对。我一边查着资料一边尝试,搞到凌晨两点多,终于敲定了一条成功的命令,新的、带着中文界面的APK文件诞生了。
跑起来了
第二天一早,我拿着这个新鲜出炉的汉化包,找了几个同事的测试机,开始安装。我心里那个紧张,生怕一打开就闪退。
我点开了图标,屏住呼吸。欢迎页跳过,进入主界面,所有以前的英文菜单,现在清清楚楚地显示着:“我的保单”,“福利详情”,“个人账户管理”。我点进去一个二级页面,发现翻译也都对得上,而且用词非常地道。
所有参与测试的同事都说,终于能看懂了!那一刻,我觉得这几天熬的夜,值了。虽然这只是个内部App的汉化,技术含量不是最高,但解决了一个长期困扰公司的小麻烦,那份成就感不是盖的。
这只是一个阶段性的胜利。只要原厂App一更新版本,我就得从头再来一遍。所以这个工具箱和流程,我现在都得好好保存着,毕竟以后“企业人寿安卓汉化”这活儿,大概率还得我接着干下去。
