using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Resources; using System.Collections; using System.Globalization; using System.IO; using System.Net; using System.Text.RegularExpressions; using System.Reflection; using System.Xml; namespace resedit { public partial class Form1 : Form { public Form1() { InitializeComponent(); List list = new List(); list.Add(""); CultureInfo[] temp = System.Globalization.CultureInfo.GetCultures(CultureTypes.AllCultures); foreach (CultureInfo cul in temp) { list.Add(cul.DisplayName + " " + cul.Name); } list.Sort(); comboBox1.DataSource = list; } private void Form1_Load(object sender, EventArgs e) { Assembly thisAssembly = Assembly.GetExecutingAssembly(); string[] test = Assembly.GetExecutingAssembly().GetManifestResourceNames(); foreach (string file in test) { Stream rgbxml = thisAssembly.GetManifestResourceStream( file); try { ResourceReader res = new ResourceReader(rgbxml); IDictionaryEnumerator dict = res.GetEnumerator(); while (dict.MoveNext()) { Console.WriteLine(" {0}: '{1}' (Type {2})", dict.Key, dict.Value, dict.Value.GetType().Name); if (dict.Key.ToString().EndsWith(".ToolTip") || dict.Key.ToString().EndsWith(".Text") || dict.Key.ToString().EndsWith("HeaderText") || dict.Key.ToString().EndsWith("ToolTipText")) { dataGridView1.Rows.Add(); dataGridView1.Rows[dataGridView1.RowCount - 1].Cells[colFile.Index].Value = System.IO.Path.GetFileName(file); dataGridView1.Rows[dataGridView1.RowCount - 1].Cells[colInternal.Index].Value = dict.Key.ToString(); dataGridView1.Rows[dataGridView1.RowCount - 1].Cells[colEnglish.Index].Value = dict.Value.ToString(); dataGridView1.Rows[dataGridView1.RowCount - 1].Cells[colOtherLang.Index].Value = dict.Value.ToString(); } } } catch {} } } private void button1_Click(object sender, EventArgs e) { FolderBrowserDialog fbd = new FolderBrowserDialog(); fbd.SelectedPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath); fbd.ShowDialog(); if (fbd.SelectedPath != "") { dataGridView1.Rows.Clear(); string[] files = System.IO.Directory.GetFiles(fbd.SelectedPath, "*.resx", System.IO.SearchOption.AllDirectories); string ci = ""; CultureInfo[] temp = System.Globalization.CultureInfo.GetCultures(CultureTypes.AllCultures); foreach (CultureInfo cul in temp) { if ((cul.DisplayName + " " + cul.Name) == comboBox1.Text) { Console.WriteLine(cul.Name); ci = cul.Name; } } foreach (string file in files) { // load only file of the slected lang if (!file.ToLower().Contains(ci.ToString().ToLower() + ".resx")) continue; // dont load and tralations if no lang selected if (file.ToLower().Contains("translation") && comboBox1.Text == "") continue; // must be a resx if (!file.ToLower().EndsWith(".resx")) continue; ResXResourceReader reader = new ResXResourceReader(file); Console.WriteLine(reader); reader.BasePath = fbd.SelectedPath + System.IO.Path.DirectorySeparatorChar +"Resources"; try { foreach (DictionaryEntry entry in reader) { if (entry.Key.ToString().EndsWith(".ToolTip") || entry.Key.ToString().EndsWith(".Text") || entry.Key.ToString().EndsWith("HeaderText") || entry.Key.ToString().EndsWith("ToolTipText")) { dataGridView1.Rows.Add(); dataGridView1.Rows[dataGridView1.RowCount - 1].Cells[colFile.Index].Value = System.IO.Path.GetFileName(file); dataGridView1.Rows[dataGridView1.RowCount - 1].Cells[colInternal.Index].Value = entry.Key.ToString(); dataGridView1.Rows[dataGridView1.RowCount - 1].Cells[colEnglish.Index].Value = entry.Value.ToString(); dataGridView1.Rows[dataGridView1.RowCount - 1].Cells[colOtherLang.Index].Value = entry.Value.ToString(); } } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } } } private void button2_Click(object sender, EventArgs e) { string ci = ""; CultureInfo[] temp = System.Globalization.CultureInfo.GetCultures(CultureTypes.AllCultures); foreach (CultureInfo cul in temp) { if ((cul.DisplayName + " " + cul.Name) == comboBox1.Text) { Console.WriteLine(cul.Name); ci = cul.Name; } } string fname = ""; ResXResourceWriter writer = null; System.IO.Directory.CreateDirectory("translation"); StreamWriter sw = new StreamWriter("translation/output.html"); sw.Write(""); foreach (DataGridViewRow row in dataGridView1.Rows) { try { if (row.Cells[colFile.Index].Value.ToString() != fname) { if (writer != null) writer.Close(); writer = new ResXResourceWriter("translation/" + row.Cells[colFile.Index].Value.ToString().Replace(".resources", "." + ci + ".resx")); } writer.AddResource(row.Cells[colInternal.Index].Value.ToString(), row.Cells[colOtherLang.Index].Value.ToString()); fname = row.Cells[colFile.Index].Value.ToString(); } catch { } try { sw.Write(""); } catch (Exception ex) { try { CustomMessageBox.Show("Failed to save " + row.Cells[colOtherLang.Index].Value.ToString() + " " + ex.ToString()); } catch { } } } if (writer != null) writer.Close(); sw.Write("
" + row.Cells[colFile.Index].Value.ToString() + "" + row.Cells[colInternal.Index].Value.ToString() + "" + row.Cells[colOtherLang.Index].Value.ToString() + "
"); sw.Close(); CustomMessageBox.Show("Saved"); } private void button3_Click(object sender, EventArgs e) { if (!File.Exists("translation/output.html")) { CustomMessageBox.Show("No existing translation has been done"); return; } StreamReader sr1 = new StreamReader("translation/output.html"); string file = sr1.ReadToEnd(); Regex regex = new Regex("([^<]*)([^<]*)([^<]*)",RegexOptions.Multiline | RegexOptions.IgnoreCase); MatchCollection matches = regex.Matches(file); int a = 0; foreach (Match mat in matches) { foreach (DataGridViewRow row in dataGridView1.Rows) { if (mat.Groups.Count == 4) { if (row.Cells[0].Value.ToString() == mat.Groups[1].Value.ToString() && row.Cells[1].Value.ToString() == mat.Groups[2].Value.ToString()) { row.Cells[3].Value = mat.Groups[3].Value.ToString(); a++; } } } } sr1.Close(); CustomMessageBox.Show("Modified "+a+" entries"); } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { string ci = ""; CultureInfo[] temp = System.Globalization.CultureInfo.GetCultures(CultureTypes.AllCultures); foreach (CultureInfo cul in temp) { if ((cul.DisplayName + " " + cul.Name) == comboBox1.Text) { Console.WriteLine(cul.Name); ci = cul.Name; } } Assembly thisAssembly; try { thisAssembly = Assembly.LoadFile(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + ci + Path.DirectorySeparatorChar + "ArdupilotMegaPlanner.resources.dll"); } catch { return; } string[] test = thisAssembly.GetManifestResourceNames(); Encoding unicode = Encoding.Unicode; foreach (string file in test) { Stream rgbxml = thisAssembly.GetManifestResourceStream( file); try { ResourceReader res = new ResourceReader(rgbxml); IDictionaryEnumerator dict = res.GetEnumerator(); while (dict.MoveNext()) { Console.WriteLine(" {0}: '{1}' (Type {2})", dict.Key, dict.Value, dict.Value.GetType().Name); string thing = (string)dict.Value; // dataGridView1.Rows[0].Cells[colOtherLang.Index].Value = dict.Value.ToString(); foreach (DataGridViewRow row in dataGridView1.Rows) { string t2 = file.Replace(ci + ".", ""); if (row.Cells[0].Value.ToString() == t2 && row.Cells[1].Value.ToString() == dict.Key.ToString()) { row.Cells[3].Value = thing; } } } } catch { } } CustomMessageBox.Show("Loaded Existing"); } } }