/*=========================================软件国际化================================================*/app
1.简介:函数
软件国际化主要是在软件中添加多种语言,以实现不一样国家的人群需求。测试
主要的应用方式有两种:1.根据系统的语言环境自动进行切换;2.人为的添加按钮等进行主动切换。spa
目前实现的主要方法有两种:1.Xcode可视化界面添加Localizations的操做。2.利用NSLocalizedString配合genstrings进行实现。这里主要介绍第二种方法。code
2.实现:orm
2.1 NSUserDefaults:适合存储轻量级的本地数据,好比要保存一个登录用户名、密码、语言环境之类的,使用NSUserDefaults是首选。对象
NSDictionary* defaultsee = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];blog
NSLog(@"Defaults: %@", defaultsee);//利用字典查看一下全部NSUserDefaults的设置rem
2.2 NSLocalizedString:基础的国际化函数,查看一下定义同步
#define NSLocalizedString(key, comment) \ [[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]//key-value,comment:注释
对上述函数进行拓展自定义,语言包存放在en.lproj(英),zh-Hans.lproj(汉)等,以key-value方式进行获取。
#define CustomLocalizedString(key, comment) \ [[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"appLanguage"]] ofType:@"lproj"]] localizedStringForKey:(key) value:@"" table:nil]//利用key取出相应地object
2.3 利用genstrings生成相应语言的.lproj语言文件Localizable.strings
genstrings -o ~/.../zh-Hans.lproj *.m//-o 生成的目标文件夹,扫描当前目录下的全部.m文件
genstrings -o ~/.../en.lproj *.m
2.4 而后在相应地Localizable.strings文件中添加"登录" = "login";等
[[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:appLanguage];//添加语言文件 NSArray *array = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"];//获取系统当前的语言 NSString *currentLanguage = [array objectAtIndex:0];
注意:1.生成的Localizable.strings文件名没有标识,因此在生成文件处能够加文件夹或者添加注释区分
2.必定要扫描全部须要国际化的.m文件
3.NSUserDefaults只是起到存储属性值和路径做用,利用相似字典方式获取数据
/*===========================================NSUserDefaults详解==========================================*/
1.简介:NSUserDefaults对象是用来保存应用程序相关的偏好设置,配置数据等等,主要用来恢复基础设置,记录密码和系统的一些语言和键盘等默认信息。数据则存放在<UUID for your App>\Library\Preferences\<your App"s bundle ID>.plist的文件中
2.功能:
2.1 NSUserDefaults只能存放5种数据格式:NSString, NSNumber, NSDate, NSArray, NSDictionary.
2.2 查看当前全部的配置数据:
NSDictionary* defaultsee = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]; NSLog(@"Defaults: %@", defaultsee);
2.3 单例模式: +(NSUserDefaults *)standardUserDefaults//获取当前类的实例
2.4 key-value模式:
-(void)setObject:(id)value forKey:(NSString *)defaultName;//设置数据 - (id)objectForKey:(NSString *)defaultName;//取数据
2.5 由于NSUserDefaults是持久化数据存储方法,重启设备并不能将设置在里面的数据进行更改,只能经过两种方式进行删除:
1.删除沙盒(重装)
2.-(void)removeObjectForKey:(NSString *)defaultName;//函数方法
2.6 其余:- (NSDictionary *)dictionaryRepresentation;//利用字典进行配置查看
- (BOOL)synchronize;//数据同步
//=========================v2017.8.3新需求,国际化语言 当出现系统不支持的第三方语言出现时,默认使用英文。
1.尝试修改scheme里的region和language(做用不大)。
2.修改配置文件:Localization native development region 为String类型 指定en语言(做用不大)。
3.核心:用户自行修改,当出现不匹配的语言时,进入到设置->通用->语言和地区->首选语言设置(设置第一顺序为英文),经测试最具实效。