private void FindText(ResText txt) { var lines = txt.GetText(false); string[] tr = null; if (_package.HasTranslate) { tr = txt.GetText(true); } for (int i = 0; i < lines.Length; i++) { if (IsPass(lines[i])) { AddResult(txt, i, lines[i]); } else if (tr != null && IsPass(tr[i])) { AddResult(txt, i, tr[i]); } } }
protected override void ShowResource(Resource res, bool translated) { dgvText.Rows.Clear(); ResText txt = (ResText)res; var en = txt.GetText(false); if (res.Package.HasTranslate) { var ru = txt.GetText(true); for (int i = 0; i < en.Length; i++) { dgvText.Rows.Add(i, en[i], ru[i]); } } else { for (int i = 0; i < en.Length; i++) { dgvText.Rows.Add(i, en[i], ""); } } }
private async Task ApplyTranslate(ResText r) { try { var part = Book.GetVolume(r.ToString()); if (part == null) // Ресурс без перевода { return; } if (String.IsNullOrEmpty(part.DateChange)) // Пропускаем части без перевода { return; } if (_cache != null && _cache.TryGetValue(r.ToString(), out string changed) && changed.Equals(part.DateChange)) // Пропускаем неизмененные части { return; } var enLines = r.GetText(false); // Оригинальный текст var ruLines = r.GetText(true); // Уже переведенный текст if (enLines.Length != ruLines.Length) { Console.WriteLine($"{r} Lines count error"); return; } var translates = await Book.GetTranslates(part.URL); bool hasTranslate = false; var notaEn = translates.Keys.ToHashSet(); for (int i = 0; i < enLines.Length; i++) { var en = enLines[i]; if (String.IsNullOrEmpty(en)) { continue; } if (!translates.TryGetValue(en, out var tr)) { en = en.Replace("\n", "\r\n"); if (!translates.TryGetValue(en, out tr)) { //Console.WriteLine($"Missing tex {r} - {en}"); continue; } } if (tr == null) { continue; } notaEn.Remove(en); var ru = ruLines[i]; if (tr.Equals(ru)) // Пропускаем старый перевод { continue; } Console.WriteLine(ru); Console.WriteLine(tr); Console.WriteLine(); hasTranslate = true; ruLines[i] = tr; } if (notaEn.Count > 0) { Console.WriteLine($"Not found nota in {r.FileName}"); foreach (var nota in notaEn) { Console.WriteLine(nota); } } if (hasTranslate) { Console.WriteLine(r); r.SetTranslate(ruLines); _hasChanges = true; } } finally { _progress++; ReportProgress?.Invoke(_progress * 100 / _total); } }