I want to put in my master.kid some icons that allow to change the current language for the session.
First, all user-accessible methods need to handle a 'language' parameter:
@expose(template="myapp.templates.foobar") def index(self, someparam, **kw): if 'language' in kw: turbogears.i18n.set_session_locale(kw['language'])
Then, we need a way to edit the current URL so that we can generate modified links to self that preserve the existing path_info and query parameters. In your main controller, add:
def linkself(**kw): params = {} params.update(cherrypy.request.params) params.update(kw) url = cherrypy.request.browser_url.split('?', 1)[0] return url + '?' + '&'.join(['='.join(x) for x in params.iteritems()]) def add_custom_stdvars(vars): return vars.update({"linkself": linkself}) turbogears.view.variable_providers.append(add_custom_stdvars)
(see the turbogears stdvars documentation and the cherrypy request documentation (cherrypy 2 documentation at the bottom of the page))
And finally, in master.kid:
<div id="footer"> <div id="langselector"> <span class="language"> <a href="${tg.linkself(language='it_IT')}"> <img src="${tg.url('/static/images/it.png')}"/> </a> </span> <span class="language"> <a href="${tg.linkself(language='C')}"> <img src="${tg.url('/static/images/en.png')}"/> </a> </span> </div><!-- langselector --> </div><!-- footer -->