Make consistent use of current locale and allow subclasses to override it