private static int RunExportCsv(CommandArgs.ExportCsvCommand cmd) { var doc = new XliffParser.XlfDocument(cmd.Xlf); var csv = new CsvAdapter() { CustomIdColumn = cmd.CustomIdColumn, IsCsvHeaderRequired = !cmd.NoHeader, IsLangColumnRequired = cmd.WithLanguage }; XlfDialect dialect = XlfDialect.Standard; if (cmd?.Dialect == "RCWinTrans11") { dialect = XlfDialect.RCWinTrans11; } else if (cmd?.Dialect == "MultilingualAppToolkit") { dialect = XlfDialect.MultilingualAppToolkit; } var stateFilter = string.IsNullOrWhiteSpace(cmd.Filter) ? null : cmd.Filter.Split(';').ToList(); var resTypeFilter = string.IsNullOrWhiteSpace(cmd.ResTypeFilter) ? null : cmd.ResTypeFilter.Split(';').ToList(); doc.Files.First().Export(cmd.Out, csv, stateFilter, resTypeFilter, dialect); return(0); }
public bool TryGetTransUnit(string id, XlfDialect dialect, out XlfTransUnit unit) { try { unit = GetTransUnit(id, dialect); return(true); } catch (InvalidOperationException) { unit = null; return(false); } }
public void RemoveTransUnit(string id, XlfDialect dialect) { switch (dialect) { case XlfDialect.RCWinTrans11: RemoveTransUnit(AttributeResname, id); break; case XlfDialect.MultilingualAppToolkit: RemoveTransUnit(AttributeId, XlfTransUnit.ResxPrefix + id); break; default: RemoveTransUnit(AttributeId, id); break; } }
public string GetId(XlfDialect dialect) { string id = Id; switch (dialect) { case XlfDialect.RCWinTrans11: id = Optional?.Resname ?? Id; break; case XliffParser.XlfDialect.MultilingualAppToolkit: if (Id.StartsWith(ResxPrefix, StringComparison.InvariantCultureIgnoreCase)) { id = Id.Substring(ResxPrefix.Length); } break; default: break; } return(id); }
public string GetId(XlfDialect dialect) { string id = Id; switch (dialect) { case XlfDialect.RCWinTrans11: id = Optional.Resname; break; case XliffParser.XlfDialect.MultilingualAppToolkit: if (Id.ToLowerInvariant().StartsWith(XlfTransUnit.ResxPrefix.ToLowerInvariant())) { id = Id.Substring(XliffParser.XlfTransUnit.ResxPrefix.Length); } break; default: break; } return(id); }
public XlfTransUnit AddTransUnit(string id, string source, string target, AddMode addMode, XlfDialect dialect) { if (addMode != AddMode.DontCheckExisting && TryGetTransUnit(id, dialect, out XlfTransUnit resultUnit)) { switch (addMode) { case AddMode.FailIfExists: throw new InvalidOperationException($"There is already a trans-unit with id={id}"); case AddMode.SkipExisting: return(resultUnit); default: case AddMode.UpdateExisting: resultUnit.Source = source; // only update target value if there is already a target element present if (resultUnit.Target != null) { resultUnit.Target = target; } return(resultUnit); } } var n = new XElement(this.ns + ElementTransUnit); n.SetAttributeValue("id", id); n.SetAttributeValue("translate", "yes"); n.SetAttributeValue(XNamespace.Xml + "space", "preserve"); var transUnits = this.node.Descendants(this.ns + ElementTransUnit).ToList(); if (transUnits.Any()) { transUnits.Last().AddAfterSelf(n); } else { var bodyElements = this.node.Descendants(this.ns + ElementBody).ToList(); XElement body; if (bodyElements.Any()) { body = bodyElements.First(); } else { body = new XElement(this.ns + ElementBody); this.node.Add(body); } body.Add(n); } if (dialect == XlfDialect.RCWinTrans11) { var unit = new XlfTransUnit(n, this.ns, IdNone, source, target) { TargetState = "new" }; unit.Optional.Resname = id; return(unit); } else { return(new XlfTransUnit(n, this.ns, id, source, target) { TargetState = "new" }); } }
// Add a new or updates an existing translation unit public XlfTransUnit AddOrUpdateTransUnit(string id, string source, string target, XlfDialect dialect) { return(AddTransUnit(id, source, target, AddMode.UpdateExisting, dialect)); }
public void Export(string outputFilePath, IXlfExporter handler, List <string> stateFilter, List <string> restTypeFilter, XlfDialect dialect) { var units = stateFilter != null && stateFilter.Any() ? TransUnits.Where(u => stateFilter.Contains(u.Optional.TargetState)) : TransUnits; units = restTypeFilter != null && restTypeFilter.Any() ? units.Where(u => restTypeFilter.Contains(u.Optional.Restype)) : units; handler.ExportTranslationUnits(outputFilePath, units, Optional.TargetLang, dialect); }
public XlfTransUnit GetTransUnit(string id, XlfDialect dialect) { return(TransUnits.First(u => u.GetId(dialect) == id)); }
public XlfTransUnit AddTransUnit(string id, string source, string target, AddMode addMode, XlfDialect dialect) { XlfTransUnit resultUnit; if (TryGetTransUnit(id, dialect, out resultUnit)) { switch (addMode) { case AddMode.FailIfExists: throw new InvalidOperationException($"The is already a trans-unit with id={id}"); case AddMode.SkipExisting: return(resultUnit); default: case AddMode.UpdateExisting: resultUnit.Source = source; resultUnit.Target = target; return(resultUnit); } } var n = new XElement(this.ns + ElementTransUnit); var transUnits = this.node.Descendants(this.ns + ElementTransUnit).ToList(); if (transUnits.Any()) { transUnits.Last().AddAfterSelf(n); } else { var bodyElements = this.node.Descendants(this.ns + ElementBody).ToList(); XElement body; if (bodyElements.Any()) { body = bodyElements.First(); } else { body = new XElement(this.ns + ElementBody); this.node.Add(body); } body.Add(n); } if (dialect == XlfDialect.RCWinTrans11) { var unit = new XlfTransUnit(n, this.ns, IdNone, source, target); unit.Optional.Resname = id; return(unit); } else if (dialect == XlfDialect.MultilingualAppToolkit) { if (!id.ToLowerInvariant().StartsWith(XlfTransUnit.ResxPrefix.ToLowerInvariant())) { return(new XlfTransUnit(n, this.ns, XlfTransUnit.ResxPrefix + id, source, target)); } } return(new XlfTransUnit(n, this.ns, id, source, target)); }
public XlfTransUnit AddTransUnit(string id, string source, string target, AddMode addMode, XlfDialect dialect) { if (TryGetTransUnit(id, dialect, out XlfTransUnit resultUnit)) { switch (addMode) { case AddMode.FailIfExists: ThrowExceptions.Custom(Exc.GetStackTrace(), type, Exc.CallingMethod(), $"There is already a trans-unit with id={id}"); return(null); case AddMode.SkipExisting: return(resultUnit); default: case AddMode.UpdateExisting: resultUnit.Source = source; // only update target value if there is already a target element present if (resultUnit.Target != null) { resultUnit.Target = target; } return(resultUnit); } } var n = new XElement(this.ns + ElementTransUnit); var transUnits = this.node.Descendants(this.ns + ElementTransUnit).ToList(); if (transUnits.Any()) { transUnits.Last().AddAfterSelf(n); } else { var bodyElements = this.node.Descendants(this.ns + ElementBody).ToList(); XElement body; if (bodyElements.Any()) { body = bodyElements.First(); } else { body = new XElement(this.ns + ElementBody); this.node.Add(body); } body.Add(n); } if (dialect == XlfDialect.RCWinTrans11) { var unit = new XlfTransUnit(n, this.ns, IdNone, source, target); unit.Optional.Resname = id; return(unit); } else if (dialect == XlfDialect.MultilingualAppToolkit) { if (!id.StartsWith(XlfTransUnit.ResxPrefix, StringComparison.InvariantCultureIgnoreCase)) { return(new XlfTransUnit(n, this.ns, XlfTransUnit.ResxPrefix + id, source, target)); } } return(new XlfTransUnit(n, this.ns, id, source, target)); }
public void ExportTranslationUnits(string filePath, IEnumerable <XlfTransUnit> units, string targetLanguage, XlfDialect dialect) { File = filePath; Lang = targetLanguage; Units = units.ToList(); }
public void ExportTranslationUnits(string filePath, IEnumerable <XlfTransUnit> units, string language, XlfDialect dialect) { using (var textWriter = new System.IO.StreamWriter(filePath, false, Encoding.UTF8)) { var csv = new CsvHelper.CsvWriter(textWriter); csv.Configuration.Encoding = Encoding.UTF8; csv.Configuration.HasHeaderRecord = false; if (IsCsvHeaderRequired) { WriteHeader(csv); } foreach (var t in units) { if (!string.IsNullOrEmpty(CustomIdColumn)) { csv.WriteField(CustomIdColumn); } csv.WriteField(t.GetId(dialect)); csv.WriteField(/*XmlUtil.DeNormalizeLineBreaks(*/ t.Source); csv.WriteField(/*XmlUtil.DeNormalizeLineBreaks(*/ t.Target); csv.WriteField(t.Optional.TargetState); if (this.IsLangColumnRequired) { csv.WriteField(language); } csv.NextRecord(); } } }