I understood from Django Project that you can only use a dummy gettext function:
If you define a custom LANGUAGES setting, as explained in the previous bullet, it's OK to mark the languages as translation strings -- but use a "dummy" ugettext()
function, not the one in django.utils.translation
. You should never import django.utils.translation
from within your settings file, because that module in itself depends on the settings, and that would cause a circular import.".
It took me some time to find the solution, but I finally got it; the choices of the model field needs to have a tuple with real gettext functions, with a lambda function the dummy's can be wrapped in the real gettext functions as follows:
from django.utils.translation import ugettext_lazy as _
language = models.CharField(max_length=5, choices=map(lambda (k,v): (k, _(v)), settings.LANGUAGES), verbose_name=_('language'))