Montar una tienda en Drupal es uno de los mejores ejemplos de la flexibilidad de este CMS. Igual sirve para una pequeña web que para un gran portal con miles de contenidos.
Drupal tiene un gran soporte de internacionalización, es decir, capacidad de montar una web en varios idiomas.
Drupal también tiene un gran abanico de opciones a la hora de montar una tienda virtual.
Los problemas se encuentran a la hora del Put-it-all-together, es decir, de ponerlo todo junto.
Vamos a intentar explicaros los principales problemas a la hora de montar una tienda virtual en Drupal, usando Ubercart y i18n para internacionalizar.
Usamos Ubercart puesto que es la opción con mayor número de traducciones disponibles, y por tanto se ajusta a nuestro proyecto de internacionalización de tienda.
Principal problema: los productos se crean una vez por idioma
Drupal trata las traducciones como nodos distintos. Esto es una ventaja muchas veces, y un problema a la hora de dar de alta productos en varios idiomas.
Esta claro que tanto el título como la descripción necesitan una traducción, pero no el resto de campos de un producto, pensemos un poco ... Foto del producto, precio, peso, medidas, referencia, etc.
Esto se soluciona escribiendo un pequeño código que sincroniza los campos que nosotros definamos.
<?php
//elegimos los campos que queramos sincronizar
function custommod_i18nsync_fields_alter($fields, $type) {
if(in_array($type, uc_product_types())) {
$fields['uc_products']['#title'] = 'Products';
$fields['uc_products']['#options'] = array (
'model' => 'SKU',
'list_price' => 'List Price',
'cost' => 'Cost',
'sell_price' => 'Sell Price',
'weight' => 'Weight',
'weight_units' => 'Weight Units',
'length' => 'Length',
'width' => 'Width',
'height' => 'Height',
'length_units' => 'Length Units',
'pkg_qty' => 'Quantity',
'default_qty' => 'Default quantity to add to cart'
);
}
}
?>Posteriormente vamos al tipo de contenido producto, y bajo Ajustes de Workflow seleccionamos los campos que queramos sincronizar. No hay que sincronizar la taxonomía, tal y como veremos en el segundo problema.
Y con esto solucionamos el primer problema.
Segundo problema: La taxonomía y el catálogo de Ubercart no se llevan muy bien
La solución es un poco elaborada, y consiste en determinar que el catálogo se traduce Per language Terms (por términos de lenguaje). Tras esto tendremos que crear un término por cada idioma, y como último paso, relacionar ambos términos, mediante "create new translation" o crear nueva traducción.
Otros problemas menores
A lo largo de la puesta en funcionamiento de la tienda nos encontramos con otros muchos pequeños problemas de internacionalización:
El texto por defecto de añadir a la cesta de la compra, configurable en las opciones de producto, sólo aparece en un idioma. Lo resolvemos editando una línea del uc_product.module:
<?php
//Cambiamos esta línea:
//'#value' => variable_get('uc_teaser_add_to_cart_text', t('Add to cart')),
//por esta otra
'#value' => t(variable_get('uc_teaser_add_to_cart_text', 'Add to cart')),
?>Otras cadenas a traducir se pueden definir en el fichero settings.php de la forma habitual.
Y para otros problemas, sírvanse de la ayuda de profesionales en el desarrollo web y en sistemas Drupal como www.kreanto.com
Muchas gracias por sus contribuciones a http://www.firewing1.com/
Un saludo, y hasta el próximo artículo!







function custommod i18nsync fields alter
Hola,
muchas gracias por el tutorial.
Podrías indicar el archivo donde situar la función:
custommod_i18nsync_fields_alter
Muchas gracias.
I found there another
I found there another trick:
http://www.ubercart.org/forum/internationalization/29/translation
installed 'internationalization' module and enabled only 'internationalization' (formerly 'i18n')
activated 'language switcher' block
added this code in settings.php :
$conf['i18n_variables'] = array(
'uc_teaser_add_to_cart_text',
'uc_product_add_to_cart_text',
);
Then, when I go to product settings, the language beeing set to english :
the two 'add to cart' textfields are empty.
the sentence This is a multilingual variable is added in each textfield's description
enter 'Add to cart' twice, then submit
switch language
the textfields are empty
enter the translated string twice, then submit
go to a product node, and switch language : the 'Add to cart' button is translated accordingly
So, it works. But a drawback is that, as soon as you make a variable translatable, the default value is ignored (I had to enter 'Add to cart' again).
Enviar un comentario nuevo