#!/usr/bin/python # -*- coding: utf-8 -*- # --------------------------------------------------------------------------- # # # # Locale generator for iSida Jabber Bot # # Copyright (C) diSabler # # # # This program is free software: you can redistribute it and/or modify # # it under the terms of the GNU General Public License as published by # # the Free Software Foundation, either version 3 of the License, or # # (at your option) any later version. # # # # This program is distributed in the hope that it will be useful, # # but WITHOUT ANY WARRANTY; without even the implied warranty of # # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # # GNU General Public License for more details. # # # # You should have received a copy of the GNU General Public License # # along with this program. If not, see . # # # # --------------------------------------------------------------------------- # import os,re,time,sys sys.path = ['../../lib'] + sys.path def L(t): return t def GT(t): if t in ['wot_appid','disco_exclude','lfm_api']: return '' elif t in ['html_logs_enable']: return 0 elif t == 'wot_region': return 'RU' else: return None def readfile(filename): fp = file(filename) data = fp.read() fp.close() return data def writefile(filename, data): fp = file(filename, 'wb') fp.write(data) fp.close() def regenerate(ptl,locale_name): global execute,exec_yes,comms def L(text): if not len(text): return text try: return locales[text] except: return text path_to_locale = '%s/%s' % (ptl,locale_name) root_files = os.listdir(path_to_source) plugins_files = os.listdir(path_to_plugins) plugins_files.sort() file_list,localez = [],[] regex = r'L\(u?\'(.*?)\'[,|\)]' for tmp in root_files: if tmp[-3:] == '.py' and tmp[0] not in ['.','_']: file_list.append('%s/%s' % (path_to_source,tmp)) for tmp in plugins_files: if tmp[-3:] == '.py' and tmp[0] not in ['.','_']: file_list.append('%s/%s' % (path_to_plugins,tmp)) locales = {} if os.path.isfile(path_to_locale): lf = readfile(path_to_locale).decode('UTF').replace('\r','').split('\n') for c in lf: if ('#' not in c[:3]) and len(c) and '\t' in c: locales[c.split('\t',1)[0]] = c.split('\t',1)[1] else: print 'Locale not found!' result = locale_header + '\n\n' error_count = 0 for tmp in file_list: execute,exec_yes,comms = [],[],[] if 'plugin' in tmp: execfile(tmp,globals()) body = str(readfile(tmp)).replace('\\\'','\'').replace('\\\"','\"').replace('\\\\','\\') tm = re.findall(regex,body,re.S+re.U) for t in execute+exec_yes+comms: tm.append(t[4].replace('\n','\\n')) tm2 = re.findall('# translate: (.*)',body) if tm2: tm2 = tm2[0].split(',') if tm or tm2: for tmp2 in tm: if tmp2 not in localez: localez.append(tmp2) tm2.append(tmp2) if tm2: result += '%s%s\n' % (file_mark,'/'.join(tmp.split('/')[2:])) for tmp2 in tm2: tr = L(tmp2) if tmp2 == tr: error_count += 1 loc = locale_mark else: loc = tr result += '%s\t%s\n' % (tmp2,loc) result += '\n' execfile(path_to_mainpy,globals()) tm2 = [] for t in config_prefs.keys(): if config_prefs[t][0] not in localez: localez.append(config_prefs[t][0]) tm2.append(config_prefs[t][0]) if config_prefs[t][1] not in localez: localez.append(config_prefs[t][1]) tm2.append(config_prefs[t][1]) for t in config_groups: if t[0] not in localez: localez.append(t[0]) tm2.append(t[0]) for t in owner_prefs.keys(): if owner_prefs[t][0] not in localez: localez.append(owner_prefs[t][0]) tm2.append(owner_prefs[t][0]) for t in owner_groups: if t[0] not in localez: localez.append(t[0]) tm2.append(t[0]) if tm2: result += '%s%s\n' % (file_mark,'Generic') for tmp2 in tm2: tr = L(tmp2) if tmp2 == tr: error_count += 1 loc = locale_mark else: loc = tr result += '%s\t%s\n' % (tmp2,loc) result += '\n' result += '# write locale file: %s' % locale_name result += '\n# total: %s' % len(localez) msg = 'write locale file: %s' % locale_name if error_count: msg += '\nmissed translations: %s\n' % error_count result += '\n# missed translations: %s\n' % error_count else: msg += '\nregenarated without mistakes!\n' result += '\n# regenarated without mistakes!\n' return msg, result, len(localez) path_to_source = '../..' path_to_locale = '%s/data/locales/' % path_to_source path_to_plugins = '%s/plugins' % path_to_source path_to_mainpy = '%s/main.py' % path_to_plugins smiles_dirs = [] data_folder = path_to_source + '/data/%s' loc_folder = data_folder % 'locales/%s.txt' log_folder = data_folder % 'conflogs/%s' public_log = log_folder % 'chatlogs/%s' system_log = log_folder % 'syslogs/%s' gactmessage = [] base_type = 'pgsql' locale_mark = 'NO_TRANSLATE' file_mark = '# file: ' locale_header = '''#--------------------------------------------- # Autogenerate for locales # (c) Disabler Production Lab. #---------------------------------------------''' smiles_dirs_case = logs_css_path = '' execute,exec_yes,comms = [],[],[] if __name__ == "__main__" : print '\n',locale_header.replace('#',''),'\n' lf = os.listdir(path_to_locale) for tmp in lf: if tmp[-4:] == '.txt': msg, result, lz = regenerate(path_to_locale,tmp) writefile(tmp,'%s\n' % result.encode('utf-8')) print msg print 'Total found definitions: %s\n' % lz print 'Done!'