chore: Initial clean commit
- 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
This commit is contained in:
96
YuMi/Tools/Bundle/NSBundle+Localizable.m
Normal file
96
YuMi/Tools/Bundle/NSBundle+Localizable.m
Normal file
@@ -0,0 +1,96 @@
|
||||
//
|
||||
// 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
|
Reference in New Issue
Block a user