public Task ScholarAsync([Remainder][Summary("The search query")] string query) { string mentions = String.Empty; List <long> userHis = new List <long>(); foreach (string tag in query.Split(" ")) { AddUserHistory(tag, Context.User.Id); if (UserHistory.ContainsKey(tag)) { foreach (long idTag in UserHistory[tag]) { if (!userHis.Contains(idTag)) { userHis.Add(idTag); } } } } foreach (long ids in userHis) { mentions += $"<@{ids}> "; } GoogleTranslator translator = new GoogleTranslator(); TranslationResult portuguese = translator.TranslateLiteAsync(query, Language.English, Language.Portuguese).GetAwaiter().GetResult(); TranslationResult english = translator.TranslateLiteAsync(query, Language.Portuguese, Language.English).GetAwaiter().GetResult(); return(ReplyAsync($"Pesquisa em portugues: https://scholar.google.com/scholar?q={portuguese.MergedTranslation.Replace("+", "%2B").Replace(' ', '+')} \nEnglish search: https://scholar.google.com/scholar?q={english.MergedTranslation.Replace("+", "%2B").Replace(' ', '+')}\n Outra pessoa que tambem pesquisou: {mentions}")); }
public Task GoogleAsync([Remainder][Summary("The thing to search for")] string search) { foreach (string tag in search.Split(" ")) { IncreaseTagCoung(tag); } GoogleTranslator translator = new GoogleTranslator(); TranslationResult portuguese = translator.TranslateLiteAsync(search, Language.English, Language.Portuguese).GetAwaiter().GetResult(); TranslationResult english = translator.TranslateLiteAsync(search, Language.Portuguese, Language.English).GetAwaiter().GetResult(); return(ReplyAsync($"Pesquisa em portugues: https://www.google.com/search?q={portuguese.MergedTranslation.Replace("+", "%2B").Replace(' ', '+')} \nEnglish search: https://www.google.com/search?q={english.MergedTranslation.Replace("+", "%2B").Replace(' ', '+')}")); }
public async Task <Result> Translate(string text, string to, string from = "en") { try { var fromLang = GoogleTranslator.GetLanguageByISO(from) ?? Language.Auto;; var toLang = GoogleTranslator.GetLanguageByISO(to); if (fromLang == null || toLang == null) { return(new Result(ErrorCode.LanguageNotRecognized)); } var result = await _client.TranslateLiteAsync(text, fromLang, toLang); return(new Result(result.MergedTranslation)); } catch (HttpRequestException ex) { Console.WriteLine("Error: " + ex.Message); if (ex.Message.Contains("429")) { return(new Result(ErrorCode.TooManyRequests)); } return(new Result(ErrorCode.UnknownError)); } catch (Exception ex) { Console.WriteLine("Error: " + ex.Message); return(new Result(ErrorCode.UnknownError)); } }
private static async Task <string> Translate(string buf) { int retry = 10; var buf_escaped = Regex.Escape(buf); if (lookup.ContainsKey(buf_escaped)) { Console.WriteLine("Cache hit! " + buf_escaped); return(Regex.Unescape(lookup[buf_escaped])); } while (retry != 0) { try { Language from = Language.Auto; Language to = GoogleTranslator.GetLanguageByName("Korean"); TranslationResult result = await _translator.TranslateLiteAsync(buf, from, to); string resultMerged = result.MergedTranslation; var translated_escpaed = Regex.Escape(resultMerged); lookup[buf_escaped] = translated_escpaed; Save(); return(resultMerged); } catch (Exception error) { _translator = new GoogleTranslator(); Console.WriteLine(error); retry--; } } return("ERROR"); }
/// <summary> /// Translate /// </summary> /// <returns></returns> private async Task Translate() { GoogleTranslator translator = new GoogleTranslator(); GoogleTranslateFreeApi.Language languageFrom = GoogleTranslateFreeApi.Language.Auto; // GoogleTranslateFreeApi.Language languageTo = GoogleTranslator.GetLanguageByName("Korean"); GoogleTranslateFreeApi.Language languageTo = GoogleTranslator.GetLanguageByName(SelectTranslate(comboBox_LanguageTrans.SelectedIndex)); try { // TranslateAsync TranslateLiteAsync TranslationResult translationResult = await translator.TranslateLiteAsync(textBox_Extract.Text, languageFrom, languageTo); string[] strResultSeparated = translationResult.FragmentedTranslation; string strTranslate = ""; foreach (string strtmp in strResultSeparated) { strTranslate += (strtmp + "\n"); } label_ErrorTranslate.Visible = false; textBox_Translate.Text = strTranslate; } catch (Exception)// ex) { label_ErrorTranslate.Visible = true; textBox_Translate.Text = ""; } }
private async void Translate() { if (LblEnglish.Text.Trim().Length >= 0) { BtnSave.IsEnabled = false; BtnTranslate.IsEnabled = false; var translator = new GoogleTranslator(); Language from = GoogleTranslateFreeApi.Language.English; Language to = GoogleTranslateFreeApi.Language.Persian; TranslationResult result = await translator.TranslateLiteAsync(LblEnglish.Text.Trim(), from, to); //The result is separated by the suggestions and the '\n' symbols string[] resultSeparated = result.FragmentedTranslation; //You can get all text using MergedTranslation property string resultMerged = result.MergedTranslation; LblPersian.Text = resultMerged; //There is also original text transcription string transcription = result.TranslatedTextTranscription; BtnSave.IsEnabled = true; BtnTranslate.IsEnabled = true; } }
private static async Task Translate(FileInfo resxFile, string from, string to) { var content = root.Load(resxFile); var destination = root.Load(resxFile); var novoArquivo = Path.Combine(resxFile.Directory.FullName, Path.GetFileNameWithoutExtension(resxFile.Name).Replace(from, to) + Path.GetExtension(resxFile.Name)); if (File.Exists(novoArquivo)) { return; } var translator = new GoogleTranslator(); var languageFrom = GoogleTranslator.GetLanguageByISO(from.ToLower()); var languageTo = GoogleTranslator.GetLanguageByISO(to.ToLower()); foreach (var rootData in content.data) { var result = await translator.TranslateLiteAsync(rootData.value, languageFrom, languageTo); destination.data.First(f => f.name == rootData.name).value = result.MergedTranslation; Console.WriteLine($"{rootData.name} - {rootData.value} -> {result.MergedTranslation}"); } destination.SerializeTo(novoArquivo); }
private async Task <string[]> TranslateText(string text, Language from, Language to) { TranslationResult result = await translateInstance.TranslateLiteAsync(text, from, to); return(result.FragmentedTranslation); //string resultMerged = result.MergedTranslation; //string transcription = result.TranslatedTextTranscription; }
public async Task <TranslationResult> TranslateAsync(string text, string to) { var result = await Translator .TranslateLiteAsync(text, Language.Auto, GoogleTranslator.GetLanguageByName(to)) .ConfigureAwait(false); return(result); }
public string Translate(string s, IMessage m, string targetLanguage = "English", string sourceLanguage = "") { Language from = string.IsNullOrWhiteSpace(sourceLanguage) ? Language.Auto : GoogleTranslator.GetLanguageByName(sourceLanguage); Language to = GoogleTranslator.GetLanguageByName(targetLanguage); TranslationResult result = translator.TranslateLiteAsync(s, from, to).Result; return(result.MergedTranslation); }
public static async Task <TranslationResult> TranslateAsync(this string forTranslate, string toLang) { var translator = new GoogleTranslator(); var from = Language.Auto; var to = GoogleTranslator.GetLanguageByISO(toLang); var result = await translator.TranslateLiteAsync(forTranslate, from, to) .ConfigureAwait(false); return(result); }
public static async Task <TranslatedText> Translate(string text, string finalLanguage, string originalLanguage = "Auto") { var translator = new GoogleTranslator(); Language to = GoogleTranslator.GetLanguageByName(finalLanguage); Language from = GoogleTranslator.GetLanguageByName(originalLanguage); var translated = await translator.TranslateLiteAsync(text, from, to); return(new TranslatedText { Original = translated.OriginalText, Translated = translated.MergedTranslation }); }
/// <summary> /// TODO: Refactor this urgently, use a HTML parser /// </summary> /// <param name="text"></param> /// <param name="origin"></param> /// <param name="destination"></param> /// <returns></returns> public string TranslateText(string text, string origin, string destination) { var translator = new GoogleTranslator(); Language from = GoogleTranslator.GetLanguageByISO(origin); Language to = GoogleTranslator.GetLanguageByISO(destination); TranslationResult result = translator.TranslateLiteAsync(text, from, to).GetAwaiter().GetResult(); var translated = FixTranslation(result.MergedTranslation); return(translated); }
private async Task Translate(TextBox txtSource, TextBox txtDest) { var translator = new GoogleTranslator(); Language from = Language.Auto; Language to = GoogleTranslator.GetLanguageByISO("ar"); TranslationResult result = await translator.TranslateLiteAsync(txtSource.Text, from, to); //You can get all text using MergedTranslation property string resultMerged = result.MergedTranslation; txtDest.Text = resultMerged; }
public async Task <string> Get(string misspellingsText) { var translator = new GoogleTranslator(); var result = await translator.TranslateLiteAsync(misspellingsText, Language.Auto, Language.English); if (result.Corrections.CorrectedText != null) { return(result.Corrections.CorrectedText); } else { return(misspellingsText); } }
public async static System.Threading.Tasks.Task <string> TranslateText(string text) { if (text.ToLower().Contains("mondays")) { text = "monday"; } if (text.ToLower().Contains("tuesdays")) { text = "tuesday"; } if (text.ToLower().Contains("wednesdays")) { text = "wednesday"; } if (text.ToLower().Contains("thursdays")) { text = "thursday"; } if (text.ToLower().Contains("fridays")) { text = "monday"; } if (text.ToLower().Contains("saturdays")) { text = "saturday"; } if (text.ToLower().Contains("sundays")) { text = "sunday"; } var translator = new GoogleTranslator(); Language from = Language.English; Language to = GoogleTranslator.GetLanguageByName("Spanish"); TranslationResult result = await translator.TranslateLiteAsync(text, from, to); text = result.MergedTranslation; return(text); }
public async static System.Threading.Tasks.Task <List <Genre> > TranslateGenres(List <Genre> genres) { List <Genre> genresNew = new List <Genre>(); foreach (var item in genres) { var translator = new GoogleTranslator(); Language from = Language.English; Language to = GoogleTranslator.GetLanguageByName("Spanish"); TranslationResult result = await translator.TranslateLiteAsync(item.name, from, to); item.name = result.MergedTranslation; genresNew.Add(item); } return(genresNew); }
public async static System.Threading.Tasks.Task <List <Anime> > TranslateAnime(List <Anime> anime) { List <Anime> animeNew = new List <Anime>(); foreach (var item in anime) { var translator = new GoogleTranslator(); Language from = Language.English; Language to = GoogleTranslator.GetLanguageByName("Spanish"); TranslationResult result = await translator.TranslateLiteAsync(item.synopsis, from, to); item.synopsis = result.MergedTranslation; animeNew.Add(item); } return(animeNew); }
public async Task <string> Get(string from, string to, string text) { var translator = new GoogleTranslator(); Language From; if (from != "Auto") { From = GoogleTranslator.GetLanguageByName(from); } else { From = Language.Auto; } Language To = GoogleTranslator.GetLanguageByName(to); TranslationResult result = await translator.TranslateLiteAsync(text, From, To); return(result.MergedTranslation); }
public async static Task <IList <string> > TranslateDescription(IList <string> list, string isoLanguageTo) { string description = string.Join("|", list); var translate = new GoogleTranslator(); Language fromLang = Language.Auto; Language from = GoogleTranslator.GetLanguageByISO(fromLang.FullName); Language to = GoogleTranslator.GetLanguageByName(isoLanguageTo); TranslationResult result = await translate.TranslateLiteAsync(description, fromLang, to); //The result is separated by the suggestions and the '\n' symbols string[] resultSeparated = result.FragmentedTranslation; //You can get all text using MergedTranslation property string resultMerged = result.MergedTranslation; //There is also original text transcription string transcription = result.TranslatedTextTranscription; // Kon'nichiwa! Ogenkidesuka? return(resultMerged.Split('|').Select(x => x.TrimStart()).ToList()); }
static async Task Main(string[] args) { Console.WriteLine("Hello World!"); var translator = new GoogleTranslator(); Language from = Language.Auto; Language to = GoogleTranslator.GetLanguageByName("Japanese"); //TranslationResult result = await translator.TranslateLiteAsync("Hello. How are you?", from, to); TranslationResult result = await translator.TranslateLiteAsync("Hello. How are you?", from, to); //The result is separated by the suggestions and the '\n' symbols string[] resultSeparated = result.FragmentedTranslation; //You can get all text using MergedTranslation property string resultMerged = result.MergedTranslation; //There is also original text transcription string transcription = result.TranslatedTextTranscription; // Kon'nichiwa! Ogenkidesuka? Console.WriteLine("Ok"); }
private static async Task HandleMessageAsync(IMessage message) { if (message == null || message.Channel == null || message.Author.IsBot == true) { return; } foreach (var link in _links.ToList().Where(x => x.SourceChannel?.Id == message.Channel.Id)) { if (message.Content.StartsWith(Ditto.Cache.Db.Prefix(link.Link.Guild))) { continue; } if (link.Link == null || link.SourceChannel == null || link.TargetChannel == null || link.SourceLanguage == null || link.TargetLanguage == null) { continue; } var messageContent = message.Content; var messageWithoutTags = messageContent; var messageTagStrings = new List <string>(); int counter = 0; // Parse discord tags (user, channel, role) while (true) { var parseResult = messageContent.ParseDiscordTags().Where(x => x.IsSuccess).FirstOrDefault(); if (parseResult == null) { break; } messageTagStrings.Add(messageContent.Substring(parseResult.Index, parseResult.Length)); messageWithoutTags = messageContent.Remove(parseResult.Index, parseResult.Length); messageContent = messageContent.Remove(parseResult.Index, parseResult.Length); messageContent = messageContent.Insert(parseResult.Index, $"{{{counter++}}}"); } // Parse discord emojis. while (true) { var parseResult = messageContent.ParseDiscordEmojis().FirstOrDefault(); if (parseResult == null) { break; } messageTagStrings.Add(messageContent.Substring(parseResult.Index, parseResult.Length)); messageWithoutTags = messageContent.Remove(parseResult.Index, parseResult.Length); messageContent = messageContent.Remove(parseResult.Index, parseResult.Length); messageContent = messageContent.Insert(parseResult.Index, $"{{{counter++}}}"); } // Translate or use original message when unnecessary. string translatedMessage = messageContent; if (!string.IsNullOrEmpty(messageWithoutTags.Trim())) { TranslationResult result = null; try { result = await _translator.TranslateLiteAsync(messageContent, link.SourceLanguage, link.TargetLanguage).ConfigureAwait(false); } catch (Exception ex) { Log.Debug(ex); return; } translatedMessage = result?.MergedTranslation; } // Replace the tags with it's original value counter = 0; foreach (var tag in messageTagStrings) { translatedMessage = translatedMessage.Replace($"{{{counter}}}", messageTagStrings.ElementAt(counter)); counter++; } // Send embedded message to the target channel. var embedBuilder = new EmbedBuilder() .WithAuthor(message.Author) .WithDescription(translatedMessage) .WithFooter($"🔀 {link.SourceLanguage.FullName} -> {link.TargetLanguage.FullName}, Posted at {message.CreatedAt.UtcDateTime:hh\\:mm} UTC") .WithColor(Ditto.Cache.Db.EmbedMusicPlayingColour(link.Link.Guild)); // Send the translated message. await link.TargetChannel.EmbedAsync(embedBuilder, options : new RequestOptions() { RetryMode = RetryMode.AlwaysRetry }).ConfigureAwait(false); // Send a secondary message with the attachment if its included. if (message.Attachments.Count > 0) { var attachmentUrl = message.Attachments.ElementAt(0)?.Url; if (!string.IsNullOrEmpty(attachmentUrl)) { await link.TargetChannel.SendMessageAsync(attachmentUrl, options : new RequestOptions() { RetryMode = RetryMode.AlwaysRetry }).ConfigureAwait(false); } } // Update link with new string value await link.UpdateAsync(message.Id).ConfigureAwait(false); } }
static async void FillInTheBlank(dynamic json) { Console.WriteLine("该题为: 根据中文意思补全所缺单词"); Console.WriteLine("题目:"); Console.WriteLine(" " + json.data.stem.content.Value); Console.WriteLine("题目翻译:"); Console.WriteLine(" " + json.data.stem.remark.Value); Console.WriteLine("提示(单词前缀): " + json.data.w_tip.Value); Console.WriteLine("单词总长度: " + json.data.w_len.Value.ToString()); Console.WriteLine(); string chinese = json.data.stem.remark.Value; string prefix = json.data.w_tip.Value; int full_length = (int)json.data.w_len.Value; int length = full_length - prefix.Length; ArrayList english_results = new ArrayList(); var translate_result = await translator.TranslateLiteAsync(chinese, Language.Auto, GoogleTranslator.GetLanguageByName("English")); foreach (string translation in translate_result.FragmentedTranslation) { foreach (Match match in Regex.Matches(translation, @"\b" + prefix + "[a-z]{" + length.ToString() + @"}\b")) { if (!english_results.Contains(match.Value)) { english_results.Add(match.Value); } } } if (english_results.Count > 0) { Console.WriteLine("根据翻译, 可能的结果如下:"); foreach (string english_result in english_results) { ShowAllEnglishTranslation(english_result, 4); } Console.WriteLine("是否有正确答案? [y/N]:"); if (Console.ReadLine() == "y") { return; } } var client = new RestClient("https://www.morewords.com/change-max-results"); client.Timeout = -1; var request = new RestRequest(Method.POST); request.AddHeader("Referer", @"https://www.morewords.com/search?w=" + prefix + @"*&length=" + full_length.ToString() + @"&sort=alpha-az"); request.AlwaysMultipartFormData = true; request.AddParameter("max_results", "all"); var response = client.Execute(request).Content; int pre_count = english_results.Count; foreach (Match match in Regex.Matches(response, prefix + "[a-z]{" + length + "}")) { string english_result = match.Value.Substring(0, full_length); if (!english_results.Contains(english_result)) { english_results.Add(english_result); } } english_results.RemoveRange(0, pre_count); if (english_results.Count > 0) { Console.WriteLine("所有可能的结果如下:"); foreach (string english_result in english_results) { ShowAllEnglishTranslation(english_result, 4); } return; } Console.WriteLine("没有找到合适的词, 应该是个bug, 告辞(逃"); }
public MainPageViewModel() { var status = new Subject <MainPageStatus>(); status.ObserveOnDispatcher() .ToPropertyEx(this, x => x.Status); BuildTranslatedTextFontSizeProcessor(); StatusTappedCommand = ReactiveCommand.Create <TappedRoutedEventArgs>(_ => { status.OnNext(Status != MainPageStatus.Pause ? MainPageStatus.Pause : MainPageStatus.Normal); }); var translator = new GoogleTranslator(); var zh = Language.ChineseSimplified; var en = Language.English; var lastError = false; var translate = Observable.FromEventPattern <object>( h => Clipboard.ContentChanged += h, h => Clipboard.ContentChanged -= h) .Merge( Observable.Return <object>(null) .Where(_ => !lastError) .Do(_ => lastError = false) ) .SubscribeOnDispatcher() .ObserveOn(TaskPoolScheduler.Default) .Throttle(TimeSpan.FromMilliseconds(50)) .TakeUntil(status.Where(x => x == MainPageStatus.Pause)) .RepeatWhen(_ => status.Where(_ => Status == MainPageStatus.Pause) .Where(x => x == MainPageStatus.Normal) .Do(_ => lastError = false) ) .Do(_ => status.OnNext(MainPageStatus.Busy)) .SelectMany(_ => Observable.FromAsync(async() => { var req = new ValueSet(); req.Add("Op", "Clipboard"); var res = await App.Connection?.SendMessageAsync(req); return((res.Message["Res"] as string).Trim()); }) .Catch(Observable.Return(string.Empty)) ) .WhereAndElse(x => x != string.Empty && char.IsLetter(x[0]), _ => status.OnNext(MainPageStatus.Normal)) .DistinctUntilChangedAndElse(_ => status.OnNext(MainPageStatus.Normal)) .Select(x => x.Replace("\r\n", " ")) .Select(x => Observable.FromAsync(async() => await translator.TranslateLiteAsync(x, en, zh))) .Switch() .Select(x => x.MergedTranslation) .Do(_ => status.OnNext(MainPageStatus.Normal)) ; // workaround for use unassigned variable Action subTranslate = () => throw new NotImplementedException(); subTranslate = () => { translate.ObserveOnDispatcher() .ToPropertyEx(this, x => x.Translated) .ThrownExceptions .Subscribe(e => { status.OnNext(MainPageStatus.Failed); Debug.WriteLine($"Exception: {e.Message}"); lastError = true; subTranslate(); }); }; this.WhenActivated(async(CompositeDisposable d) => { if (ApiInformation.IsApiContractPresent("Windows.ApplicationModel.FullTrustAppContract", 1, 0)) { Observable.FromEventPattern <AppServiceTriggerDetails>( h => App.AppServiceConnected += h, h => App.AppServiceConnected -= h) .Subscribe(x => { subTranslate(); }); Observable.FromEventPattern( h => App.AppServiceDisconnected += h, h => App.AppServiceDisconnected -= h) .ObserveOnDispatcher() .Subscribe(async x => { var dlg = new MessageDialog("AppService has disconnected."); await dlg.ShowAsync(); }); await LaunchFullTrustAsync(); } }); }
private static async void TranslateAsync(string line, long msgCount) { var translator = new GoogleTranslator(); Language from = Language.Auto; Language to = Language.Russian; MatchCollection matches = paramCatch.Matches(line); if (!int.TryParse(StringHelper.Replacer.Clean(matches[1].Value), out int parsedChatType)) { parsedChatType = 0; } ChatType chatType = ChatType.LogColorYellow; bool knownMesType = true; if (Enum.IsDefined(typeof(ChatType), parsedChatType)) { chatType = (ChatType)parsedChatType; } else { knownMesType = false; } IMessage msg = new IMessage(matches[0].Value, chatType, matches[2].Value, matches[3].Value); string newMessage = $"{msg.TimeStamp} [{msg.Sender}]: \"{msg.Text}\""; Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine($"<< {newMessage}"); Console.ResetColor(); if (!knownMesType) { string unknownMesType = $"Finded unexpected type of message: {parsedChatType}"; Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine($"<< {unknownMesType}"); Console.ResetColor(); if (!File.Exists(ErrorLog)) { using (FileStream file = File.Create(ErrorLog)) { // Create file if not exist } } File.AppendAllText(ErrorLog, DateTime.Now + $" {unknownMesType}\n \"{newMessage}\"\n\n"); } bool success = false; int retry = 0; while (!success && retry < 3) { try { if (!Debug) { if (!(msg.Text.Length <= 2)) { TranslationResult result = await translator.TranslateLiteAsync(msg.Text, from, to).ConfigureAwait(true); msg.Text = result.MergedTranslation; } } success = true; } catch (Exception e) { if (!File.Exists(ErrorLog)) { using (FileStream file = File.Create(ErrorLog)) { // Create file if not exist } } File.AppendAllText(ErrorLog, DateTime.Now + $"{e.Message}\n" + $"{e.StackTrace}\n"); retry++; } } if (!success) { Console.WriteLine($"Could not translate message in {retry} attempts"); } MessagesSender(msg, msgCount); }
public MainPageViewModel() { var status = new Subject <MainPageStatus>(); status.ObserveOnDispatcher() .ToPropertyEx(this, x => x.Status); StatusTappedCommand = ReactiveCommand.Create <TappedRoutedEventArgs>(_ => { status.OnNext(Status != MainPageStatus.Pause ? MainPageStatus.Pause : MainPageStatus.Normal); }); var translator = new GoogleTranslator(); var zh = Language.ChineseSimplified; var en = Language.English; var lastError = false; var translate = Observable.FromEventPattern <object>( h => Clipboard.ContentChanged += h, h => Clipboard.ContentChanged -= h) .Merge( Observable.Return <object>(null) .Where(_ => !lastError) .Do(_ => lastError = false) ) .SubscribeOnDispatcher() .ObserveOn(TaskPoolScheduler.Default) .Throttle(TimeSpan.FromMilliseconds(50)) .TakeUntil(status.Where(x => x == MainPageStatus.Pause)) .RepeatWhen(_ => status.Where(_ => Status == MainPageStatus.Pause) .Where(x => x == MainPageStatus.Normal) .Do(_ => lastError = false) ) .Do(_ => status.OnNext(MainPageStatus.Busy)) .SelectMany(_ => Observable.FromAsync(async() => { var req = new ValueSet(); req.Add("Op", "Clipboard"); var res = await App.Connection?.SendMessageAsync(req); return((res.Message["Res"] as string).Trim()); }) .Catch(Observable.Return(string.Empty)) ) .WhereAndElse(x => x != string.Empty && char.IsLetter(x[0]), _ => status.OnNext(MainPageStatus.Normal)) .DistinctUntilChangedAndElse(_ => status.OnNext(MainPageStatus.Normal)) .Select(x => x.Replace("\r\n", " ")) .Select(x => Observable.FromAsync(async() => await translator.TranslateLiteAsync(x, en, zh))) .Switch() .Select(x => x.MergedTranslation) .Do(_ => status.OnNext(MainPageStatus.Normal)) ; SubTranslate = () => { translate.ObserveOnDispatcher() .ToPropertyEx(this, x => x.Translated) .ThrownExceptions .Subscribe(e => { status.OnNext(MainPageStatus.Failed); Debug.WriteLine($"Exception: {e.Message}"); lastError = true; SubTranslate(); }); }; }
private async void translateToEnglishToolStripMenuItem_Click(object sender, EventArgs e) { var translator = new GoogleTranslator(); Enabled = false; Language from = Language.German; //Language to = GoogleTranslator.GetLanguageByName("Japanese"); Language to = Language.English; int tmpCnt = 0; foreach (var scriptMsg in listBox_ScriptMessages.Items) { _timerMessageApply.Enabled = false; ScriptMessage message = (ScriptMessage)scriptMsg; if (message == null) { return; } //richTextBox_ScriptMessage.Text = message.Content; ///UpdatePreview(message); List <string> dialogs = new List <string>(); foreach (var dialog in message.ContentTextArray) { if (dialog != "" || dialog != string.Empty) { string cleanInput = dialog.Replace("\r", " ").Replace("\n", string.Empty); //cleanInput = cleanInput.Substring(cleanInput.IndexOf(':') + 1); TranslationResult result = await translator.TranslateLiteAsync(cleanInput, from, to); dialogs.Add(result.MergedTranslation); } } Regex x = new Regex(@"(\%COL\([0-9]+\)\:([a-zA-Z]+)\%COL\([0-9]+\)\:)([\s\S]*?(?=\%KW\:))"); Regex y = new Regex(@"(\%COL\([0-9]+\)\:)([\s\S]*?(?=\%KW\:))"); string tmpContent = message.Content; MatchCollection matches = x.Matches(tmpContent); int messageRegexGroup = 3; //try alterantive regex when no match if (matches.Count <= 0) { matches = y.Matches(tmpContent); messageRegexGroup = 2; } int dialogCharLimitRow = 22; int actualRow = 1; int matchIterator = 0; foreach (Match ItemMatch in matches) { var splitDialog = dialogs[matchIterator].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); StringBuilder stringBuilder = new StringBuilder(); Console.WriteLine("NameLength: " + ItemMatch.Groups[2].Length); dialogCharLimitRow -= ItemMatch.Groups[2].Length; if (ItemMatch.Groups[2].Length % 2 != 1 && ItemMatch.Groups[2].Length != 0) { stringBuilder.Append(" "); dialogCharLimitRow -= 1; } foreach (var word in splitDialog) { if (word.Length > 22) { MessageBox.Show("Validation failed! The word " + word + " is TOO LONG! Parsing stopped!", "Word is too long for the game engine!"); break; } if ((word.Length + 1) >= dialogCharLimitRow) { actualRow += 1; if (actualRow >= 6) { //Optional TODO: Append the correct name! //TODO: clear up this copypaste festival someday stringBuilder.Append("%KW:%CLR:%COL(5):" + ItemMatch.Groups[2].Value + ":%COL(1):"); actualRow = 1; dialogCharLimitRow = 22 - ItemMatch.Groups[2].Length; if (ItemMatch.Groups[2].Length % 2 != 1 && ItemMatch.Groups[2].Length != 0) { stringBuilder.Append(" "); dialogCharLimitRow -= 1; } } stringBuilder.Append("%LF:"); //NEW LINE stringBuilder.Append(word); stringBuilder.Append(" "); dialogCharLimitRow = 22 - (word.Length + 1); } else { stringBuilder.Append(word); //write out word stringBuilder.Append(" "); dialogCharLimitRow -= (word.Length + 1); // minus empty space } } tmpContent = tmpContent.Replace(ItemMatch.Groups[messageRegexGroup].Value, stringBuilder.ToString()); stringBuilder.Clear(); actualRow = 1; matchIterator++; } //(\%COL\([0-9]+\)\:([a-zA-Z]+)\%COL\([0-9]+\)\:)([\s\S]*?(?=\%KW\:)) //match count is 0..x // group2 = Message name (for length parser), group 3: complette text string until kill window command //if no match use //(\%COL\([0-9]+\)\:)([\s\S]*?(?=\%KW\:)) //match count is 0..x // group2 = complette text string until kill window command // regex for messages without name in it //if no match then skip message but make at least a console.log //message.ContentAlternative = tmpContent; message.ContentAlternative = message.Content; //backup old translation for preview purposes message.Content = tmpContent; //if (tmpCnt >= 16) //debug limit because google api will lock me out when i make too many requests //{ // Enabled = true; // break; //} tmpCnt++; Invoke((MethodInvoker) delegate { progressBar_Progress.Value = (int)((double)tmpCnt / listBox_ScriptMessages.Items.Count * 100); }); } MessageBox.Show("Selected chapter was translated!", "API Translation"); Invoke((MethodInvoker) delegate { progressBar_Progress.Value = 0; Enabled = true; }); }
public async void RunServerThreadAsync(Socket client) { #if !DEBUG try #endif { String originalRequest = Recieve(client); //헤더 가져오기 if (originalRequest != "") { foreach (String headers in GetHeaders(originalRequest)) { WriteConsole(headers, ConsoleColor.DarkGray); } if (originalRequest.Contains("nmsg") && originalRequest.Contains("api.json/")) // 일반적인 경우 { if (translator == (int)Translators.None) { SendOriginalServer(client, "api.json/", originalRequest); } else { var http = (HttpWebRequest)WebRequest.Create(new Uri("http://202.248.252.234/api.json/")); foreach (string header in GetHeaders(originalRequest)) { if (header.Contains("Host:")) { http.Host = GetHeaderValue(header); } else if (header.Contains("User-Agent:")) { http.UserAgent = GetHeaderValue(header); } else if (header.Contains("Content-Type:")) { http.UserAgent = GetHeaderValue(header); } else if (header.Contains("Accept:")) { http.Accept = GetHeaderValue(header); } else if (header.Contains("Referer:")) { http.Referer = GetHeaderValue(header); } else { http.Headers.Add(header); } } http.Method = "POST"; string parsedContent = GetPayloads(originalRequest); if (parsedContent != "") { UTF8Encoding encoding = new UTF8Encoding(); Byte[] bytes = encoding.GetBytes(parsedContent); Stream newStream = http.GetRequestStream(); newStream.Write(bytes, 0, bytes.Length); newStream.Close(); var response = http.GetResponse(); string responseOriginal = Encoding.UTF8.GetString(response.Headers.ToByteArray()); var stream = response.GetResponseStream(); var sr = new StreamReader(stream); string content = sr.ReadToEnd(); response.Close(); JArray jArray = JArray.Parse(content); List <JToken> jTokens = new List <JToken>(); List <string> splited = new List <string>(); var jTokensList = new List <List <JToken> >(); int c = 0; int d = 0; int cb = 0; foreach (var item in jArray) { if (item["chat"] != null && item["chat"]["content"] != null) { jTokens.Add(item); } } if (jTokens.Count != 0) { while (true) { d = 0; cb = c; for (int i = 0; i < 5000 && c < jTokens.Count; c++, d++) { i += (jTokens[c]["chat"]["content"] + Environment.NewLine).Length; } if (c == jTokens.Count) { jTokensList.Add(jTokens.GetRange(cb, d)); break; } else { jTokensList.Add(jTokens.GetRange(cb, d - 1)); c--; } } foreach (List <JToken> list in jTokensList) { string s = ""; foreach (JToken item in list) { s += (item["chat"]["content"] + Environment.NewLine); } splited.Add(s); } c = 0;//재활용 for (int i = 0; i < splited.Count; i++) { if (i != 0) { Thread.Sleep(5000); } string[] lines = null; if (translator == (int)Translators.Google) { TranslationResult result = await googleTranslator.TranslateLiteAsync(splited[i], from, to); lines = result.MergedTranslation.Split(new string[] { Environment.NewLine }, StringSplitOptions.None); } if (translator == (int)Translators.Papago) { splited[i] = splited[i].Replace(Environment.NewLine, "\n"); string result = papagoTranslate.Translate("ja", "ko", splited[i], "nsmt"); lines = result.Split(new string[] { "\n" }, StringSplitOptions.None); } for (int j = 0; j < lines.Length; j++) { jTokens[c++]["chat"]["content"] = lines[j]; } Console.WriteLine("{0} / {1} 완료", c, jTokens.Count); } } client.Send(GetSendByte(client, jArray.ToString(), responseOriginal, (int)((HttpWebResponse)response).StatusCode)); //클라이언트에 HTML 등 전송 } } } else if (originalRequest.Contains("www.nicovideo.jp")) { var http = (HttpWebRequest)WebRequest.Create(new Uri("http://202.248.110.184" + originalRequest.Split(' ')[1].Split('\r')[0])); foreach (string header in GetHeaders(originalRequest)) { if (header.Contains("Host:")) { http.Host = GetHeaderValue(header); } else if (header.Contains("User-Agent:")) { http.UserAgent = GetHeaderValue(header); } else if (header.Contains("Content-Type:")) { http.UserAgent = GetHeaderValue(header); } else if (header.Contains("Accept:")) { http.Accept = GetHeaderValue(header); } else if (header.Contains("Referer:")) { http.Referer = GetHeaderValue(header); } else { http.Headers.Add(header); } } http.Method = originalRequest.Contains("POST") ? "POST" : "GET"; string parsedContent = GetPayloads(originalRequest); if (parsedContent != "") { UTF8Encoding encoding = new UTF8Encoding(); Byte[] bytes = encoding.GetBytes(parsedContent); Stream newStream = http.GetRequestStream(); newStream.Write(bytes, 0, bytes.Length); newStream.Close(); } var response = http.GetResponse(); string responseOriginal = Encoding.UTF8.GetString(response.Headers.ToByteArray()); var stream = response.GetResponseStream(); var sr = new StreamReader(stream, Encoding.UTF8); string content = sr.ReadToEnd(); response.Close(); content = content.Replace("https:\\/\\/nmsg.nicovideo.jp", "http:\\/\\/nmsg.nicovideo.jp"); client.Send(GetSendByte(client, content, responseOriginal, (int)((HttpWebResponse)response).StatusCode)); //클라이언트에 HTML 등 전송 } else { SendOriginalServer(client, originalRequest.Split('/')[1].Split(' ')[0], originalRequest); } } WriteConsole("접속해제 :" + ((IPEndPoint)client.RemoteEndPoint).Address + ":" + ((IPEndPoint)client.RemoteEndPoint).Port, ConsoleColor.Green); client.Close(); } #if !DEBUG catch (Exception ex) { WriteConsole("클라이언트와의 연결에서 오류가 발생했습니다. 자세한 오류는 아래를 참고해주시기 바랍니다.", ConsoleColor.Red); WriteConsole(ex.ToString(), ConsoleColor.Red); client.Close(); } #endif }