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; } }
/// <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); }