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

2020-09-28  本文已影响0人  CoderCurtis
  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: 没有做什么封装 只是大概思路和用法来理解一下

上一篇下一篇

猜你喜欢

热点阅读