美文网首页cocoaPods的安装、更新、使用
iOS开发之国际化多语言切换

iOS开发之国际化多语言切换

作者: mrChan1234 | 来源:发表于2017-12-05 15:52 被阅读0次

iOS项目中的多语言切换其实实现起来很简单,其大致原理就是创建几个语言包,里面以键值对的形式写着各种语言对应的内容,在进行语言切换的时候通过键去指定的语言包里面去获取对应的值;这里值得注意的是,语言包中键值对格式是固定的.并且同一个内容对应的键的名称要保持名字一致的,格式为:"back" = "返回";
其大致步骤如下所示:
首先创建资源文件,取名为Localizable

创建语言资源文件.png
下一步选中Localizable.strings文件看右边工具栏点击Localize...:
点击Localize....png
continue.png
然后选中工程project,注意不是target:
选中工程.png
点击+,添加你要国际化的若干种语言 :
点击+号.png
工程中就出现了一一对应的语言资源文件,键值对就是写在这里面的:
语言包文件.png
这里要特别注意的是同一个内容对应的键必须是一致的,在代码中根据语言包直接取对应的键对应的值:
- (NSString *)internationalizedStringForKey:(NSString *)key value:(nullable NSString *)value{
    return [self.currentBundle localizedStringForKey:key value:@"" table:nil];
}

- (NSString *)getCurrentLanguage{
    return [self currentLanguage];
}

- (NSArray *)getAppConfigLanguages{
    return self.languages;
}

- (void)setAppLanguageWithLanguageIndex:(NSInteger)index complete:(SettingLanguageSuccess)complete{
    NSAssert(index < self.languages.count, @"Please check pre-setting languages array");
    NSString *language = kuserDefaults(appLanguageKey);
    if (![language isEqualToString:self.languages[index]]) {
        NSLog(@"======>>>>>>>>new language:%@",self.languages[index]);
        kuserDefaultsSet(_languages[index], appLanguageKey);
        ksynchronize;
        //1秒之后发送通知改变语言
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            [[NSNotificationCenter defaultCenter] postNotificationName:kAppLanguageDidChange object:nil];
            if (complete) {
                complete(YES);
            }
        });
    }
}

#pragma mark - private
- (NSBundle *)currentBundle{
    _currentBundle = [NSBundle bundleWithPath:[self getBundlePath]];
    return _currentBundle;
}

- (NSString *)getBundlePath{
    NSString *path = [[NSBundle mainBundle] pathForResource:[self currentLanguage] ofType:@"lproj"];
    return path;
}

- (NSString *)currentLanguage{
    //获取当前语言
    NSString *language = [[[NSBundle mainBundle] preferredLocalizations] firstObject];
    if ( kuserDefaults(appLanguageKey)&& ![kuserDefaults(appLanguageKey) isEqualToString:language]) {
        language = kuserDefaults(appLanguageKey);
    }
    return language;
}

- (NSArray *)languages{
    if (!_languages) {
        _languages = @[@"en", @"zh-Hans",@"fr"];
    }
    return _languages;
}

在切换成功以后一般发送一个通知给tabbarController也就是keyWindow的rootViewController或者给AppDelegate,让其重新初始化一遍,实现界面的重新赋值。
作者-------mrChan1234

相关文章

  • iOS 国际化多语言(下)

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

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

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

  • iOS开发之APP内部切换语言

    iOS开发之APP内部切换语言 iOS开发之APP内部切换语言

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

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

  • iOS APP 内切换国际化

    iOS国际化(应用内切换语言) 2018-05-08 17:20 编辑: yyuuzhu 分类:iOS开发 来源:...

  • iOS 多语言版本的开发

    iOS 多语言版本的开发 iOS 多语言版本的开发(一) iOS 多语言版本的开发(二)

  • VUE项目国际化处理

    前言: 在大型项目开发中我们经常会遇到项目多环境,国际化(多语言切换),主题切换等常见业务场景,本篇博客分享在vu...

  • iOS 国际化开发 之 多语言(APP内切换)

    前言 最近做了一个 意大利的 物流项目,要求支持中、英、意三种语言,在APP内可以自由切换3种语言,在此记录过程如...

  • iOS开发之国际化多语言切换

    iOS项目中的多语言切换其实实现起来很简单,其大致原理就是创建几个语言包,里面以键值对的形式写着各种语言对应的内容...

  • iOS编程网址链接总结

    iOS开发中实现国际化语言切换:http://blog.csdn.net/sinat_33178727/artic...

网友评论

    本文标题:iOS开发之国际化多语言切换

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