示例#1
0
        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);
        }
示例#2
0
 public bool TryGetTransUnit(string id, XlfDialect dialect, out XlfTransUnit unit)
 {
     try
     {
         unit = GetTransUnit(id, dialect);
         return(true);
     }
     catch (InvalidOperationException)
     {
         unit = null;
         return(false);
     }
 }
示例#3
0
        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;
            }
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
        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"
                });
            }
        }
示例#7
0
 // 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));
 }
示例#8
0
        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);
        }
示例#9
0
 public XlfTransUnit GetTransUnit(string id, XlfDialect dialect)
 {
     return(TransUnits.First(u => u.GetId(dialect) == id));
 }
示例#10
0
        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));
        }
示例#11
0
        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));
        }
示例#12
0
 public void ExportTranslationUnits(string filePath, IEnumerable <XlfTransUnit> units, string targetLanguage, XlfDialect dialect)
 {
     File  = filePath;
     Lang  = targetLanguage;
     Units = units.ToList();
 }
示例#13
0
        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();
                }
            }
        }