Beispiel #1
0
        /// <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);
            }
        }
Beispiel #2
0
        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;
        }