開發(fā)一款國際化的iOS App霍骄,則必須考慮支持多國家語言,如何實(shí)現(xiàn)呢淡溯?
第一读整、國際化——多國家語言;第二咱娶、本土化——數(shù)據(jù)米间、時(shí)間、貨幣格式等豺总。
一车伞、新建工程LSMultiLanguage
二、Main.storyboard設(shè)計(jì)界面
如上圖所示喻喳,默認(rèn)語言是中文另玖。為了國際化設(shè)計(jì),要求不同國家的用戶所見界面是適合當(dāng)?shù)匚幕ū就粱┍砺祝瑘D片表示用戶所在國家的不同谦去,商品名稱描述、數(shù)據(jù)格式蹦哼、金額幣種鳄哭、日期時(shí)間。
三纲熏、增加多語言妆丘。(中、英文)
1局劲、點(diǎn)擊工程名-->右側(cè)選中project名稱-->點(diǎn)擊左下角localizations下面的“+”勺拣,選擇語言chinese(簡體中文)
2.彈窗口中勾選main.storyboard和luanchscreen,該操作的目的是實(shí)現(xiàn)界面設(shè)計(jì)時(shí)(非程序運(yùn)行)相對固定的描述性文字的多語言鱼填,如“商品:”药有、“銷量:”,等等苹丸。
3.點(diǎn)擊finish完成后愤惰,點(diǎn)擊main.storyboard,Xcode右側(cè)的屬性監(jiān)視窗口即可看到增加了chinese語言,同時(shí)我們把english語言也勾選赘理。對launchscreen.xib執(zhí)行同樣操作宦言。
接下來,用main.storyboard界面舉例感憾,launchscreen.xib是類似操作蜡励。
三令花、設(shè)置界面標(biāo)簽描述文字的多語言
1.點(diǎn)擊main.storyboard下的main.strings(中文),
右側(cè)文件的內(nèi)容是xcode自動(dòng)生成的,“=”等號左側(cè)的是對應(yīng)界面元素的ID凉倚,右側(cè)是對應(yīng)的文本值兼都,我們只需要修改=右側(cè)內(nèi)容,這里我們只需要設(shè)計(jì)標(biāo)簽文本的中文稽寒,“商品”扮碧、“銷量”、“利潤”杏糙、“時(shí)間”慎王,其對應(yīng)的右側(cè)值稍后在代碼中動(dòng)態(tài)修改后顯示。為了簡單起見宏侍,可刪除該部分內(nèi)容赖淤,完成后如下圖所示:
2.點(diǎn)擊main.storyboard下的main.strings(english),設(shè)置標(biāo)簽文字的英文,并刪除多余部分谅河,如下圖所示:
3.標(biāo)簽文字多語言設(shè)置完成咱旱,我們看看界面效果,點(diǎn)擊main.storyboard-->右側(cè)點(diǎn)擊-->再點(diǎn)擊如下圖所示:
然后點(diǎn)擊視圖右下加的語言绷耍,切換成english吐限,在界面設(shè)計(jì)時(shí)(程序未運(yùn)行)即可看見多語言效果:如上圖
四、設(shè)計(jì)標(biāo)簽右側(cè)對應(yīng)值的多語言褂始,這個(gè)在程序運(yùn)行時(shí)動(dòng)態(tài)設(shè)置诸典。
1.界面上的值標(biāo)簽與viewcontroller代碼關(guān)聯(lián),即對象抽象定義
2.向工程中添加新文件——多語言字符串文件崎苗,并命名文件為Localizable.strings
3.設(shè)置Localizable.strings文件支持多語言中狐粱、英文,點(diǎn)擊該文件胆数,在xcode右側(cè)屬性監(jiān)視窗口脑奠,點(diǎn)擊localize...按鈕
同時(shí)勾選english和chinese,
4.分別在localizable.strings(chinese)和localizable.strings(english)文件中設(shè)置商品值標(biāo)簽“蘋果手機(jī)”的多語言文本:key=value
5.在viewcontroller代碼文件中幅慌,視圖加載完時(shí)設(shè)置商品名稱,使用NSLocalizedString
方法
lab_Product.text = NSLocalizedString("PRODUCT_NAME", comment: "商品名稱")
6.設(shè)置數(shù)據(jù)轰豆,貨幣胰伍,日期時(shí)間格式本土化,不同地區(qū)數(shù)字格式不同酸休,幣種不同骂租,日期時(shí)間格式不一樣。我們分別自定義數(shù)字格式器斑司、貨幣格式器和日期時(shí)間格式器:
// 數(shù)字格式
var numberFormatter:NumberFormatter{
let formatter=NumberFormatter()
formatter.numberStyle=NumberFormatter.Style.decimal
return formatter
}
// 貨幣格式
var currencyFormatter:NumberFormatter{
let formatter=NumberFormatter()
formatter.numberStyle=NumberFormatter.Style.currency
return formatter
}
// 日期時(shí)間格式
var dateFormatter:DateFormatter{
let formatter=DateFormatter()
formatter.dateStyle=DateFormatter.Style.medium
formatter.timeStyle=DateFormatter.Style.medium
return formatter
}
7.在viewcontroller代碼文件中
viewDidLoad()方法體內(nèi)給相應(yīng)的標(biāo)簽賦值,代碼如下:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
lab_Product.text = NSLocalizedString("PRODUCT_NAME", comment: "商品名稱")
lab_Sales.text=numberFormatter.string(from: 99999);
//利潤
lab_Profit.text=currencyFormatter.string(from: 2347898)
//日期
lab_DateTime.text=dateFormatter.string(from: NSDate() as Date)
}
8.設(shè)置模擬器語言為英文渗饮,運(yùn)行后界面顯示如下:
![803E1119-6F2F-4371-B56F-9C71EEED8ABC.png](http://upload
![Uploading BA8DFB72-08CD-4A86-8AC2-1F353A512B7F_778214.png . . .]images.jianshu.io/upload_images/1830761-2545448ed53015d2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
設(shè)置模擬器語言為中文,運(yùn)行后界面顯示如下:
五、設(shè)置圖片適應(yīng)多語言互站。
不同語言時(shí)私蕾,圖片需相應(yīng)顯示不同圖片。
點(diǎn)擊工程目錄中的圖片1.jpg文件胡桃,再在右側(cè)屬性監(jiān)視窗口點(diǎn)擊localiza...同時(shí)勾選english/chinese踩叭,完成后,如下圖所示:
在磁盤finder中打開flag圖片所在的目錄翠胰,打開en.lproj目錄和zh-Hans.lproj目錄容贝,可見同時(shí)存在相同的flag圖片,
此時(shí)用相同命名的圖片替換en.lproj目錄中的同名圖片文件(已存在的一張圖片1.jpg)之景。
這時(shí)項(xiàng)目中已經(jīng)變了圖片斤富。