Ejemplo n.º 1
0
        public static TranslationDict LoadFromXaml(string xamlFile, EnumLanguage lang)
        {
            var dict  = new TranslationDict();
            var p     = "x:Key=\"";
            var s1    = " xml:space=\"preserve\">";
            var lines = new List <string>();

            using (var sr = new StreamReader(xamlFile))
            {
                while (!sr.EndOfStream)
                {
                    var s = sr.ReadLine();
                    if (s.Length > p.Length)
                    {
                        var i = s.IndexOf(p);
                        if (i > 0)
                        {
                            i = i + p.Length;
                            var j = s.IndexOf('\"', i + 1);
                            if (j > 0)
                            {
                                var key = s.Substring(i, j - i);
                                i = j + s1.Length;
                                j = s.IndexOf('<');
                                var value = s.Substring(i, j - i);
                                dict.Append(key, lang, value);
                            }
                        }
                    }
                }
            }
            return(dict);
        }
Ejemplo n.º 2
0
        public static void ReplaceResx(TranslationDict dict, EnumLanguage lang, string resxFile, string destFile)
        {
            var xDoc = new XmlDocument();

            xDoc.Load(resxFile);
            var root     = xDoc.DocumentElement;
            var nodeList = root.GetElementsByTagName("data");

            foreach (var node in nodeList)
            {
                var e   = (XmlElement)node;
                var key = e.GetAttribute("name");
                if (!dict.ContainsKey(key))
                {
                    Console.WriteLine(key);
                    continue;
                }
                var children = e.GetElementsByTagName("value");
                foreach (var c in children)
                {
                    var value = ((XmlElement)c).InnerText;
                    ((XmlElement)c).InnerText = dict[key][lang];
                    break;
                }
            }
            xDoc.Save(destFile);
        }
Ejemplo n.º 3
0
        /// <param name="ki">keyIndex = 2</param>
        public static TranslationDict LoadFromXlsx(string xlsxFile, int ki, Dictionary <EnumLanguage, int> tMap)
        {
            var          dict  = new TranslationDict();
            var          wb    = new XLWorkbook(xlsxFile);
            IXLWorksheet sheet = wb.Worksheet(1);
            var          rows  = sheet.Rows();
            var          nr    = 0;

            foreach (var row in rows)
            {
                if (++nr > 1)
                {
                    var key = row.Cell(ki).Value.ToString().Trim();
                    if (!dict.ContainsKey(key))
                    {
                        dict.Add(new Translation(key));
                    }
                    foreach (var t in tMap)
                    {
                        var s = row.Cell(t.Value).Value.ToString().Trim();
                        dict[key].Add(t.Key, s);
                    }
                }
            }

            return(dict);
        }
        private void btnAppendTranslation_Click(object sender, RoutedEventArgs e)
        {
            lstTranslationDict.ItemsSource = null;

            var ofd = new OpenFileDialog();

            ofd.Filter      = "Supported Files|*.xlsx;*.xaml;*.resx|Excel Files|*.xlsx|XAML Files|*.xaml|Resource Files|*.resx";
            ofd.Multiselect = false;
            if (ofd.ShowDialog().Value)
            {
                var             filename = ofd.FileName;
                TranslationDict trans    = null;
                if (filename.EndsWith(".xlsx"))
                {
                    trans = StringResourceHelper.LoadFromXlsx(filename, KEY_INDEX, tMap);
                }
                else if (filename.EndsWith(".xaml"))
                {
                    trans = StringResourceHelper.LoadFromXaml(filename, transLang);
                }
                else if (filename.EndsWith(".resx"))
                {
                    trans = StringResourceHelper.LoadFromResx(filename, transLang);
                }
                else
                {
                    trans = new TranslationDict();
                }
                Dict.Combine(trans);
            }
            lstTranslationDict.ItemsSource = Dict.Keys;
        }
 public MainWindow()
 {
     InitializeComponent();
     Dict      = new TranslationDict();
     transLang = EnumLanguage.ZHCN;
     comboTranslation.ItemsSource   = tMap.Keys;
     comboSourceLang.ItemsSource    = tMap.Keys;
     comboTargetLang.ItemsSource    = tMap.Keys;
     comboTranslation.SelectedIndex = 0;
     comboSourceLang.SelectedIndex  = 0;
     comboTargetLang.SelectedIndex  = 0;
 }
