语言逻辑处理
我的项目里有5个国家的语言,如果用户在app里手动切换了国家语言,只要不卸载app,用户在手机设置切换语言,app的语言不要变;如果app被删 除,重新安装,app语言要跟随手机设置的语言(如果语言对不上,app就显示英语) 用户没有在app里手动设置过国家语言,用户在手机设置界面切换国家,app要跟随手机设置的语言(如果语言对不上,app就显示英语)。
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
#import "KBKeyboardLayoutResolver.h"
|
||||
#import "KBInputProfileManager.h"
|
||||
#import "KBConfig.h"
|
||||
#import "KBLocalizationManager.h"
|
||||
|
||||
@implementation KBKeyboardLayoutResolver
|
||||
|
||||
@@ -18,6 +19,30 @@
|
||||
return instance;
|
||||
}
|
||||
|
||||
/// 未手动选择键盘输入配置时,根据当前 App 语言推导默认键盘语言码(对应 kb_input_profiles.json 的 code)。
|
||||
- (NSString *)kb_defaultKeyboardLanguageCodeForAppLanguageCode:(NSString *)appLanguageCode {
|
||||
NSString *lc = (appLanguageCode ?: @"").lowercaseString;
|
||||
if ([lc hasPrefix:@"es"]) { return @"es"; }
|
||||
if ([lc hasPrefix:@"pt"]) { return @"pt"; }
|
||||
if ([lc hasPrefix:@"id"]) { return @"id"; }
|
||||
if ([lc hasPrefix:@"zh-hant"]) { return @"zh-Hant-Pinyin"; }
|
||||
return @"en";
|
||||
}
|
||||
|
||||
- (BOOL)kb_didUserSelectKeyboardProfileInAppGroup:(NSUserDefaults *)appGroup {
|
||||
return [appGroup boolForKey:AppGroup_DidUserSelectKeyboardProfile];
|
||||
}
|
||||
|
||||
- (nullable KBInputProfileLayout *)kb_defaultLayoutForCurrentAppLanguage {
|
||||
NSString *appLang = [KBLocalizationManager shared].currentLanguageCode ?: KBLanguageCodeEnglish;
|
||||
NSString *kbLang = [self kb_defaultKeyboardLanguageCodeForAppLanguageCode:appLang];
|
||||
KBInputProfile *profile = [[KBInputProfileManager sharedManager] profileForLanguageCode:kbLang];
|
||||
if (!profile) {
|
||||
profile = [[KBInputProfileManager sharedManager] profileForLanguageCode:@"en"];
|
||||
}
|
||||
return profile.layouts.firstObject;
|
||||
}
|
||||
|
||||
- (NSString *)layoutJsonIdForProfileId:(NSString *)profileId {
|
||||
if (profileId.length == 0) {
|
||||
return @"letters";
|
||||
@@ -51,19 +76,31 @@
|
||||
- (nullable NSString *)currentProfileId {
|
||||
NSUserDefaults *appGroup = [[NSUserDefaults alloc] initWithSuiteName:AppGroup];
|
||||
NSString *profileId = [appGroup stringForKey:AppGroup_SelectedKeyboardProfileId];
|
||||
return profileId;
|
||||
if ([self kb_didUserSelectKeyboardProfileInAppGroup:appGroup]) {
|
||||
return profileId;
|
||||
}
|
||||
KBInputProfileLayout *layout = [self kb_defaultLayoutForCurrentAppLanguage];
|
||||
return layout.profileId.length > 0 ? layout.profileId : profileId;
|
||||
}
|
||||
|
||||
- (nullable NSString *)currentLanguageCode {
|
||||
NSUserDefaults *appGroup = [[NSUserDefaults alloc] initWithSuiteName:AppGroup];
|
||||
NSString *languageCode = [appGroup stringForKey:AppGroup_SelectedKeyboardLanguageCode];
|
||||
return languageCode;
|
||||
if ([self kb_didUserSelectKeyboardProfileInAppGroup:appGroup]) {
|
||||
return languageCode;
|
||||
}
|
||||
NSString *appLang = [KBLocalizationManager shared].currentLanguageCode ?: KBLanguageCodeEnglish;
|
||||
return [self kb_defaultKeyboardLanguageCodeForAppLanguageCode:appLang];
|
||||
}
|
||||
|
||||
- (nullable NSString *)currentLayoutVariant {
|
||||
NSUserDefaults *appGroup = [[NSUserDefaults alloc] initWithSuiteName:AppGroup];
|
||||
NSString *layoutVariant = [appGroup stringForKey:AppGroup_SelectedKeyboardLayoutVariant];
|
||||
return layoutVariant;
|
||||
if ([self kb_didUserSelectKeyboardProfileInAppGroup:appGroup]) {
|
||||
return layoutVariant;
|
||||
}
|
||||
KBInputProfileLayout *layout = [self kb_defaultLayoutForCurrentAppLanguage];
|
||||
return layout.variant.length > 0 ? layout.variant : layoutVariant;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
Reference in New Issue
Block a user