php用preg_match来相称并决断多少个字符串中是不是带有汉语可能都是汉语的秘诀如下:

**
某些时候项目现已收尾可能已经迭代好些个少个本子了,若是那个时候要完毕本地化,那该如哪管理啊。**

iOS 多语言版本的付出

$str = 'php学习博客';if(preg_match('/[x7f-xff]/', $str)){ echo '字符串中有中文
';}else{ echo '字符串中没有中文
';}if(preg_match('/^[x7f-xff]+$/', $str)){ echo '字符串全是中文';}else{ echo '字符串不全是中文';}

筛选项目中的汉语字符串

既然要替换项目中的汉语字符串,那么就需求大家找到那个粤语字符串,然后再将字符串替换到大家定义的宏。聊起相称查找首先想到的是正则表明式,我们得以在Xcode中,输入
(@"[^"]*[u4E00-u9FA5]+[^"n]*?")s* 就可以,切记find 前面包车型客车选项要接纳
Regular Expression , 暗中认可选中的是Text, 如图

图片 1

14797799365040.png

写在前方

以上程序的出口的结果为:

何以抽取识别到的国语字符串?

我们已经清楚怎么着识别项目中的字符串了,不过如何抽出来使用呢?
那就须求遍历项目中享有的钦定后缀(e.g:
.h、.m等)的文件,然后利用正则表明相称全体应用到的国语字符串,并写入文件中。为了便利起见,笔者将啊神在Github中开源的贰个Mac客商端小应用贴在后头,该工具可一贯将入选的类型中保有的华语字符串,导出到内定的路子下;该应用还是可以选拔对于再度现身的华语字符串实行拍卖,乃至还足以将中文字符串导出为复杂性;
小应用更值得关怀的是它导出的文本,能够一向拿来作为多语言文件中的key=value
使用,特不难,中意的能够去下载看看小应用运转图如下:

图片 2

14797799805328.jpg

哪些运用收取的国语字符串?

现已获得收取的华语字符串文件,这些文件是足以一贯拿来用做多语言文件使用的,工具只可以转变来粤语或复杂,如需添加任何语言,就需另行翻译了:

图片 3

14797800039786.png

如需设置任何语言,如西班牙语,这时能够将导出的文件拷贝大器晚成份,改良图中 =
后面的 value 切记此外格式别乱改,防止keyvalue对不上号。
一切联系安妥后,等翻译把文件给你后,直接将文件中的内容,复制到多语言文件的法语文件中就可以;

如何将项目中的中文字符串实行沟通

多语言文件已经配备完结,到了这里,那么难点来了,大家只是抽取项目中央银行使的华语字符串,然后将字符串封装成多语言文件,可是
并从未水到渠成替换(记得备份一下),这里我们必要选择Xcode
自带的字符串替换功用,首先还须求动用正则表达式
(@"[^"]*[u4E00-u9FA5]+[^"n]*?")s*
,相称出等级次序中运用的普通话字符串,然后在对其开展交替管理。

#define PALocalizedString(key) [[PALocalizable bundle] localizedStringForKey:key value:nil table:nil]

上述是宏的概念,我们需求将字符串进行替换到宏的运用,如:
 替换前是如此的_lbl.text = @"多语言";
 替换后_lbl.text = PALocalizedString(@"多语言")

轮番法则如图:

图片 4

Snip20170102_9.png

此番当选的是Replace,
不是Find。按图中所示,接纳结束后,点击ReplaceAll,
会出来多个弹框,不用管它少年老成直接轨,就可以,然后你在看等级次序中选择到的中文字符串是还是不是已经替换掉了,到那边大概顺理成章了;

注意事项
1、替换后,大概会微微地点报错,command + b编写翻译下,看看报错之处,举办对应更正就能够。报错原因:a.
恐怕是您定义的常量字符串; b. 恐怕是概念的宏; c. 大概是替换后未有换行;
基本上报的荒唐很显眼,进行订正就可以;

内容源自:啊神的能力博客

iOS 多语言版本的付出
中大家贯彻了如何让客户自身去切换系统语言的效果,大家还写了德姆o
以供帮助学习;可是,继以上两篇小说都以确立在项目刚刚运营或运营不久,项目中设有的中文字符串还不是非常多,手动改起来也还是可以够采用;
那么难点来了,假设项目已经终结也许曾经迭代多少个本子了,那该怎么落实了?手动改起来也不太现实,耗费时间耗力不捧场的手动,在这里边就无须思考了。
不让考虑,是因为笔者有更轻易赶快高效的法子,让自家慢慢与你道来;

字符串中有中文字符串不全部都是汉语

怎样辨别项目中的中文字符串?

utf-8和gbk编码下都进展了生龙活虎番测验,均能够选拔。

既然要替换项目中选择到的汉语字符串,那么前提就务要求先找到这个个字符串,然后将那几个字符串,替换到我们定义的宏,
为了替换方便,可将这么些字符串自个儿作为key
这里不晓得的没什么,上边作者还会讲到。
既然是甄别汉语字符串,那也正是说在档期的顺序文件中开展匹配查找,谈起卓绝,那就供给正则表明式了,用正则表达式相称Xcode中的使用的粤语字符串,使用(@"[^"]*[u4E00-u9FA5]+[^"n]*?")s*就可以,
打开你的Xcode 试试看,切记find 后边的选项要选择 Regular Expression,
暗许选中的是Text, 如图

图片 5localized301.jpg怎么收取识别到的华语字符串?

作者们早就清楚怎么着鉴定分别项目中的字符串了,不过什么收取来使用啊?
那就要求遍历项目中兼有的内定后缀(e.g:
.h、.m等)的文书,然后使用正则表达相称全数应用到的中文字符串,并写入文件中。为了方便起见,小编将此进程写了四个Mac客户端小应用,可径直将入选的门类中有着的华语字符串,导出到内定的渠道下;该利用还是能接收对于重现的华语字符串进行拍卖,以至还足以将粤语字符串导出为复杂性;
小应用更值得关心的是它导出的文本,能够向来拿来作为多语言文件中的key=value
使用,特别轻易,中意的能够去下载看看, 含有源码的啊;小应用运转图如下:

图片 6readChinese.jpg怎样接纳收取的汉语字符串?

现已拿到收取的华语字符串文件,那几个文件是能够一贯拿来用做多语言文件使用的,小应用导出的文书,只好用于普通话以至犬牙交错多语言文件,而对于别的的言语,就需求您拿着导出的文本,找你们集团的翻译人士,进行翻译;
拿繁体版来举个例证,导出来的头眼昏花文件如下(收留笔者App导出的公文):

图片 7localized303.jpg以此纷纭文件,能够直接作为繁体多语言使用,怎么样想要翻译成República Portuguesa语,能够将此文件拷贝生机勃勃份,交给翻译人士,让其翻译。翻译的时候,你早晚要给翻译职员交换好,让其只翻译value,
也即是图中=背后双引号中的内容,格式什么的也无须让她乱改,不然轻便并发难点,引致keyvalue对不上号。
一切联系安妥后,等翻译把公文给你后,直接将文件中的内容,复制到多语言文件的葡萄牙共和国语文件中就可以;

怎么着将项目中的汉语字符串实行轮流

多语言文件已经布署实现,到了此处,那么难题来了,大家只是收取项目中央银行使的华语字符串,然后将字符串封装成多语言文件,可是对于项目中接受的中文字符串依旧如故中文字符串,咱们还并未进展替换管理。当然,这一步大家是不可能忘了,由于是替换项目中具备的选择普通话字符串,大家仍旧严格为好,首先将你的项目进展备份、备份、备份,相当重大的政工说三篇,切记应当要备份。备份好后,咱们就足以开端轮流工作了,未有备份的绝不往下看了,赶紧备份去;
若是你早就备份好了,你就足以先导轮换专门的学业了,前边大家说过让中文字符串自己作为key
进行替换,之所以让其自己作为key,
是因为如此能够大大缓和替换的困难度,并且还利于代码的可读性,基本上算是保持原本代码;既然要替换项目中的使用中文字符串,将要接纳Xcode
自带的字符串替换效能,首先还供给使用正则表达式(@"[^"]*[u4E00-u9FA5]+[^"n]*?")s*,相配出档期的顺序中利用的国语字符串,然后在对其开展轮番管理。

出于大家在iOS 多语言版本的支出中,对取key对应的语言内容,进行了宏的包裹,
这里大家得以将同盟到的利用中文字符平昔替换来我们定义的宏的使用

#define ASLocalizedString [NSString stringWithFormat:@"%@", [[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"appLanguage"]] ofType:@"lproj"]] localizedStringForKey: value:nil table:@"ASLocalized"]] 

上述是宏的定义,大家供给将字符串举行交替到宏的使用,如:
替换前是那样的_lbl.text = @"我是多语言";
替换后_lbl.text = ASLocalizedString

更替法则如图:

图片 8localized304.jpg此番当选的是Replace,
不是Find。按图中所示,接受甘休后,点击ReplaceAll,
会出来贰个弹框,不用管它直接接轨,就能够,然后您在看档期的顺序中接受到的普通话字符串是还是不是已经替换掉了,到这里大概瓜熟蒂落了;

遗留难题

1、正则表明式,不领悟能够先照文章里写就能够,然后再去学学下,这里有篇幼功作品2、ASLocalizedString

该宏使用面积广,能够将其定义成公共头文件中,然后用时援用头文件就能够,也可将文件封装进pch文件中,那样无需利用头文件接口使用3、替换后,或许会某个地方报错,command + b编写翻译下,看看报错之处,进行对应改良就能够。报错原因:a.
大概是你定义的常量字符串; b. 只怕是概念的宏; c. 恐怕是替换后还没换行;
基本上报的失实很显眼,实行更动就可以;4、在迭代版本中,再度行使粤语字符串,就要求运用ASLocalizedString
来取代了,然后再多语言文件中,实行key=value 配置;

初稿链接:

相关文章