ios国家化的一些点

将时间NSDate本地化format显示时,泰国有佛历年,比公历年领先了一千多数值,也就是2019=2562(2563?)

本地化文件除了可以内嵌还可以strings文件放在网络上下载,再通过本地封装成本地的bundle读取里面的内容

static NSMutableDictionary *wjy_lanBundleDict = nil;#define WJYCONVERLAN(lan) [WjyLanguage languageCodeForLanguage:lan]@implementation WjyLanguage+(void)load {[self loadSystemLanguage];
}+(void)loadSystemLanguage {NSString *dirPath = [[NSBundle mainBundle] bundlePath];NSFileManager *man = [NSFileManager defaultManager];for (NSString *subpath in [man subpathsOfDirectoryAtPath:dirPath error:nil]) {NSArray *arr = [subpath componentsSeparatedByString:@"."];if (arr.count == 2) {if ([arr[1] isEqualToString:@"lproj"]) {[self copySystemLocalizableForLanguage:arr[0] then:^(BOOL success) {}];}}}
}+(void)copySystemLocalizableForLanguage:(NSString *)language then:(void (^)(BOOL))then {NSBundle *localBundle = [NSBundle bundleWithPath:[[NSBundle mainBundle]pathForResource:language ofType:@"lproj"]];if (localBundle) {[[self bundleDict] setObject:localBundle forKey:WJYCONVERLAN(language)];!then?:then(YES);}else {[[self bundleDict] setObject:@(NO) forKey:WJYCONVERLAN(language)];!then?:then(NO);}}+(void)downloadLocalizableFile:(NSURL*)url forLanguage:(NSString*)language md5:(NSString*)md5 then:(void(^)(BOOL success))then {NSFileManager *man = [NSFileManager defaultManager];NSString *path = [self pathForLanguage:WJYCONVERLAN(language)];NSString *file = [path stringByAppendingPathComponent:@"Localizable.strings"];if (![man fileExistsAtPath:file]) {[self downloadLocalizableFile:url forLanguage:language then:^(BOOL success) {NSString *fmd5 = [MSFileKit md5HashOfFileAtPath:file];NSLog(@"file md5:%@",fmd5);BOOL result = (success && [fmd5 isEqualToString:md5]);if (result) {[TextKeyData saveTextIgnoreUserVersion:md5 forKey:file];}else {[man removeItemAtPath:file error:nil];}!then?:then(result);}];}else {typeof(self) __weak weakself = self;[TextKeyData textForKey:file duringVersion:nil textHandle:^(NSString *text) {if (text && [text isEqualToString:md5]) {!then?:then(YES);}else {typeof(weakself) __strong strongself = weakself;[strongself downloadLocalizableFile:url forLanguage:language then:^(BOOL success) {if (success) {[TextKeyData saveTextIgnoreUserVersion:md5 forKey:file];}!then?:then(success);}];}}];}
}+(void)downloadLocalizableFile:(NSURL*)url forLanguage:(NSString *)language then:(void (^)(BOOL))then {if (!url) {!then?:then(NO);return;}YDOutHttpKit *http = [[YDOutHttpKit alloc] init];[http setShouldNotify:NO];NSString *savedDir = [self languageCacheDirPath];[http getFile:url.absoluteString param:@{} distinationURL:savedDir downloadProgress:^(NSProgress *aProgress) {} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {if (!error) {NSData *data = [NSData dataWithContentsOfURL:filePath];if (data.length > 0) {BOOL result = [self saveLanguageData:data forLanguage:language];dispatch_async(dispatch_get_main_queue(), ^{!then?:then(result);});}else {dispatch_async(dispatch_get_main_queue(), ^{!then?:then(NO);});}} else {dispatch_async(dispatch_get_main_queue(), ^{!then?:then(NO);});}}];/*dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{NSData *data = [NSData dataWithContentsOfURL:url];dispatch_async(dispatch_get_main_queue(), ^{if (data.length <= 0) {!then?:then(NO);return;}BOOL result = [self saveLanguageData:data forLanguage:language];!then?:then(result);});});*/
}+(BOOL)saveLanguageData:(NSData*)data forLanguage:(NSString *)language {NSFileManager *man = [NSFileManager defaultManager];NSString *path = [self pathForLanguage:WJYCONVERLAN(language)];if (![man fileExistsAtPath:path]) {[man createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];}NSString *file = [path stringByAppendingPathComponent:@"Localizable.strings"];if ([man fileExistsAtPath:file]) {[man removeItemAtPath:file error:nil];}return [man createFileAtPath:file contents:data attributes:nil];
}+(NSString*)languageDirPath {NSArray * arr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);NSString * path = [arr objectAtIndex:0];path = [path stringByAppendingPathComponent:@"wjy_lans"];NSFileManager *man = [NSFileManager defaultManager];if (![man fileExistsAtPath:path]) {[man createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];}return path;
}+(NSString*)pathForLanguage:(NSString*)language {return [[self languageDirPath] stringByAppendingFormat:@"/%@.lproj",language];
}+(NSString*)languageCacheDirPath {NSArray * arr = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);NSString * path = [arr objectAtIndex:0];path = [path stringByAppendingPathComponent:@"wjy_lans_cache"];NSFileManager *man = [NSFileManager defaultManager];if (![man fileExistsAtPath:path]) {[man createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];}return path;
}+(NSString*)cachePathForLanguage:(NSString*)language {return [[self languageCacheDirPath] stringByAppendingFormat:@"/%@.strings",language];
}+(void)loadLanguage:(NSString*)language then:(void(^)(BOOL success))then {NSString *path = [self pathForLanguage:WJYCONVERLAN(language)];NSString *file = [path stringByAppendingPathComponent:@"Localizable.strings"];NSFileManager *man = [NSFileManager defaultManager];if (![man fileExistsAtPath:file]) {[[self bundleDict] setObject:@(NO) forKey:WJYCONVERLAN(language)];!then?:then(NO);return;}else {/*NSString *bundlePath = [[[NSBundle mainBundle] pathForResource:@"languages" ofType:@"bundle"] stringByAppendingPathComponent:path.lastPathComponent];if (![man fileExistsAtPath:bundlePath]) {if (![man createDirectoryAtPath:bundlePath withIntermediateDirectories:YES attributes:nil error:nil]) {[[self bundleDict] setObject:@(NO) forKey:WJYCONVERLAN(language)];!then?:then(NO);return;}}BOOL result = [man copyItemAtPath:file toPath:[bundlePath stringByAppendingPathComponent:file.lastPathComponent] error:nil];NSBundle *localBundle = [NSBundle bundleWithPath:bundlePath];*/NSBundle *localBundle = [NSBundle bundleWithPath:[self pathForLanguage:WJYCONVERLAN(language)]];if (!localBundle) {[[self bundleDict] setObject:@(NO) forKey:WJYCONVERLAN(language)];!then?:then(NO);return;}/*if (result) {[[self bundleDict] setObject:localBundle forKey:WJYCONVERLAN(language)];}else {[[self bundleDict] setObject:@(NO) forKey:WJYCONVERLAN(language)];}!then?:then(result);*/[[self bundleDict] setObject:localBundle forKey:WJYCONVERLAN(language)];!then?:then(YES);}
}+(NSMutableDictionary*)bundleDict {if (!wjy_lanBundleDict) {wjy_lanBundleDict = [NSMutableDictionary dictionary];}return wjy_lanBundleDict;
}+(NSString*)localizedStringForLanguage:(NSString*)language forKey:(NSString *)key value:(NSString *)value {id localBundle = [[self bundleDict] objectForKey:WJYCONVERLAN(language)];if (localBundle && [localBundle class] == [NSBundle class]) {NSString *text = [localBundle localizedStringForKey:key value:value table:nil];if (text) {return text;}return [[NSBundle mainBundle] localizedStringForKey:key value:value table:nil];}else if ([localBundle isEqual:@(NO)]) {return [self recommendStringForLanguage:language forKey:key value:value];}else {[[self bundleDict] setObject:@(NO) forKey:WJYCONVERLAN(language)];[self loadLanguage:language then:nil];return [self localizedStringForLanguage:language forKey:key value:nil];}}+(NSString*)appDefaultLanguage {return @"en";
}+(NSString*)appReplaceLanguageForLanguage:(NSString*)language {return @"en";
}+(NSString*)recommendStringForLanguage:(NSString*)language forKey:(NSString *)key value:(NSString *)value {if ([WJYCONVERLAN(language) isEqualToString:[self appDefaultLanguage]]) {return key;}else {return [self localizedStringForLanguage:[self appReplaceLanguageForLanguage:language] forKey:key value:nil];}
}+(NSString*)languageCodeForLanguage:(NSString*)language {NSArray *arr = [language componentsSeparatedByString:@"-"];if (arr.count > 1) {return [arr[0] lowercaseString];}else {return [language lowercaseString];}
}@end

 

转载于:https://www.cnblogs.com/yuxiaoyiyou/p/11062804.html


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部