Можно ли указать для каждого потока в Linux?
Да, вы вроде как можете это сделать. Однако не для отдельных пользователей, а только для отдельных вызовов с использованием структур locale_t.
Подробнее об этом можно узнать на POSIX:
http://www.opengroup.org/onlinepubs/9699919799/functions/newlocale.html
И документы Ульриха Дрепппера о том, что в glibc 2.1:
http://people.redhat.com/drepper/tllocale.ps.gz
Нет.setlocale(3) меняет его на весь процесс.
setlocale(3)