2011-04-06 40 views
8

En un sitio He intentado añadir el Google Translate desplegable usando el siguiente código:Cambio Google Translate desplegable programáticamente

function googleTranslateElementInit() { 
    new google.translate.TranslateElement({ 
    pageLanguage: 'en' 
    }, 'google_translate_element'); 
} 

<script src="http://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script> 

Al seleccionar en el menú desplegable que las inserciones de secuencia de comandos de Google, un Google Translate barra aparece en la parte superior de la página, y todo el texto se traduce al idioma seleccionado.

Sin embargo si intento y desencadenar el cambio desplegable utilizando JavaScript, no funciona:

$('.goog-te-combo').val('fr') 

'Francés' se selecciona en el menú desplegable, sin embargo Google Translate no se activa.

¿Por qué o por qué no funciona? También he intentado:

$('.goog-te-combo').trigger('click') 
$('.goog-te-combo').change() 

ACTUALIZACIÓN: FYI esto no es mi sitio. Estaba usando la consola de Chrome para cargar jQuery y ejecutar los métodos jQuery.

+1

¿Es un 'iframe'? – Blender

+0

Después de inspeccionar el árbol DOM, el menú desplegable agregado por el script de Google no aparece en un iframe. –

+0

Si agrega '

' antes de cargar el script para que Google pueda llenarlo con [UI adicional] (http://translate.google.com/translate_tools), obtendrá un 'select' que no forma parte de' iframe'. Desafortunadamente, incluso llamar a los desencadenantes de eventos en estos elementos tampoco desencadena la traducción (pero el elemento seleccionado sí cambia). – patridge

Respuesta

1

Al mirar su página, parece que jQuery no está cargado, por lo que no podrá usar la función $().

es necesario agregar una referencia a jQuery en su sección <head></head>, tales como:

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script> 

Entonces

$('.goog-te-combo').val('fr'); 

debería funcionar.

+0

Eso tendría sentido si '$ ('. Goog-te-combo'). Val ('fr')' no hizo nada, pero el OP dice que cambia el menú desplegable. –

+0

Entiendo eso, pero eché un vistazo a la página e intenté ejecutar '$ ('. Goog-te-combo'). Val ('fr');' en la consola y obtuve el error 'TypeError: no se puede llamar al método 'val' de null'. Y al buscar en la fuente no aparece ninguna referencia a 'jQuery'. Así que o bien él eliminó jQuery ya que esta pregunta fue publicada o nunca funcionó (o tal vez recordó 'fr' de una selección previa y el OP la confundió para que funcione). – ggutenberg

+1

No creo que la página pertenezca al OP. Creo que están tratando de interactuar con la página desde un dominio externo ... de ahí el problema. –

1

Después de haber pasado bastante tiempo tratando de hacer que esto funcione también, implementé el plugin de traducción jquery y pude lograr todo lo que quería hacer bastante fácilmente incluyendo traducción automática al idioma del navegador en carga de página y enlaces de idiomas en los que se puede hacer clic , banderas, etc.

Detalles del plugin y las descargas están aquí http://code.google.com/p/jquery-translate/

+0

¿Sigue funcionando este complemento? Pasé unas horas intentándolo sin alegría. Gracias – user989952

9

Usted puede tener su desplegable desencadenar una recarga de la página. Puede volver a cargar la página con #googtrans(en|ja) o #googtrans/en/ja anexa a la URL, o establecer el valor de la cookie googtrans en /en/ja (donde ja es un ejemplo del idioma de destino seleccionado) antes de volver a cargar.

3

Agregar a su código:

//to get currently selected language 
string language=Request.Cookies["googtrans"].Value 
//to set desired language 
Response.Cookies["googtrans"].Value = Your language; 
//eg: Response.Cookies["googtrans"].Value = "/en/hi"; 
+0

He intentado esto en la consola y no funcionó –

4

Sé que esto ya es un viejo tema, pero yo sólo quiero cuota de la solución que se me ocurrió el tema de disparar el traductor Google selecto evento de cambio de elemento.

Añadir la función que va a utilizar el dispatchEvent o función fireEvent:

function triggerHtmlEvent(element, eventName) { 
var event; 
if(document.createEvent) { 
    event = document.createEvent('HTMLEvents'); 
    event.initEvent(eventName, true, true); 
    element.dispatchEvent(event); 
} else { 
    event = document.createEventObject(); 
    event.eventType = eventName; 
    element.fireEvent('on' + event.eventType, event); 
} } 

después de ajustar el valor, obtener el objeto DOM para la selección (usando document.getElement ...) Y llamar a la función anterior:

triggerHtmlEvent(selectObject, 'change'); 
+0

¡Es una solución! ¡¡¡Muchas gracias!!! –

+0

Hola, estoy realmente interesado en esta solución, es exactamente lo que he estado buscando durante los últimos 3 días. Si tiene una versión funcional para esto, creo que me falta algo "después de establecer el valor, obtenga el objeto DOM para seleccionar (utilizando document.getElement ...)" Gracias por su ayuda – user989952

+5

Aparece el siguiente error: TypeError: element.dispatchEvent no es una función – user989952

4

// para obtener Idioma Seleccionado

string language=Request.Cookies["googtrans"].Value 

// para ajustar el idioma deseado

Response.Cookies["googtrans"].Value = Your language; 

// por ejemplo: Response.Cookies [" googtrans "]. Value ="/en/hi ";

Cuestiones relacionadas