iOS 多語言版本的開發(fā)(一)
引言
多語言 & 本地化,隨你怎么叫,道理差不多;一個App 要想走出國門,只支持一種語言是不能夠的,也是不可能的,多元化世界已經融入我們的生活,對于一些應用,開發(fā)多語言版本,已經是不可避免的,特別是旅游等方面的應用;國內也有很多App 已經接入多語言,例如:支付寶、微信、收留我(嘻嘻,做下廣告)等;
開發(fā)多語言,一般有兩種情況
1、App還沒有開始寫,這個時候創(chuàng)建一個多語言版本,很是容易,然后再寫代碼的時候稍微留意下哪里需要保持多語言就行了;
2、App已經上線了,而且之前沒有任何的為開發(fā)多語言準備過,這時候Boss讓開發(fā)多語言版本,這下你就苦逼了,想想項目中長長短短的中文字符串,沒有上千也得上幾百了吧,在想想一個一個替換,哎呀媽呀,那么多,想想都想死了,在想想還容易出錯,哎呀媽呀,讓我死了算了;
別急,這次我就針對兩種情況都講解下;
項目剛開始啟動
1、新建一個項目(我就不多說了)
2、command + N 添加多語言文件,如下圖

3、添加多語言,如圖

選擇English 點擊Localize

到這里已經算是添加好了多語言文件,接下來就是添加多語言
之前的XCode(具體到哪一個版本之前,不清楚了,我使用的是XCode7),是可以在如下圖中直接點擊?號 ,添加多語言的

現(xiàn)在需要進入項目的Project中的Localizations 中進行添加,如圖

我只添加了中文繁體,簡體,以及英文,Demo使用的StoryBoard, 而添加多語言時,我沒有選擇為StoryBoard添加多語言版本的,畢竟是Demo??;但是不影響使用。

到這里多語言文件中會出現(xiàn)如上圖中的三個.strings 后綴的文件,這就是多語言對應的文件了,多語言添加的方式類似,字典 key=value 一一對應的關系,key 在三個.strings 中必須一致,而value 則分別對應不同的語言字體,即可;
4、多語言文件的使用
現(xiàn)分別在不同的語言文件中添加如下測試文本:
"showTxt"="this is test text";
"showTxt"="這是一個測試的文本";
"showTxt"="這是一個測試的文本";
說到使用,就要了解下NSLocalizedString是什么
#define NSLocalizedString(key, comment) \
[[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]
#define NSLocalizedStringFromTable(key, tbl, comment) \
[[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:(tbl)]
#define NSLocalizedStringFromTableInBundle(key, tbl, bundle, comment) \
[bundle localizedStringForKey:(key) value:@"" table:(tbl)]
#define NSLocalizedStringWithDefaultValue(key, tbl, bundle, val, comment) \
[bundle localizedStringForKey:(key) value:(val) table:(tbl)]
其實就是宏,而宏定義的又是在資源文件中尋找對應的資源文件;在這里有個坑點,當你使用第一種實現(xiàn)多語言本地化,意味著你的多語言文件名字必須是Localizable,否則你的多語言實現(xiàn),到最后顯示的卻只能是key;
第一種適合于,讓應用跟隨系統(tǒng)的語言版本進行切換,而用戶卻不能手動進行切換; 我們要實現(xiàn)的是既可以跟隨系統(tǒng),又可以用戶自己切換,就不能使用這一個了,那就要使用第二種NSLocalizedStringFromTable(key, tbl, comment)?tbl這個參數(shù),就是我們自己命名的多語言文件名稱;
因此我們暫且這樣使用(這樣直接使用,會跟隨系統(tǒng)語言):
NSLocalizedStringFromTable(@"showTxt", @"ASLocalized", nil);
參數(shù)說明: 第一個參數(shù),是多語言中的key, 第二個參數(shù),是多語言文件的名字,第三個是對key的注釋說明,一般為nil就可以了;
對于這樣使用NSLocalizedString("showTxt", nil),切記多語言文件名必須是Localizable, 這里我們就不可以使用這種了;
到這里,就可以實現(xiàn)簡單的跟隨系統(tǒng)語言的多語言版本了;
效果圖如下:

