这次会议上有幸听到了来自Apple Xcode团队三位工程师(Trevor Cortez, Vivian Robison, Fredrik Stenshamn)的经验分享,着实印象深刻,为了开发适应全球化,高可用的,并且是为了开发普通终端用户使用的app而并非企业级产品,Xcode需要考虑并完善的工作需要包含如下两个部分。
默认情况下会设置为en_US,locale参数会影响到语言资源文件的加载、键盘输入与自动更正、排序分类、使用符号颜色和图像、使用的数字,日期,时间,货币,计量单位等。
关于数字日期的formatter,应该可以说是应有尽有了。
let distanceInMiles = Measurement(value: 5373, unit: UnitLength.miles)
let formatter = MeasurementFormatter()
formatter.string(from: distanceInMiles)
formatter.locale = Locale(identifier: "ar_SA")
formatter.string(from: distanceInMiles)
formatter.locale = Locale(identifier: "sv_SE")
formatter.string(from: distanceInMiles)
显示如下。
"5,373 mi"
" ٨٬٦٤٦٫٩٨٤ كم "
"8 646,984 km"
在处理字符方面,个人看来,也已经覆盖到了各种可能的细节,例如Bidi。
let scoreMessage = NSLocalizedString("%@ has the high score", comment: "Current winner title")
label.text = String.localizedStringWithFormat(scoreMessage, currentWinner)
当名字为阿拉伯语时,打印
اية has the highest score!
而并非
!has the highest score اية
一般情况下,我们大多会考虑英文的复数,俄文这样的“怪咖”会被弃之不顾。
if popularLanguages.count == 1 {
label.text = String.localizedStringWithFormat(NSLocalizedString("1 popular language", comment: "The list contains only one language"))
} else {
label.text = String.localizedStringWithFormat(NSLocalizedString("%d popular languages", comment: "The list contains more than one language"), popularLanguages.count)
}
label.text = String.localizedStringWithFormat(NSLocalizedString("%d popular language(s)”, comment: "The list contains more than one language"), popularLanguages.count)
label.text = String.localizedStringWithFormat(NSLocalizedString("%d popular language(s)”, comment: "The list contains more than one language"), popularLanguages.count)
而Xcode对于俄语这样的特殊情况,同样处理的游刃有余。
1 распространенный язык
2 распространенныK языка
...
5 распространенныK языков
在本地化方面,Xcode中static analysis部分着实让人欣慰。其实同样的功能我们在两年前也做过同样的尝试,虽然并未嵌入IDE,而是采取了scan的方式,但也算是殊途同归吧。
这样一来,所有琐碎又让人不得不花时间fix的hardcode问题,在开发时就会随风而去啦。
介绍了这许多,结局依然是一片唏嘘。因为我们必须认识到,Apple Xcode团队(其实MS也是同理)的经验也许只能用来鼓掌然后束之高阁了。因为对大部分国际化开发和测试从业者来说,我们并没有自己开发的底层OS,例如IOS,Windows;没有自己编写的语言,例如OC,Swift, C#;更没有专门为了自己产品而生的IDE,例如Xcode,VS Studio。失去了这套从内功心法到外在招式的盖世武功,我们更多的在运用少林长拳,武当的内力,最后使出了几招华山剑法,各中的别扭和掣肘,明知不完美甚至不正确但为了某项更重要的功能实现做出牺牲和让步,早已是家常便饭,没有一路走来的人群着实无法体会真切啊……