Ejemplo n.º 6
0
        public static void ReplaceXaml(TranslationDict dict, EnumLanguage lang, string xamlFile, string destFile)
        {
            var p     = "x:Key=\"";
            var s1    = " xml:space=\"preserve\">";
            var s2    = "</sys:String>";
            var lines = new List <string>();

            using (var sr = new StreamReader(xamlFile))
            {
                while (!sr.EndOfStream)
                {
                    var s = sr.ReadLine();
                    if (p.Length > s.Length)
                    {
                        lines.Add(s);
                    }
                    else
                    {
                        var i = s.IndexOf(p);
                        if (i < 0)
                        {
                            lines.Add(s);
                        }
                        else
                        {
                            i = i + p.Length;
                            var j = s.IndexOf('\"', i + 1);
                            if (j > 0)
                            {
                                var key = s.Substring(i, j - i);
                                if (dict.ContainsKey(key))
                                {
                                    var c = s.Substring(0, j + 1) + s1 + dict[key][lang] + s2;
                                    lines.Add(c);
                                }
                                else
                                {
                                    lines.Add(s);
                                }
                            }
                            else
                            {
                                lines.Add(s);
                            }
                        }
                    }
                }
            }
            File.WriteAllLines(destFile, lines);
        }
Ejemplo n.º 7
0
        public void Combine(TranslationDict dict)
        {
            var keys = dict.Keys;

            foreach (var key in keys)
            {
                if (indexMap.ContainsKey(key))
                {
                    var index = indexMap[key];
                    Translations[index] = dict[key];
                }
                else
                {
                    indexMap.Add(key, Translations.Count);
                    Translations.Add(dict[key]);
                }
            }
            RaisePropertyChanged("Translations");
        }
Ejemplo n.º 8
0
        public static void SaveAsXlsx(TranslationDict dict, string xlsxFile)
        {
            var map      = new Dictionary <string, EnumLanguage>();
            var enumType = typeof(EnumLanguage);
            var descType = typeof(DescriptionAttribute);

            foreach (EnumLanguage lang in Enum.GetValues(enumType))
            {
                var fields = enumType.GetField(lang.ToString());
                var attr   = (fields.GetCustomAttributes(descType, false))[0] as DescriptionAttribute;
                map.Add(attr.Description, lang);
            }

            var wb    = new XLWorkbook();
            var name  = DateTime.Now.ToString("yyyyMMdd");
            var sheet = wb.AddWorksheet(name, 1);
            var row   = 1;
            var col   = 1;

            sheet.Cell(row, col).Value = "-";
            ++col;
            sheet.Cell(row, col).Value = "key";
            foreach (var v in map)
            {
                ++col;
                sheet.Cell(row, col).Value = v.Key;
            }
            foreach (var key in dict.Keys)
            {
                ++row;
                col = 2;
                sheet.Cell(row, col).Value = key;
                foreach (var v in map)
                {
                    ++col;
                    sheet.Cell(row, col).Value = dict[key][v.Value];
                }
            }
            wb.SaveAs(xlsxFile);
        }
Ejemplo n.º 9
0
        public static TranslationDict LoadFromResx(string resxFile, EnumLanguage lang)
        {
            var dict = new TranslationDict();
            var xDoc = new XmlDocument();

            xDoc.Load(resxFile);
            var root     = xDoc.DocumentElement;
            var nodeList = root.GetElementsByTagName("data");

            foreach (var node in nodeList)
            {
                var e        = (XmlElement)node;
                var key      = e.GetAttribute("name");
                var children = e.GetElementsByTagName("value");
                foreach (var c in children)
                {
                    var value = ((XmlElement)c).InnerText;
                    dict.Append(key, lang, value);
                    break;
                }
            }
            return(dict);
        }