之前情况:有指定语言包就从指定语言包里面获取.没有对应的语言包就使用中文.
当前需求:没有对应的语言包就使用英文
解决思路:
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)
就能实现需求.
网友评论