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 -->