ChatGTPAIHelper.cs 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738
  1. using ComPDFKit_Conversion.Options;
  2. using DryIoc;
  3. using ImTools;
  4. using Newtonsoft.Json;
  5. using Newtonsoft.Json.Linq;
  6. using PDF_Master.Properties;
  7. using PDF_Master.ViewModels.Dialog.ChatGPTAIDialogs;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Diagnostics;
  11. using System.IO;
  12. using System.Linq;
  13. using System.Net;
  14. using System.Net.Http;
  15. using System.Text;
  16. using System.Text.RegularExpressions;
  17. using System.Threading;
  18. using System.Threading.Tasks;
  19. using System.Web;
  20. using static Dropbox.Api.Files.SearchMatchType;
  21. using static Dropbox.Api.TeamLog.EventCategory;
  22. using static Google.Apis.Requests.BatchRequest;
  23. namespace PDF_Master.Helper
  24. {
  25. public static class ChatGTPAIHelper
  26. {
  27. #if DEBUG
  28. //测试环境
  29. //纠错重写
  30. private static string host = "https://ai.compdf.com";
  31. //百度翻译
  32. private static string translate = "http://101.132.103.13:8030";
  33. #else
  34. //纠错重写
  35. private static string host ="http://prod-cn.your-api-server.com";
  36. //百度翻译
  37. private static string translate ="https://api-server.compdf.com";
  38. #endif
  39. /// <summary>
  40. /// 翻译文档Key接口
  41. /// </summary>
  42. private static string Uri_fileKeytranslate = translate + "/v1/translate/fileUpload";
  43. /// <summary>
  44. /// 翻译文档接口
  45. /// </summary>
  46. private static string Uri_filetranslate = translate + "/v1/translate/fileTranslateHandle";
  47. /// <summary>
  48. /// 翻译文本接口
  49. /// </summary>
  50. private static string Uri_texttranslate = translate + "/v1/translate/textTrans";
  51. /// <summary>
  52. /// 错别字纠正
  53. /// </summary>
  54. private static string Uri_Correction = host + "/api/correct-typos";
  55. /// <summary>
  56. /// 错别字纠正
  57. /// </summary>
  58. private static string Uri_Rewrite = host + "/api/rewrite";
  59. #region AI服务器对接接口
  60. /// <summary>
  61. /// 翻译指定内容,可以指定语言
  62. /// </summary>
  63. /// <param name="content"></param>
  64. /// <param name="language">1=中文 2=英文 3=法语 4=汉语</param>
  65. /// <returns></returns>
  66. public async static Task<string> fileKeyTranslate(string content, string filename)
  67. {
  68. string Code = "Code" + "300";
  69. ServicePointManager.DefaultConnectionLimit = 200;
  70. HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Uri_fileKeytranslate);
  71. //关闭请求
  72. //弹窗内进度条关闭
  73. DocumentaryTranslationDialogViewModel.CancelProgress = () =>
  74. {
  75. if (request != null)
  76. {
  77. Code = "Code" + "-1";
  78. request.Abort();
  79. }
  80. };
  81. //进度条关闭
  82. App.mainWindowViewModel.ProcessCloseAction = () =>
  83. {
  84. if (request != null)
  85. {
  86. Code = "Code" + "-1";
  87. request.Abort();
  88. }
  89. };
  90. request.Method = "Post";
  91. //request.Accept = "application/vnd.api+json;version=1";
  92. request.UserAgent = "Apifox/1.0.0 (https://www.apifox.cn)";
  93. request.Timeout = 20000;
  94. request.ServicePoint.Expect100Continue = false;
  95. request.KeepAlive = false;
  96. var formData = new MultipartFormDataContent();
  97. byte[] data = File.ReadAllBytes(@content);
  98. MemoryStream stream = new MemoryStream(data);
  99. formData.Add(new ByteArrayContent(data), "file", filename);
  100. formData.Add(new StringContent("2"), "projectId");
  101. formData.Add(new StringContent("1.0.1"), "version");
  102. if (!string.IsNullOrEmpty(Settings.Default.UserDate.id))
  103. {
  104. formData.Add(new StringContent(Settings.Default.UserDate.id), "userId");
  105. }
  106. else
  107. {
  108. formData.Add(new StringContent("1"), "userId");
  109. }
  110. // 设置请求体格式
  111. request.ContentType = formData.Headers.ContentType.ToString();
  112. request.ContentLength = formData.Headers.ContentLength.Value;
  113. // 将FormData写入请求体
  114. using (var requestStream = request.GetRequestStream())
  115. {
  116. await formData.CopyToAsync(requestStream);
  117. }
  118. try
  119. {
  120. // 获取HTTP响应
  121. HttpWebResponse response2 = (HttpWebResponse)request.GetResponse();
  122. using (StreamReader reader = new StreamReader(response2.GetResponseStream()))
  123. {
  124. string responseData = reader.ReadToEnd();
  125. Console.WriteLine(responseData);
  126. reader.Close();
  127. JObject jobject = (JObject)JsonConvert.DeserializeObject(responseData);
  128. if (response2 != null)
  129. {
  130. response2.Close();
  131. }
  132. if (request != null)
  133. {
  134. request.Abort();
  135. }
  136. string translation = "";
  137. if (jobject["code"].ToObject<string>().ToLower() == "200")
  138. {
  139. translation = jobject["data"]["fileKey"].ToObject<string>().ToLower();
  140. return translation;
  141. }
  142. return "Code" + jobject["code"].ToObject<string>().ToLower();
  143. }
  144. }
  145. catch (WebException ex)
  146. {
  147. int statusCode = 0;
  148. if (ex.Response is HttpWebResponse)
  149. {
  150. //从网络异常信息里解析错误,后面的逻辑根据错误码判断会更准确
  151. statusCode = (int)((HttpWebResponse)ex.Response).StatusCode;
  152. }
  153. Trace.WriteLine("HTTP异常:" + ex.Message);
  154. if (statusCode == 401)
  155. {
  156. return "Code"+"401";
  157. }
  158. else
  159. {
  160. //-1为自己取消,300为一般错误
  161. return Code;
  162. }
  163. }
  164. }
  165. public static string HttpDownloadFile(string url, string path)
  166. {
  167. // 设置参数
  168. HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
  169. //发送请求并获取相应回应数据
  170. HttpWebResponse response = request.GetResponse() as HttpWebResponse;
  171. //直到request.GetResponse()程序才开始向目标网页发送Post请求
  172. Stream responseStream = response.GetResponseStream();
  173. //创建本地文件写入流
  174. Stream stream = new FileStream(path, FileMode.Create);
  175. byte[] bArr = new byte[1024];
  176. int size = responseStream.Read(bArr, 0, (int)bArr.Length);
  177. while (size > 0)
  178. {
  179. stream.Write(bArr, 0, size);
  180. size = responseStream.Read(bArr, 0, (int)bArr.Length);
  181. }
  182. stream.Close();
  183. responseStream.Close();
  184. return path;
  185. }
  186. /// <summary>
  187. /// 翻译指定内容,可以指定语言
  188. /// </summary>
  189. /// <param name="fileKey">文本Key</param>
  190. /// <param name="fromlanguage">文本语言</param>
  191. /// <param name="tolanguage">需要翻译的语言</param>
  192. /// <returns></returns>
  193. public static async Task<string> fileTranslate(string content, string fromlanguage, string tolanguage, bool isprocess = true)
  194. {
  195. string Code = "300";
  196. intProcess(isprocess,"Translating", System.Windows.Visibility.Visible);
  197. FileInfo file = new FileInfo(content);
  198. string fileKey = await fileKeyTranslate(content, file.Name);
  199. App.mainWindowViewModel.Value = 1;
  200. if (fileKey.Contains("Code"))
  201. {
  202. clossProcess();
  203. return fileKey.Replace("Code", "");
  204. }
  205. HttpWebResponse response = null;
  206. ServicePointManager.DefaultConnectionLimit =200;
  207. HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Uri_filetranslate);
  208. //关闭请求
  209. DocumentaryTranslationDialogViewModel.CancelProgress=()=>
  210. {
  211. if (request != null)
  212. {
  213. Code = "-1";
  214. request.Abort();
  215. }
  216. };
  217. App.mainWindowViewModel.ProcessCloseAction = () =>
  218. {
  219. if (request != null)
  220. {
  221. Code = "-1";
  222. request.Abort();
  223. }
  224. };
  225. request.Method = "Post";
  226. request.ContentType = "application/json";
  227. //request.Accept = "application/vnd.api+json;version=1";
  228. request.UserAgent = "Apifox/1.0.0 (https://www.apifox.cn)";
  229. //设置无限请求时间:由于文本翻译时间不确定且时间长
  230. request.Timeout = Timeout.Infinite;
  231. request.ServicePoint.Expect100Continue = false;
  232. request.KeepAlive = false;
  233. StringWriter sw = new StringWriter();
  234. using (JsonWriter writer = new JsonTextWriter(sw))
  235. {
  236. writer.WriteStartObject();
  237. writer.WritePropertyName("fileKey");
  238. writer.WriteValue(fileKey);
  239. writer.WritePropertyName("from");
  240. writer.WriteValue(fromlanguage);
  241. writer.WritePropertyName("to");
  242. writer.WriteValue(tolanguage);
  243. writer.WritePropertyName("projectId");
  244. writer.WriteValue("2");
  245. writer.WritePropertyName("version");
  246. writer.WriteValue("1.0.1");
  247. writer.WritePropertyName("userId");
  248. writer.WriteValue(Settings.Default.UserDate.id);
  249. writer.WriteEndObject();
  250. }
  251. try
  252. {
  253. App.mainWindowViewModel.Value = 2;
  254. string postBody = sw.ToString();
  255. using (StreamWriter writer = new StreamWriter(request.GetRequestStream()))
  256. {
  257. writer.Write(postBody);
  258. writer.Close();
  259. }
  260. App.mainWindowViewModel.Value = 3;
  261. response = (HttpWebResponse)request.GetResponse();
  262. using (StreamReader reader = new StreamReader(response.GetResponseStream()))
  263. {
  264. App.mainWindowViewModel.Value = 4;
  265. string responseData = reader.ReadToEnd();
  266. Console.WriteLine(responseData);
  267. reader.Close();
  268. JObject jobject = (JObject)JsonConvert.DeserializeObject(responseData);
  269. App.mainWindowViewModel.Value = 6;
  270. if (response != null)
  271. {
  272. response.Close();
  273. }
  274. if (request != null)
  275. {
  276. request.Abort();
  277. }
  278. if (jobject["code"].ToObject<string>().ToLower() == "200")
  279. {
  280. translate = jobject["data"]["ossDownUrl"].ToObject<string>().ToLower();
  281. //return jobject["code"].ToObject<string>().ToLower();
  282. using (var client = new WebClient())
  283. {
  284. App.mainWindowViewModel.Value = 8;
  285. string folderPath = file.FullName.Remove(file.FullName.LastIndexOf("."), file.FullName.Length - file.FullName.LastIndexOf(".")) + "_aiTranslation.pdf";
  286. folderPath = CommonHelper.CreateFilePath(folderPath);
  287. client.DownloadProgressChanged += (sender, e) =>
  288. {
  289. };
  290. client.DownloadFile(translate, folderPath);
  291. clossProcess();
  292. return folderPath;
  293. }
  294. }
  295. clossProcess();
  296. return jobject["code"].ToObject<string>().ToLower();
  297. }
  298. }
  299. catch(WebException ex)
  300. {
  301. clossProcess();
  302. int statusCode = 0;
  303. if (ex.Response is HttpWebResponse)
  304. {
  305. //从网络异常信息里解析错误,后面的逻辑根据错误码判断会更准确
  306. statusCode = (int)((HttpWebResponse)ex.Response).StatusCode;
  307. }
  308. Trace.WriteLine("HTTP异常:" + ex.Message);
  309. if (statusCode == 401)
  310. {
  311. return "401";
  312. }
  313. else {
  314. //-1为自己取消,300为一般错误
  315. return Code;
  316. }
  317. }
  318. }
  319. /// <summary>
  320. /// 翻译指定内容,可以指定语言
  321. /// </summary>
  322. /// <param name="content">翻译内容</param>
  323. /// <param name="fromlanguage">文本语言</param>
  324. /// <param name="tolanguage">需要翻译的语言</param>
  325. /// <returns></returns>
  326. public static String textTranslate(string content, string fromlanguage, string tolanguage, ref string translate)
  327. {
  328. HttpWebResponse response = null;
  329. ServicePointManager.DefaultConnectionLimit = 200;
  330. HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Uri_texttranslate);
  331. request.Method = "Post";
  332. request.ContentType = "application/json";
  333. //request.Accept = "application/vnd.api+json;version=1";
  334. request.UserAgent = "Apifox/1.0.0 (https://www.apifox.cn)";
  335. request.Timeout = 20000;
  336. request.ServicePoint.Expect100Continue = false;
  337. StringWriter sw = new StringWriter();
  338. using (JsonWriter writer = new JsonTextWriter(sw))
  339. {
  340. writer.WriteStartObject();
  341. writer.WritePropertyName("q");
  342. writer.WriteValue(content);
  343. writer.WritePropertyName("from");
  344. writer.WriteValue(fromlanguage);
  345. writer.WritePropertyName("to");
  346. writer.WriteValue(tolanguage);
  347. writer.WritePropertyName("projectId");
  348. writer.WriteValue("2");
  349. writer.WritePropertyName("version");
  350. writer.WriteValue("1.0.1");
  351. writer.WritePropertyName("userId");
  352. writer.WriteValue(Settings.Default.UserDate.id);
  353. writer.WriteEndObject();
  354. }
  355. try
  356. {
  357. string postBody = sw.ToString();
  358. using (StreamWriter writer = new StreamWriter(request.GetRequestStream()))
  359. {
  360. writer.Write(postBody);
  361. writer.Close();
  362. }
  363. response = (HttpWebResponse)request.GetResponse();
  364. using (StreamReader reader = new StreamReader(response.GetResponseStream()))
  365. {
  366. string responseData = reader.ReadToEnd();
  367. Console.WriteLine(responseData);
  368. reader.Close();
  369. JObject jobject = (JObject)JsonConvert.DeserializeObject(responseData);
  370. if (response != null)
  371. {
  372. response.Close();
  373. }
  374. if (request != null)
  375. {
  376. request.Abort();
  377. }
  378. if (jobject["code"].ToObject<string>().ToLower() == "200")
  379. {
  380. translate = jobject["data"]["dst"].ToObject<string>().ToLower();
  381. }
  382. //return jobject["code"].ToObject<string>().ToLower();
  383. return jobject["code"].ToObject<string>().ToLower();
  384. }
  385. }
  386. catch(WebException ex)
  387. {
  388. int statusCode = 0;
  389. if (ex.Response is HttpWebResponse)
  390. {
  391. //从网络异常信息里解析错误,后面的逻辑根据错误码判断会更准确
  392. statusCode = (int)((HttpWebResponse)ex.Response).StatusCode;
  393. }
  394. if (statusCode == 401)
  395. {
  396. return "401";
  397. }
  398. else return "300";
  399. }
  400. }
  401. /// <summary>
  402. /// 纠错
  403. /// </summary>
  404. /// <param name="content"></param>
  405. /// <returns></returns>
  406. public async static Task<string> Correction(string content)
  407. {
  408. intProcess(true, "Correction");
  409. System.Collections.Specialized.NameValueCollection namevalue = new System.Collections.Specialized.NameValueCollection();
  410. App.mainWindowViewModel.Value = 1;
  411. //需要纠错的内容
  412. namevalue["project_id"] = "2";
  413. namevalue["version"] = "1.0.1";
  414. if (!string.IsNullOrEmpty(Settings.Default.UserDate.id))
  415. {
  416. namevalue["user_id"] = Settings.Default.UserDate.id;
  417. }
  418. else
  419. {
  420. namevalue["user_id"] = "1";
  421. }
  422. namevalue["content"] = content;
  423. App.mainWindowViewModel.Value = 3;
  424. return await PostString(Uri_Correction, namevalue, "content");
  425. }
  426. /// <summary>
  427. /// 重写
  428. /// </summary>
  429. /// <param name="content"></param>
  430. /// <returns></returns>
  431. public async static Task<string> Rewrite(string content)
  432. {
  433. intProcess(true, "Rewrite");
  434. System.Collections.Specialized.NameValueCollection namevalue = new System.Collections.Specialized.NameValueCollection();
  435. App.mainWindowViewModel.Value = 1;
  436. //需要纠错的内容
  437. namevalue["project_id"] = "2";
  438. namevalue["version"] = "1.0.1";
  439. if (!string.IsNullOrEmpty(Settings.Default.UserDate.id))
  440. {
  441. namevalue["user_id"] = Settings.Default.UserDate.id;
  442. }
  443. else
  444. {
  445. namevalue["user_id"] = "1";
  446. }
  447. namevalue["content"] = content;
  448. App.mainWindowViewModel.Value = 3;
  449. return await PostString(Uri_Rewrite, namevalue, "content");
  450. }
  451. /// <summary>
  452. /// 从链接中返回存在的链接(仅返回第一个找到的链接)
  453. /// </summary>
  454. /// <param name="content"></param>
  455. /// <returns></returns>
  456. public static List<string> GetLinkFromString(string content)
  457. {
  458. if (string.IsNullOrEmpty(content))
  459. {
  460. return null;
  461. }
  462. // 创建正则表达式模式
  463. string pattern = @"(https?://[^\s]+)";
  464. // 获取所有匹配项
  465. MatchCollection matches = Regex.Matches(content, pattern);
  466. List<string> list = new List<string>();
  467. // 遍历并打印所有匹配项
  468. foreach (Match match in matches)
  469. {
  470. list.Add(match.Value);
  471. }
  472. return list;
  473. }
  474. public static string Code = "";
  475. /// <summary>
  476. /// 从接口获取信息,获取message对应value值
  477. /// </summary>
  478. /// <param name="url"></param>
  479. /// <param name="namevalue"></param>
  480. /// <returns></returns>
  481. private async static Task<string> PostString(string url, System.Collections.Specialized.NameValueCollection namevalue, string key = "message")
  482. {
  483. App.mainWindowViewModel.Value = 5;
  484. string repsonseData = "";
  485. try
  486. {
  487. using (var client = new WebClient())
  488. {
  489. byte[] bytes = await client.UploadValuesTaskAsync(url, namevalue);
  490. //转换成字符串类型
  491. var json = Encoding.Default.GetString(bytes);
  492. //将Json格式字符串转换成键值对
  493. //var values = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
  494. JObject jobject = (JObject)JsonConvert.DeserializeObject(json);
  495. App.mainWindowViewModel.Value = 8;
  496. string unicode = "";
  497. // 遍历字典对象输出键值对
  498. Code = jobject["code"].ToObject<string>().ToLower();
  499. if (Code == "200")
  500. {
  501. unicode = jobject["data"][key].ToObject<string>().ToLower();
  502. }
  503. //将Unicode格式转换成String
  504. //repsonseData = Regex.Unescape(unicode);
  505. repsonseData = unicode;
  506. }
  507. clossProcess();
  508. }
  509. catch (WebException ex)
  510. {
  511. int statusCode = 0;
  512. if (ex.Response is HttpWebResponse)
  513. {
  514. //从网络异常信息里解析错误,后面的逻辑根据错误码判断会更准确
  515. statusCode = (int)((HttpWebResponse)ex.Response).StatusCode;
  516. }
  517. if (statusCode == 401)
  518. {
  519. Code= "401";
  520. }
  521. else Code = "300";
  522. clossProcess();
  523. return null;
  524. }
  525. return repsonseData;
  526. }
  527. /// <summary>
  528. /// 初始进度条
  529. /// </summary>
  530. /// <param name="isprocess">是否需要进度条</param>
  531. /// <param name="progressTitle">文案</param>
  532. public static void intProcess(bool isprocess = true, string progressTitle = "Translating...", System.Windows.Visibility ProcessCloseBtnVisible = System.Windows.Visibility.Collapsed)
  533. {
  534. if (isprocess)
  535. {
  536. App.mainWindowViewModel.ProgressTitle = progressTitle;
  537. App.mainWindowViewModel.MaxValue = 10;
  538. App.mainWindowViewModel.Value = 0;
  539. App.mainWindowViewModel.IsProcessVisible = System.Windows.Visibility.Visible;
  540. App.mainWindowViewModel.ProcessCloseBtnVisible = ProcessCloseBtnVisible;
  541. }
  542. }
  543. /// <summary>
  544. /// 关闭进度条
  545. /// </summary>
  546. public static void clossProcess()
  547. {
  548. App.mainWindowViewModel.Value = 9;
  549. App.mainWindowViewModel.IsProcessVisible = System.Windows.Visibility.Collapsed;
  550. App.mainWindowViewModel.ProcessCloseBtnVisible = System.Windows.Visibility.Visible;
  551. }
  552. #endregion
  553. #region 支持翻译的语言
  554. /// <summary>
  555. /// 当前语言列表
  556. /// </summary>
  557. public static List<string> FromlanguageFamily { set; get; } = new List<string>();
  558. public static List<string> SetFromlanguageOrigin()
  559. {
  560. FromlanguageFamily.Clear();
  561. FromlanguageFamily.Add("Automatic Identification");
  562. FromlanguageFamily.Add("English");
  563. FromlanguageFamily.Add("Simplified Chinese");
  564. FromlanguageFamily.Add("Traditional Chinese");
  565. FromlanguageFamily.Add("Japanese");
  566. FromlanguageFamily.Add("Korean");
  567. FromlanguageFamily.Add("French");
  568. FromlanguageFamily.Add("Spanish");
  569. FromlanguageFamily.Add("Italian");
  570. FromlanguageFamily.Add("German");
  571. FromlanguageFamily.Add("Portuguese");
  572. FromlanguageFamily.Add("Russian");
  573. FromlanguageFamily.Add("Vietnamese");
  574. FromlanguageFamily.Add("Thai");
  575. FromlanguageFamily.Add("Arabic");
  576. FromlanguageFamily.Add("Greek");
  577. FromlanguageFamily.Add("Bulgarian");
  578. FromlanguageFamily.Add("Finnish");
  579. FromlanguageFamily.Add("Slovene");
  580. FromlanguageFamily.Add("Dutch");
  581. FromlanguageFamily.Add("Czech");
  582. FromlanguageFamily.Add("Swedish");
  583. FromlanguageFamily.Add("Polish");
  584. FromlanguageFamily.Add("Danish");
  585. FromlanguageFamily.Add("Romanian");
  586. FromlanguageFamily.Add("Hungarian");
  587. return FromlanguageFamily;
  588. }
  589. /// <summary>
  590. /// 需要翻译成对应语言列表
  591. /// </summary>
  592. public static List<string> TolanguageFamily { set; get; } = new List<string>();
  593. public static List<string> SetTolanguageOrigin()
  594. {
  595. TolanguageFamily.Clear();
  596. TolanguageFamily.Add("English");
  597. TolanguageFamily.Add("Simplified Chinese");
  598. TolanguageFamily.Add("Traditional Chinese");
  599. TolanguageFamily.Add("Japanese");
  600. TolanguageFamily.Add("Korean");
  601. TolanguageFamily.Add("French");
  602. TolanguageFamily.Add("Spanish");
  603. TolanguageFamily.Add("Italian");
  604. TolanguageFamily.Add("German");
  605. TolanguageFamily.Add("Portuguese");
  606. TolanguageFamily.Add("Russian");
  607. TolanguageFamily.Add("Vietnamese");
  608. TolanguageFamily.Add("Thai");
  609. TolanguageFamily.Add("Arabic");
  610. TolanguageFamily.Add("Greek");
  611. TolanguageFamily.Add("Bulgarian");
  612. TolanguageFamily.Add("Finnish");
  613. TolanguageFamily.Add("Slovene");
  614. TolanguageFamily.Add("Dutch");
  615. TolanguageFamily.Add("Czech");
  616. TolanguageFamily.Add("Swedish");
  617. TolanguageFamily.Add("Polish");
  618. TolanguageFamily.Add("Danish");
  619. TolanguageFamily.Add("Romanian");
  620. TolanguageFamily.Add("Hungarian");
  621. return TolanguageFamily;
  622. }
  623. /// <summary>
  624. /// 接口传值对应字符
  625. /// </summary>
  626. /// <param name="index">控制form与to的区别,form为0开始,to为1开始,因为to没有auto</param>
  627. /// <returns></returns>
  628. public static string UpdateLanguagebType(int index)
  629. {
  630. switch (index)
  631. {
  632. case 0:
  633. return "auto";
  634. case 1:
  635. return "en";
  636. case 2:
  637. return "zh";
  638. case 3:
  639. return "cht";
  640. case 4:
  641. return "jp";
  642. case 5:
  643. return "kor";
  644. case 6:
  645. return "fra";
  646. case 7:
  647. return "spa";
  648. case 8:
  649. return "it";
  650. case 9:
  651. return "de";
  652. case 10:
  653. return "pt";
  654. case 11:
  655. return "ru";
  656. case 12:
  657. return "vie";
  658. case 13:
  659. return "th";
  660. case 14:
  661. return "ara";
  662. case 15:
  663. return "el";
  664. case 16:
  665. return "bul";
  666. case 17:
  667. return "fin";
  668. case 18:
  669. return "slo";
  670. case 19:
  671. return "nl";
  672. case 20:
  673. return "cs";
  674. case 21:
  675. return "swe";
  676. case 22:
  677. return "pl";
  678. case 23:
  679. return "dan";
  680. case 24:
  681. return "rom";
  682. case 25:
  683. return "hu";
  684. default:
  685. return "";
  686. }
  687. }
  688. #endregion
  689. }
  690. }