summaryrefslogtreecommitdiff
path: root/bin/tools
diff options
context:
space:
mode:
authorOlivier Dony <odo@openerp.com>2011-01-07 16:17:35 +0100
committerOlivier Dony <odo@openerp.com>2011-01-07 16:17:35 +0100
commit8edba174ce67d93ce852a7b9c5f5969db90a2ac6 (patch)
tree4a10bef31104fbc96c3fce9112dd02514d2e3c05 /bin/tools
parent14e63c6cc77782f838744ac752f13a5bbf510493 (diff)
parent052f6caeaa56f3d44eb469d8aa8f9ac966a3e597 (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.py54
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]