开发一款国际化的iOS App,则必须考虑支持多国家语言,如何实现呢?
第一、国际化——多国家语言;第二、本土化——数据、时间、货币格式等。
一、新建工程LSMultiLanguage
二、Main.storyboard设计界面
如上图所示,默认语言是中文。为了国际化设计,要求不同国家的用户所见界面是适合当地文化(本土化),图片表示用户所在国家的不同,商品名称描述、数据格式、金额币种、日期时间。
三、增加多语言。(中、英文)
1、点击工程名-->右侧选中project名称-->点击左下角localizations下面的“+”,选择语言chinese(简体中文)
2.弹窗口中勾选main.storyboard和luanchscreen,该操作的目的是实现界面设计时(非程序运行)相对固定的描述性文字的多语言,如“商品:”、“销量:”,等等。
3.点击finish完成后,点击main.storyboard,Xcode右侧的属性监视窗口即可看到增加了chinese语言,同时我们把english语言也勾选。对launchscreen.xib执行同样操作。
接下来,用main.storyboard界面举例,launchscreen.xib是类似操作。
三、设置界面标签描述文字的多语言
1.点击main.storyboard下的main.strings(中文),
右侧文件的内容是xcode自动生成的,“=”等号左侧的是对应界面元素的ID,右侧是对应的文本值,我们只需要修改=右侧内容,这里我们只需要设计标签文本的中文,“商品”、“销量”、“利润”、“时间”,其对应的右侧值稍后在代码中动态修改后显示。为了简单起见,可删除该部分内容,完成后如下图所示:
2.点击main.storyboard下的main.strings(english),设置标签文字的英文,并删除多余部分,如下图所示:
3.标签文字多语言设置完成,我们看看界面效果,点击main.storyboard-->右侧点击-->再点击如下图所示:
然后点击视图右下加的语言,切换成english,在界面设计时(程序未运行)即可看见多语言效果:如上图
四、设计标签右侧对应值的多语言,这个在程序运行时动态设置。
1.界面上的值标签与viewcontroller代码关联,即对象抽象定义
2.向工程中添加新文件——多语言字符串文件,并命名文件为Localizable.strings
3.设置Localizable.strings文件支持多语言中、英文,点击该文件,在xcode右侧属性监视窗口,点击localize...按钮
同时勾选english和chinese,
4.分别在localizable.strings(chinese)和localizable.strings(english)文件中设置商品值标签“苹果手机”的多语言文本:key=value
5.在viewcontroller代码文件中,视图加载完时设置商品名称,使用NSLocalizedString
方法
lab_Product.text = NSLocalizedString("PRODUCT_NAME", comment: "商品名称")
6.设置数据,货币,日期时间格式本土化,不同地区数字格式不同,币种不同,日期时间格式不一样。我们分别自定义数字格式器、货币格式器和日期时间格式器:
// 数字格式
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
}
// 日期时间格式
var dateFormatter:DateFormatter{
let formatter=DateFormatter()
formatter.dateStyle=DateFormatter.Style.medium
formatter.timeStyle=DateFormatter.Style.medium
return formatter
}
7.在viewcontroller代码文件中
viewDidLoad()方法体内给相应的标签赋值,代码如下:
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.设置模拟器语言为英文,运行后界面显示如下:
![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)
设置模拟器语言为中文,运行后界面显示如下:
五、设置图片适应多语言。
不同语言时,图片需相应显示不同图片。
点击工程目录中的图片1.jpg文件,再在右侧属性监视窗口点击localiza...同时勾选english/chinese,完成后,如下图所示:
在磁盘finder中打开flag图片所在的目录,打开en.lproj目录和zh-Hans.lproj目录,可见同时存在相同的flag图片,
此时用相同命名的图片替换en.lproj目录中的同名图片文件(已存在的一张图片1.jpg)。
这时项目中已经变了图片。