NSBundle是用来获取可执行资源的,经过bundle来定位具体的资源文件的位置,从而加载或执行代码操做。而且每个能够获取到的bundle都是独立的
xcode
获取bundle本地化
bash
//获取对应key字符串在表中的值
[[NSBundle mainBundle] localizedStringForKey:@"abc" value:nil table:@"Localized"];
//获取当前使用第一语言
[[NSBundle mainBundle] preferredLocalizations][0];
//获取应用默认development的语言
[[NSBundle mainBundle] developmentLocalization];
//返回顶部首选本地化
[NSBundle preferredLocalizationsFromArray:[[NSBundle mainBundle] localizations]];
//系统默认识别Localizable.strings表
NSLocalizedString(@"abc", nil);
//获取自定义表
NSLocalizedStringFromTable(@"abc", @"Localizable", nil);复制代码
根据系统语言,识别不一样的.lproj本地语言文件夹,替换对应的字符串文件布局
1.新建Strings File文件ui
2.Project新增App语言(图1示例)spa
3.本地化字符串文件列表(图2示例)翻译
3.设置字符串资源(图4示例)3d
(1)能够替换Info.plist文件,例如CFBundleDisplayName (更改App名称)。
(2)也能够替换内置字符串名称。调试
"abc" = "111";//替换字符串
CFBundleDisplayName = "333";//替换info文件复制代码
4.运行App
code
具体来讲是在找到本地资源文件,进行替换成咱们对应的文件,如App图标、修饰图片等。cdn
1.统一管理图片,使用本地化字符串方式,经过NSLocalizedString(key,comment)来获取自定资源的图片名称
2.使用.lproj包来管理图片资源,经过图片名称,来访问不一样语言包中的文件复制代码
第二种实现思路
1.选择须要本地化的图片或拖拽一张图片到你的App工程
2.点击右边栏Localization,勾选增长对应图片的本地化(图1示例)
因为在此以前咱们为项目工程添加过咱们须要的语言,每当生成一门本地化语言,系统会自动帮咱们生成一个本地化文件夹.lproj,用来管理不一样语言的本地化资源
3.这里成功勾选后,能够看到左边栏变成了一个折叠列表(图1示例)
4.为不一样语言包替换新的图片(图2示例)
此时的两张图片类似,show in finder进入它的.lproj文件夹,删掉当前图片文件而且拖入新的图片,这时工程目录中咱们使用的本地化图片会报红,由于找不到它对应路径下的文件,咱们将图片名称更改成咱们使用的名称,此时报红取消一切正常
1)新建Strings File文件,命名为InfoPlist.strings
2)加入国际化语言
"CFBundleDisplayName"="MyApp";
"NSHumanReadableCopyright"="2016 Goldrush Computing Inc.版权全部。";复制代码
如图1示例,有两种本地化文件的方式:
(1)为不一样的语言环境使用单独的storyboard / xib文件。(生成storyboard/xib文件)
(2)使用不一样语言的字符串文件并提供翻译文本。(生成.strings文件)
右侧未选中的NIB本地化方式,左侧为Main.storyboard下本地化文件的格式,中间部分是新的stroyboard文件
右侧为选中NIB本地化文件的方式,左侧为Main.storyboard下本地化文件的格式,中间部分是生成本地化字符串的位置,写法为:
三个元素缺一不可:(1)控件类型,(2)属性,(3)ObjectID
/* Class = "UILabel"; text = "zhong"; ObjectID = "dwh-91-MnC"; */
"dwh-91-MnC.text" = "zhong";//规范写法复制代码
若是咱们在IB中更改了某些内容,strings不会更新文件,使用ibtool或AppleGlot(连接)来更新字符串文件
1.选中Edit Scheme,而后将Application Language--System Language更改成指定语言,能够在用模拟器调试的时候不用手动切换系统语言,只是更改为为咱们应用须要的语言,在几中语言切换时比较方便查看本地化的效果
2.使用AppleLanguages的方式,更改key也能切换App本地化语言(若是全都勾选只会读取最上面的一个,若是上下两种方法一块儿实现,AppleLanguages的优先级 > System Language的优先级)
3.使用代码在应用内部切换语言
//获取当前应用全部的本地化语言
NSArray *langArr = [[NSUserDefaults standardUserDefaults] valueForKey:@"AppleLanguages"];
//获取应用默认语言
NSString *language1 = langArr.firstObject;
//切换语言
NSArray *lans = @[@"en"];
[[NSUserDefaults standardUserDefaults] setObject:lans forKey:@"AppleLanguages"];复制代码
经过预览Storyboard/ xib能够作的事情不少,不只能够查看本地化语言的显示,同时也能够查看不一样机型的显示效果,适合常常用NIB的开发者。须要注意的是,调试本地多语言的时候,只有经过Localizable Strings方式建立的本地化才能够预览效果。
服务端国际化处理主要包括返回字段内信息、图片和须要下载的资源文件等,处理方式分为如下两种:
服务端不关心当前用户的本地化语言,返回全部适配的本地化内容,由客户端本身控制显示
特色:返回全部国际化资源,由客户端本身筛选
服务端获取当前用户的本地化信息,返回相应的本地化内容
特色:只返回对应语言的资源,由服务端处理,优势:过滤掉不须要的资源,客户端的处理更简单
总结思路:
全部nib、文本、资源的国际化均可以使用本地字符串方式,也能够经过生成新替代文件的方式来作国际化。