Exemple #1
0
        async Task <string> GetTranslatedWEBVTT(string uri, string inputLanguage, string outputLanguage)
        {
            string translatedContent = string.Empty;

            if (!string.IsNullOrEmpty(uri) && !string.IsNullOrEmpty(inputLanguage) && !string.IsNullOrEmpty(outputLanguage))
            {
                string content = await GetContent(uri);

                if (!string.IsNullOrEmpty(content))
                {
                    TextBoxLogWriteLine("Original Subtitles downloaded");
                    List <SubtitileItem> SubtitleList = ParseWEBVTT(content);
                    if (SubtitleList.Count > 0)
                    {
                        TextBoxLogWriteLine("Original Subtitles parsed");
                        translatedContent += "\xFEFF";
                        translatedContent += "WEBVTT\r\n\r\n";
                        SubtitileItem newItem = new SubtitileItem("", "", "");
                        bool          bError  = false;
                        foreach (SubtitileItem item in SubtitleList)
                        {
                            newItem.startTime = item.startTime;
                            newItem.endTime   = item.endTime;
                            if (!string.IsNullOrEmpty(item.subtitle))
                            {
                                newItem.subtitle = await _ttc.Translate(item.subtitle, inputLanguage, outputLanguage);

                                if (!string.IsNullOrEmpty(newItem.subtitle))
                                {
                                    translatedContent += newItem.ToString();
                                }
                                else
                                {
                                    bError = true;
                                    break;
                                }
                            }
                        }
                        if (bError == true)
                        {
                            TextBoxLogWriteLine("Error while translating subtitles at " + newItem.startTime);
                        }
                        else
                        {
                            TextBoxLogWriteLine("Translating subtitles done:" + translatedContent);
                        }
                    }
                }
                else
                {
                    TextBoxLogWriteLine("Error while downloading subtitles: subtitle string empty");
                }
            }
            return(translatedContent);
        }
Exemple #2
0
        List <SubtitileItem> ParseWEBVTT(string content)
        {
            List <SubtitileItem> result = new List <SubtitileItem>();

            // Remove the first WCHAR FEFF from the string
            int n = 0;

            while ((n < content.Length) && (content[n] != 'W'))
            {
                n++;
            }
            content = content.Substring(n);

            if (!string.IsNullOrEmpty(content) && (result != null))
            {
                string   separator        = "\r\n\r\n";
                string   separator1       = "\r\n";
                string   separator2       = "-->";
                string[] tabLineSeparator = { separator };
                string[] tabItemSeparator = { separator1, separator2 };
                string[] lines            = content.Split(tabLineSeparator, StringSplitOptions.RemoveEmptyEntries);
                if (lines.Count() > 0)
                {
                    if (lines[0] == "WEBVTT")
                    {
                        for (int i = 1; i < lines.Count(); i++)
                        {
                            string[] items = lines[i].Split(tabItemSeparator, StringSplitOptions.RemoveEmptyEntries);
                            if (items.Count() == 3)
                            {
                                string startTime = ParseWEBVTTTime(items[0]);
                                string endTime   = ParseWEBVTTTime(items[1]);
                                string subtitle  = items[2].Trim();
                                if (!string.IsNullOrEmpty(startTime) &&
                                    !string.IsNullOrEmpty(endTime) &&
                                    !string.IsNullOrEmpty(subtitle))
                                {
                                    SubtitileItem item = new SubtitileItem(startTime, endTime, subtitle);
                                    if (item != null)
                                    {
                                        result.Add(item);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            ;
            return(result);
        }