Acceder a la zona de clientes
Avatar
¿No eres cliente?

Regístrate ahora.
Tendrás acceso a nuestro servicio técnico y a nuestras herramientas.

Recuperar contraseña perdida
Recuperar usuario perdido

Usuario/EMail
Contraseña
Recuérdeme
Spanish Catalan English French Portuguese

Servicio Técnico

1304528890_redhat-system_tools - Ayuda Online
- Mantenimiento para empresas
- Administración de servidores
- Artículos de soporte técnico

15 años de experiencia nos avalan. Soporte para Windows y Mac. Ofimática, seguridad, multimedia, redes...

InFoAL WebFactory

1304530319_groupwarewizard - Diseñamos su web
- Expertos en Joomla!
- Hosting optimizado para Joomla!
- Guia Joomla!

¿Necesita una web? Nosotros nos encargamos de todo: Hosting, Mantenimiento, Diseño, Programación, SEO...

InFoAL Tienda Online

1304529572_e-commerce-px-png - Ordenadores de sobremesa
- Servicio de Hosting
- Accesorios y periféricos
- Packs de servicio

Ofrecemos a nuestros clientes una selección de productos de la máxima calidad y fiabilidad: Toshiba, Asus, D-Link...

Compartir en...

InFoAL.com: En portada...

EL PROBLEMA

Joomla! es un sistema multilenguaje, y permite la instalación de paquetes de idiomas tanto para la parte pública de nuestra web, como para la parte administrativa. Estos paquetes de idioma incluyen las traducciones de las etiquetas del sistema, por ejemplo los formularios, botones, mensajes, alertas.... sin embargo Joomla! no incorpora ningún sistema para la traducción del contenido, por lo que deberemos instalar extensiones para este fin. Existen dos tipos de traducción:

 

TRADUCCIÓN MANUAL DEL CONTENIDO

Este sistema requiere mucho trabajo por parte de los usuarios, ya que cada artículo que se introduce en el contenido, hay que traducirlo a tantos idiomas como se quieran tener instalados en la web. En contrapartida, este tipo de traducción, beneficia enormemente de cara a la indexación en los buscadores, ya que las traducciones también son indexadas, no solo el idioma original.

Existen diversas extensiones para Joomla! que permiten la traducción manual del contenido, aunque la mas popular es Joom!Fish.

Joom!Fish es una extensión gratuita para Joomla! que nos permitirá traducir nuestros artículos tanto desde el front como desde el back a tantos idiomas como queramos. También nos permite traducir los menús y los módulos y la mayoria de extensiones tienen compatibilidad con JoomFish!. Cuenta con un buen soporte, una comunidad numerosa, y múltiples complementos.

Descargar Joomfish! 2. ( © Think Network GmbH, Munich)


TRADUCCIÓN AUTOMÁTICA

La alternativa a la traducción manual son los servicios de traducción online que nos ofrecen sitios como Google, Babylon o Altavista. Ya existen multitud de módulos para Joomla! que permiten utilizar estos servicios de traducción automática integrados en nuestra web, sin necesidad de que el usuario instale ningún software adicional ni entra web para realizar la traducción.

Estos sistemas, como todas las traducciones automáticas, no ofrecen resultados perfectos, pero si bastante buenos. Cumplen su finalidad, es decir, que los visitantes de nuestra web puedan entender los contenidos, sea cual sea su idioma. Esta opción es especialmente interesante para los idiomas minoritarios, ya que con los 43 idiomas disponibles en Google Translate se cubre el 98% de los posibles visitantes. La desventaja de este tipo de traducción es que no se indexa en los buscadores y la lentitud, ya que toda página que se traduce tiene que pasar por los servidores de traducción antes de mostrarse. Una de las extensiones mas completas y funcionales Gtranslate.

gtranslateGTranslate es un pequeño módulo para Joomla! que permite traducir nuestra web a 43 idiomas, gracias a la API de Google Translation.
Nos permitirá además varias opciones de presentación.

