- 系统设置,通过在手机设置中切换语言,进而改变app中语言;
- app中手动切换,用户在app中,手动选择语言,进行切换。
一、添加需要的语言不管使用哪种方法,都需要先添加语言,这一点是相同的。 上面都完成后,项目是这样的
在每个语言的.string文件中,把项目中的所有需显示的文字,按照key-value 的形式放进去。 至此,所有的前置工作都完成了。 二、代码部分1.使用系统设置切换语言使用系统设置切换语言,比较简单,直接上代码: 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];
[btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
btn.tag = i+10;
[self.view addSubview:btn];
}
直接使用 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: 点击韩语:
|