// // TFLanguageManager.m // WXReader // // Created by 谢腾飞 on 2020/11/20. // Copyright © 2020 xtfei_2011@126.com. All rights reserved. // #import "TFLanguageManager.h" #import "WXYZ_TouchAssistantView.h" static NSString *kUserLanguage = @"kUserLanguage"; @interface TFLanguageManager () // 语言包 Bundle @property (nonatomic ,strong ,class) NSBundle *languageBundle; // 本地语言名称 @property (nonatomic ,strong ,class) NSString *userLanguageName; @end @implementation TFLanguageManager @dynamic languageBundle; @dynamic userLanguageName; static NSBundle *_languageBundle = nil; + (NSString *)stringWithKey:(NSString *)key { if (self.languageBundle) { return [self.languageBundle localizedStringForKey:key value:nil table:@"InfoPlist"] ?: key; } else { return NSLocalizedString(key, nil); } } + (void)setLanguageType:(TFLanguageType)type { [[NSUserDefaults standardUserDefaults] setValue:type == TFLanguageTypeDefault ? nil : NSStringFromLocalizedLanguage(type) forKey:kUserLanguage]; _languageBundle = nil; [[WXYZ_TouchAssistantView sharedManager] closeButtonClick]; [[NSNotificationCenter defaultCenter] postNotificationName:Notification_Switch_Language object:nil]; } + (NSString *)stringWithKey:(NSString *)key languageType:(TFLanguageType)type { if (type == TFLanguageTypeDefault) { return TFLocalizedString(key); } NSString *t_language = NSStringFromLocalizedLanguage(type); NSString *path = [[NSBundle mainBundle] pathForResource:t_language ofType:@"lproj"]; NSBundle *languageBundle = [NSBundle bundleWithPath:path]; if (languageBundle) { return [languageBundle localizedStringForKey:key value:nil table:@"InfoPlist"] ? : key; } else { return NSLocalizedString(key, nil); } } + (TFLanguageType)userLanguage { return TFLanguageTypeFromNSString([[NSUserDefaults standardUserDefaults] valueForKey:kUserLanguage]); } + (TFLanguageType)localizedLanguage { TFLanguageType language = TFLanguageTypeFromNSString([[NSUserDefaults standardUserDefaults] valueForKey:kUserLanguage]); NSString *t_launguage = NSStringFromLocalizedLanguage(language); return TFLanguageTypeFromNSString(t_launguage); } + (NSString *)serverLocalized { return [self serverLanguageType:[self localizedLanguage]]; } + (NSString *)serverLanguageType:(TFLanguageType)type { switch (type) { case TFLanguageTypeSimplifiedChinese: return @"zh"; case TFLanguageTypeTraditionalChinese: return @"tw"; case TFLanguageTypeEnglish: return @"en"; case TFLanguageTypeTail: return @"th"; case TFLanguageTypeDefault: { NSString *t_str = NSStringFromLocalizedLanguage(type); TFLanguageType t_language = TFLanguageTypeFromNSString(t_str); return [self serverLanguageType:t_language]; } } } // 根据语言名称字符串获取指定语言枚举类型 TFLanguageType TFLanguageTypeFromNSString(NSString *language) { if ([language hasPrefix:@"en"]) { // 英文 return TFLanguageTypeEnglish; } if ([language hasPrefix:@"zh-Hans"]) { // 简体中文 return TFLanguageTypeSimplifiedChinese; } if ([language hasPrefix:@"zh-Hant"]) { // 繁体中文 return TFLanguageTypeTraditionalChinese; } if ([language hasPrefix:@"th"]) { // 泰语 return TFLanguageTypeTail; } return TFLanguageTypeDefault; } // 根据语言枚举类型获取指定语言名称(如果匹配不到则会返回默认语言) NSString * NSStringFromLocalizedLanguage(TFLanguageType language) { switch (language) { case TFLanguageTypeEnglish: return @"en"; case TFLanguageTypeSimplifiedChinese: return @"zh-Hans"; case TFLanguageTypeTraditionalChinese: return @"zh-Hant"; case TFLanguageTypeTail: return @"th"; case TFLanguageTypeDefault: { NSArray *languages = [NSLocale preferredLanguages]; TFLanguageType t_language = TFLanguageTypeFromNSString(languages.firstObject); if (t_language == TFLanguageTypeDefault) return TF_Default_Language; return NSStringFromLocalizedLanguage(t_language); } } } + (NSBundle *)languageBundle { if (!_languageBundle) { NSString *path = [[NSBundle mainBundle] pathForResource:self.userLanguageName ofType:@"lproj"]; _languageBundle = [NSBundle bundleWithPath:path]; } return _languageBundle; } + (NSString *)userLanguageName { NSString *userLanguage = [[NSUserDefaults standardUserDefaults] valueForKey:kUserLanguage]; if (userLanguage) return userLanguage; return NSStringFromLocalizedLanguage(TFLanguageTypeDefault); } @end