It seems that there is a broader problem with the way that the button
is embedded within the label of a checkbox; even on Chrome it meant
that the checkbox active state was triggered when clicking on any of
the buttons. The user experience was in any case confusing; it wasn’t
obvious that clicking on the label to the right of the button would
flick the checkbox.
The solution takes the buttons and labels out of the checkbox label.
Still quite a few details to work out, but this shows the basic idea of
re-using the theme mechanism to handle language plugins.
Comments and questions welcome.