Changing the locale temporary

This piece of code allows the quickly set the locale to a different language. This can be used for instance in cron jobs to send emails to users in their specific language.

This is pretty rough code, it be better to create an object, having two functions: set_locale and reset_locale. set_locale would than contain steps 1 to 4 (and return the request object on succes), reset_locale would be step 6

Enjoy!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

fromdjango.utils.translationimportcheck_for_language,activate,deactivate,to_locale,get_language,ugettextas_fromdjango.httpimportHttpRequestfromdjango.template.loaderimportrender_to_stringfromdjango.templateimportRequestContextfromdjango.contrib.sessions.middlewareimportSessionMiddleware# 1. Getting the current language: (if any)cur_locale=to_locale(get_language())# 2. create a request (& optionally add session middleware)request=HttpRequest()SessionMiddleware().process_request(request)# 3. activate the temporary language: this loads the translation filestarget_language="nl"# this could be a function call, loaded from a UserProfile, ...ifcheck_for_language(target_language):activate(target_language)locale=to_locale(get_language())# 4. set the language code in the request (& optionally session)request.LANGUAGE_CODE=localerequest.session['django_language']=locale# 5. example rendering of content:msg_dict={'title':_('This is the title and will be translated'),'body':_('Message body')}rendered=render_to_string("some_template.html",msg_dict,RequestContext(request));# 6. reset back to the old locale:deactivate()