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); }
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(); } }