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

本文详细介绍了在iOS应用中实现多语言支持的步骤,包括创建多语言文件、设置不同语言的字符串值、为控件赋值以及如何根据用户系统语言自动切换显示。此外,还讲解了如何通过NSUserDefaults手动切换应用语言,并展示了不同语言环境下控件显示的示例。同时,提到了使用NSLocalizedString和NSLocalizedStringFromTable方法的重要性以及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.创建多语言文件

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

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

结果:

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

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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值