Descargar GTranslate.(© Edvard Ananyan, Yerevan)

Por lo tanto, ambas soluciones tienen ventajas y desventajas, pero Joomla! no dispone de ningún sistema que permita combinar la traducción manual del contenido de Joom!Fish con las traducciones automáticas de GTranslate.

 

LA SOLUCIÓN: Integración de Joom!Fish y GTranslate

En este artículo explicaremos como, realizando unas sencillas modificaciones en el código de ambas extensiones, podremos realizar una completa integración que nos proporcionará, además de las funcionalidades ya conocidas de estas extensiones, las siguientes ventajas:

  • En la web mostraremos únicamente un módulo traducción de GTranslate (que permite mostrar banderas y desplegable) y no el de Joom!Fish
  • Cuando hagamos click en la bandera de un idioma que tengamos activado en Joom!Fish, se cargará la traducción manual mediante Joom!Fish
  • Cuando seleccionemos un idioma que NO esté activado en Joom!Fish, se cargará la traducción automática mediante GTranslate.
  • Cuando estemos mostrando la web en uno de los idiomas de Joom!Fish, aquellos artículos que hayan sido escritos en el idioma original y todavia no dispongan de traducción en Joom!Fish, se traducirán automáticamente mediante la GTranslate API PHP.
  • Cuando queramos crear la traducción de un artículo, Joomla! nos mostrará el artículo original traducido mediante GTranslate, no en el idioma original, por lo que solo deberemos repasar la traducción y guardarla. 
  • Cuando nos logueamos en el front, las banderas de los idiomas que tengamos instalados en Joom!Fish, pero no activados todavia, nos permiten realizar las traducciones de los artículos a esos idiomas (no conducen a la traducción automática). 

Con todo esto conseguimos nuestros tres grandes objetivos en una única solución:

  • Podremos guardar las traducciones de los contenidos de la web en los idiomas mas importantes mediante Joom!Fish, de esta manera recibiremos mas visitantes de estos idiomas, además de mejorar el rendimiento de nuestra web al no recurrir al traductor externo.
  • Mantenemos la posibilidad de que los visitantes puedan traducir la web entera a todos los demás idiomas mediante la traducción automática de Google.
  • Facilitamos el trabajo de traducción manual.

Vamos a ver los pasos a realizar:

Paso 1: Requisitos previos

  • Joomla 1.5.x  
  • Instalar en Joomla! los paquetes de todos aquellos idiomas de lo que queramos tener traducciones manuales
  • Instalar los mismos paquetes de idiomas para todas las extensiones de terceros instaladas
  • JoomFish! 2, instalado y activado
  • Idiomas los mismos idiomas para JoomFish
  • Gtranslate, instalado y activado
  • Establecer correctamente el mismo idioma predeterminado en Joomla!, Joom!Fish, y GTranslate, de lo contrario el sistema no funcionará correctamente. Si tiene problemas para predeterminar un idioma en Joom!Fish, modifique las opciones del plugin "System - Jfrouter" que encontrará en el menú "Extensiones"->"Gestor de Módulos"de la web de administración.

Paso 2: Instalación de librerias adicionales

Para traducir textos mediante la Api de Google Translate directamente en nuestro código PHP, existe la libreria Google Translate™ API PHP Wrapper.

Descargar Google translate API PHP Wrapper. ( © Jose Da Silva)

Para nuestra modificación vamos a necesitar también la libreria JQuery Minified.

 Descargar  jQuery 1.3.2 (Minified).

Ambas librerias vienen comprimidas dentro de ficheros zip. Para instalarlas descomprimiremos todo el contenido de los ficheros zip en la carpeta /includes de nuestra web Joomla!

 

Paso 3: Configurar los parámetros del módulo GTranslate y ocultar el selector de idioma de Joom!Fish

En la web de administración, accedemos al menú "Extensiones"->"Gestor de Módulos" , y buscaremos el módulo "mod_Gtranslate".

En los parámetros del módulo Gtranslate debemos dejarlo así:

Habilitado: Sí

