资讯详情

C#调用百度翻译API

使用示例: 在这里插入图片描述 百度返回的结果是分段的,可以发送带换行的文字翻译。 但是在获得翻译结果时,不能带换行。

按住大量文档注释ctrl然后点击鼠标链接跳转到链接 完整的语种列表可以使用包含类Languages访问 命名空间需要导入

 using System.Collections;  using System.Security.Cryptography;  using System.Web; 

代码:

 /// <summary>  /// 百度翻译AIP,你需要从<see href ="https://fanyi-api.baidu.com/api/trans/product/desktop?req=developer"/>获取密钥  /// <br/>这是免费的,不需要审核。  /// </summary>  class BaiDuTranslation  { 
          static DateTime datetime;   readonly string To;   readonly string ID;   readonly string Key;   readonly TimeSpan Delay;   readonly Dictionary<string, Result> dic = new Dictionary<string, Result>();   const string API_URL = "http://api.fanyi.baidu.com/api/trans/vip/translate";   /// <summary>   /// 这种语言的字典是根据言的字典   /// </summary>   /// <param name="scr">来源语种<inheritdoc cref="Languages" path="/remarks"/></param>   /// <returns>这种语言的存储字典</returns>    public Result this[string scr] => dic[scr];   /// <summary>   /// 百度翻译的AIP使用间隔短于指定时间的请求会导致错误   /// </summary>   /// <param name="iD">接口提供的id</param>   /// <param name="key">接口提供的Key</param>   /// <param name="delay">等待间隔的请求</param>   /// <param name="to">静态类可用于目标语种<see cref="Languges"/>中的常量选择,默认为中文<inheritdoc cref="Languages" path="/remarks"/></param> 
		public BaiDuTranslation(string iD, string key, int delay = 1000, string to = Languages.中文_简体)
		{ 
       
			ID = iD;
			Key = key;
			Delay = new TimeSpan(0, 0, 0, 0, delay);
			To = to;
		}
		///<summary>
		///向百度翻译发起一个翻译请求。由于翻译结果会自动按换行分割语句,所以需要从索引器访问完成的翻译。
		///<br/>
		///语种可以使用静态类<see cref="Languages"/>中的常量选择
		///</summary>
		///<param name="source">需要翻译的文字,上限5000字符</param>
		///<param name="from">来源语种,默认为自动检测<inheritdoc cref="Languages" path="/remarks"/></param>
		///<returns>此次请求的错误码。如果没有错则为null
		///<list type="table"> 
		/// <item>
		/// <term>52000</term>
		/// <description>成功。</description>
		/// </item>
		/// <item>
		/// <term>52001</term>
		/// <description>请求超时。请重试</description>
		/// </item>
		/// <item>
		/// <term>52002</term>
		/// <description>系统错误。请重试</description>
		/// </item>
		/// <item>
		/// <term>52003</term>
		/// <description>未授权用户。请检查appid是否正确或者服务是否开通</description>
		/// </item>
		/// <item>
		/// <term>54000</term>
		/// <description>必填参数为空。请检查是否少传参数</description>
		/// </item>
		/// <item>
		/// <term>54001</term>
		/// <description>签名错误。请检查您的签名生成方法</description>
		/// </item>
		/// <item>
		/// <term>54003</term>
		/// <description>访问频率受限。请降低您的调用频率,或进行身份认证后切换为高级版/尊享版</description>
		/// </item>
		/// <item>
		/// <term>54004</term>
		/// <description>账户余额不足。请前往<see href ="https://api.fanyi.baidu.com/api/trans/product/desktop">管理控制台</see>为账户充值</description>
		/// </item>
		/// <item>
		/// <term>54005</term>
		/// <description>长query请求频繁。请降低长query的发送频率,3s后再试</description>
		/// </item>
		/// <item>
		/// <term>58000</term>
		/// <description>客户端IP非法。检查个人资料里填写的IP地址是否正确,可前往<see href ="https://api.fanyi.baidu.com/access/0/3">开发者信息-基本信息</see> 修改 </description>
		/// </item>
		/// <item>
		/// <term>58001</term>
		/// <description>译文语言方向不支持。检查译文语言是否在语言列表里</description>
		/// </item>
		/// <item>
		/// <term>58002</term>
		/// <description>服务当前已关闭。请前往<see href ="https://api.fanyi.baidu.com/choose">管理控制台</see>开启服务</description>
		/// </item>
		/// <item>
		/// <term>90107</term>
		/// <description>认证未通过或未生效。请前往<see href ="https://api.fanyi.baidu.com/myIdentify">我的认证</see>查看认证进度</description>
		/// </item>
		///</list>
		///</returns> 
		public string GetTranslation(string source, string from = Languages.自动检测)
		{ 
       
			using var hc = new HttpClient();
			using var md5 = MD5.Create();
			var utf8 = HttpUtility.UrlEncode(source, System.Text.Encoding.UTF8);
			var randomNum = DateTime.Now.Millisecond.ToString();
			var md5Sign = new string(md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(ID + source + randomNum + Key)).SelectMany(s => $"{ 
         s:x2}").ToArray());
			var url = $"{ 
         API_URL}?q={ 
         utf8}&from={ 
         from}&to={ 
         To}&appid={ 
         ID}&salt={ 
         randomNum}&sign={ 
         md5Sign}";
			if (DateTime.Now - datetime < Delay)
				Task.Delay(datetime + Delay - DateTime.Now).Wait();
			datetime = DateTime.Now;
			var s = hc.GetStringAsync(url).Result;
			var r = System.Text.Json.JsonSerializer.Deserialize<TranslationResult>(s);
			if (r.error_code != null)
				return r.error_code;
			var d = r.trans_result.ToDictionary(t => t.src, t => t.dst);
			if (dic.ContainsKey(r.from))
				dic[r.from].Add(d);
			else
				dic[r.from] = new Result(d);
			return null;
		}
		/// <summary>
		/// 储存翻译结果的只读字典,可以进行遍历
		/// </summary>
		public struct Result : IEnumerable<KeyValuePair<string, string>>
		{ 
       
			/// <summary>
			/// 获得一个翻译,如果没有此文字的翻译则会抛出异常
			/// </summary>
			/// <param name="scr">被翻译的文字</param>
			/// <returns>翻译的结果</returns>
			public string this[string scr] => dic[scr];
			readonly Dictionary<string, string> dic;
			internal Result(Dictionary<string, string> dic = null)
			{ 
       
				this.dic = dic ?? new Dictionary<string, string>();
			}
			internal void Add(Dictionary<string, string> dic = null)
			{ 
       
				if (dic == null)
					return;
				foreach (var (k, v) in dic)
					this.dic[k] = v;
			}
			public IEnumerator<KeyValuePair<string, string>> GetEnumerator() => ((IEnumerable<KeyValuePair<string, string>>)dic).GetEnumerator();
			IEnumerator IEnumerable.GetEnumerator() => ((IEnumerable)dic).GetEnumerator();
		}
		/// <summary>
		/// 完整语种列表 
		/// </summary>
		/// <remarks> 
		/// 常用语种有:
		/// <list type="table">
		/// <item><term>中文</term><description>zh</description></item>
		/// <item><term>英语</term><description>en</description></item>
		/// <item><term>日语</term><description>jp</description></item>
		/// <item><term>韩语</term><description>kor</description></item> 
		/// <item><term>法语</term><description>fra</description></item>
		/// <item><term>俄语</term><description>ru</description></item>
		/// <item><term>德语</term><description>de</description></item> 
		/// <item><term>文言文</term><description>wyw</description></item>
		/// </list>
		/// </remarks>
		public static class Languages
		{ 
       
			public const string 自动检测 = "auto";
			public const string 阿拉伯语 = "ara";
			public const string 爱尔兰语 = "gle";
			public const string 奥克语 = "oci";
			public const string 阿尔巴尼亚语 = "alb";
			public const string 阿尔及利亚阿拉伯语 = "arq";
			public const string 阿肯语 = "aka";
			public const string 阿拉贡语 = "arg";
			public const string 阿姆哈拉语 = "amh";
			public const string 阿萨姆语 = "asm";
			public const string 艾马拉语 = "aym";
			public const string 阿塞拜疆语 = "aze";
			public const string 阿斯图里亚斯语 = "ast";
			public const string 奥塞梯语 = "oss";
			public const string 爱沙尼亚语 = "est";
			public const string 奥杰布瓦语 = "oji";
			public const string 奥里亚语 = "ori";
			public const string 奥罗莫语 = "orm";
			public const string 波兰语 = "pl";
			public const string 波斯语 = "per";
			public const string 布列塔尼语 = "bre";
			public const string 巴什基尔语 = "bak";
			public const string 巴斯克语 = "baq";
			public const string 巴西葡萄牙语 = "pot";
			public const string 白俄罗斯语 = "bel";
			public const string 柏柏尔语 = "ber";
			public const string 邦板牙语 = "pam";
			public const string 保加利亚语 = "bul";
			public const string 北方萨米语 = "sme";
			public const string 北索托语 = "ped";
			public const string 本巴语 = "bem";
			public const string 比林语 = "bli";
			public const string 比斯拉马语 = "bis";
			public const string 俾路支语 = "bal";
			public const string 冰岛语 = "ice";
			public const string 波斯尼亚语 = "bos";
			public const string 博杰普尔语 = "bho";
			public const string 楚瓦什语 = "chv";
			public const string 聪加语 = "tso";
			public const string 丹麦语 = "dan";
			public const string 德语 = "de";
			public const string 鞑靼语 = "tat";
			public const string 掸语 = "sha";
			public const string 德顿语 = "tet";
			public const string 迪维希语 = "div";
			public const string 低地德语 = "log";
			public const string 俄语 = "ru";
			public const string 法语 = "fra";
			public const string 菲律宾语 = "fil";
			public const string 芬兰语 = "fin";
			public const string 梵语 = "san";
			public const string 弗留利语 = "fri";
			public const string 富拉尼语 = "ful";
			public const string 法罗语 = "fao";
			public const string 盖尔语 = "gla";
			public const string 刚果语 = "kon";
			public const string 高地索布语 = "ups";
			public const string 高棉语 = "hkm";
			public const string 格陵兰语 = "kal";
			public const string 格鲁吉亚语 = "geo";
			public const string 古吉拉特语 = "guj";
			public const string 古希腊语 = "gra";
			public const string 古英语 = "eno";
			public const string 瓜拉尼语 = "grn";
			public const string 韩语 = "kor";
			public const string 荷兰语 = "nl";
			public const string 胡帕语 = "hup";
			public const string 哈卡钦语 = "hak";
			public const string 海地语 = "ht";
			public const string 黑山语 = "mot";
			public const string 豪萨语 = "hau";
			public const string 吉尔吉斯语 = "kir";
			public const string 加利西亚语 = "glg";
			public const string 加拿大法语 = "frn";
			public const string 加泰罗尼亚语 = "cat";
			public const string 捷克语 = "cs";
			public const string 卡拜尔语 = "kab";
			public const string 卡纳达语 = "kan";
			public const string 卡努里语 = "kau";
			public const string 卡舒比语 = "kah";
			public const string 康瓦尔语 = "cor";
			public const string 科萨语 = "xho";
			public const string 科西嘉语 = "cos";
			public const string 克里克语 = "cre";
			public const string 克里米亚鞑靼语 = "cri";
			public const string 克林贡语 = "kli";
			public const string 克罗地亚语 = "hrv";
			public const string 克丘亚语 = "que";
			public const string 克什米尔语 = "kas";
			public const string 孔卡尼语 = "kok";
			public const string 库尔德语 = "kur";
			public const string 拉丁语 = "lat";
			public const string 老挝语 = "lao";
			public const string 罗马尼亚语 = "rom";
			public const string 拉特加莱语 = "lag";
			public const string 拉脱维亚语 = "lav";
			public const string 林堡语 = "lim";
			public const string 林加拉语 = "lin";
			public const string 卢干达语 = "lug";
			public const string 卢森堡语 = "ltz";
			public const string 卢森尼亚语 = "ruy";
			public const string 卢旺达语 = "kin";
			public const string 立陶宛语 = "lit";
			public const string 罗曼什语 = "roh";
			public const string 罗姆语 = "ro";
			public const string 逻辑语 = "loj";
			public const string 马来语 = "may";
			public const string 缅甸语 = "bur";
			public const string 马拉地语 = "mar";
			public const string 马拉加斯语 = "mg";
			public const string 马拉雅拉姆语 = "mal";
			public const string 马其顿语 = "mac";
			public const string 马绍尔语 = "mah";
			public const string 迈蒂利语 = "mai";
			public const string 曼克斯语 = "glv";
			public const string 毛里求斯克里奥尔语 = "mau";
			public const string 毛利语 = "mao";
			public const string 孟加拉语 = "ben";
			public const string 马耳他语 = "mlt";
			public const string 苗语 = "hmn";
			public const string 挪威语 = "nor";
			public const string 那不勒斯语 = "nea";
			public const string 南恩德贝莱语 = "nbl";
			public const string 南非荷兰语 = "afr";
			public const string 南索托语 = "sot";
			public const string 尼泊尔语 = "nep";
			public const string 葡萄牙语 = "pt";
			public const string 旁遮普语 = "pan";
			public const string 帕皮阿门托语 = "pap";
			public 
        标签: s3urd交流电压变送器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台