你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> Xcode 6和swift中應用程序的國際化和本地化

Xcode 6和swift中應用程序的國際化和本地化

編輯:IOS開發基礎

450.jpg

本文由@RepairmanJacob翻譯自Ramblings on Swift and iOS,原文:Internationalization and localization of Apps in Xcode 6 and Swift
當你希望應用程序無縫支持不同的語言和地區時,應用程序的國際化和本地化就顯得十分必要了。國際化是指為應用程序提供一個用來支持不同語言的框架的過程。而本地化則是使你的應用程序支持特定地區的過程,比如德國。

在本篇文章中,我們將對一個支持文本、數字、日期、貨幣以及圖片的應用程序進行英語和德語的本地化。我們將按照以下提示步驟實現:

  • 使用NSNumberFormatter和NSDateFormatter格式化數字、貨幣以及日期數值

  • Storyboard的國際化

  • 文本的國際化

  • 圖片的國際化

英語形式

001.jpg

德語形式

002.jpg

從github下載源碼。(鏈接)

首先,創建一個新的項目:File menu -> New -> Project

003.jpg

為項目選擇單視圖應用程序(Single View Application)模板

004.jpg

在接下來出現的窗口中輸入"Localisation Demo"作為項目名稱,並且選擇"Swift"作為程序語言,然後指定一個路徑並保存項目。

用戶界面設定---UILabels 和UIImageView

首先讓我們定位到Main.storyboard, 點擊默認的View Controller,從對象庫往Storyboard拖放9個標簽和1個ImageView。這些標簽用來顯示下方屏幕上的標題和值:

005.jpg

為UIControls聲明IBOutlets

在項目導航中點擊ViewController.swift,並且在類聲明之後添加以下IBOutlets。

@IBOutlet var textLabel: UILabel!
@IBOutlet var numberLabel: UILabel!
@IBOutlet var currencyLabel: UILabel!
@IBOutlet var dateLabel: UILabel!
@IBOutlet var imageView: UIImageView!

在Main.storyboard中,將標簽和圖像視圖與各自的outlet連接。

010.jpg

為控件賦值

在項目導航中點擊ViewController.swift,新建一個函數,並命名為populateValues

func populateValues() {
textLabel.text = "Good Morning"
numberLabel.text = "9999999.999"
currencyLabel.text = "50000"
dateLabel.text = "07/08/2014"
imageView.image = UIImage(named: "hello")
}

上述函數為所有的控件賦值。被賦予的值將在屏幕中以非本地格式顯示出來。然後添加如下函數作為ViewDidLoad函數的一部分。

override func viewDidLoad() {
super.viewDidLoad()
populateValues()
}

使用Add Files to "Localisation Demo",添加圖像hello.png到工程文件夾。

011.jpg

如果你現在編譯並且在iOS模擬器上運行該項目,你將會看到下圖中標簽和圖片都帶有各自的值。

012.jpg

現在,讓我們看看如何使用NSNumberFormatter 對數字和貨幣,NSDateFormatter對日期設置格式。

目前我們沒有看到任何數字、日期或者貨幣數值上應用了格式化。現在來看看如何使用NSNumberFormatter設置數字和貨幣字段,以及使用NSDateFormatter來設置日期字段。在ViewController.swift文件中,將以下屬性添加到populateValues函數之後。

var numberFormatter: NSNumberFormatter {
let formatter = NSNumberFormatter()
formatter.numberStyle = .DecimalStyle
return formatter
}
var currencyFormatter: NSNumberFormatter {
let formatter = NSNumberFormatter()
formatter.numberStyle = .CurrencyStyle
return formatter
}
var dateFormatter: NSDateFormatter {
let formatter = NSDateFormatter()
formatter.dateStyle = .MediumStyle
formatter.timeStyle = .MediumStyle
return formatter
}

在上述函數中,我們分別為創建了格式化程序實例,並設置了相應的風格,比如為日期和時間值設定了DecimalStyle, CurrencyStyle以及 MediumStyle。現在我們需要修改一下populateValues函數來使用這些屬性展示數值。

func populateValues() {
textLabel.text = "Good Morning"
numberLabel.text = numberFormatter.stringFromNumber(9999999.999)
currencyLabel.text = currencyFormatter.stringFromNumber(5000)
dateLabel.text = dateFormatter.stringFromDate(NSDate())
imageView.image = UIImage(named: "hello")
}

使用正確格式後,iOS模擬器將會使用默認的系統區域來展示數字、貨幣以及日期字段的值。

