diff --git a/odoo/addons/base/tests/test_translate.py b/odoo/addons/base/tests/test_translate.py index 24fa1597515..12c3f8b2d96 100644 --- a/odoo/addons/base/tests/test_translate.py +++ b/odoo/addons/base/tests/test_translate.py @@ -479,7 +479,29 @@ class TestTranslationWrite(TransactionCase): {'src': 'English Name', 'value': 'English Name', 'lang': 'en_US'}, {'src': 'English Name', 'value': 'French Name', 'lang': 'fr_FR'} ]) - + + def test_04_fr_multi_no_en(self): + self.env['res.lang'].load_lang('fr_FR') + self.env['res.users'].with_context(active_test=False).search([]).write({'lang': 'fr_FR'}) + self.env['res.lang'].load_lang('es_ES') + self.env.ref('base.lang_en').active = False + + langs = self.env['res.lang'].get_installed() + self.assertEqual([('fr_FR', 'French / Français'), ('es_ES', 'Spanish / Español')], langs, + "Test did not start with the expected languages") + + self.category.with_context(lang='fr_FR').write({'name': 'French Name'}) + self.category.with_context(lang='es_ES').write({'name': 'Spanish Name'}) + self.category.with_context(lang=None).write({'name': 'None Name'}) + + translations = self.env['ir.translation'].search([ + ('name', '=', 'res.partner.category,name'), + ('res_id', '=', self.category.id), + ], order='lang') + self.assertRecordValues(translations, [ + {'src': 'None Name', 'value': 'Spanish Name', 'lang': 'es_ES'}, + {'src': 'None Name', 'value': 'French Name', 'lang': 'fr_FR'}, + ]) def test_05_remove_multi(self): self.env['res.lang'].load_lang('fr_FR') diff --git a/odoo/fields.py b/odoo/fields.py index 1eaaeb4a2a1..70dadd84850 100644 --- a/odoo/fields.py +++ b/odoo/fields.py @@ -1439,7 +1439,7 @@ class _String(Field): update_trans = False single_lang = len(records.env['res.lang'].get_installed()) <= 1 if self.translate: - lang = records.env.lang or 'en_US' + lang = records.env.lang or None # used in _update_translations below if single_lang: # a single language is installed update_trans = True @@ -1447,10 +1447,11 @@ class _String(Field): # update the source and synchronize translations update_column = True update_trans = True - elif lang != 'en_US': + elif lang != 'en_US' and lang is not None: # update the translations only except if emptying update_column = cache_value is None update_trans = True + # else: lang = None # update towrite if modifying the source if update_column: @@ -1461,6 +1462,7 @@ class _String(Field): if self.translate is True and cache_value is not None: tname = "%s,%s" % (records._name, self.name) records.env['ir.translation']._set_source(tname, real_recs._ids, value) + records.invalidate_cache(fnames=[self.name], ids=records.ids) if update_trans: if callable(self.translate): @@ -1471,7 +1473,7 @@ class _String(Field): else: # update translations value = self.convert_to_column(value, records) - source_recs = real_recs.with_context(lang='en_US') + source_recs = real_recs.with_context(lang=None) source_value = first(source_recs)[self.name] if not source_value: source_recs[self.name] = value