iOS-多语言版本的开发(一)(转载)

引言

 多语言 & 本地化,随你怎么叫,道理差不多;一个App 要想走出国门,只支持一种语言是不能够的,也是不可能的,多元化世界已经融入我们的生活,对于一些应用,开发多语言版本,已经是不可避免的,特别是旅游等方面的应用;国内也有很多App 已经接入多语言,例如:支付宝、微信、收留我(嘻嘻,做下广告)等;

开发多语言,一般有两种情况

1、App还没有开始写,这个时候创建一个多语言版本,很是容易,然后再写代码的时候稍微留意下哪里需要保持多语言就行了;
2、App已经上线了,而且之前没有任何的为开发多语言准备过,这时候Boss让开发多语言版本,这下你就苦逼了,想想项目中长长短短的中文字符串,没有上千也得上几百了吧,在想想一个一个替换,哎呀妈呀,那么多,想想都想死了,在想想还容易出错,哎呀妈呀,让我死了算了;

别急,这次我就针对两种情况都讲解下;

项目刚开始启动

1、新建一个项目(我就不多说了)

2、command + N 添加多语言文件,如下图

啊神添加多语言文件

3、添加多语言,如图

 

选择English 点击Localize

啊神添加多语言

到这里已经算是添加好了多语言文件,接下来就是添加多语言

之前的XCode(具体到哪一个版本之前,不清楚了,我使用的是XCode7),是可以在如下图中直接点击➕号 ,添加多语言的

添加多语言

现在需要进入项目的Project中的Localizations 中进行添加,如图

 

我只添加了中文繁体,简体,以及英文,Demo使用的StoryBoard, 而添加多语言时,我没有选择为StoryBoard添加多语言版本的,毕竟是Demo🐴;但是不影响使用。

啊神添加多语言

到这里多语言文件中会出现如上图中的三个.strings 后缀的文件,这就是多语言对应的文件了,多语言添加的方式类似,字典 key=value 一一对应的关系,key 在三个.strings 中必须一致,而value 则分别对应不同的语言字体,即可;

4、多语言文件的使用

现分别在不同的语言文件中添加如下测试文本:

"showTxt"="this is test text";
"showTxt"="这是一个测试的文本";
"showTxt"="這是一個測試的文本";

说到使用,就要了解下NSLocalizedString 是什么

 #define NSLocalizedString(key, comment) \
        [[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]
 #define NSLocalizedStringFromTable(key, tbl, comment) \
        [[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:(tbl)]
 #define NSLocalizedStringFromTableInBundle(key, tbl, bundle, comment) \
        [bundle localizedStringForKey:(key) value:@"" table:(tbl)]
 #define NSLocalizedStringWithDefaultValue(key, tbl, bundle, val, comment) \
        [bundle localizedStringForKey:(key) value:(val) table:(tbl)] 

其实就是宏,而宏定义的又是在资源文件中寻找对应的资源文件;在这里有个坑点,当你使用第一种实现多语言本地化,意味着你的多语言文件名字必须Localizable,否则你的多语言实现,到最后显示的却只能是key; 

第一种适合于,让应用跟随系统的语言版本进行切换,而用户却不能手动进行切换; 我们要实现的是既可以跟随系统,又可以用户自己切换,就不能使用这一个了,那就要使用第二种NSLocalizedStringFromTable(key, tbl, comment) tbl这个参数,就是我们自己命名的多语言文件名称;

因此我们暂且这样使用(这样直接使用,会跟随系统语言):

NSLocalizedStringFromTable(@"showTxt", @"ASLocalized", nil);

参数说明
第一个参数,是多语言中的key,
第二个参数,是多语言文件的名字,
第三个是对key注释说明,一般为nil就可以了;

注意:
对于这样使用NSLocalizedString("showTxt", nil) ,切记多语言文件名必须Localizable, 这里我们就不可以使用这种了;

到这里,就可以实现简单的跟随系统语言的多语言版本了;

效果图如下:
系统语言在简体中文下:

系统语言在英文下:

 

 

 

转载自:http://www.devashen.com/blog/2016/01/14/localized01/

posted on 2017-03-31 11:24  梁飞宇  阅读(202)  评论(0编辑  收藏  举报