013.jpg

為Xcode項目添加另一種語言支持

為了支持德語,首先需要將這種語言添加到項目中,這一步可以通過使用可選的選項來作為項目目標的一部分來實現。選擇項目文件,然後是項目目標(Project target)。

014.jpg

我們注意到本地化的分區,然後點擊"+",從列表中選擇德語。

015.jpg

在如下圖所示的窗口中,選擇所列的默認文件並且點擊"Finish"。

016.jpg

現在,你應該可以在本地化選項中看到對德語的支持。

017.jpg

為Storyboard中的控件添加本地化

首先,讓我們看一下,如何為Main.storyboard中的標題控件添加另一種語言支持。

018.jpg

展開Main.storyboard,然後點擊Main.strings (German)。現在,加入與日期(Date)、貨幣(Currency)、數字(Number)和圖像(Image)同義的德語--Datum,W?hrung,Anzahl和 Bild。對於剩下的控件,本地化將會在代碼中執行。

019.jpg

/* Class = “IBUILabel”; text = “Date :”; ObjectID = “0sh-CK-26C”; */
“0sh-CK-26C.text” = “Datum :”;
/* Class = “IBUILabel”; text = “Number :”; ObjectID = “AeO-ot-XWj”; */
“AeO-ot-XWj.text” = “Anzahl :”;
/* Class = “IBUILabel”; text = “number”; ObjectID = “XDV-eF-gQk”; */
“XDV-eF-gQk.text” = “number”;
/* Class = “IBUILabel”; text = “Image :”; ObjectID = “bvG-x6-Tpx”; */
“bvG-x6-Tpx.text” = “Bild :”;
/* Class = “IBUILabel”; text = “Currency :”; ObjectID = “tVi-KF-Xgb”; */
“tVi-KF-Xgb.text” = “W?hrung :”;

在iOS模擬器中測試本地化的改變

當我們在Xcode的調試環境中將語言和地區設置為德語後,那些對Main.storyboard (German) 、NSNumberFormatter 和 NSDateFormatter的改動才會生效。點擊"Set the active scheme"選項,在列表中選擇"Edit Scheme"。

018.jpg

現在,讓我們來看調試環境(Debug Environment)下的"Options",為應用程序語言和地區分別選擇選擇德語(German)和德國(Germany)。

019.jpg

在iOS模擬器上運行我們的應用程序,在屏幕上將會顯示出德語,以及基於德國地區的數字、日期和貨幣的格式。

020.jpg

使用NSLocalizedString實現文本的國際化

"Good Morning" 必須用相應的德語來顯示,比如"Guten Morgen"。在項目中添加一個Strings類型的文件,並且命名為Localizable.strings。

027.jpg

在項目的導航器中選擇Localizable.Strings,在文件檢查器下點擊"Localize"按鈕。

028.jpg

然後在下拉列表中選擇"English",並且確保在文件檢查器下的本地化選項中標記German。

029.jpg

現在,你可以展開項目導航中的Localizable.Strings,並且看到分別用於英語和德語的兩個文件。

030.jpg

在Localizable.Strings (English)中添加下邊一行語句,

GOOD_MORNING="Good Morning";

在Localizable.Strings (German)中添加下邊一行語句,

GOOD_MORNING="Guten Morgen";

現在添加相應的代碼來使用Localizable.Strings文件中的值。

點擊ViewController.swift,將

textLabel.text = "Good Morning"

修改為:

textLabel.text = NSLocalizedString("GOOD_MORNING",comment:"Good Morning")

NSLocalizedString會根據提供的關鍵字在Localizable.Strings文件中查找對應的條目。在iOS模擬器中運行APP將會顯示與"Good Morning"同義的德語。

031.jpg

圖像的國際化

在以上所有截圖中,你可以看到圖像中的文本仍然是英語。所以,我們需要添加包含相應德語文本的圖像,並且做出修改來獲得基於應用程序語言的接入口。在項目導航中選擇hello.png,然後點擊文件檢查器的本地化按鈕,接下來,你需要選擇將文件本地化為英語和德語。

032.jpg

確保在文件檢查器的本地化選項中將英語和德語打鉤。

033.jpg

在Finder中打開項目文件夾,這裡應該包含了德語和英語兩個文件夾。

034.jpg

復制包含德語文本的hello.png到de.lproj文件夾,在iOS模擬器上將語言和地區設置為德國後重新生成,並且運行app。

從github上下載源碼。

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved