diff babel/core.py @ 41:e967fbafcda1

Load locale data lazily to avoid penalizing usage of `Locale` objects when no locale data is actually needed.
author cmlenz
date Wed, 06 Jun 2007 12:12:44 +0000
parents 3b314a78015d
children 83f3f70c6ca3
line wrap: on
line diff
--- a/babel/core.py
+++ b/babel/core.py
@@ -85,10 +85,10 @@
         self.language = language
         self.territory = territory
         self.variant = variant
+        self.__data = None
+
         identifier = str(self)
-        try:
-            self._data = localedata.load(identifier)
-        except IOError:
+        if not localedata.exists(identifier):
             raise UnknownLocaleError(identifier)
 
     def default(cls, category=None):
@@ -142,13 +142,20 @@
         return '_'.join(filter(None, [self.language, self.territory,
                                       self.variant]))
 
+    def _data(self):
+        if self.__data is None:
+            self.__data = localedata.load(str(self))
+        return self.__data
+    _data = property(_data)
+
     def display_name(self):
         retval = self.languages.get(self.language)
         if self.territory:
             variant = ''
             if self.variant:
                 variant = ', %s' % self.variants.get(self.variant)
-            retval += ' (%s%s)' % (self.territories.get(self.territory), variant)
+            retval += ' (%s%s)' % (self.territories.get(self.territory),
+                                   variant)
         return retval
     display_name = property(display_name, doc="""\
         The localized display name of the locale.
@@ -157,6 +164,8 @@
         u'English'
         >>> Locale('en', 'US').display_name
         u'English (United States)'
+        >>> Locale('sv').display_name
+        u'svenska'
         
         :type: `unicode`
         """)
Copyright (C) 2012-2017 Edgewall Software