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

1.创建多语言文件

iOS多语言-跟随系统/应用内切换_第1张图片

2.点击下图中按钮,会首先显示默认的英文语言类型

iOS多语言-跟随系统/应用内切换_第2张图片

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

iOS多语言-跟随系统/应用内切换_第3张图片

结果:

iOS多语言-跟随系统/应用内切换_第4张图片

4.设置语言

Localizable.strings(Chinese, Simplified)

"BTNTITLE" = "切换";

"TITLE" = "你好 世界";

"COUNTRY" = "中国: %@";

Localizable.strings(English)

"BTNTITLE" = "Exchange";

"TITLE" = "Hello World";

"COUNTRY" = "China: %@";

5.为控件赋值

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

6.显示结果

手机系统为英文时:

Exchange

Hello World

China: 999

手机系统为中文时:

切换

你好 世界

中国: 999

PS: 这种方式应用的语言会跟随系统语言进行切换,不能应用内自己切换

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

这时候仍然用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

iOS多语言-跟随系统/应用内切换_第5张图片

iOS多语言-跟随系统/应用内切换_第6张图片

2.切换语言: 获取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); //你好 世界

3.切换语言,存储当前语言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: 没有做什么封装 只是大概思路和用法来理解一下



作者:CoderCurtis
链接:https://www.jianshu.com/p/6ebccdf695df
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(ios开发,ios)