public XDocument CombineXliffs(List <XDocument> xliffDocs) { var result = XDocument.Parse("<?xml version='1.0' encoding='utf-8'?><eticPOSList/>"); // The source element has a link element within its text; getting its Nodes preserves this link var citeSourceParts = xliffDocs.First().XPathSelectElement("/xliff/file/body") .Element(XliffUtils.SilNamespace + Source).Nodes().Select(n => n.ToString()); var citeSourceElt = XElement.Parse($"<source>{string.Join("", citeSourceParts)}</source>"); result.Root.Add(citeSourceElt); AddItems(result.Root, xliffDocs.ToDictionary( xDoc => NormalizeLocales.Normalize(xDoc.XPathSelectElement("/xliff/file").Attribute("target-language")?.Value ?? WsEn), xDoc => xDoc.XPathSelectElement("/xliff/file/body"))); return(result); }
internal static void ConvertXliffToLists(XDocument xliffList, XElement listsElement) { var fileElement = xliffList.XPathSelectElement("/xliff/file"); var targetLanguage = fileElement.Attribute("target-language")?.Value; if (string.IsNullOrEmpty(targetLanguage)) { throw new ArgumentException("Missing target tanguage."); } targetLanguage = NormalizeLocales.Normalize(targetLanguage); var groupElements = xliffList.XPathSelectElements("/xliff/file/body/group").ToDictionary(elt => elt.Attribute("id").Value); foreach (var listInfo in ListToXliffMap) { if (groupElements.TryGetValue($"{listInfo.Owner}_{listInfo.Field}", out var group)) { ConvertGroupToList(group, listInfo, targetLanguage, listsElement); } } }