Exemple #1
0
        private async void OpenCommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)
        {
            try
            {
                pioClient = new PIOServiceClient(new BasicHttpBinding(), new EndpointAddress($@"http://127.0.0.1:8733/PIO/Service/"));
                pioClient.Open();
                botsClient         = new BotsRESTClient($@"http://127.0.0.1:8734", new HttpConnector(), new ResponseDeserializer());
                taskCallbackClient = new TaskCallbackServiceClient(new InstanceContext(this), new WSDualHttpBinding(), new EndpointAddress($@"http://localhost:8735/PIO/TaskCallback/Service"));
                taskCallbackClient.Open();
                taskCallbackClient.Subscribe();
                isConnected = true;
            }
            catch (Exception ex)
            {
                ShowError(ex);
            }

            translationModule = new TranslationModule(NullLogger.Instance, pioClient);


            ApplicationViewModel = new ApplicationViewModel(pioClient, botsClient, translationModule);
            DataContext          = ApplicationViewModel;

            await translationModule.LoadAsync("FR");

            await ApplicationViewModel.LoadAsync();
        }
Exemple #2
0
        private void CloseCommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)
        {
            try
            {
                taskCallbackClient?.Unsubscribe();
                taskCallbackClient?.Close();
            }
            catch { }
            try
            {
                pioClient?.Close();
            }
            catch { }

            /*try
             * {
             *      botsClient?.Close();
             * }
             * catch { }*/

            DataContext          = null;
            ApplicationViewModel = null;
            translationModule    = null;
            pioClient            = null; botsClient = null;

            isConnected = false;
        }
