Files
real-e-party-iOS/YuMi/Tools/Bundle/NSBundle+Localizable.m
edwinQQQ a35a711be6 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
2025-10-09 16:19:14 +08:00

97 lines
3.2 KiB
Objective-C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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