I use :after whenever possible, using attr() from data- attrs for anything beyond "known" buttons like on/off. When :after isn't possible, I switch data- attrs using JS. I know what you mean about it not feeling right. But then again, the way you build buttons and maintain string resources in Visual C++, etc. always felt even worse!
-- Sandy
