diff options
| author | Olivier Dony <odo@openerp.com> | 2011-01-07 16:17:35 +0100 |
|---|---|---|
| committer | Olivier Dony <odo@openerp.com> | 2011-01-07 16:17:35 +0100 |
| commit | 8edba174ce67d93ce852a7b9c5f5969db90a2ac6 (patch) | |
| tree | 4a10bef31104fbc96c3fce9112dd02514d2e3c05 /bin/tools | |
| parent | 14e63c6cc77782f838744ac752f13a5bbf510493 (diff) | |
| parent | 052f6caeaa56f3d44eb469d8aa8f9ac966a3e597 (diff) | |
[MERGE] translations: refactoring/deferral of translated resource id resolution, fixing several translation issues
lp bug: https://launchpad.net/bugs/696760 fixed
bzr revid: odo@openerp.com-20110107151735-agubxu82g0ursdbh
Diffstat (limited to 'bin/tools')
| -rw-r--r-- | bin/tools/translate.py | 54 |
1 files changed, 29 insertions, 25 deletions
diff --git a/bin/tools/translate.py b/bin/tools/translate.py index 3b0b0f1173c..9724f732a6d 100644 --- a/bin/tools/translate.py +++ b/bin/tools/translate.py @@ -409,7 +409,7 @@ class TinyPoFile(object): # Methods to export the translation file -def trans_export(lang, modules, buffer, format, dbname=None): +def trans_export(lang, modules, buffer, format, cr): def _process(format, modules, rows, buffer, lang, newlang): if format == 'csv': @@ -461,7 +461,7 @@ def trans_export(lang, modules, buffer, format, dbname=None): newlang = not bool(lang) if newlang: lang = 'en_US' - trans = trans_generate(lang, modules, dbname) + trans = trans_generate(lang, modules, cr) if newlang and format!='csv': for trx in trans: trx[-1] = '' @@ -524,17 +524,13 @@ def in_modules(object_name, modules): module = module_dict.get(module, module) return module in modules -def trans_generate(lang, modules, dbname=None): +def trans_generate(lang, modules, cr): logger = logging.getLogger('i18n') - if not dbname: - dbname=tools.config['db_name'] - if not modules: - modules = ['all'] + dbname = cr.dbname pool = pooler.get_pool(dbname) trans_obj = pool.get('ir.translation') model_data_obj = pool.get('ir.model.data') - cr = pooler.get_db(dbname).cursor() uid = 1 l = pool.obj_pool.items() l.sort() @@ -834,16 +830,15 @@ def trans_generate(lang, modules, dbname=None): trans = trans_obj._get_source(cr, uid, name, type, lang, source) out.append([module, type, name, id, source, encode(trans) or '']) - cr.close() return out -def trans_load(db_name, filename, lang, verbose=True, context=None): +def trans_load(cr, filename, lang, verbose=True, context=None): logger = logging.getLogger('i18n') try: fileobj = open(filename,'r') logger.info("loading %s", filename) fileformat = os.path.splitext(filename)[-1][1:].lower() - r = trans_load_data(db_name, fileobj, fileformat, lang, verbose=verbose, context=context) + r = trans_load_data(cr, fileobj, fileformat, lang, verbose=verbose, context=context) fileobj.close() return r except IOError: @@ -851,12 +846,16 @@ def trans_load(db_name, filename, lang, verbose=True, context=None): logger.error("couldn't read translation file %s", filename) return None -def trans_load_data(db_name, fileobj, fileformat, lang, lang_name=None, verbose=True, context=None): +def trans_load_data(cr, fileobj, fileformat, lang, lang_name=None, verbose=True, context=None): + """Populates the ir_translation table. Fixing the res_ids so that they point + correctly to ir_model_data is done in a separate step, using the + 'trans_update_res_ids' function below.""" logger = logging.getLogger('i18n') if verbose: logger.info('loading translation file for language %s', lang) if context is None: context = {} + db_name = cr.dbname pool = pooler.get_pool(db_name) lang_obj = pool.get('res.lang') trans_obj = pool.get('ir.translation') @@ -864,7 +863,6 @@ def trans_load_data(db_name, fileobj, fileformat, lang, lang_name=None, verbose= iso_lang = tools.get_iso_codes(lang) try: uid = 1 - cr = pooler.get_db(db_name).cursor() ids = lang_obj.search(cr, uid, [('code','=', lang)]) if not ids: @@ -906,17 +904,13 @@ def trans_load_data(db_name, fileobj, fileformat, lang, lang_name=None, verbose= try: dic['res_id'] = dic['res_id'] and int(dic['res_id']) or 0 + dic['module'] = False + dic['xml_id'] = False except: - model_data_ids = model_data_obj.search(cr, uid, [ - ('model', '=', dic['name'].split(',')[0]), - ('module', '=', dic['res_id'].split('.', 1)[0]), - ('name', '=', dic['res_id'].split('.', 1)[1]), - ]) - if model_data_ids: - dic['res_id'] = model_data_obj.browse(cr, uid, - model_data_ids[0]).res_id - else: - dic['res_id'] = False + split_id = dic['res_id'].split('.', 1) + dic['module'] = split_id[0] + dic['xml_id'] = split_id[1] + dic['res_id'] = False args = [ ('lang', '=', lang), @@ -932,14 +926,24 @@ def trans_load_data(db_name, fileobj, fileformat, lang, lang_name=None, verbose= trans_obj.write(cr, uid, ids, {'value': dic['value']}) else: trans_obj.create(cr, uid, dic) - cr.commit() - cr.close() if verbose: logger.info("translation file loaded succesfully") except IOError: filename = '[lang: %s][format: %s]' % (iso_lang or 'new', fileformat) logger.exception("couldn't read translation file %s", filename) +def trans_update_res_ids(cr): + cr.execute(""" + UPDATE ir_translation + SET res_id = (SELECT ir_model_data.res_id + FROM ir_model_data + WHERE ir_translation.module = ir_model_data.module + AND ir_translation.xml_id = ir_model_data.name) + WHERE ir_translation.module is not null + AND ir_translation.xml_id is not null + AND ir_translation.res_id = 0; + """) + def get_locales(lang=None): if lang is None: lang = locale.getdefaultlocale()[0] |
