What exactly determines what is inserted by self-insert-command? If I change the input-method to greek, p will insert π, but will still be bound to self-insert-command, though it patently does not insert itself. C-h k p will say that p is still bound to self-insert-command and that p was translated to π, but says nothing more about this translation. Any hints as to how I might have found the answer to this myself (using EMACS) would be appreciated too.
PS. I realize the question may not be entirely clear. To put it differently, what is the simplest way to let a insert foo, while remaining bound to self-insert-command? Does this have to be done by an input method, or does translation indicate something more general?