iOS之多语言开发 - 昔年随心

时间:2024-02-19 11:57:45

iOS之多语言开发

 

前要:iOS多语言开发,可以分为两种

  1. 系统设置,通过在手机设置中切换语言,进而改变app中语言;
  2. app中手动切换,用户在app中,手动选择语言,进行切换。

一.添加需要的语言

不管使用哪种方法,都需要先添加语言,这一点是相同的。

  1. 在项目的project中添加语言

    添加完成后是这样的

  2. 创建 Localizable.strings 文件

     

     

     文件名是 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:

 

 

点击韩语: