You can `ERROR_MSG = _('This field requires a username, not a URL.')` to have this translated at this point.

I realized that the file uses `_lazy` in other validators too, while it shouldn't.
 * We use `_lazy` when the string is evaluated at startup, e.g. in field definitions of models.
 * We use `_` when the string is evaluated at run.

For example this line would run on every `validate_username_not_url` run, thus we should directly translate the string, instead of returns a lazy object, a "promise" that this will be translated. 

Please fix this by importing `from tower import ugettext as _`. If you don't mind change `_lazy_` to `_` in other validators as well. If you do this, don't forget to remove the `_lazy` import.