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)切換語言了,踩過了不少坑.