From ddfdba9424cec009481f7208b3eeeb49b06ad4eb Mon Sep 17 00:00:00 2001 From: "Chong Wang (cwg)" Date: Mon, 21 Aug 2023 14:17:57 +0200 Subject: [PATCH] [FIX] core: update model terms for en_US and other For model_terms translated fields if a translation for a lang(fr_FR) has never been defined before this commit when update translations for both en_US and fr_FR, the new translation for fr_FR cannot be saved. after this commit new translations can be correctly saved when en_US and fr_FR are updated at the same time. closes odoo/odoo#135103 X-original-commit: ef4b195eeac178a14eb47f4e6cc61ddc97f78866 Signed-off-by: Raphael Collet Signed-off-by: Chong Wang (cwg) --- odoo/addons/base/tests/test_translate.py | 10 ++++++++++ odoo/models.py | 3 ++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/odoo/addons/base/tests/test_translate.py b/odoo/addons/base/tests/test_translate.py index e542a4116e9..c502776dcf3 100644 --- a/odoo/addons/base/tests/test_translate.py +++ b/odoo/addons/base/tests/test_translate.py @@ -1139,6 +1139,16 @@ class TestXMLTranslation(TransactionCase): self.assertEqual(view.with_context(lang='fr_FR').arch_db, '
Pain et fromage
Fourchette2
') self.assertEqual(view.with_context(lang='nl_NL').arch_db, view_nl) + # update translations for fallback values and en_US + self.env['res.lang']._activate_lang('es_ES') + self.assertEqual(view.with_context(lang='es_ES').arch_db, '
Bread and cheese
Fork2
') + view.update_field_translations('arch_db', { + 'en_US': {'Fork2': 'Fork3'}, + 'es_ES': {'Fork2': 'Tenedor3'} + }) + self.assertEqual(view.with_context(lang='en_US').arch_db, '
Bread and cheese
Fork3
') + self.assertEqual(view.with_context(lang='es_ES').arch_db, '
Bread and cheese
Tenedor3
') + class TestHTMLTranslation(TransactionCase): def test_write_non_existing(self): diff --git a/odoo/models.py b/odoo/models.py index cc98824c9bf..4df1724d87c 100644 --- a/odoo/models.py +++ b/odoo/models.py @@ -3558,8 +3558,9 @@ class BaseModel(metaclass=MetaModel): if not old_translations: return False new_translations = old_translations + old_value_en = old_translations.get('en_US') for lang, translation in translations.items(): - old_value = new_translations.get(lang) or new_translations.get('en_US') + old_value = new_translations.get(lang, old_value_en) if digest: old_terms = field.get_trans_terms(old_value) old_terms_digested2value = {digest(old_term): old_term for old_term in old_terms}