public void EnrichedXliff() { StringBuilder sb = new StringBuilder(); sb.Append("<?xml version=\"1.0\" encoding=\"utf-8\" ?>"); sb.Append( "<xliff xmlns=\"urn:oasis:names:tc:xliff:document:2.0\" srcLang=\"en\" trgLang=\"fr\" version=\"2.0\">"); sb.Append("<file id=\"f1\"><unit id=\"1\"><segment id=\"s1\"><source>"); sb.Append("<mrk id=\"freme-7\" ref=\"http://freme-project.eu/#char=3,10\" type=\"term\">Text</mrk>"); sb.Append( " in <sc dataRef=\"d1\" id=\"sc1\"/><mrk id=\"freme-8\" ref=\"http://freme-project.eu/#char=16,20\" type=\"term\">"); sb.Append("bold</mrk> <sc dataRef=\"d2\" id=\"sc2\"/>"); sb.Append( " and<ec dataRef=\"d3\" startRef=\"sc1\"/> <mrk id=\"freme-9\" ref=\"http://freme-project.eu/#char=46,53\" type=\"term\">"); sb.Append("italics</mrk><ec dataRef=\"d4\" startRef=\"sc2\"/>."); sb.Append( "</source><target>Text in <sc dataRef=\"d1\" id=\"sc1\"/>bold <sc dataRef=\"d2\" id=\"sc2\"/>\r\n and<ec dataRef=\"d3\" startRef=\"sc1\"/> italics<ec dataRef=\"d4\" startRef=\"sc2\"/>.\r\n </target>"); sb.Append("</segment></unit></file></xliff>"); JliffBuilder builder = new JliffBuilder("en", "fr"); TextReader tr = new StringReader(sb.ToString()); Xliff20Filter filter = new Xliff20Filter(); filter.XlfFileEvent += builder.File; filter.XlfUnitEvent += builder.Unit; filter.XlfGroupEvent += builder.Group; filter.XlfSegmentEvent += builder.Segment; filter.XlfSourceEvent += builder.Source; filter.XlfTargetEvent += builder.Target; filter.XlfIgnorableEvent += builder.Ignorable; filter.XlfPhElementEvent += builder.PhElement; filter.XlfSkeletonEvent += builder.Skeleton; filter.XlfTextEvent += builder.Text; filter.XlfSmElementEvent += builder.SmElement; filter.XlfEmElementEvent += builder.EmElement; filter.XlfScElementEvent += builder.ScElement; filter.XlfEcElementEvent += builder.EcElement; filter.Filter(tr); builder.Serialize("ModelTest.json"); JsonSchema schema = JsonSchema.Parse(schemaDef); var obGraph = JObject.FromObject(builder.Jliff); Assert.IsTrue(obGraph.IsValid(schema)); Unit unit = builder.Jliff.Files[0].Subfiles[0] as Unit; Assert.IsNotNull(unit); Segment segment = unit.Subunits[0] as Segment; Assert.IsNotNull(segment); SmElement smElement = segment.Source[11] as SmElement; Assert.IsNotNull(smElement); Assert.AreEqual("freme-9", smElement.Id); Assert.AreEqual("term", smElement.Type); }
public void RoundtripExample4() { var u1 = new Unit("u1"); var te1 = new TextElement("Press the "); var te2 = new SmElement("m1"); var te3 = new TextElement("TAB key"); var te4 = new EmElement(); var te5 = new TextElement("."); var te6 = new TextElement("Drücken Sie die "); var te7 = new SmElement("m2"); var te8 = new TextElement("TAB-TASTE"); var te9 = new EcElement(); var te10 = new TextElement("."); var s1 = new Segment(); s1.Source.Add(te1); s1.Source.Add(te2); s1.Source.Add(te3); s1.Source.Add(te4); s1.Source.Add(te5); s1.Target.Add(te6); s1.Target.Add(te7); s1.Target.Add(te8); s1.Target.Add(te9); s1.Target.Add(te10); var unit1 = new Unit("u1"); unit1.Subunits.Add(s1); var gloss = new GlossaryEntry(); var def = new Definition(); def.Source = "publicTermbase"; def.Text = "A keyboard key that is traditionally used to insert tab characters into a document."; gloss.Definition = def; var t1 = new Translation("1", "myTermbase", "Tabstopptaste"); var t2 = new Translation("2", "myTermbase", "TAB-TASTE"); gloss.Translations.Add(t1); gloss.Translations.Add(t2); unit1.Glossary.Add(gloss); var model = new JliffDocument("en", "de"); model.Files.Add(new Localization.Jliff.Graph.File("f1")); model.Files[0].Subfiles = new List <ISubfile> { unit1 }; var dllPath = Assembly.GetAssembly(typeof(ModelTests)).Location; var dllName = Assembly.GetAssembly(typeof(ModelTests)).GetName().Name; var outputPath = dllPath.Replace(dllName + ".dll", ""); Converter.Serialize(Path.Combine(outputPath, "example4.json"), model); Converter.Deserialize(new FileInfo(Path.Combine(outputPath, "example4.json"))); JsonSchema schema = JsonSchema.Parse(schemaDef); var obGraph = JObject.FromObject(model); Assert.IsTrue(obGraph.IsValid(schema)); }