Manually activating a language to translate to in Django

I was i18n-ing a django application. Django has i18n and translations built in, however it uses a very clever automatic way to decide what language to use based on sessions, cookies, etc.. However I was writing a work processes that sat in the background, didn't handle http requests, and just sent emails. I wanted these emails to be translated into the users language.

After looking through the django source code, I figured out what I had to do, turns out Django fully supports doing this. You just have to 'activate' the language code you want and everything will just work automatically:

from django.utils import translation translation.activate("fr") my_string = _("Yes")

You can get the current language with get_language(). So if you only want to use the new language for a bit and then switch back to the old one, you have to store that.

from django.utils import translation old_lang = translations.get_language() translation.activate("fr") my_string = _("Yes") translation.activate(old_lang)

I asked this question on StackOverflow - Django switching, for a block of code, switch the language so translations are done in one language

This entry is tagged: