logo

Campos multi-idioma en OpenERP

Hace un par de días, un programador compartió un problema que tenía en el chat. En el caso de tener un campo al que se le quiere añadir un sufijo que pero al mismo tiempo tiene otro campo, y ambos campos están definidos como traducibles… ¿como puedes hacer para combinar los dos campos en todos los idiomas disponibles?

Funcionamiento de los campos multi idioma

En primer lugar, debemos saber que cuando llamamos a uno de los métodos del orm en el context, estamos pasando la información del idioma. Por otro lado, tenemos que tener en cuenta que los idiomas disponibles en nuestra instancia de OpenERP se encuentran en ‘res.lang’.

De esta manera, cuando hacemos una operación sobre un campo que tiene habilitada la traducción, si le pasamos en el context la información del idioma sólo realizará la operación sobre ese idioma, y si no, automáticamente realizará la operación sobre el primer idioma (por defecto en_US).

Asimismo, para hacer una operación sobre todos los idiomas en un campo, tendremos que realizar esa operación tantas veces como idiomas tengamos disponibles en ‘res.lang’. Pasando de igual manera, en cada iteración el idioma en el context para realizar la operación.

En el siguiente código de ejemplo lo que hago es cambiar el nombre de un producto por nombre-nombre en todos los idiomas, por ejemplo, en mi instalación de OpenERP tengo un producto con el nombre en español ‘prueba’ y en inglés ‘test’, después de pasar este código cambia el nombre en español por ‘prueba-prueba’ y en inglés ‘test-test’.

        lang_obj = self.pool.get(‘res.lang’)
user_obj = self.pool.get(‘res.user’)
product_obj = self.pool.get(‘product.obj’)

 

if context is None:
context = {}

# obtengo el idioma del context
previous_lang = context.get(‘lang’)

# recorro todos los idiomas
lang_ids = lang_obj.search(cr, uid,[])
for lang in lang_obj.browse(cr,uid,lang_ids):

            # guardo el idioma en el context
context[‘lang’] = lang.code

# obtengo en producto, pasando el nuevo context para que me devuelva en nombre en el idioma pasado
for product in product_obj.browse(cr,uid,ids, context):
# escribo el producto con los cambios, pasando el nuevo context para que escriba el nombre en el idioma pasado
product_obj.write(cr, uid, product.id, {‘name’:product.name+‘-‘+product.name}, context)

context[‘lang’] = previous_lang

Por último, encuentra más información sobre este módulo en el siguiente enlace: http://angelmoya.es/openerp/campos-multi-idioma-en-openerp/

Finalmente, para más información sobre OpenERP visita nuestra web haciendo un clic aquí.

Campos multi idioma