iOS迭代版本之多语言开发
2016-01-27 15:35:16 | 来源:玩转帮会 | 投稿:佚名 | 编辑:小柯

原标题:iOS迭代版本之多语言开发

如何辨别项目中的中文字符串?

既然要替换项目中使用到的中文字符串,那么前提就必须要先找到这些个字符串,然后将这些字符串,替换成我们定义的宏, 为了替换方便,可将这些字符串自身作为key, 这里不理解的不要紧,下面我还会讲到。 既然是辨别中文字符串,那也就是说在项目文件中进行匹配查找,说到匹配,那就需要正则表达式了,用正则表达式匹配Xcode中的使用的中文字符串,使用(@"[^"]*[u4E00-u9FA5]+[^" ]*?")s*即可, 打开你的Xcode 试试看,切记find 后面的选项要选择Regular Expression, 默认选中的是Text, 如图

如何取出识别到的中文字符串?

我们已经知道如何识别项目中的字符串了,但是如何取出来使用呢? 这就需要遍历项目中所有的指定后缀(e.g: .h、.m等)的文件,然后利用正则表达匹配所有使用到的中文字符串,并写入文件中。为了方便起见,我将此过程写了一个Mac客户端小应用,可直接将选中的项目中所有的中文字符串,导出到指定的路径下;该应用还可以选择对于重复出现的中文字符串进行处理,以及还可以将中文字符串导出为繁体;小应用更值得关注的是它导出的文件,可以直接拿来当做多语言文件中的key=value使用,非常简单,喜欢的可以去预告看看, 含有源码的哦;小应用运行图如下:

如何使用取出的中文字符串?

已经拿到取出的中文字符串文件,这个文件是可以直接拿来用做多语言文件使用的,小应用导出的文件,只可以用于中文以及繁体多语言文件,而对于其他的语言,就需要你拿着导出的文件,找你们公司的翻译人员,进行翻译; 拿繁体版来举个例子,导出来的繁体文件如下(收留我App导出的文件):

这个繁体文件,可以直接作为繁体多语言使用,如何想要翻译成英文,可以将此文件拷贝一份,交给翻译人员,让其翻译。翻译的时候,你一定要给翻译人员沟通好,让其只翻译value, 也就是图中=后面双引号中的内容,格式什么的也不要让他乱改,否则容易出现问题,导致key与value对不上号。 一切沟通妥当后,等翻译把文件给你后,直接将文件中的内容,复制到多语言文件的英语文件中即可;

如何将项目中的中文字符串进行替换

多语言文件已经配置完成,到了这里,那么问题来了,我们只是取出项目中使用的中文字符串,然后将字符串封装成多语言文件,但是对于项目中使用的中文字符串依然还是中文字符串,我们还并没有进行替换处理。当然,这一步我们是不能够忘了,由于是替换项目中所有的使用中文字符串,我们还是谨慎为好,首先将你的项目进行备份、备份、备份,非常重要的事情说三篇,切记一定要备份。备份好后,我们就可以开始替换工作了,没有备份的不要往下看了,赶紧备份去;
?假设你已经备份好了,你就可以开始替换工作了,前面我们说过让中文字符串自身作为key进行替换,之所以让其自身作为key, 是因为这样可以大大减轻替换的困难度,而且还有利于代码的可读性,基本上算是保持原有代码;既然要替换项目中的使用中文字符串,就要用到Xcode 自带的字符串替换功能,首先还需要使用正则表达式(@"[^"]*[u4E00-u9FA5]+[^" ]*?")s*,匹配出项目中使用的中文字符串,然后在对其进行替换处理。

由于我们在iOS 多语言版本的开发(二)中,对取key对应的语言内容,进行了宏的封装, 这里我们可以将匹配到的使用中文字符直接替换成我们定义的宏的使用

#defineASLocalizedString(key)
[NSStringstringWithFormat:@"%@",[[NSBundlebundleWithPath:[[NSBundlemainBundle]pathForResource:[NSStringstringWithFormat:@"%@",[[NSUserDefaultsstandardUserDefaults]objectForKey:@"appLanguage"]]ofType:@"lproj"]]localizedStringForKey:(key)value:niltable:@"ASLocalized"]]

以上是宏的定义,我们需要将字符串进行替换成宏的使用,如:
替换前是这样的_lbl.text = @"我是多语言";
替换后_lbl.text = ASLocalizedString(@"我是多语言")

替换规则如图:

这次选中的是Replace, 不是Find。按图中所示,选择完毕后,点击ReplaceAll, 会出来一个弹框,不用管它直接继续,即可,然后你在看项目中使用到的中文字符串是否已经替换掉了,到这里基本上大功告成了;

遗留问题

1、正则表达式,不懂得可以先照文章里写就行,然后再去学习下,这里有篇基础文章
2、ASLocalizedString(key) , 该宏使用面积广,可以将其定义成公共头文件中,然后用时引用头文件即可,也可将文件封装进pch文件中,这样无需使用头文件接口使用
3、替换后,可能会有些地方报错,command + b 编译下,看看报错的地方,进行相应修改即可。报错原因:a. 可能是你定义的常量字符串; b. 可能是定义的宏; c. 可能是替换后没有换行; 基本上报的错误很明显,进行修改即可;
4、在迭代版本中,再次使用中文字符串,就需要使用ASLocalizedString(key), 来代替了,然后再多语言文件中,进行key=value配置;

  • 原文地址:http://www.devashen.com/blog/2016/01/18/localized03/

  • 作者博客地址:www.devashen.com

tags:

上一篇  下一篇

相关:

JavaLinkedList源码分析

简介LinkedList 是一个常用的集合类,用于顺序存储元素。 LinkedList 经常和 ArrayList 一起被提及。大部分

Square对iOSApp架构的新尝试—Ziggurat

本文由CocoaChina译者@WhistlingArrow翻译原文:Ziggurat iOS App Architecture今年六月,我做了一场关于避

Xcode重构功能怎么用我全告诉你

你会经常需要重构你的代码,让它有更好的结构,可读性或者提高可维护性。Xcode作为IDE其实提供了一些帮助de

粉丝留言“因喜欢你没男友”T.O.P自恋神回复

T.O.P拥有雕刻美男外貌,个性却是反差萌的搞怪。(图/翻摄自T.O.P Instagram) T.O.P自恋的幽默回应,逗乐

纽约豪宅,建筑大师们下一波前赴后继的名利场

葡萄牙人阿尔瓦罗·西扎(Alvaro Siza)是 1992 年的普利兹克建筑奖得主,如今虽已年逾八十,却仍在

这个游戏里,皮卡丘不仅成了名侦探,嗓音还很深沉

早在 2013 年 10 月,日本电视台 NHK 播放的一部纪录片中曾经透露,一款皮卡丘主角的侦探游戏正在制作之中

男人这一动作女人肯定想歪了


  有时候,男人做一些事可能只是处于绅士风度,却让你误会成他喜欢你

婚前检查 男性婚前必做体检项目


  婚前体检大家应该都不陌生,婚前体检是每对新人结婚前必须要经历的

肝功能检查 肝功能必查项目有哪些


  肝是人体内十分重要的身体器官,然而因为生活水平的提高,出现了许

强烈推荐很喜欢的文《对不起,我性别认知障碍》

没怎么写过长微博,今天来试下,是推荐文。 前段时间 经基友狐小妹介绍,连夜一口气看了一个文叫《对不

站长推荐: