/// <summary>
        /// Hook模式下调用的事件
        /// </summary>
        public void TranslateEventHook(object sender, SolvedDataRecvEventArgs e)
        {
            //1.得到原句
            string source = e.Data.Data;

            if (source == null && e.Data.HookFunc == "Clipboard")
            {
                return;
            }
            //2.进行去重
            string repairedText = TextRepair.RepairFun_Auto(Common.UsingRepairFunc, source);

            if (!Common.appSettings.EachRowTrans) // 不启用分行翻译
            {
                if (Common.UsingSrcLang == "en")
                {
                    repairedText = repairedText.Replace("<br>", " ").Replace("</br>", " ").Replace("\n", " ").Replace("\r", " ").Replace("\t", " ");
                }
                else
                {
                    repairedText = repairedText.Replace("<br>", "").Replace("</br>", "").Replace("\n", "").Replace("\r", "").Replace("\t", "");
                }
            }

            //去乱码
            repairedText = repairedText.Replace("_", "").Replace("-", "").Replace("+", "").Replace("&", "");
            TranslateText(repairedText);
        }
Пример #2
0
 public void DataRecvEventHandler(object sender, SolvedDataRecvEventArgs e)
 {
     Application.Current.Dispatcher.BeginInvoke((Action)(() =>
     {
         sourceTextBox.Text = e.Data.Data;
         repairedTextBox.Text = TextRepair.RepairFun_Auto(TextRepair.lstRepairFun[lstRepairFun[RepairFuncCombox.SelectedIndex]], sourceTextBox.Text);
     }));
 }
