iOS项目:国际化翻译端和开发端自动同步

     作为iOS开发实习生生涯的第一个任务,就是喊我调研一个国际化方案,最好是可以实现开发人员这边不用担心翻译的问题,只在意写代码;然后翻译端那边只管翻译,同步工作自动化完成。

    做过iOS项目国际化的应该都知道痛点,所有需要翻译的字段都需要挨个添加到Localizable.strings或者其他的一些strings文件里面,这就需要翻译端那边提供翻译,然后开发人员这边挨个添加到里面。   而我的工作就是减少这一步,让开发人员只关心写代码。

   我的思路是这样的:


  思路很简单,但是要怎么去实施呢?

     在开发端:Xcode6之后可以支持导出xliff文件,什么是xliff文件呢?xliff 文件其实就是 针对 string - translation - comment 的一个文件  ,具体导出过程和导入在百度或者谷歌上搜索可以搜索到大片。xliff文件里面包含了所有需要翻译成其他语言的关键字,并且你只需要在开发代码的过程中,将需要翻译的字段通过NSLocallizedString关键字进行标记,导出的时候它会自动获取并导出被NSLocallizedString标记了的关键字。而xliff文件是基于xml样式的,这个下面会讲。类似于这样:


    翻译端:翻译端这边给我的要求是,他们只需要关心翻译或者增加删除修改需要翻译的关键字以及翻译过后的字段(很绕口   逃。   所以这时候就出现了问题,最开始我想到的是写一个web端来对xliff文件进行解析,把关键字提取出来供他们翻译,但是仅仅是用前端的话,当翻译后的文件需要重新下载,它很难自动对本地的文件直接进行操作。而!翻译端那边又要求 ,他们觉得下载这个过程太麻烦,不要这个过程;这就很难受了,最后我想了下,最后敲定用客户端(python)来实现这个方式。(当时我其实没接触过python和前端的开发,所以这俩个难度对我来说差别不大)

  协作工具当然可以用svn或者git来实现,作为现在多人协助的中间工具,简直不能太适合。

  好了,现在背景大概介绍清楚了(我猜应该清楚了。下面开始说说操作流程:

    开发端在开发的时候首先利用NSLocallizedString  对需翻译字段进行标记     --->     在某一特定的时候利用Xcode将xliff文件导出,并上传到git(这里我是写的脚本,)   --->    翻译端在打开客户端的时候,先从git上面pull一次xliff文件,然后读入文件    ----->    呈现信息,翻译中......   ---->   翻译后,点击保存后会将翻译后的自动添加到xliff文件里面,然后上传到git      ----->   开发端在每次编译或者安装编译的时候自动从git上面pull xliff文件(这里我也是用脚本做的)


    现在流程大概介绍清楚了(我猜应该清楚了。下面开始说说开发思路:

     翻译端( 客户端):首先需要三个文件:1、python源代码(翻译人员操作的客户端)  2、需要解析的xliff文件  3、 一个保存关键字和翻译后字段的文件,我这里用的是excel表格。

    首先在客户端运行的时候,会自动从git上面pull一次xliff文件(因为有可能在开发端那边增加了字段,pull一次就可以实时同步),然后把xliff里需要翻译的关键字提取出来(因为xliff文件是基于xml格式的,所以提取还是蛮容易的),然后根据提取的字段放入excel表格里面,类似于这样:


然后在python写的客户端是这样的:


点击读入按钮后,会呈现左边的文本。呈现出来的文本是直接从excel文件里面读的(因为对于xliff的操作是开发和翻译都会对它进行操作,所以很可能造成冲突)。   ----->    直接对左边文本进行修改和操作,修改完后点击保存,会进行先对excel进行复写修改,然后根据excel文件的内容对xliff的文件进行修改,并上传到git。


以上就是客户端(翻译端)这边的开发思路,下面是开发端:

    开发端这边就比较简单了,写一个脚本,脚本的思路是:每次项目build的时候使用git的diff指令(diff指令是拿项目与本地仓库进行比对,不同的地方会输出),将输出保存成文本,然后对文本进行遍历,如果出现类似于NSLocallizedString    的关键字(代表项目里面有标记需要翻译的字段),就会进行以下操作:首先,对xliff文件进行一次pull,因为可能翻译端那边对翻译有进行改变;其次,根据情况判断是否需要对项目里的xliff文件重新导出(因为可能在开发端这边有新增加的需要翻译的字段);然后让xliff文件与excel文件进行比对修改,因为excel是主要保存翻译的,无论项目里面是否来得及或者没有写上需要翻译的东西,只要翻译端那边翻译了的字段就会在excel里面出现;然后上传并导入xliff文件。


好了,通过上面的一些讲解和开发思路,我想实时同步开发和翻译俩个端的数据是可以实现的,可能上面的讲解对于没接触过国际化的人来说并不是很详细,但是我想做过国际化的人来说应该是能看懂的,如果有不懂的可以联系我vx:zx4652737,也可以给我留言。


后续补充:以上的思路并未考虑到项目的大小,若项目过大,导出和导入xliff文件都会消耗大量的时候,这是在编译的时候承担不起的;那么我们就可以换一种思路:在特定的时候去执行一次导出和导入操作,比如在项目打包的时候去做一次,或者在翻译端那边给出一个反馈之后去做一次。这样算是一种在时机上的一种优化。

demo地址

demo可能需要自己去配一下路径

如果本文章有点帮助的,请给小弟一个赞鼓励下 嘿嘿

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,793评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,633评论 18 139
  • 之前一直在纠结于自己是一个家庭主妇,没理想没人生。看完本书,我才明白,其实作为女人,家庭是最为珍贵的。对生活充满热...
    菜小东西阅读 143评论 0 1
  • 看了今天的文章感受到很多暖意,人的认知改变竟能产生如此大的效果,给自己的生活带来切实的改变。今天的文章是关于见得别...
    雅倩1120阅读 139评论 0 0
  • Docker 是一个开源的应用容器引擎。 Docker的应用场景 Web 应用的自动化打包和发布。 自动化测试和持...
    万总有点菜阅读 257评论 1 1