diff --git a/bazaar/GoogleTranslator/GoogleTranslator.cpp b/bazaar/GoogleTranslator/GoogleTranslator.cpp index 83eabadea..a2f1afb64 100644 --- a/bazaar/GoogleTranslator/GoogleTranslator.cpp +++ b/bazaar/GoogleTranslator/GoogleTranslator.cpp @@ -1,214 +1,329 @@ -#include "GoogleTranslator.h" - -// Public methods - -GoogleTranslator::GoogleTranslator(){ - isTranslated = false; - translatedText = ""; - formatedText = ""; - correctionText = ""; - useProxy = false; - proxyHTTPAddress = ""; - proxyHTTPPort = 0; - languageFrom = "en"; - languageTo = "fr"; - correctedText = ""; -} - -bool GoogleTranslator::sendHttpPost(String& url, String& post, String& result_text, Gate2 _progress){ - // Proxy - refreshProxy(); - - httpClient.URL(url); - //httpClient.Agent("Mozilla/5.0"); - httpClient.TimeoutMsecs(5000); - httpClient.Post(); - httpClient.PostData(post); - - bool status = true; - - result_text = httpClient.ExecuteRedirect(HttpClient::DEFAULT_MAX_REDIRECT, - HttpClient::DEFAULT_RETRIES, _progress); - if (!IsNull(httpClient.GetError())||httpClient.IsAborted()){ - status = false; - result_text = String("Error:").Cat()< _progress){ - String url = "www.google.com/translate_a/t?client=t"; - //or - //String url = "http://translate.google.com/translate_t" - - url << String("&sl=") << languageFrom << String("&tl=") << languageTo; - // or - //url << String("&langpair=") << languageFrom << String("|") << languageTo; - - url << String("&ie=utf-8&oe=utf-8"); - - String post = String("text=") + UrlEncode(sourceText); - - isTranslated = sendHttpPost(url, post, translatedText, _progress); - - // Empty other properties - formatedText = ""; - correctionText = ""; - correctedText = ""; - - return isTranslated; -} - -//... need to finish this procedure and test it -// gtrans=&hl=&langpair=|&oe=UTF-8&text=&utrans= -// need to test "&hl=ru" if noun, adjective,... is returned in speciffic language -bool GoogleTranslator::SetCorrectionText(String correction_text, String& result_text, Gate2 _progress){ - if(!isTranslated) - return false; - - String url = "http://translate.google.com/translate_suggestion?"; - //or //? not sure - //String url = "http://www.google.com/translate_a/t?client=t"; - - url << String("&sl=") << languageFrom << String("&tl=") << languageTo; - // or - //url << String("&langpair=") << languageFrom << String("|") << languageTo; - - url << String("&ie=utf-8&oe=utf-8"); - - url << String("&hl=") << languageTo; - - url << String("&text=") << UrlEncode(sourceText); - url << String(">rans=") << UrlEncode(correctionText); - - String post = String("utrans=") + UrlEncode(correction_text); - - bool status = sendHttpPost(url, post, result_text, _progress); - - if(status) - correctedText = correction_text; - - return status; -} - -String GoogleTranslator::GetFormatedText(){ - if(!isTranslated) - return formatedText; // if not translated it is null or have error message - - if(formatedText.GetCount()>0) - return formatedText; - - // Common formatting - translatedText = replace_string ( translatedText, String(" \\r\\n ").Cat(), String("\n").Cat()); - translatedText = replace_string ( translatedText, String("\\r\\n ").Cat(), String("\n").Cat()); - translatedText = replace_string ( translatedText, String("\\\"").Cat(), String("\"").Cat()); - translatedText = replace_string ( translatedText, String("\\\\").Cat(), String("\\").Cat()); - translatedText = replace_string ( translatedText, String("\\n").Cat(), String("\n").Cat()); - translatedText = replace_string ( translatedText, String("\\x3c").Cat(), String("<").Cat()); - translatedText = replace_string ( translatedText, String("\\x3e").Cat(), String(">").Cat()); - - if(translatedText.StartsWith("\"")){// is string - formatedText = translatedText; - - formatedText.Remove(0, 1); - formatedText.Remove(formatedText.GetLength()-1, 1); - - // Set Correction text - correctionText = formatedText; - } - else if (translatedText.StartsWith("[\"")){ // is terms - String text_temp = translatedText, text_lf = String("\n"); - - // For debugging - //String original_text = translatedText; - - int text_temp_pos, text_temp_pos1; - text_temp_pos = 2; - - // Get first word - text_temp_pos1 = text_temp.Find("\"", text_temp_pos); - - if(text_temp_pos1==-1) - text_temp_pos1 = text_temp.GetLength(); - - formatedText = text_temp.Mid(text_temp_pos,text_temp_pos1 - text_temp_pos); - - // Set first term as text for correction - correctionText = formatedText; - - text_temp_pos = text_temp_pos1+1; - formatedText<1){ - formatedText< _progress){ + // Proxy + refreshProxy(); + + httpClient.URL(url+"&"+post); + //httpClient.Agent("Mozilla/5.0"); + httpClient.TimeoutMsecs(5000); + httpClient.Get(); + + bool status = true; + + result_text = httpClient.ExecuteRedirect(HttpClient::DEFAULT_MAX_REDIRECT, + HttpClient::DEFAULT_RETRIES, _progress); + if (!IsNull(httpClient.GetError())||httpClient.IsAborted()){ + status = false; + result_text = String("Error:").Cat()< _progress){ + // Proxy + refreshProxy(); + + httpClient.URL(url); + //httpClient.Agent("Mozilla/5.0"); + httpClient.TimeoutMsecs(5000); + httpClient.Post(); + httpClient.PostData(post); + + bool status = true; + + result_text = httpClient.ExecuteRedirect(HttpClient::DEFAULT_MAX_REDIRECT, + HttpClient::DEFAULT_RETRIES, _progress); + if (!IsNull(httpClient.GetError())||httpClient.IsAborted()){ + status = false; + result_text = String("Error:").Cat()< _progress){ + //String url = "http://translate.google.com/translate_a/t?client=t"; + // till 18.11.2009 was: + String url = "www.google.com/translate_a/t?client=t"; + //or + //String url = "http://translate.google.com/translate_t?"; + + url << String("&sl=") << languageFrom << String("&tl=") << languageTo; + // or + //url << String("&langpair=") << languageFrom << String("|") << languageTo; + + url << String("&ie=utf-8&oe=utf-8"); + + String post = String("text=") + UrlEncode(sourceText); + + isTranslated = sendHttpPost(url, post, translatedText, _progress); + // or + //isTranslated = sendHttpPost(url, post, translatedText, _progress); + + // Empty other properties + formatedText = ""; + correctionText = ""; + correctedText = ""; + + return isTranslated; +} + +//... need to finish this procedure and test it +// gtrans=&hl=&langpair=|&oe=UTF-8&text=&utrans= +// need to test "&hl=ru" if noun, adjective,... is returned in speciffic language +bool GoogleTranslator::SetCorrectionText(String correction_text, String& result_text, Gate2 _progress){ + if(!isTranslated) + return false; + + String url = "http://translate.google.com/translate_suggestion?"; + //or //? not sure + //String url = "http://www.google.com/translate_a/t?client=t"; + + url << String("&sl=") << languageFrom << String("&tl=") << languageTo; + // or + //url << String("&langpair=") << languageFrom << String("|") << languageTo; + + url << String("&ie=utf-8&oe=utf-8"); + + url << String("&hl=") << languageTo; + + url << String("&text=") << UrlEncode(sourceText); + url << String(">rans=") << UrlEncode(correctionText); + + String post = String("utrans=") + UrlEncode(correction_text); + + bool status = sendHttpPost(url, post, result_text, _progress); + + if(status) + correctedText = correction_text; + + return status; +} + +String GoogleTranslator::GetFormatedText(){ + if(!isTranslated) + return formatedText; // if not translated it is null or have error message + + if(formatedText.GetCount()>0) + return formatedText; + + // Common formatting + translatedText = replace_string ( translatedText, String("\\r\\n").Cat(), String("\n").Cat()); + //translatedText = replace_string ( translatedText, String("\\r\\n ").Cat(), String("\n").Cat()); + translatedText = replace_string ( translatedText, String("\\\"").Cat(), String("\"").Cat()); + translatedText = replace_string ( translatedText, String("\\\\").Cat(), String("\\").Cat()); + translatedText = replace_string ( translatedText, String("\\n").Cat(), String("\n").Cat()); + translatedText = replace_string ( translatedText, String("\\x3c").Cat(), String("<").Cat()); + translatedText = replace_string ( translatedText, String("\\x3e").Cat(), String(">").Cat()); + + if(translatedText.StartsWith("\"")){// is string + formatedText = translatedText; + + formatedText.Remove(0, 1); + formatedText.Remove(formatedText.GetLength()-1, 1); + + // Set Correction text + correctionText = formatedText; + } + else if (translatedText.StartsWith("[\"")){ // is terms + String text_temp = translatedText, text_lf = String("\n"); + + // For debugging + //String original_text = translatedText; + + int text_temp_pos, text_temp_pos1; + text_temp_pos = 2; + + // Get first word + text_temp_pos1 = text_temp.Find("\"", text_temp_pos); + + if(text_temp_pos1==-1) + text_temp_pos1 = text_temp.GetLength(); + + formatedText = text_temp.Mid(text_temp_pos,text_temp_pos1 - text_temp_pos); + + // Set first term as text for correction + correctionText = formatedText; + + text_temp_pos = text_temp_pos1+1; + formatedText<1){ + formatedText<text_temp_pos1)) + text_temp_pos2 = text_temp_pos1; + + formatedText<0) + formatedText<text_temp_pos){ + curr_tab = text_tab; + formatedText<text_temp_pos2)||(text_temp_pos1==-1)) + text_temp_pos1 = text_temp_pos2; + formatedText< - -using namespace Upp; - -class GoogleTranslator { -public: - typedef GoogleTranslator CLASSNAME; - GoogleTranslator(); - //~GoogleTranslator(); - bool Translate(Gate2 _progress = false); - bool Translate(String source_text, Gate2 _progress = false) {sourceText = source_text; return Translate(_progress);}; - bool Translate(String source_text, String lang_from, Gate2 _progress = false) {sourceText = source_text; languageFrom = lang_from; return Translate(_progress);}; - bool Translate(String source_text, String lang_from, String lang_to, Gate2 _progress = false) {sourceText = source_text; languageFrom = lang_from; languageTo = lang_to; return Translate(_progress);}; - String GetLanguageFrom() {return languageFrom;}; - String GetLanguageTo() {return languageTo;}; - String GetSourceText() {return sourceText;}; - String GetTranslatedText() {return translatedText;}; - String GetFormatedText(); - String GetCorrectionText() {return correctionText;}; - String GetCorrectedText() {return correctedText;}; - bool IsTranslated() {return isTranslated;} - bool SetCorrectionText(String correction_text, String& result_text, Gate2 _progress = false); - bool SetProxy(bool use_proxy) {return(useProxy = use_proxy);}; - void SetProxy(String proxy_address, int port) {useProxy = true; proxyHTTPAddress = proxy_address; proxyHTTPPort = port;}; - bool UseProxy() {return useProxy;} - String GetProxyAddress() {return proxyHTTPAddress;} - int GetproxyPort() {return proxyHTTPPort;} -private: - void refreshProxy(); - bool sendHttpPost(String& url, String& post, String& result_text, Gate2 _progress = false); - - String sourceText; - String translatedText; - String formatedText; // If I use many time GetFormatedText, the result is cashed in this property - String correctionText; // if is term get only first term, in other case is identic as sourcetranslatedtext - String correctedText; - - String languageFrom; - String languageTo; - - bool useProxy; - String proxyHTTPAddress; - int proxyHTTPPort; - - bool isTranslated; - HttpClient httpClient; -}; - -// Need discuss about this and add in String or get core function -String replace_string (String& s1, String& find, String replace); - +#ifndef _GoogleTranslator_GoogleTranslator_h +#define _GoogleTranslator_GoogleTranslator_h + +#include + +using namespace Upp; + +class GoogleTranslator { +public: + typedef GoogleTranslator CLASSNAME; + GoogleTranslator(); + //~GoogleTranslator(); + bool Translate(Gate2 _progress = false); + bool Translate(String source_text, Gate2 _progress = false) {sourceText = source_text; return Translate(_progress);}; + bool Translate(String source_text, String lang_from, Gate2 _progress = false) {sourceText = source_text; languageFrom = lang_from; return Translate(_progress);}; + bool Translate(String source_text, String lang_from, String lang_to, Gate2 _progress = false) {sourceText = source_text; languageFrom = lang_from; languageTo = lang_to; return Translate(_progress);}; + String GetLanguageFrom() {return languageFrom;}; + String GetLanguageTo() {return languageTo;}; + String GetSourceText() {return sourceText;}; + String GetTranslatedText() {return translatedText;}; + String GetFormatedText(); + String GetCorrectionText() {return correctionText;}; + String GetCorrectedText() {return correctedText;}; + bool IsTranslated() {return isTranslated;} + bool SetCorrectionText(String correction_text, String& result_text, Gate2 _progress = false); + bool SetProxy(bool use_proxy) {return(useProxy = use_proxy);}; + void SetProxy(String proxy_address, int port) {useProxy = true; proxyHTTPAddress = proxy_address; proxyHTTPPort = port;}; + bool UseProxy() {return useProxy;} + String GetProxyAddress() {return proxyHTTPAddress;} + int GetproxyPort() {return proxyHTTPPort;} + bool SetProxyAuth(bool use_proxy) {return(useProxyAuth = use_proxy);}; + void SetProxyAuth(String proxy_u, String proxy_p) {useProxyAuth = true; proxyHTTPUsername = proxy_u; proxyHTTPPassword = proxy_p;}; + bool UseProxyAuth() {return (useProxyAuth&&useProxy);} +private: + void refreshProxy(); + bool sendHttpGet(String& url, String& post, String& result_text, Gate2 _progress = false); + bool sendHttpPost(String& url, String& post, String& result_text, Gate2 _progress = false); + + String sourceText; + String translatedText; + String formatedText; // If I use many time GetFormatedText, the result is cashed in this property + String correctionText; // if is term get only first term, in other case is identic as sourcetranslatedtext + String correctedText; + + String languageFrom; + String languageTo; + + bool useProxy; + String proxyHTTPAddress; + int proxyHTTPPort; + + bool useProxyAuth; + String proxyHTTPUsername; + String proxyHTTPPassword; + + bool isTranslated; + HttpClient httpClient; +}; + +// Need discuss about this and add in String or get core function +String replace_string (String& s1, String& find, String replace); + #endif \ No newline at end of file