
Regístrate ahora.
Tendrás acceso a nuestro servicio técnico y a nuestras herramientas.
- 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...
- 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...
- 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...
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:
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)
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.
GTranslate 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.
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:
Con todo esto conseguimos nuestros tres grandes objetivos en una única solución:
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!
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.
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.
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)));
}
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.
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.
