It is indeed confusing for languages to be present twice, but why do we need a class here? Wouldn't the following work as well?
```
def all_locales(include_preferences=False):
    def all_locales_mult():
        if self.include_preferences:
            yield c.locale
            yield i18n.get_default_locale()
        for l in i18n.LOCALES:
            yield l

    done = set()
    for value in all_locales_mult():
        if value in self.done:
            continue
        else:
            done.add(value)
            yield value
```

But that's just 9 lines shorter, so nut much in the grand scale of things. Feel free to merge either version.