From 9414b3b773933ff31f7c473b57f730ba9dfb3c24 Mon Sep 17 00:00:00 2001 From: Sean Flanigan Date: Mon, 22 Jul 2013 16:08:18 +1000 Subject: [PATCH] rhbz986785 Ensure that each has a srclang --- .../java/org/zanata/rest/service/ExportTUStrategy.java | 8 ++++++++ .../java/org/zanata/rest/service/TMXStreamingOutput.java | 1 + .../org/zanata/rest/service/TMXStreamingOutputTest.java | 5 ++++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/zanata-war/src/main/java/org/zanata/rest/service/ExportTUStrategy.java b/zanata-war/src/main/java/org/zanata/rest/service/ExportTUStrategy.java index 3153a7db86..fcd7e7522c 100644 --- a/zanata-war/src/main/java/org/zanata/rest/service/ExportTUStrategy.java +++ b/zanata-war/src/main/java/org/zanata/rest/service/ExportTUStrategy.java @@ -24,6 +24,7 @@ import lombok.extern.slf4j.Slf4j; import net.sf.okapi.common.filterwriter.TMXWriter; import net.sf.okapi.common.resource.ITextUnit; +import net.sf.okapi.common.resource.Property; import net.sf.okapi.common.resource.TextFragment; import net.sf.okapi.common.resource.TextUnit; @@ -59,6 +60,7 @@ public ExportTUStrategy(LocaleId localeId) */ public void exportTranslationUnit(TMXWriter tmxWriter, SourceContents tf, net.sf.okapi.common.LocaleId sourceLocaleId) { + assert tmxWriter.isWriteAllPropertiesAsAttributes(); String tuid = tf.getQualifiedId(); // Perhaps we could encode plurals using TMX attributes? String srcContent = tf.getContents().get(0); @@ -69,6 +71,7 @@ public void exportTranslationUnit(TMXWriter tmxWriter, SourceContents tf, net.sf } ITextUnit textUnit = new TextUnit(tuid, srcContent); + setSrcLang(textUnit, sourceLocaleId); textUnit.setName(tuid); if (localeId != null) { @@ -93,6 +96,11 @@ public void exportTranslationUnit(TMXWriter tmxWriter, SourceContents tf, net.sf } } + private void setSrcLang(ITextUnit textUnit, net.sf.okapi.common.LocaleId sourceLocaleId) + { + textUnit.setProperty(new Property("srclang", sourceLocaleId.toBCP47())); + } + private void addTargetToTextUnit(ITextUnit textUnit, TargetContents tfTarget) { if (tfTarget != null && tfTarget.getState().isTranslated()) diff --git a/zanata-war/src/main/java/org/zanata/rest/service/TMXStreamingOutput.java b/zanata-war/src/main/java/org/zanata/rest/service/TMXStreamingOutput.java index a04f123427..dde7f584c0 100644 --- a/zanata-war/src/main/java/org/zanata/rest/service/TMXStreamingOutput.java +++ b/zanata-war/src/main/java/org/zanata/rest/service/TMXStreamingOutput.java @@ -84,6 +84,7 @@ public void write(OutputStream output) throws IOException, WebApplicationExcepti XMLWriter xmlWriter = new XMLWriter(writer); @Cleanup TMXWriter tmxWriter = new TMXWriter(xmlWriter); + tmxWriter.setWriteAllPropertiesAsAttributes(true); String segType = "block"; // TODO other segmentation types String dataType = "unknown"; // TODO track data type metadata throughout the system diff --git a/zanata-war/src/test/java/org/zanata/rest/service/TMXStreamingOutputTest.java b/zanata-war/src/test/java/org/zanata/rest/service/TMXStreamingOutputTest.java index 404ae1f388..8b368ffa59 100644 --- a/zanata-war/src/test/java/org/zanata/rest/service/TMXStreamingOutputTest.java +++ b/zanata-war/src/test/java/org/zanata/rest/service/TMXStreamingOutputTest.java @@ -25,6 +25,7 @@ import org.custommonkey.xmlunit.exceptions.XpathException; import org.testng.annotations.Test; import org.w3c.dom.Document; +import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import org.zanata.common.LocaleId; @@ -164,13 +165,15 @@ private void assertContainsGermanTUs(Document doc) throws XpathException, SAXExc } @SuppressWarnings("deprecation") // Eclipse seems to confuse org.junit with junit.framework - private static void assertSingleTU(String docId, String resId, Document doc) throws XpathException, SAXException, IOException + private void assertSingleTU(String docId, String resId, Document doc) throws XpathException, SAXException, IOException { String xpath = "//tu[@tuid='"+docId+":"+resId+"']"; XpathEngine simpleXpathEngine = XMLUnit.newXpathEngine(); NodeList nodeList = simpleXpathEngine.getMatchingNodes(xpath, doc); int matches = nodeList.getLength(); assertEquals("Should be only one tu node per docId:resId", 1, matches); + Node srclang = nodeList.item(0).getAttributes().getNamedItem("srclang"); + assertEquals(sourceLocale.getId(), srclang.getNodeValue()); } private static void assertTUContainsSegment(String segmentText, String docId, String resId, String lang, Document doc) throws XpathException, SAXException, IOException