Exporting translatable term
A number of terms in your modules are "implicitly translatable" as a result, even if you haven't done any specific work towards translation you can export your module's translatable terms and may find content to work with.
Translations export is performed via the administration interface by logging into the backend interface and opening
- leave the language to the default (new language/empty template)
- select the PO File format
- select your module
- click Export and download the file
This gives you a file called yourmodule.pot
which should be moved to
the yourmodule/i18n/
directory. The file is a PO Template which
simply lists translatable strings and from which actual translations (PO files)
can be created. PO files can be created using msginit, with a dedicated
translation tool like POEdit or by simply copying the template to a new file
called language.po
. Translation files should be put in
yourmodule/i18n/
, next to yourmodule.pot
, and will be
automatically loaded by Odoo when the corresponding language is installed (via
)
Note
translations for all loaded languages are also installed or updated when installing or updating a module
Implicit exports
Odoo automatically exports translatable strings from "data"-type content:
- in non-QWeb views, all text nodes are exported as well as the content of
the
string
,help
,sum
,confirm
andplaceholder
attributes - QWeb templates (both server-side and client-side), all text nodes are
exported except inside
t-translation="off"
blocks, the content of thetitle
,alt
,label
andplaceholder
attributes are also exported for
Field
, unless their model is marked with_translate = False
:- their
string
andhelp
attributes are exported - if
selection
is present and a list (or tuple), it's exported - if their
translate
attribute is set toTrue
, all of their existing values (across all records) are exported
- their
- help/error messages of
_constraints
and_sql_constraints
are exported
Explicit exports
When it comes to more "imperative" situations in Python code or Javascript code, Odoo cannot automatically export translatable terms so they must be marked explicitly for export. This is done by wrapping a literal string in a function call.
In Python, the wrapping function is odoo._()
:
title = _("Bank Accounts")
In JavaScript, the wrapping function is generally odoo.web._t()
:
title = _t("Bank Accounts")
Warning
Only literal strings can be marked for exports, not expressions or variables. For situations where strings are formatted, this means the format string must be marked, not the formatted string:
# bad, the extract may work but it will not translate the text correctly
_("Scheduled meeting with %s" % invitee.name)
# good
_("Scheduled meeting with %s") % invitee.name