Meant to do this for a while as it was irritating me (both the lack of multilingual support and the "" option when a default is specified).
Pretty much a copy-paste from sqlhtml.OptionsWidget.widget method with 2 improvements (as per the title): 1) The options get translated using the facility provided by T(string) 2) If you specify a default value for the field, the user-confusing "" doesn't appear in the option-list. Had to manually add a small bit of code to auto-select the default (I guess it was implemented in some other part of the code for OptionsWidget and was lost in the copy-paste). Not sure if other options I'm not using get lost in the translation, but it works well with my stuff so far. If someone else posted a similar solution already, sorry for spamming. The code: def MultilingualOptionsWidget(field, value): default = dict( value=value, ) attr = dict( _id = '%s_%s' % (field._tablename, field.name), _class = isinstance(field.type,str) and field.type or None, _name = field.name, requires = field.requires, ) requires = field.requires if not isinstance(requires, (list, tuple)): requires = [requires] if requires: if hasattr(requires[0], 'options'): options = requires[0].options() if field.default != None: options = options[1:] else: raise SyntaxError, 'widget cannot determine options of %s' \ % field opts = [(OPTION(T(v), _value=k) if k!=field.default else OPTION(T(v), _value=k, _selected='selected')) for (k, v) in options] return SELECT(*opts, **attr)