Nivel de acceso: Público

Look: Both (para que muestre banderas y desplegable)

Todos aquellos idiomas que tengamos instalados en Joom!Fish deberemos mostrarlos como banderas: As a Flag

El módulo de selección de idioma de Joom!Fish, "mod_jflanguageselection", lo deshabilitaremos de manera que en nuestra web el idioma tenga que ser seleccionado con el módulo GTranslate.

 

Paso 4: Modificar el código del módulo GTranslate para que detecte automáticamente los idiomas activados en Joom!Fish:

El fichero a modificar es /modules/mod_gtranslate/tmpl/default.php

Hay que modificar el siguiente código en la línea 78:

Antes:$i = $j = 0;

    foreach($lang_array as $lang => $lang_name) {
        $show_this = 'show_'.str_replace('-', '', $lang);
        if($$show_this == '2'):
            echo '<a href="javascript:doTranslate(\''.$language.'|'.$lang.'\')" title="'.$lang_name.'" class="flag" style="font-size:'.$flag_size.'px;padding:1px 0;background-repeat:no-repeat;background-position:-'.($i*100).'px -'.($j*100).'px;"><img src="'.JURI::root(true).'/modules/mod_gtranslate/tmpl/lang/blank.png" height="'.$flag_size.'" width="'.$flag_size.'" style="border:0;vertical-align:top;" alt="'.$lang_name.'" /></a> ';
        endif;

        if($i == 7) {
            $i = 0;
            $j++;
        } else {
            $i++;
        }

}
Después:

$i = $j = 0;


    $jfManager = JoomFishManager::getInstance();
    $langActive = $jfManager->getActiveLanguages();
    $cont = 0;
    foreach ($langActive as $idioma => $nombre){
          $jfArrayIdiomas[$cont] = substr($idioma,0,2);
          $cont++;
    }   

  /*this is the jquery path*/
   echo '<script src="/includes/jquery-1.3.2.js">jQuery.noConflict();</script>';
       
    foreach($lang_array as $lang => $lang_name) {
        $show_this = 'show_'.str_replace('-', '', $lang);
        if($$show_this == '2'):
        $coincide = false;
        foreach ($jfArrayIdiomas as $idiomaJoomfish)
        {
            if ($idiomaJoomfish == $lang)
                {
                    $coincide = true;
                    break;
                }
        }
        if ($coincide)
        {
        if($_SERVER['REQUEST_URI']=="/") $newurl="$idiomaJoomfish";
        else
        $newurl=str_replace(substr($_SERVER['REQUEST_URI'], 1, 2),$idiomaJoomfish,$_SERVER['REQUEST_URI']);
            echo '<script>jQuery(document).ready(function(){jQuery("#notraducir'.$idiomaJoomfish.'").attr("href","'.$newurl.'");});</script>';

            echo '<span class="notranslate"><a id="notraducir'.$idiomaJoomfish.'" href="/" style="font-size:'.$flag_size.'px;padding:1px 0;background:url(\'modules/mod_gtranslate/tmpl/lang/'.$flag_size.'.png\') no-repeat scroll -'.($i*100).'px -'.($j*100).'px;"><img src="/modules/mod_gtranslate/tmpl/lang/blank.png" height="'.$flag_size.'" width="'.$flag_size.'" style="border:0;vertical-align:top;" alt="'.$lang_name.'" /></a></span> ';
        }
        else

            echo '<a href="javascript:doTranslate(\''.$language.'|'.$lang.'\')" title="'.$lang_name.'" style="font-size:'.$flag_size.'px;padding:1px 0;background:url(\'modules/mod_gtranslate/tmpl/lang/'.$flag_size.'.png\') no-repeat scroll -'.($i*100).'px -'.($j*100).'px;"><img src="/modules/mod_gtranslate/tmpl/lang/blank.png" height="'.$flag_size.'" width="'.$flag_size.'" style="border:0;vertical-align:top;" alt="'.$lang_name.'" /></a> ';
        endif;




if($i == 7) {
            $i = 0;
            $j++;
        } else {
            $i++;
        }

}
Con este cambio conseguimos mediante JQuery que aquellas banderas del módulo de GTranslate que corresponden a un idioma activado en Joom!Fish, no ejecuten el código de GTranslate, si no el de Joom!Fish, y podemos mostrar así las traducciones manuales y automáticas en un único módulo. En la lista desplegable de idiomas que GTranslate muestra debajo de las banderas, continua estando disponible la traducción automática a 43 idiomas.

