Beispiel #1
0
	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'))
Beispiel #2
0
    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'))
Beispiel #3
0
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('.',''))
Beispiel #4
0
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('.', ''))
Beispiel #5
0
        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}'
Beispiel #6
0
    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)