public void Translate(IEnumerable<AutoTranslationItem> translationItems, string from, string to) { if (translationItems == null) throw new ArgumentNullException("translationItems"); if (string.IsNullOrEmpty(from)) throw new ArgumentNullException("from"); if (string.IsNullOrEmpty(to)) throw new ArgumentNullException("to"); var translator = new LanguageServiceClient(); var options = new TranslateOptions(); foreach (var translationItemsChunk in translationItems.GetChunks(ChunkSize)) { var texts = from p in translationItemsChunk select p.Text.Length <= 2000 ? p.Text : p.Text.Substring(0, 2000); // 2000 is used because this is the current limit of ms translation services // send for translation var textsArray = texts.ToArray(); TranslateArrayResponse[] microsoftTranslatorResponses = translator.TranslateArray(AppId, textsArray, from, to, options); // convert the response into our TranslationResult array var results = new List<AutoTranslationResult>(); var tempCounter = 0; foreach (var translationItem in translationItemsChunk) { var microsoftTranslatorResponse = microsoftTranslatorResponses[tempCounter]; var translationResult = new AutoTranslationResult { Error = microsoftTranslatorResponse.Error, Key = translationItem.Key, Text = microsoftTranslatorResponse.TranslatedText, OriginalText = translationItem.Text }; results.Add(translationResult); tempCounter++; } // invoke event with the translation this.InvokeTranslationReceived(new TranslationReceivedEventArgs(results.ToArray())); if (this.stopRequested) break; } }
public TranslationReceivedEventArgs(AutoTranslationResult[] results) { this.Results = results; }
internal void InvokeAfterItemAutoTranslation(AutoTranslationResult result) { EventHandler<AutoTranslationEventArgs<AutoTranslationResult>> handler = AfterItemAutoTranslation; if (handler != null) handler(this, new AutoTranslationEventArgs<AutoTranslationResult>(result)); }