Además conseguimos otro efecto: cuando un usuario registrado se loguea en el front, las banderas de aquellos idiomas que están instalados en Joom!Fish, pero todavia no están activados, llevan a las traducciones de Joom!Fish. Si el usuario, en cambio, no está logueado en el front, esas banderas conducen a la traducción automática de Google. Con esto conseguimos poder ir realizando las traducciones de los contenidos a un determinado idioma con Joom!Fish, pero que mientras ese idioma no esté activado, los visitantes sigan viendo la traducción automática de GTranslate. 

 

Paso 5: Modificar la libreria GTranslate.php

El fichero a modificar es /includes/GTranslate.php

Hay que añadir la siguiente función en la linea del 250 código, ya que la función original no permite pasar los idiomas por parámetro:

Antes:

    public function __call($name,$args)
    {
        $languages_list     =     explode("_to_",strtolower($name));
        echo $languages_list[1];
        $languages = $this->isValidLanguage($languages_list);

        $string     =     $args[0];
        return $this->query($languages,$string);
    }
Después:

    public function __call($name,$args)
    {
        $languages_list     =     explode("_to_",strtolower($name));
        echo $languages_list[1];
        $languages = $this->isValidLanguage($languages_list);

        $string     =     $args[0];
        return $this->query($languages,$string);
    }
   
    public function translate($lang1,$lang2,$text)
    {
        $languages_list[0]    = strtolower($lang1);
        $languages_list[1] = strtolower($lang2);
        $languages = $this->isValidLanguage($languages_list);
        return $this->query($languages,$text);
    }

y comentar la línea 120 para que no aparezca la URL:

    private function requestHttp($url)
    {
        //echo $url;
        return GTranslate::evalResponse(json_decode(file_get_contents($url)));
    }

Paso 6: Modificar el plugin missing_translations de Joom!Fish

El fichero a modificar es /plugins/joomfish/missing_translation.php

Hay que realizar dos cambios:

Primero, en la línea 38, vamos a incluir el fichero de la libreria de GTranslate añadiendo la siguiente linea al código:

Antes:

jimport( 'joomla.plugin.plugin' );
JPlugin::loadLanguage( 'plg_joomfish_missing_translation', JPATH_ADMINISTRATOR );
Después:

jimport( 'joomla.plugin.plugin' );
JPlugin::loadLanguage( 'plg_joomfish_missing_translation', JPATH_ADMINISTRATOR );
require("includes/GTranslate.php");
Luego, para activar esta funcionalidad, en la línea 74, reemplazaremos el típico mensaje de Joom!Fish "no translations available" por las funciones de traducción de Gtranslate:

Antes:

if ($defaultText=="") {
           $defaultText = '<div class="jfdefaulttext">' .JText::_('There are no translations available.'). '</div>';
}
Después:

if ($defaultText=="") {                        

                    $registry =& JFactory::getConfig();   
                    $langfrom=substr($default_lang, 0, 2);
                    $langto=substr($language, 0, 2);
                    
                    try{$gt = new Gtranslate;

if ($row_to_translate->title!=""){ $row_to_translate->title=$gt->translate($langfrom,$langto,$row_to_translate->title);}
if ($row_to_translate->introtext!=""){ $row_to_translate->introtext=$gt->translate($langfrom,$langto,$row_to_translate->introtext);}
if ($row_to_translate->fulltext!=""){ $row_to_translate->fulltext=$gt->translate($langfrom,$langto,$row_to_translate->fulltext);}
if ($row_to_translate->title_alias!=""){ $row_to_translate->title_alias=$gt->translate($langfrom,$langto,$row_to_translate->title_alias);}
if ($row_to_translate->alias!=""){ $row_to_translate->alias=$gt->translate($langfrom,$langto,$row_to_translate->alias);}
if ($row_to_translate->metadesc!=""){ $row_to_translate->metadesc=$gt->translate($langfrom,$langto,$row_to_translate->metadesc);}
if ($row_to_translate->metakey!=""){ $row_to_translate->metakey=$gt->translate($langfrom,$langto,$row_to_translate->metakey);   }                
                
                     }catch(GTranslateException $ge){};
  

}

