【问题标题】:Localized String with Interface Builder User Defined Runtime Attributes具有 Interface Builder 用户定义的运行时属性的本地化字符串
【发布时间】:2014-02-19 04:18:58
【问题描述】:

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

【问题讨论】:

  • Localize a view within a storyboard using "User Defined Runtime Attributes" 的可能副本(结论是这是从 OS X 遗留下来的,iOS 不支持)。
  • 我真的希望有人能对这个问题有更深入的了解。我已经阅读了这个主题,我真的希望情况并非如此。
  • 请注意,您仍然可以像本地化任何其他资源一样本地化整个 Interface Builder 文件。
  • 我对 iOS 开发比较陌生,但是故事板文件是否被视为 IB 文件?
  • 啊,在这种情况下,您需要启用Use Base Internationalization,然后为每个本地化创建一个字符串文件。

标签: ios ios7 interface-builder nslocalizedstring uiaccessibility


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-15
        • 1970-01-01
        • 1970-01-01
        • 2014-09-19
        • 2016-12-11
        • 2012-07-31
        • 1970-01-01
        • 2014-03-28
        相关资源
        最近更新 更多