From ec0fc05e3918782dbb29f9f6901c0de22419134d Mon Sep 17 00:00:00 2001 From: kali Date: Fri, 21 Dec 2012 10:28:46 +0900 Subject: magic translatable objects --- src/leap/util/translations.py | 43 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 9 deletions(-) (limited to 'src/leap/util/translations.py') diff --git a/src/leap/util/translations.py b/src/leap/util/translations.py index c06aa947..14b8c020 100644 --- a/src/leap/util/translations.py +++ b/src/leap/util/translations.py @@ -1,6 +1,10 @@ import inspect +import logging from PyQt4.QtCore import QCoreApplication +from PyQt4.QtCore import QLocale + +logger = logging.getLogger(__name__) """ here I could not do all that I wanted. @@ -20,15 +24,12 @@ I guess we could generate the xml for ourselves as a last recourse. qtTranslate = QCoreApplication.translate -class LEAPTr: - pass - - -def translate(*args): +def translate(*args, **kwargs): """ + our magic function. translate(Context, text, comment) """ - print 'translating...' + #print 'translating...' klsname = None try: # get class value from instance @@ -37,7 +38,7 @@ def translate(*args): self = inspect.getargvalues(prev_frame).locals.get('self') if self: # XXX will this work with QObject wrapper?? - if isinstance(LEAPTr, self) and hasattr(self, 'tr'): + if isinstance(LEAPTranslatable, self) and hasattr(self, 'tr'): print "we got a self in base class" return self.tr(*args) @@ -45,9 +46,10 @@ def translate(*args): # but this is useless, the parser # has already got the context. klsname = self.__class__.__name__ - print 'KLSNAME -- ', klsname + #print 'KLSNAME -- ', klsname except: - print 'error getting stack frame' + logger.error('error getting stack frame') + #print 'error getting stack frame' if klsname: nargs = (klsname,) + args @@ -56,3 +58,26 @@ def translate(*args): else: nargs = ('default', ) + args return qtTranslate(*nargs) + + +class LEAPTranslatable(dict): + """ + An extended dict that implements a .tr method + so it can be translated on the fly by our + magic translate method + """ + + try: + locale = str(QLocale.system().name()).split('_')[0] + except: + logger.warning("could not get system locale!") + print "could not get system locale!" + locale = "en" + + def tr(self, to=None): + if not to: + to = self.locale + _tr = self.get(to, None) + if not _tr: + _tr = self.get("en", None) + return _tr -- cgit v1.2.3