Попытаюсь выразиться поточнее чем в первый раз, а то изза недопонимания один флейм пойдёт:1) Интернационализация обычно требуется как для интерфейса самой програмы, так и для контента, с которым эта программа работает.
2) В "настольных" программах в основном требуется именно интернационализация интерфейса, для доступности программы большему кругу пользователей. Сами пользователи обычно работают с более-менее одноязычным контентом, или во всяком случае ведут несколько языков не синхронно.
Тексты интерфейсов обычно транслируются на этапе разработки, программа попадает к пользователю в готовом виде и в процессе использования уже не дорабатывается.
Для такого применения gettext подходит прекрасно, и по праву популярен, хотя и не необходим. Видимо, большенству разработчиков хватает ума не изобретать заново такой простенький велосипедик...
3) Веб-приложения динамичны по своей природе, и интернационализировать приходится именно динамический контент, объём которого значительно преобладает над объёмом текстов интерфейса. Особенно для cms систем, где сами пользовательские интерфейсы - чистейшая динамика, а "статична" только администрация. А работать с динамикой gettext не умеет, поэтому всегда приходится создавать отдельную систему интернационализации и интерфейсы к ней. И задействовать к ней параллельно ещё и gettext - исключительно дань привычке, других причин я не вижу. Это моё мнение; будут аргументы против - пожалуйста, пойдёт всем на пользу. Но производительность - не аргумент, поскольку на фоне нагрузки на отдачу динамики этот выигрыш никакой погоды не делает.