|
| 1 | +using Microsoft.EnterpriseManagement; |
| 2 | +using Microsoft.EnterpriseManagement.Common; |
| 3 | +using Microsoft.EnterpriseManagement.Configuration; |
| 4 | +using System; |
| 5 | +using System.Collections.Generic; |
| 6 | +using System.IO; |
| 7 | +using System.Linq; |
| 8 | +using System.Net; |
| 9 | +using System.Text; |
| 10 | +using System.Threading.Tasks; |
| 11 | + |
| 12 | +namespace Advanced.Action.Log.Notifier |
| 13 | +{ |
| 14 | + public class AzureCognitiveServicesTranslate |
| 15 | + { |
| 16 | + //Detect a Language using Azure Translate |
| 17 | + //https://docs.microsoft.com/en-us/azure/cognitive-services/translator/tutorial-wpf-translation-csharp#detect-language-of-source-text |
| 18 | + public String LanguageDetect(EnterpriseManagementGroup emg, string text) |
| 19 | + { |
| 20 | + //Get the API key for Azure Translate from the Admin Settings MP |
| 21 | + EnterpriseManagementObject emoAdminSetting = emg.EntityObjects.GetObject<EnterpriseManagementObject>(new Guid("49a053e7-6080-e211-fd79-ca3607eecce7"), ObjectQueryOptions.Default); |
| 22 | + string ACSTranslateKey = emoAdminSetting[null, "ACSAPIKey"].Value.ToString(); |
| 23 | + |
| 24 | + //site |
| 25 | + string ACSTranslateSite = "https://api.cognitive.microsofttranslator.com/detect?api-version=3.0"; |
| 26 | + |
| 27 | + try |
| 28 | + { |
| 29 | + // Create request to Detect languages with Translator Text |
| 30 | + HttpWebRequest detectLanguageWebRequest = (HttpWebRequest)WebRequest.Create(ACSTranslateSite); |
| 31 | + detectLanguageWebRequest.Headers.Add("Ocp-Apim-Subscription-Key", ACSTranslateKey); |
| 32 | + detectLanguageWebRequest.ContentType = "application/json; charset=utf-8"; |
| 33 | + detectLanguageWebRequest.Method = "POST"; |
| 34 | + |
| 35 | + // Send request |
| 36 | + var serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); |
| 37 | + string jsonText = serializer.Serialize(text); |
| 38 | + |
| 39 | + string body = "[{ \"Text\": " + jsonText + " }]"; |
| 40 | + byte[] data = Encoding.UTF8.GetBytes(body); |
| 41 | + |
| 42 | + detectLanguageWebRequest.ContentLength = data.Length; |
| 43 | + |
| 44 | + using (var requestStream = detectLanguageWebRequest.GetRequestStream()) |
| 45 | + requestStream.Write(data, 0, data.Length); |
| 46 | + |
| 47 | + HttpWebResponse response = (HttpWebResponse)detectLanguageWebRequest.GetResponse(); |
| 48 | + |
| 49 | + // Read and parse JSON response |
| 50 | + var responseStream = response.GetResponseStream(); |
| 51 | + var jsonString = new StreamReader(responseStream, Encoding.GetEncoding("utf-8")).ReadToEnd(); |
| 52 | + dynamic jsonResponse = serializer.DeserializeObject(jsonString); |
| 53 | + |
| 54 | + // Fish out the detected language code |
| 55 | + var languageInfo = jsonResponse[0]; |
| 56 | + if (languageInfo["score"] > (decimal)0.5) |
| 57 | + { |
| 58 | + return languageInfo["language"]; |
| 59 | + } |
| 60 | + else |
| 61 | + { |
| 62 | + return "Unable to confidently detect input language."; |
| 63 | + } |
| 64 | + } |
| 65 | + catch |
| 66 | + { |
| 67 | + return "Unable to contact Azure."; |
| 68 | + } |
| 69 | + |
| 70 | + } |
| 71 | + |
| 72 | + //Translate a Language |
| 73 | + //https://docs.microsoft.com/en-us/azure/cognitive-services/translator/quickstart-csharp-translate |
| 74 | + //modified to follow suit from above request |
| 75 | + public String LanguageTranslate(EnterpriseManagementGroup emg, string SourceLanguageCode, string TargetLanguageCode, string TextToTranslate) |
| 76 | + { |
| 77 | + //Get the API key for Azure Translate from the Admin Settings MP |
| 78 | + EnterpriseManagementObject emoAdminSetting = emg.EntityObjects.GetObject<EnterpriseManagementObject>(new Guid("49a053e7-6080-e211-fd79-ca3607eecce7"), ObjectQueryOptions.Default); |
| 79 | + string ACSTranslateKey = emoAdminSetting[null, "ACSAPIKey"].Value.ToString(); |
| 80 | + |
| 81 | + //site |
| 82 | + //https://api.cognitive.microsofttranslator.com/translate?api-version=3.0&from=$($SourceLanguage)&to=$($TargetLanguage) |
| 83 | + string ACSTranslateSite = "https://api.cognitive.microsofttranslator.com/translate?api-version=3.0"; |
| 84 | + |
| 85 | + //prepare the text |
| 86 | + TextToTranslate = TextToTranslate.Trim(); |
| 87 | + |
| 88 | + // send HTTP request to perform the translation |
| 89 | + string uri = string.Format(ACSTranslateSite + "&from={0}&to={1}", SourceLanguageCode, TargetLanguageCode); |
| 90 | + |
| 91 | + // Send request |
| 92 | + var serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); |
| 93 | + string jsonText = serializer.Serialize(TextToTranslate); |
| 94 | + |
| 95 | + string body = "[{ \"Text\": " + jsonText + " }]"; |
| 96 | + byte[] data = Encoding.UTF8.GetBytes(body); |
| 97 | + |
| 98 | + try |
| 99 | + { |
| 100 | + // Create request to Detect languages with Translator Text |
| 101 | + HttpWebRequest translateLanguageWebRequest = (HttpWebRequest)WebRequest.Create(uri); |
| 102 | + translateLanguageWebRequest.Headers.Add("Ocp-Apim-Subscription-Key", ACSTranslateKey); |
| 103 | + translateLanguageWebRequest.ContentType = "application/json; charset=utf-8"; |
| 104 | + translateLanguageWebRequest.Method = "POST"; |
| 105 | + |
| 106 | + translateLanguageWebRequest.ContentLength = data.Length; |
| 107 | + |
| 108 | + using (var requestStream = translateLanguageWebRequest.GetRequestStream()) |
| 109 | + requestStream.Write(data, 0, data.Length); |
| 110 | + |
| 111 | + HttpWebResponse response = (HttpWebResponse)translateLanguageWebRequest.GetResponse(); |
| 112 | + |
| 113 | + // Read and parse JSON response |
| 114 | + var responseStream = response.GetResponseStream(); |
| 115 | + var jsonString = new StreamReader(responseStream, Encoding.GetEncoding("utf-8")).ReadToEnd(); |
| 116 | + dynamic jsonResponse = serializer.DeserializeObject(jsonString); |
| 117 | + |
| 118 | + //Return the translated text |
| 119 | + var translation = jsonResponse[0]; |
| 120 | + return translation["translations"][0]["text"]; |
| 121 | + } |
| 122 | + catch |
| 123 | + { |
| 124 | + return "Unable to contact Azure."; |
| 125 | + } |
| 126 | + } |
| 127 | + } |
| 128 | +} |
0 commit comments