多语言的使用
有些时候,我们的App可能不只是针对国内的用户,这时候就需要支持多种语言,好让不同国家的用户都可以使用,这时候就要支持多语言了。
- 找到info→Localizations→+选择需要添加的语言
- 新建strings文件,名字为Localizable
3.为Localizable.strings添加不同的支持语言
4.在string文件中设置不同的key值对应在不同语言下应该显示的字符
5.使用示范
UILabel * lb =[[UILabel alloc]initWithFrame:CGRectMake(40, 100, 200, 40)];
NSString * t =NSLocalizedString(@"testName", nil);
lb.text =t;
[self.view addSubview:lb];
当你的手机默认语言为中文时就会调用chinese里面的设置,为英文时会调用english里面的
6.注意
如果创建的时候,string文件的名字不是用的Localizable,则使用字符串时,应该使用NSLocalizedStringFromTable方法,如下
NSString * t = NSLocalizedStringFromTable(@"testName", @"File",nil);
7.创建InfoPlist.strings文件可以控制app的名字。
CFBundleDisplayName="中国";
CFBundleDisplayName="China";
无匹配时使用固定语言
比如app适配了中文和英文,当用户手机的系统语言为法语时,系统默认是按照手机设置里语言的顺序来选取默认语言文件,此时如果想要让app使用英语。有两种方法。
方法一
NSMutableArray *langArray = [[NSMutableArray alloc]initWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"]];
NSLog(@"%@",langArray);
NSUInteger def_lang_index = [langArray indexOfObject:@"en"];
if (def_lang_index != 1 && def_lang_index != 0) {
NSMutableArray *tempArray = [NSMutableArray arrayWithObjects:langArray[0], @"en",nil];
[langArray removeObject:@"en"];
[langArray removeObject:langArray[0]];
[tempArray addObjectsFromArray:langArray];
[[NSUserDefaults standardUserDefaults] setObject:tempArray forKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults]synchronize];
}
这段代码的意思是:先获取到当前手机已经本地化的语言列表,因为第一个肯定是当前手机的语言,所以如果我们想要使用的默认的英文不是第二个的时候,我们用排序把他放到第二。
需要注意的是,这份代码必须放在main.m文件里面UIApplicationMain()之前,否则,应用本次是不起作用的,只能在下次起作用。
方法二:根据语言选取语言包地址
static NSBundle *bundle = nil;
- (NSString*)getCurrentLanguage
{
NSArray *langArray = [[NSUserDefaults standardUserDefaults] arrayForKey:@"AppleLanguages"];
return langArray[0];
}
- (void)setLanguage:(NSString *)l {
NSLog(@"preferredLang: %@", l);
NSString *path = [[ NSBundle mainBundle ] pathForResource:l ofType:@"lproj" ];
if (!path) {
path = [[ NSBundle mainBundle ] pathForResource:@"en" ofType:@"lproj" ];
//[self resetLocalization];
}
bundle = [NSBundle bundleWithPath:path];
}
- (NSString *)get:(NSString *)key alter:(NSString *)alternate {
return [bundle localizedStringForKey:key value:alternate table:nil];
}
这几个方法分别是获得当前语言,设置语言——如果没有资源文件就是用默认语言,最后的get:alter:方法就是实际调用的方法