Вы можете попробовать использовать пользовательский виджет в форме, чтобы сортировка происходила непосредственно перед тем, как django сделает перевод Может быть, этот фрагмент из моего текущего проекта может помочь
import locale
from django_countries.countries import COUNTRIES
from django.forms import Select, Form, ChoiceField
class CountryWidget(Select):
def render_options(self, *args, **kwargs):
# this is the meat, the choices list is sorted depending on the forced
# translation of the full country name. self.choices (i.e. COUNTRIES)
# looks like this [('DE':_("Germany")),('AT', _("Austria")), ..]
# sorting in-place might be not the best idea but it works fine for me
self.choices.sort(cmp=lambda e1, e2: locale.strcoll(unicode(e1[1]),
unicode(e2[1])))
return super(CountryWidget, self).render_options(*args, **kwargs)
class AddressForm(Form):
sender_country = ChoiceField(COUNTRIES, widget=CountryWidget, initial='DE')