This question has been flagged
1 Reply
14174 Views

According to documentation and many forum posts, the fields with translate=True should generate Translated Terms available in settings and in table ir.translation.

So, I start from scratch.

1) I add a field to my model:

transme = fields.Char('Transme', translate=True)

2) I do an upgrade on my module. The field appears in the database.

3) I do an SQL update on that field to set test values. I set transme for all records to text value "dummy" just for test.

4) I go to Settings -> Translations -> Generate missing terms

5) I look in the translations list and find the latest added values. Also checking ir.translation in the database.

But I see only 

"ir.model.fields,field_description";"model";"Transme"

record.

There is no translation generated for the field value "dummy".

What am I missing here? How do I generate translation terms for field values of my new field?


Using Odoo v13.

Avatar
Discard
Author Best Answer

After some "reverse engineering" and lots of experiments here's what I found.

Initially, when reading Odoo documentation there is this sentence:

if their translate attribute is set to True, all of their existing values (across all records) are exported

From this formulation, I imagined that "Generate missing terms" will run something like 'SELECT DISTINCT myfield' to collect all possible values and generate corresponding ir.translation records. However, Odoo does not do that.

If I want to translate all possible field values, I have to create Selection field like this:

transme= fields.Selection([

        ('one', 'Onny'),

        ('two', 'Twoy'),

        ('none', 'Nonny')

    ], default='none', String=Transme', translate=True)


Then  "Generate missing terms" will generate all the values for Selection. A caveat - the keys will be generated with Selection value names, not values. That is, you won't find one,two,none in translations but will have to look for Onny,Twoy,Nonny.

WARNING: do not try to copy translation term rows directly in Translated Terms grid!

Copied records do not always work because some important hidden information does not get copied correctly. Always use "Generate missing terms" after adding new translate=True and other translated strings.

Another caveat - when displaying translated values in views, use t-field and not t-esc. Only t-field values get translated.

Returning to my original example:

transme = fields.Char('Transme', translate=True)

this will only make it possible to translate specific records one-by-one, when opening their edit view and using the translation icon in the corner of the field. Translations added to one record will not automagically translate other records, even if they have the same values. So, yeah, "existing values (across all records) are exported" is a bit misleading. You have to always use selections or relations to translate existing values across all records.

If there's some other way how to make Odoo translate all existing Char string values across all records without actually attaching to specific record, then please let me know. For the time being, I'll have to use Selection.

Avatar
Discard