/// <summary> /// 开始翻译方法 /// </summary> /// <param name="line">待翻译字符串</param> /// <param name="type">使用的翻译服务</param> /// <returns></returns> internal static async Task <string> BeginTranslationAsync(string line, translateType type) { try { switch (type) { case translateType.Baidu: return(await BaiduTranslateAsync(line)); case translateType.Google: return(await GoogleTranslateAsync(line)); default: return(await BaiduTranslateAsync(line)); } } catch (System.Net.WebException ex) { throw new System.Net.WebException(ex.Message); } }
private async void btn_trans_Click(object sender, EventArgs e) { txt_OpenTxt.Clear(); translateType trasnType = cmb_trasnType.Text == "Google" ? translateType.Google : translateType.Baidu; string[] carList = { @"\n", "@", "$", "=", "\"", "{", "}", "(", ")", "'", ":", "_", "?", "!", "<", ">", "|", "&", ":", @"\", "+", "-", "*", "/", "%" }; int charNum = 0; int num = -1; string subStr = string.Empty; string chars = string.Empty; string str = string.Empty; string[] lines; List <string> newLines; string mesFileName = string.Empty; btn_trans.Enabled = false; btn_SaveFile.Enabled = false; btn_openFile.Enabled = false; this.ActiveControl = txt_OpenTxt; // 设定活动控件(给予焦点) pgb_fileProgress.Maximum = fileList.Length; pgb_fileProgress.Value = 0; foreach (string file in fileList) //迭代文件列表 { txt_OpenTxt.Clear(); newLines = new List <string>(); //新的内容行数组 mesFileName = new FileInfo(file).Name; //取得当前的文件名称 lines = File.ReadAllLines(file); //将文件内容分行读入数组 if (lines.Length == 0) { break; } pgb_lineProgress.Maximum = lines.Length; pgb_lineProgress.Value = 0; foreach (string line in lines) //迭代分行内容数组 { charNum = 0; num = line.IndexOf("="); if (num >= 0) //有等号 { subStr = line.Substring(num + 1); //取得等号后有效部分 foreach (string s in carList) //迭代特殊符号数组 { if (subStr.IndexOf(s) >= 0) { charNum += 1; //记录特殊符号的个数 chars = s; //记住符号 } } try { if (charNum > 0) //有特殊符号 { if (charNum == 1) { switch (chars) { case "_": str = line.Substring(0, num + 1) + await Translation.BeginTranslationAsync(subStr.Replace("_", ""), trasnType) + "\n"; break; case @"\n": str = line.Substring(0, num + 1) + await Translation.BeginTranslationAsync(subStr.Replace(@"\n", " "), trasnType) + "\n"; break; case ":": str = line.Substring(0, num + 1) + await Translation.BeginTranslationAsync(subStr, trasnType) + "\n"; break; case "&": str = line.Substring(0, num + 1) + await Translation.BeginTranslationAsync(subStr, trasnType) + "\n"; break; case "/": str = line.Substring(0, num + 1) + await Translation.BeginTranslationAsync(subStr, trasnType) + "\n"; break; case "-": str = line.Substring(0, num + 1) + await Translation.BeginTranslationAsync(subStr, trasnType) + "\n"; break; case "?": str = line.Substring(0, num + 1) + await Translation.BeginTranslationAsync(subStr, trasnType) + "\n"; break; case "'": str = line.Substring(0, num + 1) + await Translation.BeginTranslationAsync(subStr, trasnType) + "\n"; break; default: str = line; break; } newLines.Add(str); txt_OpenTxt.AppendText(str); continue; } newLines.Add(line); //如果存在其他或者多个特殊符号不执行翻译直接写入数组 txt_OpenTxt.AppendText(line + "\n"); continue; } else //没有特殊符号,翻译后拼接行 { str = line.Substring(0, num + 1) + await Translation.BeginTranslationAsync(subStr, trasnType) + "\n"; newLines.Add(str); txt_OpenTxt.AppendText(str); } } catch (System.Net.WebException ex) { MessageBox.Show(ex.Message); btn_trans.Enabled = true; return; } } else //如果没有等号直接写入数组 { newLines.Add(line); txt_OpenTxt.AppendText(line + "\n"); } pgb_lineProgress.Value += 1; } pgb_fileProgress.Value += 1; //当迭代完成后保存文本到新文件 string savePath = rootPath + @"\JetBrainsTransMesTmp\messages\"; if (!Directory.Exists(savePath)) { Directory.CreateDirectory(savePath); //重建新的messages目录 } if (File.Exists(savePath + mesFileName)) { File.Delete(savePath + mesFileName); } File.WriteAllLines(savePath + mesFileName, newLines, Encoding.UTF8);//将翻译后的所有文本写入到文件; } btn_openFile.Enabled = true; btn_SaveFile.Enabled = true; }