def transfield_changed(field, initial, data):
    initial = [(k, v.localized_string) for k, v in initial.iteritems()
               if '%s_' % field in k and v is not None]
    data = [('%s_%s' % (field, k), v) for k, v in data[field].iteritems()
            if k != 'init']
    return set(initial) != set(data)
For forms, compares initial data against cleaned_data for TransFields.
dataset/ETHPy150Open mozilla/addons-server/src/olympia/translations/utils.py/transfield_changed