
- Removed YuMi/Library/ (138 MB, not tracked) - Removed YuMi/Resources/ (23 MB, not tracked) - Removed old version assets (566 files, not tracked) - Excluded Pods/, xcuserdata/ and other build artifacts - Clean repository optimized for company server deployment
97 lines
3.2 KiB
Objective-C
97 lines
3.2 KiB
Objective-C
//
|
||
// NSBundle+Localizable.m
|
||
// YuMi
|
||
//
|
||
// Created by YuMi on 2023/6/19.
|
||
//
|
||
|
||
#import "NSBundle+Localizable.h"
|
||
#import "YMLanguageConfig.h"
|
||
#import <objc/runtime.h>
|
||
|
||
// 定义常量用于存储当前语言的 key
|
||
static NSString * const kSaveCurLanguageKey = @"kSaveCurLanguage";
|
||
static NSString * const kResourceType = @"lproj";
|
||
|
||
@implementation NSBundle (Localizable)
|
||
|
||
+(void)load{
|
||
Method oldMethod = class_getClassMethod(self, @selector(mj_localizedStringForKey:));
|
||
Method newMethod = class_getClassMethod(self, @selector(ms_localizedStringForKey:));
|
||
method_exchangeImplementations(oldMethod, newMethod);
|
||
}
|
||
+ (NSString *)ms_localizedStringForKey:(NSString *)key{
|
||
return [self ymLocalizedStringForKey:key];
|
||
}
|
||
+(NSString *)ymLocalizedStringForKey:(NSString *)key
|
||
{
|
||
return [self ymLocalizedStringForKey:key value:@""];
|
||
}
|
||
|
||
+(NSString *)ymLocalizedStringForKey:(NSString *)key value:(NSString *)value
|
||
{
|
||
NSString *language = [NSBundle getLanguageText];
|
||
NSBundle *bundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:language
|
||
ofType:kResourceType]];
|
||
value = [bundle localizedStringForKey:key
|
||
value:value
|
||
table:nil];
|
||
return value;
|
||
}
|
||
|
||
+(NSString *)getLanguageText{
|
||
NSString *saveLanguage = [[NSUserDefaults standardUserDefaults] valueForKey:kSaveCurLanguageKey];
|
||
if (saveLanguage){
|
||
return saveLanguage;
|
||
}
|
||
|
||
NSString *preferredLanguage = [NSLocale preferredLanguages].firstObject;
|
||
return [self mapLanguageForLocalization:preferredLanguage];
|
||
}
|
||
|
||
+(NSString *)uploadLanguageText{
|
||
NSString *saveLanguage = [[NSUserDefaults standardUserDefaults]valueForKey:kSaveCurLanguageKey];
|
||
if (saveLanguage){
|
||
return [self mapLanguageForLocalization:saveLanguage];
|
||
}
|
||
|
||
NSString *preferredLanguage = [NSLocale preferredLanguages].firstObject;
|
||
return [self mapLanguageForLocalization:preferredLanguage];
|
||
}
|
||
|
||
+(void)setLanguageText:(NSString *)language{
|
||
[[NSUserDefaults standardUserDefaults]setValue:language forKey:kSaveCurLanguageKey];
|
||
[[NSUserDefaults standardUserDefaults]synchronize];
|
||
}
|
||
|
||
// 辅助方法,用于映射本地化语言 - 重构为使用统一配置
|
||
+ (NSString *)mapLanguageForLocalization:(NSString *)language {
|
||
// 首先尝试精确匹配
|
||
for (NSDictionary *langConfig in [YMLanguageConfig supportedLanguages]) {
|
||
NSString *code = langConfig[@"code"];
|
||
NSString *localizationCode = langConfig[@"localizationCode"];
|
||
|
||
if ([language isEqualToString:code] || [language isEqualToString:localizationCode]) {
|
||
return localizationCode;
|
||
}
|
||
}
|
||
|
||
// 然后尝试前缀匹配
|
||
for (NSDictionary *langConfig in [YMLanguageConfig supportedLanguages]) {
|
||
NSString *code = langConfig[@"code"];
|
||
if ([language hasPrefix:code]) {
|
||
return langConfig[@"localizationCode"];
|
||
}
|
||
}
|
||
|
||
// 特殊处理:pt-BR 和 pt 的映射
|
||
if ([language hasPrefix:@"pt"]) {
|
||
return @"pt-BR";
|
||
}
|
||
|
||
// 默认返回英文
|
||
return [YMLanguageConfig defaultLanguage];
|
||
}
|
||
|
||
@end
|