コード例 #1
0
ファイル: Po2BinaryTests.cs プロジェクト: hallinbirch/Yarhl
        public void ConvertNoHeaderEntries()
        {
            var testPo = new Po();

            testPo.Add(new PoEntry {
                Original = "original"
            });
            testPo.Add(new PoEntry {
                Original = "totranslate", Translated = "translated"
            });

            string text = @"
msgid ""original""
msgstr """"

msgid ""totranslate""
msgstr ""translated""
";

            text = text.Replace("\r\n", "\n");
            var newPo = ConvertStringToPo(text);

            CompareText(ConvertFormat.To <BinaryFormat>(testPo), text);
            Assert.IsNull(newPo.Header);
            Assert.AreEqual(2, newPo.Entries.Count);
        }
コード例 #2
0
        public Po Convert(BinaryFormat source)
        {
            if (source == null)
            {
                throw new ArgumentNullException(nameof(source));
            }

            DataReader reader = new DataReader(source.Stream)
            {
                DefaultEncoding = Encoding.GetEncoding("utf-16"),
            };

            Po po = new Po {
                Header = new PoHeader(
                    "AttackFridayMonster Translation",
                    "*****@*****.**",
                    "es-ES"),
            };

            while (!source.Stream.EndOfStream)
            {
                uint id = reader.ReadUInt32();

                // Japanese version has 0x38 bytes of text and 0x74 of unknown
                string text = reader.ReadString(0x50).Replace("\0", string.Empty);
                source.Stream.Seek(0x6C, SeekMode.Current); // Unknown

                po.Add(new PoEntry(text)
                {
                    Context = "id:" + id
                });
            }

            return(po);
        }
コード例 #3
0
ファイル: PO.cs プロジェクト: Megaflan/Nemissa
 public void POExport(string toPO, int i)
 {
     poYarhl.Add(new PoEntry(Dict(toPO, false))
     {
         Context = i.ToString()
     });
 }
コード例 #4
0
ファイル: TextManager.cs プロジェクト: priverop/BRS-Tools
        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");
        }
コード例 #5
0
ファイル: PO.cs プロジェクト: duanyunlun/3DSTranslation
 public static void POExport(Po POHeader, string source, string target, int i)
 {
     POHeader.Add(new PoEntry(source)
     {
         Translated = target, Context = i.ToString()
     });
 }
コード例 #6
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");
        }
コード例 #7
0
        public Po Convert(BinaryFormat source)
        {
            if (source == null)
            {
                throw new ArgumentNullException(nameof(source));
            }

            source.Stream.Seek(0, SeekMode.Start);
            DataReader reader = new DataReader(source.Stream);
            Po         po     = new Po {
                Header = new PoHeader(
                    "Attack of the Friday Monsters Translatation",
                    "*****@*****.**",
                    "es-ES"),
            };

            uint numSections = reader.ReadUInt32();

            if (numSections < 3)
            {
                throw new FormatException($"Missing sections");
            }

            // We skip the first 3 sections with unknown content
            reader.ReadBytes(3 * 4);
            for (int s = 3; s < numSections; s++)
            {
                uint sectionOffset = reader.ReadUInt32();
                if (sectionOffset == 0)
                {
                    continue;
                }

                source.Stream.PushToPosition(sectionOffset, SeekMode.Start);
                ushort charId = reader.ReadUInt16();
                if (charId == 0x4D30)
                {
                    source.Stream.PopPosition();
                    continue;
                }

                if (!Characters.ContainsKey(charId))
                {
                    throw new FormatException("Unknown char: " + charId);
                }

                PoEntry entry = new PoEntry {
                    Original          = ReadTokenizedString(reader),
                    Context           = $"s:{s}",
                    ExtractedComments = Characters[charId],
                };

                po.Add(entry);
                source.Stream.PopPosition();
            }

            return(po);
        }
コード例 #8
0
        public override void ExportPo(string path)
        {
            var directory = System.IO.Path.GetDirectoryName(path);

            Directory.CreateDirectory(directory);

            var po = new Po()
            {
                Header = new PoHeader(GameName, "*****@*****.**", "es-ES")
            };

            var data = GetData();

            foreach (var dataColumn in data.Columns)
            {
                if (dataColumn.GetType().Name != nameof(Column) && dataColumn.DataCount > 0 && dataColumn.Size > 0)
                {
                    var values = dataColumn.GetUniqueValues();
                    for (var i = 0; i < values.Count; i++)
                    {
                        var value      = values[i];
                        var original   = value.Item1;
                        var translated = value.Item2;
                        var entry      = new PoEntry();

                        if (string.IsNullOrEmpty(original))
                        {
                            original   = "<!empty>";
                            translated = "<!empty>";
                        }

                        if (string.IsNullOrEmpty(translated))
                        {
                            translated = "<!empty>";
                        }

                        var tmp = original.Replace(LineEnding.ShownLineEnding, LineEnding.PoLineEnding);

                        entry.Original = tmp;
                        entry.Context  = $"{dataColumn.Name}_{i}";

                        if (original != translated)
                        {
                            tmp = translated.Replace(LineEnding.ShownLineEnding, LineEnding.PoLineEnding);
                            entry.Translated = tmp;
                        }

                        po.Add(entry);
                    }
                }
            }

            var po2binary = new Yarhl.Media.Text.Po2Binary();
            var binary    = po2binary.Convert(po);

            binary.Stream.WriteTo(path);
        }
コード例 #9
0
        public void POExport(string toPO)
        {
            var text = toPO.Split(':');

            poYarhl.Add(new PoEntry(text[3].Replace("<BR>", "\n"))
            {
                Context = text[0] + ":" + text[1] + ":" + text[2] + ":"
            });
        }
コード例 #10
0
ファイル: PO.cs プロジェクト: Megaflan/Merchanter
 public void POExport(string toPO, int i)
 {
     if (toPO != "")
     {
         poYarhl.Add(new PoEntry(dic.Transform(toPO, "dicFW2HW"))
         {
             Context = i.ToString()
         });
     }
 }
コード例 #11
0
ファイル: Uml.cs プロジェクト: pleonex/Xenosaga
        public Po Convert(Uml source)
        {
            Po po = new Po {
                Header = new PoHeader("Xenosaga I", "*****@*****.**")
            };

            po.Add(new PoEntry(source.Text)
            {
                Reference = source.Filename,
                Context   = "Email " + source.Filename
            });

            return(po);
        }
コード例 #12
0
ファイル: Po2BinaryTests.cs プロジェクト: hallinbirch/Yarhl
        public void ConvertFullEntry()
        {
            var testPo = new Po();

            testPo.Add(new PoEntry {
                Original          = "original",
                Translated        = "translated",
                TranslatorComment = "a comment",
                ExtractedComments = "hehe",
                Reference         = "ref1",
                Flags             = "flag1,flag2",
                PreviousContext   = "prev ctx",
                PreviousOriginal  = "prev org",
                Context           = "a ctx",
            });

            string text = @"
#  a comment
#. hehe
#: ref1
#, flag1,flag2
#| msgctxt prev ctx
#| msgid prev org
msgctxt ""a ctx""
msgid ""original""
msgstr ""translated""
";

            text = text.Replace("\r\n", "\n");
            var newPo = ConvertStringToPo(text);

            CompareText(ConvertFormat.To <BinaryFormat>(testPo), text);
            Assert.AreEqual(1, newPo.Entries.Count);
            Assert.AreEqual(testPo.Entries[0].Original, newPo.Entries[0].Original);
            Assert.AreEqual(testPo.Entries[0].Translated, newPo.Entries[0].Translated);
            Assert.AreEqual(testPo.Entries[0].TranslatorComment, newPo.Entries[0].TranslatorComment);
            Assert.AreEqual(testPo.Entries[0].ExtractedComments, newPo.Entries[0].ExtractedComments);
            Assert.AreEqual(testPo.Entries[0].Reference, newPo.Entries[0].Reference);
            Assert.AreEqual(testPo.Entries[0].Flags, newPo.Entries[0].Flags);
            Assert.AreEqual(testPo.Entries[0].PreviousContext, newPo.Entries[0].PreviousContext);
            Assert.AreEqual(testPo.Entries[0].PreviousOriginal, newPo.Entries[0].PreviousOriginal);
            Assert.AreEqual(testPo.Entries[0].Context, newPo.Entries[0].Context);
        }
コード例 #13
0
        public override void ExportPo(string path)
        {
            var directory = System.IO.Path.GetDirectoryName(path);

            Directory.CreateDirectory(directory);

            var po = new Po()
            {
                Header = new PoHeader(GameName, "*****@*****.**", "es-ES")
            };

            var subtitles = GetSubtitles();

            foreach (var subtitle in subtitles)
            {
                var entry = new PoEntry();

                var original    = subtitle.Text;
                var translation = subtitle.Translation;
                if (string.IsNullOrEmpty(original))
                {
                    original    = "<!empty>";
                    translation = "<!empty>";
                }

                entry.Original = original.Replace(LineEnding.ShownLineEnding, LineEnding.PoLineEnding);
                entry.Context  = GetContext(subtitle);

                if (original != translation)
                {
                    entry.Translated = translation.Replace(LineEnding.ShownLineEnding, LineEnding.PoLineEnding);
                }

                po.Add(entry);
            }

            var po2binary = new Yarhl.Media.Text.Po2Binary();
            var binary    = po2binary.Convert(po);

            binary.Stream.WriteTo(path);
        }
コード例 #14
0
ファイル: XLS_Functions.cs プロジェクト: Megaflan/Erebonia
        static private void GeneratePo(XLS xls, string lang, bool mode)
        {
            var po = new Po
            {
                Header = new PoHeader("Trails in the Cold Steel", "*****@*****.**", lang)
                {
                    LanguageTeam = lang,
                }
            };

            foreach (var entry in xls.Entries)
            {
                if (!string.IsNullOrEmpty(entry.Text))
                {
                    po.Add(new PoEntry(entry.Text)
                    {
                        Context           = entry.ID.ToString(),
                        ExtractedComments = $"{entry.Column}{";"}{entry.Row + 1}",
                    });
                }
            }

            var node = NodeFactory.FromMemory("node");

            switch (mode)
            {
            case true:
                node.TransformWith(new Po2BinaryEasy()
                {
                    PoPassed = po
                }).TransformWith(new Po2Binary()).Stream.WriteTo(Path.GetFileNameWithoutExtension(fileName) + "_dialog.po");
                break;

            case false:
                node.TransformWith(new Po2BinaryEasy()
                {
                    PoPassed = po
                }).TransformWith(new Po2Binary()).Stream.WriteTo(Path.GetFileNameWithoutExtension(fileName) + "_string.po");
                break;
            }
        }
コード例 #15
0
ファイル: Po2BinaryTests.cs プロジェクト: hallinbirch/Yarhl
        public void ConvertEntryAndHeader()
        {
            var testPo = new Po(new PoHeader("myId", "yo", "es")
            {
                CreationDate = "today"
            });

            testPo.Add(new PoEntry {
                Original = "original", Translated = "translated"
            });

            string text = @"msgid """"
msgstr """"
""Project-Id-Version: myId\n""
""Report-Msgid-Bugs-To: yo\n""
""POT-Creation-Date: today\n""
""PO-Revision-Date: \n""
""Last-Translator: \n""
""Language-Team: \n""
""Language: es\n""
""MIME-Version: 1.0\n""
""Content-Type: text/plain; charset=UTF-8\n""
""Content-Transfer-Encoding: 8bit\n""

msgid ""original""
msgstr ""translated""
";

            text = text.Replace("\r\n", "\n");

            var newPo = ConvertStringToPo(text);

            CompareText(ConvertFormat.To <BinaryFormat>(testPo), text);
            Assert.AreEqual(testPo.Header.ProjectIdVersion, newPo.Header.ProjectIdVersion);
            Assert.AreEqual(testPo.Header.ReportMsgidBugsTo, newPo.Header.ReportMsgidBugsTo);
            Assert.AreEqual(testPo.Header.Language, newPo.Header.Language);
            Assert.AreEqual(testPo.Header.CreationDate, newPo.Header.CreationDate);
            Assert.AreEqual(1, newPo.Entries.Count);
            Assert.AreEqual(testPo.Entries[0].Original, newPo.Entries[0].Original);
            Assert.AreEqual(testPo.Entries[0].Translated, newPo.Entries[0].Translated);
        }
コード例 #16
0
        public override void ExportPo(string path)
        {
            var directory = System.IO.Path.GetDirectoryName(path);

            Directory.CreateDirectory(directory);

            var po = new Po()
            {
                Header = new PoHeader(GameName, "*****@*****.**", "es-ES")
            };

            var entry = new PoEntry();
            var text  = GetText();
            var tmp   = text.Text.Replace(LineEnding.ShownLineEnding, LineEnding.PoLineEnding);

            if (string.IsNullOrEmpty(tmp))
            {
                tmp = "<!empty>";
            }
            entry.Original = tmp;

            if (text.Text != text.Translation)
            {
                tmp = text.Translation.Replace(LineEnding.ShownLineEnding, LineEnding.PoLineEnding);
                if (string.IsNullOrEmpty(tmp))
                {
                    tmp = "<!empty>";
                }
                entry.Translated = tmp;
            }

            po.Add(entry);

            var po2binary = new Yarhl.Media.Text.Po2Binary();
            var binary    = po2binary.Convert(po);

            binary.Stream.WriteTo(path);
        }
コード例 #17
0
ファイル: Po2BinaryTests.cs プロジェクト: hallinbirch/Yarhl
        public void EntryWithMultiLineExtractedComments()
        {
            var testPo = new Po();

            testPo.Add(new PoEntry {
                Original          = "The Quick Brown Fox Jumps Over The Lazy Dog",
                ExtractedComments =
                    "TRANSLATORS: A test phrase with all letters of the English alphabet." +
                    " Replace it with a sample text in your language, such that it is" +
                    " representative of language's writing system.",
                TranslatorComment =
                    "NOTE: This is a very long comment that I am writting to test if" +
                    " this is working properly.",
                Reference = "kdeui/fonts/kfontchooser.cpp:382",
            });

            string text = @"
#  NOTE: This is a very long comment that I am writting to test if
#  this is working properly.
#. TRANSLATORS: A test phrase with all letters of the English alphabet.
#. Replace it with a sample text in your language, such that it is
#. representative of language's writing system.
#: kdeui/fonts/kfontchooser.cpp:382
msgid ""The Quick Brown Fox Jumps Over The Lazy Dog""
msgstr """"
";

            text = text.Replace("\r\n", "\n");

            // Enable after #85: CompareText(testPo.ConvertTo<BinaryFormat>(), text)
            Po newPo = ConvertStringToPo(text);

            Assert.AreEqual(1, newPo.Entries.Count);
            Assert.AreEqual(testPo.Entries[0].Original, newPo.Entries[0].Original);
            Assert.AreEqual(testPo.Entries[0].ExtractedComments, newPo.Entries[0].ExtractedComments);
            Assert.AreEqual(testPo.Entries[0].Reference, newPo.Entries[0].Reference);
        }
