     }
 }
 
-extension UITextView {
-
-    @IBInspectable
-    public var localizationKey: String? {
-        get {
-            return objc_getAssociatedObject(self, &runtimeLocalizationKey) as? String
-        }
-        set {
-            objc_setAssociatedObject(self, &runtimeLocalizationKey, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)
-            guard let newValue = newValue, !newValue.isEmpty else { return }
-
-            if let text = localized(newValue) {
+extension UITextView: Localizable {
+
+    @IBInspectable
+    public var localizationKey: String? {
+        get {
+            return objc_getAssociatedObject(self, &runtimeLocalizationKey) as? String
+        }
+        set {
+            objc_setAssociatedObject(self, &runtimeLocalizationKey, newValue, .OBJC_ASSOCIATION_RETAIN)
+            guard let key = newValue, !key.isEmpty else { return }
+
+            if let text = localized(key) {
                 if let mutableAttributedText = attributedText?.mutableCopy() as? NSMutableAttributedString {
                     mutableAttributedText.mutableString.setString(text)
                     attributedText = mutableAttributedText as NSAttributedString

    }
}

extension UIBarButtonItem {

    @IBInspectable
    public var localizationKey: String? {
        get {
            return objc_getAssociatedObject(self, &runtimeLocalizationKey) as? String
        }
        set {
            objc_setAssociatedObject(self, &runtimeLocalizationKey, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)
            guard let newValue = newValue, !newValue.isEmpty else { return }
            title = localized(newValue) ?? newValue
        }
    }
}

    }
}

extension UISearchBar: Localizable {

    @IBInspectable
    public var localizationKey: String? {
        get {
            return objc_getAssociatedObject(self, &runtimeLocalizationKey) as? String
        }
        set {
            objc_setAssociatedObject(self, &runtimeLocalizationKey, newValue, .OBJC_ASSOCIATION_RETAIN)
            guard let key = newValue, !key.isEmpty else { return }

            let textKey = key + separator + SearchBarLocalizedProperty.text.description
            if let text = localized(textKey) {
                self.text = text
            }

            let placeholderKey = key + separator + SearchBarLocalizedProperty.placeholder.description
            if let placeholder = localized(placeholderKey) {
                self.placeholder = placeholder
            }

            let promptKey = key + separator + SearchBarLocalizedProperty.prompt.description
            if let prompt = localized(promptKey) {
                self.prompt = prompt
            }