Пример #3
0
        /// <summary>
        /// Hook模式下调用的事件
        /// </summary>
        public void DataRecvEventHandler(object sender, SolvedDataRecvEventArgs e)
        {
            Application.Current.Dispatcher.BeginInvoke((Action)(() =>
            {
                //1.得到原句
                string source = e.Data.Data;

                //2.进行去重
                string repairedText = TextRepair.RepairFun_Auto(Common.UsingRepairFunc, source);

                if (Convert.ToBoolean(Common.appSettings.EachRowTrans) == false)
                {
                    //不需要分行翻译
                    repairedText = repairedText.Replace("<br>", "").Replace("</br>", "").Replace("\n", "").Replace("\t", "").Replace("\r", "");
                }
                //去乱码
                repairedText = repairedText.Replace("_", "").Replace("-", "").Replace("+", "").Replace("&", "");

                //补充:如果去重之后的文本长度超过指定值(默认100),直接不翻译、不显示
                //补充2:如果去重后文本长度为0,则不翻译不显示
                if (repairedText.Length != 0 && repairedText.Length <= Common.appSettings.TransLimitNums)
                {
                    //2.5 清除面板
                    SourceTextPanel.Children.Clear();

                    _currentsrcText = repairedText;

                    if (_isShowSource)
                    {
                        //3.分词
                        var mwi = _mecabHelper.SentenceHandle(repairedText);
                        //分词后结果显示
                        for (int i = 0; i < mwi.Count; i++)
                        {
                            StackPanel stackPanel = new StackPanel();
                            stackPanel.Orientation = Orientation.Vertical;
                            stackPanel.Margin = new Thickness(10, 0, 0, 10);

                            TextBlock textBlock = new TextBlock();
                            if (!string.IsNullOrEmpty(SourceTextFont))
                            {
                                FontFamily fontFamily = new FontFamily(SourceTextFont);
                                textBlock.FontFamily = fontFamily;
                            }
                            textBlock.Text = mwi[i].Word;
                            textBlock.Tag = mwi[i].Kana;
                            textBlock.Margin = new Thickness(0, 0, 0, 0);
                            textBlock.FontSize = SourceTextFontSize;
                            textBlock.Background = Brushes.Transparent;
                            textBlock.MouseLeftButtonDown += DictArea_MouseLeftButtonDown;
                            //根据不同词性跟字体上色
                            switch (mwi[i].PartOfSpeech)
                            {
                            case "名詞":
                                textBlock.Foreground = Brushes.AliceBlue;
                                break;

                            case "助詞":
                                textBlock.Foreground = Brushes.LightGreen;
                                break;

                            case "動詞":
                                textBlock.Foreground = Brushes.Red;
                                break;

                            case "連体詞":
                                textBlock.Foreground = Brushes.Orange;
                                break;

                            default:
                                textBlock.Foreground = Brushes.White;
                                break;
                            }


                            TextBlock superScript = new TextBlock();//假名或注释等的上标标签
                            if (!string.IsNullOrEmpty(SourceTextFont))
                            {
                                FontFamily fontFamily = new FontFamily(SourceTextFont);
                                superScript.FontFamily = fontFamily;
                            }
                            superScript.Text = mwi[i].Kana;
                            superScript.Margin = new Thickness(0, 0, 0, 2);
                            superScript.HorizontalAlignment = HorizontalAlignment.Center;
                            if ((double)SourceTextFontSize - 6.5 > 0)
                            {
                                superScript.FontSize = (double)SourceTextFontSize - 6.5;
                            }
                            else
                            {
                                superScript.FontSize = 1;
                            }
                            superScript.Background = Brushes.Transparent;
                            superScript.Foreground = Brushes.White;
                            stackPanel.Children.Add(superScript);


                            //是否打开假名标注
                            if (Common.appSettings.TF_isKanaShow)
                            {
                                stackPanel.Children.Add(textBlock);
                                SourceTextPanel.Children.Add(stackPanel);
                            }
                            else
                            {
                                textBlock.Margin = new Thickness(10, 0, 0, 10);
                                SourceTextPanel.Children.Add(textBlock);
                            }
                        }
                    }


                    //4.翻译前预处理
                    string beforeString = _beforeTransHandle.AutoHandle(repairedText);

                    //5.提交翻译
                    string transRes1 = string.Empty;
                    string transRes2 = string.Empty;
                    if (_translator1 != null)
                    {
                        transRes1 = _translator1.Translate(beforeString, Common.UsingDstLang, Common.UsingSrcLang);
                    }
                    if (_translator2 != null)
                    {
                        transRes2 = _translator2.Translate(beforeString, Common.UsingDstLang, Common.UsingSrcLang);
                    }

                    //6.翻译后处理
                    string afterString1 = _afterTransHandle.AutoHandle(transRes1);
                    string afterString2 = _afterTransHandle.AutoHandle(transRes2);

                    //7.翻译结果显示到窗口上
                    FirstTransText.Text = afterString1;
                    SecondTransText.Text = afterString2;

                    //8.翻译结果记录到队列
                    if (_gameTextHistory.Count > 5)
                    {
                        _gameTextHistory.Dequeue();
                    }
                    _gameTextHistory.Enqueue(repairedText + "\n" + afterString1 + "\n" + afterString2);

                    //9.翻译原句和结果记录到数据库
                    if (Common.appSettings.ATon)
                    {
                        bool addRes = _artificialTransHelper.AddTrans(repairedText, afterString1);
                        if (addRes == false)
                        {
                            HandyControl.Data.GrowlInfo growlInfo = new HandyControl.Data.GrowlInfo();
                            growlInfo.Message = Application.Current.Resources["ArtificialTransAdd_Error_Hint"].ToString();
                            growlInfo.WaitTime = 2;
                            Growl.InfoGlobal(growlInfo);
                        }
                    }
                }
            }));
        }
        /// <summary>
        /// Hook模式下调用的事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void DataRecvEventHandler(object sender, SolvedDataRecvEventArgs e)
        {
            Application.Current.Dispatcher.BeginInvoke((Action)(() =>
            {
                //0.清除面板
                SourceTextPanel.Children.Clear();

                //1.得到原句
                string source = e.Data.Data;

                //2.进行去重
                string repairedText = TextRepair.RepairFun_Auto(Common.UsingRepairFunc, source);

                currentsrcText = repairedText;

                if (IsShowSource == true)
                {
                    //3.分词
                    List <MecabWordInfo> mwi = mh.SentenceHandle(repairedText);
                    //分词后结果显示
                    for (int i = 0; i < mwi.Count; i++)
                    {
                        TextBlock tb = new TextBlock();
                        if (sourceTextFont != null && sourceTextFont != "")
                        {
                            FontFamily ff = new FontFamily(sourceTextFont);
                            tb.FontFamily = ff;
                        }
                        tb.Text = mwi[i].Word;
                        tb.Margin = new Thickness(10, 0, 0, 10);
                        tb.FontSize = sourceTextFontSize;
                        //根据不同词性跟字体上色
                        switch (mwi[i].PartOfSpeech)
                        {
                        case "名詞":
                            tb.Foreground = Brushes.AliceBlue;
                            break;

                        case "助詞":
                            tb.Foreground = Brushes.LightGreen;
                            break;

                        case "動詞":
                            tb.Foreground = Brushes.Red;
                            break;

                        case "連体詞":
                            tb.Foreground = Brushes.Orange;
                            break;

                        default:
                            tb.Foreground = Brushes.White;
                            break;
                        }
                        SourceTextPanel.Children.Add(tb);
                    }
                }

                if (Convert.ToBoolean(Common.appSettings.EachRowTrans) == true)
                {
                    //需要分行翻译
                    repairedText = repairedText.Replace("<br>", "").Replace("</br>", "").Replace("\n", "").Replace("\t", "").Replace("\r", "");
                }
                //去乱码
                repairedText = repairedText.Replace("_", "").Replace("-", "").Replace("+", "");

                //4.翻译前预处理
                string beforeString = bth.AutoHandle(repairedText);

                //5.提交翻译
                string transRes1 = "";
                string transRes2 = "";
                if (translator1 != null)
                {
                    transRes1 = translator1.Translate(beforeString, Common.UsingDstLang, Common.UsingSrcLang);
                }
                if (translator2 != null)
                {
                    transRes2 = translator2.Translate(beforeString, Common.UsingDstLang, Common.UsingSrcLang);
                }

                //6.翻译后处理
                string afterString1 = ath.AutoHandle(transRes1);
                string afterString2 = ath.AutoHandle(transRes2);

                //7.翻译结果显示到窗口上
                FirstTransText.Text = afterString1;
                SecondTransText.Text = afterString2;

                //8.翻译结果记录到队列
                if (GameTextHistory.Count > 5)
                {
                    GameTextHistory.Dequeue();
                }
                GameTextHistory.Enqueue(repairedText + "\n" + afterString1 + "\n" + afterString2);
            }));
        }
