// // NSBundle+Localizable.m // YuMi // // Created by YuMi on 2023/6/19. // #import "NSBundle+Localizable.h" #import "YMLanguageConfig.h" #import // 定义常量用于存储当前语言的 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