def get_translation(self, email): """returns translation""" go = Goslate() #=====[ Step 1: get translation ]===== lang = email.subject.strip().lower().capitalize() langs = go.get_languages() if lang in langs.values(): lang_code = [k for k,v in langs.items() if langs[k] == lang][0] try: translation = go.translate(email.body, lang_code) except: translation = "Translation error." else: translation = u'%s no esta soportado intente con es/en/fr' % lang #=====[ Step 2: format ]===== return """ Traduccion para: ================ %s --- %s """ % (email.subject.strip().encode('ascii', 'ignore'), translation.encode('ascii', 'ignore'))
def get_translation(self, email): """returns translation""" go = Goslate() #=====[ Step 1: get translation ]===== lang = email.subject.strip().lower().capitalize() langs = go.get_languages() if lang in langs.values(): lang_code = [k for k, v in langs.items() if langs[k] == lang][0] try: translation = go.translate(email.body, lang_code) except: translation = "Translation error." else: translation = u'%s no esta soportado intente con es/en/fr' % lang #=====[ Step 2: format ]===== return """ Traduccion para: ================ %s --- %s """ % (email.subject.strip().encode( 'ascii', 'ignore'), translation.encode('ascii', 'ignore'))
class AppLocalizer(object): def __init__(self, application=None): self.application = application self.genroroot = getGenroRoot() try: from goslate import Goslate self.translator = Goslate() self.languages = self.translator.get_languages() except: self.translator = False self.languages = dict(en='English',it='Italian') roots = [os.path.join(self.genroroot,n) for n in ('gnrpy/gnr','gnrjs','resources/common','resources/mobile')] self.slots = [dict(roots=roots,destFolder=self.genroroot,code='core',protected=True,language='en')] for p in self.application.packages.values(): self.slots.append(dict(roots=[p.packageFolder],destFolder=p.packageFolder, code=p.id, protected = (p.project == 'gnrcore'),language=p.language)) #if os.path.exists(self.application.customFolder): # self.slots.append(dict(roots=[self.application.customFolder],destFolder=self.application.customFolder, # code='customization',protected=False)) self.buildLocalizationDict() def buildLocalizationDict(self): self.updatableLocBags = dict(all=[],unprotected=[]) self.localizationDict = dict() for s in self.slots: if not s['protected']: self.updatableLocBags['unprotected'].append(s['destFolder']) self.updatableLocBags['all'].append(s['destFolder']) locbag = self.getLocalizationBag(s['destFolder']) if locbag: self.updateLocalizationDict(locbag,s['language']) def translate(self,txt,language=None): return self.getTranslation(txt,language=language)['translation'] def getTranslation(self,txt,language=None): language = (language or self.application.locale).split('-')[0].lower() result = dict(status='OK',translation=None) if isinstance(txt,GnrLocString): lockey = txt.lockey translation_dict = self.localizationDict.get(lockey) if translation_dict: translation = translation_dict.get(language) if not translation: result['status'] = 'NOLANG' translation = translation_dict.get('en') or translation_dict.get('base') if txt.args or txt.kwargs: translation = translation.__mod__(*txt.args,**txt.kwargs) else: result['status'] = 'NOKEY' translation = txt result['translation'] = translation return result else: def translatecb(m): m = m.groupdict() lockey = m.get('key') or m.get('key_emb') loctext = m.get('value') or m.get('value_emb') loclang = m.get('lang') or m.get('lang_emb') or 'en' if not lockey: lockey = flatten(loctext) lockey = '%s_%s' %(loclang,lockey) translation_dict = self.localizationDict.get(lockey) if translation_dict: translation = translation_dict.get(language) if not translation: result['status'] = 'NOLANG' translation = translation_dict.get('en') or translation_dict.get('base') return translation else: result['status'] = 'NOKEY' return loctext result['translation'] = TRANSLATION.sub(translatecb,txt) if txt else '' return result def autoTranslate(self,languages): languages = languages.split(',') def cb(m): safekey = '[%i]' %len(safedict) safedict[safekey] = m.group(1) return safekey for lockey,locdict in self.localizationDict.items(): safedict = dict() base_to_translate = SAFEAUTOTRANSLATE.sub(cb,locdict['base']) baselang = lockey.split('_',1)[0] for lang in languages: if lang==baselang: locdict[lang] = base_to_translate continue if not locdict.get(lang): translated = self.translator.translate(base_to_translate,lang) for k,v in safedict.items(): translated = translated.replace(k,v) locdict[lang] = translated def getLocalizationBag(self,locfolder): destpath = os.path.join(locfolder,'localization.xml') if os.path.exists(destpath): try: locbag = Bag(destpath) except Exception: locbag = Bag() else: locbag = Bag() return locbag def updateLocalizationDict(self,locbag,language=None): locdict = {} if locbag.filter(lambda n: n.attr.get('_key')): for n in locbag: loc = n.attr key = loc.pop('_key',None) if key: loc.pop('_T',None) loc['base'] = key locdict[flatten(key)] = loc else: def cb(n): if not n.value: loc = dict(n.attr) locdict_key = n.label if len(n.label)<3 or n.label[2]!='_': locdict_key = '%s_%s' %(language,n.label) locdict[locdict_key] = loc locbag.walk(cb) self.localizationDict.update(locdict) def updateLocalizationFiles(self,scan_all=True): for s in self.slots: if scan_all or s['destFolder'] != self.genroroot: locbag = Bag() for root in s['roots']: d = DirectoryResolver(root,include='*.py,*.js')() d.walk(self._updateModuleLocalization,locbag=locbag,_mode='deep',destFolder=s['destFolder'] ) locbag.toXml(os.path.join(s['destFolder'],'localization.xml'),pretty=True,typeattrs=False, typevalue=False) self.buildLocalizationDict() def _updateModuleLocalization(self,n,locbag=None,destFolder=None): if n.attr.get('file_ext') == 'directory': return moduleLocBag = Bag() def addToLocalizationBag(m): lockey = m.group('key_emb') or m.group('key') loctext = m.group('text_emb') or m.group('text') or m.group('text_func') loclang = m.group('lang_emb') or m.group('lang') or 'en' if not loctext: return lockey = lockey or flatten(loctext) lockey = '%s_%s' %(loclang,lockey) if not lockey in moduleLocBag: locdict = dict(self.localizationDict.get(lockey) or dict()) locdict['base'] = loctext moduleLocBag.setItem(lockey,None,_attributes=locdict) with open(n.attr['abs_path'],'r') as f: filecontent = f.read() LOCREGEXP.sub(addToLocalizationBag,filecontent) if moduleLocBag: modulepath = os.path.relpath(n.attr['abs_path'],destFolder) path,ext = os.path.splitext(modulepath) locbag.setItem(path.replace('/','.'),moduleLocBag,path=modulepath,ext=ext.replace('.',''))
class AppLocalizer(object): def __init__(self, application=None): self.application = application self.genroroot = getGenroRoot() try: from goslate import Goslate self.translator = Goslate() self.languages = self.translator.get_languages() except: self.translator = False self.languages = dict(en='English', it='Italian') roots = [ os.path.join(self.genroroot, n) for n in ('gnrpy/gnr', 'gnrjs', 'resources/common', 'resources/mobile') ] self.slots = [ dict(roots=roots, destFolder=self.genroroot, code='core', protected=True, language='en') ] for p in self.application.packages.values(): self.slots.append( dict(roots=[p.packageFolder], destFolder=p.packageFolder, code=p.id, protected=(p.project == 'gnrcore'), language=p.language)) #if os.path.exists(self.application.customFolder): # self.slots.append(dict(roots=[self.application.customFolder],destFolder=self.application.customFolder, # code='customization',protected=False)) self.buildLocalizationDict() def buildLocalizationDict(self): self.updatableLocBags = dict(all=[], unprotected=[]) self.localizationDict = dict() for s in self.slots: if not s['protected']: self.updatableLocBags['unprotected'].append(s['destFolder']) self.updatableLocBags['all'].append(s['destFolder']) locbag = self.getLocalizationBag(s['destFolder']) if locbag: self.updateLocalizationDict(locbag, s['language']) def translate(self, txt, language=None): return self.getTranslation(txt, language=language)['translation'] def getTranslation(self, txt, language=None): language = (language or self.application.locale).split('-')[0].lower() result = dict(status='OK', translation=None) if isinstance(txt, GnrLocString): lockey = txt.lockey translation_dict = self.localizationDict.get(lockey) if translation_dict: translation = translation_dict.get(language) if not translation: result['status'] = 'NOLANG' translation = translation_dict.get( 'en') or translation_dict.get('base') if txt.args or txt.kwargs: translation = translation.__mod__(*txt.args, **txt.kwargs) else: result['status'] = 'NOKEY' translation = txt result['translation'] = translation return result else: def translatecb(m): m = m.groupdict() lockey = m.get('key') or m.get('key_emb') loctext = m.get('value') or m.get('value_emb') loclang = m.get('lang') or m.get('lang_emb') or 'en' if not lockey: lockey = flatten(loctext) lockey = '%s_%s' % (loclang, lockey) translation_dict = self.localizationDict.get(lockey) if translation_dict: translation = translation_dict.get(language) if not translation: result['status'] = 'NOLANG' translation = translation_dict.get( 'en') or translation_dict.get('base') return translation else: result['status'] = 'NOKEY' return loctext result['translation'] = TRANSLATION.sub(translatecb, txt) if txt else '' return result def autoTranslate(self, languages): languages = languages.split(',') def cb(m): safekey = '[%i]' % len(safedict) safedict[safekey] = m.group(1) return safekey for lockey, locdict in self.localizationDict.items(): safedict = dict() base_to_translate = SAFEAUTOTRANSLATE.sub(cb, locdict['base']) baselang = lockey.split('_', 1)[0] for lang in languages: if lang == baselang: locdict[lang] = base_to_translate continue if not locdict.get(lang): translated = self.translator.translate( base_to_translate, lang) for k, v in safedict.items(): translated = translated.replace(k, v) locdict[lang] = translated def getLocalizationBag(self, locfolder): destpath = os.path.join(locfolder, 'localization.xml') if os.path.exists(destpath): try: locbag = Bag(destpath) except Exception: locbag = Bag() else: locbag = Bag() return locbag def updateLocalizationDict(self, locbag, language=None): locdict = {} if locbag.filter(lambda n: n.attr.get('_key')): for n in locbag: loc = n.attr key = loc.pop('_key', None) if key: loc.pop('_T', None) loc['base'] = key locdict[flatten(key)] = loc else: def cb(n): if not n.value: loc = dict(n.attr) locdict_key = n.label if len(n.label) < 3 or n.label[2] != '_': locdict_key = '%s_%s' % (language, n.label) locdict[locdict_key] = loc locbag.walk(cb) self.localizationDict.update(locdict) def updateLocalizationFiles(self, scan_all=True): for s in self.slots: if scan_all or s['destFolder'] != self.genroroot: locbag = Bag() for root in s['roots']: d = DirectoryResolver(root, include='*.py,*.js')() d.walk(self._updateModuleLocalization, locbag=locbag, _mode='deep', destFolder=s['destFolder']) locbag.toXml(os.path.join(s['destFolder'], 'localization.xml'), pretty=True, typeattrs=False, typevalue=False) self.buildLocalizationDict() def _updateModuleLocalization(self, n, locbag=None, destFolder=None): if n.attr.get('file_ext') == 'directory': return moduleLocBag = Bag() def addToLocalizationBag(m): lockey = m.group('key_emb') or m.group('key') loctext = m.group('text_emb') or m.group('text') or m.group( 'text_func') loclang = m.group('lang_emb') or m.group('lang') or 'en' if not loctext: return lockey = lockey or flatten(loctext) lockey = '%s_%s' % (loclang, lockey) if not lockey in moduleLocBag: locdict = dict(self.localizationDict.get(lockey) or dict()) locdict['base'] = loctext moduleLocBag.setItem(lockey, None, _attributes=locdict) with open(n.attr['abs_path'], 'r') as f: filecontent = f.read() LOCREGEXP.sub(addToLocalizationBag, filecontent) if moduleLocBag: modulepath = os.path.relpath(n.attr['abs_path'], destFolder) path, ext = os.path.splitext(modulepath) locbag.setItem(path.replace('/', '.'), moduleLocBag, path=modulepath, ext=ext.replace('.', ''))
print(game.get_position()) game_over = not game.get_status() == 'guessing' if game.get_status() == 'won': print('Congratulations! You guessed the word correctly.') else: print(f'The word to be guessed is: {game.get_word()}') print('I am sure you will do better next time. :)\n') # This section is different from the other example. # It helps the player learn something new about word they did not guess. # PyDictionary uses Goslate to translate text. Hence, Goslate is used to # get the avialable languages. gs = Goslate() languages = list(gs.get_languages()) dictionary = PyDictionary(game.get_word()) func_dict = { 'Synonyms': dictionary.getSynonyms, 'Antonyms': dictionary.getAntonyms, 'Translation': dictionary.translateTo } lang = random.choice(languages) func_name = random.choice(list(func_dict.keys())) function = func_dict[func_name] if func_name == 'Translation': fun_fact = function(language=lang)[0] func_name = f'{func_name.capitalize()} to {lang}'
parser = argparse.ArgumentParser() parser.add_argument('-i', '--input', help='input help') parser.add_argument('-o', '--output', help='output help') parser.add_argument('source_language', type=str) parser.add_argument('target_language', type=str) args = parser.parse_args(); input_dir = args.input if args.input is not None else 'i18n' output_dir = args.output if args.output is not None else 'i18n' source_language = args.source_language.lower() target_language = args.target_language.lower() supported = [x.lower() for x in gs.get_languages().keys()] if source_language not in supported: exit('{0} not supported.'.format(source_language)) if target_language not in supported: exit('{0} not supported.'.format(target_language)) source_dir = join(input_dir, source_language) target_dir = join(output_dir, target_language) for root, dirs, files in os.walk(source_dir): for filename in files: filepath = join(root, filename) outpath = join(target_dir, filename)