App面对多个国家开放时,会遇到国际化需求,正常使用系统提供的国际化方法通过key-value形式就能实现国际化。在使用时可能会遇到代码中写好了key值,国际化文件中由于某些原因,未同步实现key-value,造成国际化失败
怎样就造成此类问题?
专项测试时,国际化问题一切正常。当切换到集测阶段,或者在发版前通过国际化分支重新拉取国际化文件后。国际化key被其他人改变或者合并冲突时不小心处理错误,原来正常的东西,突然就变的不正常了
给到测试手中,被测试测出,可能被鄙视怎么出这么低级的bug;未被测出,流出到用户手中,职业性被狠狠的践踏
怎样去解决此类问题?
问题造成的根本原因是国际化文件被改变,代码中的key未同步变更。想个办法让代码中的key能自动检查出缺失情况。跟安卓那样,国际化文件中少了key,直接就无法正常编译
编译期会做变量检测,想办法把字符串形式的key变成一个独立的变量。变化后的形式如key = @"key"
,使用时直接将原来国际化调用方式NSLocalizedString(@"key", nil)
换成NSLocalizedString(key, nil)
此次只是一个简单的例子。现实中,基本不会直接使用NSLocalizedString
去做国际化的显示,谁让语言还可以自己切换呢,谁让我还不太会改Bundle呢
开始去解决此类问题
定义一个变量去对应原国际化的key,虽然能通过编译报错,但是怎样保证定义的key确确实实是需要的key。靠手工去慢慢添加国际化文件的key,再去国际化变量的文件中加上对应的key变量,是不是会被同行嘲笑? 反正我曾经就是这样一个一个自己加的😓
自动将国际化Excel文件转换为.strings文件,以前使用的是localio
,支持ios/android,这货会自动生成一个满是宏的头文件,以前还不是特别明白为什么要有它。
以前的已经忘记,也只能很好的兼容OC代码,就不讲了,现在使用的是一套js自动转换Excel文件的脚步文件。通过这套文件,自动转换出需要的国际化文件,支持ios/android/web。通过修改脚步内容,使每次产生国际化文件时,同时创建一个.swift文件,此文件能完美兼容OC/Swift,后期国际化时,只需要使用这个文件中的相关常量
国际化脚本内容如下
生成的国际化文件如下
生成完毕
最终调用的方式如下
_localizeLbl.text = [IMILocalizeKit local:IMILocalizableConst.loc_main_bottom_bar_tab comment: @"没找到国际化就显示它"];
此时偷懒,直接把现在项目中封装好的国际化方法粘贴出。由于都是通过同一个Excel生成,当新生成的swift文件替换旧文件后,发生编译报错,能通过报错快速定位问题发生的地方
网友评论