From 2272c189d9279eb368a030def29e0e7a42a91ce0 Mon Sep 17 00:00:00 2001 From: Julien Thewys Date: Wed, 20 Oct 2010 16:42:48 +0200 Subject: [PATCH 1/2] [IMP] Added cli args to load one or more languages translation terms automatically. Mainly used to automate languages installation at DB initialization. bzr revid: jth@openerp.com-20101020144248-q20vnt72ovx3md96 --- bin/addons/base/module/module.py | 16 +++++++++------- bin/openerp-server.py | 10 +++++++++- bin/tools/config.py | 4 ++++ bin/tools/translate.py | 13 +++++++++++++ 4 files changed, 35 insertions(+), 8 deletions(-) diff --git a/bin/addons/base/module/module.py b/bin/addons/base/module/module.py index b2c2da96d13..3aa42af3954 100644 --- a/bin/addons/base/module/module.py +++ b/bin/addons/base/module/module.py @@ -436,7 +436,7 @@ class module(osv.osv): self.write(cr, uid, [id], {'category_id': p_id}) def update_translations(self, cr, uid, ids, filter_lang=None, context={}): - logger = netsvc.Logger() + logger = logging.getLogger('i18n') if not filter_lang: pool = pooler.get_pool(cr.dbname) lang_obj = pool.get('res.lang') @@ -456,13 +456,15 @@ class module(osv.osv): if len(lang) > 5: raise osv.except_osv(_('Error'), _('You Can Not Load Translation For language Due To Invalid Language/Country Code')) iso_lang = tools.get_iso_codes(lang) - f = os.path.join(modpath, 'i18n', iso_lang + '.po') - if not os.path.exists(f) and iso_lang.find('_') != -1: - f = os.path.join(modpath, 'i18n', iso_lang.split('_')[0] + '.po') + fn = os.path.join(modpath, 'i18n', iso_lang + '.po') + if not os.path.exists(fn) and iso_lang.find('_') != -1: iso_lang = iso_lang.split('_')[0] - if os.path.exists(f): - logger.notifyChannel("i18n", netsvc.LOG_INFO, 'module %s: loading translation file for language %s' % (mod.name, iso_lang)) - tools.trans_load(cr.dbname, f, lang, verbose=False, context=context) + fn = os.path.join(modpath, 'i18n', iso_lang + '.po') + if os.path.exists(fn): + logger.info('module %s: loading translation file for language %s' % (mod.name, iso_lang)) + tools.trans_load(cr.dbname, fn, lang, verbose=False, context=context) + else: + logger.warn('module %s: translation file not found %s' % (mod.name, fn)) def check(self, cr, uid, ids, context=None): logger = logging.getLogger('init') diff --git a/bin/openerp-server.py b/bin/openerp-server.py index 8d210fc2906..18a2238daea 100755 --- a/bin/openerp-server.py +++ b/bin/openerp-server.py @@ -119,13 +119,21 @@ if not ( tools.config["stop_after_init"] or \ if tools.config['db_name']: for dbname in tools.config['db_name'].split(','): db,pool = pooler.get_db_and_pool(dbname, update_module=tools.config['init'] or tools.config['update'], pooljobs=False) + cr = db.cursor() + if tools.config["test_file"]: logger.info('loading test file %s', tools.config["test_file"]) - cr = db.cursor() tools.convert_yaml_import(cr, 'base', file(tools.config["test_file"]), {}, 'test', True) cr.rollback() + + if tools.config['load_language']: + for lang in tools.config['load_language'].split(','): + tools.load_language(cr, lang) + pool.get('ir.cron')._poolJobs(db.dbname) + cr.close() + #---------------------------------------------------------- # translation stuff #---------------------------------------------------------- diff --git a/bin/tools/config.py b/bin/tools/config.py index 2964870d427..c0600d0a881 100644 --- a/bin/tools/config.py +++ b/bin/tools/config.py @@ -58,6 +58,7 @@ class configmanager(object): 'xmlrpcs': True, 'translate_in': None, 'translate_out': None, + 'load_language': None, 'language': None, 'pg_path': None, 'admin_passwd': 'admin', @@ -206,6 +207,8 @@ class configmanager(object): "Option '-l' is mandatory in case of importation" ) + group.add_option('--load-language', dest="load_language", + help="specifies the languages for the translations you want to be loaded") group.add_option('-l', "--language", dest="language", help="specify the language of the translation file. Use it with --i18n-export or --i18n-import") group.add_option("--i18n-export", dest="translate_out", @@ -283,6 +286,7 @@ class configmanager(object): keys = [ 'language', 'translate_out', 'translate_in', 'debug_mode', 'smtp_ssl', + 'load_language', 'stop_after_init', 'logrotate', 'without_demo', 'netrpc', 'xmlrpc', 'syslog', 'list_db', 'xmlrpcs', 'test_file', 'test_disable', 'test_commit', 'test_report_directory' diff --git a/bin/tools/translate.py b/bin/tools/translate.py index f978ecbfd4b..ad4d6ba3b14 100644 --- a/bin/tools/translate.py +++ b/bin/tools/translate.py @@ -898,5 +898,18 @@ def resetlocale(): except locale.Error: continue +def load_language(cr, lang): + """Loads a translation terms for a language. + Used mainly to automate language loading at db initialization. + + :param lang: language ISO code with optional _underscore_ and l10n flavor (ex: 'fr', 'fr_BE', but not 'fr-BE') + :type lang: str + """ + pool = pooler.get_pool(cr.dbname) + language_installer = pool.get('base.language.install') + uid = 1 + oid = language_installer.create(cr, uid, {'lang': lang}) + language_installer.lang_install(cr, uid, [oid], context=None) + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: From 6f930404ed0d67116a30161a5827f61d57f7833b Mon Sep 17 00:00:00 2001 From: Julien Thewys Date: Tue, 26 Oct 2010 14:19:07 +0200 Subject: [PATCH 2/2] [REF] Manages languages loading just after loading 'base' module. bzr revid: jth@openerp.com-20101026121907-zw39q62c3s3qjp6o --- bin/addons/__init__.py | 4 ++++ bin/openerp-server.py | 4 ---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/bin/addons/__init__.py b/bin/addons/__init__.py index 72e9fb2c6e2..c0c7641b86c 100644 --- a/bin/addons/__init__.py +++ b/bin/addons/__init__.py @@ -808,6 +808,10 @@ def load_modules(db, force_demo=False, status=None, update_module=False): raise osv.osv.except_osv('Could not load base module', 'module base cannot be loaded! (hint: verify addons-path)') has_updates = load_module_graph(cr, graph, status, perform_checks=(not update_module), report=report) + if tools.config['load_language']: + for lang in tools.config['load_language'].split(','): + tools.load_language(cr, lang) + if update_module: modobj = pool.get('ir.module.module') logger.notifyChannel('init', netsvc.LOG_INFO, 'updating modules list') diff --git a/bin/openerp-server.py b/bin/openerp-server.py index 18a2238daea..7a811bb137e 100755 --- a/bin/openerp-server.py +++ b/bin/openerp-server.py @@ -126,10 +126,6 @@ if tools.config['db_name']: tools.convert_yaml_import(cr, 'base', file(tools.config["test_file"]), {}, 'test', True) cr.rollback() - if tools.config['load_language']: - for lang in tools.config['load_language'].split(','): - tools.load_language(cr, lang) - pool.get('ir.cron')._poolJobs(db.dbname) cr.close()