iOS多语言本地化流程的优化方案

  

  

多语言本地化,是我们在做IOS项目的时候经常用的,下面根据自己的经验和使用场景,来全面的说说多语言本地化的解决方案。本文从提升效率和减少错误两方面对传统的多语言本地化方式进行了优化,虽然标题是IOS,但其实macOS也通用。下面话不多说了,来一起看看详细的介绍吧。
  

  

  

在本地化。字符串中写入多种语言的版本,然后使用NSLocalizedString进行本地化:

        # en.lproj/Localizable.strings   “登录”=暗锹肌?   “注销”=白⑾?   # zh-Hans.lproj/Localizable.strings   “登录”=暗锹肌?   “注销”=巴顺觥?   #使用   loginButton。title=NSLocalizedString(“登录”,评论:“登录”)   logoutButton。title=NSLocalizedString(“注销”,评论:“注销”)      

这有什么问题呢?
  

  

繁琐!每次都要写<代码> NSLocalizedString (“xxx”评论:“xxx”)>   

  

直接上代码:

        扩展字符串{   {var本地化:字符串   返回NSLocalizedString(自我,备注:自我)   }   }      

于是现在的使用方式就变成了:
  

        loginButton。title=暗锹肌?localized   logoutButton。title=白⑾?localized      

这样代码简洁多了,也保留了代码的自解释。
  

  

但,依然还有问题,如果我不小心写成了:
  

        loginButton。title=暗锹肌?localized   logoutButton。title=發oguot .localized      

编译不会报的错,但logoutButton的标题却出不来(注意<代码>“loguot .localized>   

不要徒手写同一个需要多次使用的字符串,尽量定义成常量进行调用。

  

  

还是直接上代码:
  

        扩展字符串{   静态var localized_login:字符串{返回“登录”。本地化}   静态var localized_logout:字符串{返回“注销”。本地化}   }      

现在用起来就更爽了:

        loginButton。title=.localized_login   logoutButton。title=.localized_logout      

得益于Xcode代码提示补全的功能,我只需输入”。”“登录”回车,基本就就可以完成输入:localized_login.png

  

乍一看,已经将写字符串时出错的概率降到最低了,但这样又要多写一堆代码,岂不是把之前好不容易提升起来的效率又降低了,再加上万一,我们在写localized_logout时还是写成了<代码>“loguot”。本地化>   

  

思路:使用脚本读取<代码>可以定位的。字符串>   

构建阶段中新建一个运行脚本,填入以下脚本:

        # Localizable.strings文件路径   localizableFile=" $ {SRCROOT}/$ {PROJECT_NAME}/支持/en.lproj/Localizable.strings”      #生成的斯威夫特文件路径(根据个人习惯修改)   localizedFile=" $ {SRCROOT}/$ {PROJECT_NAME}//跑龙套/LocalizedUtils.swift源”      触摸localizedFile美元      #将localizable.strings中的文本转为迅速格式的常量,存入一个临时文件   sed“s/\”=\”。*美元/,/g“$ {localizableFile} | sed " s/. */,,“| sed”/^ \ "/静态var localized_/g”| sed“s/;\ "/:字符串{返回\“/g”| sed“s/,/\”。在本地化}/g”;" $ {localizedFile} .tmp "      #先将局部作为计算属性输出到目标文件   echo - e \ n \“进口基础nextension字符串{\ n var本地化:字符串{返回NSLocalizedString(自我,评论:自我)}”在" $ {localizedFile} "      #再将临时文件中的常量增量输出到目标文件   猫" $ {localizedFile}。tmp”祝辞比;" $ {localizedFile} "      #最后增量输出一个“}”到目标文件,完成输出   echo - e " \ n} "祝辞祝辞" $ {localizedFile} "      #删除临时文件   rm " $ {localizedFile} .tmp "      

以上脚本的作用就是将<代码> localizable.strings>