public override void ImportPo(string inputFile, bool save = true)
        {
            var dataStream = DataStreamFactory.FromFile(inputFile, FileOpenMode.Read);
            var binary     = new BinaryFormat(dataStream);
            var binary2Po  = new Yarhl.Media.Text.Po2Binary();
            var po         = binary2Po.Convert(binary);

            _text = GetText();
            var tmp = _text.Text.Replace(LineEnding.ShownLineEnding, LineEnding.PoLineEnding);

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

            if (!string.IsNullOrEmpty(entry.Translated))
            {
                _text.Translation = entry.Translated.Replace(LineEnding.PoLineEnding, LineEnding.ShownLineEnding);
            }

            if (save)
            {
                SaveChanges();
            }
        }
        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);
        }
        public override void ImportPo(string inputFile, bool save = true, bool parallel = true)
        {
            var dataStream = DataStreamFactory.FromFile(inputFile, FileOpenMode.Read);
            var binary     = new BinaryFormat(dataStream);
            var binary2Po  = new Yarhl.Media.Text.Po2Binary();
            var po         = binary2Po.Convert(binary);

            LoadBeforeImport();
            foreach (var dataColumn in _data.Columns)
            {
                if (dataColumn.GetType().Name != nameof(Column) && dataColumn.DataCount > 0 && dataColumn.Size > 0)
                {
                    var values    = dataColumn.GetUniqueValues();
                    var newValues = new Dictionary <string, string>();
                    for (var i = 0; i < values.Count; i++)
                    {
                        var value    = values[i];
                        var original = value.Item1;

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

                        var tmp   = original.Replace(LineEnding.ShownLineEnding, LineEnding.PoLineEnding);
                        var entry = po.FindEntry(tmp, $"{dataColumn.Name}_{i}");

                        if (entry.Text == "<!empty>")
                        {
                            newValues.Add($"{dataColumn.Name}|{i}", value.Item1);
                        }
                        else
                        {
                            var tmp1 = entry.Translated;
                            tmp1 = string.IsNullOrEmpty(tmp1) ? value.Item1 : tmp1.Replace(LineEnding.PoLineEnding, LineEnding.ShownLineEnding);
                            newValues.Add($"{dataColumn.Name}|{i}", tmp1);
                        }
                    }

                    dataColumn.SetUniqueValues(newValues, true);
                }
            }

            if (save && NeedSaving)
            {
                SaveChanges();
            }
        }
        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);
        }
        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);
        }
        public override void ImportPo(string inputFile, bool save = true)
        {
            var dataStream = DataStreamFactory.FromFile(inputFile, FileOpenMode.Read);
            var binary     = new BinaryFormat(dataStream);
            var binary2Po  = new Yarhl.Media.Text.Po2Binary();
            var po         = binary2Po.Convert(binary);

            LoadBeforeImport();
            foreach (var subtitle in _subtitles)
            {
                var original = subtitle.Text;
                if (string.IsNullOrEmpty(original))
                {
                    original = "<!empty>";
                }

                var entry = po.FindEntry(original.Replace(LineEnding.ShownLineEnding, LineEnding.PoLineEnding),
                                         GetContext(subtitle));

                if (entry == null || entry.Text == "<!empty>" || original == "<!empty>")
                {
                    subtitle.Translation = subtitle.Text;
                }
                else
                {
                    var translation = entry.Translated;
                    subtitle.Translation = string.IsNullOrEmpty(translation)
                        ? subtitle.Text
                        : translation.Replace(LineEnding.PoLineEnding, LineEnding.ShownLineEnding);
                }
            }

            if (save && NeedSaving)
            {
                SaveChanges();
            }
        }
        public override void ExportPo(string path)
        {
            string directory = System.IO.Path.GetDirectoryName(path);

            Directory.CreateDirectory(directory);

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

            IList <Subtitle> subtitles = GetSubtitles();

            string ctx = GetContext(subtitles[0]);

            string[] tags         = ctx.Split('_');
            string   previousTag0 = tags[0];
            string   previousTag1 = tags[1];

            int index = 1;

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

            string outputFolder = System.IO.Path.GetDirectoryName(path);
            string fileName     = System.IO.Path.GetFileNameWithoutExtension(path);

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

                string original    = subtitle.Text;
                string 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);
                }

                tags = entry.Context.Split('_');
                string tag0 = tags[0];
                string tag1 = tags[1];
                if (tag0 != previousTag0)
                {
                    BinaryFormat outputBinary = po2binary.Convert(po);
                    string       outputPath   = System.IO.Path.Combine(outputFolder, $"{fileName}.{previousTag0}.po");
                    outputBinary.Stream.WriteTo(outputPath);

                    po = new Po()
                    {
                        Header = new PoHeader(GameName, "*****@*****.**", "es-ES")
                    };
                }
                else if (tag0 == "Conversation" && tag1 != previousTag1 && po.Entries.Count >= 1000)
                {
                    BinaryFormat outputBinary = po2binary.Convert(po);
                    string       outputPath   = System.IO.Path.Combine(outputFolder, $"{fileName}.{previousTag0}_{index}.po");
                    outputBinary.Stream.WriteTo(outputPath);

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

                    index++;
                }

                po.Add(entry);

                previousTag0 = tag0;
                previousTag1 = tag1;
            }

            BinaryFormat binary = po2binary.Convert(po);
            string       path1  = System.IO.Path.Combine(outputFolder, $"{fileName}.{previousTag0}_{index}.po");

            binary.Stream.WriteTo(path1);
        }
Example #8
0
        public override void ImportPo(string inputFile, bool save = true, bool parallel = true)
        {
            using (DataStream dataStream = DataStreamFactory.FromFile(inputFile, FileOpenMode.Read))
            {
                var binary    = new BinaryFormat(dataStream);
                var binary2Po = new Yarhl.Media.Text.Po2Binary();
                Po  po        = binary2Po.Convert(binary);

                LoadBeforeImport();
                var dictionary = new ConcurrentDictionary <string, Subtitle>();
                foreach (Subtitle subtitle in _subtitles)
                {
                    dictionary[GetContext(subtitle)] = subtitle;
                }

                void UpdateSubtitleFromPoEntry(PoEntry entry)
                {
                    string context = entry.Context;

                    if (!dictionary.TryGetValue(context, out Subtitle subtitle))
                    {
                        return;
                    }

                    if (entry.Original == "<!empty>" || string.IsNullOrEmpty(subtitle.Text))
                    {
                        subtitle.Translation = subtitle.Text;
                    }
                    else
                    {
                        if (entry.Original.Replace(LineEnding.PoLineEnding, LineEnding.ShownLineEnding) !=
                            subtitle.Text)
                        {
                            // El texto original de la entrada no coincide con el del subtítulo, así que no podemos aplicar la traducción
                            subtitle.Translation = subtitle.Text;
                        }
                        else
                        {
                            string translation = entry.Translated;
                            subtitle.Translation = string.IsNullOrEmpty(translation)
                                ? subtitle.Text
                                : translation.Replace(LineEnding.PoLineEnding, LineEnding.ShownLineEnding);
                        }
                    }
                }

                if (parallel)
                {
                    Parallel.ForEach(po.Entries, UpdateSubtitleFromPoEntry);
                }
                else
                {
                    foreach (PoEntry entry in po.Entries)
                    {
                        UpdateSubtitleFromPoEntry(entry);
                    }
                }
            }

            if (save && NeedSaving)
            {
                SaveChanges();
            }
        }