Muchas implantaciones de Odoo atienden a personas y clientes que hablan idiomas distintos: un equipo de ventas en Francia, un almacén en Alemania, un portal de clientes en España. Para que todo funcione sin fricciones hace falta que los textos de los registros puedan existir en más de un idioma a la vez; eso es precisamente lo que permiten los campos traducibles.
Un campo traducible guarda una versión distinta del mismo texto por cada idioma activo. Así, al abrir una ficha de producto un usuario francés ve el nombre en francés y otro alemán ve el nombre en alemán: es la misma fila en la base de datos, mostrada de forma distinta según el idioma del usuario.
Esta guía muestra cómo maneja Odoo los campos traducibles en el ORM, cómo crearlos y gestionarlos, y en qué situaciones aportan valor real al negocio.
¿Qué es un campo traducible en Odoo?
Un campo traducible es, en esencia, un campo de texto del modelo de datos de Odoo que puede almacenar un valor distinto por cada idioma activado en la base. Para el usuario la traducción es transparente: siempre ve el texto en su idioma sin pasos extra.
Qué tipos de campo admiten traducción
- Char: textos cortos de una línea, como nombres de producto, etiquetas o cargos.
- Text: textos de varias líneas, apropiados para descripciones o notas extensas.
- Html: contenido enriquecido con marcado HTML, habitual en páginas web o cuerpos de plantillas de correo.
No se traducen campos numéricos, fechas, relaciones Many2one ni booleanos: la traducción solo aplica a textos pensados para lectura humana.
Cómo se muestra en la interfaz
En el modo edición, Odoo añade junto al campo un pequeño icono con la bandera del idioma. Al pulsarlo se abre un cuadro donde aparecen los valores para cada idioma instalado, de modo que los usuarios autorizados pueden gestionar todas las traducciones desde una única ventana.
En vista de lectura el usuario simplemente ve el texto en su idioma. Si no existe traducción para ese idioma, Odoo muestra el valor de la lengua base (suele ser inglés) en lugar de dejar el campo vacío.
Cómo funcionan los campos traducibles
Conocer el funcionamiento interno de los campos traducibles ayuda a decidir cuándo usarlos y a gestionarlos de forma eficiente en instalaciones con mucho contenido.
El parámetro translate=True
En el ORM de Odoo se activa la traducción de un campo añadiendo translate=True en su definición. Este parámetro es la puerta para que Odoo trate ese campo como plurilingüe.
Por ejemplo, en un módulo personalizado se podría definir un Char traducible en el modelo de producto con algo similar a lo siguiente en Python:
Con ese simple parámetro, Odoo almacenará y recuperará valores distintos según el idioma activo: es una de las funcionalidades más elegantes del framework.
Dónde se guardan las traducciones
El mecanismo de almacenamiento ha evolucionado entre versiones de Odoo:
- Hasta Odoo 15: las traducciones vivían en una tabla independiente llamada ir.translation. Cada valor traducido era una fila que enlazaba modelo, campo, id de registro y código de idioma.
- A partir de Odoo 16: las traducciones se guardan directamente en la propia tabla del modelo usando una columna JSONB. Por ejemplo, un campo name con translate=True se almacena como un objeto JSON con claves de idioma y sus respectivos textos.
El paso a JSONB mejoró el rendimiento porque evita costosas operaciones JOIN con la tabla de traducciones y acelera las consultas en modelos con muchos registros.
Cómo se decide qué idioma ofrece Odoo
Al leer un campo traducible, Odoo mira el idioma activo en el contexto. Si el usuario tiene francés como idioma, el ORM recupera automáticamente la versión francesa. En llamadas API, el lenguaje se controla pasando el parámetro lang en el contexto.
En integraciones conviene incluir el idioma en el contexto para obtener el texto correcto desde el exterior.
Esto es crucial al construir sincronizaciones o exportaciones: siempre indica el idioma que quieres recibir o escribir.
translate con funciones (callable)
El parámetro translate también acepta una función en casos avanzados. Un patrón habitual es usar translate=_ para marcar cadenas estáticas (como etiquetas de selección) que se recogerán en el proceso de traducción de módulos. Esto difiere de las traducciones por registro y se emplea sobre todo en el desarrollo de módulos.
Comportamiento de retroceso (fallback)
Si falta una traducción para el idioma activo, Odoo no devuelve un valor vacío: recurre al idioma base de la base de datos. Gracias a ese fallback, los usuarios siempre ven algo útil incluso si la instalación no está totalmente traducida.
Casos prácticos en la empresa
Los campos traducibles no son solo una cuestión técnica: resuelven necesidades reales en compañías internacionales. A continuación se describen cinco escenarios habituales.
1. Comercio electrónico: nombres y descripciones multilingües
En una tienda web multilingüe los clientes esperan navegar y leer la ficha de producto en su idioma. Las propiedades name y description son traducibles por defecto, lo que permite mantener un catálogo único con textos localizados sin duplicar los productos.
Un visitante francés verá nombres y descripciones en francés mientras que el inventario, precios y reglas permanecen iguales: solo cambia el texto mostrado.
2. Plantillas de correo en empresas internacionales
Las plantillas de email usan campos Html traducibles para el cuerpo del mensaje. Si envías una confirmación a un cliente alemán, Odoo empleará la versión alemana de la plantilla si existe, porque esos campos llevan translate=True.
Esto permite usar una sola plantilla para varios mercados sin lógica condicional ni crear plantillas separadas por idioma.
3. Páginas web y entradas de blog
Las páginas del sitio web usan campos Html traducibles para el contenido. Con varios idiomas activados, los editores pueden mantener textos distintos para cada versión de la misma página, lo que es la base de un sitio multilingüe en Odoo sin plugins externos.
Además, desde el punto de vista SEO cada idioma puede tener su propio meta title y meta description, mejorando la visibilidad local en buscadores.
4. Etiquetas de campos tipo Selection para equipos internacionales
En los campos Selection las etiquetas se marcan para traducción con la función estándar _. Así, un desplegable que muestre “En curso”, “En espera” o “Completado” a un usuario en castellano aparecerá en su idioma para otros usuarios según su configuración.
Esto resulta muy práctico en áreas como RR. HH., gestión de proyectos o cualquier proceso compartido por oficinas en distintos países.
5. Campos personalizados en reporting multilingüe
Si has añadido campos personalizados para categorizar internamente (categorías de servicio, niveles de riesgo, segmentos de producto), hacerlos traducibles garantiza que informes y paneles muestren etiquetas coherentes para todos los usuarios, sea cual sea su idioma.
Si no traduces esos campos, un usuario francés puede seguir viendo etiquetas en inglés en los informes, lo que genera confusión y frena la adopción.
Crear o habilitar campos traducibles
Formas de crear o habilitar la traducción en un campo
Hay varias vías según trabajes sin código o directamente en Python.
En Python (recomendado para desarrolladores)
La forma más limpia es declarar el campo en el modelo Python con translate=True, que es la práctica normal en desarrollo de módulos personalizados.
Con ese cambio Odoo gestiona automáticamente la bandera en la UI, el almacenamiento y la lógica de fallback.
Con Odoo Studio
Studio no ofrece la opción translate en su panel al crear un campo; por defecto los campos Char o Text creados en Studio no son traducibles.
No obstante, puedes activar la traducción de un campo creado con Studio usando la API XML-RPC: localizas la entrada correspondiente en ir.model.fields y actualizas su propiedad translate.
Ese método es útil para equipos que personalizan mediante scripts o notebooks sin acceso directo al código fuente del módulo.
Gestión de traducciones: exportación e importación
El flujo de traducción en Odoo es sencillo una vez los campos están habilitados:
Exporta las cadenas desde Settings > Translations > Export Translation para obtener un .po o .csv con los textos sin traducir de un idioma.
- Rellena las traducciones en el archivo o pásalo a un traductor.
- Importa el archivo completado desde Settings > Translations > Import Translation para cargar las traducciones en Odoo.
- Para traducciones por registro (p. ej. nombres de producto) también puedes editarlas directamente en la interfaz usando la bandera junto al campo, práctico para volúmenes pequeños.
Traducción mediante API
Al escribir o actualizar un campo traducible vía XML-RPC, indica el idioma en el contexto para que la modificación afecte solo a esa traducción.
Si escribes con lang en el contexto, solo se modifica la entrada para ese idioma; las demás permanecen intactas. Es la forma adecuada de sincronizar contenidos desde sistemas externos.
Ejemplo práctico: escribir la traducción francesa de un nombre de producto a través de la API actualizando el contexto con lang='fr_FR'.
Al operar de esta manera evitas sobrescribir traducciones de otros idiomas por error.
Buenas prácticas
Reglas prácticas para evitar problemas
Siempre establece primero el valor en el idioma base
Antes de añadir traducciones comprueba que el texto en la lengua base está correcto. Odoo no sincroniza automáticamente las traducciones cuando cambias el original, por lo que si el base cambia, las traducciones pueden quedar desactualizadas.
Traduce solo lo que realmente necesites
No todos los campos requieren traducción: códigos internos o identificadores técnicos que solo usan equipos back-office no se benefician de translate=True. Marcar demasiados campos complica el mantenimiento.
Usa exportación/importación para trabajos grandes
En catálogos extensos editar campo a campo en la UI es inviable. Exporta, traduce en bloque y vuelve a importar: es más rápido y menos propenso a errores.
Pasa siempre el idioma en llamadas API
Al leer o escribir vía API incluye 'lang': 'xx_XX' en el contexto. Si no lo haces, la API usa el idioma por defecto del usuario y podrías almacenar textos bajo el idioma equivocado.
Mantén las traducciones tras cambios en la fuente
Cuando actualices el valor en la lengua base crea un proceso de revisión para que traductores actualicen las versiones derivadas y evitar desajustes.
Errores habituales
Errores frecuentes que conviene evitar
Olvidar el contexto de idioma en escrituras por API
Es el fallo más habitual en integraciones: escribir sin especificar el idioma puede sobrescribir el texto de la lengua base en lugar de añadir una traducción.
Creer que las búsquedas abarcan todas las traducciones
Las búsquedas en campos traducibles se realizan por el idioma activo. Un producto llamado “Laptop Stand” en inglés no aparecerá para un usuario en francés si la versión francesa no existe. Asegúrate de tener las traducciones necesarias para que las búsquedas funcionen en cada idioma.
Mezclar campos traducibles y no traducibles en informes
Un informe que combine ambos tipos puede mostrar etiquetas en idiomas distintos. Revisa qué campos necesita traducir cada informe y actúa en consecuencia.
No tener en cuenta la sobrecarga de traducción en campos computados
Si un campo computado concatena valores traducibles, la concatenación se calcula en el idioma activo y no se guarda por idioma. Si necesitas el resultado en varios idiomas, implementa la lógica específica por idioma.
Eliminar un idioma sin limpiar sus traducciones
Al desactivar un idioma, en algunas versiones los valores traducidos pueden permanecer en la base de datos. No suele ser crítico, pero conviene revisar y limpiar los datos si buscas mantener la base ordenada.
Resumen
Los campos traducibles son una herramienta muy práctica para empresas con operaciones multilingües: con un único ajuste, translate=True, puedes mantener contenido localizado para catálogos, plantillas de correo, páginas web y campos personalizados sin duplicar registros.
Lo esencial es usar la traducción de forma deliberada: activa solo los campos que aportan valor, gestiona catálogos grandes mediante exportación/importación y sé explícito con el contexto de idioma en las integraciones.
Si vas a lanzar una tienda multilingüe, desplegar Odoo entre equipos internacionales o desarrollar un módulo personalizado, entender cómo funcionan los campos traducibles te ayudará a crear soluciones más limpias y amigables para el usuario.
¿Estás implantando Odoo en varios idiomas y necesitas ayuda con la configuración de campos o los flujos de traducción? Contacta con el equipo de Dasolo y con gusto te ayudaremos a implementarlo correctamente.