Exemple #1
0
        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");
        }
Exemple #2
0
        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");
        }
Exemple #3
0
        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");
        }
Exemple #4
0
 public static void POWrite(Po POHeader, string file)
 {
     POHeader.ConvertTo <BinaryFormat>().Stream.WriteTo(file + ".po");
 }
Exemple #5
0
 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.");
             }
         }
     }
 }
Exemple #6
0
        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;
                }
            }
        }
Exemple #7
0
 public void POWrite(string file)
 {
     poYarhl.ConvertTo <BinaryFormat>().Stream.WriteTo(file + ".po");
 }
Exemple #8
0
        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;
            }
        }
Exemple #9
0
        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.");
                        }
                    }
                }
            }
        }