Aaaaalso, warum man das ganze ueberhaupt macht hat schon nen guten Grund. Bei N_ (und vielmehr noch bei _) handelt es sich um Funktionen, die von gettext verwandt werden, um Texte zur Laufzeit zu uebersetzen.
Warum muessen die jetzt in das __builtins__ gepruegelt werden? Ganz einfach - wenn man viele Module verschiedener Herkunft verwendet, dann muessen die ja alle auf dieselbe Funktion zurueckgreifen fuer die Uebersetzung. Theoretisch koennten sie das dadurch, das man in jedem Modul immer sowas wie "from gettext import translate as _" einbaut. Das hat man aber wohl als nervig empfunden. Deswegen bietet schon das gettext-modul selbst eine Funktion, den builtins-namespace "anzureichern":
http://docs.python.org/library/gettext. ... xt.install
Und ausserdem haette man dann ein Problem: die Implementation waere festgelegt. Das ist oft egal, aber zB im Fall von TurboGears/Pylons/formencode waere das katastrophal, denn dort werden die Uebersetzungs-Kataloge je nach eingehendem Request und dessen Spracheinstellungen transparent "umgebogen".
Es ist insgesamt ein etwas ekliges Thema, und haette bestimmt auch besser geloest werden koennen, indem man gettext einfach beibringt, fuer _ eine Registry/Factory zu benutzen, die einfach von einem Programm konfiguriert wird. Aber es ist wie es ist...