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):
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.
u'English'
>>> Locale('en', 'US').display_name
u'English (United States)'
+ >>> Locale('sv').display_name
+ u'svenska'
:type: `unicode`
""")
_cache = {}
_cache_lock = threading.RLock()
+_dirname = os.path.join(os.path.dirname(__file__), 'localedata')
+
+def exists(name):
+ """Check whether locale data is available for the given locale.
+
+ :param name: the locale identifier string
+ :return: `True` if the locale data exists, `False` otherwise
+ :rtype: `bool`
+ """
+ if name in _cache:
+ return True
+ return os.path.exists(os.path.join(_dirname, '%s.dat' % name))
def load(name):
"""Load the locale data for the given locale.
else:
parent = '_'.join(parts[:-1])
data = load(parent).copy()
- filename = os.path.join(os.path.dirname(__file__),
- 'localedata/%s.dat' % name)
+ filename = os.path.join(_dirname, '%s.dat' % name)
fileobj = open(filename, 'rb')
try:
if name != 'root':