Complete C++ i18n gettext() "hello world" example Complete C++ i18n gettext() "hello world" example linux linux

Complete C++ i18n gettext() "hello world" example


Your problem is that hellogt.mo is in the wrong location - your program isn't actually opening it. You can tell this by using strace to trace open syscalls:

strace -e trace=open ./hellogt...open("/tmp/.//es_MX/LC_MESSAGES/hellogt.mo", O_RDONLY) = -1 ENOENT (No such file or directory)open("/tmp/.//es/LC_MESSAGES/hellogt.mo", O_RDONLY) = -1 ENOENT (No such file or directory)

You can affect where gettext looks for message catalogs with the LOCPATH environment variable, but if you move it to where gettext is attempting to load it from your example works:

mkdir -p es/LC_MESSAGEScp hellogt.mo es/LC_MESSAGES./hellogt hola mundo


cat >hellogt.cxx <<EOF// hellogt.cxx#include <libintl.h>#include <locale.h>#include <iostream>int main (){    setlocale(LC_ALL, "");    bindtextdomain("hellogt", ".");    textdomain( "hellogt");    std::cout << gettext("hello, world!") << std::endl;}EOFg++ -o hellogt hellogt.cxxxgettext --package-name hellogt --package-version 1.2 --default-domain hellogt --output hellogt.pot hellogt.cxxmsginit --no-translator --locale es_MX --output-file hellogt_spanish.po --input hellogt.potsed --in-place hellogt_spanish.po --expression='/"hello, world!"/,/#: / s/""/"hola mundo"/'mkdir --parents ./es_MX.utf8/LC_MESSAGESmsgfmt --check --verbose --output-file ./es_MX.utf8/LC_MESSAGES/hellogt.mo hellogt_spanish.poLANGUAGE=es_MX.utf8 ./hellogt

Here is a description of the files created by the above:

hellogt.cxx         C++ source filehellogt             Executable imagehellogt.pot         Extracted text from C++ source file (portable object template)hellogt_spanish.po  Modified text for Spanish with translations added (using sed)es_MX.utf8/ LC_MESSAGES/   hellogt.mo       Binary translated text for Spanish used at run-time


Here is a description of gettext from Fedora Project. It is simple to follow. But it is in C.

http://fedoraproject.org/wiki/How_to_do_I18N_through_gettext