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.
163 lines
4.9 KiB
163 lines
4.9 KiB
4 years ago
|
//
|
||
|
// 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
|