美文网首页
iOS多语言-跟随系统/应用内切换

iOS多语言-跟随系统/应用内切换

作者: CoderCurtis | 来源:发表于2020-09-28 11:12 被阅读0次
    1. 创建多语言文件
    image.png
    1. 点击下图中按钮,会首先显示默认的英文语言类型


      image.png
    2. PROJECT -> Localizations -> 点击"+"按钮添加需要的语言类型


      image.png

    结果:


    image.png
    1. 设置语言

    Localizable.strings(Chinese, Simplified)

    "BTNTITLE" = "切换";
    
    "TITLE" = "你好 世界";
    
    "COUNTRY" = "中国: %@";
    

    Localizable.strings(English)

    "BTNTITLE" = "Exchange";
    
    "TITLE" = "Hello World";
    
    "COUNTRY" = "China: %@";
    
    1. 为控件赋值
    self.test1Label.text = NSLocalizedString(@"BTNTITLE",  nil);
    self.test2Label.text = NSLocalizedString(@"TITLE", nil);
    self.test3Label.text = [NSString stringWithFormat:NSLocalizedString(@"COUNTRY", nil), @"999"];
    

    PS: 使用[NSLocalizedString(@"TITLE", nil);]这种方式赋值的,多语言文件的名字必须是Localizable,否则只会显示它的key

    1. 显示结果

    手机系统为英文时:

    Exchange
    Hello World
    China: 999
    

    手机系统为中文时:

    切换
    你好 世界
    中国: 999
    
    PS: 这种方式应用的语言会跟随系统语言进行切换,不能应用内自己切换

    多语言文件名字不为Localizable,创建过程一致,只是名字换成其他的,结果:


    image.png

    这时候仍然用NSLocalizedString给控件赋值,只会显示对应的key了

    BTNTITLE
    TITLE
    COUNTRY
    

    正确显示:

    self.test1Label.text = NSLocalizedStringFromTable(@"BTNTITLE", @"EEE",  nil);
    self.test2Label.text = NSLocalizedStringFromTable(@"TITLE", @"EEE", nil);
    self.test3Label.text = [NSString stringWithFormat:NSLocalizedStringFromTable(@"COUNTRY", @"EEE", nil), @"999"];
    
        //跟随系统切换 文件名必须是Localizable
        /**
         key: 文字对应的key
         comment: 注释 一般写nil
         */
        NSLocalizedString(key, comment)
        
        //以下三种均可以手动设置多语言
        /**
         key: 文字对应的key
         tbl: 多语言文件的名字
         comment: 注释 一般nil
         */
        NSLocalizedStringFromTable(key, tbl, comment)
        
        /**
         key: 文字对应的key
         tbl: 多语言文件的名字
         bundle: 多语言文件的bundle
         comment: 注释 一般nil
         */
        NSLocalizedStringFromTableInBundle(key, tbl, bundle, comment)
        
        /**
         key: 文字对应的key
         tbl: 多语言文件的名字
         bundle: 多语言文件的bundle
         val: 默认值
         comment: 注释 一般nil
        */
        NSLocalizedStringWithDefaultValue(key, tbl, bundle, val, comment)
    

    应用内手动设置语言

    1. 每种语言对应一个后缀为lproj的文件夹,且文件为EEE.strings


      image.png
    image.png
    1. 切换语言: 获取EEE.strings中value的值,即切换语言 -> 切换不同语言文件夹 -> 切换不同的语言资源文件
    NSString *path = [[NSBundle mainBundle] pathForResource:@"zh-Hans" ofType:@"lproj"];
    NSString *string = [[NSBundle bundleWithPath:path] localizedStringForKey:@"TITLE" value:nil table:@"EEE"];
    NSLog(@"==%@", string); //你好 世界
    
    1. 切换语言,存储当前语言key
    NSString *currentLanguage = [[NSUserDefaults standardUserDefaults] objectForKey:kAppLanguage];
        if (btn.tag == 0) {
            //中文
            if ([currentLanguage isEqualToString:@"zh-Hans"]) {
                return;
            }
            [[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:kAppLanguage];
            [[NSUserDefaults standardUserDefaults] synchronize];
        } else {
            //英文
            if ([currentLanguage isEqualToString:@"en"]) {
                return;
            }
            [[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:kAppLanguage];
            [[NSUserDefaults standardUserDefaults] synchronize];
        }
    

    启动时,默认语言:

    if (![[NSUserDefaults standardUserDefaults] objectForKey:kAppLanguage]) {
            //默认设为英文
            [[NSUserDefaults standardUserDefaults] setObject:@"en"  forKey:kAppLanguage];
            [[NSUserDefaults standardUserDefaults] synchronize];
        }
    

    ps: 没有做什么封装 只是大概思路和用法来理解一下

    相关文章

      网友评论

          本文标题:iOS多语言-跟随系统/应用内切换

          本文链接:https://www.haomeiwen.com/subject/gwkluktx.html