前要: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:

點擊韓語:

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/301199.html
標籤:其他
上一篇:iOS之多語言開發