Exemple #3
0
        public static void ToTMX(TranslationModule tp, string targetDir)
        {
            var tmx = new tmx();
            var tus = new List <tu>();

            foreach (var key in tp.ByKey)
            {
                var tu = new tu();
                tu.tuid = key.Key;

                var tuvs = new List <tuv>();

                //tuvs.Add(new tuv() { lang = tp.masterLanguage.ToUpper(), lang1 = tp.masterLanguage.ToUpper(), seg = new seg() { Text = new string[] { kvp.Value } } });

                /*
                 * foreach (var l in tp.Languages)
                 * {
                 *      if (tp.Dicts.ContainsKey(l) && tp.Dicts[l].ContainsKey(key))
                 *              tuvs.Add(new tuv() { lang = l.ToUpper(), lang1 = l.ToUpper(), seg = new seg() { Text = new string[] { tp.Dicts[l][key] } } });
                 * }
                 */
                foreach (var seg in key)
                {
                    tuvs.Add(new tuv()
                    {
                        lang = seg.Language.ToUpper(), lang1 = seg.Language.ToUpper(), seg = new seg()
                        {
                            Text = new string[] { seg.Text }
                        }
                    });
                }

                tu.tuv = tuvs.ToArray();
                tus.Add(tu);
            }

            tmx.body   = tus.ToArray();
            tmx.header = new header()
            {
                srclang = "*all*", creationtool = "iLuccaTranslationTool", segtype = headerSegtype.phrase
            };

            var           extraTypes = new Type[] { typeof(tu), typeof(tuv), typeof(seg) };
            XmlSerializer xs         = new XmlSerializer(typeof(tmx), null, extraTypes, new XmlRootAttribute("tmx"), null);

            //specify encoding to add BOM
            using (var sw = new StreamWriter(targetDir + @"\" + tp.Name + ".tmx", false, new UTF8Encoding(false)))
            {
                XmlWriterSettings settings = new XmlWriterSettings();
                settings.Indent          = false;
                settings.NewLineHandling = NewLineHandling.None;
                //xs.Serialize(sw, tmx);

                using (XmlWriter writer = XmlWriter.Create(sw, settings))
                {
                    xs.Serialize(writer, tmx);
                    //_serializer.Serialize(o, writer);
                }
            }
        }
        protected TranslationModule FromWorksheet(string project, WorksheetEntry worksheet)
        {
            // Define the URL to request the list feed of the worksheet.
            AtomLink listFeedLink = worksheet.Links.FindService(GDataSpreadsheetsNameTable.ListRel, null);

            // Fetch the list feed of the worksheet.
            ListQuery listQuery = new ListQuery(listFeedLink.HRef.ToString());
            ListFeed  listFeed  = this.Service.Query(listQuery);

            Console.WriteLine("Results {0}", listFeed.Entries.Count);

            List <string> languages = new List <string>();
            var           dicts     = new Dictionary <string, Dictionary <string, string> >();
            var           comments  = new Dictionary <string, string>();

            //language information is in first row
            var firstRow = (ListEntry)listFeed.Entries[0];

            for (int column = 1; column < firstRow.Elements.Count; column++)
            {
                var lang = firstRow.Elements[column].LocalName;
                languages.Add(lang);
                dicts.Add(lang, new Dictionary <string, string>());
            }

            var tp = new TranslationModule(project, "en", languages.ToArray());

            for (int rowIdx = 1; rowIdx < listFeed.Entries.Count; rowIdx++)
            {
                ListEntry row     = (ListEntry)listFeed.Entries[rowIdx];
                string    comment = null;

                string key = row.Elements[0].Value;                 // first column is the key
                // Update the row's data.
                for (int column = 1; column < row.Elements.Count; column++)
                {
                    var element = row.Elements[column];

                    //in list based feeds localname always correponds to first row
                    if (element.LocalName.ToLower() == "comment")
                    {
                        comment = element.Value;
                    }
                    else
                    {
                        tp.Add(new Segment(element.LocalName, key, element.Value));
                    }
                }

                foreach (var seg in tp.ByKey[key])
                {
                    seg.Comment = comment;
                }
            }

            return(tp);
        }
Exemple #5
0
        public static Stream ToXLSX2(TranslationModule project)
        {
            MemoryStream xlsStream = new MemoryStream();

            var worksheet = new MemoryWorksheet();

            Export.ToIWorksheet(project, worksheet);

            using (SpreadsheetDocument myDoc = SpreadsheetDocument.Create(xlsStream, SpreadsheetDocumentType.Workbook))
            {
                WorkbookPart workbookPart = myDoc.AddWorkbookPart();
                workbookPart.Workbook = new Workbook();

                WorksheetPart worksheetPart = workbookPart.AddNewPart <WorksheetPart>();
                SheetData     sheetData     = new SheetData();
                worksheetPart.Worksheet = new Worksheet(sheetData);

                Sheets sheets = myDoc.WorkbookPart.Workbook.AppendChild <Sheets>(new Sheets());
                Sheet  sheet  = new Sheet()
                {
                    Id      = myDoc.WorkbookPart.GetIdOfPart(worksheetPart),
                    SheetId = 1,
                    Name    = "mySheet"
                };
                sheets.AppendChild(sheet);

                int cellIdx = 0;
                for (uint row = 0; row < worksheet.Rows; row++)
                {
                    var r = new Row();
                    r.RowIndex = row;

                    for (int col = 0; col < worksheet.Columns; col++)
                    {
                        /*
                         * var c = new Cell();
                         * c.DataType = CellValues.String;
                         * //string val = worksheet[row, col] != null ? worksheet[row, col].ToString() : "";
                         * string val = "test;";
                         * c.CellValue = new CellValue(val);
                         *
                         * r.InsertAt(c, col);
                         */
                        var c = CreateTextCell(ColumnLetter(cellIdx++), row, "test");
                        r.AppendChild(c);
                    }
                    sheetData.AppendChild(r);
                }

                worksheetPart.Worksheet.Save();
                workbookPart.Workbook.Save();
                myDoc.Close();
            }

            return(xlsStream);
        }
Exemple #6
0
        /// <summary>
        /// Based on the matched keys, exchanges keys in the given translaton project
        /// </summary>
        /// <param name="tp"></param>
        public void ChangeKeys(TranslationModule tp, bool concatMultipleMatches = false)
        {
            int counter    = 0;
            var byLanguage = tp.ByLanguage;

            foreach (var kvp in Matches.Where(kvp => kvp.Key != kvp.Value))
            {
                foreach (var lang in byLanguage)
                {
                    var newKey      = lang.Where(s => s.Key == kvp.Key);
                    var existingKey = lang.Where(s => s.Key == kvp.Value);

                    if (newKey.Any() && !existingKey.Any())
                    {
                        //rename keys
                        foreach (var s in newKey)
                        {
                            s.Key = kvp.Key;
                        }
                    }
                    else if (!existingKey.Any())
                    {
                        //add empty value
                        tp.Add(new Segment(lang.Key, kvp.Value, ""));
                    }
                    else if (concatMultipleMatches)
                    {
                        //multiple matches found
                        //in this case we apply the special rule for lucca which consist in concetenating the strings

                        throw new NotImplementedException();
                    }

                    /*
                     * //var lang = tp.Dicts[langKey];
                     * if(lang)
                     * if (lang.ContainsKey(kvp.Key) && !lang.ContainsKey(kvp.Value))
                     * {
                     *      lang.Add(kvp.Value, lang[kvp.Key]);
                     *      lang.Remove(kvp.Key);
                     *      counter++;
                     * }
                     * else if (!lang.ContainsKey(kvp.Key))
                     * {
                     *      lang.Add(kvp.Value, "");
                     * }
                     * else if(concatMultipleMatches)
                     * {
                     *      //multiple matches found
                     *      //in this case we apply the special rule for lucca which consist in concetenating the strings
                     *      lang[kvp.Value] += " <br /><br />" + lang[kvp.Key];
                     *      lang.Remove(kvp.Key);
                     * }*/
                }
            }
        }
Exemple #7
0
        public static Stream ToXLSX(TranslationModule project)
        {
            MemoryStream xlsStream = new MemoryStream();

            using (var package = new OfficeOpenXml.ExcelPackage(xlsStream))
            {
                var worksheet = package.Workbook.Worksheets.Add("Traductions");
                Export.ToIWorksheet(project, new XlsXWorksheet(worksheet));

                package.Save();
            }

            return(xlsStream);
        }
Exemple #8
0
        public static void ToArbAll(TranslationModule tp, string targetDir)
        {
            StringBuilder sb = new StringBuilder();

            foreach (var l in tp.ByLanguage)
            {
                sb = ToArb(sb, tp.Name, l.Key, l);
            }

            using (StreamWriter outfile = new StreamWriter(targetDir + @"\" + tp.Name + ".arb", false, Encoding.UTF8))
            {
                outfile.Write(sb.ToString());
            }
        }
Exemple #9
0
        public static void ToXLSX(TranslationModule project, string fileName)
        {
            FileInfo newFile = new FileInfo(fileName);

            if (newFile.Exists)
            {
                newFile.Delete();                  // ensures we create a new workbook
                newFile = new FileInfo(fileName);
            }
            using (var package = new OfficeOpenXml.ExcelPackage(newFile))
            {
                var worksheet = package.Workbook.Worksheets.Add("Traductions");
                Export.ToIWorksheet(project, new XlsXWorksheet(worksheet));

                package.Save();
            }
        }
Exemple #10
0
        public KeyMatcher(TranslationModule tpBase, TranslationModule tp, string masterLanguage = null)
        {
            var memory = new TranslationMemory(tpBase);

            Matches   = new Dictionary <string, string>();
            NoMatches = new List <string>();

            masterLanguage = masterLanguage ?? tp.MasterLanguage;

            foreach (var seg in tp.ByLanguage[masterLanguage])
            {
                var results = memory.Query(masterLanguage, seg.Text);

                if (results.Any())
                {
                    Matches.Add(seg.Key, results.First().Key);
                }
                else
                {
                    NoMatches.Add(seg.Key);
                }
            }
        }
Exemple #11
0
        public static TranslationModule FromResX(string dir, string project, string masterLanguage)
        {
            var             tp        = new TranslationModule(project, masterLanguage);
            List <DateTime> fileDates = new List <DateTime>();

            var masterFile = dir + project + ".resx";

            tp.Add(Segment.FromDict(masterLanguage, GetDictFromResX(masterFile)));
            fileDates.Add(System.IO.File.GetLastWriteTimeUtc(masterFile));

            foreach (var l in tp.Languages)
            {
                if (l == masterLanguage)
                {
                    continue;                                      //we skip master language since we treated it already as a special case
                }
                var file = dir + project + "." + l + ".resx";
                tp.Add(Segment.FromDict(l, GetDictFromResX(file)));
                fileDates.Add(System.IO.File.GetLastWriteTimeUtc(file));
            }

            tp.LastModified = fileDates.Max();
            return(tp);
        }
Exemple #12
0
 public TranslationMemory(TranslationModule tp)
 {
     this.Index = TranslationMemoryHelpers.BuildTranslationProjectIndex(new ITranslationModule[] { tp });
     this.TranslationProject = tp;
 }
Exemple #13
0
        public static TranslationModule FromIWorksheet(string project, string masterLanguage, IWorksheet worksheet)
        {
            // open the file "data.csv" which is a CSV file with headers
            TranslationModule tp   = null;
            bool createMissingKeys = false;

            Dictionary <int, string> languages = new Dictionary <int, string>();

            string currentNS            = project;
            IEnumerable <string> labels = Enumerable.Empty <string>();
            int commentColumn           = -1;

            for (int c = 1; c < worksheet.Columns; c++)
            {
                string language = ((string)worksheet[0, c]).ToLower();
                if (language == "Comment")
                {
                    commentColumn = c;
                    continue;
                }

                languages.Add(c, language);
            }
            tp = new TranslationModule(project, masterLanguage, languages.Values.ToArray());

            for (int r = 1; r < worksheet.Rows; r++)
            {
                string key = ((string)worksheet[r, 0]);
                if (string.IsNullOrWhiteSpace(key))
                {
                    continue;
                }

                key = key.Trim();
                bool isSpecialColumn = false;
                if (key.Contains("ns:"))
                {
                    currentNS       = key.Split(':')[1];
                    isSpecialColumn = true;
                }
                if (key.StartsWith("#"))
                {
                    isSpecialColumn = true;
                    labels          = key.Split(',').Select(label => label.Trim());
                }

                if (currentNS == project && !isSpecialColumn)
                {
                    if (string.IsNullOrWhiteSpace(key) && createMissingKeys)
                    {
                        string keyInspiration = commentColumn != 1 ? (string)worksheet[r, 1] : (string)worksheet[r, 2];
                        key = tp.KeyProposal(keyInspiration);
                    }
                    if (!string.IsNullOrWhiteSpace(key))
                    {
                        for (int c = 1; c < languages.Count + 1; c++)
                        {
                            var segment = new Segment(languages[c], key, (string)worksheet[r, c]);
                            segment.Tags = labels;

                            tp.Add(segment);

                            /*
                             * if (c != commentColumn)
                             * {
                             *      tp.Dicts[languages[c].ToLower()].Add(key, (string) worksheet[r, c]);
                             * }
                             * else
                             * {
                             *      tp.Comments.Add(key, (string) worksheet[r, c]);
                             * }*/
                        }
                    }
                }
            }

            return(tp);
        }
Exemple #14
0
        public static TranslationModule FromCSV(string file, string project, string masterLanguage, bool createMissingKeys = true)
        {
            // open the file "data.csv" which is a CSV file with headers
            TranslationModule tp = null;

            List <string> languages = new List <string>();

            using (CsvReader csv =
                       new CsvReader(new StreamReader(file), true))
            {
                int    fieldCount    = csv.FieldCount;
                string currentNS     = "";
                int    commentColumn = -1;

                string[] headers = csv.GetFieldHeaders();

                for (int c = 1; c < headers.Length; c++)
                {
                    string language = headers[c].ToLower();
                    if (language == "Comment")
                    {
                        commentColumn = c;
                        continue;
                    }

                    languages.Add(language);
                }
                tp = new TranslationModule(project, masterLanguage, languages.ToArray());

                while (csv.ReadNextRecord())
                {
                    string key = csv[0];
                    if (key.Contains("ns:"))
                    {
                        currentNS = key.Split(':')[1];
                    }

                    if (currentNS == project && !key.Contains("ns:"))
                    {
                        if (string.IsNullOrWhiteSpace(key) && createMissingKeys)
                        {
                            string keyInspiration = commentColumn != 1 ? csv[1] : csv[2];
                            key = tp.KeyProposal(keyInspiration);
                        }

                        if (!string.IsNullOrWhiteSpace(key))
                        {
                            for (int i = 1; i < fieldCount; i++)
                            {
                                if (i != commentColumn)
                                {
                                    //tp.Dicts[headers[i].ToLower()].Add(key, csv[i]);
                                    tp.Add(new Segment(headers[i].ToLower(), key, csv[i]));
                                }
                            }
                            if (commentColumn != -1)
                            {
                                foreach (var seg in tp.ByKey[key])
                                {
                                    seg.Comment = csv[commentColumn];
                                }
                            }
                        }
                    }
                }
            }

            return(tp);
        }
Exemple #15
0
        static int Main(string[] args)
        {
            var    options = new Options();
            string verb    = "";

            object subOptions = null;
            var    ps         = new CommandLine.ParserSettings();

            IUserCredentialApplication credential = new Auth.UserCredentialApplicationFromFile();

            CommandLine.Parser parser = new CommandLine.Parser(new CommandLine.ParserSettings {
                MutuallyExclusive = true,
                CaseSensitive     = false,
                HelpWriter        = Console.Error
            });

            parser = CommandLine.Parser.Default;

            if (parser.ParseArguments(args, options, (_verb, _subOptions) =>
            {
                verb = _verb;
                subOptions = _subOptions;
            }))
            {
                (subOptions as BaseOptions).CommandLine = string.Join(" ", args);

                switch (verb)
                {
                case "upload":
                {
                    var uploadOptions = subOptions as UploadOptions;

                    if (!uploadOptions.Batch && string.IsNullOrWhiteSpace(uploadOptions.ModuleName))
                    {
                        Console.Error.Write(options.GetUsage("upload"));
                        return(-1);
                    }

                    var drive    = new IO.Google.Drive(credential);
                    var uploader = new Uploader(drive);

                    uploader.Upload(uploadOptions);
                }
                break;

                case "download":
                {
                    var drive      = new IO.Google.Drive(credential);
                    var downloader = new Downloader(drive);

                    downloader.Download(subOptions as DownloadOptions);
                }
                break;

                case "diff":
                {
                    var diffOptions = subOptions as DiffOptions;
                    var drive       = new IO.Google.Drive(credential);

                    var folder = drive.FindFolder(diffOptions.GDriveFolder);
                    ITranslationModule localModule = IO.ResX.FromResX(diffOptions.ResXDir, diffOptions.ModuleName, "en");

                    var downloader = new Downloader(drive);
                    var xlsx       = downloader.DownloadXlsx(diffOptions);

                    var _remoteModule = IO.XlsX.FromXLSX(diffOptions.FileName, "en", xlsx);
                    _remoteModule.Name = diffOptions.ModuleName;

                    ITranslationModule remoteModule = _remoteModule.FilterByTags(diffOptions.Tags);

                    TranslationModuleDiff diff = localModule.Diff(remoteModule);

                    var diffJson = Newtonsoft.Json.JsonConvert.SerializeObject(diff, Newtonsoft.Json.Formatting.Indented);
                    Console.OutputEncoding = System.Text.Encoding.UTF8;
                    Console.Write(diffJson);

                    if (diffOptions.HTML)
                    {
                        var htmlLogger = new HTMLConcatLogger();
                        diff.Print(htmlLogger);
                        var fileName = System.IO.Path.GetTempFileName() + ".html";
                        System.IO.File.WriteAllText(fileName, htmlLogger.HTML);
                        System.Diagnostics.Process.Start(fileName);
                    }
                }
                break;

                case "patch":
                {
                    var patchOptions = subOptions as PatchOptions;

                    //read patch data from stdin
                    Console.InputEncoding = System.Text.Encoding.UTF8;
                    var    jsonReader = new System.Text.StringBuilder();
                    string s;
                    while ((s = Console.ReadLine()) != null)
                    {
                        jsonReader.AppendLine(s);
                    }
                    string json = jsonReader.ToString();

                    //string json = System.IO.File.ReadAllText(@".\diff");
                    var diff = Newtonsoft.Json.JsonConvert.DeserializeObject <TranslationModuleDiff>(json);

                    TranslationModule localModule = IO.ResX.FromResX(patchOptions.ResXDir, patchOptions.ModuleName, "en");
                    localModule.Patch(diff);

                    IO.ResX.ToResX(localModule, patchOptions.ResXDir);
                }
                break;
                }
            }

            return(0);
        }
 public TranslationManager(SQLiteConnection dbContext) : base(dbContext)
 {
     _module = new TranslationModule(DbContext);
 }
Exemple #17
0
 public TranslationManager(ApplicationDbContext dbContext) : base(dbContext)
 {
     _module = new TranslationModule(DbContext);
 }
Exemple #18
0
        public static Stream ToXLSX(TranslationModule project)
        {
            MemoryStream xlsStream = new MemoryStream();

            var worksheet = new MemoryWorksheet();

            Export.ToIWorksheet(project, worksheet);

            var ss = new Stylesheet();

            ss.CellStyleFormats          = new CellStyleFormats();
            ss.CellStyleFormats.Count    = 1;
            ss.CellStyles                = new CellStyles();
            ss.CellStyles.Count          = 1;
            ss.DifferentialFormats       = new DifferentialFormats();
            ss.DifferentialFormats.Count = 0;
            ss.TableStyles               = new TableStyles();
            ss.TableStyles.Count         = 0;

            using (SpreadsheetDocument myDoc = SpreadsheetDocument.Create(xlsStream, SpreadsheetDocumentType.Workbook))
            {
                WorkbookPart workbookPart = myDoc.AddWorkbookPart();
                //workbookPart.Workbook = new Workbook();
                WorkbookStylesPart stylesPart = workbookPart.AddNewPart <WorkbookStylesPart>();
                stylesPart.Stylesheet = ss;
                stylesPart.Stylesheet.Save();

                WorksheetPart worksheetPart = workbookPart.AddNewPart <WorksheetPart>();
                //SheetData sheetData = new SheetData();
                //worksheetPart.Worksheet = new Worksheet(sheetData);

                /*
                 * Sheets sheets = myDoc.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets());
                 * Sheet sheet = new Sheet()
                 * {
                 *      Id = myDoc.WorkbookPart.GetIdOfPart(worksheetPart),
                 *      SheetId = 1,
                 *      Name = "mySheet"
                 * };
                 * sheets.Append(sheet);
                 */
                OpenXmlWriter writer = OpenXmlWriter.Create(worksheetPart);


                writer.WriteStartElement(new Worksheet());
                writer.WriteStartElement(new SheetData());

                for (int row = 0; row < worksheet.Rows; row++)
                {
                    var oxa = new List <OpenXmlAttribute>();
                    // this is the row index
                    oxa.Add(new OpenXmlAttribute("r", null, row.ToString()));
                    writer.WriteStartElement(new Row(), oxa);

                    for (int col = 0; col < worksheet.Columns; col++)
                    {
                        oxa = new List <OpenXmlAttribute>();
                        // this is the data type ("t"), with CellValues.String ("str")
                        oxa.Add(new OpenXmlAttribute("t", null, "str"));
                        string val = worksheet[row, col] != null ? worksheet[row, col].ToString() : "";

                        //var cell = new Cell(new CellValue(val));
                        writer.WriteStartElement(new Cell(), oxa);

                        //Cell c = new Cell();
                        CellValue v = new CellValue(val);
                        writer.WriteElement(v);
                        //c.AppendChild(v);


                        //writer.WriteElement();
                        writer.WriteEndElement();
                    }
                    writer.WriteEndElement();
                }

                writer.WriteEndElement();
                writer.WriteEndElement();

                writer.Close();

                writer = OpenXmlWriter.Create(myDoc.WorkbookPart);
                writer.WriteStartElement(new Workbook());
                writer.WriteStartElement(new Sheets());

                // you can use object initialisers like this only when the properties
                // are actual properties. SDK classes sometimes have property-like properties
                // but are actually classes. For example, the Cell class has the CellValue
                // "property" but is actually a child class internally.
                // If the properties correspond to actual XML attributes, then you're fine.
                writer.WriteElement(new Sheet()
                {
                    Name    = "Sheet1",
                    SheetId = 1,
                    Id      = myDoc.WorkbookPart.GetIdOfPart(worksheetPart)
                });

                // this is for Sheets
                writer.WriteEndElement();
                // this is for Workbook
                writer.WriteEndElement();
                writer.Close();

                myDoc.Close();
            }

            return(xlsStream);
        }