评论

收藏

[iOS开发] iOS之多语言开发

移动开发 移动开发 发布于:2021-09-19 10:01 | 阅读数:619 | 评论:0

  • 系统设置,通过在手机设置中切换语言,进而改变app中语言;
  • app中手动切换,用户在app中,手动选择语言,进行切换。
一、添加需要的语言
不管使用哪种方法,都需要先添加语言,这一点是相同的。
  • 在项目的project中添加语言 1219474-20210918150141542-178224723.png
    添加完成后是这样的
    1219474-20210918150216079-191015394.png
  • 创建 Localizable.strings 文件 1219474-20210918150434177-422084893.png
    1219474-20210918150649399-35946094.png

    1219474-20210918150718856-2062357523.png
    文件名是 Localizable ,也可以更改其它名,后面会讲到
  • 1219474-20210918151021858-1355259992.png

上面都完成后,项目是这样的
1219474-20210918151519449-1786084204.png


1219474-20210918151529265-1931319044.png
在每个语言的.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文件名。也可以用其它名字,只要与宏里的保持一致即可。
每种语言对应的字符串:
1219474-20210918155808591-1887501332.png
首次进入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:

1219474-20210918160407374-921474347.png
点击英文,重新进入app:
1219474-20210918160433863-934887916.png
点击韩语:
1219474-20210918160505907-866556762.png

关注下面的标签,发现更多相似文章