Introducción

Cuando es necesario traducir pequeños textos de una Web o un programa, siempre es mejor tener una base de los textos traducidos (o semi-traducidos mejor dicho, por que ya sabemos que no es 100% real la traducción en algunos casos.) para hacernos una idea de como quedara la Web, para ello solemos utilizar muchos la pagina de Google Translate. Para ello vamos a automatizar la traducción de textos con una función desde C#, este código es portable a otros lenguajes como JQuery, PHP, etc... sin mucha complicación.

 undefined

Script de Google Translate

Dentro de la respuesta Html que nos devuelve hay un <script>...<script> que contiene varios parámetros, entro ellos esta TRANSLATED_TEXT, que es la traducción del texto que le pasamos por la petición http.

<script>MSG_GOOGLE_TRANSLATE='Google Translate';common_translation_tooltip='Common translation';detect_language='Detect language';n_more_label='+ %1$s more';rare_translation_tooltip='Rare translation';source_language_detected='%1$s - detected';uncommon_translation_tooltip='Uncommon translation';url_hyperlink_tooltip='View translated webpage';ENABLE_QUERY_AUTOCORRECTION=false;EXPERIMENT_IDS = ['17259'];FILE_TRANSLATION_PATH='//translate.googleusercontent.com/translate_f';TEXT_TRANSLATION_PATH='/';TTS_TEXT_SIZE_LIMIT=100;TRANSLATED_TEXT='single\r\x3cbr\x3etext';INPUT_TOOL_PATH='//www.google.com';var ctr, h;tld='.com';FEATURE_STICKINESS=[[["es","en"],["en","es"],[["es","en"],["es","en"],["es","en"]],false],true];</script>

 

Parámetros o Argumentos

Texto: Texto que queremos traducir, puede contener símbolos y saltos de linea.
Lenguaje Origen: Código de lenguaje en el que esta el texto que queremos traducir. Por ejemplo es (español), en (ingles), eu (euskera), etc...
Lenguaje Destino: Código de lenguaje al que queremos traducir, los valores son igual que en el Origen.

 

Uso desde C#.NET

public string TraducirTexto(string Texto, string Origen, string Destino)
{
	/*CONTRUSIMOS LA URL CON LOS PARAMETROS
	 * hl={1}       -> Codigo de lenguaje de destino
	 * text={0}     -> Texto 
	 * langpair={2} -> Codigo de lenguaje de origen
	*/
	string url = String.Format("http://www.google.com/translate_t?hl={1}&ie=UTF8&text={0}&langpair={2}", Texto, Destino, Origen);
	System.Net.WebClient webClient = new System.Net.WebClient();
	webClient.Encoding = System.Text.Encoding.UTF8;

	//DESCARGAMOS LA RESPUESTA HTML
	var data = webClient.DownloadData(url);
	string result = System.Text.UTF8Encoding.Default.GetString(data);

	//BUSCAMOS EL "TRANSLATED_TEXT", QUE CONTIENE DENTRO EL TEXTO TRADUCIDO
	MatchCollection Rows = Regex.Matches(result, "TRANSLATED_TEXT='(.*?)';", RegexOptions.Multiline | RegexOptions.Singleline | RegexOptions.IgnoreCase);
	result = Regex.Replace(Regex.Replace(Rows[0].Value, "TRANSLATED_TEXT='", "").Trim(), "';", "");
	
	//RECONVERTIMOS los \x
	result = Regex.Replace(result,
						   @"\\x([a-fA-F0-9]{2})",
						   match => char.ConvertFromUtf32(Int32.Parse(match.Groups[1].Value,
																	  System.Globalization.NumberStyles.HexNumber)));
	//DECODIFICAMOS EL HTML
	result = System.Web.HttpUtility.HtmlDecode(result);
	//SUSTITUIOMOS Y QUITAMOS SALTOS DE LINEA Y RETORNOS
	result = result.Replace("\\r","" );
	result = result.Replace("<br>", System.Environment.NewLine);
	return result.Trim();
}

 

Llamada de Ejemplo

TraducirTexto("TEXTO A TRADUCIR",'es','en');