Yeah, I don't know what to do about "existing admin". Actually, I think I'm going to have to convert it, because we'll be ready first (and the existing i18n string problems are hurting people). However, I am going to leave it until the absolutely last thing to do so that there's still a chance it won't need to be done.

Patch itself looks good. In django/oldforms/__init__.py, is the explicit use of

unicode(self).encode('utf-8')

rather than smart_string(self) because you like messing with my head or for a good technical reason? I don't really mind -- so don't bother changing it -- since I suspect there's no difference here, but the fact that you are writing it this way makes me think you are doing it for a reason.

This explicit unicode(self) is because this same class has __unicode__ defined so we don't need smart_str to check if it's there or not. Besides wouldn't calling smart_str inside of __str__ lead to an infinite recursion?

(In [5090]) unicode: Fixed #4161 -- Ported oldforms internal string handling across to use
unicode. Still some breakage in admin, but that is caused by other problems.
Another contribution from Ivan Sagalaev.