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

//
// 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