------------------------------------------------------------------------ r11691 | cboos | 2013-02-18 23:41:58 +0100 (Mon, 18 Feb 2013) | 15 lines 1.0.2dev: second follow-up to r11689, no need for `check_catalog` param. `get_available_locales()` is defined in translation.py and clearly states that it corresponds to the list of locale identifiers for which //translations// are available. Which really means that checking for the presence of the compiled catalog is always the right thing to do (modulo the 'en_US' exception). The appropriate fix for `parse_date()` should have been to use the list of locales for which we have //date localization information// available, what the available translations are doesn't matter here. That list corresponds to what Babel provides, so we use now for that `get_known_locales` (= `babel.localedata.list`). Index: trac/util/datefmt.py =================================================================== --- trac/util/datefmt.py (revision 11690) +++ trac/util/datefmt.py (revision 11691) @@ -36,12 +36,16 @@ get_time_format, get_month_names, get_period_names, get_day_names ) + from babel.localedata import list as get_known_locales + except ImportError: babel = None + def get_known_locales(): + return [] from trac.core import TracError from trac.util.text import to_unicode, getpreferredencoding -from trac.util.translation import _, ngettext, get_available_locales +from trac.util.translation import _, ngettext # Date/time utilities @@ -534,8 +538,7 @@ 'period_names': period_names, } -_I18N_PARSE_DATE_PATTERNS = dict( - (l, False) for l in get_available_locales(check_catalog=False)) +_I18N_PARSE_DATE_PATTERNS = dict((l, False) for l in get_known_locales()) def _i18n_parse_date(text, tzinfo, locale): locale = Locale.parse(locale) Index: trac/util/translation.py =================================================================== --- trac/util/translation.py (revision 11690) +++ trac/util/translation.py (revision 11691) @@ -330,20 +330,16 @@ def get_translations(): return translations - def get_available_locales(check_catalog=True): + def get_available_locales(): """Return a list of locale identifiers of the locales for which translations are available. - - :param check_catalog: if `True` check for the compiled catalog - (.mo), otherwise the presence of the - directory is enough. """ try: locales = [dirname for dirname in pkg_resources.resource_listdir('trac', 'locale') if '.' not in dirname - and (not check_catalog or pkg_resources.resource_exists( - 'trac', 'locale/%s/LC_MESSAGES/messages.mo' % dirname))] + and pkg_resources.resource_exists( + 'trac', 'locale/%s/LC_MESSAGES/messages.mo' % dirname)] if 'en_US' not in locales: locales.append('en_US') return locales ------------------------------------------------------------------------