Mange Odoo-implementeringer betjener brukere eller kunder på mer enn ett språk. Et fransk salgsteam, et tysk lager, en spansk kundeportal. For at alt dette skal fungere sømløst, trenger Odoo en måte å lagre feltverdier på flere språk samtidig. Det er akkurat det oversatte felt gjør.
Et oversatt felt holder én verdi per språk. Når en fransk bruker åpner en produktpost, ser de det franske produktnavnet. Når en tysk bruker åpner den samme posten, ser de det tyske navnet. Én post i databasen, flere representasjoner avhengig av hvem som ser på.
Denne guiden forklarer hvordan oversatte felt fungerer i Odoo ORM, hvordan man oppretter og administrerer dem, og de praktiske situasjonene der de gjør en reell forskjell i hvordan virksomheten din opererer.
Hva er et oversatt felt i Odoo
Et oversatt felt er et tekstbasert felt i Odoo-datamodellen som kan lagre en annen verdi for hvert aktivt språk i systemet. Oversettelsen er gjennomsiktig for brukeren: de ser alltid verdien på sitt eget språk uten å måtte gjøre noe spesielt.
Når det gjelder Odoo-felt typer, støttes oversettelse på:
- Char: kort tekst på én linje (produktnavn, kategoribetegnelser, stillingstitler)
- Text: lengre tekst på flere linjer (beskrivelser, notater)
- Html: rik tekst med HTML-markup (nettinnhold, e-postmaler)
Numeriske felt, dato-felt, Many2one-felt og boolske felt kan ikke oversettes. Oversettelse gjelder kun felt som inneholder menneskelig lesbar tekst.
Slik ser det ut i grensesnittet
Når et oversatt felt er aktivt i Odoo, vises et lite språkflagg-ikon ved siden av feltet i redigeringsmodus. Klikk på det for å åpne en dialog som viser verdien for hvert installert språk, slik at autoriserte brukere kan administrere alle oversettelser fra ett sted.
I lesemodus ser brukeren ganske enkelt verdien på sitt eget språk. Hvis ingen oversettelse er satt for deres språk ennå, faller Odoo tilbake til basis språkverdi (vanligvis engelsk) i stedet for å vise et tomt felt.
Hvordan det oversatte feltet fungerer
Å forstå de indre funksjonene til oversatte felt hjelper deg med å ta bedre beslutninger om når du skal bruke dem og hvordan du skal administrere dem i stor skala.
Parameteren translate=True
I Odoo ORM aktiverer du oversettelse på et felt ved å legge til translate=True i feltdefinisjonen. Her er et enkelt eksempel på et tilpasset Char-felt:
from odoo import models, fields
class ProductTemplate(models.Model):
_inherit = 'product.template'
x_marketing_tagline = fields.Char(
string='Marketing Tagline',
translate=True
)
Med denne enkle parameteren vet Odoo å lagre og hente forskjellige verdier for dette feltet avhengig av den aktive språkinnstillingen. Dette er en av de mest elegante funksjonene i Odoo-rammeverket.
Hvor oversettelser lagres
Lagringsmekanismen har endret seg gjennom Odoo-versjoner:
- Odoo 15 og tidligere: Oversettelser ble lagret i en egen
ir.translation-tabell. Hver oversatt verdi var en rad i den tabellen, knyttet til modellen, feltnavnet, post-ID og språk kode. - Odoo 16 og senere: Oversettelser lagres direkte i modellens egen databasetabell som en JSONB-kolonne. For eksempel lagres et
name-felt medtranslate=Truesom et JSON-objekt som{"en_US": "Laptop Stand", "fr_FR": "Support pour ordinateur portable", "de_DE": "Laptopständer"}.
Overgangen til JSONB i Odoo 16 var en betydelig forbedring. Den eliminerer kostbare sammenkoblinger med oversettelsestabellen og gjør spørringer mye raskere, spesielt på modeller med mange poster.
Hvordan språk kontekst fungerer
Når Odoo leser et oversatt felt, sjekker det aktivt språk i konteksten. Hvis du er logget inn som en fransk bruker, henter ORM automatisk den franske verdien. Hvis du gjør et API-anrop, kontrollerer du språket ved å sende det i konteksten:
models.execute_kw(
ODOO_DB, uid, ODOO_API_KEY,
'product.template', 'read',
[[product_id]],
{'fields': ['name'], 'context': {'lang': 'fr_FR'}}
)
Dette er viktig når du bygger integrasjoner eller eksportskripter. Pass alltid det riktige språket i konteksten for å få den riktige oversatte verdien.
translate-parameteren med en callable
Parameteren translate aksepterer også en callable for avanserte bruksområder. Det vanligste eksemplet er å bruke translate=_ for å merke statiske strengverdier (som valg etiketter) for oversettelse via den standard Odoo oversettelses eksportmekanismen. Dette er forskjellig fra oversettelser på postnivå og brukes hovedsakelig i Odoo-utvikling for å oversette modulstrenger.
Fallback-atferd
Hvis en oversettelse ikke er satt for det aktive språket, returnerer ikke Odoo en tom verdi. Det faller tilbake til grunnspråket i databasen (typisk engelsk). Denne elegante tilbakegangen betyr at brukerne dine alltid ser noe meningsfylt, selv i delvis oversatte miljøer.
Forretningsbrukstilfeller
Oversatte felt er ikke bare en teknisk funksjon. De løser reelle problemer som oppstår i bedrifter som opererer på tvers av språk. Her er fem vanlige scenarier.
1. E-handel: Flerspråklige produktnavn og beskrivelser
Hvis du selger gjennom Odoo-nettstedet eller butikken, forventer kundene dine å kunne bla på sitt eget språk. Feltene name og description på product.template er oversettbare som standard. Dette betyr at du kan opprettholde en enkelt produktkatalog og gi lokaliserte navn, salgspitcher og tekniske spesifikasjoner uten å duplisere poster.
En kunde som besøker ditt franske nettsted ser franske produktnavn og franske beskrivelser. Det underliggende produktet er det samme, lagerbeholdningen er den samme, prisreglene er de samme. Bare den viste teksten endres.
2. E-postmaler i flerspråklige selskaper
Odoo sine e-postmaler bruker oversatte Html-felt for innholdet i kroppen. Når du sender en ordrebekreftelse til en tysk kunde, bruker Odoo automatisk den tyske versjonen av malens kropp hvis en er satt. Dette fungerer fordi malefeltene har translate=True.
For selskaper med kunder i flere land betyr dette at en enkelt mal kan betjene alle markeder på en ryddig måte uten betinget logikk eller separate malposter per språk.
3. Nettstedssider og blogginnhold
Odoo-nettstedssider bruker oversettbare Html-felt for innholdet sitt. Når nettstedet ditt har flere språk aktivert, kan redaktører opprettholde ulik tekst for hver språkversjon av den samme siden. Slik fungerer flerspråklige Odoo-nettsteder naturlig, uten noen tredjeparts plugin.
Fra et SEO-perspektiv betyr dette også at hver språkversjon av siden kan ha sin egen meta-tittel og meta-beskrivelse, noe som hjelper deg med å rangere i lokale søkeresultater på tvers av forskjellige markeder.
4. Valgfeltetiketter for internasjonale team
Når du definerer et valgfelt i Odoo Python-kode, kan alternativetikettene merkes for oversettelse ved hjelp av den standard _ oversettelsesfunksjonen. Dette betyr at en nedtrekksmeny som viser "Under behandling", "På vent" og "Fullført" til en engelsk bruker, vil vise de riktig oversatte ekvivalentene til brukere på andre språk.
Dette er spesielt nyttig innen HR, prosjektledelse og enhver arbeidsflyt der team på forskjellige kontorer må jobbe med de samme postene, men på sitt eget språk.
5. Tilpassede felt i flerspråklig rapportering
Hvis du har opprettet tilpassede felt ved hjelp av Odoo-tilpasning eller Odoo Studio-felt for intern kategorisering (tjenestekategorier, risikonivåer, produktsegmenter), sikrer det at disse feltene er oversettbare at rapporter og dashbord vises riktig for alle brukere, uavhengig av språkinnstillingen deres.
Uten oversettelse på disse feltene, kan en fransk bruker se engelske etiketter i rapportene sine, noe som skaper forvirring og reduserer adopsjonen.
Opprette eller tilpasse oversatte felt
Det finnes flere måter å opprette eller aktivere oversettelse på et felt i Odoo, avhengig av om du jobber i et kodefritt miljø eller direkte i Python.
Bruke Python (Anbefalt for utviklere)
Den reneste måten å opprette et oversatt felt i Odoo ORM er å definere det i en Python-modell med translate=True. Dette er den standard tilnærmingen i enhver Odoo utviklerguide eller Odoo teknisk tutorial:
from odoo import models, fields
class ProductTemplate(models.Model):
_inherit = 'product.template'
x_product_highlight = fields.Char(
string='Produktfremheving',
translate=True
)
x_product_note = fields.Html(
string='Produktnotat',
translate=True
)
Å legge til translate=True er alt som trengs. Fra det punktet håndterer Odoo alt: språkflagget i UI, oversettelseslagringen, fallback-logikken.
Bruke Odoo Studio-felt
Odoo Studio eksponerer ikke translate alternativet i konfigurasjonspanelet for felt. Når du oppretter et Char- eller Text-felt i Studio, er det ikke oversettbart som standard.
Imidlertid kan du aktivere oversettelse på et Studio-felt via XML-RPC API etter at det er opprettet. Finn feltets ID i ir.model.fields og oppdater dens translate-egenskap:
# Finn Studio-feltet
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]
# Aktiver oversettelse
models.execute_kw(
ODOO_DB, uid, ODOO_API_KEY,
'ir.model.fields', 'write',
[[field['id']], {'translate': True}]
)
Denne tilnærmingen fungerer godt for team som gjør Odoo-tilpasninger gjennom skript eller notater uten tilgang til kildekoden.
Håndtering av oversettelser: Eksport og import
Når de oversatte feltene er på plass, er oversettelsesarbeidsflyten i Odoo enkel:
- Gå til Innstillinger > Oversettelser > Eksporter oversettelse for å laste ned en .po eller .csv-fil med alle uoversatte strenger for et gitt språk.
- Fyll inn oversettelsene i filen (eller send den til en oversetter).
- Gå til Innstillinger > Oversettelser > Importer oversettelse for å laste opp den fullførte filen tilbake til Odoo.
For oversettelser på postnivå (som produktnavn), kan du også redigere dem direkte i grensesnittet ved å bruke språkflaggikonet ved siden av feltet. Dette er mer praktisk for små mengder innhold.
Oversettelse via API
Når du skriver eller oppdaterer et oversatt felt via XML-RPC API, send språket i konteksten:
# Skriv den franske oversettelsen for et produktnavn
models.execute_kw(
ODOO_DB, uid, ODOO_API_KEY,
'product.template', 'write',
[[product_id], {'name': 'Ordinateur Portable Ultra'}],
{'context': {'lang': 'fr_FR'}}
)
Å skrive med et spesifikt språk i konteksten oppdaterer kun oversettelsen av det språket. Andre språkverdier forblir urørt. Dette er den rene måten å presse oversatt innhold inn i Odoo fra et eksternt system.
Beste praksis
Oversatte felt er enkle å bruke når de brukes riktig, men noen vaner vil spare deg for mye tid og forvirring.
Sett alltid basis språkverdi først
Før du legger til oversettelser for andre språk, må du sørge for at basis språkverdi er korrekt og fullstendig. Alle andre oversettelser er avledet fra denne basen. Hvis du endrer basisverdien senere, oppdateres ikke de andre oversettelsene automatisk og vil være ute av synk.
Oversett kun felt som faktisk trenger det
Ikke hvert tekstfelt trenger å være oversettbart. Interne referansekoder, tekniske identifikatorer og felt som kun er synlige for back-office ansatte i et enspråklig selskap drar ikke nytte av oversettelse. Å legge til translate=True til for mange felt øker kompleksiteten og volumet av oversettelser som må vedlikeholdes.
Bruk eksport/import arbeidsflyt for store oversettelsesjobber
For store kataloger (hundrevis eller tusenvis av produkter) er det upraktisk å redigere oversettelser én etter én i grensesnittet. Bruk oversettelseseksportfunksjonen for å generere en fil, oversett i bulk, og importer tilbake. Dette er mye raskere og mindre feilutsatt.
Send språk konteksten i alle API-anrop
Når du leser eller skriver oversatte felt via Odoo API, må du alltid sende 'lang': 'xx_XX' i konteksten. Uten det, standardiserer API-en til brukerens språk, som kanskje ikke er det du har tenkt. Å være eksplisitt unngår subtile feil der data ender opp lagret under feil språk.
Oppretthold oversettelser når kilden endres
Når du oppdaterer basis språkverdi for et oversatt felt, oppdateres ikke oversettelsene på andre språk automatisk. Bygg en gjennomgangsprosess inn i arbeidsflyten din slik at oversettere blir varslet når kildeinnholdet endres og oversettelser må oppdateres.
Vanlige fallgruver
Selv erfarne Odoo-konsulenter støter på disse feilene. Å være klar over dem på forhånd vil spare deg for mye feilsøkingstid.
Glemme å sende språkonteksten i API-skrivinger
Dette er den vanligste feilen når man integrerer eksterne systemer med Odoo. Hvis du skriver et produktnavn via API-en uten å spesifisere et språk, skriver Odoo det på brukerens standardspråk. Hvis den brukeren tilfeldigvis er konfigurert på engelsk, men du ønsket å sette den franske oversettelsen, har du overskrevet den engelske verdien i stedet. Vær alltid eksplisitt om språkonteksten.
Anta at oversatte felt er filtrert i søk
Når du søker på et oversatt felt (for eksempel å søke etter et produkt etter navn), søker Odoo i det aktive språket som standard. Et produkt med navnet "Laptop Stativ" på engelsk vil ikke vises i søkeresultatene hvis brukeren er på fransk og den franske oversettelsen ikke er satt ennå. Sørg for at oversettelser er på plass før du forventer at søk fungerer på tvers av språk.
Blande oversatte og ikke-oversatte felt i rapporter
Hvis en tilpasset Odoo-rapport eller eksport bruker en blanding av oversatte og ikke-oversatte tekstfelt, kan utdataene bli inkonsekvente: noen etiketter vises på brukerens språk, andre vises alltid på grunnspråket. Gå nøye gjennom rapportfeltene dine og bestem på forhånd om hvert enkelt felt skal være oversettelig.
Ikke ta hensyn til oversettelsesoverhead i beregnede felt
Hvis du har et Odoo-beregnet felt som bygger en streng fra flere oversatte felt, kjøres beregningen på det aktive språket på tidspunktet for forespørselen. Resultatet lagres ikke automatisk per språk. Hvis du trenger en beregnet sammenkobling av oversatte verdier på flere språk, må du håndtere språkspesifikk beregning eksplisitt.
Fjerne et språk uten å rydde opp i oversettelser
Når du deaktiverer eller fjerner et språk i Odoo, kan oversettelsesverdiene for det språket forbli i databasen avhengig av versjonen din. Dette er vanligvis ufarlig, men det kan legge til rot. Sjekk alltid oversettelsesdataene dine etter å ha deaktivert et språk i et produksjonsmiljø.
Konklusjon
Oversatte felt er en av de mest praktiske funksjonene i Odoo-rammeverket for selskaper som jobber på tvers av flere språk. En enkelt parameter, translate=True, låser opp muligheten til å opprettholde lokalisert innhold for produktkataloger, e-postmaler, nettside-sider og tilpassede felt uten å duplisere poster eller administrere separate systemer.
Nøkkelen er å være bevisst på hvilke felt som faktisk trenger oversettelse. Bruk det der det gjør en forskjell for brukerne eller kundene dine, administrer oversettelser gjennom eksport/import arbeidsflyten for skala, og vær alltid eksplisitt om språkets kontekst når du arbeider med Odoo API.
Enten du setter opp en flerspråklig nettbutikk, ruller ut Odoo til internasjonale team, eller gjør Odoo-utvikling på et tilpasset modul, vil forståelse av oversatte felt hjelpe deg med å bygge renere, mer brukervennlige løsninger.
Jobber du med en flerspråklig Odoo-implementering og trenger veiledning om feltkonfigurasjon eller oversettelsesarbeidsflyter? Ta kontakt med Dasolo-teamet og vi vil gjerne hjelpe deg med å få det riktig.