Библиотека gettext под windows.
От: pkl  
Дата: 21.12.11 14:40
Оценка:
Здравствуйте!

Нашёл какую-то древнюю сборку 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.