Esempio n. 1
0
def smart_gettext_and_install(domain, localedir, languages,
                              fallback=False, unicode=False):
    try:
        t = gettext.translation(domain, localedir, languages=languages,
                                fallback=fallback)
    except Exception, e:
        # if we failed to find the language, fetch it from the web async-style
        running_count = 0
        running_deferred = {}

        # Get some reasonable defaults for arguments that were not supplied
        if languages is None:
            languages = []
            for envar in ('LANGUAGE', 'LC_ALL', 'LC_MESSAGES', 'LANG'):
                val = os.environ.get(envar)
                if val:
                    languages = val.split(':')
                    break
            if 'C' not in languages:
                languages.append('C')

        # now normalize and expand the languages
        nelangs = []
        for lang in languages:
            for nelang in gettext._expand_lang(lang):
                if nelang not in nelangs:
                    nelangs.append(nelang)
        languages = nelangs

        for lang in languages:
            d = ThreadedDeferred(None, get_language, lang)
            def translate_and_install(r, td=d):
                running_deferred.pop(td)
                # only let the last one try to install
                if len(running_deferred) == 0:
                    t = gettext.translation(domain, localedir,
                                            languages=languages,
                                            fallback=True)
                    t.install(unicode)
            def failed(e, tlang=lang, td=d):
                if td in running_deferred:
                    running_deferred.pop(td)
                # don't raise an error, just continue untranslated
                sys.stderr.write('Could not find translation for language "%s"\n' %
                                 tlang)
                #traceback.print_exc(e)
            d.addCallback(translate_and_install)
            d.addErrback(failed)
            # accumulate all the deferreds first
            running_deferred[d] = 1

        # start them all, the last one finished will install the language
        for d in running_deferred:
            d.start()

        return
Esempio n. 2
0
    def set_language(self, *a):
        index = self.choice.GetSelection()
        if index >= len(self.languages):
            return
        l = self.languages[index]
        if not self.valid:
            self.choice.Delete(len(self.languages))
            self.choice.SetSelection(index)
            self.valid = True
            self.box_sizer.Detach(0)
            self.top_error.Destroy()
            self.box_sizer.Layout()
            self.sizer.Layout()

        d = ThreadedDeferred(gui_wrap, write_language_file, l)
        d.addErrback(lambda e: self.set_language_failed(e, l))
        d.addCallback(lambda r: self.language_was_set())
    def set_language(self, *a):
        index = self.choice.GetSelection()
        if index >= len(self.languages):
            return
        l = self.languages[index]
        if not self.valid:
            self.choice.Delete(len(self.languages))
            self.choice.SetSelection(index)
            self.valid = True
            self.box_sizer.Detach(0)
            self.top_error.Destroy()
            self.box_sizer.Layout()
            self.sizer.Layout()

        d = ThreadedDeferred(gui_wrap, write_language_file, l)
        d.addErrback(lambda e: self.set_language_failed(e, l))
        d.addCallback(lambda r: self.language_was_set())
Esempio n. 4
0
def smart_gettext_and_install(domain,
                              localedir,
                              languages,
                              fallback=False,
                              unicode=False):
    try:
        t = gettext.translation(domain,
                                localedir,
                                languages=languages,
                                fallback=fallback)
    except Exception, e:
        # if we failed to find the language, fetch it from the web async-style
        running_count = 0
        running_deferred = {}

        # Get some reasonable defaults for arguments that were not supplied
        if languages is None:
            languages = []
            for envar in ('LANGUAGE', 'LC_ALL', 'LC_MESSAGES', 'LANG'):
                val = os.environ.get(envar)
                if val:
                    languages = val.split(':')
                    break
            if 'C' not in languages:
                languages.append('C')

        # now normalize and expand the languages
        nelangs = []
        for lang in languages:
            for nelang in gettext._expand_lang(lang):
                if nelang not in nelangs:
                    nelangs.append(nelang)
        languages = nelangs

        for lang in languages:
            d = ThreadedDeferred(None, get_language, lang)

            def translate_and_install(r, td=d):
                running_deferred.pop(td)
                # only let the last one try to install
                if len(running_deferred) == 0:
                    t = gettext.translation(domain,
                                            localedir,
                                            languages=languages,
                                            fallback=True)
                    t.install(unicode)

            def failed(e, tlang=lang, td=d):
                if td in running_deferred:
                    running_deferred.pop(td)
                # don't raise an error, just continue untranslated
                sys.stderr.write(
                    'Could not find translation for language "%s"\n' % tlang)
                #traceback.print_exc(e)

            d.addCallback(translate_and_install)
            d.addErrback(failed)
            # accumulate all the deferreds first
            running_deferred[d] = 1

        # start them all, the last one finished will install the language
        for d in running_deferred:
            d.start()

        return