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);
            }
        }