1. 程式人生 > >iOS 實現國際化

iOS 實現國際化

github倉庫地址:App國際化

前言

因為我看的書裡面提到國際化,而且我最近把手機上的語言更改成了英文,有很多App換成了英文名,比如微信。所以我開始學習國際化,雖然國內的App大多數很少需要國際化,但是目光不能短淺,還是要學習豐富自己。(日常雞湯句)

這裡不妨給大家展示一下我的手機介面,系統語言分別為英文和中文對比。


大家可以進行對比,是否這些App本身如此優秀,而在細節上也更加完美呢?

那你是否也想讓自己研發的App打上國際化的標籤呢?

快動動手指跟我一起做吧~

正文

1.支援語言一覽

在開始之前,我們需要了解,實際上,OC可能並不支援所有的國家和語言,所以我們要獲取其支援的國家和語言。也能獲取到當前的語言。
        //返回系統所支援的全部國家和語言的集合
        NSArray *locales = [NSLocale availableLocaleIdentifiers];
        //遍歷陣列的每個元素,一次獲取所支援的所有NSLocale
        for (int i = 0; i < locales.count; i++) {
            NSString *localeId = [locales objectAtIndex:i];
            NSLog(@"%@",localeId);
        }
        //獲取當前的Locale
        NSLocale *curLocale = [NSLocale currentLocale];
        NSLog(@"當前Locale:%@",curLocale.localeIdentifier);
其中,NSLocale還提供了ISOCountryCodes,ISOLanguageCodes兩個類方法獲取ISO標準支援的所有國家和語言程式碼。

2.國際化介面設計檔案

新建一個Single View Application。接下來為該應用增加簡體中文對應的本地資料夾,英文也會有對應的資料夾,這也是為什麼後面可以新增兩張相同名稱的圖片的原因,因為存放於不同的資料夾中。步驟如下。
點選+號出現很多語言。往下拉,會有個其他,點選其他會出現更多更詳細的語言及地區。
此處以簡體中文為例。選擇後出現此介面。File Types有兩個引數選擇上面這種條件會出現下圖的情況。
對,你想的沒有錯!兩個引數,一個是建立一箇中文版本的原檔案,徹底的國際化,一個是原檔案的strings檔案,不徹底的國際化。選擇Interface Builder Cocoa Touch Storyboard。表示系統要對整個介面設計檔案進行國際化——在不同的語言、國家環境下,分別使用不同的Storyboard檔案,這樣不同語言、國家的使用者看到的應用介面都不同,這是最徹底的國際化。選擇Localizable Strings。表示只對介面設計檔案上的字串內容進行國際化——在不同的語言、國家環境下使用的是相同的Storyboard檔案,這樣不同語言、國家的使用者看到的應用介面是相同的,只是介面上的文字內容不同而已。在兩個main.storyboard檔案上設定不同的背景顏色,切換系統語言會出現不同的介面。大家可以試一試。語言不同,看到的背景顏色也不同。如圖所示。

到此,我們實現了介面的國際化。

3.國際化App的BundleDisplayName(應用名)

首先我們需要建立一個InfoPlist.strings檔案命名為InfoPlist建立好了,我們就可以把它國際化成英語和中文兩個版本選擇中文,在localization勾選英文,就可以建立一個英文版本。點開Info.plist檔案,在空白處點選滑鼠右鍵,出現列表,選擇Show Raw Keys/Values,出現真正控制的key名。CFBundleDisplayName或者CFBundleName事實上是控制App名稱的key。這時候我們分別在InfoPlist.strings檔案中修改不同語言不同名稱,再切換系統語言就可以顯示不同的名稱。
到此,我們實現了應用名稱的國際化,我們也可以像微信一樣中文名微信英文名WeChat了~~~開心嗎?激動嗎?關我什麼事啊~

4.國際化圖片

國際化圖片是個很簡單的操作,我給大家演示一下~下面兩張圖片是我p的簡單文字圖,以展示效果,讀者可以儲存使用~們現在把第一張圖拖進專案中。
選擇Localize我們再把第二張英文圖拖進來,執行同樣的操作。這樣就可以存在兩張同名的圖片,因為他們存放在不同的資料夾裡。然後在Main.storyboard放一個UIImageView設定UIImage為上面圖片名稱,切換不同語言就可以看到不同圖片。相同介面,不同圖片,Storyboard以及程式碼同樣道理。
到此,我們實現了圖片的國際化。

5.國際化文字

國際化文字,這裡我們主要介紹的是相同介面,同一個Label不同語言顯示不同文字。這裡我們主要藉助於NSLocalizedString(NSString *key,NSString *comment)方法,該方法第一個引數key是國際化訊息的key,第二個引數comment是該訊息的註釋,這裡我們可以寫成nil。
    //通過NSLocalizedString()函式使用國際化訊息
    self.label.text = NSLocalizedString(@"locale", nil);
然後我們和前面建立InfoPlist.strings檔案步驟一樣,建立名為Localizable的strings檔案。如下圖設定key的值即可。
這樣Label在不同語言下顯示的則是不同的文字。到此,我們實現了文字的國際化。書上寫我們可以通過genstrings命令新增國際化訊息。我沒有實踐過,因為我還是喜歡程式碼解決問題。但是同大家分享一下。啟動終端視窗,然後使用cd命令進入iOS專案所在目錄,執行如下命令。genstrings * .m該命令是提取多有*.m檔案中通過NSLocalizedString()方法用過的國際化訊息key。並將這些key新增到資原始檔中,執行該命令就會生成一個Localizable.strings檔案,而且已經包含了你設定的所有key。但是要注意的是,執行這個命令每次生成的都是全新的檔案,因此如果開發者對Localizable檔案進行過修改,需要慎重使用genstrings命令,避免該命令覆蓋已有的資原始檔。將生成的檔案分別複製到不同的語言資料夾的子目錄下,還需要通過XCode的專案導航面板中“Add Files to專案名”的右鍵選單新增這兩個資原始檔。接下來將Localizable檔案改為如下形式。
   "key" = "value";
然後編譯,執行程式,就可以實現文字的國際化。

小結

成熟的iOS應用,面對的是全球各種主流語言、許多國家的使用者,這就需要iOS應用能提供國際化支援。所以掌握國際化的知識,開發出自適應全球各種主流語言,大量國家的應用的未來便是你的!嘻嘻嘻,加油~