前要:iOS多語言開發,可以分為兩種

  1. 系統設定,通過在手機設定中切換語言,進而改變app中語言;
  2. app中手動切換,使用者在app中,手動選擇語言,進行切換。

一.新增需要的語言

不管使用哪種方法,都需要先新增語言,這一點是相同的。

  1. 在專案的project中新增語言

    新增完成後是這樣的

  2. 建立 Localizable.strings 檔案

    檔名是 Localizable ,也可以更改其它名,後面會講到

上面都完成後,專案是這樣的

在每個語言的.string檔案中,把專案中的所有需顯示的文字,按照key-value 的形式放進去。

至此,所有的前置工作都完成了。

二. 程式碼部分

1.使用系統設定切換語言

使用系統設定切換語言,比較簡單,直接上程式碼:

  1. 1 NSArray *array = @[@"中文",@"英文",@"法語",@"韓語"];
  2. 2 for (int i=0; i<4; i++) {
  3. 3 UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
  4. 4 btn.frame = CGRectMake(100, 200+70*i, 200, 40);
  5. 5 btn.backgroundColor = [UIColor orangeColor];
  6. 6
  7. 7 //第一種:使用系統設定語言
  8. 8 [btn setTitle:NSLocalizedString(array[i], nil) forState:UIControlStateNormal];
  9. 9
  10. 10 [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
  11. 11 [btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
  12. 12 btn.tag = i+10;
  13. 13 [self.view addSubview:btn];
  14. 14 }

直接使用 NSLocalizedString(key, comment)方法,“key”就是Localizable.strings檔案中的我們設定的key, “comment”寫niu即可

如此,只要在手機  設定-通用-語言與地區  中,切換語言,再開啟app,app中文字就會切換成對應的語言。

2.app中手動切換語言

  1. - (void)viewDidLoad {
  2. [super viewDidLoad];
  3.  
  4. NSArray *array = @[@"中文",@"英文",@"法語",@"韓語"];
  5. for (int i=0; i<4; i++) {
  6. UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
  7. btn.frame = CGRectMake(100, 200+70*i, 200, 40);
  8. btn.backgroundColor = [UIColor orangeColor];
  9.  
  10. //第一種:使用系統設定語言
  11. //[btn setTitle:NSLocalizedString(array[i], nil) forState:UIControlStateNormal];
  12.  
  13. //第二種,app中手動選擇語言
  14. [btn setTitle:KLanguage(array[i]) forState:UIControlStateNormal];
  15.  
  16. [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
  17. [btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
  18. btn.tag = i+10;
  19. [self.view addSubview:btn];
  20. }
  21.  
  22. }
  23.  
  24. -(void)btnClick:(UIButton *)btn{
  25.  
  26. NSInteger tag = btn.tag-10;
  27. if (tag==0) {
  28. [[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:@"appLanguage"];
  29. }else if(tag==1){
  30. [[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:@"appLanguage"];
  31. }else if (tag==2){
  32. [[NSUserDefaults standardUserDefaults] setObject:@"fr" forKey:@"appLanguage"];
  33. }else{
  34. [[NSUserDefaults standardUserDefaults] setObject:@"ko" forKey:@"appLanguage"];
  35. }
  36. [[NSUserDefaults standardUserDefaults]synchronize];
  37.  
  38. UIWindow *window = [UIApplication sharedApplication].delegate.window;
  39. [UIView animateWithDuration:0.4f animations:^{
  40. CGAffineTransform curent = window.transform;
  41. CGAffineTransform scale = CGAffineTransformScale(curent, 0.0001,0.0001);
  42. [window setTransform:scale];
  43. } completion:^(BOOL finished) {
  44. exit(0);
  45. }];
  46.  
  47. }

每次選擇語言後,儲存到本地

這裡用了一個巨集:

  1. #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,使用系統預設的語言:

  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  2. //首次進入app,設定語言。自己根據實際情況,設定剛進入app的預設語言
  3. NSString *currentLanguage = [[NSUserDefaults standardUserDefaults]objectForKey:@"appLanguage"];
  4. if (!currentLanguage) {
  5. //獲得當前語言
  6. NSArray *languages = [NSLocale preferredLanguages];
  7. NSString *language = [languages objectAtIndex:0];
  8. if([language hasPrefix:@"en"]){
  9. [[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:@"appLanguage"];
  10. }else if([language hasPrefix:@"zh-Hans"]){
  11. [[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:@"appLanguage"];
  12. }else{
  13. [[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:@"appLanguage"];
  14. }
  15. [[NSUserDefaults standardUserDefaults]synchronize];
  16. }
  17.  
  18. [self.window makeKeyAndVisible];
  19.  
  20. return YES;
  21. }

程式碼演示:

進入app:

點選英文,重新進入app:

點選韓語: