【问题标题】:How to convert XLIFF to STRINGS file for localization?如何将 XLIFF 转换为 STRINGS 文件以进行本地化?
【发布时间】:2015-05-22 14:42:30
【问题描述】:

Xcode 现在以 XLIFF 格式导出本地化文件,这很棒。有时我仍然想处理老式的字符串文件,因为它们在早期版本的 Xcode 中很常见。 是否有转换工具可以从单个 XLIFF 文档中提取单独的字符串文件?所有信息都包含在类似XML的XLIFF文档中,所以应该有一个提取例程?!

感谢您的帮助!

【问题讨论】:

    标签: xcode string localization localizable.strings xliff


    【解决方案1】:

    由于 XLIFF 是一种 XML 格式,您可以使用 XSLT 将 XLIFF 转换为 .strings 格式:

    <xsl:output method="text"/>  
    <xsl:template match="//trans-unit">  
      /* <xsl:value-of select="note"></xsl:value-of> */  
      "<xsl:value-of select="@id"></xsl:value-of>" = "<xsl:value-of select="source"></xsl:value-of>"  
    </xsl:template>  
    

    这可能需要一些额外的微调,例如对于没有注释的 trans-unit 元素和多行字符串,但对于您的 XLIFF 来说可能已经足够了。

    【讨论】:

    • 您介意扩展您的答案吗?如何将 xslt 模板应用于 xliff?
    • 使用 xmlstarlet 并将 $XL 设置为 .xliff 路径... ``` $ xml sel -T -t -m "//_:trans-unit" -o " / " -v ":note" -o " */" -n -o "\"" -v ":source" -o "\" = \"" -v "_:目标" -o "\";" -n -n $XL ``` 这会将 *.xliff 中的所有内容以 .strings 格式 (plist) 放入 stdout,而不管它来自什么文件(Info.plist、Localizable.strings 等)。
    • 这将执行相同的操作,但添加一个注释以指示原始字符串来自哪个文件:$ xml sel -T -t -m "//_:trans-unit" -o "/* " -v "../../@original" -o " */" -n -o "/* " -v "_:note" -o " */" -n -o "\"" -v "_:source" -o "\" = \"" -v "_:target" -o "\";" -n -n $XL
    【解决方案2】:

    您可以使用ibtool 以 .strings 格式而不是 XLIFF 格式导出可本地化的文本。我不相信您可以直接进行 XLIFF -> .strings 转换,但您可以让 ibtool 从您的 .xib 或 .storyboard 文件生成 .strings 文件。

    【讨论】:

    • 我已经知道 ibtool,但是应该有一种方法可以将 XLIFF(从 Xcode 资源)导出到每个资源的字符串文件。还有其他人吗?
    【解决方案3】:

    翻译 XLIFF 后,您可以导入这些翻译。此时 XCode 应该在相关的 .lproj 目录中为您创建单独的 .strings 文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-08
      • 1970-01-01
      • 2011-10-29
      • 2011-11-23
      • 1970-01-01
      • 1970-01-01
      • 2012-03-09
      • 1970-01-01
      相关资源
      最近更新 更多