You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
162 lines
4.9 KiB
162 lines
4.9 KiB
// |
|
// 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
|
|
|