我们造不出巴别塔,却可以通过本地化让不同语言环境的人舒坦地用上我们的 App。
但提起本地化,开发者们最直观的感受一定是一堆细碎繁琐的本地化文件字符串文件,以及永远也想不起来的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"
在开发的时候,代码里充满了类似不直观的代码。降低了我们的可读性。
titleLabel.text = NSLocalizedString(@"zelda.dish.backed.cocoanut", nil);
另外,如果开发者一不小心漏掉了某个翻译,界面上就会直接显示你定义的 key。
那么我们能不能...
- 减少一些 Strings 文件维护的工作量
- 代码可读性更高一些,不用全局搜索就可以知道某个 Label 将会显示什么内容
- 忘记翻译了不至于对用户显示“乱码”
答案是肯定的。
使用本地语言作为 Key 就可以解决这三个问题。例如「确定」按钮,我们写代码的时候可以这么写:
titleLabel.text = NSLocalizedString("确定", comment: "");
同时,在目标语言(例如英语)资源文件中添加:
"确定" = "Comfirm";
这样便一次性解决了上述的所有问题。
唯一的一点小遗憾是 NSLocalizedString 宏定义的第二个参数在 99% 的情况下都是空字符,在代码上是一个噪音。我们可以通过为 String 添加一个 extension 来解决它。
extension String {
var ps_localized: String {
get {
return NSLocalizedString(self, comment: "")
}
}
}
愉快地使用新的本地化方式 Coding 吧!