1. 程式人生 > >3分鐘實現iOS語言本地化/國際化(圖文詳解)

3分鐘實現iOS語言本地化/國際化(圖文詳解)

返回 sch 信息 con ren obj end xib standard

  • 前言
    • 語言本地化,又叫做語言國際化。
    • 是指根據用戶操作系統的語言設置,自動將應用程序的語言設置為和用戶操作系統語言一致的語言。
    • 往往一些應用程序需要提供給多個國家的人群使用,或者一個國家有多種語言,這就要求應用程序所展示的文字、圖片等信息,能夠讓講不同語言的用戶讀懂、看懂。
    • 進而提出為同一個應用程序適配多種語言,也即是國際化。
    • 語言國際化之所以又叫做語言本地化,這是站在每個用戶的角度而言的,是指能夠讓用戶本地、本土人群能夠看懂的語言信息,顧名思義,語言本地化。其實語言本地化 == 語言國際化!

1、前期準備配置需要國際化的語言

  • 配置需要國際化的語言,這也是國際化之前的準備工作,無論我們是國際化App名稱、代碼中的字符串、圖片、還是storyboard和xib,都需要進行這一步的準備工作(一個項目中需要且僅需要配置一次)。
  • 選中project->Info->Localizations,然後點擊"+",添加需要國際化/本地化的語言,如下圖(默認需要勾選Use Base Internationalization):
    技術分享圖片
  • 此處以添加法語為例,如下圖:
    技術分享圖片
  • 彈出如下對話框,直接點擊finish,如下圖:
    技術分享圖片
  • 同理,添加簡體中文、繁體中文、韓語,最終結果如下圖:
    技術分享圖片
  • 備註: “zh-Hans”和“zh-Hant”是簡體中文和繁體中文的縮寫。這是標準的縮寫。H可大寫也可小寫。"en"是英語的縮寫。ko是韓語的縮寫,fr是法語的縮寫。其他語言請百度各國語言縮寫即可查詢。

2、各種國際化

  • (一)應用名稱本地化/國際化

  • (二)代碼中字符串的本地化

  • (三)多人開發情況下的字符串本地化

  • (四)圖片本地化

3、查看/切換本地語言

  • 原理:應用啟動時,首先會讀取NSUserDefaults中的key為AppleLanguages對應的value,該value是一個String數組,也就是說,我們訪問這個名為AppleLanguages的key可以返回一個string數組,該數組存儲著APP支持的語言列表,數組的第一項為APP當前默認的語言。
   #import "ViewController.h"
    
   @interface ViewController ()
    
   @end
    
   @implementation ViewController
    
   - (void)viewDidLoad {
       [super viewDidLoad];
    
       NSArray *languages = [[NSUserDefaults standardUserDefaults] valueForKey:@"AppleLanguages"];
       NSString *currentLanguage = languages.firstObject;
       NSLog(@"模擬器當前語言:%@",currentLanguage);
   }
   @end
  • 控制臺打印結果:
  • 技術分享圖片

  • 同理,既然我們可以通過AppleLanguages這個key從NSUserDefaults中取出語言數組,那麽我們也可以給AppleLanguages這個key賦值來達到切換本地語言的效果,從此以後,我們就無需頻繁的去模擬器的設置->通用->語言與地區 中切換語言。
    #import "ViewController.h"
     
    @interface ViewController ()
     
    @end
     
    @implementation ViewController
     
    - (void)viewDidLoad {
        [super viewDidLoad];
     
        // 切換語言前
        NSArray *langArr1 = [[NSUserDefaults standardUserDefaults] valueForKey:@"AppleLanguages"];
        NSString *language1 = langArr1.firstObject;
        NSLog(@"模擬器語言切換之前:%@",language1);
     
        // 切換語言
        NSArray *lans = @[@"en"];
        [[NSUserDefaults standardUserDefaults] setObject:lans forKey:@"AppleLanguages"];
     
        // 切換語言後
        NSArray *langArr2 = [[NSUserDefaults standardUserDefaults] valueForKey:@"AppleLanguages"];
        NSString *language2 = langArr2.firstObject;
        NSLog(@"模擬器語言切換之後:%@",language2);
    }
    @end
  • 技術分享圖片
  • 回想一下,我在上面的技巧一節中提過:切換語言無需在模擬器中設置,只需要在Xcode中進行如下設置: Edit->Scheme->Run->Arguments Passed On Launch ->-AppleLanguages (語言代碼)。其實本質上就是給NSUserDefaults中名為AppleLanguages的key賦值。

3分鐘實現iOS語言本地化/國際化(圖文詳解)