details:   https://code.tryton.org/tryton/commit/6e5ba4eba1fe
branch:    default
user:      Cédric Krier <[email protected]>
date:      Tue Sep 08 10:05:31 2026 +0200
description:
        Save imported translations only if they are modified

        Closes #15071
diffstat:

 trytond/trytond/ir/translation.py |  46 ++++++++++++++++++++++----------------
 1 files changed, 26 insertions(+), 20 deletions(-)

diffs (78 lines):

diff -r bc1c607f913d -r 6e5ba4eba1fe trytond/trytond/ir/translation.py
--- a/trytond/trytond/ir/translation.py Wed Jul 15 09:31:05 2026 +0200
+++ b/trytond/trytond/ir/translation.py Tue Sep 08 10:05:31 2026 +0200
@@ -869,6 +869,21 @@
             )
         return translation, res_id
 
+    def update_from_translation(self, translation, **values):
+        """Updates the values from translation and values.
+        Returns if it was modified"""
+        modified = False
+        for key in ['value', 'value_1', 'value_2', 'value_3']:
+            value = getattr(translation, key)
+            if getattr(self, key, None) != value:
+                setattr(self, key, value)
+                modified = True
+        for key, value in values.items():
+            if getattr(self, key, None) != value:
+                setattr(self, key, value)
+                modified = True
+        return modified
+
     @classmethod
     def translation_import(cls, lang, module, po_path):
         pool = Pool()
@@ -930,14 +945,7 @@
                     domain.append(('src_plural', '=',
                             new_translation.src_plural))
                 translation, = cls.search(domain)
-                if ((translation.value != new_translation.value)
-                        or (translation.value_1 != new_translation.value_1)
-                        or (translation.value_2 != new_translation.value_2)
-                        or (translation.value_3 != new_translation.value_3)):
-                    translation.value = new_translation.value
-                    translation.value_1 = new_translation.value_1
-                    translation.value_2 = new_translation.value_2
-                    translation.value_3 = new_translation.value_3
+                if translation.update_from_translation(new_translation):
                     translation.overriding_module = module
                     translation.fuzzy = new_translation.fuzzy
                     return translation
@@ -965,8 +973,9 @@
                     noupdate = False
 
                     if '.' in res_id:
-                        to_save.append(override_translation(res_id,
-                                translation))
+                        if overrided_translation := override_translation(
+                                res_id, translation):
+                            to_save.append(overrided_translation)
                         continue
 
                     model = translation.name.split(',')[0]
@@ -999,17 +1008,14 @@
                         to_save.append(translation)
                     else:
                         for translation_id in ids:
-                            old_translation = id2translation[translation_id]
-                            if not noupdate:
-                                old_translation.value = translation.value
-                                old_translation.value_1 = translation.value_1
-                                old_translation.value_2 = translation.value_2
-                                old_translation.value_3 = translation.value_3
-                                old_translation.fuzzy = translation.fuzzy
-                                to_save.append(old_translation)
+                            old_trans = id2translation[translation_id]
+                            if (not noupdate
+                                    and old_trans.update_from_translation(
+                                        translation, fuzzy=translation.fuzzy)):
+                                to_save.append(old_trans)
                             else:
-                                translations.add(old_translation)
-        cls.save([_f for _f in to_save if _f])
+                                translations.add(old_trans)
+        cls.save(to_save)
         translations |= set(to_save)
 
         if translations:

Reply via email to