iOS之多语言开发
前要:iOS多语言开发,可以分为两种
系统设置,通过在手机设置中切换语言,进而改变app中语言;
app中手动切换,用户在app中,手动选择语言,进行切换。
一.添加需要的语言
不管使用哪种方法,都需要先添加语言,这一点是相同的。
添加完成后是这样的
文件名是 Localizable ,也可以更改其它名,后面会讲到
在每个语言的.string文件中,把项目中的所有需显示的文字,按照key-value 的形式放进去。
至此,所有的前置工作都完成了。
二. 代码部分
1.使用系统设置切换语言
使用系统设置切换语言,比较简单,直接上代码:
1 NSArray *array = @[@"中文",@"英文",@"法语",@"韩语"]; 2 for (int i=0; i<4; i++) { 3 UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 4 btn.frame = CGRectMake(100, 200+70*i, 200, 40); 5 btn.backgroundColor = [UIColor orangeColor]; 6 7 //第一种:使用系统设置语言 8 [btn setTitle:NSLocalizedString(array[i], nil) forState:UIControlStateNormal]; 9 10 [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; 11 [btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside]; 12 btn.tag = i+10; 13 [self.view addSubview:btn]; 14 }
直接使用 NSLocalizedString(key, comment)方法,“key”就是Localizable.strings文件中的我们设置的key, “comment”写niu即可
如此,只要在手机 设置-通用-语言与地区 中,切换语言,再打开app,app中文字就会切换成对应的语言。
2.app中手动切换语言
- (void)viewDidLoad { [super viewDidLoad]; NSArray *array = @[@"中文",@"英文",@"法语",@"韩语"]; for (int i=0; i<4; i++) { UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; btn.frame = CGRectMake(100, 200+70*i, 200, 40); btn.backgroundColor = [UIColor orangeColor]; //第一种:使用系统设置语言 //[btn setTitle:NSLocalizedString(array[i], nil) forState:UIControlStateNormal]; //第二种,app中手动选择语言 [btn setTitle:KLanguage(array[i]) forState:UIControlStateNormal]; [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; [btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside]; btn.tag = i+10; [self.view addSubview:btn]; } } -(void)btnClick:(UIButton *)btn{ NSInteger tag = btn.tag-10; if (tag==0) { [[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:@"appLanguage"]; }else if(tag==1){ [[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:@"appLanguage"]; }else if (tag==2){ [[NSUserDefaults standardUserDefaults] setObject:@"fr" forKey:@"appLanguage"]; }else{ [[NSUserDefaults standardUserDefaults] setObject:@"ko" forKey:@"appLanguage"]; } [[NSUserDefaults standardUserDefaults]synchronize]; UIWindow *window = [UIApplication sharedApplication].delegate.window; [UIView animateWithDuration:0.4f animations:^{ CGAffineTransform curent = window.transform; CGAffineTransform scale = CGAffineTransformScale(curent, 0.0001,0.0001); [window setTransform:scale]; } completion:^(BOOL finished) { exit(0); }]; }
每次选择语言后,保存到本地
这里用了一个宏:
#define KLanguage(key) [[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"appLanguage"]] ofType:@"lproj"]] localizedStringForKey:key value:nil table:@"Localizable"]
“appLanguage”:将选择的语言保存在本地,本地偏好设置保存用的key,
“Localizable”:这就是我们创建的Localizable.strings文件名。也可以用其它名字,只要与宏里的保持一致即可。
每种语言对应的字符串:
首次进入app,使用系统默认的语言:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //首次进入app,设置语言。自己根据实际情况,设置刚进入app的默认语言 NSString *currentLanguage = [[NSUserDefaults standardUserDefaults]objectForKey:@"appLanguage"]; if (!currentLanguage) { //获得当前语言 NSArray *languages = [NSLocale preferredLanguages]; NSString *language = [languages objectAtIndex:0]; if([language hasPrefix:@"en"]){ [[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:@"appLanguage"]; }else if([language hasPrefix:@"zh-Hans"]){ [[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:@"appLanguage"]; }else{ [[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:@"appLanguage"]; } [[NSUserDefaults standardUserDefaults]synchronize]; } [self.window makeKeyAndVisible]; return YES; }
代码演示:
进入app:
点击英文,重新进入app:
点击韩语: