Categorización | General, PHP

API AJAX de idiomas de Google y PHP

Hoy compartiré con ustedes esta sencilla clase PHP que nos ayudara a implementar la API AJAX de idiomas de Google en nuestras aplicaciones, logrando traducir textos en diversos idiomas sin necesidad de usar JavaScript. Aquí están los archivos completos:

index.php

1
2
3
4
5
6
7
8
9
<?php
 
require_once( 'Labs_gTranslate.class.php' );
 
$labsgTranslate = new Labs_gTranslate( 'es' , 'it' , 'Hola mundo' );
 
print $labsgTranslate->traducir();
 
?>

Labs_gTranslate.class.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<?php
/**
* Clase Labs_gTranslate. Traduce diversos idiomas utilizando la API AJAX de idiomas de Google.
* Derechos de autor © 2009 Gilberto Pineda Vanegas <gilberto.pineda@gmail.com>
*
* Este programa es software libre: usted puede redistribuirlo y/o modificarlo bajo los términos de
* la GNU General Public License publicada por la Free Software Foundation, bien de la versión 3 de
* la Licencia, o (a su elección) cualquier versión posterior.
*
* Este programa se distribuye con la esperanza de que sea útil, pero SIN NINGUNA GARANTÍA, incluso
* sin la garantía implícita de COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte
* la GNU General Public License para más detalles.
*
* Usted debería haber recibido una copia de la GNU General Public License junto con este programa.
* De lo contrario, véase <http://www.gnu.org/licenses/>.
**/
class Labs_gTranslate {
 
	private $_googleurl 			= NULL;
 
	private $_idiomaorigen 			= NULL;
	private $_idiomadestino 		= NULL;
	private $_texto 				= NULL;
 
	private $_traduccionesvalidas 	= NULL;
	private $_datosget 				= NULL;
	/*
		Constructor de la clase.
	*/
	public function __construct( $p_idiomaorigen , $p_idiomadestino , $p_texto ) {
 
		$this->_googleurl = 'http://ajax.googleapis.com/ajax/services/language/translate';
		$this->_idiomaorigen = $p_idiomaorigen;
		$this->_idiomadestino = $p_idiomadestino;
		$this->_texto = $p_texto;
 
		$this->_traduccionesvalidas = array( 'en|es' , 'en|fr' , 'en|it' , 'es|en' , 'es|fr' , 'es|it' , 'fr|en' , 'fr|es' , 'fr|it' , 'it|en' , 'it|es' , 'it|fr' );
 
		$this->_datosget = array( 'langpair' =>NULL, 'q' =>NULL );
 
	}
	/*
		Conecta con el Servidor de API's de Google y retorna el texto traducido.
	*/
	public function traducir() {
 
		$idiomapar = $this->_idiomaorigen . '|' . $this->_idiomadestino;
 
		if( !$this->validarIdioma( $idiomapar ) ) {
 
			return false; // TRADUCCION_IDIOMA_PAR_DESCONOCIDO
 
		}
 
		$this->_datosget['langpair'] = $idiomapar;
		$consulta = $this->construirConsulta();
 
		$ch = curl_init();
		curl_setopt( $ch , CURLOPT_URL , $this->_googleurl . $consulta );
		curl_setopt( $ch , CURLOPT_RETURNTRANSFER , 1 );
		$salida = curl_exec( $ch );
 
		$salidaprocesada = $this->filtrarSalida( $salida );
 
		return $salidaprocesada;
 
	}
	/*
		Comprueba que la traduccion a realizar sea valida.
	*/
	private function validarIdioma( $p_idiomapar ) {
 
		if( in_array( $p_idiomapar , $this->_traduccionesvalidas ) ) {
 
			return true;
 
		}
 
		return false;
 
	}
	/*
		Construye el fragmento de URL valida con los datos para la traduccion.
	*/
	private function construirConsulta() {
 
		if( ( $this->_idiomaorigen || $this->_idiomadestino || $this->_texto ) == ( '' || NULL ) ) {
 
			return false; // TRADUCCION_DATOS_DESCONOCIDOS
 
		}
 
		$this->_datosget['q'] = $this->_texto;
 
		return '?v=1.0&' . http_build_query( $this->_datosget );
 
	}
	/*
		Decodifica la cadena JSON y retorna el texto traducido.
	*/
	private function filtrarSalida( $p_salida ) {
 
		$json = json_decode( $p_salida , true );
 
		return $json['responseData']['translatedText'];
 
	}
 
}
 
?>

Para este caso en particular son cuatro los idiomas validos: Ingles (en), español (es), frances (fr) e italiano (it). En la línea 37 podemos ver los tipos traducciones permitidas entre estos idiomas (idioma origen | idioma destino):

37
$this->_traduccionesvalidas = array( 'en|es' , 'en|fr' , 'en|it' , 'es|en' , 'es|fr' , 'es|it' , 'fr|en' , 'fr|es' , 'fr|it' , 'it|en' , 'it|es' , 'it|fr' );

Como pueden ver son una serie de sencillos métodos que conectan al Servidor de API’s de Google y envían los datos necesarios para hacer la traducción del texto al idioma requerido. Ya cada quien deberá complementar esta clase de acuerdo a sus necesidades, pues todavía queda un poco de trabajo con respecto a la gestión de errores y otros aspectos.

Eso es todo, cualquier crítica o inquietud no duden en comentarla.

¿Te fue útil este artículo? Invitame una cerveza para calmar la sed y escribir muchos más.

Una respuesta a “API AJAX de idiomas de Google y PHP”

  1. tomas dice:

    Hola, estoy programando un blog en php de wordpres y quería implementarle este traductor que tú compartes. ¿Cómo puedo hacerlo? ¿Dónde introduzco estos códigos? y sobre todo, cómo se visualiza posteriormente en el blog? ¿Me podrías ayudar? Gracias.

Trackbacks/Pingbacks


Deja una respuesta

Obtén una cuenta de
@memoriasdeunprogramador.com
gratuita
Quien lo hubiera imaginado, Microsoft ayudándome a pasar un rato de ocio... aunque es solo una más de sus estrategias publicitarias estuvo divertido, y no esta de más conocer un poco sobre sus productos.

Lastima que para poder participar tenga que ser por medio de Facebook... bueno, lastima para mi porque soy uno de los pocos que aun no se dejan atrapar por la red social, así que me toco crearme una cuenta solo para esto :s

Si lo juegan espero que les vaya bien con la maquinita de dulces... casi que no encuentro como solucionarlo :)
8:46 PM Jun 30, 2010, comment