This commit is contained in:
2025-12-02 20:33:17 +08:00
parent c56655c728
commit 2f55e7bfa1
12 changed files with 83 additions and 133 deletions

View File

@@ -7,6 +7,20 @@
#import <Security/Security.h>
#import "KBConfig.h"
///
KBLanguageCode const KBLanguageCodeEnglish = @"en";
KBLanguageCode const KBLanguageCodeSimplifiedChinese = @"zh-Hans";
///
NSArray<KBLanguageCode> *KBDefaultSupportedLanguageCodes(void) {
static NSArray<KBLanguageCode> *codes;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
codes = @[KBLanguageCodeEnglish, KBLanguageCodeSimplifiedChinese];
});
return codes;
}
///
NSString * const KBLocalizationDidChangeNotification = @"KBLocalizationDidChangeNotification";
@@ -15,7 +29,7 @@ static NSString * const kKBLocService = @"com.loveKey.nyx.loc";
static NSString * const kKBLocAccount = @"lang"; // UTF8
@interface KBLocalizationManager ()
@property (nonatomic, copy, readwrite) NSString *currentLanguageCode; //
@property (nonatomic, copy, readwrite) KBLanguageCode currentLanguageCode; //
@property (nonatomic, strong) NSBundle *langBundle; // .lproj
@end
@@ -37,11 +51,11 @@ static inline NSMutableDictionary *KBLocBaseKCQuery(void) {
static KBLocalizationManager *m; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{
m = [KBLocalizationManager new];
//
m.supportedLanguageCodes = @[ @"en", @"zh-Hans" ];
m.supportedLanguageCodes = KBDefaultSupportedLanguageCodes();
// 退
NSString *saved = [[self class] kc_read];
if (saved.length == 0) {
saved = [m bestSupportedLanguageForPreferred:[NSLocale preferredLanguages]] ?: @"en";
saved = [m bestSupportedLanguageForPreferred:[NSLocale preferredLanguages]] ?: KBLanguageCodeEnglish;
}
[m applyLanguage:saved];
});
@@ -56,7 +70,7 @@ static inline NSMutableDictionary *KBLocBaseKCQuery(void) {
for (NSString *c in supportedLanguageCodes) {
if (c.length) { [set addObject:c]; }
}
_supportedLanguageCodes = set.array.count ? set.array : @[ @"en" ];
_supportedLanguageCodes = set.array.count ? (NSArray<KBLanguageCode> *)set.array : @[ KBLanguageCodeEnglish ];
// 广
if (self.currentLanguageCode.length && ![set containsObject:self.currentLanguageCode]) {
NSString *best = [self bestSupportedLanguageForPreferred:@[self.currentLanguageCode]];
@@ -74,7 +88,7 @@ static inline NSMutableDictionary *KBLocBaseKCQuery(void) {
}
- (void)resetToSystemLanguage {
NSString *best = [self bestSupportedLanguageForPreferred:[NSLocale preferredLanguages]] ?: @"en";
NSString *best = [self bestSupportedLanguageForPreferred:[NSLocale preferredLanguages]] ?: KBLanguageCodeEnglish;
[self setCurrentLanguageCode:best persist:NO];
}
@@ -92,7 +106,7 @@ static inline NSMutableDictionary *KBLocBaseKCQuery(void) {
}
- (NSString *)bestSupportedLanguageForPreferred:(NSArray<NSString *> *)preferred {
if (self.supportedLanguageCodes.count == 0) return @"en";
if (self.supportedLanguageCodes.count == 0) return KBLanguageCodeEnglish;
// 1)
for (NSString *p in preferred) {
NSString *pLC = p.lowercaseString;
@@ -129,7 +143,7 @@ static inline NSMutableDictionary *KBLocBaseKCQuery(void) {
}
}
// 4)
return self.supportedLanguageCodes.firstObject ?: @"en";
return self.supportedLanguageCodes.firstObject ?: KBLanguageCodeEnglish;
}
#pragma mark -