2011-11-30 8 views
6

Ho una pagina web in bulgaro e voglio che i miei utenti possano tradurla con un clic in inglese. Inoltre, non dovrebbe esserci alcun banner di traduzione nella parte superiore della pagina quando un utente accede alla pagina (può farlo dopo che l'utente fa clic sul link di traduzione). Ho cercato di utilizzare #googtrans(bg|en) (doc), ma non ha funzionato, anche mostra un banner nella parte superiore della pagina a causa di questo codice:Come aggiungere il link di Google Translate che attiva la traduzione?

<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)

il codice è qui krumovgrad.eu fai clic sulle bandiere in alto a destra.

+0

Cosa hai ottenuto finora? – Hannele

+0

Banner di traduzione con link non funzionante. Non voglio banner, voglio link che lavori/traduca. Aggiornamento – ilhan

+0

: in Firefox; banner con un link che funziona. In IE 8 niente. – ilhan

risposta

1

Google ha pensato in anticipo amico mio. Si prega di guardare questa pagina: http://translate.google.com/translate_tools

EDIT: Mi dispiace, ho appena realizzato che stai usando quello che la pagina offre! È possibile, con un semplice javascript, nascondere gli elementi visualizzati e creare un collegamento per l'inglese in cui è onClick cambia il valore dell'elemento di selezione nascosta ... e l'intera pagina viene tradotta.

È un po 'caotico ma il lavoro è compiuto e l'utente non sa che esiste!

È inoltre possibile prendere in considerazione l'acquisizione della richiesta inviata ai server di google traduttore e acquisire il collegamento che viene chiamato quando si seleziona l'inglese e si utilizza semplicemente tale collegamento.

Chrome ha una bella utility per catturare le richieste (vedi ctrl + shift + j per una console sviluppatore)

+0

uomo! dammi un minuto per modificare la mia risposta! lol ... – vinnybad

9

Ho avuto lo stesso problema qualche giorno fa e si avvicinò con una soluzione che funziona. Ho un sito in spagnolo e, finché non lo traduciamo in inglese, offriamo ai nostri utenti la possibilità di utilizzare Google Website Translator. Quando gli utenti fanno clic su "English flag", viene aperto un modesto Bootstrap di Twitter che comunica all'utente che il sito Web non è ancora stato tradotto e c'è un pulsante su cui è possibile fare clic per attivare la traduzione. Catturo l'evento con JavaScript, imposta il cookie 'googtrans' con il valore '/ es/en' e ricarica la pagina. Lo script di Google fa il resto. Dopo il ricarico, controllo se il cookie esiste e cambia la bandiera inglese per la bandiera spagnola. Quando l'utente fa clic su di esso, imposto il cookie su "" (stringa vuota) e ricarica la pagina.

Per semplicità, non includerò la parte modale 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'); 
    } 
}); 

Nella configurazione guidata Traduttore di siti web, è possibile selezionare le lingue che si desidera visualizzare nell'elenco. È quindi possibile avere il proprio dove ogni <option> ha come valore value il valore del cookie che dovrebbe avere oppure un elenco normale con contrassegni con qualcosa come data-cookie="value". Quindi con JavaScript acquisisci l'evento "modifica" (per la selezione) o "clic" per l'elenco e imposta i cookie in modo appropriato.

Nota: Ho volutamente rimosso il div dove il Traduttore di siti web viene resa:

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

vederlo lavorare, si può visitare www.viajoasalta.com; almeno fino a quando finalmente lo traduciamo.

+1

Il problema nel codice è la funzione 'setCookie()' mentre scrive un secondo cookie con lo stesso nome perché non hai specificato un percorso. Guarda qui, punto 1: http://www.sitepoint.com/3-things-about-cookies-you-may-not-know/ Sul tuo sito web viajoasalta.com puoi anche vedere questo. Quando fai clic su "Visualizza originale" nella barra di traduzione, il cookie googtrans scritto dallo script di Google viene eliminato, ma il duplicato impone ancora la traduzione della pagina e danneggia anche le bandiere. È una soluzione semplice: 'function setCookie (cname, cvalue) {document.cookie = cname +" = "+ cvalue +"; path =/"; } ' – FFish

+0

@FFish grazie per il tuo commento. Ho modificato la funzione 'setCookie()' in modo che accetti sia i parametri 'path' che' domain'. Avevo bisogno del parametro 'domain' perché il Traduttore di siti web di Google ha impostato i cookie per" www.viajoasalta.com "e" .viajoasalta.com ". Io uso "exdays" uguale a 0, quindi la durata del cookie è quella della sessione. Ancora non so come aggiornare i flag quando fai clic su "Visualizza originale" nella barra di traduzione. Se scopro come, posterò un nuovo commento. – kiki

Problemi correlati