美文网首页
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 多语言版本的开发(二)

    iOS 多语言版本的开发(二) 题记 iOS 多语言版本的开发(一) 中我们完成了让应用跟随系统语言进行切换,而用...

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

    创建多语言文件 点击下图中按钮,会首先显示默认的英文语言类型image.png PROJECT -> Locali...

  • 深渊巨坑!关于android N后多语言切换

    这里的多语言切换专指应用内的多语言切换,不涉及直接通过应用修改系统语言设置的功能。比如微信里面的 我 -> 设置 ...

  • iOS应用内多语言切换

    在项目里面找到PROJECT-info->Localizations,添加支持的语言 创建.string文件,不要...

  • 视图和动画

    Core Animation iOS系统的核心地位:应用内和应用间都会应用(多个程序间的手势切换)SpringBo...

  • Flutter添加国际化支持

    预览 更加简洁的实现方案 支持应用内手动切换语言&默认跟随系统语言Screenshot_1585994812.pn...

  • iOS多语言国际化

    前言 iOS的国际化,即多语言的实现,主要有两种: 跟随系统语言的自动切换显示的语言 手动设置语言,由用户选择,可...

  • iOS应用内跳转到系统设置页面

    iOS应用内跳转到系统设置页面 iOS应用内跳转到系统设置页面

  • iOS 国际化多语言(下)

    前言 上一片文章介绍的是根据系统语言自动切换,现在我们来说说怎么在APP中手动切换多语言。iOS 国际化多语言(上...

  • iOS 多语言版本的开发(三)

    iOS 多语言版本的开发(三) 写在前面 iOS 多语言版本的开发(二) 中我们实现了如何让用户自己去切换系统语言...

网友评论

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

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