Xib StoryBoard中控件的國際化/本地化方案

給大家分享一個在xib中做國際化比較優(yōu)雅的實現(xiàn)方案。

要對xib中的控件做國際化,一般的實現(xiàn)是這樣的:找到Xib控件的ID,再把這個ID和文案作為key-value寫到我們的Localizable.strings(必須是這個名字)文件中去。控件ID在這里可以找到:


1562989972847.jpg

在Localizable.strings文件中的key-value是這樣寫的:

"qtT-Bt-mkE.text" = "國際化標簽測試";

毫無疑問,這樣的代碼可讀性、維護性實在是太差了,我們需要更好的方案。
那么,我們的目標就是:
可以自定義控件在Localizable.strings中的鍵值,再在Localizable.strings統(tǒng)一管理這些國際化的字符串。如下:

"testLabel_text" = "國際化標簽測試"
"testButton_text" = "國際化按鈕測試"

問題就很簡單了,用@IBInspectable和extension:
新建一個Localization.swift文件,文件中代碼如下:

import UIKit

//MARK: - String Extension
extension String {
    var localized: String {
        return NSLocalizedString(self, comment: "")
    }
}


////MARK: - Controls IBInspect extension
extension UILabel {
    @IBInspectable var LocalizeKey: String? {
        get { return nil}
        set(key) {
            self.text = key?.localized
        }
    }
}

extension UIButton {
    @IBInspectable var LocalizeKey: String? {
        get { return nil}
        set(key) {
            self.setTitle(key?.localized, for: .normal)
        }
    }
}

extension UINavigationItem {
    @IBInspectable var LocalizeKey: String? {
        get { return nil}
        set(key) {
            self.title = key?.localized
        }
    }
}

extension UIBarButtonItem {
    @IBInspectable var LocalizeKey: String? {
        get { return nil}
        set(key) {
            self.title = key?.localized
        }
    }
}

extension UITextField {
    @IBInspectable var LocalizeKey: String? {
        get { return nil}
        set(key) {
            self.placeholder = key?.localized
        }
    }
}

這時候,我們回到xib文件界面,在@IBInspectable生成的屬性中填入我們想要的key名:
1562992029433.jpg

再在Localizable.strings的Simplified文件中寫入

"testLabelKey" = "國際化標簽測試";

再在Localizable.strings的English文件中寫入

"testLabelKey" = "localize label test";

運行,切換語言:


Screen Shot 2019-07-13 at 12.40.38.png

大功告成!

本文demo下載:XibLocalization

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容