using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Net; using System.IO; using System.Media; using System.Text; using Microsoft.Translator.Samples; using System.Threading; using System.ComponentModel; using System.Runtime.Remoting.Messaging; using System.Threading.Tasks; using System.Data; using System.Data.SqlClient; using System.Configuration; namespace Nader { public partial class BybelStudie : Page { // Before running the application, input the secret key for your subscription to Translator Text Translation API. private const string TEXT_TRANSLATION_API_SUBSCRIPTION_KEY = "143ed6c19c9c42f7936c48a870ac88db"; // Object to get an authentication token static private AzureAuthToken tokenProvider; // Cache language friendly names private string[] friendlyName = { " " }; // Cache list of languages for speech synthesis private List speakLanguages; // Dictionary to map language code from friendly name private Dictionary languageCodesAndTitles = new Dictionary(); static bool done = false; static string txtToSearch = ""; public delegate void MethodInvoker(); public delegate int AuthorizeDelegate(); BackgroundWorker worker = new BackgroundWorker(); protected void Page_Load(object sender, EventArgs e) { if (txtSearch.Text == "") { hideContent(); } else { showContent(); } tokenProvider = new AzureAuthToken(TEXT_TRANSLATION_API_SUBSCRIPTION_KEY); //GetLanguagesForTranslate(); //List of languages that can be translated //GetLanguageNamesMethod(tokenProvider.GetAccessToken(), friendlyName); //Friendly name of languages that can be translated //GetLanguagesForSpeakMethod(tokenProvider.GetAccessToken()); //List of languages that have a synthetic voice for text to speech } public void hideContent() { //Label1.Visible = false; Label2.Visible = false; Label3.Visible = false; btnNext.Visible = false; btnPre.Visible = false; btnNextBot.Visible = false; btnPreBot.Visible = false; ComboVerse.Visible = false; } public void showContent() { //Label1.Visible = true; Label2.Visible = true; Label3.Visible = true; btnNext.Visible = true; btnPre.Visible = true; btnNextBot.Visible = true; btnPreBot.Visible = true; ComboVerse.Visible = true; } protected void btnPre_Click(object sender, EventArgs e) { if(ComboVerse.SelectedIndex>0) { ComboVerse.SelectedIndex = ComboVerse.SelectedIndex - 1; loadVerse(); } } protected void btnNext_Click(object sender, EventArgs e) { if (ComboVerse.SelectedIndex < ComboVerse.Items.Count -1) { ComboVerse.SelectedIndex = ComboVerse.SelectedIndex + 1; loadVerse(); } } //*****BUTTON TO START TRANSLATION PROCESS protected void btnSearch_Click(object sender, EventArgs e) { if(txtSearch.Text == "") { hideContent(); } else { showContent(); } txtToSearch = txtSearch.Text; ComboVerse.Items.Clear(); lblTranslate.Text = "Besig om te vertaal"; string languageCode; languageCode = "en"; //*****BEGIN CODE TO MAKE THE CALL TO THE TRANSLATOR SERVICE TO PERFORM A TRANSLATION FROM THE USER TEXT ENTERED INCLUDES A CALL TO A SPEECH METHOD***** string txtToTranslate = txtToSearch; string uri = string.Format("http://api.microsofttranslator.com/v2/Http.svc/Translate?text=" + System.Web.HttpUtility.UrlEncode(txtToTranslate) + "&to={0}", languageCode); WebRequest translationWebRequest = WebRequest.Create(uri); translationWebRequest.Headers.Add("Authorization", tokenProvider.GetAccessToken()); //header value is the "Bearer plus the token from ADM WebResponse response = null; response = translationWebRequest.GetResponse(); Stream stream = response.GetResponseStream(); Encoding encode = Encoding.GetEncoding("utf-8"); StreamReader translatedStream = new StreamReader(stream, encode); System.Xml.XmlDocument xTranslation = new System.Xml.XmlDocument(); xTranslation.LoadXml(translatedStream.ReadToEnd()); /*if (speakLanguages.Contains(languageCode) && txtToTranslate != "") { //call the method to speak the translated text SpeakMethod(tokenProvider.GetAccessToken(), xTranslation.InnerText, languageCode); }*/ // Load openbible string searchVerse = xTranslation.InnerText.Replace(" ", "_"); string urlAddress = "https://www.openbible.info/topics/" + searchVerse; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlAddress); HttpWebResponse response2 = (HttpWebResponse)request.GetResponse(); string OpenBibleSource = ""; if (response2.StatusCode == HttpStatusCode.OK) { Stream receiveStream = response2.GetResponseStream(); StreamReader readStream = null; if (response2.CharacterSet == null) { readStream = new StreamReader(receiveStream); } else { readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response2.CharacterSet)); } OpenBibleSource = readStream.ReadToEnd(); response2.Close(); readStream.Close(); } string[] oBible = OpenBibleSource.Split(new string[] { "bibleref\">" }, StringSplitOptions.None); for (int i = 1; i < oBible.Length; i++) { int Fidx = oBible[i].IndexOf('<'); oBible[i] = oBible[i].Substring(0, Fidx); int startOfV = oBible[i].LastIndexOf(' '); string verse = oBible[i].Substring(startOfV + 1); string book = oBible[i].Substring(0, startOfV); string translatedBook = engToAfr(book); string newVerse = translatedBook + " " + verse; ComboVerse.Items.Add(newVerse); } if (ComboVerse.Items.Count > 0) { ComboVerse.SelectedIndex = 0; loadVerse(); } } protected void btnViewVerse_Click(object sender, EventArgs e) { if (ComboVerse.Text != "") { string bibleVerse = ComboVerse.Text; int startOfV = bibleVerse.LastIndexOf(' '); string verse = bibleVerse.Substring(startOfV + 1); string book = bibleVerse.Substring(0, startOfV); string translatedBook = afrToEng(book); bibleVerse = translatedBook + " " + verse; book = bibleVerse.Replace(" ", ""); book = book.Substring(0, 3); verse = verse.Replace(':', '.'); // Load Bible.org string urlAddress = "https://www.bible.com/af/bible/6/" + book + "." + verse; Response.Write(""); } } private void loadVerse() { if (ComboVerse.Text != "") { string bibleVerse = ComboVerse.Text; int startOfV = bibleVerse.LastIndexOf(' '); string verse = bibleVerse.Substring(startOfV + 1); string book = bibleVerse.Substring(0, startOfV); string translatedBook = afrToEng(book); bibleVerse = translatedBook + " " + verse; book = bibleVerse.Replace(" ", ""); book = book.Substring(0, 3); verse = verse.Replace(':', '.'); // Load Bible.org string urlAddress = "https://www.bible.com/af/bible/6/" + book + "." + verse; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlAddress); HttpWebResponse response2 = (HttpWebResponse)request.GetResponse(); string BibleSource = ""; if (response2.StatusCode == HttpStatusCode.OK) { Stream receiveStream = response2.GetResponseStream(); StreamReader readStream = null; if (response2.CharacterSet == null) { readStream = new StreamReader(receiveStream); } else { readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response2.CharacterSet)); } BibleSource = readStream.ReadToEnd(); response2.Close(); readStream.Close(); } //Process Bible source code string prefix = ""; int indx1 = BibleSource.IndexOf(prefix); int indx2 = BibleSource.IndexOf(""); string theVerse = BibleSource.Substring(indx1 + prefix.Length, indx2 - indx1); lblTranslate.Text = System.Web.HttpUtility.HtmlDecode(theVerse); } } protected void comboVerse_SelectedIndexChanged(object sender, EventArgs e) { loadVerse(); } //*****SPEECH CODE***** private void SpeakMethod(string authToken, string textToVoice, String languageCode) { string translatedString = textToVoice; string uri = string.Format("http://api.microsofttranslator.com/v2/Http.svc/Speak?text={0}&language={1}&format=" + HttpUtility.UrlEncode("audio/wav") + "&options=MaxQuality", translatedString, languageCode); WebRequest webRequest = WebRequest.Create(uri); webRequest.Headers.Add("Authorization", authToken); WebResponse response = null; try { response = webRequest.GetResponse(); using (Stream stream = response.GetResponseStream()) { using (SoundPlayer player = new SoundPlayer(stream)) { player.PlaySync(); } } } catch { throw; } finally { if (response != null) { response.Close(); response = null; } } } //*****CODE TO GET TRANSLATABLE LANGAUGE CODES***** private void GetLanguagesForTranslate() { string uri = "http://api.microsofttranslator.com/v2/Http.svc/GetLanguagesForTranslate"; WebRequest WebRequest = WebRequest.Create(uri); WebRequest.Headers.Add("Authorization", tokenProvider.GetAccessToken()); WebResponse response = null; try { response = WebRequest.GetResponse(); using (Stream stream = response.GetResponseStream()) { System.Runtime.Serialization.DataContractSerializer dcs = new System.Runtime.Serialization.DataContractSerializer(typeof(List)); List languagesForTranslate = (List)dcs.ReadObject(stream); friendlyName = languagesForTranslate.ToArray(); //put the list of language codes into an array to pass to the method to get the friendly name. } } catch { throw; } finally { if (response != null) { response.Close(); response = null; } } } //*****CODE TO GET TRANSLATABLE LANGAUGE FRIENDLY NAMES FROM THE TWO CHARACTER CODES***** private void GetLanguageNamesMethod(string authToken, string[] languageCodes) { string uri = "http://api.microsofttranslator.com/v2/Http.svc/GetLanguageNames?locale=en"; // create the request HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); request.Headers.Add("Authorization", tokenProvider.GetAccessToken()); request.ContentType = "text/xml"; request.Method = "POST"; System.Runtime.Serialization.DataContractSerializer dcs = new System.Runtime.Serialization.DataContractSerializer(Type.GetType("System.String[]")); using (System.IO.Stream stream = request.GetRequestStream()) { dcs.WriteObject(stream, languageCodes); } WebResponse response = null; try { response = request.GetResponse(); using (Stream stream = response.GetResponseStream()) { string[] languageNames = (string[])dcs.ReadObject(stream); for (int i = 0; i < languageNames.Length; i++) { languageCodesAndTitles.Add(languageNames[i], languageCodes[i]); //load the dictionary for the combo box } } } catch { throw; } finally { if (response != null) { response.Close(); response = null; } } } private void GetLanguagesForSpeakMethod(string authToken) { string uri = "http://api.microsofttranslator.com/v2/Http.svc/GetLanguagesForSpeak"; HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(uri); httpWebRequest.Headers.Add("Authorization", authToken); WebResponse response = null; try { response = httpWebRequest.GetResponse(); using (Stream stream = response.GetResponseStream()) { System.Runtime.Serialization.DataContractSerializer dcs = new System.Runtime.Serialization.DataContractSerializer(typeof(List)); speakLanguages = (List)dcs.ReadObject(stream); } } catch { throw; } finally { if (response != null) { response.Close(); response = null; } } } public string afrToEng(string afrikaans) { string translation = afrikaans; string[] englishBooks = File.ReadAllLines(HttpContext.Current.Server.MapPath("Engels.txt")); string[] afrikaansBooks = File.ReadAllLines(HttpContext.Current.Server.MapPath("Afrikaans.txt")); for (int i = 0; i < afrikaansBooks.Length; i++) { if (afrikaans.ToLower() == afrikaansBooks[i].ToLower()) { translation = englishBooks[i]; } } return translation; } public string engToAfr(string english) { string translation = english; string[] englishBooks = File.ReadAllLines(HttpContext.Current.Server.MapPath("Engels.txt")); string[] afrikaansBooks = File.ReadAllLines(HttpContext.Current.Server.MapPath("Afrikaans.txt")); for(int i = 0; i < englishBooks.Length; i++) { if(english.ToLower() == englishBooks[i].ToLower()) { translation = afrikaansBooks[i]; } } return translation; } } }