Beispiel #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);
        }
Beispiel #2
0
        private static int RunWrite(CommandArgs.WriteTargetCommand cmd)
        {
            var doc         = new XliffParser.XlfDocument(cmd.Xlf);
            var saveOptions = XlfDocument.ResXSaveOption.None;

            if (cmd.Sorted)
            {
                saveOptions |= XlfDocument.ResXSaveOption.SortEntries;
            }

            if (cmd.IncludeComments)
            {
                saveOptions |= XlfDocument.ResXSaveOption.IncludeComments;
            }

            doc.SaveAsResX(cmd.Resx, saveOptions);

            return(0);
        }
Beispiel #3
0
        private static int RunDefault(CommandArgs.InfoCommand cmd)
        {
            var xlfFile = cmd.Xlf;
            var doc     = new XliffParser.XlfDocument(xlfFile);

            Console.WriteLine("file: " + doc.FileName);
            Console.WriteLine("XLIFF version: " + doc.Version);
            Console.WriteLine("file sections: " + doc.Files.Count());
            var n = 1;

            foreach (var f in doc.Files)
            {
                Console.WriteLine(">" + n + " data type: " + f.DataType);
                Console.WriteLine(">" + n + " original: " + f.Original);
                Console.WriteLine(">" + n + " source language: " + f.SourceLang);
                Console.WriteLine(">" + n + " target language: " + f.Optional.TargetLang);
                Console.WriteLine(">" + n + " tool id: " + f.Optional.ToolId);
                Console.WriteLine(">" + n + " translation units: " + f.TransUnits.Count());
            }

            return(0);
        }
Beispiel #4
0
        private static int RunUpdate(CommandArgs.UpdateCommand cmd)
        {
            var xlfFile  = cmd.Xlf;
            var resxFile = cmd.Resx;

            if (!File.Exists(xlfFile))
            {
                Console.Error.WriteLine("error, file not found: " + xlfFile);
                return(2);
            }

            var doc = new XliffParser.XlfDocument(xlfFile);

            if (string.IsNullOrWhiteSpace(resxFile))
            {
                resxFile = Path.Combine(Path.GetDirectoryName(xlfFile), doc.Files.First().Original);
            }

            if (!File.Exists(resxFile))
            {
                Console.Error.WriteLine("error, file not found: " + resxFile);
                return(2);
            }

            var result = doc.UpdateFromSource("new", "new");

            if (cmd.Verbose)
            {
                var msg = string.Empty;
                if (!result.Any())
                {
                    msg = "already up-to-date";
                }
                else
                {
                    var updated = result.UpdatedItems.Count();
                    var added   = result.AddedItems.Count();
                    var removed = result.RemovedItems.Count();

                    if (updated > 0)
                    {
                        msg += updated == 1 ? "1 item updated" : $"{updated} items updated";
                    }

                    if (added > 0)
                    {
                        if (msg.Length > 0)
                        {
                            msg += "/";
                        }

                        msg += added == 1 ? "1 item added" : $"{added} items added";
                    }

                    if (removed > 0)
                    {
                        if (msg.Length > 0)
                        {
                            msg += "/";
                        }

                        msg += removed == 1 ? "1 item removed" : $"{removed} items removed";
                    }
                }

                Console.WriteLine(msg);
            }

            doc.Save();
            return(0);
        }
Beispiel #5
0
        public static void ImportFile(Args.ImportFileCommand cmd)
        {
            var muidb = new MuiDBFile(cmd.Muidb, MuiDBFile.OpenMode.CreateIfMissing);

            switch (cmd.Type.ToLowerInvariant())
            {
            case "resx":
                var result = muidb.ImportResX(cmd.In, cmd.Lang);
                if (cmd.Verbose)
                {
                    foreach (var added in result.AddedItems)
                    {
                        Console.WriteLine($"Added resource '{added}'");
                    }

                    foreach (var updated in result.UpdatedItems)
                    {
                        Console.WriteLine($"Updated resource '{updated}'");
                    }
                }

                Console.WriteLine($"Added items: {result.AddedItems.Count}\nupdated items: {result.UpdatedItems.Count}");
                break;

            case "xliff":
                var doc  = new XliffParser.XlfDocument(cmd.In);
                var file = doc.Files.First();

                Verbose(cmd, $"Adding/updating resources for language '{cmd.Lang}...");

                foreach (var unit in file.TransUnits)
                {
                    var id = unit.Id;
                    if (string.Equals(id, "none"))
                    {
                        id = unit.Optional.Resname;
                    }

                    var comment = unit.Optional.Notes.Any() ? unit.Optional.Notes.First().Value : null;
                    Verbose(cmd, $"Adding/updating resource '{id}': text='{unit.Target}', state='{unit.Optional.TargetState}'");

                    string translatedState;
                    try
                    {
                        translatedState = StateConverter.ToMuiDB(unit.Optional.TargetState);
                    }
                    catch (Exception)
                    {
                        translatedState = StateConverter.MuiDbStates.New;
                        Console.Error.WriteLine($"Warning: state '{unit.Optional.TargetState}' of item '{id}' is unknown and will be mapped to '{translatedState}'");
                    }

                    muidb.AddOrUpdateString(id, cmd.Lang, unit.Target, translatedState, comment);
                }

                break;

            default:
                throw new Exception($"Unknown format: {cmd.Type}");
            }

            muidb.Save();
        }