iOS多語(yǔ)言國(guó)際化

1、增加多語(yǔ)言環(huán)境


image.png

2、創(chuàng)建多語(yǔ)言文件


image.png

3、使用多語(yǔ)言文件添加多語(yǔ)言變量
image.png

image.png

4、使用多語(yǔ)言

   NSBundle *bundle = [NSBundle mainBundle];
    NSString *string = NSLocalizedStringFromTableInBundle(key, @"Localizable",bundle, nil);

對(duì)于有些app存在app內(nèi)語(yǔ)言切換功能,我們可以通過(guò)自定義獲取多語(yǔ)言配置來(lái)進(jìn)行實(shí)現(xiàn)。
我們創(chuàng)建一個(gè)單獨(dú)的多語(yǔ)言文件管理類來(lái)進(jìn)行統(tǒng)一管理。

//獲取本地語(yǔ)言
#define LocalizedString(key) [[LanguageManager sharedInstance] localizedStringForKey:key]

@interface LanguageManager : NSObject

+ (instancetype)sharedInstance;

- (void)setApplicationLanguageTo:(NSString *)languageCode;
- (NSString *)localizedStringForKey:(NSString *)key;

@end

實(shí)現(xiàn)對(duì)應(yīng)的方法

static NSString *const kUserSelectedLanguageKey = @"UserSelectedLanguage";
static LanguageManager *_sharedInstance = nil;

@implementation LanguageManager

+ (instancetype)sharedInstance {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _sharedInstance = [[self alloc] init];
    });
    return _sharedInstance;
}

- (NSString *)currentLanguage {
    NSString *userSelectedLanguage = [[NSUserDefaults standardUserDefaults] stringForKey:kUserSelectedLanguageKey];
    
    if (userSelectedLanguage) {
        return userSelectedLanguage;
    } else {
        NSArray<NSString *> *preferredLanguages = [[NSLocale preferredLanguages] copy];
        return [preferredLanguages firstObject];
    }
}

- (void)setApplicationLanguageTo:(NSString *)languageCode {
    [[NSUserDefaults standardUserDefaults] setObject:languageCode forKey:kUserSelectedLanguageKey];
    [[NSUserDefaults standardUserDefaults] synchronize];

    // 發(fā)送通知讓所有觀察者知道語(yǔ)言已更改
    [[NSNotificationCenter defaultCenter] postNotificationName:@"LanguageDidChangeNotification" object:nil];
}

- (NSBundle *)localizedBundle {
    NSString *language = [self currentLanguage];
    NSString *path = [[NSBundle mainBundle] pathForResource:language ofType:@"lproj"];
    if (path) {
        return [NSBundle bundleWithPath:path];
    } else {
        return [NSBundle mainBundle];
    }
}

- (NSString *)localizedStringForKey:(NSString *)key {
     NSBundle *bundle = [self localizedBundle];
    NSString *string = NSLocalizedStringFromTableInBundle(key, @"Localizable",bundle, nil);
    return string;
}

@end
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容