miércoles, 18 de junio de 2008

Traducción automática con indexación en buscadores

Voy a compartir un trozo de código que he preparado, que se puede reutilizar en cualquier página web.

Pongamos que tenemos una página web en español, y queremos que gente que no sepa español pueda leerla. Si no queremos mantener una versión de la misma página para cada idioma, lo más sencillo es recurrir a las traducciones automáticas. Cometen muchos errores, pero es lo más cómodo.

En Internet he visto varios scripts html/javascript para llevar a cabo esta tarea, pero tenían 2 problemas:

  • El idioma origen es el inglés
  • Los enlaces utilizan javascript, con lo que los buscadores no sabrán encontrar los textos traducidos; sólo la versión original.
  • A partir de varios scripts que hay disponibles "por ahí", he creado el siguiente script, que generará las banderas que traducirán del español a 10 idiomas, de un modo que Google y los demás buscadores sabrán encontrar las páginas en todos los idiomas. Lo podéis ver en funcionamiento en esta misma página, arriba a la derecha.

    Para instalarlo, sólo hay que copiar en tu página web, widget de tu blog de Blogger o tu plantilla de cualquier otro gestor de contenidos, el código completo que hay a continuación, cambiando donde pone "www.nightearth.com" por la dirección de tu página web.

    <!--
    Script de traducción automática - http://www.dreamcoder.org
    Para configurarlo a tu página, reemplaza "www.nightearth.com" por la dirección de tu página
    -->
    
    <span id="flagsrow"></span>
    <script language="javascript">
    <!--
    function translate(langpair)
    {
    location.href = 'http://translate.google.com/translate?u='+escape(location.href)+'&hl=es&langpair='+langpair+'&tbb=1&ie='+(document.charset||document.characterSet);
    }
    
    function createFlag(langpair, langname, img)
    {
    return '<a href="javascript:translate(\''+langpair+'\');"><img alt="'+langname+'" width="23" src="'+img+'" height="20" />';
    }
    
    document.getElementById('flagsrow').innerHTML =
    createFlag('es|en',    'English',    'http://1.bp.blogspot.com/_XGtsagQTuUQ/RZk8DP2JNiI/AAAAAAAAADk/eRxHS5s1f10/s320/english.jpg') +
    createFlag('es|de',    'German',     'http://photos1.blogger.com/img/43/1633/320/13539933_041ca1eda2.jpg') +
    createFlag('es|pt',    'Portuguese', 'http://photos1.blogger.com/img/43/1633/320/13539966_0d09b410b5.jpg') +
    createFlag('es|it',    'Italian',    'http://photos1.blogger.com/img/43/1633/320/13539953_0384ccecf9.jpg') +
    createFlag('es|fr',    'French',     'http://photos1.blogger.com/img/43/1633/320/13539949_e76af75976.jpg') +
    createFlag('es|ru',    'Russian',    'http://1.bp.blogspot.com/_XGtsagQTuUQ/RZk8RP2JNpI/AAAAAAAAAEc/Tnq_uTX3WhY/s320/russia.gif') +
    createFlag('es|ja',    'Japanese',   'http://photos1.blogger.com/img/43/1633/320/13539955_925e6683c8.jpg') +
    createFlag('es|ko',    'Korean',     'http://photos1.blogger.com/img/43/1633/320/13539958_3c3b482c95.jpg') +
    createFlag('es|zh-CN', 'Chinese',    'http://photos1.blogger.com/img/43/1633/320/14324441_5ca5ce3423.jpg') +
    createFlag('es|ar',    'Arabic',     'http://2.bp.blogspot.com/_RrObyQ3XzcY/RchSvbOWb_I/AAAAAAAAAdw/uD4e5lDsh7A/s320/arabic-flag.gif');
    -->
    </script>
    
    <noscript>
    <a href="http://translate.google.com/translate?u=http%3A//www.nightearth.com&amp;hl=es&amp;langpair=es|en&amp;tbb=1"><img alt="English" width="23" src="http://1.bp.blogspot.com/_XGtsagQTuUQ/RZk8DP2JNiI/AAAAAAAAADk/eRxHS5s1f10/s320/english.jpg" height="20"/></a><a href="http://translate.google.com/translate?u=http%3A//www.nightearth.com&amp;hl=es&amp;langpair=es|de&amp;tbb=1"><img alt="German" width="23" src="http://photos1.blogger.com/img/43/1633/320/13539933_041ca1eda2.jpg" height="20"/></a><a href="http://translate.google.com/translate?u=http%3A//www.nightearth.com&amp;hl=es&amp;langpair=es|pt&amp;tbb=1"><img alt="Portuguese" width="23" src="http://photos1.blogger.com/img/43/1633/320/13539966_0d09b410b5.jpg" height="20"/></a><a href="http://translate.google.com/translate?u=http%3A//www.nightearth.com&amp;hl=es&amp;langpair=es|it&amp;tbb=1"><img alt="Italian" width="23" src="http://photos1.blogger.com/img/43/1633/320/13539953_0384ccecf9.jpg" height="20"/></a><a href="http://translate.google.com/translate?u=http%3A//www.nightearth.com&amp;hl=es&amp;langpair=es|fr&amp;tbb=1"><img alt="French" width="23" src="http://photos1.blogger.com/img/43/1633/320/13539949_e76af75976.jpg" height="20"/></a><a href="http://translate.google.com/translate?u=http%3A//www.nightearth.com&amp;hl=es&amp;langpair=es|ru&amp;tbb=1"><img alt="Russian" width="23" src="http://1.bp.blogspot.com/_XGtsagQTuUQ/RZk8RP2JNpI/AAAAAAAAAEc/Tnq_uTX3WhY/s320/russia.gif" height="20"/></a><a href="http://translate.google.com/translate?u=http%3A//www.nightearth.com&amp;hl=es&amp;langpair=es|ja&amp;tbb=1"><img alt="Japanese" width="23" src="http://photos1.blogger.com/img/43/1633/320/13539955_925e6683c8.jpg" height="20"/></a><a href="http://translate.google.com/translate?u=http%3A//www.nightearth.com&amp;hl=es&amp;langpair=es|ko&amp;tbb=1"><img alt="Korean" width="23" src="http://photos1.blogger.com/img/43/1633/320/13539958_3c3b482c95.jpg" height="20"/></a><a href="http://translate.google.com/translate?u=http%3A//www.nightearth.com&amp;hl=es&amp;langpair=es|zh-CN&amp;tbb=1"><img alt="Chinese" width="23" src="http://photos1.blogger.com/img/43/1633/320/14324441_5ca5ce3423.jpg" height="20"/></a><a href="http://translate.google.com/translate?u=http%3A//www.nightearth.com&amp;hl=es&amp;langpair=es|ar&amp;tbb=1"><img alt="Arabic" width="23" src="http://2.bp.blogspot.com/_RrObyQ3XzcY/RchSvbOWb_I/AAAAAAAAAdw/uD4e5lDsh7A/s320/arabic-flag.gif" height="20"/></a><a href="http://www.dreamcoder.org">?</a>
    </noscript>
    
    <!-- Fin del Script de traducción automática -->

    Este script proporciona 2 versiones de las banderitas: una con javascript, que traduce la página actual, sea cual sea, y una en html, que traduce la página principal, desde la que se puede navegar a las otras páginas.

    2 comentarios:

    Anónimo dijo...

    me gustaria que la pagina traducida se de en la misma pagina... no en otra y sin esa barra de google traslator.

    gracias

    TKuni dijo...

    Eres un maestro, justo buscaba esto gracias; pero tengo una duda ¿Cómo es que el motor de busqueda de google indexa la página traducida?