**不要編寫網頁爬蟲抓取在線詞典**。理由:
| 平台 | 免費額度 | 特色 | C# SDK |
|---|---|---|---|
| 有道智雲 | 100萬字符/月 | 詞典擴展豐富、發音、例句 | 官方提供 |
| 百度翻譯 | 200萬字符/月 | 領域定製、文檔翻譯 | 官方提供 |
| 騰訊雲翻譯 | 500萬字符/月 | 高併發、低延遲 | NuGet: TencentCloudSDK |
| Azure Translator | 200萬字符/月 | 100+ 語言、自定義術語 | NuGet: Azure.AI.Translation |
public interface ITranslator {
Task TranslateAsync(string text, string from, string to);
}
public class TranslationResult {
public string Text { get; set; }
public string Phonetic { get; set; }
public string[] Examples { get; set; }
public string AudioUrl { get; set; }
}
// 有道實現
public class YoudaoTranslator : ITranslator { /* 實現細節 */ }
// 百度實現
public class BaiduTranslator : ITranslator { /* 實現細節 */ }
// 工廠/配置切換
public class TranslatorFactory {
public static ITranslator Create(string provider) => provider switch {
"Youdao" => new YoudaoTranslator(),
"Baidu" => new BaiduTranslator(),
_ => throw new ArgumentException("Unknown provider")
};
}
private async void btnTranslate_Click(object sender, EventArgs e) {
txtResult.Text = "翻譯中...";
try {
var translator = TranslatorFactory.Create("Youdao"); // 可從配置讀取
var result = await translator.TranslateAsync(txtInput.Text, "auto", "zh-CHS");
txtResult.Text = result.Text;
if (!string.IsNullOrEmpty(result.Phonetic)) lblPhonetic.Text = $"[{result.Phonetic}]";
if (result.AudioUrl != null) btnPlayAudio.Tag = result.AudioUrl; // 綁定播放
} catch (Exception ex) {
MessageBox.Show($"翻譯失敗: {ex.Message}");
}
}
stardict-oxford-gb-2.4.2),用 StardictSharp 讀取**官方 API + 策略模式 + 異步調用** = 穩定、可維護、可擴展的翻譯工具架構。拒絕爬蟲,從源頭解決問題。