【问题标题】:Writing CDATA section with Okapi XLIFF 2.0 lib使用 Okapi XLIFF 2.0 lib 编写 CDATA 部分
【发布时间】:2022-12-10 09:58:39
【问题描述】:

我正在使用 okapi-lib-xliff2:1.44.0 创建一个 .xlf 文件。我想向某些元素添加 CDATA 部分。根据 XLIFF 2.0 文档,允许: http://docs.oasis-open.org/xliff/xliff-core/v2.0/xliff-core-v2.0.html#d0e7792

然而,在输出文件中,Okapi XLIFF 2.0 writer 转义了 CDATA 以及值中使用的所有内联代码。我找不到任何关于通过该库处理 CDATA 的文档,也找不到要传递给作者以允许并正确处理 CDATA 部分的特殊标志。到目前为止,我将不胜感激对该特定库的任何帮助,我不想切换到另一个选项。这是我到目前为止的代码快照。

try (XLIFFWriter writer = new XLIFFWriter()) {
      writer.setUseIndentation(true);
      writer.create(
          new File("cdata.xlf"),
          Locale.US.toString(),
          Locale.FRANCE.toString());

      StartFileData fileElementAttribute = new StartFileData(null);
      String originalFile = "with_cdata.xlf";
      fileElementAttribute.setId("1");
      fileElementAttribute.setOriginal(originalFile);
      writer.writeStartFile(fileElementAttribute);

      Unit unit = new Unit("1");

      ExtAttributes additionalAttributes = new ExtAttributes();
      additionalAttributes.setAttribute(new ExtAttribute(QName.valueOf("xml:space"), "preserve"));
      unit.setExtAttributes(additionalAttributes);

      String segmentId = "test-key-1";
      unit.setName(segmentId);
      unit.setCanResegment(false);

      Segment segment = unit.appendSegment();
      segment.setCanResegment(false);
      segment.setSource(new CDATAEncoder("UTF-8", "\\n").encode("<b>Hello<\\b>", EncoderContext.TEXT));
      segment.setTarget(new CDATAEncoder("UTF-8", "\\n").encode("<b>Bonjour<\\b>", EncoderContext.TEXT));

      Note originalComment = new Note();
      originalComment.setCategory("engineer-comment");
      originalComment.setText(new CDATAEncoder("UTF-8", "\\n").encode("This is translation for <b>Hello<\\b>", EncoderContext.TEXT));
      unit.addNote(originalComment);

      Metadata unitMetadata = new Metadata();
      MetaGroup metaGroup = new MetaGroup();
      metaGroup.setCategory("unitMetadata");
      Meta meta = new Meta("key-1");
      meta.setData(new CDATAEncoder("UTF-8", "\\n").encode("This is translation for <b>Hello<\\b>", EncoderContext.TEXT));
      metaGroup.add(meta);
      unitMetadata.addGroup(metaGroup);

      unit.setMetadata(unitMetadata);

      writer.writeUnit(unit);
    }

这是它生成的文档:

<?xml version="1.0"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="en_US" trgLang="fr_FR">
 <file id="1" original="with_cdata.xlf">
  <unit id="1" canResegment="no" name="test-key-1" xml:space="preserve">
   <mda:metadata xmlns:mda="urn:oasis:names:tc:xliff:metadata:2.0">
   <mda:metaGroup category="unitMetadata">
   <mda:meta type="key-1">&lt;![CDATA[This is translation for &lt;b>Hello&lt;\b>]]></mda:meta>
   </mda:metaGroup>
</mda:metadata>
   <notes>
    <note category="engineer-comment">&lt;![CDATA[This is translation for &lt;b>Hello&lt;\b>]]></note>
   </notes>
   <segment>
    <source>&lt;![CDATA[&lt;b&gt;Hello&lt;\b&gt;]]&gt;</source>
    <target>&lt;![CDATA[&lt;b&gt;Bonjour&lt;\b&gt;]]&gt;</target>
   </segment>
  </unit>
 </file>
</xliff>

预期输出将是

<?xml version="1.0"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="en_US" trgLang="fr_FR">
 <file id="1" original="with_cdata.xlf">
  <unit id="1" canResegment="no" name="test-key-1" xml:space="preserve">
   <mda:metadata xmlns:mda="urn:oasis:names:tc:xliff:metadata:2.0">
   <mda:metaGroup category="unitMetadata">
   <mda:meta type="key-1"><![CDATA[This is translation for <b>Hello<\b>]]></mda:meta>
   </mda:metaGroup>
</mda:metadata>
   <notes>
    <note category="engineer-comment"><![CDATA[This is translation for <b>Hello<\b>]]></note>
   </notes>
   <segment>
    <source><![CDATA[<b>Hello<\b>]]></source>
    <target><![CDATA[<b>Bonjour<\b>]]></target>
   </segment>
  </unit>
 </file>
</xliff>

【问题讨论】:

  • 我认为您将不得不与 XLIFF 开发人员共同努力。

标签: java localization xliff oasis okapi


【解决方案1】:

这是 Okapi 中的一个错误,看起来 OP 将此作为 Okapi 中的一个问题提交,这是正确的做法。 @mahsa 感谢提交。

https://bitbucket.org/okapiframework/okapi/issues/1167/cdata-sections-escaped-when-writing-with

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-10
    • 2018-06-26
    • 2011-09-09
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多