[IMP] various tentative improvements to translation code
This commit is contained in:
parent
f1af60b3a6
commit
d7fb4d903d
|
@ -635,13 +635,11 @@ def trans_generate(lang, modules, cr):
|
||||||
dbname = cr.dbname
|
dbname = cr.dbname
|
||||||
|
|
||||||
registry = openerp.registry(dbname)
|
registry = openerp.registry(dbname)
|
||||||
trans_obj = registry.get('ir.translation')
|
trans_obj = registry['ir.translation']
|
||||||
model_data_obj = registry.get('ir.model.data')
|
model_data_obj = registry['ir.model.data']
|
||||||
uid = 1
|
uid = 1
|
||||||
l = registry.models.items()
|
|
||||||
l.sort()
|
|
||||||
|
|
||||||
query = 'SELECT name, model, res_id, module' \
|
query = 'SELECT name, model, res_id, module' \
|
||||||
' FROM ir_model_data'
|
' FROM ir_model_data'
|
||||||
|
|
||||||
query_models = """SELECT m.id, m.model, imd.module
|
query_models = """SELECT m.id, m.model, imd.module
|
||||||
|
@ -661,15 +659,16 @@ def trans_generate(lang, modules, cr):
|
||||||
|
|
||||||
cr.execute(query, query_param)
|
cr.execute(query, query_param)
|
||||||
|
|
||||||
_to_translate = []
|
_to_translate = set()
|
||||||
def push_translation(module, type, name, id, source, comments=None):
|
def push_translation(module, type, name, id, source, comments=None):
|
||||||
tuple = (module, source, name, id, type, comments or [])
|
|
||||||
# empty and one-letter terms are ignored, they probably are not meant to be
|
# empty and one-letter terms are ignored, they probably are not meant to be
|
||||||
# translated, and would be very hard to translate anyway.
|
# translated, and would be very hard to translate anyway.
|
||||||
if not source or len(source.strip()) <= 1:
|
if not source or len(source.strip()) <= 1:
|
||||||
return
|
return
|
||||||
if tuple not in _to_translate:
|
|
||||||
_to_translate.append(tuple)
|
tnx = (module, source, name, id, type, tuple(comments or ()))
|
||||||
|
if tnx not in _to_translate:
|
||||||
|
_to_translate.add(tnx)
|
||||||
|
|
||||||
def encode(s):
|
def encode(s):
|
||||||
if isinstance(s, unicode):
|
if isinstance(s, unicode):
|
||||||
|
@ -698,15 +697,15 @@ def trans_generate(lang, modules, cr):
|
||||||
_logger.error("Unable to find object %r", model)
|
_logger.error("Unable to find object %r", model)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if not registry[model]._translate:
|
Model = registry[model]
|
||||||
|
if not Model._translate:
|
||||||
# explicitly disabled
|
# explicitly disabled
|
||||||
continue
|
continue
|
||||||
|
|
||||||
exists = registry[model].exists(cr, uid, res_id)
|
obj = Model.browse(cr, uid, res_id)
|
||||||
if not exists:
|
if not obj.exists():
|
||||||
_logger.warning("Unable to find object %r with id %d", model, res_id)
|
_logger.warning("Unable to find object %r with id %d", model, res_id)
|
||||||
continue
|
continue
|
||||||
obj = registry[model].browse(cr, uid, res_id)
|
|
||||||
|
|
||||||
if model=='ir.ui.view':
|
if model=='ir.ui.view':
|
||||||
d = etree.XML(encode(obj.arch))
|
d = etree.XML(encode(obj.arch))
|
||||||
|
@ -824,9 +823,9 @@ def trans_generate(lang, modules, cr):
|
||||||
if model_obj._sql_constraints:
|
if model_obj._sql_constraints:
|
||||||
push_local_constraints(module, model_obj, 'sql_constraints')
|
push_local_constraints(module, model_obj, 'sql_constraints')
|
||||||
|
|
||||||
modobj = registry['ir.module.module']
|
installed_modules = map(
|
||||||
installed_modids = modobj.search(cr, uid, [('state', '=', 'installed')])
|
lambda m: m['name'],
|
||||||
installed_modules = map(lambda m: m['name'], modobj.read(cr, uid, installed_modids, ['name']))
|
registry['ir.module.module'].search_read(cr, uid, [('state', '=', 'installed')], fields=['name']))
|
||||||
|
|
||||||
path_list = list(openerp.modules.module.ad_paths)
|
path_list = list(openerp.modules.module.ad_paths)
|
||||||
# Also scan these non-addon paths
|
# Also scan these non-addon paths
|
||||||
|
@ -835,14 +834,12 @@ def trans_generate(lang, modules, cr):
|
||||||
|
|
||||||
_logger.debug("Scanning modules at paths: %s", path_list)
|
_logger.debug("Scanning modules at paths: %s", path_list)
|
||||||
|
|
||||||
mod_paths = list(path_list)
|
|
||||||
|
|
||||||
def get_module_from_path(path):
|
def get_module_from_path(path):
|
||||||
for mp in mod_paths:
|
for mp in path_list:
|
||||||
if path.startswith(mp) and (os.path.dirname(path) != mp):
|
if path.startswith(mp) and os.path.dirname(path) != mp:
|
||||||
path = path[len(mp)+1:]
|
path = path[len(mp)+1:]
|
||||||
return path.split(os.path.sep)[0]
|
return path.split(os.path.sep)[0]
|
||||||
return 'base' # files that are not in a module are considered as being in 'base' module
|
return 'base' # files that are not in a module are considered as being in 'base' module
|
||||||
|
|
||||||
def verified_module_filepaths(fname, path, root):
|
def verified_module_filepaths(fname, path, root):
|
||||||
fabsolutepath = join(root, fname)
|
fabsolutepath = join(root, fname)
|
||||||
|
@ -857,20 +854,20 @@ def trans_generate(lang, modules, cr):
|
||||||
extra_comments=None, extract_keywords={'_': None}):
|
extra_comments=None, extract_keywords={'_': None}):
|
||||||
module, fabsolutepath, _, display_path = verified_module_filepaths(fname, path, root)
|
module, fabsolutepath, _, display_path = verified_module_filepaths(fname, path, root)
|
||||||
extra_comments = extra_comments or []
|
extra_comments = extra_comments or []
|
||||||
if module:
|
if not module: return
|
||||||
src_file = open(fabsolutepath, 'r')
|
src_file = open(fabsolutepath, 'r')
|
||||||
try:
|
try:
|
||||||
for extracted in extract.extract(extract_method, src_file,
|
for extracted in extract.extract(extract_method, src_file,
|
||||||
keywords=extract_keywords):
|
keywords=extract_keywords):
|
||||||
# Babel 0.9.6 yields lineno, message, comments
|
# Babel 0.9.6 yields lineno, message, comments
|
||||||
# Babel 1.3 yields lineno, message, comments, context
|
# Babel 1.3 yields lineno, message, comments, context
|
||||||
lineno, message, comments = extracted[:3]
|
lineno, message, comments = extracted[:3]
|
||||||
push_translation(module, trans_type, display_path, lineno,
|
push_translation(module, trans_type, display_path, lineno,
|
||||||
encode(message), comments + extra_comments)
|
encode(message), comments + extra_comments)
|
||||||
except Exception:
|
except Exception:
|
||||||
_logger.exception("Failed to extract terms from %s", fabsolutepath)
|
_logger.exception("Failed to extract terms from %s", fabsolutepath)
|
||||||
finally:
|
finally:
|
||||||
src_file.close()
|
src_file.close()
|
||||||
|
|
||||||
for path in path_list:
|
for path in path_list:
|
||||||
_logger.debug("Scanning files of modules at %s", path)
|
_logger.debug("Scanning files of modules at %s", path)
|
||||||
|
@ -893,11 +890,10 @@ def trans_generate(lang, modules, cr):
|
||||||
extra_comments=[WEB_TRANSLATION_COMMENT])
|
extra_comments=[WEB_TRANSLATION_COMMENT])
|
||||||
|
|
||||||
out = []
|
out = []
|
||||||
_to_translate.sort()
|
|
||||||
# translate strings marked as to be translated
|
# translate strings marked as to be translated
|
||||||
for module, source, name, id, type, comments in _to_translate:
|
for module, source, name, id, type, comments in sorted(_to_translate):
|
||||||
trans = '' if not lang else trans_obj._get_source(cr, uid, name, type, lang, source)
|
trans = '' if not lang else trans_obj._get_source(cr, uid, name, type, lang, source)
|
||||||
out.append([module, type, name, id, source, encode(trans) or '', comments])
|
out.append((module, type, name, id, source, encode(trans) or '', comments))
|
||||||
return out
|
return out
|
||||||
|
|
||||||
def trans_load(cr, filename, lang, verbose=True, module_name=None, context=None):
|
def trans_load(cr, filename, lang, verbose=True, module_name=None, context=None):
|
||||||
|
|
Loading…
Reference in New Issue