使用示例: 百度返回的结果是分段的,可以发送带换行的文字翻译。 但是在获得翻译结果时,不能带换行。
按住大量文档注释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交流电压变送器