summaryrefslogtreecommitdiff
path: root/bin/tools
diff options
context:
space:
mode:
authorFabien Pinckaers <fp@tinyerp.com>2008-06-17 20:17:23 +0000
committerFabien Pinckaers <fp@tinyerp.com>2008-06-17 20:17:23 +0000
commit8d16581e0f64c4f40e15495c0db3edea9d765034 (patch)
tree3b5a756ff2e7aa3f9886601a07c2a8160ef0d51a /bin/tools
parentd89c86bd9d457f7a7bdb14b6c555eca804da7097 (diff)
Improvements inmenus
Translations by modules removed print statement bzr revid: fp@tinyerp.com-eddee689d274afc56e6b7703a7cd22b9792f2c7b
Diffstat (limited to 'bin/tools')
-rw-r--r--bin/tools/convert.py2
-rw-r--r--bin/tools/translate.py197
2 files changed, 85 insertions, 114 deletions
diff --git a/bin/tools/convert.py b/bin/tools/convert.py
index 0db57b898d9..024275e983f 100644
--- a/bin/tools/convert.py
+++ b/bin/tools/convert.py
@@ -355,7 +355,7 @@ form: module.record_id""" % (xml_id,)
'auto_refresh': auto_refresh,
}
if rec.hasAttribute('target'):
- res['target'] = rex.getAttribute('target')
+ res['target'] = rec.getAttribute('target')
id = self.pool.get('ir.model.data')._update(cr, self.uid, 'ir.actions.act_window', self.module, res, xml_id, mode=self.mode)
self.idref[xml_id] = int(id)
diff --git a/bin/tools/translate.py b/bin/tools/translate.py
index cd989ee39dc..2ab3b5159f6 100644
--- a/bin/tools/translate.py
+++ b/bin/tools/translate.py
@@ -54,14 +54,13 @@ def translate(cr, uid, name, source_type, lang, source=None):
res_trans = cr.fetchone()
res = res_trans and res_trans[0] or False
return res
-
+
def translate_code(cr, uid, source, context):
lang = context.get('lang', False)
if lang:
return translate(cr, uid, None, 'code', lang, source)
else:
return source
-
_ = lambda source: translate_code(cr, uid, source, context)
# Methods to export the translation file
@@ -129,104 +128,28 @@ def trans_generate(lang, modules, dbname=None):
l.sort()
out = [["type","name","res_id","src","value"]]
-#TODO: do everything through to_translate, for that, we'll probably need to change its
-#format and have records = list of tuples (id, name, source) instead of just source
to_translate = []
- # object fields
- for obj_name, obj in l:
- if in_modules(obj_name, modules):
- for field_name, field_def in obj._columns.iteritems():
- name = obj_name + "," + field_name
- value = ""
- if lang:
- cr.execute("SELECT * FROM ir_translation WHERE type='field' AND name=%s AND lang=%s", (name,lang))
- res = cr.dictfetchall()
- if len(res):
- value = res[0]['value']
- out.append(["field", name, "0", field_def.string.encode('utf8'), value])
- if field_def.help:
- value = ''
- if lang:
- cr.execute('SELECT * FROM ir_translation ' \
- 'WHERE type=\'help\' ' \
- 'AND name = %s ' \
- 'AND lang = %s', (name, lang))
- res = cr.dictfetchall()
- if res:
- value = res[0]['value']
- out.append(['help', name, '0', field_def.help.encode('utf8'), value])
- if field_def.translate:
- ids = osv.orm.orm.search(obj, cr, uid, [])
- obj_values = obj.read(cr, uid, ids, [field_name])
- for obj_value in obj_values:
- trans = ""
- if lang:
- cr.execute("SELECT * " \
- "FROM ir_translation " \
- "WHERE type='model' " \
- "AND name=%s AND res_id=%d AND lang=%s",
- (name, obj_value['id'], lang))
- res = cr.dictfetchall()
- if len(res):
- trans = res[0]['value']
-
- res_id = obj_value['id']
- if obj_name in ('ir.model', 'ir.ui.menu'):
- res_id = 0
- model_data_ids = model_data_obj.search(cr, uid, [
- ('model', '=', obj_name),
- ('res_id', '=', obj_value['id']),
- ])
- if model_data_ids:
- model_data = model_data_obj.browse(cr, uid,
- model_data_ids[0])
- res_id = model_data.module + '.' + model_data.name
-
- out.append(["model", name, res_id,
- obj_value[field_name], trans])
- if hasattr(field_def, 'selection') and isinstance(field_def.selection, (list, tuple)):
- for key, val in field_def.selection:
- to_translate.append(["selection", name, [val.encode('utf8')]])
-
- # reports (xsl and rml)
- obj = pool.get("ir.actions.report.xml")
- for i in obj.read(cr, uid, osv.orm.orm.search(obj, cr, uid, [])):
- if in_modules(i["model"], modules):
- name = i["report_name"]
- fname = ""
- if i["report_rml"]:
- fname = i["report_rml"]
- parse_func = trans_parse_rml
- report_type = "rml"
- elif i["report_xsl"]:
- fname = i["report_xsl"]
- parse_func = trans_parse_xsl
- report_type = "xsl"
- try:
- xmlstr = tools.file_open(fname).read()
- d = xml.dom.minidom.parseString(xmlstr)
- to_translate.append([report_type, name, parse_func(d.documentElement)])
- except IOError:
- if fname:
- logger.notifyChannel("init", netsvc.LOG_WARNING, "couldn't export translation for report %s %s %s" % (name, report_type, fname))
-
- # views
- obj = pool.get("ir.ui.view")
- for i in obj.read(cr, uid, osv.orm.orm.search(obj, cr, uid, [])):
- if in_modules(i["model"], modules):
- d = xml.dom.minidom.parseString(i['arch'])
- to_translate.append(["view", i['model'], trans_parse_view(d.documentElement)])
-
- # wizards
- for service_name, obj in netsvc._service.iteritems():
- if service_name.startswith('wizard.'):
- for state_name, state_def in obj.states.iteritems():
+ if 'all' in modules:
+ cr.execute('select name,model,res_id,module from ir_model_data')
+ else:
+ cr.execute('select name,model,res_id,module from ir_model_data where module in ('+','.join(['%s']*len(modules))+')', modules)
+
+ for (xml_name,model,res_id,module) in cr.fetchall():
+ xml_name = module+'.'+xml_name
+ obj = pool.get(model).browse(cr, uid, res_id)
+ if model=='ir.ui.view':
+ d = xml.dom.minidom.parseString(obj.arch)
+ for t in trans_parse_view(d.documentElement):
+ to_translate.append(["view", obj.model, 0, t])
+ elif model=='ir.actions.wizard':
+ service_name = 'wizard.'+obj.wiz_name
+ obj2 = netsvc._service[service_name]
+ for state_name, state_def in obj2.states.iteritems():
if 'result' in state_def:
result = state_def['result']
if result['type'] != 'form':
continue
-
name = obj.wiz_name + ',' + state_name
# export fields
@@ -234,47 +157,95 @@ def trans_generate(lang, modules, dbname=None):
if 'string' in field_def:
source = field_def['string']
res_name = name + ',' + field_name
- to_translate.append(["wizard_field", res_name, [source]])
+ to_translate.append(["wizard_field", res_name,0,source])
# export arch
arch = result['arch']
if not isinstance(arch, UpdateableStr):
d = xml.dom.minidom.parseString(arch)
- to_translate.append(["wizard_view", name, trans_parse_view(d.documentElement)])
+ for t in trans_parse_view(d.documentElement):
+ to_translate.append(["wizard_view", name, 0, t])
# export button labels
for but_args in result['state']:
button_name = but_args[0]
button_label = but_args[1]
res_name = name + ',' + button_name
- to_translate.append(["wizard_button", res_name, [button_label]])
-
+ to_translate.append(["wizard_button", res_name, 0, button_label])
+
+ elif model=='ir.model.fields':
+ field_name = obj.name
+ field_def = pool.get(obj.model)._columns[field_name]
+
+ name = obj.model + "," + field_name
+ to_translate.append(["field", name, 0, field_def.string.encode('utf8')])
+
+ if field_def.help:
+ to_translate.append(["help", name, 0, field_def.help.encode('utf8')])
+
+ if field_def.translate:
+ ids = pool.get(obj.model).search(cr, uid, [])
+ obj_values = pool.get(obj.model).read(cr, uid, ids, [field_name])
+ for obj_value in obj_values:
+ res_id = obj_value['id']
+ if obj.name in ('ir.model', 'ir.ui.menu'):
+ res_id = 0
+ model_data_ids = model_data_obj.search(cr, uid, [
+ ('model', '=', model),
+ ('res_id', '=', res_id),
+ ])
+ if not model_data_ids:
+ to_translate.append(['model', name, 0, obj_value[field_name]])
+
+ if hasattr(field_def, 'selection') and isinstance(field_def.selection, (list, tuple)):
+ for key, val in field_def.selection:
+ to_translate.append(["selection", name, 0, val.encode('utf8')])
+
+ elif model=='ir.actions.report.xml':
+ name = obj.report_name
+ fname = ""
+ if obj.report_rml:
+ fname = obj.report_rml
+ parse_func = trans_parse_rml
+ report_type = "rml"
+ elif obj.report_xsl:
+ fname = obj.report_xsl
+ parse_func = trans_parse_xsl
+ report_type = "xsl"
+ try:
+ xmlstr = tools.file_open(fname).read()
+ d = xml.dom.minidom.parseString(xmlstr)
+ for t in parse_func(d.documentElement):
+ to_translate.append([report_type, name, 0, t])
+ except IOError:
+ if fname:
+ logger.notifyChannel("init", netsvc.LOG_WARNING, "couldn't export translation for report %s %s %s" % (name, report_type, fname))
+
+
+ for field_name,field_def in pool.get(model)._columns.items():
+ if field_def.translate:
+ name = model + "," + field_name
+ to_translate.append(['model', name, xml_name, getattr(obj,field_name)])
+
+ # TODO: By module
# code
for root, dirs, files in os.walk(tools.config['root_path']):
for fname in fnmatch.filter(files, '*.py'):
frelativepath = join(root, fname)
code_string = tools.file_open(frelativepath, subdir='').read()
-
-# TODO: add support for """ and '''... These should use the DOTALL flag
-# DOTALL
-# Make the "." special character match any character at all, including a
-# newline; without this flag, "." will match anything except a newline.
- # *? is the non-greedy version of the * qualifier
iter = re.finditer(
'[^a-zA-Z0-9_]_\([\s]*["\'](.*?)["\'][\s]*\)',
code_string)
+ sources = []
for i in iter:
- source = i.group(1).encode('utf8')
-# TODO: check whether the same string has already been exported
- res = trans_obj._get_source(cr, uid, frelativepath, 'code', lang, source) or ''
- out.append(["code", frelativepath, "0", source, res])
+ to_translate.append(['code', frelativepath, 0, i.group(1).encode('utf8')])
# translate strings marked as to be translated
- for type, name, sources in to_translate:
- for source in sources:
- trans = trans_obj._get_source(cr, uid, name, type, lang, source)
- out.append([type, name, "0", source, trans or ''])
-
+ for a in to_translate:
+ (type, name, id, source) = a
+ trans = trans_obj._get_source(cr, uid, name, type, lang, source)
+ out.append([type, name, id, source, trans or ''])
+
cr.close()
return out