Changeset 436

Show
Ignore:
Timestamp:
Tue Jul 17 23:30:10 2007
Author:
djfroofy
Message:

- i18n (TODO - testing)

Files:

Legend:

Unmodified
Added
Removed
Modified
  • subprojects/Wuming/trunk/wuming/test/test_docs.py

    r430 r436  
    1   from wuming import web, auth  
    2    
    3   __doctests__ = [ web, auth ]  
      1 from wuming import web, auth, i18n  
      2 __doctests__ = [ web, auth, i18n ]  
    4 3  
  • subprojects/Wuming/trunk/wuming/i18n.py

    r423 r436  
    3 3 from wuming.interfaces import ITranslator, ITranslationStrategy  
    4 4  
    5   import gettext  
      5 from zope.interface import implements  
    5 5  
      6 import weakref  
    6 7  
    7 8 class GettextTranslator(object):  
    8 9     """  
      10     >>> from zope.interface.verify import verifyClass, verifyObject  
      11     >>> verifyClass(ITranslator, GettextTranslator)  
      12     True  
      13     >>> verifyObject(ITranslator, GettextTranslator())  
      14     True  
    9 15     """  
      16  
    10 17     implements(ITranslator)  
    11 18  
      19     domain = None  
      20     localedir = None  
      21     fallback = True  
      22     _tsl_cache = weakref.WeakValueDictionary()  
      23     gettextFunction = 'ugettext'  
      24     _last = []  
      25  
      26     def __init__(self, domain=None, localedir=None, fallback=None):  
      27         pass  
      28  
      29     def _initTranslation(self, languages, domain):  
      30         import gettext  
      31         translation = gettext.translation(  
      32             domain=domain,  
      33             localedir=self.localedir,  
      34             languages=languages,  
      35             fallback=True,  
      36         )  
      37         f = getattr(translation, self.gettextFunction)  
      38         self._tsl_cache[(domain, languages)] = f  
      39         return f  
      40  
      41     def translate(self, s, languages, domain=None):  
      42         """Example usage  
      43  
      44         >>> tsl = GettextTranslator()  
      45         >>> tsl.translate('Hello', None)  
      46         u'Hello'  
      47         """  
      48         domain = domain or self.domain  
      49         tsl = self._tsl_cache.get((domain, languages), None)  
      50         if tsl is None:  
      51             tsl = self._initTranslation(languages, domain)  
      52         # keep some references for stronger caching  
      53         if tsl not in self._last:  
      54             if len(self._last) > 5:  
      55                 self._last.pop(0)  
      56             self._last.append(tsl)  
      57         return tsl(s)  
      58  
      59 _ = GettextTranslator()  
      60  
    12 61 class AcceptLangStrategy(object):  
    13 62     """This is a ITranslationStrategy implementation that use accept-language from  
    14 63     request header to find the best translator.  
      64  
      65     >>> from zope.interface.verify import verifyClass, verifyObject  
      66     >>> verifyClass(ITranslationStrategy, AcceptLangStrategy)  
      67     True  
      68     >>> verifyObject(ITranslationStrategy, AcceptLangStrategy())  
      69     True  
    15 70     """  
    16 71  
  • subprojects/Wuming/trunk/wuming/auth.py

    r435 r436  
    118 118  
    119 119 class NamelessVisitor:  
      120     """  
      121     >>> from zope.interface.verify import verifyClass, verifyObject  
      122     >>> verifyClass(INamelessVisitor, NamelessVisitor)  
      123     True  
      124     >>> verifyObject(INamelessVisitor, NamelessVisitor('abc'))  
      125     True  
      126     """  
    120 127     implements(INamelessVisitor)  
    121 128     def __init__(self, visitor_id):  
  • subprojects/Wuming/trunk/wuming/interfaces.py

    r434 r436  
    43 43     """  
    44 44  
    45       def translate(s):  
      45     def translate(s, languages, domain=None):  
    45 45         """translate a string s to target language  
    46 46         @param s: a string to translate  
      47         @param languages: a list of languages, e.g. ['en', 'ja']  
      48         @param domain: optional domain arguments (e.g. 'foodomain')  
    47 49         @return a translated string  
    48 50         """  
     
    52 54  
    53 55     def getTranslator(resource, request):  
    54           """get a ITranslator provider  
      56         """get a ITranslator provider for the given resource/request  
    54 56  
    55 57         @return a ITranslator provider