3
This commit is contained in:
@@ -202,6 +202,62 @@ static NSString * const kKBSkinMetadataThemeKey = @"theme_json";
|
||||
return map;
|
||||
}
|
||||
|
||||
+ (NSDictionary<NSString *, NSString *> *)iconShortNamesForLanguageCode:(NSString *)languageCode {
|
||||
if (languageCode.length == 0) {
|
||||
return [self defaultIconShortNames];
|
||||
}
|
||||
|
||||
static NSMutableDictionary<NSString *, NSDictionary<NSString *, NSString *> *> *cachedMaps = nil;
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
cachedMaps = [NSMutableDictionary dictionary];
|
||||
});
|
||||
|
||||
NSDictionary<NSString *, NSString *> *cached = cachedMaps[languageCode];
|
||||
if (cached) {
|
||||
return cached;
|
||||
}
|
||||
|
||||
NSString *mapFileName = nil;
|
||||
|
||||
if ([languageCode isEqualToString:@"es"]) {
|
||||
mapFileName = @"KBSkinIconMap_es";
|
||||
} else if ([languageCode isEqualToString:@"pt"]) {
|
||||
mapFileName = @"KBSkinIconMap_pt";
|
||||
} else if ([languageCode isEqualToString:@"id"]) {
|
||||
mapFileName = @"KBSkinIconMap_id";
|
||||
} else if ([languageCode hasPrefix:@"zh-Hant"] || [languageCode isEqualToString:@"zh-TW"]) {
|
||||
mapFileName = @"KBSkinIconMap_zh_hant";
|
||||
} else if ([languageCode hasPrefix:@"zh-Hans"] || [languageCode isEqualToString:@"zh-CN"]) {
|
||||
mapFileName = @"KBSkinIconMap";
|
||||
} else {
|
||||
mapFileName = @"KBSkinIconMap";
|
||||
}
|
||||
|
||||
NSString *path = [[NSBundle mainBundle] pathForResource:mapFileName ofType:@"strings"];
|
||||
NSDictionary<NSString *, NSString *> *map = nil;
|
||||
|
||||
if (path.length > 0) {
|
||||
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path];
|
||||
if ([dict isKindOfClass:NSDictionary.class]) {
|
||||
map = dict;
|
||||
}
|
||||
}
|
||||
|
||||
if (!map || map.count == 0) {
|
||||
map = [self defaultIconShortNames];
|
||||
}
|
||||
|
||||
if (map) {
|
||||
cachedMaps[languageCode] = map;
|
||||
}
|
||||
|
||||
NSLog(@"[SkinBridge] Loaded icon map for language: %@, file: %@, count: %lu",
|
||||
languageCode, mapFileName, (unsigned long)map.count);
|
||||
|
||||
return map ?: @{};
|
||||
}
|
||||
|
||||
+ (NSUserDefaults *)sharedDefaults {
|
||||
return [[NSUserDefaults alloc] initWithSuiteName:AppGroup];
|
||||
}
|
||||
@@ -240,7 +296,9 @@ static NSString * const kKBSkinMetadataThemeKey = @"theme_json";
|
||||
if ([skinJSON[@"key_icons"] isKindOfClass:NSDictionary.class]) {
|
||||
iconShortNames = skinJSON[@"key_icons"];
|
||||
} else {
|
||||
iconShortNames = [self defaultIconShortNames];
|
||||
NSString *currentLanguageCode = [[NSUserDefaults standardUserDefaults]
|
||||
stringForKey:AppGroup_SelectedKeyboardLanguageCode];
|
||||
iconShortNames = [self iconShortNamesForLanguageCode:currentLanguageCode];
|
||||
}
|
||||
NSLog(@"[SkinBridge] iconShortNames source=%@ count=%tu",
|
||||
[skinJSON[@"key_icons"] isKindOfClass:NSDictionary.class] ? @"server" : @"default",
|
||||
@@ -779,7 +837,9 @@ static NSString * const kKBSkinMetadataThemeKey = @"theme_json";
|
||||
|
||||
NSDictionary *shortNames = payload[kKBSkinPendingIconShortKey];
|
||||
if (![shortNames isKindOfClass:NSDictionary.class] || shortNames.count == 0) {
|
||||
shortNames = [self defaultIconShortNames];
|
||||
NSString *currentLanguageCode = [[NSUserDefaults standardUserDefaults]
|
||||
stringForKey:AppGroup_SelectedKeyboardLanguageCode];
|
||||
shortNames = [self iconShortNamesForLanguageCode:currentLanguageCode];
|
||||
}
|
||||
|
||||
NSString *iconsDirFinal = iconsDir;
|
||||
|
||||
Reference in New Issue
Block a user