前要:iOS多語言開發,可以分為兩種
- 系統設定,通過在手機設定中切換語言,進而改變app中語言;
- app中手動切換,使用者在app中,手動選擇語言,進行切換。
一.新增需要的語言
不管使用哪種方法,都需要先新增語言,這一點是相同的。
- 在專案的project中新增語言
新增完成後是這樣的
- 建立 Localizable.strings 檔案
檔名是 Localizable ,也可以更改其它名,後面會講到
上面都完成後,專案是這樣的
在每個語言的.string檔案中,把專案中的所有需顯示的文字,按照key-value 的形式放進去。
至此,所有的前置工作都完成了。
二. 程式碼部分
1.使用系統設定切換語言
使用系統設定切換語言,比較簡單,直接上程式碼:
1 NSArray *array = @[@"中文",@"英文",@"法語",@"韓語"];
2 for (int i=0; i<4; i++) {
3 UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
4 btn.frame = CGRectMake(100, 200+70*i, 200, 40);
5 btn.backgroundColor = [UIColor orangeColor];
6
7 //第一種:使用系統設定語言
8 [btn setTitle:NSLocalizedString(array[i], nil) forState:UIControlStateNormal];
9
10 [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
11 [btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
12 btn.tag = i+10;
13 [self.view addSubview:btn];
14 }
直接使用 NSLocalizedString(key, comment)方法,“key”就是Localizable.strings檔案中的我們設定的key, “comment”寫niu即可
如此,只要在手機 設定-通用-語言與地區 中,切換語言,再開啟app,app中文字就會切換成對應的語言。
2.app中手動切換語言
- (void)viewDidLoad {
[super viewDidLoad]; NSArray *array = @[@"中文",@"英文",@"法語",@"韓語"];
for (int i=0; i<4; i++) {
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(100, 200+70*i, 200, 40);
btn.backgroundColor = [UIColor orangeColor]; //第一種:使用系統設定語言
//[btn setTitle:NSLocalizedString(array[i], nil) forState:UIControlStateNormal]; //第二種,app中手動選擇語言
[btn setTitle:KLanguage(array[i]) forState:UIControlStateNormal]; [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
btn.tag = i+10;
[self.view addSubview:btn];
} } -(void)btnClick:(UIButton *)btn{ NSInteger tag = btn.tag-10;
if (tag==0) {
[[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:@"appLanguage"];
}else if(tag==1){
[[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:@"appLanguage"];
}else if (tag==2){
[[NSUserDefaults standardUserDefaults] setObject:@"fr" forKey:@"appLanguage"];
}else{
[[NSUserDefaults standardUserDefaults] setObject:@"ko" forKey:@"appLanguage"];
}
[[NSUserDefaults standardUserDefaults]synchronize]; UIWindow *window = [UIApplication sharedApplication].delegate.window;
[UIView animateWithDuration:0.4f animations:^{
CGAffineTransform curent = window.transform;
CGAffineTransform scale = CGAffineTransformScale(curent, 0.0001,0.0001);
[window setTransform:scale];
} completion:^(BOOL finished) {
exit(0);
}]; }
每次選擇語言後,儲存到本地
這裡用了一個巨集:
#define KLanguage(key) [[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"appLanguage"]] ofType:@"lproj"]] localizedStringForKey:key value:nil table:@"Localizable"]
"appLanguage":將選擇的語言儲存在本地,本地偏好設定儲存用的key,
"Localizable":這就是我們建立的Localizable.strings檔名。也可以用其它名字,只要與巨集裡的保持一致即可。
每種語言對應的字串:
首次進入app,使用系統預設的語言:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//首次進入app,設定語言。自己根據實際情況,設定剛進入app的預設語言
NSString *currentLanguage = [[NSUserDefaults standardUserDefaults]objectForKey:@"appLanguage"];
if (!currentLanguage) {
//獲得當前語言
NSArray *languages = [NSLocale preferredLanguages];
NSString *language = [languages objectAtIndex:0];
if([language hasPrefix:@"en"]){
[[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:@"appLanguage"];
}else if([language hasPrefix:@"zh-Hans"]){
[[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:@"appLanguage"];
}else{
[[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:@"appLanguage"];
}
[[NSUserDefaults standardUserDefaults]synchronize];
} [self.window makeKeyAndVisible]; return YES;
}
程式碼演示:
進入app:
點選英文,重新進入app:
點選韓語: