我們造不出巴別塔担钮,卻可以通過本地化讓不同語言環(huán)境的人舒坦地用上我們的 App。
但提起本地化格仲,開發(fā)者們最直觀的感受一定是一堆細(xì)碎繁瑣的本地化文件字符串文件吱晒,以及永遠(yuǎn)也想不起來的Key
。
// Chinese Simplified
"zelda.btn.confirm" = "確定";
"zelda.btn.cancel" = "取消";
"zelda.dish.backed.cocoanut" = "烤椰子";
"zelda.dish.backed.mushroom.skewer" = "精力烤魚蘑菇串";
// English
"zelda.btn.confirm" = "Confirm";
"zelda.btn.cancel" = "Cancel";
"zelda.dish.backed.cocoanut" = "Baked Palm Fruit";
"zelda.dish.backed.mushroom.skewer" = "Energizing Fish and Mushroom Skewer"
在開發(fā)的時(shí)候联四,代碼里充滿了類似不直觀的代碼撑碴。降低了我們的可讀性。
titleLabel.text = NSLocalizedString(@"zelda.dish.backed.cocoanut", nil);
另外朝墩,如果開發(fā)者一不小心漏掉了某個(gè)翻譯醉拓,界面上就會直接顯示你定義的 key。
那么我們能不能...
- 減少一些 Strings 文件維護(hù)的工作量
- 代碼可讀性更高一些,不用全局搜索就可以知道某個(gè) Label 將會顯示什么內(nèi)容
- 忘記翻譯了不至于對用戶顯示“亂碼”
答案是肯定的亿卤。
使用本地語言作為 Key 就可以解決這三個(gè)問題愤兵。例如「確定」按鈕,我們寫代碼的時(shí)候可以這么寫:
titleLabel.text = NSLocalizedString("確定", comment: "");
同時(shí)排吴,在目標(biāo)語言(例如英語)資源文件中添加:
"確定" = "Comfirm";
這樣便一次性解決了上述的所有問題秆乳。
唯一的一點(diǎn)小遺憾是 NSLocalizedString 宏定義的第二個(gè)參數(shù)在 99% 的情況下都是空字符,在代碼上是一個(gè)噪音钻哩。我們可以通過為 String 添加一個(gè) extension 來解決它屹堰。
extension String {
var ps_localized: String {
get {
return NSLocalizedString(self, comment: "")
}
}
}
愉快地使用新的本地化方式 Coding 吧!