Gettext behaviour is controlled by global variables. So if a single process wants to serve several users with different languages, it has to set locale before each print. A simplest example is a web application -- if you set locale, it will affect not just output to the user, but also what application will write in the error log, and generally people don't want to deal with a mix of languages in their logs.