public void ExportPO() { Po poExport = new Po { Header = new PoHeader("Black Rock Shooter The Game", "TraduSquare.es", "es") { LanguageTeam = "TraduSquare", } }; for (int i = 0; i < this.Text.Count; i++) { string sentence = this.Text[i]; if (string.IsNullOrEmpty(sentence)) { sentence = "<!empty>"; } poExport.Add(new PoEntry(this.RemoveButtons(sentence)) { Context = i.ToString() }); } poExport.ConvertTo <BinaryFormat>().Stream.WriteTo(this.FileName + ".po"); }
public void ExportPO() { Po poExport = new Po { Header = new PoHeader("Jump Ultimate Stars", "TranScene", "es") { LanguageTeam = "TranScene", } }; int i = 0; foreach (KeyValuePair <string, int> entry in this.Text) { string sentence = entry.Key; if (string.IsNullOrEmpty(sentence)) { sentence = "<!empty>"; } poExport.Add(new PoEntry(sentence) { Context = i.ToString() }); } poExport.ConvertTo <BinaryFormat>().Stream.WriteTo(this.FileName + ".po"); }
private void GuardarToolStripMenuItem_Click(object sender, EventArgs e) { Po poExport = new Po { Header = new PoHeader("MetalMax", "TraduSquare", "en") { LanguageTeam = "TraduSquare", } }; poExport.Header.Extensions.Add("1", "Type1"); for (int i = 0; i < variables.textoTraducido.Length; i++) { string sentenceOG = variables.textoOriginal[i]; string sentenceTranslated = variables.textoTraducido[i]; string contexto = variables.contexto[i]; if (string.IsNullOrEmpty(sentenceOG)) { sentenceOG = "<!empty>"; } if (string.IsNullOrEmpty(sentenceTranslated)) { sentenceTranslated = "<!empty>"; } poExport.Add(new PoEntry() { Context = contexto, Original = sentenceOG, Translated = sentenceTranslated }); } poExport.ConvertTo <BinaryFormat>().Stream.WriteTo("export.po"); }
public static void POWrite(Po POHeader, string file) { POHeader.ConvertTo <BinaryFormat>().Stream.WriteTo(file + ".po"); }
static void Main(string[] args) { { Console.WriteLine("TEXT2PO - A simple converter for the text from the games Lord of Magna and Rune Factory 4 by Darkmet98."); Console.WriteLine("Massive thanks to Pleonex, Leeg and Megaflan for all."); if (args.Length < 2) { System.Console.WriteLine("Usage: TEXT2PO <file> <game (-rune or -lord)>"); System.Console.WriteLine("Example: TEXT2PO.exe msg.nxtxt -lord"); return; } for (int i = 0; i < args.Length; i++) { if (args[i] == "-rune") { rune = true; } if (args[i] == "-lord") { lord = true; } } using (BinaryReader reader = new BinaryReader(File.Open(args[0], FileMode.Open))) { if (lord == true) { Po po = new Po { Header = new PoHeader("Lord Of Magna Maiden Heaven", "glowtranslations <*****@*****.**>") { Language = "es-ES", LanguageTeam = "Glowtranslations", } }; string result = ""; Int32 magic = reader.ReadInt32(); Int32 count = reader.ReadInt32(); Int32 size = reader.ReadInt32(); Int32 position = reader.ReadInt32(); List <int> size2 = new List <int>(); List <int> text = new List <int>(); for (int i = 0; i < count - 1; i++) { size = reader.ReadInt32(); position = reader.ReadInt32(); size2.Add(size); text.Add(position); } for (int i = 0; i < count - 1; i++) { reader.BaseStream.Position = text[i]; //El puto flan byte[] array = reader.ReadBytes(size2[i]); result = Encoding.Unicode.GetString(array); po.Add(new PoEntry(result) { Context = i.ToString() }); } po.ConvertTo <BinaryFormat>().Stream.WriteTo(args[0] + ".po"); Console.WriteLine("The file is converted."); } if (rune == true) { Po po = new Po { Header = new PoHeader("Rune Factory 4", "glowtranslations <*****@*****.**>") { Language = "es-ES", LanguageTeam = "Glowtranslations", } }; string result = ""; Int32 magic = reader.ReadInt32(); Int32 count = reader.ReadInt32(); Int32 size = reader.ReadInt32(); Int32 position = reader.ReadInt32(); List <int> size2 = new List <int>(); List <int> text = new List <int>(); for (int i = 0; i < count - 1; i++) { size = reader.ReadInt32(); position = reader.ReadInt32(); size2.Add(size); text.Add(position); } for (int i = 0; i < count - 1; i++) { reader.BaseStream.Position = text[i]; //El puto flan byte[] array = reader.ReadBytes(size2[i]); result = Encoding.UTF8.GetString(array); po.Add(new PoEntry(result) { Context = i.ToString() }); } po.ConvertTo <BinaryFormat>().Stream.WriteTo(args[0] + ".po"); Console.WriteLine("The file is converted."); } } } }
static void Main(string[] args) { { Console.WriteLine("TEXT2PO 1.2 - A simple converter for the text from the games Lord of Magna and Rune Factory 4 by Darkmet98."); Console.WriteLine("Massive thanks to Pleonex, Leeg and Megaflan for all."); if (args.Length != 3 && args.Length != 2) { System.Console.WriteLine("Usage: TEXT2PO <mode> <file1> <file2>"); System.Console.WriteLine("Mode for Rune Factory 4: -exportrune (export to po)/-importrune (import po)/-transrune(import the translation from another file)/-exportrunefix(export and fix bad newlines from another programs)"); System.Console.WriteLine("Mode for Lord Of Magna Maiden Heaven: -exportlord (export to po)/-importlord (import po)/-translord(import the translation from another file)/-exportlordfix(export and fix bad newlines from another programs)"); System.Console.WriteLine(""); System.Console.WriteLine("Example 1: TEXT2PO.exe -exportlord msg.nxtxt"); System.Console.WriteLine("Example 2: TEXT2PO.exe -importlord msg.nxtxt.po"); System.Console.WriteLine("Example 3: TEXT2PO.exe -translord msg.nxtxt.po msgESP.nxtxt"); System.Console.WriteLine("Example 4: TEXT2PO.exe -exportlordfix msgESP.nxtxt"); return; } List <String> Filestrings = new List <String>(); List <String> Postrings = new List <String>(); List <int> stringsizes = new List <int>(); List <int> stringpositions = new List <int>(); string result = ""; Int32 magic; Int32 count; Int32 size; Int32 position; Int32 textsize; int i = 0; switch (args[0]) { case "-exportlord": using (BinaryReader reader = new BinaryReader(File.Open(args[1], FileMode.Open))) { Po poexport = new Po { Header = new PoHeader("Lord Of Magna Maiden Heaven", "*****@*****.**", "es") { LanguageTeam = "Glowtranslations", } }; magic = reader.ReadInt32(); count = reader.ReadInt32(); Console.WriteLine("Exporting..."); for (i = 0; i < count; i++) { size = reader.ReadInt32(); position = reader.ReadInt32(); stringsizes.Add(size); stringpositions.Add(position); } for (i = 0; i < count; i++) { reader.BaseStream.Position = stringpositions[i]; //El puto flan byte[] array = reader.ReadBytes(stringsizes[i]); result = Encoding.Unicode.GetString(array); if (string.IsNullOrEmpty(result)) { result = "<!empty>"; } poexport.Add(new PoEntry(result) { Context = i.ToString() }); } poexport.ConvertTo <BinaryFormat>().Stream.WriteTo(args[1] + ".po"); Console.WriteLine("The file is exported."); } break; case "-exportlordfix": using (BinaryReader reader = new BinaryReader(File.Open(args[1], FileMode.Open))) { Po poexport = new Po { Header = new PoHeader("Lord Of Magna Maiden Heaven", "*****@*****.**", "es") { LanguageTeam = "Glowtranslations", } }; magic = reader.ReadInt32(); count = reader.ReadInt32(); Console.WriteLine("Exporting..."); for (i = 0; i < count; i++) { size = reader.ReadInt32(); position = reader.ReadInt32(); stringsizes.Add(size); stringpositions.Add(position); } for (i = 0; i < count; i++) { reader.BaseStream.Position = stringpositions[i]; //El puto flan byte[] array = reader.ReadBytes(stringsizes[i]); result = Encoding.Unicode.GetString(array); result = result.Replace("\r", ""); if (string.IsNullOrEmpty(result)) { result = "<!empty>"; } poexport.Add(new PoEntry(result) { Context = i.ToString() }); } poexport.ConvertTo <BinaryFormat>().Stream.WriteTo(args[1] + ".po"); Console.WriteLine("The file is exported."); } break; case "-exportrune": using (BinaryReader reader = new BinaryReader(File.Open(args[1], FileMode.Open))) { Po poexport = new Po { Header = new PoHeader("Rune Factory 4", "*****@*****.**", "es") { LanguageTeam = "Glowtranslations", } }; magic = reader.ReadInt32(); count = reader.ReadInt32(); Console.WriteLine("Exporting..."); for (i = 0; i < count; i++) { size = reader.ReadInt32(); position = reader.ReadInt32(); stringsizes.Add(size); stringpositions.Add(position); } for (i = 0; i < count; i++) { reader.BaseStream.Position = stringpositions[i]; //El puto flan byte[] array = reader.ReadBytes(stringsizes[i]); result = Encoding.UTF8.GetString(array); if (string.IsNullOrEmpty(result)) { result = "<!empty>"; } poexport.Add(new PoEntry(result) { Context = i.ToString() }); } poexport.ConvertTo <BinaryFormat>().Stream.WriteTo(args[1] + ".po"); Console.WriteLine("The file is exported."); } break; case "-exportrunefix": using (BinaryReader reader = new BinaryReader(File.Open(args[1], FileMode.Open))) { Po poexport = new Po { Header = new PoHeader("Rune Factory 4", "*****@*****.**", "es") { LanguageTeam = "Glowtranslations", } }; magic = reader.ReadInt32(); count = reader.ReadInt32(); Console.WriteLine("Exporting..."); for (i = 0; i < count; i++) { size = reader.ReadInt32(); position = reader.ReadInt32(); stringsizes.Add(size); stringpositions.Add(position); } for (i = 0; i < count; i++) { reader.BaseStream.Position = stringpositions[i]; //El puto flan byte[] array = reader.ReadBytes(stringsizes[i]); result = Encoding.UTF8.GetString(array); result = result.Replace("\r", ""); if (string.IsNullOrEmpty(result)) { result = "<!empty>"; } poexport.Add(new PoEntry(result) { Context = i.ToString() }); } poexport.ConvertTo <BinaryFormat>().Stream.WriteTo(args[1] + ".po"); Console.WriteLine("The file is exported."); } break; case "-importlord": DataStream inputLord = new DataStream(args[1], FileOpenMode.Read); BinaryFormat binaryLord = new BinaryFormat(inputLord); Po poLord = binaryLord.ConvertTo <Po>(); inputLord.Dispose(); Console.WriteLine("Importing..."); using (BinaryWriter writer = new BinaryWriter(File.Open(args[1] + ".exported", FileMode.Create))) { writer.Write(0x54584554); writer.Write(poLord.Entries.Count); for (i = 0; i < poLord.Entries.Count * 2; i++) { writer.Write(0x00000000); } foreach (var entry in poLord.Entries) { string potext = string.IsNullOrEmpty(entry.Translated) ? entry.Original : entry.Translated; if (potext == "<!empty>") { potext = string.Empty; } stringpositions.Add((int)writer.BaseStream.Position); byte[] stringtext = Encoding.Unicode.GetBytes(potext += "\0"); textsize = stringtext.Length; stringsizes.Add(textsize); writer.Write(stringtext); } writer.BaseStream.Position = 0x8; int countposition = 0x8 * poLord.Entries.Count + 1; for (i = 0; i < poLord.Entries.Count; i++) { writer.Write(stringsizes[i] - 2); writer.Write(stringpositions[i]); } Console.WriteLine("The file is imported."); } break; case "-importrune": Console.WriteLine("Importing..."); DataStream input = new DataStream(args[1], FileOpenMode.Read); BinaryFormat binary = new BinaryFormat(input); Po po = binary.ConvertTo <Po>(); input.Dispose(); using (BinaryWriter writer = new BinaryWriter(File.Open(args[1] + ".exported", FileMode.Create))) { writer.Write(0x54584554); writer.Write(po.Entries.Count); for (i = 0; i < po.Entries.Count * 2; i++) { writer.Write(0x00000000); } foreach (var entry in po.Entries) { string potext = string.IsNullOrEmpty(entry.Translated) ? entry.Original : entry.Translated; if (potext == "<!empty>") { potext = string.Empty; } stringpositions.Add((int)writer.BaseStream.Position); byte[] stringtext = Encoding.UTF8.GetBytes(potext += "\0"); textsize = stringtext.Length; stringsizes.Add(textsize); writer.Write(stringtext); } writer.BaseStream.Position = 0x8; int countposition = 0x8 * po.Entries.Count + 1; for (i = 0; i < po.Entries.Count; i++) { writer.Write(stringsizes[i] - 1); writer.Write(stringpositions[i]); } Console.WriteLine("The file is imported."); } break; case "-transrune": using (BinaryReader reader = new BinaryReader(File.Open(args[2], FileMode.Open))) { Console.WriteLine("Importing old translation..."); magic = reader.ReadInt32(); count = reader.ReadInt32(); for (i = 0; i < count; i++) { size = reader.ReadInt32(); position = reader.ReadInt32(); stringsizes.Add(size); stringpositions.Add(position); } for (i = 0; i < count; i++) { reader.BaseStream.Position = stringpositions[i]; //El puto flan byte[] array = reader.ReadBytes(stringsizes[i]); result = Encoding.UTF8.GetString(array); Filestrings.Add(result); } } Console.WriteLine("Old translation preloaded."); DataStream inputimp = new DataStream(args[1], FileOpenMode.Read); BinaryFormat binaryimp = new BinaryFormat(inputimp); Po poimp = binaryimp.ConvertTo <Po>(); inputimp.Dispose(); Console.WriteLine("Importing original translation..."); foreach (var entry in poimp.Entries) { Postrings.Add(entry.Original); } Console.WriteLine("Original text preloaded."); Po poexport1 = new Po { Header = new PoHeader("Rune Factory 4", "*****@*****.**", "es") { LanguageTeam = "Glowtranslations", } }; for (i = 0; i < count; i++) { PoEntry entry = new PoEntry(); Console.WriteLine("Checking and comparing line " + i + " from " + count + " lines"); if (string.IsNullOrEmpty(Filestrings[i])) { Filestrings[i] = "<!empty>"; } if (Filestrings[i] == Postrings[i]) { entry.Context = i.ToString(); entry.Original = Postrings[i]; } else { entry.Context = i.ToString(); entry.Translated = Filestrings[i]; entry.Original = Postrings[i]; } poexport1.Add(entry); //poexport1.ConvertTo<BinaryFormat>().Stream.WriteTo(args[1] + "(exported)" + ".po"); //Pasta code } using (var poStream = poexport1.ConvertTo <BinaryFormat>()) poStream.Stream.WriteTo(args[1] + "(exported).po"); //Thanks pleonex Console.WriteLine("Finished."); break; case "-translord": using (BinaryReader reader = new BinaryReader(File.Open(args[2], FileMode.Open))) { Console.WriteLine("Importing old translation..."); magic = reader.ReadInt32(); count = reader.ReadInt32(); for (i = 0; i < count; i++) { size = reader.ReadInt32(); position = reader.ReadInt32(); stringsizes.Add(size); stringpositions.Add(position); } for (i = 0; i < count; i++) { reader.BaseStream.Position = stringpositions[i]; //El puto flan byte[] array = reader.ReadBytes(stringsizes[i]); result = Encoding.Unicode.GetString(array); Filestrings.Add(result); } } Console.WriteLine("Old translation preloaded."); DataStream inputimp1 = new DataStream(args[1], FileOpenMode.Read); BinaryFormat binaryimp1 = new BinaryFormat(inputimp1); Po poimp1 = binaryimp1.ConvertTo <Po>(); inputimp1.Dispose(); Console.WriteLine("Importing original translation..."); foreach (var entry in poimp1.Entries) { Postrings.Add(entry.Original); } Console.WriteLine("Original text preloaded."); Po poexport2 = new Po { Header = new PoHeader("Rune Factory 4", "*****@*****.**", "es") { LanguageTeam = "Glowtranslations", } }; for (i = 0; i < count; i++) { PoEntry entrada = new PoEntry(); Console.WriteLine("Checking and comparing line " + i + " from " + count + " lines"); if (string.IsNullOrEmpty(Filestrings[i])) { Filestrings[i] = "<!empty>"; } if (Filestrings[i] == Postrings[i]) { entrada.Context = i.ToString(); entrada.Original = Postrings[i]; } else { entrada.Context = i.ToString(); entrada.Translated = Filestrings[i]; entrada.Original = Postrings[i]; } poexport2.Add(entrada); } //poexport2.ConvertTo<BinaryFormat>().Stream.WriteTo(args[1] + "(exported)" + ".po"); //Pasta code using (var poStream = poexport2.ConvertTo <BinaryFormat>()) poStream.Stream.WriteTo(args[1] + "(exported).po"); //Thanks pleonex Console.WriteLine("Finished."); break; } } }
public void POWrite(string file) { poYarhl.ConvertTo <BinaryFormat>().Stream.WriteTo(file + ".po"); }
static void Main(string[] args) { Console.WriteLine("Persona2PO 1.0 - A simple converter for the txt files (PersonaEditor text file) to po from the games Persona 3 and Persona 4 by Darkmet98."); Console.WriteLine("Thanks to Pleonex for the help and Yarhl libraries."); if (args.Length != 2) { Console.WriteLine("USAGE: [mono] persona2po.exe file -exportP3/-exportP4/import/generatenames/split"); Console.WriteLine("Export to Po example: persona2po.exe E101_001.txt -exportP4 "); Console.WriteLine("Generate the dictionary for names: Persona2po.exe alltxts.txt -generatenames"); Console.WriteLine("Import to txt from the Po: persona2po.exe E101_001.txt.po -import "); Console.WriteLine("Split the txt: persona2po.exe E101.txt -split "); Console.WriteLine("Read first the readme file before use this program!"); Environment.Exit(-1); } switch (args[1]) { case "-exportP4": Po po = new Po { Header = new PoHeader("Persona 4", "*****@*****.**", "es") { LanguageTeam = "Glowtranslations", } }; string[] textfile = System.IO.File.ReadAllLines(args[0]); foreach (string line in textfile) { string[] lineFields = line.Split('\t'); if (lineFields.Length < 4) { Console.WriteLine("FAAAAAAILLL: {0}", line, args[0]); //It's that a Pleonex's reference!!!!???? } foreach (string part in lineFields) { PoEntry entry = new PoEntry(); if (lineFields.Length == 6) { entry.Context = $"{lineFields[0]}:{lineFields[1]}:{lineFields[2]}"; if (string.IsNullOrEmpty(lineFields[3])) { lineFields[3] = "<!empty>"; } if (string.IsNullOrWhiteSpace(lineFields[3])) { lineFields[3] = "Pensamiento del protagonista"; } lineFields[3] = lineFields[3].Replace("�", "<NCHAR>"); entry.ExtractedComments = lineFields[3]; if (string.IsNullOrWhiteSpace(lineFields[4])) { lineFields[4] = "[CUADRO DE TEXTO EN BLANCO]"; } lineFields[4] = lineFields[4].Replace("{0A}", "\n"); lineFields[4] = lineFields[4].Replace("{F1 82}", "{PROTAGONISTA}"); entry.Original = lineFields[4]; po.Add(entry); } if (lineFields.Length >= 7) { entry.Context = $"{lineFields[0]}:{lineFields[1]}:{lineFields[2]}"; if (string.IsNullOrEmpty(lineFields[3])) { lineFields[3] = "<!empty>"; } if (string.IsNullOrWhiteSpace(lineFields[3])) { lineFields[3] = "Pensamiento del protagonista"; } lineFields[3] = lineFields[3].Replace("�", "<NCHAR>"); entry.ExtractedComments = lineFields[3]; if (string.IsNullOrWhiteSpace(lineFields[4])) { lineFields[4] = "[CUADRO DE TEXTO EN BLANCO]"; } lineFields[4] = lineFields[4].Replace("{0A}", "\n"); lineFields[4] = lineFields[4].Replace("{F1 82}", "{PROTAGONISTA}"); lineFields[6] = lineFields[6].Replace("{0A}", "\n"); lineFields[6] = lineFields[6].Replace("{F1 82}", "{PROTAGONISTA}"); entry.Original = lineFields[4]; entry.Translated = lineFields[6]; po.Add(entry); } } } po.ConvertTo <BinaryFormat>().Stream.WriteTo(args[0] + ".po"); break; case "-exportP3": po = new Po { Header = new PoHeader("Persona 3", "*****@*****.**", "es") { LanguageTeam = "Traducciones del Tío Victor", } }; textfile = System.IO.File.ReadAllLines(args[0]); foreach (string line in textfile) { string[] lineFields = line.Split('\t'); if (lineFields.Length < 4) { Console.WriteLine("FAAAAAAILLL: {0}", line, args[0]); //It's that a Pleonex's reference!!!!???? } foreach (string part in lineFields) { PoEntry entry = new PoEntry(); if (lineFields.Length == 6) { entry.Context = $"{lineFields[0]}:{lineFields[1]}:{lineFields[2]}"; if (string.IsNullOrEmpty(lineFields[3])) { lineFields[3] = "<!empty>"; } if (string.IsNullOrWhiteSpace(lineFields[3])) { lineFields[3] = "Pensamiento del protagonista"; } lineFields[3] = lineFields[3].Replace("�", "<NCHAR>"); entry.ExtractedComments = lineFields[3]; if (string.IsNullOrWhiteSpace(lineFields[4])) { lineFields[4] = "[CUADRO DE TEXTO EN BLANCO]"; } lineFields[4] = lineFields[4].Replace("{0A}", "\n"); lineFields[4] = lineFields[4].Replace("{F1 0C}", "{Nombre y apellidos prota}"); lineFields[4] = lineFields[4].Replace("{F1 0B}", "{Apellido prota}"); lineFields[4] = lineFields[4].Replace("{F1 0A}", "{Nombre prota}"); entry.Original = lineFields[4]; po.Add(entry); } if (lineFields.Length >= 7) { entry.Context = $"{lineFields[0]}:{lineFields[1]}:{lineFields[2]}"; if (string.IsNullOrEmpty(lineFields[3])) { lineFields[3] = "<!empty>"; } if (string.IsNullOrWhiteSpace(lineFields[3])) { lineFields[3] = "Pensamiento del protagonista"; } lineFields[3] = lineFields[3].Replace("�", "<NCHAR>"); entry.ExtractedComments = lineFields[3]; if (string.IsNullOrWhiteSpace(lineFields[4])) { lineFields[4] = "[CUADRO DE TEXTO EN BLANCO]"; } lineFields[4] = lineFields[4].Replace("{0A}", "\n"); lineFields[4] = lineFields[4].Replace("{F1 0C}", "{Nombre y apellidos prota}"); lineFields[4] = lineFields[4].Replace("{F1 0B}", "{Apellido prota}"); lineFields[4] = lineFields[4].Replace("{F1 0A}", "{Nombre prota}"); lineFields[6] = lineFields[6].Replace("{0A}", "\n"); lineFields[6] = lineFields[6].Replace("{F1 0C}", "{Nombre y apellidos prota}"); lineFields[6] = lineFields[6].Replace("{F1 0B}", "{Apellido prota}"); lineFields[6] = lineFields[6].Replace("{F1 0A}", "{Nombre prota}"); entry.Original = lineFields[4]; entry.Translated = lineFields[6]; po.Add(entry); } } } po.ConvertTo <BinaryFormat>().Stream.WriteTo(args[0] + ".po"); break; case "-generatenames": po = new Po { Header = new PoHeader("Persona names", "*****@*****.**", "es") { LanguageTeam = "Glowtranslations", } }; string[] textnames = System.IO.File.ReadAllLines(args[0]); foreach (string line in textnames) { string[] lineFields = line.Split('\t'); if (lineFields.Length < 4) { Console.WriteLine("FAAAAAAILLL: {0}", line, args[0]); //It's that a Pleonex's reference!!!!???? } foreach (string part in lineFields) { PoEntry entry = new PoEntry(); if (string.IsNullOrEmpty(lineFields[3])) { lineFields[3] = "<!empty>"; } if (string.IsNullOrWhiteSpace(lineFields[3])) { lineFields[3] = "Pensamiento del protagonista"; } lineFields[3] = lineFields[3].Replace("�", "<NCHAR>"); entry.Original = lineFields[3]; po.Add(entry); } } po.ConvertTo <BinaryFormat>().Stream.WriteTo("names.po"); break; case "-import": DataStream input = new DataStream(args[0], FileOpenMode.Read); BinaryFormat binary = new BinaryFormat(input); po = binary.ConvertTo <Po>(); input.Dispose(); DataStream name = new DataStream("names.po", FileOpenMode.Read); BinaryFormat binaryname = new BinaryFormat(name); Po poname = binaryname.ConvertTo <Po>(); name.Dispose(); Yarhl.IO.TextWriter writer = new Yarhl.IO.TextWriter(new DataStream(args[0] + ".txt", FileOpenMode.Write)); foreach (var entry in po.Entries) { string potext = entry.Text; if (potext == "<!empty>") { potext = string.Empty; } PoEntry nameEntry = poname.FindEntry(entry.ExtractedComments); string names = nameEntry.Text; entry.Context = entry.Context.Replace(":", "\t"); entry.Original = entry.Original.Replace("\n", "{0A}"); entry.Translated = entry.Translated.Replace("\n", "\\n"); entry.Translated = entry.Translated.Replace("{PROTAGONISTA}", "{F1 82}"); entry.Translated = entry.Translated.Replace("{Nombre y apellidos prota}", "{F1 0C}"); entry.Translated = entry.Translated.Replace("{Apellido prota}", "{F1 0B}"); entry.Translated = entry.Translated.Replace("{Nombre prota}", "{F1 0A}"); writer.WriteLine(entry.Context + "\t" + entry.ExtractedComments + "\t" + entry.Original + "\t" + names + "\t" + entry.Translated + "\t"); } break; case "-split": string[] textfilex = System.IO.File.ReadAllLines(args[0]); List <string> text = new List <string>(); foreach (string line in textfilex) { string[] lineFields = line.Split('\t'); if (lineFields.Length < 4) { Console.WriteLine("FAAAAAAILLL: {0}", line, args[0]); //It's that a Pleonex's reference!!!!???? } if (lineFields.Length == 6) { text.Add(lineFields[0] + "\t" + lineFields[1] + "\t" + lineFields[2] + "\t" + lineFields[3] + "\t" + lineFields[4] + "\t"); } if (lineFields.Length >= 7) { text.Add(lineFields[0] + "\t" + lineFields[1] + "\t" + lineFields[2] + "\t" + lineFields[3] + "\t" + lineFields[4] + "\t" + lineFields[5] + "\t" + lineFields[6] + "\t"); } string result = string.Join(Environment.NewLine, text.ToArray()); System.IO.File.WriteAllText(@lineFields[0], result); } break; } }
static void Main(string[] args) { { Console.WriteLine("TEXT2PO V1 - A simple converter for the text from the games Lord of Magna and Rune Factory 4 by Darkmet98."); Console.WriteLine("Massive thanks to Pleonex, Leeg and Megaflan for all."); if (args.Length < 2) { System.Console.WriteLine("Usage: TEXT2PO <file> <po file> <game (-exportrune, -exportlord, importrune or importlord)>"); System.Console.WriteLine("Example: TEXT2PO.exe msg.nxtxt -exportlord"); System.Console.WriteLine("Example: TEXT2PO.exe msg.nxtxt msg.nxtxt.po -importlord"); return; } for (int i = 0; i < args.Length; i++) { if (args[i] == "-exportrune") { exportrune = true; } if (args[i] == "-exportlord") { exportlord = true; } if (args[i] == "-importrune") { importrune = true; } if (args[i] == "-importlord") { importlord = true; } } List <int> size2 = new List <int>(); List <int> text = new List <int>(); using (BinaryReader reader = new BinaryReader(File.Open(args[0], FileMode.Open))) { if (exportlord == true) { Po po = new Po { Header = new PoHeader("Lord Of Magna Maiden Heaven", "glowtranslations <*****@*****.**>") { Language = "es-ES", LanguageTeam = "Glowtranslations", } }; string result = ""; Int32 magic = reader.ReadInt32(); Int32 count = reader.ReadInt32(); Console.WriteLine("Exporting..."); for (int i = 0; i < count; i++) { Int32 size = reader.ReadInt32(); Int32 position = reader.ReadInt32(); size2.Add(size); text.Add(position); } for (int i = 0; i < count; i++) { reader.BaseStream.Position = text[i]; //El puto flan byte[] array = reader.ReadBytes(size2[i]); result = Encoding.Unicode.GetString(array); if (string.IsNullOrEmpty(result)) { result = "<!empty>"; } po.Add(new PoEntry(result) { Context = i.ToString() }); } po.ConvertTo <BinaryFormat>().Stream.WriteTo(args[0] + ".po"); Console.WriteLine("The file is exported."); } if (exportrune == true) { Po po = new Po { Header = new PoHeader("Rune Factory 4", "glowtranslations <*****@*****.**>") { Language = "es-ES", LanguageTeam = "Glowtranslations", } }; string result = ""; Int32 magic = reader.ReadInt32(); Int32 count = reader.ReadInt32(); Console.WriteLine("Exporting..."); for (int i = 0; i < count; i++) { Int32 size = reader.ReadInt32(); Int32 position = reader.ReadInt32(); size2.Add(size); text.Add(position); } for (int i = 0; i < count; i++) { reader.BaseStream.Position = text[i]; //El puto flan byte[] array = reader.ReadBytes(size2[i]); result = Encoding.UTF8.GetString(array); if (string.IsNullOrEmpty(result)) { result = "<!empty>"; } po.Add(new PoEntry(result) { Context = i.ToString() }); } po.ConvertTo <BinaryFormat>().Stream.WriteTo(args[0] + ".po"); Console.WriteLine("The file is exported."); } if (importrune == true) { Console.WriteLine("Importing..."); DataStream input = new DataStream(args[1], FileOpenMode.Read); BinaryFormat binary = new BinaryFormat(input); Po po = binary.ConvertTo <Po>(); input.Dispose(); List <int> size = new List <int>(); List <int> position = new List <int>(); var stream = reader.BaseStream; using (BinaryWriter writer = new BinaryWriter(File.Open(args[0] + ".exported", FileMode.Create))) { writer.Write(0x54584554); writer.Write(po.Entries.Count); for (int i = 0; i < po.Entries.Count * 2; i++) { writer.Write(0x00000000); } foreach (var entry in po.Entries) { string potext = string.IsNullOrEmpty(entry.Translated) ? entry.Original : entry.Translated; if (potext == "<!empty>") { potext = string.Empty; } position.Add((int)writer.BaseStream.Position); byte[] stringtext = Encoding.UTF8.GetBytes(potext += "\0"); writer.Write(stringtext); int textsize = stringtext.Length; size.Add(textsize); } writer.BaseStream.Position = 0x8; int countposition = 0x8 * po.Entries.Count + 1; for (int i = 0; i < po.Entries.Count; i++) { writer.Write(size[i] - 1); writer.Write(position[i]); } Console.WriteLine("The file is imported."); } } if (importlord == true) { Console.WriteLine("Importing..."); DataStream input = new DataStream(args[1], FileOpenMode.Read); BinaryFormat binary = new BinaryFormat(input); Po po = binary.ConvertTo <Po>(); input.Dispose(); List <int> size = new List <int>(); List <int> position = new List <int>(); var stream = reader.BaseStream; using (BinaryWriter writer = new BinaryWriter(File.Open(args[0] + ".exported", FileMode.Create))) { writer.Write(0x54584554); writer.Write(po.Entries.Count); for (int i = 0; i < po.Entries.Count * 3; i++) { writer.Write(0x00000000); } foreach (var entry in po.Entries) { string potext = string.IsNullOrEmpty(entry.Translated) ? entry.Original : entry.Translated; if (potext == "<!empty>") { potext = string.Empty; } position.Add((int)writer.BaseStream.Position); byte[] stringtext = Encoding.Unicode.GetBytes(potext += "\0"); writer.Write(stringtext); int textsize = stringtext.Length; size.Add(textsize); } writer.BaseStream.Position = 0x8; int countposition = 0x8 * po.Entries.Count + 1; for (int i = 0; i < po.Entries.Count; i++) { writer.Write(size[i] - 1); writer.Write(position[i]); } Console.WriteLine("The file is imported."); } } } } }