コード例 #18
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");
        }
コード例 #19
0
ファイル: Po2BinaryTests.cs プロジェクト: hallinbirch/Yarhl
        public void ConvertSpecialEntry()
        {
            var testPo = new Po();

            testPo.Add(new PoEntry {
                Original   = "original",
                Translated = "trans\nl\"a\"ted",
            });

            string text = @"
msgid ""original""
msgstr """"
""trans\n""
""l\""a\""ted""
";

            text = text.Replace("\r\n", "\n");
            var newPo = ConvertStringToPo(text);

            CompareText(ConvertFormat.To <BinaryFormat>(testPo), text);
            Assert.AreEqual(1, newPo.Entries.Count);
            Assert.AreEqual(testPo.Entries[0].Original, newPo.Entries[0].Original);
            Assert.AreEqual(testPo.Entries[0].Translated, newPo.Entries[0].Translated);
        }
コード例 #20
0
        /* I'M LEAVING THE XML STUFF FOR COMPATIBILITY WITH OLDER VERSIONS OF DRAT */

        public static void ConvertXmlToPo(string SingleXML)
        {
            List <string> XMLOriginalSentences = null, XMLTranslatedSentences = null, XMLSpeakers = null, XMLComments = null, JAPText = null;

            using (FileStream TRANSLATEDXML = new FileStream(SingleXML, FileMode.Open, FileAccess.Read))
                using (StreamReader XMLStreamReader = new StreamReader(TRANSLATEDXML, Encoding.Unicode))
                {
                    string XmlText = XMLStreamReader.ReadToEnd();

                    XMLOriginalSentences   = CommonTextStuff.ExtractTextFromXML(XmlText, "<ORIGINAL N°", "</ORIGINAL N°", SingleXML);
                    XMLTranslatedSentences = CommonTextStuff.ExtractTextFromXML(XmlText, "<TRANSLATED N°", "</TRANSLATED N°", SingleXML);
                    XMLSpeakers            = CommonTextStuff.ExtractTextFromXML(XmlText, "<SPEAKER N°", "</SPEAKER N°", SingleXML);
                    XMLComments            = CommonTextStuff.ExtractTextFromXML(XmlText, "<COMMENT N°", "</COMMENT N°", SingleXML);
                }

            // If the user has checked "Add japanase texts", then extract the japanese text.
            if (DRAT.aDDJAPANESETEXTToolStripMenuItem.Checked == true)
            {
                JAPText = ReadJAPText(SingleXML);
            }

            //Read the language used by the user' OS, this way the editor can spellcheck the translation.
            System.Globalization.CultureInfo currentCulture = System.Threading.Thread.CurrentThread.CurrentCulture;

            Po po = new Po
            {
                Header = new PoHeader(DRAT.tabControl1.SelectedTab.Text, "your_email", currentCulture.Name)
            };

            try
            {
                for (int i = 0; i < XMLOriginalSentences.Count; i++)
                {
                    PoEntry entry = new PoEntry();

                    // "Speaker"
                    if (DRAT.hIDESPEAKERSToolStripMenuItem.Checked == false && XMLSpeakers.Count > 0 && XMLSpeakers[i] != null && XMLSpeakers[i] != "")
                    {
                        entry.Context = $"{i + 1:D4} | {XMLSpeakers[i]}";
                    }
                    else
                    {
                        entry.Context = $"{i + 1:D4}";
                    }

                    // "Original"
                    if (XMLOriginalSentences.Count > 0 && XMLOriginalSentences[i] != null && XMLOriginalSentences[i] != "")
                    {
                        entry.Original = XMLOriginalSentences[i];
                    }
                    else
                    {
                        entry.Original   = "[EMPTY_LINE]";
                        entry.Translated = "[EMPTY_LINE]";
                    }

                    // "Translated"
                    if (XMLTranslatedSentences.Count > 0 && XMLTranslatedSentences[i] != null && XMLTranslatedSentences[i] != "")
                    {
                        if (XMLOriginalSentences[i].Length == 1 || XMLOriginalSentences[i] == " \n" || XMLOriginalSentences[i] == "\n" || XMLOriginalSentences[i] == "..." || XMLOriginalSentences[i] == "…" || XMLOriginalSentences[i] == "...\n" || XMLOriginalSentences[i] == "…\n" || XMLOriginalSentences[i] == "\"...\"" || XMLOriginalSentences[i] == "\"…\"" || XMLOriginalSentences[i] == "\"...\n\"" || XMLOriginalSentences[i] == "\"…\n\"")
                        {
                            entry.Translated = XMLOriginalSentences[i];
                        }
                        else if (XMLTranslatedSentences[i] != XMLOriginalSentences[i])
                        {
                            entry.Translated = XMLTranslatedSentences[i];
                        }
                    }

                    // "Comments"
                    if (XMLComments.Count > 0 && XMLComments[i] != null && XMLComments[i] != "")
                    {
                        entry.TranslatorComment = XMLComments[i].Replace("\n", "\n# "); //The repalce is needed, otherwise PoEditor is not going to load correctly the jp text and the Repack is gonna crash.;
                    }

                    // "Japanese"
                    if (DRAT.aDDJAPANESETEXTToolStripMenuItem.Checked == true && JAPText != null && JAPText.Count > 0 && i < JAPText.Count)
                    {
                        if (JAPText[i] != "" && JAPText[i] != null)
                        {
                            entry.ExtractedComments = JAPText[i].Replace("\n", "\n#. "); //The repalce is needed, otherwise PoEditor is not going to load correctly the jp text and the Repack is gonna crash.
                        }
                        else
                        {
                            entry.ExtractedComments = "[EMPTY_LINE]";
                        }
                    }
                    else
                    {
                        entry.ExtractedComments = "JAPANESE LINE NOT FOUND";
                    }

                    po.Add(entry);
                }

                string NewPoAddress = Path.Combine(Path.GetDirectoryName(SingleXML), Path.GetFileNameWithoutExtension(SingleXML) + ".po");

                ConvertFormat.To <BinaryFormat>(po).Stream.WriteTo(NewPoAddress);
            }
            catch
            {
                MessageBox.Show("\"" + SingleXML + "\"'s structure appears to be corrupted. Please check the code tags' integrity.\n\nYou can use an older version of DRAT to extract again the XML from the original English or Japanese file and compare it with yours.", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
コード例 #21
0
        public Po Convert(BinaryFormat source)
        {
            if (source == null)
            {
                throw new ArgumentNullException(nameof(source));
            }

            if (fileId != 0 && fileId != 25)
            {
                throw new NotSupportedException("File ID not supported");
            }

            DataReader reader = new DataReader(source.Stream)
            {
                DefaultEncoding = Encoding.GetEncoding("utf-16"),
            };

            Po po = new Po {
                Header = new PoHeader(
                    "Attack of Friday Monsters translation",
                    "*****@*****.**",
                    "es-ES"),
            };

            int  textSize  = fileId == 0 ? 0x140 : 0x280;
            int  numBlocks = fileId == 0 ? 5 : 6;
            bool hasId     = fileId == 25;

            string[] cardInfo = { "Glim name", "Name", "Length", "Weight", "Description" };

            int textId  = 0;
            int blockId = 0;

            while (source.Stream.Position + textSize <= source.Stream.Length)
            {
                if (textId % numBlocks == 0)
                {
                    if (fileId == 0)
                    {
                        blockId++;
                    }
                    else
                    {
                        blockId = reader.ReadInt32();
                        source.Stream.Seek(0x0C, SeekMode.Current);
                    }
                }

                string text = reader.ReadString(textSize)
                              .Replace("\0", string.Empty)
                              .Replace("▼", "\n");
                if (!string.IsNullOrEmpty(text))
                {
                    int     subblock = textId % numBlocks;
                    PoEntry entry    = new PoEntry(text)
                    {
                        Context = $"b:{blockId}|s:{subblock}",
                    };

                    if (fileId == 0)
                    {
                        entry.ExtractedComments = $"[{blockId}] {cardInfo[subblock]}";
                    }
                    po.Add(entry);
                }

                textId++;
            }

            return(po);
        }
コード例 #22
0
        // Extract the text from "FIleName" and the Speaker from "Bytcode" and save it in ".po".
        public static void MakePO(List <string> ExtractedText, string Bytecode, string DestinationDir)
        {
            if (!Directory.Exists(DestinationDir))
            {
                Directory.CreateDirectory(DestinationDir);
            }

            List <string> SpeakersExtracted = null;

            if (Bytecode != null)
            {
                SpeakersExtracted = SpeakerExtractor(Bytecode);
            }

            List <string> JAPText = null;

            // If the user has checked "Add japanase texts", then extract the japanese text.
            if (DRAT.aDDJAPANESETEXTToolStripMenuItem.Checked == true)
            {
                JAPText = ReadJAPText(Path.GetFileNameWithoutExtension(DestinationDir));
            }

            //List<string> TRText = ExtractedText;
            //ExtractedText = ReadTranslatedRawText(Path.GetFileNameWithoutExtension(DestinationDir));

            //Read the language used by the user' OS, this way the editor can spellcheck the translation.
            System.Globalization.CultureInfo currentCulture = System.Threading.Thread.CurrentThread.CurrentCulture;

            Po po = new Po
            {
                Header = new PoHeader(DRAT.tabControl1.SelectedTab.Text, "your_email", currentCulture.Name)
            };

            for (int i = 0; i < ExtractedText.Count; i++)
            {
                PoEntry entry = new PoEntry();

                // Print the "Speaker".
                if (DRAT.hIDESPEAKERSToolStripMenuItem.Checked == false && SpeakersExtracted != null)
                {
                    if (i < SpeakersExtracted.Count)
                    {
                        entry.Context = $"{(i + 1).ToString("D4")} | {SpeakersExtracted[i]}";
                    }
                    else
                    {
                        entry.Context = $"{(i + 1).ToString("D4")} | {"ERROR"}";
                    }
                }
                else
                {
                    entry.Context = $"{i + 1:D4}"; // If there isn't a Speaker, then just print the sentence number
                }

                // Print the original sentence.
                if (ExtractedText[i] == string.Empty || ExtractedText[i] == null)
                {
                    entry.Original   = "[EMPTY_LINE]";
                    entry.Translated = "[EMPTY_LINE]";
                }
                else if (ExtractedText[i].Length == 1 || ExtractedText[i] == " \n" || ExtractedText[i] == "\n" || ExtractedText[i] == "..." || ExtractedText[i] == "…" || ExtractedText[i] == "...\n" || ExtractedText[i] == "…\n" || ExtractedText[i] == "\"...\"" || ExtractedText[i] == "\"…\"" || ExtractedText[i] == "\"...\n\"" || ExtractedText[i] == "\"…\n\"")
                {
                    entry.Original   = ExtractedText[i];
                    entry.Translated = ExtractedText[i];
                }
                else
                {
                    entry.Original = ExtractedText[i];

                    //if (TRText[i] != "" || TRText[i] != null)
                    //    entry.Translated = TRText[i];
                }

                // Print the japanese sentence.
                if (DRAT.aDDJAPANESETEXTToolStripMenuItem.Checked == true && JAPText != null)
                {
                    if (i < JAPText.Count && JAPText != null && JAPText[i] != null && JAPText[i] != string.Empty)
                    {
                        entry.ExtractedComments = JAPText[i].Replace("\r\n", "\n#. ").Replace("\n\r", "\n#. ").Replace("\n", "\n#. ").Replace("\r", string.Empty); // The repalce is needed, otherwise PoEditor is not going to load correctly the jp text and the Repack is gonna crash.
                    }
                    else
                    {
                        entry.ExtractedComments = "JAPANESE LINE NOT FOUND";
                    }
                }

                po.Add(entry);
            }

            string NewPOAddress = Path.Combine(DestinationDir, Path.GetFileNameWithoutExtension(DestinationDir) + ".po");

            ConvertFormat.To <BinaryFormat>(po).Stream.WriteTo(NewPOAddress);
        }
コード例 #23
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.");
             }
         }
     }
 }
コード例 #24
0
ファイル: Program.cs プロジェクト: TraduSquare/TEXT2PO
        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;
                }
            }
        }
コード例 #25
0
ファイル: Program.cs プロジェクト: TraduSquare/Persona2po
        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;
            }
        }
コード例 #26
0
ファイル: Program.cs プロジェクト: Darkmet98/TEXT2PO
        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.");
                        }
                    }
                }
            }
        }