Internacionalización y Traducciones (i18n) en Odoo
Odoo extrae cadenas traducibles a catálogos Gettext. Mantén el texto original coherente: el msgid debe coincidir exactamente con el literal Python o XML, incluida su puntuación.
1. Ampliar el préstamo existente #
Añade esta clase al final de models/biblioteca.py; no vuelvas a definir _name para un modelo ya creado:
1class LibraryLoanValidation(models.Model): 2 _inherit = 'library.loan' 3 4 def action_validate(self): 5 for record in self: 6 if not record.partner_id: 7 raise ValidationError(_('A partner is required to validate the loan.')) 8 record.state = 'active'
El archivo ya importa _ y ValidationError. Para mensajes con valores usa literales traducibles y parámetros, evitando construir la cadena antes de traducirla.
2. Exportar e incorporar traducciones #
Crea biblioteca/i18n en el host y exporta después de instalar el módulo:
1mkdir -p extra-addons/biblioteca/i18n 2docker compose stop web 3docker compose run --rm --entrypoint sh web -c ' 4 export PGHOST="$HOST" PGPORT=5432 PGUSER="$USER" PGPASSWORD="$PASSWORD" 5 odoo i18n export -d curso_odoo -o /mnt/extra-addons/biblioteca/i18n/biblioteca.pot biblioteca 6' 7docker compose up -d web
Odoo 20 utiliza el subcomando i18n export, no las antiguas opciones del servidor. En la imagen oficial evitamos que el entrypoint añada argumentos de servidor a este subcomando y pasamos la conexión mediante variables PostgreSQL. No se imprime ni se guarda la contraseña en el comando.
Copia la plantilla a es.po y conserva su cabecera y referencias. Este es un extracto, no el catálogo completo:
1#. module: biblioteca 2#. odoo-python 3#: code:addons/biblioteca/models/biblioteca.py:0 4msgid "A partner is required to validate the loan." 5msgstr "Debes asignar un socio para validar el préstamo."
Instala el idioma español en Odoo y actualiza el módulo para cargar sus traducciones. La plantilla .pot conserva el idioma de los literales; no los convierte automáticamente a inglés.
3. Traducción de QWeb #
Los nodos de texto y los atributos traducibles de vistas y plantillas se extraen automáticamente:
1<odoo> 2 <template id="translation_example"> 3 <p>Book catalogue</p> 4 <p t-translation="off">Internal technical identifier</p> 5 </template> 6</odoo>
t-translation="off" excluye el contenido de la traducción. No existe una instrucción que debas añadir a cada texto para activarla. No traduzcas identificadores técnicos, nombres de campos o claves de estado.