ios 應(yīng)用內(nèi)切換語言

1.首先添加需要支持的語言,默認(rèn)支持英文,再添加中文即可


image.png

2.創(chuàng)建文件


image.png

如果只需要跟隨系統(tǒng)語言切換,名字為Localizable,如果需要系統(tǒng)內(nèi)切換,建議更改前其他名字.我剛開始使用Localizable,有問題.更換后暫時未發(fā)現(xiàn)問題.這里命名為Language.string
image.png
image.png

創(chuàng)建完成后,再勾選另外的語言,base暫時沒發(fā)現(xiàn)有什么用


image.png
image.png

image.png

3,使用 我是使用單例管理語言 創(chuàng)建一個復(fù)制一下即可

//  FKChangeLanguageTool.h
//  unitTest
//
//  Created by 高飛林 on 2018/7/5.
//  Copyright ? 2018年 高飛林. All rights reserved.
//

#import <Foundation/Foundation.h>

#define kChinese @"zh-Hans"
#define kEnglish @"en"

@interface FKChangeLanguageTool : NSObject

@property (nonatomic, strong) NSBundle *languageBundle;

+ (instancetype)shareTool;
- (void)changeLangueWithKey:(NSString *)key;

@end

#import "FKChangeLanguageTool.h"
#import "AppDelegate.h"

@implementation FKChangeLanguageTool

+ (instancetype)shareTool {
    static FKChangeLanguageTool *tool = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        tool = [[FKChangeLanguageTool alloc] init];
        [tool resetBundleNeedReload:NO];
    });
    return tool;
}

- (void)changeLangueWithKey:(NSString *)key {

    [[NSUserDefaults standardUserDefaults] setObject:key forKey:@"appLanguage"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    [self resetBundleNeedReload:YES];
}

- (void)resetBundleNeedReload:(BOOL)reload {
    
    [NSThread sleepForTimeInterval:0.1];
    
    NSString *language = [[NSUserDefaults standardUserDefaults]objectForKey:@"appLanguage"];
    
    if (!language) {
        NSArray *languages = [NSLocale preferredLanguages];
        language = [languages objectAtIndex:0];
        
        if ([language hasPrefix:kChinese]) {
            //開頭匹配
            [[NSUserDefaults standardUserDefaults] setObject:kChinese forKey:@"appLanguage"];
            language = kChinese;
        }else{
            [[NSUserDefaults standardUserDefaults] setObject:kEnglish forKey:@"appLanguage"];
            language = kEnglish;
        }
        [[NSUserDefaults standardUserDefaults] synchronize];
    }
    self.languageBundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:language ofType:@"lproj"]];
    if (reload) {
//這是就是給window重新創(chuàng)建rootViewController,需要你們定義自己的方法
        AppDelegate *delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
        [delegate setRoot];
    }
}
@end

具體使用

//創(chuàng)建宏
#define Localized(key) NSLocalizedStringFromTableInBundle(key, @"Language", [FKChangeLanguageTool shareTool].languageBundle, nil)
//使用
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 100, 30)];
    label.text = Localized(@"關(guān)注");
    [self.view addSubview:label];
//切換中文
[[FKChangeLanguageTool shareTool] changeLangueWithKey:kChinese];
//切換英文
[[FKChangeLanguageTool shareTool] changeLangueWithKey:kEnglish];

這樣就可以實現(xiàn)app內(nèi)切換語言了,踩過了不少坑.

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

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

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