iOS語言國際化(本地化)

weixin_33890499發表於2018-02-28

Only in the dictionary, will success appear before work.
只有在字典裡,成功才出現在工作之前。

前言

年前公司談了一個專案,對方是臺灣的,談的很愉快。但是問題來了,App需要過國際化。老闆說,既然要做繁體的,那麼就把英文也一起做了吧。當時做完了就快放假了,也沒有心情寫,加上還沒有寫過有關國際化的文章,於是就有了這篇文章。

公司的專案寫的時候是純程式碼寫的,所以這篇文章主要說的是純程式碼的語言國際化,xib及storybroad略微涉及。言歸正傳,開擼!

一、選中藍色工程資料夾,在PROJECTinfo裡面的Localizations新增需要的國際化的語言,如圖1

2507179-e6c77bf60bcd2a5b.jpg
圖.1

二、國際化我們要做的有兩部分:應用名稱國際化和字串(App內的文字)國際化

2.1、應用名稱國際化

應用名稱本地化,是指同一個App的名稱,在不同的語言環境下(手機當前顯示的語言)顯示不同的名稱。比如,微信在簡體中文環境下App名稱顯示為微信,在英語環境下顯示為WeChat。下文就是應用名稱本地化。

2.1.1、選中Info.plist檔案,command + N,選擇Strings File

2507179-756c8e513d288b93.png
圖 2.1.1

2.1.2、檔案命名的時候必須是InfoPlist,必須是哦。

2507179-bcf0064487dfdaed.png
圖 2.1.2

建立完成之後會有一個檔案,如圖:

2507179-341527471ba1d90b.png
InfoPlist.strings

2.1.3、選中建立好的InfoPlist.strings檔案,開啟檔案檢查器,點選上面的Localize...,如圖:

2507179-5e6f1e5cd8cccf05.png
圖 2.1.3

2.1.4、點選之後會有一個彈出框,點選列表你會發現,裡面的有的語言都是之前(標題號為一)新增過的。

2507179-a978a35e5804c17a.png
點選Localize

2.1.5、選擇一種語言,點選確定(Localize)就會出現下圖,上面會有你開始新增過的所有語言,剩下的只要打鉤就行了。記得打鉤的時候點選一個稍微停頓一下再點第二個,具體為啥,你點快點你就知道。

2507179-6f448aad7616759d.png
圖 2.1.5

依次勾選之後,檢視左邊新建的檔案InfoPlist.strings,你會發現會多出三個子檔案,如圖:

2507179-e60248c30f9b1e5c.png
InfoPlist.strings子檔案

2.1.6、接下來就到了關鍵的時候了,在對應的檔案中進行應用名稱國際化,在進行國際化的時候會用到CFBundleDisplayName欄位,在使用該欄位的時候可以加上引號也可以不加

(1)在InfoPlist.strings(English)中新增如下程式碼:

//在手機語言是英文時顯示的名稱
CFBundleDisplayName = "App Name";

2507179-da77e5359787f5a5.png
英文

(2)在InfoPlist.strings(Chinese (Simplified))中新增如下程式碼:

//在手機語言是簡體中文時顯示的名稱
CFBundleDisplayName = "應用名稱";

2507179-155b4e6b9649c799.png
簡體中文

(3)在InfoPlist.strings(Chinese (Traditional))中新增如下程式碼:

//在手機語言是繁體中文時顯示的名稱
CFBundleDisplayName = "應用名稱";
2507179-7760e392fdee8fee.png
繁體中文

做完上面的話,設定手機不同的語言,你會發現應用的名稱就相應的改變了, 要是需要其他國語言,以此類推。

2.2、字串國際化

字串國際化就是App中的字串在不同語言環境顯示的不同狀態。舉個栗子,主頁在中文是主頁,在英文就是Home。字串國際化和應用名稱國際化基本一樣,但也有細微差別,就是新建的檔名稱不一樣,還有就是,在使用的時候會用到NSLocalizedString(key, comment)這個巨集,下面細說

2.2.1、和應用名稱本地化一樣,command + N新建檔案:

2507179-478b6a006b570a4a.png
新建檔案

檔案命名的時候一定要是Localizable.strings,一定要是哦。

2507179-8e44bf5f9c2f31f0.png
Localizable.strings

2.2.2、新建好之後,點選新建的Localizable.strings檔案,在右邊的檔案檢查器Localize...新增需要的語言:

2507179-75276ed7d2266fb9.png
點選Localize...

2.2.3、剩下的操作和2.1.4、2.1.5、2.1.6的操作是一樣的,最終是這樣子的:

2507179-82c231026233ef6e.png
操作完成後

2.2.4、字串國際化和應用名稱國際化寫法是一樣的,左邊是key,右邊是value。舉個button的栗子:

(1)在Localizable.strings(English)中新增如下程式碼:

//在手機語言是英文時顯示的名稱
"button" = "Button";
2507179-ee8d502a88dd72b7.png
英文

(2)在Localizable.strings(Chinese (Simplified))中新增如下程式碼:

//在手機語言是簡體中文時顯示的名稱
"button" = "按鈕";
2507179-44e4de4a022711ea.png
簡體中文

(3)在Localizable.strings(Chinese (Traditional))中新增如下程式碼:

//在手機語言是繁體中文時顯示的名稱
"button" = "按鈕";
2507179-d4ea7f86e48fad2d.png
繁體中文

2.2.5、萬事俱備,只欠東風,怎麼用呢?開始筆者就提到了要用NSLocalizedString(key, comment)這個巨集,它是Foundation框架自帶的,根據Key獲取對應的字串,然後賦值給程式碼中的字串。兩個引數。使用的時候第一個引數就填寫國際化等號左邊的,第二引數填寫nil即可。

例:給App中某個button設定title

[btn setTitle:NSLocalizedString(@"button", nil) forState:UIControlStateNormal];

上面一行程式碼就OK了,在設定手機不同語言的時候就會顯示自己設定的value值了。

後記

到這國際化基本就完成了, 以後有時間我會把xib和storyboard的國際化加上。有啥不對的地方歡迎指正,大家共同進步。

相關文章