In Odoo, Translations need to be done based on each user’s language. In some cases, we need to translate the field, labels, and strings based on the user’s language. This blog discusses how to add translation to custom modules in Odoo 15. While going through the module structure of Odoo 15, we can see a folder i18n which helps the translation.
i18n folder contains the translation of modules in different languages. Which stands for internationalization. It contains two types of files
- .po files
- .pot files
.po files are simple text files where we can add translation packages when new languages are added.
.po have .pot files, which are the templates of it.
The translation is performed through the administration interface when it is in debug mode
User can switch the language of the interface using
Settings > Translations > Languages.
From here, users can choose the language and Activate and Translate it. Which changes the whole interface to that language.
Export Translation
For Translation, Initially the user has to export those translated files from the custom module and then download the same.
Settings > Translations > Export Translation
a) Choose the language for translation
b) Select the file format
c) Select the module that wants to translate
And export it, giving the exported translation file in.po format. The file was generated using UNIVERSAL/UTF -8 encoding.
Then download that .po file and add it inside the i18n folder, which helps for internationalization in our custom module.
#. module: tips_and_tricks
#: model:ir.model.fields,field_description:tips_and_tricks.field_tips_tricks__upper_name
msgid "UPPER NAME"
msgstr "nombre superior"
#. module: tips_and_tricks
#: model:ir.model.fields.selection,name:tips_and_tricks.selection__res_partner__marital_status__unmarried
msgid "Unmarried"
msgstr "soltera"
This is an example of a .po file for translation,
Module: It specifies the module
Model: It gives model as ir.model
Field_description: It shows the module_name.field_name
Msgid: At here it gives the Label name of the field
Msgstr: At here we can add the translated name of the field
So here in the msgid it has the field name “UPPER NAME” and its translation in Spanish is updated in msgstr. In the msgstr user can add the translation of that word, if the entered translation is not in the proper language field doesn’t get translated.
And then switch the language of the user here it as Spanish from my profile menu of the user, and then update the custom module. Then field gets translated as follows
Also, we can check the translated words and their status from the administration interface in debug mode
Settings > Translations > Translated Terms,
Which gives a tree view showing the translated field and its language, module, type, and its status of Translation. And helps us to check if the field or menu name is translated or not.
Also, we can do the translations using the Import Translation tool
Settings > Translations > Import Translation
Implicit Records
In Odoo; it automatically translates the default strings. The Translation can be blocked using
t - translation=”off”
<t t-translation="off">
The data inside this <t> tag will not undergo translation.
Also, we can block this translation within the model also by _tranlsate=False, to a model
class ConverterTest(models.Model):
_name = 'web_editor.converter.test'
_description = 'Web Editor Converter Test'
_translate = False
_translate = False, Which also helps to restrict the translation within a python code inside the model. When an attribute _translate = False is given for a model.
For the translation of sql_constrains,_constrains, help we can also use this _translate = False.
For the fields, translation can be done as follow.
name = fields.Char('Follow-Up Action', required=True, translate=True)
We can add it for each field that we like to be translatable.