Cada línea traduce un elemento, cuantos mas elementos traduzcamos, mas lento funcionará el sistema.

De esta manera, los artículos pendientes de traducir de los idiomas de Joom!Fish no se mostrarán en el idioma original, si no traducidos automáticamente por GTranslate.

Además, este mismo código hace que al traducir un artículo por primera vez, en la pantalla de edición se nos muestre el artículo traducido automáticamente, y no su idioma original. Esto facilita la labor de traducción ya que solo debemos corregir los posibles errores de GTranslate y luego guardar.

 

Y ya está. Con estas modificaciones conseguiremos la práctica integración de ambos sistemas en nuestra web.

 

Uso, una vez hechos los cambios:

Deberemos decidir qué idiomas son suficientemente importantes para que valga la pena realizar una traducción manual. Para decidir, debemos pensar cual es el público potencial de nuestra web, ya que las traducciones automáticas no se indexan en los buscadores, por lo que deberemos realizar la traducción manual con Joom!Fish a todos aquellos idiomas por los que queremos que nos encuentren. Recomendamos traducir la web siempre al español y al inglés, activar otros idiomas como francés o catalán en el caso que nuestra web tenga clientes potenciales en esas lenguas, y dejar la traducción automática para el resto de los idiomas posibles.

Una vez que hayamos decidido los idiomas principales, instalaremos los paquetes de esos idiomas en Joomla!, y también para TODAS LAS EXTENSIONES DE TERCEROS que tengamos instaladas.  

En cuanto instalemos el paquete de idioma en Joomla!, este ya estará disponible en Joom!Fish (NO ACTIVARLO TODAVIA!).

Primero deberemos traducir (mediante el procedimiento normal de Joom!Fish) los items de menús, secciones, categorias y los módulos.

Ahora deberemos ir traduciendo todos los artículos al nuevo idioma (también siguiendo el procedimiento normal de Joom!Fish). Gracias a las modificaciones, solo deberemos repasar la corrección del GTranslate y guardarla.

Una vez tengamos todas (o casi todas) las traducciones de los artículos guardadas, ya podremos ACTIVAR el nuevo idioma en Joom!Fish. Cuando hagamos esto, los visitantes de la web que hagan click en la bandera de este idioma, ya no serán dirigidos a la traducción automática de GTranslate, si no que veran nuestra traducción manual.

Si nos olvidamos de traducir un artículo de ese nuevo idioma, se mostrará la traducción automática del mismo.

Atención: No utilizar la traducción de GTranslate para sitios con muchas visitas o con muchos artículos, ya que esto reduce sensiblemente el rendimiento de la web. Una vez que activemos un idioma, deberemos intentar guardar las traducciones de TODOS LOS ARTÍCULOS DE ESE IDIOMA para reducir las consultas al GTranslate.

 

Podeis ver una demo en http://pro.infoal.com

 

Cualquier sugerencia para mejorar el código será bien recibida.

Cosas que quedan por resolver:

  • Si alguien tiene tiempo de buscar como hace Joom!Fish las traducciones de módulos y menús, podriamos hacer que se tradujeran automáticamente cuando no exista una traducción manual.
  • De vez en cuando la galeria de GTranslate php da un error. Creo que hay algún carácter que hace que falle, pero de momento no lo he encontrado.

 

 

Últimos Comentarios