Beispiel #1
0
        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], "");
                }
            }
        }
Beispiel #3
0
        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);
            }
        }