private void DataSetToXml(ResxData rd, string fileName)
        {
            Console.WriteLine(Messages.CreatingXml);
            using (XmlWriter xw = XmlWriter.Create(fileName, new XmlWriterSettings()
            {
                Encoding = new UTF8Encoding(false), Indent = true
            }
                                                   ))
            {
                int row = DATA_ROWS_OFFSET;

                xw.WriteStartElement("Translations");

                xw.WriteStartElement("Worksheet");
                xw.WriteAttributeString("Name", "Localize");

                DataView dw = rd.Resx.DefaultView;
                dw.Sort = "FileSource, Key";
                foreach (DataRowView drw in dw)
                {
                    ResxData.ResxRow r = (ResxData.ResxRow)drw.Row;
                    xw.WriteStartElement("Message");

                    xw.WriteElementString("ResourceFile", r.FileSource);
                    xw.WriteElementString("ResourceKey", r.Key);
                    xw.WriteElementString("Text", r.Value);
                    xw.WriteElementString("Comment", r.Comment);

                    xw.WriteStartElement("Translation");
                    foreach (ResxData.ResxLocalizedRow lr in r.GetResxLocalizedRows())
                    {
                        if (string.IsNullOrEmpty(lr.Value))
                        {
                            continue;
                        }

                        xw.WriteStartElement("Text");
                        xw.WriteAttributeString("Culture", lr.Culture);
                        xw.WriteValue(lr.Value);
                        xw.WriteEndElement();
                    }
                    xw.WriteEndElement();

                    xw.WriteEndElement();
                }

                xw.WriteEndElement();
                xw.WriteEndElement();
            }
        }
        private void ReadResxCult(string fileName, string projectRoot, ResxData rd, string[] cultureList, string[] excludeList, bool useFolderNamespacePrefix)
        {
            FileInfo    fi               = new FileInfo(fileName);
            CultureInfo cultureInfo      = GetResxCultureSpecific(fileName);
            string      fileRelativePath = fi.FullName.Remove(0, AddBS(projectRoot).Length);
            string      fileDestination;

            if (useFolderNamespacePrefix)
            {
                fileDestination = GetNamespacePrefix(AddBS(projectRoot), AddBS(fi.DirectoryName)) + fi.Name;
            }
            else
            {
                fileDestination = fi.Name;
            }
            ResXResourceReader reader = new ResXResourceReader(fileName);

            reader.BasePath = fi.DirectoryName;

            try
            {
                #region read
                foreach (DictionaryEntry de in reader)
                {
                    if (de.Value is string)
                    {
                        string key     = (string)de.Key;
                        bool   exclude = false;
                        foreach (string e in excludeList)
                        {
                            if (key.EndsWith(e))
                            {
                                exclude = true;
                                break;
                            }
                        }
                        if (!exclude)
                        {
                            string             strWhere = String.Format("FileSource ='{0}' AND Key='{1}'", fileRelativePath.Replace("." + cultureInfo.Name, ""), de.Key.ToString());
                            ResxData.ResxRow[] rows     = (ResxData.ResxRow[])rd.Resx.Select(strWhere);
                            if ((rows == null) || (rows.Length == 0))
                            {
                                continue;
                            }

                            ResxData.ResxRow row = rows[0];
                            foreach (ResxData.ResxLocalizedRow lr in row.GetResxLocalizedRows())
                            {
                                if (lr.Culture == cultureInfo.Name)
                                {
                                    row.BeginEdit();
                                    string value = de.Value.ToString();
                                    // update row
                                    if (value.Contains("\r") || value.Contains("\n"))
                                    {
                                        value = value.Replace("\r", "\\r").Replace("\n", "\\n");
                                    }
                                    lr.Value = value;
                                    row.EndEdit();
                                }
                            }
                        }
                    }
                }
                #endregion
            }
            catch (Exception ex)
            {
                Console.WriteLine(string.Format(Messages.ErrorReadingFileDetailException, fileName, ex.Message), "Information");
            }
            reader.Close();
        }
        private void DataSetToXls(ResxData rd, string fileName)
        {
            Console.WriteLine(Messages.CreatingSpreadsheet);
            using (ExcelPackage app = new ExcelPackage(new FileInfo(fileName)))
            {
                app.Workbook.Worksheets.Add("WorkSheet1");

                ExcelWorksheets sheets = app.Workbook.Worksheets;
                ExcelWorksheet  sheet  = sheets[1];
                sheet.Name = "Localize";

                // <Define Basic Columns>
                sheet.Cells[TITLE_ROW, COL1_IDX__RESX_SRC].Value  = "Resx source";
                sheet.Cells[TITLE_ROW, COL2_IDX__RESX_DEST].Value = "Resx Name";
                sheet.Cells[TITLE_ROW, COL3_IDX__KEY].Value       = "Key";
                sheet.Cells[TITLE_ROW, COL4_IDX__VALUE].Value     = "Value";
                sheet.Cells[TITLE_ROW, COL5_IDX__COMMENT].Value   = "Comment";
                // </Define Basic Columns>

                string[] cultures = GetCulturesFromDataSet(rd);

                if (cultures == null)
                {
                    return;
                }

                int index = DATA_COLS_OFFSET;
                foreach (string cult in cultures)
                {
                    CultureInfo ci = new CultureInfo(cult);
                    sheet.Cells[TITLE_ROW, index].Value   = ci.DisplayName;
                    sheet.Cells[CULTURE_ROW, index].Value = ci.Name;
                    index++;
                }

                DataView dw = rd.Resx.DefaultView;
                dw.Sort = "FileSource, Key";

                int row = DATA_ROWS_OFFSET;
                foreach (DataRowView drw in dw)
                {
                    ResxData.ResxRow r = (ResxData.ResxRow)drw.Row;

                    if (r.Value.StartsWith("="))
                    {
                        r.Value = "!" + r.Value;
                    }

                    ResxData.ResxLocalizedRow[] rows = r.GetResxLocalizedRows();

#if EMPTYRES
                    bool hasAlreadyTranslate = false;
                    bool emptyResource       = false;
#endif

                    foreach (ResxData.ResxLocalizedRow lr in rows)
                    {
                        string culture = lr.Culture;

                        int col = Array.IndexOf(cultures, culture);
                        if (lr.Value.StartsWith("="))
                        {
                            lr.Value = "!" + lr.Value;
                        }

                        if (col >= 0 && r.Value.Length > 0 && lr.Value.Length > 0)
                        {
#if EMPTYRES
                            hasAlreadyTranslate = true;
#endif
                            sheet.Cells[row, col + DATA_COLS_OFFSET].Value = lr.Value;
                        }
                        else if (col >= 0 && r.Value.Length == 0)
                        {
                            //Nothing to translate
#if EMPTYRES
                            hasAlreadyTranslate = true;
                            emptyResource       = true;
#endif
                        }
                        else if (col >= 0)
                        {
                            sheet.Cells[row, col + DATA_COLS_OFFSET].Value = lr.Value;
                        }
                    }

#if EMPTYRES
                    if (!emptyResource)
                    {
#endif
                    sheet.Cells[row, COL1_IDX__RESX_SRC].Value  = r.FileSource;
                    sheet.Cells[row, COL2_IDX__RESX_DEST].Value = r.FileDestination;
                    sheet.Cells[row, COL3_IDX__KEY].Value       = r.Key;
                    sheet.Cells[row, COL4_IDX__VALUE].Value     = r.Value;
                    sheet.Cells[row, COL5_IDX__COMMENT].Value   = r.Comment;

                    row++;
#if EMPTYRES
                }
#endif
                }

                sheet.Cells["A1:Z1"].AutoFitColumns();

                // Save the Workbook and quit Excel.
                app.Save();
            }
        }
