public void Translate(string fromlanguage, string tolanguage) { Dictionary <int, SrtUtterance> ToDict = new Dictionary <int, SrtUtterance>(); Parallel.ForEach(SrtContent, (srtutterance) => { SrtUtterance toutterance = new SrtUtterance(); toutterance = srtutterance.Value; toutterance.utterance = TranslationServices.Core.TranslationServiceFacade.TranslateString(srtutterance.Value.utterance, fromlanguage, tolanguage, "text/plain"); ToDict.Add(srtutterance.Key, toutterance); }); _langcode = tolanguage; SrtContent = ToDict; //Replace the master collection with the translated version. }
/// <summary> /// Load the SRT file into the internal document format, a dictionary. /// Key of the dictionary is the utterance number. /// </summary> /// <param name="srtdocument">A string containing the SRT document</param> /// <param name="langcode">The language code of the document</param> /// <returns>Count of utterances</returns> public int LoadSRT(string srtdocument, string langcode) { _langcode = langcode; string[] srt = srtdocument.Split('\n'); int lineindex = 0; int utteranceindex = 0; while (lineindex < srt.Length) { srt[lineindex] = srt[lineindex].Trim(); try { utteranceindex = Convert.ToInt16(srt[lineindex]); } catch { lineindex++; // skip line and move on continue; } if (utteranceindex > 0) { SrtUtterance srtutterance = new SrtUtterance(); srtutterance.uttno = utteranceindex; lineindex++; srtutterance.timefromto = srt[lineindex]; lineindex++; srtutterance.utterance = string.Empty; srtutterance.spanlines = 0; while (srt[lineindex].Trim().Length > 0) { srtutterance.utterance += srt[lineindex]; //add a space between the lines for languages that use space if (!nonspacelanguages.Contains(langcode.ToLowerInvariant())) { srtutterance.utterance += " "; } lineindex++; srtutterance.spanlines++; } srtutterance.utterance = srtutterance.utterance.Replace("\r", string.Empty); SrtContent.Add(utteranceindex, srtutterance); } } return(SrtContent.Count); }