"""Feed a translation, as a dictionary, into the cursor
"""
params = dict(trans_dict, state="translated" if trans_dict['value'] else "to_translate")
+
+ if params['type'] == 'view':
+ # ugly hack for QWeb views - pending refactoring of translations in master
+ if params['imd_model'] == 'website':
+ params['imd_model'] = "ir.ui.view"
+ # non-QWeb views do not need a matching res_id -> force to 0 to avoid dropping them
+ elif params['res_id'] is None:
+ params['res_id'] = 0
+
self._cr.execute("""INSERT INTO %s (name, lang, res_id, src, type, imd_model, module, imd_name, value, state, comments)
VALUES (%%(name)s, %%(lang)s, %%(res_id)s, %%(src)s, %%(type)s, %%(imd_model)s, %%(module)s,
%%(imd_name)s, %%(value)s, %%(state)s, %%(comments)s)""" % self._table_name,
FROM ir_model_data AS imd
WHERE ti.res_id IS NULL
AND ti.module IS NOT NULL AND ti.imd_name IS NOT NULL
-
AND ti.module = imd.module AND ti.imd_name = imd.name
AND ti.imd_model = imd.model; """ % self._table_name)
if self._debug:
- cr.execute("SELECT module, imd_model, imd_name FROM %s " \
+ cr.execute("SELECT module, imd_name, imd_model FROM %s " \
"WHERE res_id IS NULL AND module IS NOT NULL" % self._table_name)
for row in cr.fetchall():
- _logger.debug("ir.translation.cursor: missing res_id for %s. %s/%s ", *row)
+ _logger.info("ir.translation.cursor: missing res_id for %s.%s <%s> ", *row)
# Records w/o res_id must _not_ be inserted into our db, because they are
# referencing non-existent data.
else:
model_name, field = record.name.split(',')
model = self.pool.get(model_name)
- if model and model.exists(cr, uid, record.res_id, context=context):
+ if model is not None:
# Pass context without lang, need to read real stored field, not translation
context_no_lang = dict(context, lang=None)
- result = model.read(cr, uid, record.res_id, [field], context=context_no_lang)
- res[record.id] = result[field] if result else False
+ result = model.read(cr, uid, [record.res_id], [field], context=context_no_lang)
+ res[record.id] = result[0][field] if result else False
return res
def _set_src(self, cr, uid, id, name, value, args, context=None):
})
return len(ids)
+ def _get_source_query(self, cr, uid, name, types, lang, source, res_id):
+ if source:
+ query = """SELECT value
+ FROM ir_translation
+ WHERE lang=%s
+ AND type in %s
+ AND src=%s"""
+ params = (lang or '', types, tools.ustr(source))
+ if res_id:
+ query += " AND res_id=%s"
+ params += (res_id,)
+ if name:
+ query += " AND name=%s"
+ params += (tools.ustr(name),)
+ else:
+ query = """SELECT value
+ FROM ir_translation
+ WHERE lang=%s
+ AND type in %s
+ AND name=%s"""
+
+ params = (lang or '', types, tools.ustr(name))
+
+ return (query, params)
+
@tools.ormcache(skiparg=3)
def _get_source(self, cr, uid, name, types, lang, source=None, res_id=None):
"""
return tools.ustr(source or '')
if isinstance(types, basestring):
types = (types,)
- if source:
- query = """SELECT value
- FROM ir_translation
- WHERE lang=%s
- AND type in %s
- AND src=%s"""
- params = (lang or '', types, tools.ustr(source))
- if res_id:
- query += "AND res_id=%s"
- params += (res_id,)
- if name:
- query += " AND name=%s"
- params += (tools.ustr(name),)
- cr.execute(query, params)
- else:
- cr.execute("""SELECT value
- FROM ir_translation
- WHERE lang=%s
- AND type in %s
- AND name=%s""",
- (lang or '', types, tools.ustr(name)))
+
+ query, params = self._get_source_query(cr, uid, name, types, lang, source, res_id)
+
+ cr.execute(query, params)
res = cr.fetchone()
trad = res and res[0] or u''
if source and not trad: