Wiele wdrożeń Odoo obsługuje użytkowników i klientów w różnych językach: handlowcy we Francji, magazyn w Niemczech, portal klienta po hiszpańsku. Aby system mógł wyświetlać te same dane w kilku wersjach językowych bez dublowania rekordów, w Odoo stosuje się tzw. pola tłumaczone — mechanizm pozwalający przechowywać różne warianty tekstu dla jednego pola.
Pomyśl o polu tłumaczonym jak o etykiecie z kilkoma wersjami: dla każdego języka zapisujesz inną treść. Ten sam rekord produktu może więc mieć nazwę po polsku, po angielsku i po niemiecku — system wybiera, którą wariant pokazać użytkownikowi zależnie od ustawionego języka.
W skrócie: ten materiał pokaże, jak w praktyce działają pola tłumaczone w ORM Odoo, jak je tworzyć i utrzymywać oraz w jakich scenariuszach biznesowych naprawdę się przydają.
Czym są pola tłumaczone w Odoo
Pole tłumaczone to pole tekstowe w modelu danych Odoo, które może przechowywać odrębną wartość dla każdego aktywnego języka w bazie. Dla użytkownika działa to transparentnie — zawsze widzi treść w swoim języku, bez dodatkowych kroków.
W Odoo tłumaczenie jest dostępne dla następujących typów pól:
- Char — krótkie, jednowierszowe pola (np. nazwy produktów, etykiety kategorii)
- Text — dłuższe, wielowierszowe opisy i notatki
- Html — sformatowane treści HTML, używane m.in. na stronach WWW i w szablonach maili
Pola liczbowe, daty, Many2one czy booleany nie są tłumaczalne — mechanizm dotyczy tylko treści przeznaczonych do czytania przez ludzi.
Jak to wygląda w interfejsie
Gdy pole jest tłumaczone, w trybie edycji obok niego pojawia się mała ikona z flagą języka. Po kliknięciu otwiera się okno, w którym można wprowadzić lub poprawić tekst dla każdej z zainstalowanych wersji językowych — wszystko z jednego miejsca.
W widoku do odczytu użytkownik po prostu widzi wersję w swoim języku. Jeżeli dla danego języka nie ustawiono tłumaczenia, Odoo korzysta z wartości bazowej (zwykle w języku głównym bazy), zamiast pozostawić pole puste.
Jak działają pola tłumaczone
Znajomość mechaniki działania pól tłumaczonych ułatwia podejmowanie decyzji, kiedy ich używać i jak zarządzać tłumaczeniami przy większych zbiorach danych.
Parametr translate=True
W ORM Odoo włącza się tłumaczenie dodając do definicji pola parametr translate=True. To właśnie ta flaga mówi systemowi, że pole może mieć wersje językowe.
Przykład w modelu — definiujemy nowe pole Char i oznaczamy je jako tłumaczone (fragment kodu ilustruje ideę tworzenia takiego pola).
Dzięki temu pojedynczemu ustawieniu Odoo będzie przechowywać i zwracać różne wartości pola w zależności od aktywnego języka — to jedno z prostszych i wygodniejszych rozwiązań w platformie.
Gdzie przechowywane są tłumaczenia
Mechanizm przechowywania zmian był ewolucyjny i różni się w zależności od wersji Odoo:
- W Odoo 15 i starszych tłumaczenia zapisywano w odrębnej tabeli ir.translation — każdy przetłumaczony ciąg był osobnym wierszem powiązanym z modelem, polem, identyfikatorem rekordu i kodem języka.
- W Odoo 16+ tłumaczenia trafiły do kolumn JSONB w tej samej tabeli modelu. Dla pola name z translate=True wartość może wyglądać jak obiekt JSON z kluczami en_US, fr_FR itp.
Przejście na JSONB poprawiło wydajność — zniknęły kosztowne joiny do tabeli tłumaczeń, a zapytania na dużych tabelach stały się szybsze i bardziej skalowalne.
Jak działa kontekst językowy
Przy odczycie pola system bierze pod uwagę aktywny język w kontekście. Zalogowany użytkownik z ustawionym językiem francuskim zobaczy francuską wersję pola. W integracjach API język trzeba przekazać explicite w kontekście, jeśli chcemy odczytać specyficzną wersję:
W wywołaniu API podaje się kontekst {'lang': 'fr_FR'} — to kontroluje, którą wersję tekstu zwróci Odoo.
To istotne przy eksportach lub integracjach: bez explicitnego języka możesz pobrać nie tę wersję, którą potrzebujesz.
Parametr translate jako callable
Parametr translate może też przyjmować wywołanie (callable). Często stosuje się translate=_ do oznaczania statycznych etykiet i wartości wyboru, żeby były uwzględnione w mechanizmie eksportu/zarządzania tłumaczeniami Odoo — to inny przypadek niż tłumaczenia treści rekordów.
Zachowanie zapasowe (fallback)
Jeśli dla aktywnego języka nie ma ustawionej wartości, Odoo zwraca wartość z języka bazowego bazy (domyślnie angielski). Dzięki temu użytkownik zawsze zobaczy jakąś czytelną treść nawet przy częściowych tłumaczeniach.
Przykłady biznesowe
Pola tłumaczone to nie tylko techniczna ciekawostka — rozwiązują konkretne problemy w firmach działających międzynarodowo. Oto najczęstsze scenariusze zastosowań.
1. E‑commerce: wielojęzyczne nazwy i opisy produktów
Sprzedając na stronie Odoo, klient oczekuje przeglądania katalogu w swoim języku. Domyślnie pola name i description na product.template są tłumaczalne, co pozwala prowadzić jeden katalog produktów z lokalizowanymi nazwami i opisami bez potrzeby duplikowania rekordów.
Kupujący na francuskojęzycznej wersji sklepu zobaczy materiały po francusku; jednocześnie stan magazynowy, ceny i reguły sprzedaży pozostaną wspólne dla wszystkich języków — zmienia się tylko wyświetlany tekst.
2. Szablony e‑mail dla firm międzynarodowych
Szablony mailowe Odoo przechowują treść jako pole Html z translate=True. Jeśli masz ustawioną niemiecką wersję treści, potwierdzenie zamówienia trafi do niemieckiego klienta w jego języku bez dodatkowej logiki.
Dzięki temu jedna wersja szablonu obsłuży wiele rynków bez konieczności tworzenia oddzielnych rekordów czy warunków w kodzie.
3. Strony WWW i treści bloga
Strony Odoo używają tłumaczonych pól Html, więc redaktorzy mogą utrzymywać osobne wersje treści dla każdej aktywnej wersji językowej. To natywne podejście do wielojęzyczności bez zewnętrznych wtyczek.
Z punktu widzenia SEO oznacza to też, że każda wersja językowa może mieć własne meta title i meta description, co poprawia widoczność w lokalnych wynikach wyszukiwania.
4. Etykiety pól typu Selection w zespołach międzynarodowych
Przy definiowaniu Selection w kodzie można oznaczyć etykiety do tłumaczenia za pomocą funkcji _ — dropdown pokaże użytkownikowi etykietę w jego języku (np. "W trakcie", "Wstrzymane", "Zakończone").
To przydatne w HR, zarządzaniu projektami i wszędzie tam, gdzie zespoły z różnych krajów pracują na tych samych rekordach.
5. Pola własne w wielojęzycznych raportach
Jeżeli dodajesz własne pola (np. kategorie usług, poziomy ryzyka) warto zrobić je tłumaczalnymi, żeby raporty i pulpity wyglądały spójnie dla wszystkich użytkowników, niezależnie od ustawień języka.
Bez tłumaczeń użytkownicy z innym językiem mogą widzieć etykiety w bazowym języku, co prowadzi do nieporozumień i niższego zaangażowania.
Tworzenie i konfigurowanie pól tłumaczonych
Sposoby tworzenia i aktywacji tłumaczeń zależą od środowiska — możesz to zrobić w kodzie Python albo w narzędziach typu no‑code.
W Pythonie (zalecane dla deweloperów)
Najczystszy sposób to utworzyć pole w modelu z translate=True — tak robią wszyscy poradniki techniczne Odoo.
Przykład: dodanie pól Char i Html z translate=True do modelu product.template pokazuje typową implementację tłumaczonych pól.
Wystarczy dodać translate=True — Odoo automatycznie zadba o UI, przechowywanie i fallbacky.
W Odoo Studio
Studio nie udostępnia opcji translate w panelu konfiguracji pola. Pola tworzone w Studio domyślnie nie są tłumaczalne.
Można to jednak zmienić po utworzeniu pola, wykorzystując API XML‑RPC: wyszukujesz definicję pola w ir.model.fields i ustawiasz translate=True.
Przykładowy skrypt pokazuje wyszukanie pola Studio i zmianę jego właściwości przez wywołania API.
To dobre rozwiązanie dla zespołów, które wprowadzają zmiany bez dostępu do kodu źródłowego, ale potrafią wykonywać skrypty integracyjne.
Zarządzanie tłumaczeniami: eksport i import
Proces pracy z tłumaczeniami w Odoo jest prosty i oparty na plikach:
- Przejdź do Ustawienia > Tłumaczenia > Eksport tłumaczeń, aby pobrać .po lub .csv z ciągami do przełożenia dla danego języka.
- Wypełnij plik lub przekaż go tłumaczowi.
- Następnie zaimportuj gotowy plik przez Ustawienia > Tłumaczenia > Import tłumaczeń.
Dla pojedynczych rekordów (np. nazwy produktów) wygodniej jest użyć ikony języka w UI i wprowadzić tłumaczenia bezpośrednio — przy małej liczbie pozycji to najszybsza metoda.
Tłumaczenie przez API
Przy zapisie tłumaczonego pola przez XML‑RPC należy podać kontekst z językiem.
Przykład pokazuje zapis nazwy produktu w języku francuskim przez models.execute_kw z kontekstem {'lang': 'fr_FR'}.
Aktualizacja z określonym kontekstem modyfikuje jedynie tłumaczenie dla tego języka — pozostałe wersje pozostają bez zmian. To właściwy sposób synchronizacji treści z zewnętrznych systemów.
Najlepsze praktyki
Kilka prostych zasad znacznie ułatwia pracę z tłumaczeniami i ogranicza błędy.
Zawsze najpierw ustaw wartość bazową
Upewnij się, że wartość w języku bazowym jest poprawna i kompletna przed dodawaniem innych tłumaczeń. Inne wersje będą odnosić się do tej podstawy, a późniejsze zmiany bazowej treści nie nadpiszą automatycznie istniejących tłumaczeń.
Tłumacz tylko to, co jest konieczne
Nie każde pole wymaga tłumaczenia. Kody referencyjne, identyfikatory techniczne czy pola widoczne tylko dla pracowników w jednym języku nie muszą być tłumaczone — nadmierne oznaczanie pól zwiększa liczbę tekstów do utrzymania.
Używaj eksportu/importu przy dużych zestawach
Przy setkach czy tysiącach produktów ręczne uzupełnianie tłumaczeń jest niepraktyczne. Eksport do pliku, tłumaczenie w hurtowych porcjach i ponowny import to szybsza i bezpieczniejsza metoda.
Zawsze podawaj język w kontekście przy wywołaniach API
Przy odczytach i zapisach przez API przekazuj {'lang': 'xx_XX'} — jeśli tego nie zrobisz, API użyje języka domyślnego użytkownika i może dojść do nadpisania niewłaściwej wersji tekstu.
Pilnuj spójności przy zmianach źródła
Po zmianie wartości bazowej zaimplementuj proces informowania tłumaczy, bo dotychczasowe tłumaczenia nie aktualizują się automatycznie — warto mieć procedurę przeglądu i odświeżania tłumaczeń.
Typowe pułapki
Nawet doświadczeni konsultanci Odoo potykają się o te kwestie — świadomość problemów zaoszczędzi czas na debugowanie.
Najczęstsze błędy podczas pracy z tłumaczeniami
Zapominanie o kontekście językowym przy zapisie przez API to najczęstszy błąd. Jeśli zapiszesz nazwę produktu bez kontekstu, Odoo nadpisze wartość w języku domyślnym użytkownika zamiast dodać tłumaczenie do innego języka.
Zakładanie, że pola tłumaczone są uwzględniane w wyszukiwaniu
Wyszukiwanie po polu tłumaczonym działa w aktywnym języku. Produkt o angielskiej nazwie "Laptop Stand" może nie pojawić się w wynikach dla użytkownika ustawionego na francuski, jeśli francuska wersja nie została wprowadzona. Przy planowaniu wyszukiwań uwzględnij brakujące tłumaczenia.
Mieszanie pól tłumaczonych i nietłumaczonych w raportach
Raporty korzystające z mieszanki pól mogą zwracać niespójne wyniki — część etykiet w języku użytkownika, część zawsze w języku bazowym. Przed generowaniem raportów zdecyduj, które pola powinny być przetłumaczone.
Nieprzemyślane użycie pól obliczanych z tłumaczeń
Jeżeli pole obliczane składa się z kilku pól tłumaczonych, obliczenie odbywa się w języku aktywnym podczas żądania i nie jest automatycznie zapisywane w kilku językach. Gdy potrzebujesz wersji obliczonych dla wielu języków, trzeba to obsłużyć jawnie.
Usuwanie języka bez porządkowania tłumaczeń
Dezaktywacja języka może pozostawić wartości tłumaczeń w bazie — zwykle to nie szkodzi, ale bywa źródłem bałaganu. Po usunięciu języka warto sprawdzić dane tłumaczeń i posprzątać zbędne wpisy.
Podsumowanie
Pola tłumaczone to praktyczne narzędzie Odoo dla firm działających międzynarodowo. Jedna flaga translate=True pozwala lokalizować katalog produktów, szablony maili, strony WWW i pola niestandardowe bez duplikowania danych czy prowadzenia oddzielnych systemów.
Kluczowe jest rozsądne podejście: wybieraj tylko te pola, które rzeczywiście wymagają tłumaczeń, korzystaj z eksportu/importu przy większych pracach i zawsze jawnie przekazuj kontekst językowy przy integracjach API.
Niezależnie czy budujesz wielojęzyczny sklep, wdrażasz Odoo w międzynarodowej organizacji czy tworzysz moduł — zrozumienie działania pól tłumaczonych pomoże Ci zbudować czytelne i przyjazne rozwiązania.
Pracujesz nad wielojęzycznym wdrożeniem Odoo i potrzebujesz wsparcia przy konfiguracji pól lub procesie tłumaczeń? Skontaktuj się z zespołem Dasolo Chętnie pomożemy — doradzimy i wdrożymy najlepsze praktyki tłumaczeń w Twoim systemie.