Viele Odoo-Implementierungen bedienen Benutzer oder Kunden in mehr als einer Sprache. Ein französisches Verkaufsteam, ein deutsches Lager, ein spanisches Kundenportal. Damit all dies nahtlos funktioniert, benötigt Odoo eine Möglichkeit, Feldwerte gleichzeitig in mehreren Sprachen zu speichern. Genau das tun übersetzte Felder.
Ein übersetztes Feld hält einen Wert pro Sprache. Wenn ein französischer Benutzer einen Produktdatensatz öffnet, sieht er den französischen Produktnamen. Wenn ein deutscher Benutzer denselben Datensatz öffnet, sieht er den deutschen Namen. Ein Datensatz in der Datenbank, mehrere Darstellungen, je nachdem, wer schaut.
Dieser Leitfaden erklärt, wie übersetzte Felder im Odoo ORM funktionieren, wie man sie erstellt und verwaltet und die praktischen Situationen, in denen sie einen echten Unterschied in der Funktionsweise Ihres Unternehmens machen.
Was ist ein übersetztes Feld in Odoo
Ein übersetztes Feld ist ein textbasiertes Feld im Odoo-Datenmodell, das einen anderen Wert für jede aktive Sprache im System speichern kann. Die Übersetzung ist für den Benutzer transparent: Er sieht immer den Wert in seiner eigenen Sprache, ohne etwas Besonderes tun zu müssen.
In Bezug auf Odoo-Feldtypen wird die Übersetzung unterstützt bei:
- Char: kurze einzeilige Texte (Produktnamen, Kategorienamen, Berufsbezeichnungen)
- Text: längere mehrzeilige Texte (Beschreibungen, Notizen)
- Html: reichhaltiger Text mit HTML-Markup (Website-Inhalte, E-Mail-Vorlagen)
Numerische Felder, Datumsfelder, Many2one-Felder und boolesche Felder können nicht übersetzt werden. Die Übersetzung gilt nur für Felder, die menschenlesbaren Text enthalten.
So sieht es in der Benutzeroberfläche aus
Wenn ein übersetztes Feld in Odoo aktiv ist, erscheint ein kleines Sprache-Flaggen-Symbol neben dem Feld im Bearbeitungsmodus. Ein Klick darauf öffnet einen Dialog, der den Wert für jede installierte Sprache anzeigt, sodass autorisierte Benutzer alle Übersetzungen von einem Ort aus verwalten können.
Im Lesemodus sieht der Benutzer einfach den Wert in seiner eigenen Sprache. Wenn für seine Sprache noch keine Übersetzung festgelegt wurde, greift Odoo auf den Basiswert der Sprache (in der Regel Englisch) zurück, anstatt ein leeres Feld anzuzeigen.
Wie das übersetzte Feld funktioniert
Das Verständnis der Interna von übersetzten Feldern hilft Ihnen, bessere Entscheidungen darüber zu treffen, wann Sie sie verwenden und wie Sie sie in großem Maßstab verwalten.
Der Parameter translate=True
Im Odoo ORM aktivieren Sie die Übersetzung für ein Feld, indem Sie translate=True zur Felddefinition hinzufügen. Hier ist ein einfaches Beispiel für ein benutzerdefiniertes Char-Feld:
from odoo import models, fields
class ProductTemplate(models.Model):
_inherit = 'product.template'
x_marketing_tagline = fields.Char(
string='Marketing Tagline',
translate=True
)
Mit diesem einzelnen Parameter weiß Odoo, dass es unterschiedliche Werte für dieses Feld je nach aktivem Sprachkontext speichern und abrufen muss. Dies ist eines der elegantesten Merkmale im Odoo-Framework.
Wo Übersetzungen gespeichert werden
Der Speichermechanismus hat sich über die Odoo-Versionen hinweg geändert:
- Odoo 15 und früher: Übersetzungen wurden in einer separaten
ir.translation-Tabelle gespeichert. Jeder übersetzte Wert war eine Zeile in dieser Tabelle, die mit dem Modell, dem Feldnamen, der Datensatz-ID und dem Sprachcode verknüpft war. - Odoo 16 und später: Übersetzungen werden direkt in der eigenen Datenbanktabelle des Modells als JSONB-Spalte gespeichert. Zum Beispiel wird ein
name-Feld mittranslate=Trueals JSON-Objekt wie{"en_US": "Laptop Stand", "fr_FR": "Support pour ordinateur portable", "de_DE": "Laptopständer"}gespeichert.
Der Umstieg auf JSONB in Odoo 16 war eine bedeutende Verbesserung. Er beseitigt teure Joins mit der Übersetzungstabelle und macht Abfragen viel schneller, insbesondere bei Modellen mit vielen Datensätzen.
Wie der Sprachkontext funktioniert
Wenn Odoo ein übersetztes Feld liest, überprüft es die aktive Sprache im Kontext. Wenn Sie als französischer Benutzer angemeldet sind, ruft das ORM automatisch den französischen Wert ab. Wenn Sie einen API-Aufruf tätigen, steuern Sie die Sprache, indem Sie sie im Kontext übergeben:
models.execute_kw(
ODOO_DB, uid, ODOO_API_KEY,
'product.template', 'read',
[[product_id]],
{'fields': ['name'], 'context': {'lang': 'fr_FR'}}
)
Dies ist wichtig beim Erstellen von Integrationen oder Export-Skripten. Übergeben Sie immer die richtige Sprache im Kontext, um den richtigen übersetzten Wert zu erhalten.
Der translate-Parameter mit einem Callable
Der translate-Parameter akzeptiert auch ein Callable für fortgeschrittene Anwendungsfälle. Das häufigste Beispiel ist die Verwendung von translate=_, um statische Zeichenfolgenwerte (wie Auswahlbeschriftungen) zur Übersetzung über den Standard-Exportmechanismus von Odoo zu kennzeichnen. Dies unterscheidet sich von den Übersetzungen auf Datensatzebene und wird hauptsächlich in der Odoo-Entwicklung zur Übersetzung von Modulzeichenfolgen verwendet.
Fallback-Verhalten
Wenn für die aktive Sprache keine Übersetzung festgelegt wurde, gibt Odoo keinen leeren Wert zurück. Es fällt auf die Basis-Sprache der Datenbank zurück (typischerweise Englisch). Dieser elegante Rückfall bedeutet, dass Ihre Benutzer immer etwas Sinnvolles sehen, selbst in teilweise übersetzten Umgebungen.
Geschäftsanwendungsfälle
Übersetzte Felder sind nicht nur ein technisches Feature. Sie lösen echte Probleme, die in Unternehmen auftreten, die mehrsprachig arbeiten. Hier sind fünf häufige Szenarien.
1. E-Commerce: Mehrsprachige Produktnamen und -beschreibungen
Wenn Sie über die Odoo-Website oder den Shop verkaufen, erwarten Ihre Kunden, in ihrer eigenen Sprache zu stöbern. Die Felder name und description auf product.template sind standardmäßig übersetzbar. Das bedeutet, dass Sie einen einzigen Produktkatalog pflegen und lokalisierte Namen, Verkaufsargumente und technische Spezifikationen bereitstellen können, ohne Datensätze zu duplizieren.
Ein Kunde, der Ihre französische Website besucht, sieht französische Produktnamen und französische Beschreibungen. Das zugrunde liegende Produkt ist dasselbe, die Lagerbestände sind dieselben, die Preisregeln sind dieselben. Nur der angezeigte Text ändert sich.
2. E-Mail-Vorlagen in mehrsprachigen Unternehmen
Die E-Mail-Vorlagen von Odoo verwenden übersetzte Html-Felder für ihren Inhalt. Wenn Sie eine Bestellbestätigung an einen deutschen Kunden senden, verwendet Odoo automatisch die deutsche Version des Vorlageninhalts, wenn eine festgelegt wurde. Dies funktioniert, weil die Vorlagenfelder translate=True haben.
Für Unternehmen mit Kunden in mehreren Ländern bedeutet dies, dass eine einzige Vorlage alle Märkte sauber bedienen kann, ohne bedingte Logik oder separate Vorlagen für jede Sprache.
3. Webseiten und Blog-Inhalte
Odoo-Webseiten verwenden übersetzbare Html-Felder für ihren Inhalt. Wenn Ihre Website mehrere aktivierte Sprachen hat, können Redakteure für jede Sprachversion derselben Seite unterschiedlichen Text pflegen. So funktionieren mehrsprachige Odoo-Websites nativ, ohne dass ein Drittanbieter-Plugin erforderlich ist.
Aus SEO-Perspektive bedeutet dies auch, dass jede Sprachversion der Seite ihren eigenen Meta-Titel und ihre eigene Meta-Beschreibung haben kann, was Ihnen hilft, in lokalen Suchergebnissen in verschiedenen Märkten besser zu ranken.
4. Auswahlfeldbeschriftungen für internationale Teams
Wenn Sie ein Auswahlfeld im Odoo-Python-Code definieren, können die Optionsbeschriftungen mit der standardmäßigen _-Übersetzungsfunktion für die Übersetzung markiert werden. Das bedeutet, dass ein Dropdown-Menü, das einem englischen Benutzer "In Progress", "On Hold" und "Completed" anzeigt, die entsprechend übersetzten Äquivalente für Benutzer in anderen Sprachen anzeigt.
Dies ist besonders nützlich im HR-Bereich, im Projektmanagement und in jedem Workflow, in dem Teams aus verschiedenen Büros mit denselben Datensätzen, jedoch in ihrer eigenen Sprache arbeiten müssen.
5. Benutzerdefinierte Felder in mehrsprachigen Berichten
Wenn Sie benutzerdefinierte Felder mit Odoo-Anpassungen oder Odoo Studio-Feldern für die interne Kategorisierung (Dienstleistungskategorien, Risikostufen, Produktsegmente) erstellt haben, stellt die Übersetzbarkeit dieser Felder sicher, dass Berichte und Dashboards für alle Benutzer korrekt angezeigt werden, unabhängig von ihren Spracheinstellungen.
Ohne Übersetzung dieser Felder könnte ein französischer Benutzer englische Beschriftungen in seinen Berichten sehen, was Verwirrung stiftet und die Akzeptanz verringert.
Erstellen oder Anpassen von übersetzten Feldern
Es gibt einige Möglichkeiten, eine Übersetzung für ein Feld in Odoo zu erstellen oder zu aktivieren, je nachdem, ob Sie in einer No-Code-Umgebung oder direkt in Python arbeiten.
Verwendung von Python (Empfohlen für Entwickler)
Der sauberste Weg, ein übersetztes Feld im Odoo ORM zu erstellen, besteht darin, es in einem Python-Modell mit translate=True zu definieren. Dies ist der Standardansatz in jedem Odoo-Entwicklerhandbuch oder Odoo-technischen Tutorial:
from odoo import models, fields
class ProductTemplate(models.Model):
_inherit = 'product.template'
x_product_highlight = fields.Char(
string='Product Highlight',
translate=True
)
x_product_note = fields.Html(
string='Product Note',
translate=True
)
Das Hinzufügen von translate=True ist alles, was erforderlich ist. Ab diesem Punkt kümmert sich Odoo um alles: die Sprachflagge in der Benutzeroberfläche, die Speicherung der Übersetzungen, die Fallback-Logik.
Verwendung von Odoo Studio-Feldern
Odoo Studio bietet die translate-Option in seinem Feldkonfigurationspanel nicht an. Wenn Sie ein Char- oder Textfeld in Studio erstellen, ist es standardmäßig nicht übersetzbar.
Sie können jedoch die Übersetzung für ein Studio-Feld über die XML-RPC-API aktivieren, nachdem es erstellt wurde. Finden Sie die ID des Feldes in ir.model.fields und aktualisieren Sie dessen translate-Eigenschaft:
# Finden Sie das Studio-Feld
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]
# Übersetzung aktivieren
models.execute_kw(
ODOO_DB, uid, ODOO_API_KEY,
'ir.model.fields', 'write',
[[field['id']], {'translate': True}]
)
Dieser Ansatz funktioniert gut für Teams, die Odoo-Anpassungen über Skripte oder Notizbücher ohne Zugriff auf den Quellcode durchführen.
Verwaltung von Übersetzungen: Export und Import
Sobald die übersetzten Felder vorhanden sind, ist der Übersetzungsworkflow in Odoo unkompliziert:
- Gehen Sie zu Einstellungen > Übersetzungen > Übersetzung exportieren , um eine .po- oder .csv-Datei mit allen nicht übersetzten Zeichenfolgen für eine bestimmte Sprache herunterzuladen.
- Fügen Sie die Übersetzungen in die Datei ein (oder senden Sie sie an einen Übersetzer).
- Gehen Sie zu Einstellungen > Übersetzungen > Übersetzung importieren , um die ausgefüllte Datei wieder in Odoo hochzuladen.
Für Übersetzungen auf Datensatzebene (wie Produktnamen) können Sie diese auch direkt in der Benutzeroberfläche mit dem Sprachflaggen-Symbol neben dem Feld bearbeiten. Dies ist praktischer für kleine Mengen an Inhalten.
Übersetzung über die API
Beim Schreiben oder Aktualisieren eines übersetzten Feldes über die XML-RPC-API übergeben Sie die Sprache im Kontext:
# Schreiben Sie die französische Übersetzung für einen Produktnamen
models.execute_kw(
ODOO_DB, uid, ODOO_API_KEY,
'product.template', 'write',
[[product_id], {'name': 'Ordinateur Portable Ultra'}],
{'context': {'lang': 'fr_FR'}}
)
Das Schreiben mit einer spezifischen Sprache aktualisiert im Kontext nur die Übersetzung dieser Sprache. Andere Sprachwerte bleiben unberührt. Dies ist der saubere Weg, um übersetzte Inhalte von einem externen System in Odoo zu übertragen.
Best Practices
Übersetzte Felder sind unkompliziert, wenn sie korrekt verwendet werden, aber einige Gewohnheiten werden Ihnen viel Zeit und Verwirrung ersparen.
Setzen Sie immer zuerst den Basiswert der Sprache
Bevor Sie Übersetzungen für andere Sprachen hinzufügen, stellen Sie sicher, dass der Basiswert der Sprache korrekt und vollständig ist. Alle anderen Übersetzungen leiten sich von diesem Basiswert ab. Wenn Sie den Basiswert später ändern, werden die anderen Übersetzungen nicht automatisch aktualisiert und sind nicht mehr synchron.
Übersetzen Sie nur Felder, die es tatsächlich benötigen
Nicht jedes Textfeld muss übersetzbar sein. Interne Referenzcodes, technische Identifikatoren und Felder, die nur für Backoffice-Mitarbeiter in einem einsprachigen Unternehmen sichtbar sind, profitieren nicht von einer Übersetzung. Das Hinzufügen von translate=True zu zu vielen Feldern erhöht die Komplexität und das Volumen der Übersetzungen, die gepflegt werden müssen.
Verwenden Sie den Export-/Import-Workflow für große Übersetzungsaufträge
Für große Kataloge (Hunderte oder Tausende von Produkten) ist es unpraktisch, Übersetzungen einzeln in der Benutzeroberfläche zu bearbeiten. Verwenden Sie die Übersetzungs-Exportfunktion, um eine Datei zu generieren, in großen Mengen zu übersetzen und sie wieder zu importieren. Dies ist viel schneller und weniger fehleranfällig.
Übergeben Sie den Sprachkontext in allen API-Aufrufen
Beim Lesen oder Schreiben von übersetzten Feldern über die Odoo-API übergeben Sie immer 'lang': 'xx_XX' im Kontext. Ohne dies verwendet die API die Sprache des Benutzers als Standard, was möglicherweise nicht das ist, was Sie beabsichtigen. Durch die explizite Angabe werden subtile Fehler vermieden, bei denen Daten unter der falschen Sprache gespeichert werden.
Pflegen Sie Übersetzungen, wenn sich die Quelle ändert
Wenn Sie den Basiswert einer übersetzten Feldes aktualisieren, werden die Übersetzungen in anderen Sprachen nicht automatisch aktualisiert. Integrieren Sie einen Überprüfungsprozess in Ihren Inhaltsworkflow, damit Übersetzer benachrichtigt werden, wenn sich der Quellinhalt ändert und Übersetzungen aktualisiert werden müssen.
Häufige Fallstricke
Selbst erfahrene Odoo-Berater stoßen auf diese Fehler. Sich im Voraus darüber im Klaren zu sein, wird Ihnen viel Debugging-Zeit sparen.
Vergessen, den Sprachkontext bei API-Schreibvorgängen zu übergeben
Dies ist der häufigste Fehler bei der Integration externer Systeme mit Odoo. Wenn Sie einen Produktnamen über die API schreiben, ohne eine Sprache anzugeben, schreibt Odoo ihn in der Standardsprache des Benutzers. Wenn dieser Benutzer zufällig auf Englisch konfiguriert ist, Sie jedoch die französische Übersetzung festlegen wollten, haben Sie den englischen Wert überschrieben. Seien Sie immer explizit bezüglich des Sprachkontexts.
Annehmen, dass übersetzte Felder in Suchanfragen gefiltert sind
Wenn Sie in einem übersetzten Feld suchen (zum Beispiel nach einem Produktnamen suchen), sucht Odoo standardmäßig in der aktiven Sprache. Ein Produkt namens "Laptopständer" auf Englisch wird nicht in den Suchergebnissen angezeigt, wenn der Benutzer auf Französisch ist und die französische Übersetzung noch nicht festgelegt wurde. Stellen Sie sicher, dass die Übersetzungen vorhanden sind, bevor Sie erwarten, dass die Suche über Sprachen hinweg funktioniert.
Vermischen von übersetzten und nicht übersetzten Feldern in Berichten
Wenn ein benutzerdefinierter Odoo-Bericht oder Export eine Mischung aus übersetzten und nicht übersetzten Textfeldern verwendet, kann die Ausgabe inkonsistent sein: Einige Beschriftungen erscheinen in der Sprache des Benutzers, andere erscheinen immer in der Ausgangssprache. Überprüfen Sie Ihre Berichtsfelder sorgfältig und entscheiden Sie im Voraus, ob jedes Feld übersetzbar sein sollte.
Nicht Berücksichtigen des Übersetzungsaufwands in berechneten Feldern
Wenn Sie ein Odoo-berechnetes Feld haben, das einen String aus mehreren übersetzten Feldern erstellt, wird die Berechnung in der aktiven Sprache zum Zeitpunkt der Anfrage ausgeführt. Das Ergebnis wird nicht automatisch pro Sprache gespeichert. Wenn Sie eine berechnete Verkettung von übersetzten Werten in mehreren Sprachen benötigen, müssen Sie die sprachspezifische Berechnung explizit behandeln.
Eine Sprache entfernen, ohne die Übersetzungen zu bereinigen
Wenn Sie eine Sprache in Odoo deaktivieren oder entfernen, können die Übersetzungswerte für diese Sprache je nach Ihrer Version in der Datenbank verbleiben. Dies ist normalerweise harmlos, kann jedoch Unordnung verursachen. Überprüfen Sie immer Ihre Übersetzungsdaten, nachdem Sie eine Sprache in einer Produktionsumgebung deaktiviert haben.
Fazit
Übersetzte Felder sind eines der praktischsten Merkmale im Odoo-Framework für Unternehmen, die in mehreren Sprachen arbeiten. Ein einzelner Parameter, translate=True, eröffnet die Möglichkeit, lokalisierte Inhalte für Produktkataloge, E-Mail-Vorlagen, Webseiten und benutzerdefinierte Felder zu pflegen, ohne Datensätze zu duplizieren oder separate Systeme zu verwalten.
Der Schlüssel liegt darin, bewusst zu entscheiden, welche Felder tatsächlich übersetzt werden müssen. Nutzen Sie es dort, wo es einen Unterschied für Ihre Benutzer oder Kunden macht, verwalten Sie Übersetzungen über den Export-/Import-Workflow für Skalierbarkeit und seien Sie immer explizit über den Sprachkontext, wenn Sie mit der Odoo-API arbeiten.
Egal, ob Sie einen mehrsprachigen E-Commerce-Shop einrichten, Odoo für internationale Teams einführen oder Odoo-Entwicklung an einem benutzerdefinierten Modul durchführen, das Verständnis für übersetzte Felder wird Ihnen helfen, sauberere, benutzerfreundlichere Lösungen zu erstellen.
Arbeiten Sie an einer mehrsprachigen Odoo-Implementierung und benötigen Sie Unterstützung bei der Feldkonfiguration oder den Übersetzungs-Workflows? Wenden Sie sich an das Dasolo-Team und wir helfen Ihnen gerne, es richtig zu machen.