Пример #5
0
        /// <summary>
        /// Hook模式下调用的事件
        /// </summary>
        public void DataRecvEventHandler(object sender, SolvedDataRecvEventArgs e)
        {
            Application.Current.Dispatcher.BeginInvoke((Action)(() =>
            {
                //1.得到原句
                string source = e.Data.Data;

                //2.进行去重
                string repairedText = TextRepair.RepairFun_Auto(Common.UsingRepairFunc, source);

                //补充:如果去重之后的文本长度超过100,直接不翻译、不显示
                if (repairedText.Length <= 100)
                {
                    //2.5 清除面板
                    SourceTextPanel.Children.Clear();

                    _currentsrcText = repairedText;

                    if (_isShowSource)
                    {
                        //3.分词
                        var mwi = _mecabHelper.SentenceHandle(repairedText);
                        //分词后结果显示
                        for (int i = 0; i < mwi.Count; i++)
                        {
                            TextBlock textBlock = new TextBlock();
                            if (!string.IsNullOrEmpty(SourceTextFont))
                            {
                                FontFamily fontFamily = new FontFamily(SourceTextFont);
                                textBlock.FontFamily = fontFamily;
                            }
                            textBlock.Text = mwi[i].Word;
                            textBlock.Tag = mwi[i].Kana;
                            textBlock.Margin = new Thickness(10, 0, 0, 10);
                            textBlock.FontSize = SourceTextFontSize;
                            textBlock.Background = Brushes.Transparent;
                            textBlock.MouseLeftButtonDown += DictArea_MouseLeftButtonDown;
                            //根据不同词性跟字体上色
                            switch (mwi[i].PartOfSpeech)
                            {
                            case "名詞":
                                textBlock.Foreground = Brushes.AliceBlue;
                                break;

                            case "助詞":
                                textBlock.Foreground = Brushes.LightGreen;
                                break;

                            case "動詞":
                                textBlock.Foreground = Brushes.Red;
                                break;

                            case "連体詞":
                                textBlock.Foreground = Brushes.Orange;
                                break;

                            default:
                                textBlock.Foreground = Brushes.White;
                                break;
                            }
                            SourceTextPanel.Children.Add(textBlock);
                        }
                    }

                    if (Convert.ToBoolean(Common.appSettings.EachRowTrans))
                    {
                        //需要分行翻译
                        repairedText = repairedText.Replace("<br>", string.Empty).Replace("</br>", string.Empty).Replace("\n", string.Empty).Replace("\t", string.Empty).Replace("\r", string.Empty);
                    }
                    //去乱码
                    repairedText = repairedText.Replace("_", string.Empty).Replace("-", string.Empty).Replace("+", string.Empty);

                    //4.翻译前预处理
                    string beforeString = _beforeTransHandle.AutoHandle(repairedText);

                    //5.提交翻译
                    string transRes1 = string.Empty;
                    string transRes2 = string.Empty;
                    if (_translator1 != null)
                    {
                        transRes1 = _translator1.Translate(beforeString, Common.UsingDstLang, Common.UsingSrcLang);
                    }
                    if (_translator2 != null)
                    {
                        transRes2 = _translator2.Translate(beforeString, Common.UsingDstLang, Common.UsingSrcLang);
                    }

                    //6.翻译后处理
                    string afterString1 = _afterTransHandle.AutoHandle(transRes1);
                    string afterString2 = _afterTransHandle.AutoHandle(transRes2);

                    //7.翻译结果显示到窗口上
                    FirstTransText.Text = afterString1;
                    SecondTransText.Text = afterString2;

                    //8.翻译结果记录到队列
                    if (_gameTextHistory.Count > 5)
                    {
                        _gameTextHistory.Dequeue();
                    }
                    _gameTextHistory.Enqueue(repairedText + "\n" + afterString1 + "\n" + afterString2);
                }
            }));
        }