def import_lang(self, cr, uid, ids, context): """ Import Language @param cr: the current row, from the database cursor. @param uid: the current user’s ID for security checks. @param ids: the ID or list of IDs @param context: A standard dictionary """ import_data = self.browse(cr, uid, ids)[0] fileobj = TemporaryFile('w+') fileobj.write(base64.decodestring(import_data.data)) # now we determine the file format fileobj.seek(0) first_line = fileobj.readline().strip().replace('"', '').replace(' ', '') fileformat = first_line.endswith( "type,name,res_id,src,value") and 'csv' or 'po' fileobj.seek(0) tools.trans_load_data(cr, fileobj, fileformat, import_data.code, lang_name=import_data.name) tools.trans_update_res_ids(cr) fileobj.close() return {}
def update_translations(self, cr, uid, ids, filter_lang=None, context={}): logger = logging.getLogger('i18n') if not filter_lang: pool = pooler.get_pool(cr.dbname) lang_obj = pool.get('res.lang') lang_ids = lang_obj.search(cr, uid, [('translatable', '=', True)]) filter_lang = [ lang.code for lang in lang_obj.browse(cr, uid, lang_ids) ] elif not isinstance(filter_lang, (list, tuple)): filter_lang = [filter_lang] for mod in self.browse(cr, uid, ids): if mod.state != 'installed': continue modpath = addons.get_module_path(mod.name) if not modpath: # unable to find the module. we skip continue for lang in filter_lang: iso_lang = tools.get_iso_codes(lang) f = addons.get_module_resource(mod.name, 'i18n', iso_lang + '.po') context2 = context and context.copy() or {} if f and '_' in iso_lang: iso_lang2 = iso_lang.split('_')[0] f2 = addons.get_module_resource(mod.name, 'i18n', iso_lang2 + '.po') if f2: logger.info( 'module %s: loading base translation file %s for language %s', mod.name, iso_lang2, lang) tools.trans_load(cr, f2, lang, verbose=False, context=context) context2['overwrite'] = True # Implementation notice: we must first search for the full name of # the language derivative, like "en_UK", and then the generic, # like "en". if (not f) and '_' in iso_lang: iso_lang = iso_lang.split('_')[0] f = addons.get_module_resource(mod.name, 'i18n', iso_lang + '.po') if f: logger.info( 'module %s: loading translation file (%s) for language %s', mod.name, iso_lang, lang) tools.trans_load(cr, f, lang, verbose=False, context=context2) elif iso_lang != 'en': logger.warning('module %s: no translation for language %s', mod.name, iso_lang) tools.trans_update_res_ids(cr)
def act_update(self, cr, uid, ids, context=None): this = self.browse(cr, uid, ids)[0] lang_name = self._get_lang_name(cr, uid, this.lang) buf=cStringIO.StringIO() tools.trans_export(this.lang, ['all'], buf, 'csv', cr) tools.trans_load_data(cr, buf, 'csv', this.lang, lang_name=lang_name) tools.trans_update_res_ids(cr) buf.close() return {'type': 'ir.actions.act_window_close'}
def _import(self, dbname, uid, ids, context=None): try: cr = pooler.get_db(dbname).cursor() import_data = self.browse(cr, uid, ids)[0] (fileobj, fileformat) = lang_tools.get_data_file(cr, uid, import_data.data) if fileformat == 'xml': fileformat = 'csv' else: first_line = fileobj.readline().strip().replace('"', '').replace(' ', '') fileformat = first_line.endswith("type,name,res_id,src,value") and 'csv' or 'po' fileobj.seek(0) lang_obj = self.pool.get('res.lang') lang_ids = lang_obj.search(cr, uid, [('code', '=', import_data.name)]) if lang_ids: lang_data = lang_obj.read(cr, uid, lang_ids[0], ['translatable']) if not lang_data['translatable']: lang_obj.write(cr, uid, [lang_ids[0]], {'translatable': True}) tools.trans_load_data(cr, fileobj, fileformat, import_data.code, lang_name=import_data.name, context={'overwrite': 1}) tools.trans_update_res_ids(cr) fileobj.close() req_id = self.pool.get('res.request').create(cr, uid, { 'name': _('Translation file imported'), 'act_from': uid, 'act_to': uid, 'import_trans': True, 'body': _('Your translation file has been successfully imported.') }) if req_id: self.pool.get('res.request').request_send(cr, uid, [req_id]) self.write(cr, uid, [ids[0]], {'data': ''}) tools.cache.clean_caches_for_db(cr.dbname) cr.commit() cr.close(True) except Exception, e: cr.rollback() self.write(cr, uid, [ids[0]], {'data': ''}) req_id = self.pool.get('res.request').create(cr, uid, { 'name': _('Import translation failed'), 'act_from': uid, 'act_to': uid, 'import_trans': True, 'body': _('''The process to import the translation file failed ! %s ''')% (e,), }) cr.commit() cr.close(True) raise
def update_translations(self, cr, uid, ids, filter_lang=None, context=None): if context is None: context = {} logger = logging.getLogger('i18n') if not filter_lang: pool = pooler.get_pool(cr.dbname) lang_obj = pool.get('res.lang') lang_ids = lang_obj.search(cr, uid, [('translatable', '=', True)]) filter_lang = [lang.code for lang in lang_obj.browse(cr, uid, lang_ids)] elif not isinstance(filter_lang, (list, tuple)): filter_lang = [filter_lang] msf_profile_id = self.pool.get('ir.module.module').search(cr, uid, [('name', '=', 'msf_profile')]) if msf_profile_id and msf_profile_id[0] in ids: ids.remove(msf_profile_id[0]) # load msf_profile file at the end (due to es.po file, terms are always overwritten) ids.append(msf_profile_id[0]) for mod in self.browse(cr, uid, ids): if mod.state != 'installed': continue modpath = addons.get_module_path(mod.name) if not modpath: # unable to find the module. we skip continue for lang in filter_lang: iso_lang = tools.get_iso_codes(lang) f = addons.get_module_resource(mod.name, 'i18n', iso_lang + '.po') context2 = context and context.copy() or {} if f and '_' in iso_lang: iso_lang2 = iso_lang.split('_')[0] f2 = addons.get_module_resource(mod.name, 'i18n', iso_lang2 + '.po') if f2: logger.info('module %s: loading base translation file %s for language %s', mod.name, iso_lang2, lang) tools.trans_load(cr, f2, lang, verbose=False, context=context) context2['overwrite'] = True # Implementation notice: we must first search for the full name of # the language derivative, like "en_UK", and then the generic, # like "en". if (not f) and '_' in iso_lang: iso_lang = iso_lang.split('_')[0] f = addons.get_module_resource(mod.name, 'i18n', iso_lang + '.po') if f: logger.info('module %s: loading translation file (%s) for language %s', mod.name, iso_lang, lang) tools.trans_load(cr, f, lang, verbose=False, context=context2) elif iso_lang != 'en': logger.warning('module %s: no translation for language %s', mod.name, iso_lang) tools.trans_update_res_ids(cr)
def import_lang(self, cr, uid, ids, context): """ Import Language @param cr: the current row, from the database cursor. @param uid: the current user’s ID for security checks. @param ids: the ID or list of IDs @param context: A standard dictionary """ import_data = self.browse(cr, uid, ids)[0] fileobj = TemporaryFile('w+') fileobj.write(base64.decodestring(import_data.data)) # now we determine the file format fileobj.seek(0) first_line = fileobj.readline().strip().replace('"', '').replace(' ', '') fileformat = first_line.endswith("type,name,res_id,src,value") and 'csv' or 'po' fileobj.seek(0) tools.trans_load_data(cr, fileobj, fileformat, import_data.code, lang_name=import_data.name) tools.trans_update_res_ids(cr) fileobj.close() return {}
fileformat, cr) cr.close() buf.close() logger.info('translation file written successfully') sys.exit(0) if tools.config["translate_in"]: context = {'overwrite': tools.config["overwrite_existing_translations"]} dbname = tools.config['db_name'] cr = pooler.get_db(dbname).cursor() tools.trans_load(cr, tools.config["translate_in"], tools.config["language"], context=context) tools.trans_update_res_ids(cr) cr.commit() cr.close() sys.exit(0) #---------------------------------------------------------------------------------- # if we don't want the server to continue to run after initialization, we quit here #---------------------------------------------------------------------------------- if tools.config["stop_after_init"]: sys.exit(0) #---------------------------------------------------------- # Launch Servers #---------------------------------------------------------- LST_SIGNALS = ['SIGINT', 'SIGTERM']
tools.trans_export(tools.config["language"], tools.config["translate_modules"] or ["all"], buf, fileformat, cr) cr.close() buf.close() logger.info('translation file written successfully') sys.exit(0) if tools.config["translate_in"]: context = {'overwrite': tools.config["overwrite_existing_translations"]} dbname = tools.config['db_name'] cr = pooler.get_db(dbname).cursor() tools.trans_load(cr, tools.config["translate_in"], tools.config["language"], context=context) tools.trans_update_res_ids(cr) cr.commit() cr.close() sys.exit(0) #---------------------------------------------------------------------------------- # if we don't want the server to continue to run after initialization, we quit here #---------------------------------------------------------------------------------- if tools.config["stop_after_init"]: sys.exit(0) #---------------------------------------------------------- # Launch Servers #----------------------------------------------------------