iOS 國際化&本地化省力小技巧

咱們造不出巴別塔,卻能夠經過本地化讓不一樣語言環境的人舒坦地用上咱們的 App。swift

但提起本地化,開發者們最直觀的感覺必定是一堆細碎繁瑣的本地化文件字符串文件,以及永遠也想不起來的Keyui

// 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"
複製代碼

在開發的時候,代碼裏充滿了相似不直觀的代碼。下降了咱們的可讀性。spa

titleLabel.text = NSLocalizedString(@"zelda.dish.backed.cocoanut", nil);
複製代碼

另外,若是開發者一不當心漏掉了某個翻譯,界面上就會直接顯示你定義的 key。翻譯

那麼咱們能不能...code

  • 減小一些 Strings 文件維護的工做量
  • 代碼可讀性更高一些,不用全局搜索就能夠知道某個 Label 將會顯示什麼內容
  • 忘記翻譯了不至於對用戶顯示「亂碼」

答案是確定的。 使用本地語言做爲 Key 就能夠解決這三個問題。例如「肯定」按鈕,咱們寫代碼的時候能夠這麼寫:cdn

titleLabel.text = NSLocalizedString("肯定", comment: "");
複製代碼

同時,在目標語言(例如英語)資源文件中添加:blog

"肯定" = "Comfirm";
複製代碼

這樣便一次性解決了上述的全部問題。資源

惟一的一點小遺憾是 NSLocalizedString 宏定義的第二個參數在 99% 的狀況下都是空字符,在代碼上是一個噪音。咱們能夠經過爲 String 添加一個 extension 來解決它。開發

extension String {
    var ps_localized: String {
        get {
            return NSLocalizedString(self, comment: "")
        }
    }
}
複製代碼

愉快地使用新的本地化方式 Coding 吧!字符串

相關文章
相關標籤/搜索