zoukankan      html  css  js  c++  java
  • 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:

    点击韩语:

  • 相关阅读:
    Duang~Duang~Duang 还在使用jsfiddle和jsbin做在线前端代码展示和演示吗? 试试更强大的在线代码分享工具吧!
    如数据库一般访问互联网资源
    HTML5来了,7个混合式移动开发框架
    Three.js纹理贴图正方体旋转动画效果
    极客Web开发资源大荟萃#003
    精彩代码回放:jQuery实现的浏览器类型和版本检测
    响应式的全屏背景图片效果
    Delphi多线程编程之同步读写全局数据
    delphi与sqlite
    Delphi调用IE打开网页
  • 原文地址:https://www.cnblogs.com/lfyDragon/p/15305471.html
Copyright © 2011-2022 走看看