De nombreuses implémentations d'Odoo servent des utilisateurs ou des clients dans plus d'une langue. Une équipe de vente française, un entrepôt allemand, un portail client espagnol. Pour que tout cela fonctionne sans heurts, Odoo a besoin d'un moyen de stocker les valeurs des champs dans plusieurs langues à la fois. C'est exactement ce que font les champs traduits.
Un champ traduit contient une valeur par langue. Lorsqu'un utilisateur français ouvre un enregistrement de produit, il voit le nom du produit en français. Lorsqu'un utilisateur allemand ouvre le même enregistrement, il voit le nom en allemand. Un enregistrement dans la base de données, plusieurs représentations selon qui regarde.
Ce guide explique comment fonctionnent les champs traduits dans l'ORM Odoo, comment les créer et les gérer, et les situations pratiques où ils font une réelle différence dans le fonctionnement de votre entreprise.
Qu'est-ce qu'un champ traduit dans Odoo
Un champ traduit est un champ basé sur du texte dans le modèle de données Odoo qui peut stocker une valeur différente pour chaque langue active dans le système. La traduction est transparente pour l'utilisateur : il voit toujours la valeur dans sa propre langue sans avoir besoin de faire quoi que ce soit de spécial.
En termes de types de champs Odoo, la traduction est prise en charge sur :
- Char : texte court sur une seule ligne (noms de produits, étiquettes de catégorie, titres de poste)
- Text : texte plus long sur plusieurs lignes (descriptions, notes)
- Html : texte enrichi avec balisage HTML (contenu de site web, corps de modèles d'e-mail)
Les champs numériques, les champs de date, les champs Many2one et les champs booléens ne peuvent pas être traduits. La traduction ne s'applique qu'aux champs qui contiennent du texte lisible par l'homme.
À quoi cela ressemble dans l'interface
Lorsqu'un champ traduit est actif dans Odoo, une petite icône de drapeau de langue apparaît à côté du champ en mode édition. En cliquant dessus, une boîte de dialogue s'ouvre et montre la valeur pour chaque langue installée, permettant aux utilisateurs autorisés de gérer toutes les traductions à partir d'un seul endroit.
En mode lecture, l'utilisateur voit simplement la valeur dans sa propre langue. Si aucune traduction n'a encore été définie pour sa langue, Odoo revient à la valeur de langue de base (généralement l'anglais) plutôt que d'afficher un champ vide.
Comment fonctionne le champ traduit
Comprendre les détails des champs traduits vous aide à prendre de meilleures décisions sur le moment de les utiliser et comment les gérer à grande échelle.
Le paramètre translate=True
Dans l'ORM Odoo, vous activez la traduction sur un champ en ajoutant translate=True à la définition du champ. Voici un exemple simple sur un champ Char personnalisé :
from odoo import models, fields
class ProductTemplate(models.Model):
_inherit = 'product.template'
x_marketing_tagline = fields.Char(
string='Slogan Marketing',
translate=True
)
Avec ce seul paramètre, Odoo sait stocker et récupérer différentes valeurs pour ce champ en fonction du contexte de langue actif. C'est l'une des fonctionnalités les plus élégantes du framework Odoo.
Où les traductions sont stockées
Le mécanisme de stockage a changé à travers les versions d'Odoo :
- Odoo 15 et antérieur : Les traductions étaient stockées dans une table
ir.translationséparée. Chaque valeur traduite était une ligne dans cette table, liée au modèle, au nom du champ, à l'ID de l'enregistrement et au code de langue. - Odoo 16 et ultérieur : Les traductions sont stockées directement dans la propre table de base de données du modèle sous forme de colonne JSONB. Par exemple, un champ
nameavectranslate=Trueest stocké comme un objet JSON tel que{"en_US": "Support d'ordinateur portable", "fr_FR": "Support pour ordinateur portable", "de_DE": "Laptopständer"}.
Le passage à JSONB dans Odoo 16 a été une amélioration significative. Cela élimine les jointures coûteuses avec la table de traduction et rend les requêtes beaucoup plus rapides, en particulier sur les modèles avec de nombreux enregistrements.
Comment fonctionne le contexte linguistique
Lorsque Odoo lit un champ traduit, il vérifie la langue active dans le contexte. Si vous êtes connecté en tant qu'utilisateur français, l'ORM récupère automatiquement la valeur française. Si vous effectuez un appel API, vous contrôlez la langue en la passant dans le contexte :
models.execute_kw(
ODOO_DB, uid, ODOO_API_KEY,
'product.template', 'read',
[[product_id]],
{'fields': ['name'], 'context': {'lang': 'fr_FR'}}
)
C'est important lors de la création d'intégrations ou de scripts d'exportation. Passez toujours la bonne langue dans le contexte pour obtenir la bonne valeur traduite.
Le paramètre translate avec un appelable
Le paramètre translate accepte également un appelable pour des cas d'utilisation avancés. L'exemple le plus courant est d'utiliser translate=_ pour marquer les valeurs de chaînes statiques (comme les étiquettes de sélection) pour la traduction via le mécanisme d'exportation de traduction standard d'Odoo. Cela est distinct des traductions de champs au niveau des enregistrements et est principalement utilisé dans le développement Odoo pour traduire les chaînes de modules.
Comportement de secours
Si une traduction n'a pas été définie pour la langue active, Odoo ne renvoie pas une valeur vide. Il revient à la langue de base de la base de données (généralement l'anglais). Ce retour gracieux signifie que vos utilisateurs voient toujours quelque chose de significatif, même dans des environnements partiellement traduits.
Cas d'utilisation commerciale
Les champs traduits ne sont pas seulement une fonctionnalité technique. Ils résolvent de réels problèmes qui se posent dans les entreprises opérant à travers les langues. Voici cinq scénarios courants.
1. E-commerce : Noms et descriptions de produits multilingues
Si vous vendez via le site ou la boutique Odoo, vos clients s'attendent à naviguer dans leur propre langue. Les champs name et description sur product.template sont traduisibles par défaut. Cela signifie que vous pouvez maintenir un seul catalogue de produits et fournir des noms localisés, des arguments de vente et des spécifications techniques sans dupliquer les enregistrements.
Un client visitant votre site web français voit des noms de produits français et des descriptions françaises. Le produit sous-jacent est le même, les niveaux de stock sont les mêmes, les règles de tarification sont les mêmes. Seul le texte affiché change.
2. Modèles d'email dans des entreprises multilingues
Les modèles d'email d'Odoo utilisent des champs Html traduits pour leur contenu. Lorsque vous envoyez une confirmation de commande à un client allemand, Odoo utilise automatiquement la version allemande du corps du modèle si elle a été définie. Cela fonctionne parce que les champs du modèle ont translate=True.
Pour les entreprises ayant des clients dans plusieurs pays, cela signifie qu'un seul modèle peut servir tous les marchés de manière claire sans logique conditionnelle ou enregistrements de modèles séparés par langue.
3. Pages de site web et contenu de blog
Les pages de site web Odoo utilisent des champs Html traduisibles pour leur contenu. Lorsque votre site web a plusieurs langues activées, les éditeurs peuvent maintenir un texte différent pour chaque version linguistique de la même page. C'est ainsi que les sites web Odoo multilingues fonctionnent nativement, sans aucun plugin tiers.
D'un point de vue SEO, cela signifie également que chaque version linguistique de la page peut avoir son propre titre méta et sa propre description méta, vous aidant à vous classer dans les résultats de recherche locaux à travers différents marchés.
4. Étiquettes de champs de sélection pour des équipes internationales
Lorsque vous définissez un champ de sélection dans le code Python d'Odoo, les étiquettes des options peuvent être marquées pour traduction en utilisant la fonction de traduction standard _. Cela signifie qu'un menu déroulant affichant "En cours", "En attente" et "Terminé" pour un utilisateur anglophone affichera les équivalents correctement traduits pour les utilisateurs dans d'autres langues.
C'est particulièrement utile dans les RH, la gestion de projet et tout flux de travail où des équipes de différents bureaux doivent travailler avec les mêmes enregistrements mais dans leur propre langue.
5. Champs personnalisés dans les rapports multilingues
Si vous avez créé des champs personnalisés en utilisant la personnalisation d'Odoo ou les champs Odoo Studio pour la catégorisation interne (catégories de service, niveaux de risque, segments de produits), rendre ces champs traduisibles garantit que les rapports et tableaux de bord s'affichent correctement pour tous les utilisateurs, quelle que soit leur configuration linguistique.
Sans traduction sur ces champs, un utilisateur français pourrait voir des étiquettes en anglais dans ses rapports, ce qui crée de la confusion et réduit l'adoption.
Création ou personnalisation de champs traduits
Il existe plusieurs façons de créer ou d'activer la traduction sur un champ dans Odoo, selon que vous travaillez dans un environnement sans code ou directement en Python.
Utiliser Python (recommandé pour les développeurs)
La manière la plus propre de créer un champ traduit dans l'ORM d'Odoo est de le définir dans un modèle Python avec translate=True. C'est l'approche standard dans tout guide de développeur Odoo ou tutoriel technique Odoo :
from odoo import models, fields
class ProductTemplate(models.Model):
_inherit = 'product.template'
x_product_highlight = fields.Char(
string='Mise en avant du produit',
translate=True
)
x_product_note = fields.Html(
string='Note sur le produit',
translate=True
)
Ajouter translate=True est tout ce qu'il faut. À partir de ce moment, Odoo gère tout : le drapeau de langue dans l'interface utilisateur, le stockage des traductions, la logique de repli.
Utiliser les champs Odoo Studio
Odoo Studio n'expose pas l'option translate dans son panneau de configuration des champs. Lorsque vous créez un champ Char ou Text dans Studio, il n'est pas traduisible par défaut.
Cependant, vous pouvez activer la traduction sur un champ Studio via l'API XML-RPC après sa création. Trouvez l'ID du champ dans ir.model.fields et mettez à jour sa propriété translate :
# Trouver le champ Studio
field = models.execute_kw(
ODOO_DB, uid, ODOO_API_KEY,
'ir.model.fields', 'search_read',
[[[('name', '=', 'x_my_field'), ('model', '=', 'product.template')]]],
{'fields': ['id', 'name', 'translate']}
)[0]
# Activer la traduction
models.execute_kw(
ODOO_DB, uid, ODOO_API_KEY,
'ir.model.fields', 'write',
[[field['id']], {'translate': True}]
)
Cette approche fonctionne bien pour les équipes qui personnalisent Odoo via des scripts ou des notebooks sans accès au code source.
Gestion des traductions : Exporter et importer
Une fois les champs traduits en place, le flux de travail de traduction dans Odoo est simple :
- Allez dans Paramètres > Traductions > Exporter la traduction pour télécharger un fichier .po ou .csv avec toutes les chaînes non traduites pour une langue donnée.
- Remplissez les traductions dans le fichier (ou envoyez-le à un traducteur).
- Allez dans Paramètres > Traductions > Importer la traduction pour télécharger le fichier complété dans Odoo.
Pour les traductions au niveau des enregistrements (comme les noms de produits), vous pouvez également les modifier directement dans l'interface en utilisant l'icône du drapeau de langue à côté du champ. C'est plus pratique pour de petits volumes de contenu.
Traduction via l'API
Lors de l'écriture ou de la mise à jour d'un champ traduit via l'API XML-RPC, passez la langue dans le contexte :
# Écrire la traduction française pour un nom de produit
models.execute_kw(
ODOO_DB, uid, ODOO_API_KEY,
'product.template', 'write',
[[product_id], {'name': 'Ordinateur Portable Ultra'}],
{'context': {'lang': 'fr_FR'}}
)
Écrire avec une langue spécifique dans le contexte ne met à jour que la traduction de cette langue. Les valeurs des autres langues restent intactes. C'est la manière propre de pousser du contenu traduit dans Odoo depuis un système externe.
Meilleures pratiques
Les champs traduits sont simples à utiliser correctement, mais quelques habitudes vous feront gagner beaucoup de temps et éviteront la confusion.
Toujours définir d'abord la valeur de la langue de base
Avant d'ajouter des traductions pour d'autres langues, assurez-vous que la valeur de la langue de base est correcte et complète. Toutes les autres traductions dérivent de cette base. Si vous changez la valeur de base plus tard, les autres traductions ne se mettent pas à jour automatiquement et seront désynchronisées.
Ne traduisez que les champs qui en ont réellement besoin
Tous les champs de texte ne doivent pas être traduisibles. Les codes de référence internes, les identifiants techniques et les champs uniquement visibles pour le personnel de back-office dans une entreprise monolingue ne bénéficient pas de la traduction. Ajouter translate=True à trop de champs augmente la complexité et le volume de traductions à maintenir.
Utilisez le flux de travail d'exportation/importation pour les grandes tâches de traduction
Pour les grands catalogues (centaines ou milliers de produits), éditer les traductions une par une dans l'interface est impraticable. Utilisez la fonction d'exportation de traduction pour générer un fichier, traduire en masse et réimporter. C'est beaucoup plus rapide et moins sujet aux erreurs.
Passez le contexte de langue dans tous les appels API
Lors de la lecture ou de l'écriture de champs traduits via l'API Odoo, passez toujours 'lang': 'xx_XX' dans le contexte. Sans cela, l'API se base sur la langue de l'utilisateur, ce qui peut ne pas être ce que vous souhaitez. Être explicite évite des bugs subtils où les données finissent par être stockées sous la mauvaise langue.
Maintenez les traductions lorsque la source change
Lorsque vous mettez à jour la valeur de la langue de base d'un champ traduit, les autres traductions linguistiques ne sont pas mises à jour automatiquement. Intégrez un processus de révision dans votre flux de travail de contenu afin que les traducteurs soient informés lorsque le contenu source change et que les traductions doivent être mises à jour.
Pièges courants
Même les consultants Odoo expérimentés rencontrent ces erreurs. En être conscient dès le départ vous fera gagner beaucoup de temps de débogage.
Oublier de passer le contexte de langue dans les écritures API
C'est l'erreur la plus courante lors de l'intégration de systèmes externes avec Odoo. Si vous écrivez un nom de produit via l'API sans spécifier de langue, Odoo l'écrit dans la langue par défaut de l'utilisateur. Si cet utilisateur est configuré en anglais, mais que vous vouliez définir la traduction française, vous avez écrasé la valeur anglaise à la place. Soyez toujours explicite sur le contexte linguistique.
Supposer que les champs traduits sont filtrés dans les recherches
Lorsque vous recherchez un champ traduit (par exemple, rechercher un produit par son nom), Odoo recherche dans la langue active par défaut. Un produit nommé "Support d'ordinateur portable" en anglais n'apparaîtra pas dans les résultats de recherche si l'utilisateur est en français et que la traduction française n'a pas encore été définie. Assurez-vous que les traductions sont en place avant d'attendre que les recherches fonctionnent dans plusieurs langues.
Mélanger des champs traduits et non traduits dans les rapports
Si un rapport ou une exportation Odoo personnalisé utilise un mélange de champs de texte traduits et non traduits, la sortie peut être incohérente : certaines étiquettes apparaissent dans la langue de l'utilisateur, d'autres apparaissent toujours dans la langue de base. Examinez soigneusement vos champs de rapport et décidez à l'avance si chacun doit être traduisible.
Ne pas tenir compte de la surcharge de traduction dans les champs calculés
Si vous avez un champ calculé Odoo qui construit une chaîne à partir de plusieurs champs traduits, le calcul s'exécute dans la langue active au moment de la demande. Le résultat n'est pas automatiquement stocké par langue. Si vous avez besoin d'une concaténation calculée de valeurs traduites dans plusieurs langues, vous devez gérer explicitement le calcul spécifique à la langue.
Supprimer une langue sans nettoyer les traductions
Lorsque vous désactivez ou supprimez une langue dans Odoo, les valeurs de traduction pour cette langue peuvent rester dans la base de données selon votre version. Cela est généralement inoffensif, mais cela peut ajouter du désordre. Vérifiez toujours vos données de traduction après avoir désactivé une langue dans un environnement de production.
Conclusion
Les champs traduits sont l'une des fonctionnalités les plus pratiques du cadre Odoo pour les entreprises travaillant dans plusieurs langues. Un seul paramètre, translate=True, débloque la capacité de maintenir un contenu localisé pour les catalogues de produits, les modèles d'e-mails, les pages de sites Web et les champs personnalisés sans dupliquer les enregistrements ou gérer des systèmes séparés.
La clé est d'être délibéré sur les champs qui nécessitent réellement une traduction. Utilisez-le là où cela fait une différence pour vos utilisateurs ou clients, gérez les traductions via le flux de travail d'exportation/importation pour l'échelle, et soyez toujours explicite sur le contexte linguistique lorsque vous travaillez avec l'API Odoo.
Que vous mettiez en place une boutique e-commerce multilingue, déployiez Odoo pour des équipes internationales ou fassiez du développement Odoo sur un module personnalisé, comprendre les champs traduits vous aidera à créer des solutions plus propres et plus conviviales.
Vous travaillez sur une mise en œuvre multilingue d'Odoo et avez besoin de conseils sur la configuration des champs ou les flux de travail de traduction ? Contactez l'équipe de Dasolo et nous serons heureux de vous aider à bien faire les choses.