6

故事板

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

4

3 回答 3

2

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

于 2014-07-02T09:55:42.223 回答
1

属性类型需要是Localizable String,然后您将.strings使用以下属性在文件中对其进行翻译:

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

不幸的是,它似乎不适用于命名属性,而仅适用于上面的 long 属性。

(基于 Andrew 的回答:Localize a view within a storyboard using "User Defined Runtime Attributes"

于 2015-05-25T09:18:11.617 回答
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 和 storyboard 文件中轻松提取所有字符串:

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
于 2020-02-10T09:22:43.723 回答