示例#4
0
        private void DataSetToXls(ResxData rd, string fileName)
        {
            Excel.Application app = new Excel.Application();
            Excel.Workbook    wb  = app.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);

            Excel.Sheets    sheets = wb.Worksheets;
            Excel.Worksheet sheet  = (Excel.Worksheet)sheets.get_Item(1);
            sheet.Name = "Localize";

            sheet.Cells[1, 1] = "Resx source";
            sheet.Cells[1, 2] = "Resx Name";
            sheet.Cells[1, 3] = "Key";
            sheet.Cells[1, 4] = "Value";

            string[] cultures = GetCulturesFromDataSet(rd);

            int index = 5;

            foreach (string cult in cultures)
            {
                CultureInfo ci = new CultureInfo(cult);

                sheet.Cells[1, index] = ci.DisplayName;
                sheet.Cells[2, index] = ci.Name;
                index++;
            }

            DataView dw = rd.Resx.DefaultView;

            dw.Sort = "FileSource, Key";

            int row = 3;

            foreach (DataRowView drw in dw)
            {
                ResxData.ResxRow r = (ResxData.ResxRow)drw.Row;

                sheet.Cells[row, 1] = r.FileSource;
                sheet.Cells[row, 2] = r.FileDestination;
                sheet.Cells[row, 3] = r.Key;
                sheet.Cells[row, 4] = r.Value;

                ResxData.ResxLocalizedRow[] rows = r.GetResxLocalizedRows();

                foreach (ResxData.ResxLocalizedRow lr in rows)
                {
                    string culture = lr.Culture;

                    int col = Array.IndexOf(cultures, culture);

                    if (col >= 0)
                    {
                        sheet.Cells[row, col + 5] = lr.Value;
                    }
                }

                row++;
            }

            sheet.Cells.get_Range("A1", "Z1").EntireColumn.AutoFit();

            // Save the Workbook and quit Excel.
            wb.SaveAs(fileName, m_objOpt, m_objOpt,
                      m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange,
                      m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);
            wb.Close(false, m_objOpt, m_objOpt);
            app.Quit();
        }