具有Interface Builder用户定义的运行时属性的本地化字符串

时间:2014-02-19 04:18:58

标签: ios ios7 interface-builder nslocalizedstring uiaccessibility

Storyboard

我目前正在尝试在故事板中创建本地化的accessibilityLabel(我试图避免以编程方式进行)。似乎每当我使用Localized String选项时,accessibilityLabels最终都被设置为我提供的本地化字符串键而不是字符串本身。有没有人有这个问题的解决方案?任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

我猜您希望从Localizable.strings中获取本地化字符串。 "本地化字符串"类型不以这种方式工作,它只是一个标记,表示当您使用基本本地化时,用户定义的运行时属性的值将参与本地化过程。请查看https://stackoverflow.com/a/24527990/2876231以获得更长的解释。

答案 1 :(得分:1)

属性类型必须为Localizable String,然后您使用以下属性在.strings文件中对其进行翻译:

"KLc-fp-ZVK.ibExternalUserDefinedRuntimeAttributesLocalizableStrings[0]" = "¡Hola!";

不幸的是,它似乎不适用于命名属性,只能使用上面的long属性。

(根据安德鲁的回答:Localize a view within a storyboard using "User Defined Runtime Attributes"

答案 2 :(得分:0)

我通过使用代码对属性进行本地化的简单解决方案对属性进行了自定义:

private struct AssociatedKeys {
    static var someTagKey = "someTag"
}

@IBInspectable var someTag: String? {
    get {
       return NSLocalizedString(
            objc_getAssociatedObject(self, &AssociatedKeys.someTagsKey) as? String ?? "", comment: "")
    }
    set {
        if let newValue = newValue {
            objc_setAssociatedObject(
                self,
                &AssociatedKeys.someTagsKey,
                newValue as NSString?,
                objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC
            )
        }
    }
}

然后,您可以使用egrep轻松地从xib和情节提要文件中提取所有字符串:

egrep -ohr --include="*.xib" --include="*.storyboard" '<userDefinedRuntimeAttribute type="string" keyPath="someTag" value="[^"]+"/>' . >> extracted-strings.txt

然后,通过以下sed消除字符串文件中的标签,然后您必须对字符串文件进行纯文本处理以准备进行xcode:

sed -i -e 's/^<userDefinedRuntimeAttribute type="string" keyPath="someTag" value=\("[^"]*"\)\/>/\1 = \1;/g' extracted-strings.txt