Example #1
0
        internal static async Task LoadDictionary(Enum_Engine Engine)
        {
            switch (Engine)
            {
            case Enum_Engine.Local:
                DictionaryStatus = Enum_DictionaryStatus.Loading;
                if (Settings.VocabularyCorrection)
                {
                    await ChineseConverter.Load(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Dictionary.csv"));
                }
                else
                {
                    CleanDictionary();
                }
                DictionaryStatus = Enum_DictionaryStatus.Loaded;
                break;

            case Enum_Engine.Fanhuaji:
                if (Fanhuaji.CheckConnection())
                {
                    Fanhuaji = new Fanhuaji(true, Fanhuaji_API.Fanhuaji.Terms_of_Service);
                }
                break;
            }
        }
Example #2
0
        /// <summary>
        /// 轉換文字
        /// </summary>
        /// <param name="origin">原始文字</param>
        /// <param name="ToChinese">0: 不轉換 1: 簡體轉繁體 2:繁體轉簡體</param>
        /// <param name="VocabularyCorrection">-1: 依照設定值變動 0:不使用辭典轉換 1:使用辭典轉換</param>
        /// <returns></returns>
        public static async Task <string> ConvertAsync(string origin, int ToChinese, int VocabularyCorrection = -1)
        {
            if (String.IsNullOrWhiteSpace(origin))
            {
                return(origin);
            }
            if (App.Settings.Engine == Enum_Engine.Local && App.DictionaryStatus != Enum_DictionaryStatus.Loaded)
            {
                if (App.DictionaryStatus == Enum_DictionaryStatus.NotLoad || App.DictionaryStatus == Enum_DictionaryStatus.Error)
                {
                    await App.LoadDictionary(Enum_Engine.Local);
                }
                System.Threading.SpinWait.SpinUntil(() => App.DictionaryStatus == Enum_DictionaryStatus.Loaded, 30000);
                if (App.DictionaryStatus != Enum_DictionaryStatus.Loaded)
                {
                    throw new Exception("詞彙修正的Dictionary載入失敗");
                }
            }
            if ((App.Settings.VocabularyCorrection && VocabularyCorrection != 0) || VocabularyCorrection == 1)
            {
                if (App.Settings.Engine == Enum_Engine.Local)
                {
                    switch (ToChinese)
                    {
                    case 1:
                        origin = App.ChineseConverter.Convert(origin, C2T: true);
                        origin = App.ChineseConverter.ToTraditional(origin);
                        break;

                    case 2:
                        origin = App.ChineseConverter.Convert(origin, C2T: false);
                        origin = App.ChineseConverter.ToSimplified(origin);
                        break;
                    }
                    return(origin);
                }
                else if (App.Settings.Engine == Enum_Engine.Fanhuaji)
                {
                    if (ToChinese != 0)
                    {
                        if (!Fanhuaji.CheckConnection())
                        {
                            throw new FanhuajiException("無法連線至繁化姬,請確認連線狀態");
                        }
                        Callback callback = await App.Fanhuaji.ConvertAsync(origin, (ToChinese == 1)?App.Settings.Fanhuaji_Setting.Converter_S_to_T : App.Settings.Fanhuaji_Setting.Converter_T_to_S, (Config)App.Settings.Fanhuaji_Setting);

                        if (callback.Code != 0)
                        {
                            throw new FanhuajiException("使用繁化姬時出現一些意料外的錯誤");
                        }
                        origin = callback.Data.Text;
                    }
                }
            }
            else
            {
                switch (ToChinese)
                {
                case 1:
                    origin = App.ChineseConverter.ToTraditional(origin);
                    break;

                case 2:
                    origin = App.ChineseConverter.ToSimplified(origin);
                    break;
                }
            }
            return(origin);
        }