Internacionalización y Traducciones (i18n) en Odoo
Odoo ofrece soporte nativo de internacionalización (i18n) y localización (l10n) multilingüe. Esto permite que una misma empresa opere en múltiples países con usuarios que ven la interfaz y los documentos en su propio idioma nativo.
1. Traducción en Código Python mediante _() #
Para que un texto en Python sea traducible por el motor de Odoo, debe envolverse en la función _() importada de odoo:
1from odoo import models, fields, api, _ 2from odoo.exceptions import UserError 3 4class LibraryLoan(models.Model): 5 _name = 'library.loan' 6 _description = 'Préstamos de Libros' 7 8 name = fields.Char(string='Referencia', required=True) 9 state = fields.Selection([ 10 ('draft', 'Borrador'), 11 ('active', 'Activo'), 12 ('returned', 'Devuelto'), 13 ], string='Estado', default='draft') 14 15 def action_validate(self): 16 for record in self: 17 if not record.partner_id: 18 # Texto preparado para traducción con _() 19 raise UserError(_("No puedes validar un préstamo sin asignar un socio.")) 20 record.state = 'active'
2. Catálogos de Traducción Gettext (.po y .pot) #
Las traducciones se almacenan en la carpeta i18n/ de cada módulo en formato estándar Gettext:
1mi_modulo/ 2└── i18n/ 3 ├── mi_modulo.pot # Plantilla base generada automáticamente (inglés) 4 ├── es.po # Traducción a Español 5 └── fr.po # Traducción a Francés
Estructura de un archivo es.po: #
1#. module: mi_modulo 2#: model:ir.model.fields,field_description:mi_modulo.field_library_loan__state 3msgid "Status" 4msgstr "Estado" 5 6#. module: mi_modulo 7#: code:addons/mi_modulo/models/library_loan.py:0 8#, python-format 9msgid "You cannot validate a loan without assigning a partner." 10msgstr "No puedes validar un préstamo sin asignar un socio."
3. Extracción y Carga de Traducciones con CLI #
Para exportar todas las cadenas traducibles de tu módulo a una plantilla:
1# Dentro del contenedor Odoo: 2odoo-bin --i18n-export=extra-addons/biblioteca/i18n/biblioteca.pot --modules=biblioteca -d mi_base_datos
Una vez editado el archivo es.po, al reiniciar y actualizar el módulo (-u biblioteca), Odoo cargará automáticamente las traducciones en la base de datos.
Resumen del tema
Conceptos clave #
- Internacionalización y Localización (i18n / l10n): soporte multilingüe y adaptación regional de formatos (fechas, monedas, números).
- Archivos de Traducción (
.po/.pot): catálogos gettext almacenados en la carpetai18n/del módulo (ej.es.po,fr.po) con paresmsgidymsgstr. - Traducción en Código Python (
from odoo import _): encapsulación de textos de interfaz y mensajes de error con_("Texto original"). - Traducción en Vistas y Reportes QWeb: directiva
t-translate="yes"o marcado directo de cadenas en plantillas XML.
Qué debes recordar #
Escribe siempre los textos base en inglés, envuélvelos con la función _() en Python o t-translate en QWeb y mantén sincronizados los archivos .po en i18n/.