Пример #1
0
        public void ImportPO(string poFileName)
        {
            DataStream   inputPO    = new DataStream(poFileName, FileOpenMode.Read);
            BinaryFormat binaryFile = new BinaryFormat(inputPO);
            Po           newPO      = binaryFile.ConvertTo <Po>();

            variables.textoOriginal  = new string[newPO.Entries.Count];
            variables.textoTraducido = new string[newPO.Entries.Count];
            variables.contexto       = new string[newPO.Entries.Count];
            inputPO.Dispose();
            int contador = 0;

            listBox1.Items.Clear();
            Array.Clear(variables.textoOriginal, 0, variables.textoOriginal.Length);
            Array.Clear(variables.textoTraducido, 0, variables.textoTraducido.Length);
            Array.Clear(variables.contexto, 0, variables.contexto.Length);
            foreach (var entry in newPO.Entries)
            {
                listBox1.Items.Add(entry.Context);
                variables.textoOriginal[contador] = entry.Original;
                variables.contexto[contador]      = entry.Context;

                if (entry.Translated == "")
                {
                    variables.textoTraducido[contador] = "<!empty>";
                }
                variables.textoTraducido[contador] = entry.Translated;
                contador++;
            }
            listBox1.SelectedIndex = 0;
        }
Пример #2
0
    public static XElement PO2XML(string file)
    {
        Po POBuffer;

        using (var binary = new BinaryFormat(file))
        {
            POBuffer = binary.ConvertTo <Po>();
            return(new XElement("mbm", from entry in POBuffer.Entries
                                let idattr = new XAttribute("id", entry.Context)
                                             let source = new XElement("source", entry.Original.Replace("\n", "{F801}").Replace("<empty>", ""))
                                                          let target = new XElement("target", entry.Text.Replace("\n", "{F801}").Replace("<empty>", ""))
                                                                       select new XElement("entry", idattr, source, target)));
        }
    }
Пример #3
0
        public void ImportPO(string poFileName)
        {
            DataStream   inputPO    = new DataStream(poFileName, FileOpenMode.Read);
            BinaryFormat binaryFile = new BinaryFormat(inputPO);
            Po           newPO      = binaryFile.ConvertTo <Po>();

            inputPO.Dispose();

            this.newPointers = new List <int>();
            this.newText     = new List <string>();

            NewFileSize = this.GetHeaderSize();

            int pointer = Pointers[0];

            this.newPointers.Add(pointer);

            NewFileSize += sizeof(int);

            foreach (var entry in newPO.Entries)
            {
                string sentence = string.IsNullOrEmpty(entry.Translated) ?
                                  entry.Original : entry.Translated;
                if (sentence == "<!empty>")
                {
                    sentence = string.Empty;
                }
                sentence = AddButtons(sentence);
                this.newText.Add(sentence);

                NewFileSize += sentence.Length + 1;

                // Last entry doesn't recalc pointer
                if (entry.Context != (newPO.Entries.Count - 1).ToString())
                {
                    pointer += sentence.Length + 1; // After every string there is an extra 00 byte

                    this.newPointers.Add(pointer);
                    NewFileSize += sizeof(int);
                }
            }
        }
Пример #4
0
        public void ImportPO(string poFileName)
        {
            DataStream   inputPO    = new DataStream(poFileName, FileOpenMode.Read);
            BinaryFormat binaryFile = new BinaryFormat(inputPO);
            Po           newPO      = binaryFile.ConvertTo <Po>();

            inputPO.Dispose();

            this.newText     = new Queue <string>();
            this.newPointers = new Queue <int>();

            int longCounter = 0;

            foreach (var entry in newPO.Entries)
            {
                string sentence = string.IsNullOrEmpty(entry.Translated) ?
                                  entry.Original : entry.Translated;

                if (sentence == "<!empty>")
                {
                    sentence = string.Empty;
                }

                if (this.CheckCorrectLong(sentence))
                {
                    sentence     = this.ReplaceSpecialChars(sentence);
                    longCounter += sentence.Length + 1; // byte \0
                    this.newText.Enqueue(sentence);
                    this.newPointers.Enqueue(longCounter);
                }
                else
                {
                    Console.WriteLine("Tamaño de frase excedido, máximo 36 caracteres: " + sentence);
                }
            }
        }
Пример #5
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;
                }
            }
        }
Пример #6
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;
            }
        }
Пример #7
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.");
                        }
                    }
                }
            }
        }