def active_languages(): """Return a sequence of dicts, where each element consists of the following keys: * code: the language code * name: the translated name of this language for each available language.""" global _ACTIVE_LANGUAGES if _ACTIVE_LANGUAGES: return _ACTIVE_LANGUAGES # get a list of avaialable translations domain = base.queryUtility(ITranslationDomain, ccorg_i18n_setup.I18N_DOMAIN) lang_codes = set(domain.getCatalogsInfo().keys()) # determine the intersection of available translations and # launched jurisdiction locales launched_locales = set() jurisdictions = cclicense_functions.get_valid_jurisdictions() for jurisdiction in jurisdictions: query_string = ('PREFIX dc: <http://purl.org/dc/elements/1.1/> ' 'SELECT ?lang WHERE {' ' <%s> dc:language ?lang}') % jurisdiction query = RDF.Query(str(query_string), query_language='sparql') this_juri_locales = set([ locale_to_lower_upper(str(result['lang'])) for result in query.execute(rdf_helper.JURI_MODEL) ]) # Append those locales that are applicable to this domain launched_locales.update(lang_codes.intersection(this_juri_locales)) # XXX: Have to hack in Esperanto here because it's technically an # "Unported" language but there is no unported RDF jurisdiction in # jurisdictions.rdf.. launched_locales.add('eo') # make our sequence have a predictable order launched_locales = list(launched_locales) # this loop is long hand for clarity; it's only done once, so # the additional performance cost should be negligible result = [] for code in launched_locales: if code == 'test': continue gettext = ugettext_for_locale(negotiate_locale(code)) name = gettext(mappers.LANG_MAP[code]) result.append(dict(code=code, name=name)) result = sorted(result, key=lambda lang: lang['name'].lower()) _ACTIVE_LANGUAGES = result return result
def queryNextUtility(context, interface, name='', default=None): """Query for the next available utility. Find the next available utility providing `interface` and having the specified name. If no utility was found, return the specified `default` value. """ try: sm = getSiteManager(context) except ComponentLookupError: return default bases = sm.__bases__ for base in bases: util = base.queryUtility(interface, name, _marker) if util is not _marker: return util return default
def active_languages(): """Return a sequence of dicts, where each element consists of the following keys: * code: the language code * name: the translated name of this language for each available language.""" global _ACTIVE_LANGUAGES if _ACTIVE_LANGUAGES: return _ACTIVE_LANGUAGES # get a list of avaialable translations domain = base.queryUtility(ITranslationDomain, ccorg_i18n_setup.I18N_DOMAIN) lang_codes = set(domain.getCatalogsInfo().keys()) # determine the intersection of available translations and # launched jurisdiction locales launched_locales = set() jurisdictions = cclicense_functions.get_valid_jurisdictions() for jurisdiction in jurisdictions: query_string = ( 'PREFIX dc: <http://purl.org/dc/elements/1.1/> ' 'SELECT ?lang WHERE {' ' <%s> dc:language ?lang}') % jurisdiction query = RDF.Query( str(query_string), query_language='sparql') this_juri_locales = set( [locale_to_lower_upper(str(result['lang'])) for result in query.execute(rdf_helper.JURI_MODEL)]) # Append those locales that are applicable to this domain launched_locales.update(lang_codes.intersection(this_juri_locales)) # XXX: Have to hack in Esperanto here because it's technically an # "Unported" language but there is no unported RDF jurisdiction in # jurisdictions.rdf.. launched_locales.add('eo') # make our sequence have a predictable order launched_locales = list(launched_locales) # this loop is long hand for clarity; it's only done once, so # the additional performance cost should be negligible result = [] for code in launched_locales: if code == 'test': continue gettext = ugettext_for_locale(negotiate_locale(code)) name = gettext(mappers.LANG_MAP[code]) result.append(dict(code=code, name=name)) result = sorted(result, key=lambda lang: lang['name'].lower()) _ACTIVE_LANGUAGES = result return result