void PrepareToTranslateArray(TranslateTextArrayEventHandler eventHandler, List <string> keys, List <string> textsToTranslate, string languageFrom, string languageTo) { string body = "<TranslateArrayRequest>" + "<AppId />" + "<From>"; body += languageFrom; body += "</From>" + "<Options>" + " <Category xmlns=\"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2\" />" + "<ContentType xmlns=\"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2\">text/plain</ContentType>" + "<ReservedFlags xmlns=\"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2\" />" + "<State xmlns=\"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2\" />" + "<Uri xmlns=\"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2\" />" + "<User xmlns=\"http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2\" />" + "</Options>" + "<Texts>"; foreach (string text in textsToTranslate) { body += "<string xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/Arrays\">" + text + "</string>"; } body += "</Texts>" + "<To>"; body += languageTo; body += "</To>" + "</TranslateArrayRequest>"; WebRequest translationWebRequest = HttpWebRequest.Create(TranslateArrayURL); translationWebRequest.Headers["Authorization"] = headerValue; translationWebRequest.ContentType = "text/xml"; translationWebRequest.Method = "POST"; using (Stream stream = translationWebRequest.GetRequestStream()) { byte[] arrBytes = System.Text.Encoding.UTF8.GetBytes(body); stream.Write(arrBytes, 0, arrBytes.Length); } TranslateTextArrayData translateTextData = new TranslateTextArrayData(); translateTextData.keys = keys; translateTextData.translationWebRequest = translationWebRequest; translateTextData.eventHandler = eventHandler; translationWebRequest.BeginGetResponse(new AsyncCallback(ReadTranslateArrayResponse), translateTextData); }
/// <inheritdoc /> public void TranslateTextArray(TranslateTextArrayEventHandler eventHandler, List <string> keys, List <string> textsToTranslate, string languageFrom, string languageTo) { if (isInitialized == false) { Debug.LogError("The translator is not initialized! Aborting process"); return; } if (eventHandler == null) { Debug.LogError("There's no valid event handler set to translate text! Aborting process"); return; } if (textsToTranslate == null || keys == null || textsToTranslate.Count == 0 || keys.Count == 0 || keys.Count != textsToTranslate.Count || languageFrom == string.Empty || languageTo == string.Empty) { Debug.LogError("Invalid values to translate! Aborting process"); return; } Debug.Log("Translating keys, count:" + keys.Count + ", from:" + languageFrom + ", to:" + languageTo); List <string> splittedKeys = new List <string>(); List <string> splittedTexts = new List <string>(); int characterCount = 0; for (int i = 0; i < keys.Count; i++) { int currentCharacterCount = characterCount + textsToTranslate[i].Length; if (currentCharacterCount >= (MaxLetterTranslationCount * 0.7f) || (splittedKeys.Count + 1) >= (MaxArrayTranslationCount - 1)) { PrepareToTranslateArray(eventHandler, new List <string>(splittedKeys), new List <string>(splittedTexts), languageFrom, languageTo); currentCharacterCount = textsToTranslate[i].Length; splittedKeys.Clear(); splittedTexts.Clear(); } splittedKeys.Add(keys[i]); var textToTranslate = EscapeLinebreaks(textsToTranslate[i]); splittedTexts.Add(textToTranslate); characterCount = currentCharacterCount; } if (splittedKeys.Count > 0) { PrepareToTranslateArray(eventHandler, new List <string>(splittedKeys), new List <string>(splittedTexts), languageFrom, languageTo); } }