Question: I want to use gettext for i18n. But I need to translate messeges to a different languages. Is it possible to specify a locale for a one gettext call?

Answer: 
If you use multiple threads then you can use gettext if you use the locale-related facilities specified in POSIX.1-2008 (and implemented in GLIBC 2.3). The key function you would use is [`uselocale`](http://pubs.opengroup.org/onlinepubs/9699919799/functions/uselocale.html), which is a bit like `setlocale` but for the current thread only.

If you are using Windows then you are out of luck--MSVCRT does not provide an equivalent to `uselocale`, and I believe on that platform libintl emulates `setlocale` itself, in a non-thread-safe way IIRC.
As you can see from [Replacements for gettext](https://stackoverflow.com/questions/1537538/replacements-for-gettext) 
I had similar problems, only it gets worse if you have to support more platforms.

Basically gettext is only really suitable for single-threaded interactive programs.

If you have the chance then a different translation system (ICU looks quite nice).

Otherwise there are a few libraries that read .mo files directly, and can provide the translation as you want:

<http://art-blog.no-ip.info/cppcms/blog/post/16>