关于国际化语言

作者: 侭情显現 | 来源:发表于2016-08-27 00:02 被阅读204次

    之前情况:有指定语言包就从指定语言包里面获取.没有对应的语言包就使用中文.

    当前需求:没有对应的语言包就使用英文

    解决思路:
    1.首先判断语言包中是否包含当前环境语言
    2.如果包含.就走系统的方法NSLocalizedString(key, nil)获取对应的值.
    3.如果不包含.就走我们指定的文件GETLANGUAGES(key,nil)获取对应的值
    4.封装一个单例实现
    5.替换系统原有的方法

    .h文件:
    #import <Foundation/Foundation.h>
    #define GETLANGUAGES(key,fileName) [[GetLanguagesString shareGetLanguagesString] accordLanguagesReturnNSStringWithKey:(key) andFileName:(fileName)] @interface GetLanguagesString : NSObject +(instancetype)shareGetLanguagesString; -(NSString *)accordLanguagesReturnNSStringWithKey:(NSString *)keyString andFileName:(NSString *)fileName; @end

    .m文件
    #import “GetLanguagesString.h"
    @implementation GetLanguagesString +(instancetype)shareGetLanguagesString { static GetLanguagesString *getLanguagesString; static dispatch_once_t dispatch_onceToken; dispatch_once(&dispatch_onceToken, ^{ getLanguagesString = [[GetLanguagesString alloc]init]; }); return getLanguagesString; }
    /**
    * 语言包里面有key对应的值就使用语言包里面的.要是没有就使用指定文件的 */
    -(NSString *)accordLanguagesReturnNSStringWithKey:(NSString *)keyString andFileName:(NSString *)fileName{ //获取当前环境语言--> NSArray *languages = [NSLocale preferredLanguages]; NSString *currentLanguage = [[[languages objectAtIndex:0] componentsSeparatedByString:@"-"] objectAtIndex:0]; //根据这个语言做判断 //我们有这么多语言包.en cs zh cd fr de hu pl ru es th ,如果是这几个中的一个.就根据当前语言环境找.调用系统的NSLocalizedString(keyString, nil)方法. if ([currentLanguage isEqualToString:@"en"]|| [currentLanguage isEqualToString:@"zh"]|| [currentLanguage isEqualToString:@"cd"]|| [currentLanguage isEqualToString:@"cs"]|| [currentLanguage isEqualToString:@"fr"]|| [currentLanguage isEqualToString:@"de"]|| [currentLanguage isEqualToString:@"hu"]|| [currentLanguage isEqualToString:@"pl"]|| [currentLanguage isEqualToString:@"ru"]|| [currentLanguage isEqualToString:@"es"]|| [currentLanguage isEqualToString:@"th"]) { return NSLocalizedString(keyString, nil); }else { //如果fileName为nil.就从默认的一个文件夹中找. if (fileName == nil) { return NSLocalizedStringFromTable(keyString, @"Localizable_EN", nil); } //不为nil.就从fileName文件中找 return NSLocalizedStringFromTable(keyString, fileName, nil); } }

    这样写的好处是:
    我给单例定义了一个宏
    GETLANGUAGES(key,fileName)
    而系统的是
    NSLocalizedString(key, nil)
    可以直接替换我们已经写了的代码的一个单词.
    GETLANGUAGES(key,nil)
    就能实现需求.

    相关文章

      网友评论

        本文标题:关于国际化语言

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