背景介绍
目前,软件一般以标准英文交互开发。然后针对不同国家和地区进行本地化处理。本地化一般包含以下几方面:
1、语言本地化
2、货币、时间和数字等描述形式本地化
这两个方面都涉及到很多内容。所以,在开发之初,就确定了本地化范围:
1、语言上只支持英文和简体中文
2、书写习惯上、只支持从左向右
3、对货币和时间进行本地化支持
storyboard文件本地化
先在项目属性的Info标签上的Localizations中添加需要支持的语言,然后在storyboard资源对应的Show the File Inspector面板的下边Localization中添加语言。最后编辑对应的strings文件就可以啦。
代码中字符串的本地化
新建一个strings文件,并用上述方法添加对应的语言。
扩展String类型,代码如下:
extension String {
func localized() ->String{
return NSLocalizedString(self, tableName:"Localizable", bundle:Bundle.main, value:"?", comment:"")
}
}
备注:tableName的值为新建strings文件的文件名
使用方式举例:
1、新建的Localizable.strings的文件
2、在对应的Localizable.strings(English)中添加一行 "TEST_ITEM" = "test";
3、在对应的Localizable.strings(Chinese,Simplified)中添加一行 "TEST_ITEM" = "测试";
4、在代码中使用"TEST_ITEM".localized()就可以了
备注:strings文件每行元素结尾有分号
数字和货币等本地化
使用类NumberFormatter和DateFormatter等,用法比较简单。
举一个NumberFormatter用法的例子,内购相关的本地化信息是在Apple的服务器上填写的,下边代码实现商品价格的本地化(主要是格式,服务上可以为不同地区定制金额):
extension SKProduct {
var regularPrice: String {
let formatter =NumberFormatter()
formatter.numberStyle= .currency
formatter.locale=self.priceLocale
return formatter.string(from:self.price) ??""
}
}
备注:DateFormatter的本地化只是表达格式的转化,并不会更改时区。