iOS -國際化

之前公司的app可能要在島國和東南亞地區使用,所以最合理的方法就是--國際化。

寫這篇文章也是為一個妹子寫的(咦~~要是漢子我才不寫),她在xib那一塊的國際化有些不太了解,正好其他童鞋也可以學習下。難度還是不大的,挺簡單的。

文本分三部分開始講國際化:字符串國際化(包括app名稱)、圖片國際化、sb xib國際化。(有其他需要補充請提示我,隨時補充)

先從字符串開始吧:
1:字符串國際化:
打開你的工程,選中project->Info->Localizations,然后點擊”+”,添加需要國際化/本地化的語言,如下圖箭頭位置:


Paste_Image.png

添加完你想要的語言之后,會顯示如下提示框:

Paste_Image.png

注意: “zh-Hans”和“zh-Hant”是簡體中文和繁體中文的縮寫,不要混淆了

(1)選擇完語言之后就是國際化字符串,先從app名稱開始:
選中Info.plist,按下鍵盤上的command + N,選擇Strings File(iOS->Resource->Strings File)

Paste_Image.png

選擇之后就是命名,注意:文件名字命名為InfoPlist,且必須是這個名字
之后你會發現工程中會多出新建的文件:

Paste_Image.png

之后需要做的是選中InfoPlist.strings,在xcode右側點擊


Paste_Image.png

這個按鈕。
會彈出一個對話框,展開對話框列表,發現下拉列表所展示的語言正是我們在上面配置的需要國際化的語言,選擇我們需要本地化的語言,然后點擊Localize按鈕:

Paste_Image.png

隨后右側會出現好多你添加的語言:


Paste_Image.png

你每個勾選上就可以了。隨后去剛剛穿件的pilist就能看到勾選上的語言:


Paste_Image.png

簡單闡述下原理:程序啟動時,會根據操作系統設置的語言,自動加載InfoPlist.strings文件下對應的語言文件,然后顯示應用程序的名字。
接下來,我們分別用不同的語言給InfoPlist.strings下的文件設置對應的名字。
在不通語言中配置不通的app名字:各個語言都隨便起一個名字,拿英語版舉例,就不一一配置了。

CFBundleDisplayName = "";是顯示不通的名字


Paste_Image.png

之后更改你的手機語言,運行一下demo就能看到不用的app名稱了。
以上app名稱國際化就完成了,總結一下:
1.在Project的設置中通過點擊”+”添加需要本地化的語言。
2.然后在Xcode右側的File inspection中點擊Localize,選中需要本地化App名稱的語言。
3.最后在每個語言對應的文件中以key = value(CFBundleDisplayName = “App名稱”;);的形式設置App的名稱。

(2)國際化字符串:
和應用名稱本地化一樣,首先需要command + N,選擇iOS -> Resource -> Strings File,需要注意的是,字符串國際化的plist文件名必須是:Localizable
文件創建成功,查看Xcode左側導航列表,發現多了一個名為Localizable.strings的文件,同樣選中Localizable.strings文件,在Xcode的File inspection中點擊Localize

Paste_Image.png

選擇需要國際化的語言:
Paste_Image.png

同樣在每個語言都勾選上,之后左側自動出現如下:
Paste_Image.png

依舊是以key-value的形式去寫:
Paste_Image.png

Paste_Image.png

每種語言都寫上適當的國際化語言,寫完之后,我們要用到NSLocalizedString(key, comment)這個宏,根據Key獲取對應的字符串,然后賦值給代碼中的字符串。
在需要國際化字符串的地方這樣寫:


Paste_Image.png

運行之后,btn的名字就會隨著系統的語言而改變。
細心的同學可以發現,我沒有給English語言適配,原因如下:系統根據某個key去獲取對應的字符串時,如果沒有找到,那么就會以key作為value返回。
這樣,字符串的國際化適配就做完了,不過如果真的適配到工程里,工作量太大了,我們項目都做的差不多了,老板才告知要適配多語言,之后又苦逼的去國際化。中文太多了,雖然沒有技術含量,但一整天的適配,累死了。

(3)突然想到另外一點,就是如果多人共同開發情況下,國際化字符串的方法法:

項目開發中,獨立開發的還是少數。經常會有多人開發的情況,這種情況,如果多人同時操作本地化文件,極有可能會存在沖突。也就是說,我們不希望對方操作我們的本地化文件。但是上面介紹的代碼中字符串的本地化是使用的是默認的文件名”Localizable”,因為啟動程序時,系統將根據語言加載相應的文件得到其對應的字符串文件,這個字符串可以通過系統將NSLocalizedString中的宏生成名為“Localizable.strings”的文件。so我們要用到NSLocalizedStringFromTable(, , )。
也就是說,如果你的strings文件名字不是Localizable而是自定義的話,如FuckBoss.strings,那么你就得使用NSLocalizedStringFromTable這個宏來讀取本地化字符串。
三個參數:1.國際化的字符串 2.你創建的FuckBoss文件的名稱 3.填nil就ok了


Paste_Image.png

這種做法,同樣能達到國際化的效果,并且別人還不會修改你的代碼。

(2)圖片的國際化
下面開始講講圖片的國際化方法:
1.第一種方式是最簡單的,就是根據之前字符串key-value方式儲存照片名稱


Paste_Image.png

2.第二種方法
將圖片拖入工程中,例如“music@2x.png”,然后選中music@2x.png,展開Xcode右側的file Inspection,點擊Localize


Paste_Image.png

然后,右擊music@2x.png->show in Finder,我們發現在en.Iproj文件中多了一個名為music@2x.png的圖片
Paste_Image.png

當然,zh-Hans.Iproj文件夾下并沒有圖片,因此你需要重復上一步的步驟,只不過這次選擇語言的時候選擇“中文”就ok了
Paste_Image.png

這樣圖片就添加進去了,相同的步驟,把所有需要國際化的圖片,按照這個方法,添加進去就行了,之后去手機系統里切換不同語言,運行xcode。

(3)sb、xib國際化方法:
首先點擊一下xib,之后去右側找Localize..

Paste_Image.png

這時候出來的彈窗,會想上面一面,下拉會有好多語言,這時候,你只需選擇“Base”
Paste_Image.png

下一步,之后繼續去xcode右側:
Paste_Image.png

會出現未勾選的語言,這時候全部勾選上。去xcode左側,會出現下圖:
Paste_Image.png

xib能夠點開,會出現不同語種的,隨便點擊一個(英語為例):
Paste_Image.png

紅框的地方修改成你想表達的英語,這個key-value頁面里,基本涵蓋了xib上所有的屬性,你只需去修改就可以了。
同理,再去設置其他語言的內容,之后去手機系統里切換不同語言,運行xcode。

熟悉一邊之后就會覺得挺簡單的,沒多大難度。
煩人的地方就在于你版本中的中文,用NSLocalizedString(key, comment)這個宏,全部改為國際化模式,中文太多,手就廢了。

以上總結國際化,哪里有錯誤,還請童鞋指出。

溫馨提示:妹子,祝你好運。等我北京,記得帶我去次好次噠。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容