If would favor the `widget` property approach since altering the `localize` attribute after instantiation won't work. I agree it's really and edge case but I think both of those declaration should be equivalent:

```python
IntegerField(localize=True)
f = IntegerField()
f.localize = True
```

In the case of the `f.localize = True` you have `f.widget.__class__ is NumberInput` which is exactly what we're trying to avoid here.

I know setting the `localize` attribute at that time is not documented but I'm pretty sure the following pattern has been used in the wild (I've been using it :) since you must specify it even if `USE_L10N = True`.

```python
class LocalizedForm(forms.Form):
    def __init__(self, *args, *kwargs):
        super(LocalizedForm, self).__init__(*args, **kwargs)
        localize = settings.USE_L10N
        for field in self.fields.values():
            field.localize = localize
```