2011-11-30 38 views
6

Tengo una página web en búlgaro y quiero que mis usuarios puedan traducirla con un clic al inglés. Además, no debe haber ningún banner de traducción en la parte superior de la página cuando un usuario ingresa a la página (puede hacerlo después de que el usuario haga clic en el enlace de traducción). He intentado utilizar #googtrans(bg|en) (doc), pero no funcionó, también se muestra un banner en la parte superior de la página debido a este código:¿Cómo agregar el enlace del Traductor de Google que desencadena la traducción?

<script> 
function googleTranslateElementInit() { 
    new google.translate.TranslateElement({ 
    pageLanguage: 'bg', 
    autoDisplay: false, 
    layout: google.translate.TranslateElement.InlineLayout.SIMPLE 
    }, 'google_translate_element'); 
} 
</script><script src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script> 

(doc)

el código está aquí krumovgrad.eu haga clic en las banderas en la parte superior derecha.

+0

¿Qué tienes hasta ahora? – Hannele

+0

Banner de traducción con enlace no funcional. No quiero banner, quiero un enlace que funcione/traduzca. – ilhan

+0

Actualización: En Firefox; pancarta con un enlace que funciona. En IE 8 nada. – ilhan

Respuesta

1

Google ha pensado en mi amigo. Mire esta página: http://translate.google.com/translate_tools

EDIT: Disculpe, me acabo de dar cuenta de que está utilizando lo que proporciona la página. Puede, con un simple javascript, ocultar los elementos que se muestran y crear un vínculo para Inglés donde es onClick cambia el valor del elemento de selección escondido ... y su página entera se traduce.

¡Es un poco complicado pero hace el trabajo y el usuario no sabe que existe!

También puede considerar capturar la solicitud que se envía a los servidores de traducción de google y capturar el enlace al que se llama cuando selecciona inglés y simplemente usa ese enlace.

Chrome tiene una utilidad para capturar las solicitudes (véase Ctrl + Shift + J para una consola de desarrollador)

+0

hombre! dame un minuto para editar mi respuesta! lol ... – vinnybad

9

que tenían el mismo problema hace unos días y se le ocurrió una solución que funciona. Tengo un sitio en español, y hasta que lo traduzcamos al inglés, ofrecemos a nuestros usuarios la posibilidad de utilizar Google Website Translator. Cuando los usuarios hacen clic en la bandera inglesa, se abre un modo Twitter Bootstrap que le informa al usuario que el sitio web aún no se ha traducido, y hay un botón en el que pueden hacer clic para activar la traducción. Capturo el evento con JavaScript, establezco las cookies 'googtrans' con el valor '/ es/en' y vuelvo a cargar la página. El script de Google hace el resto. Después de la recarga, compruebo si existe la cookie y cambio la bandera inglesa de la bandera española. Cuando el usuario hace clic en él, configuro la cookie en '' (cadena vacía) y vuelvo a cargar la página.

Por simplicidad, no incluiré la parte modal de Bootstrap.

HTML

<!DOCTYPE html> 
<html> 
    <head> 
    (...) 
    <meta name="google-translate-customization" content="(YOUR_TRANSLATE_CUSTOMIZATION_ID)" /> 
    (...) 
    </head> 
    <body> 
     (...) 
     <a id="lang-change-en" class="lang-change" href="javascript:void(0);"> 
      <img src="images/en-flag.png" alt="English Flag"> 
     </a> 
     (...) 
     <script src="js/script.js"></script> 
     <script src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script> 
    </body> 
</html> 

Javascript (script.js)

function setCookie(cname, cvalue, exdays) { 
    var expires; 
    if (exdays === 0) { 
     expires = ''; 
    } else { 
     var d = new Date(); 
     d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000)); 
     expires = "expires=" + d.toGMTString(); 
    } 
    var domain = (typeof domain === "undefined") ? '' : "; domain="+domain; 
    document.cookie = cname + "=" + cvalue + "; " + expires + "path=" + path + domain; 
} 

function getCookie(cname) { 
    var name = cname + "="; 
    var ca = document.cookie.split(';'); 
    for (var i = 0; i < ca.length; i++) { 
     var c = ca[i].trim(); 
     if (c.indexOf(name) == 0) { 
      return c.substring(name.length, c.length); 
     } 
    } 
    return ""; 
} 

//Google provides this function 
function googleTranslateElementInit() { 
    new google.translate.TranslateElement({ 
     pageLanguage: 'es', 
     includedLanguages: 'en', 
     layout: google.translate.TranslateElement.InlineLayout.SIMPLE, 
     autoDisplay: false 
    },'google_translate_element'); 
} 

//Using jQuery 
$(document).ready(function() { 
    $(document).on('click','#lang-change-en', function() { 
     setCookie('googtrans', '/es/en', 0, '.viajoasalta.com'); 
     setCookie('googtrans', '', 0, '/'); 
     location.reload(); 
    }); 

    $(document).on('click', '#lang-change-es', function() { 
     setCookie('googtrans', '', 0, '/', '.viajoasalta.com'); 
     setCookie('googtrans', '', 0, '/'); 
     location.reload(); 
    }); 

    var googTrans = getCookie('googtrans'); 

    if (googTrans === '/es/en') { 
     var src = $('#lang-change-en > img').attr('src').replace('en-flag', 'es-flag'); 
     $('#lang-change-en > img').attr('src', src); 
     $('#lang-change-en').attr('id', 'lang-change-es'); 
    } 
}); 

En el asistente de configuración Traductor de sitios web, puede seleccionar los idiomas que desea que aparezca en la lista. A continuación, puede tener su propio <select> donde cada <option> tiene como value el valor de la cookie que debería tener, o una lista ordinaria con indicadores con algo así como data-cookie="value". Luego, con JavaScript, captura el evento 'cambiar' (para la selección) o el evento 'clic' para la lista, y establece la cookie de manera apropiada.

Nota: Me extrae intencionalmente el div donde el Traductor de sitios web se rindió:

<div id="google_translate_element"></div> 

Para ver su funcionamiento, se puede visitar www.viajoasalta.com; al menos hasta que finalmente lo traduzcamos

+1

El problema en su código es la función 'setCookie()' ya que escribe una segunda cookie con el mismo nombre porque no especificó una ruta. Mire aquí, punto 1: http://www.sitepoint.com/3-things-about-cookies-you-may-not-know/ En su sitio web viajoasalta.com también puede ver esto. Cuando hace clic en "ver original" en la barra de traducción, se borra la cookie de googtrans escrita por Google, pero el duplicado aún obliga a la página a traducirse y también altera sus banderas. Es una solución simple: 'function setCookie (cname, cvalue) {document.cookie = cname +" = "+ cvalue +"; path =/"; } ' – FFish

+0

@FFish gracias por tu comentario. Modifiqué la función 'setCookie()' para que acepte los parámetros 'path' y' domain'. Necesitaba el parámetro 'dominio' porque el Traductor del sitio web de Google estableció cookies para" www.viajoasalta.com "y" .viajoasalta.com ". Uso 'días' es igual a 0, por lo que la duración de la cookie es la de la sesión. Todavía no sé cómo actualizar las banderas cuando haces clic en "ver original" en la barra de traducción. Si descubro cómo, publicaré un nuevo comentario. – kiki

Cuestiones relacionadas