def add_localized_route(config, name, pattern, factory=None, pregenerator=None, **kw): orig_factory = factory def wrapper_factory(request): lang = request.matchdict['lang'] # determine if this is a supported lang and convert it to a locale, # likely defaulting to your default language if the requested one is # not supported by your app request._LOCALE_ = lang if orig_factory: return orig_factory(request) orig_pregenerator = pregenerator def wrapper_pregenerator(request, elements, kw): if 'lang' not in kw: # not quite right but figure out how to convert request._LOCALE_ back into a language url kw['lang'] = request._LOCALE_ if orig_pregenerator: return orig_pregenerator(elements, kw) return elements, kw if pattern.startswith('/'): pattern = pattern[1:] pattern = '/{lang}/' + pattern config.add_route(name, pattern, factory=factory, pregenerator=pregenerator, **kw) def inclueme(config): config.add_directive('add_localized_route', add_localized_route)