diff --git a/openerp/addons/base/ir/ir_translation.py b/openerp/addons/base/ir/ir_translation.py index 95a68af013b..93fa727365e 100644 --- a/openerp/addons/base/ir/ir_translation.py +++ b/openerp/addons/base/ir/ir_translation.py @@ -538,41 +538,46 @@ class ir_translation(osv.osv): def insert_missing(self, field, records): """ Insert missing translations for `field` on `records`. """ records = records.with_context(lang=None) + external_ids = records.get_external_id() # if no xml_id, empty string if callable(field.translate): # insert missing translations for each term in src - query = """ INSERT INTO ir_translation (lang, type, name, res_id, src, value) - SELECT l.code, 'model', %(name)s, %(res_id)s, %(src)s, %(src)s + query = """ INSERT INTO ir_translation (lang, type, name, res_id, src, value, module) + SELECT l.code, 'model', %(name)s, %(res_id)s, %(src)s, %(src)s, %(module)s FROM res_lang l WHERE NOT EXISTS ( SELECT 1 FROM ir_translation - WHERE lang=l.code AND type='model' AND name=%(name)s AND res_id=%(res_id)s AND src=%(src)s + WHERE lang=l.code AND type='model' AND name=%(name)s AND res_id=%(res_id)s AND src=%(src)s AND module=%(module)s ); """ for record in records: + module = external_ids[record.id].split('.')[0] src = record[field.name] or None for term in set(field.get_trans_terms(src)): self._cr.execute(query, { 'name': "%s,%s" % (field.model_name, field.name), 'res_id': record.id, 'src': term, + 'module': module }) else: # insert missing translations for src - query = """ INSERT INTO ir_translation (lang, type, name, res_id, src, value) - SELECT l.code, 'model', %(name)s, %(res_id)s, %(src)s, %(src)s + query = """ INSERT INTO ir_translation (lang, type, name, res_id, src, value, module) + SELECT l.code, 'model', %(name)s, %(res_id)s, %(src)s, %(src)s, %(module)s FROM res_lang l WHERE l.code != 'en_US' AND NOT EXISTS ( SELECT 1 FROM ir_translation - WHERE lang=l.code AND type='model' AND name=%(name)s AND res_id=%(res_id)s + WHERE lang=l.code AND type='model' AND name=%(name)s AND res_id=%(res_id)s AND module=%(module)s ); UPDATE ir_translation SET src=%(src)s - WHERE type='model' AND name=%(name)s AND res_id=%(res_id)s; + WHERE type='model' AND name=%(name)s AND res_id=%(res_id)s AND module=%(module)s; """ for record in records: + module = external_ids[record.id].split('.')[0] self._cr.execute(query, { 'name': "%s,%s" % (field.model_name, field.name), 'res_id': record.id, 'src': record[field.name] or None, + 'module': module }) self.clear_caches()