Again, I believe that's exactly the point Cris was making - running a million executions of a code block is not something which happens in real life. In practice, chances are the speed loss will be negligible in most real world situations.
I've seen code where people do things like write their own specialized version of pack/unpack, which call string function a couple hundred times. What seems like a nice, tight, fast little piece of code becomes extremely expensive. Do people do this with gettext()? Probably (hopefully) not. I'm just responding to the 'calling a userland function has a negligible marginal cost when compared to a builtin' conjecture.