xcode6 Storyboard,文本,图片国际化

文本格式化参考:http://blog.csdn.net/aries4ever/article/details/8185405

本文由@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。

1
2
3
4
5
@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

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

上述函数为所有的控件赋值。被赋予的值将在屏幕中以非本地格式显示出来。然后添加如下函数作为ViewDidLoad函数的一部分。

1
2
3
4
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函数之后。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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函数来使用这些属性展示数值。

1
2
3
4
5
6
7
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

1
2
3
4
5
6
7
8
9
10
/* 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)中添加下边一行语句,

1
GOOD_MORNING= "Good Morning" ;

在Localizable.Strings (German)中添加下边一行语句,

1
GOOD_MORNING= "Guten Morgen" ;

现在添加相应的代码来使用Localizable.Strings文件中的值。

点击ViewController.swift,将

1
textLabel.text =  "Good Morning"

修改为:

1
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上下载源码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值