Здравствуйте!
Нашёл какую-то древнюю сборку gettext от 2005 года на sourceforge:
http://gettext.sourceforge.net/, собираю с ней тестовый код с помощью MinGW.
Код приводится ниже. Также создаю mo файл и кладу его в несколько разных каталогов одновременно (пытаясь понять, в какой его класть правильно). Под linux всё заработало при возложении файла .mo в подкаталог ./ru_RU/LC_MESSAGES (от текущего, откуда запускается приложение).
Файл "q1.cpp":
#include <iostream>
#include <libintl.h>
#include <string>
int main(void)
{
std::string domain_name = "domain";
std::cout << setlocale(LC_ALL, "") << "\n";
bindtextdomain( domain_name.c_str(), ".\\locale"); // тут пробовались разные каталоги, в том числе просто "."
textdomain( domain_name.c_str() );
//bind_textdomain_codeset( domain_name.c_str(), "CP1251");
std::cout << gettext("Hello world!") << "\n";
return 0;
}
Скрипт, которым формируется .mo и кладётся в разные каталоги.
g++ q1.cpp -Llib -lgettextlib -lintl -Iinclude -o q1.exe
xgettext -d domain -s -o domain.pot q1.cpp
msginit -l Russian_Russia.cp1251 -o domain.po -i domain.pot
# ручное редактирование перевода, чтобы вставить перевод "qweqweqwe" для "Hello world!":
vim domain.po
msgfmt -c -v -o domain.mo domain.po
mkdir C:\tmp\locale
copy domain.mo C:\tmp\locale
mkdir locale
copy domain.mo locale
mkdir Russian_Russia
mkdir Russian_Russia\LC_MESSAGES
copy domain.mo Russian_Russia
copy domain.mo Russian_Russia\LC_MESSAGES
mkdir Russian_Russia.1251
mkdir Russian_Russia.1251\LC_MESSAGES
copy domain.mo Russian_Russia.1251
copy domain.mo Russian_Russia.1251\LC_MESSAGES