O gettext é a biblioteca de internacionalização (i18n) do GNU, e é um dos padrões mais importantes do Software Livre para a internacionalização dos programas. Tradutores são usados para isso, e existem bastantes ferramentas utéis para trabalhar com os dados do gettext, de maneira que é recomendável a todos evitar tentar criar sua própria ferramenta. O Gettext também funciona no Windows, assim não já desculpa.
É realmente mais fácil do que parece. Abaixo segue os passos necessários:
Adicione essas linhas ao cabeçalho do módulo C onde fica a função main():
#ifdef USE_GETTEXT #include <libintl.h> #include <locale.h> #define _(String) gettext (String) #else #define _(String) String #endif
E adicione essas ao inicio da sua função main():
#ifdef USE_GETTEXT setlocale (LC_MESSAGES, ""); setlocale (LC_CTYPE, ""); setlocale (LC_COLLATE, ""); textdomain ("my-program"); bindtextdomain ("my-program", NULL); #endif
Isso tudo tem a finalidade de inicializar o gettext, vamos agora passar para o uso no restante dos módulos. Em cada um deles, você terá que adicionar essas linhas ao cabeçalho:
#ifdef USE_GETTEXT #include <libintl.h> #define _(String) gettext (String) #else #define _(String) String #endif
Depois de tudo isso, você deve ser capaz de internacionalizar qualquer texto que quiser, apenas escreva _(“whatever”) ao invés de apenas “whatever”:
printf(_("whatever");
Não esqueça de compilar seu programa com a opção -DUSE_GETTEXT se você usar o mesmo #define que foi usado aqui. Agora vamos para segunda parte, que é gerar os modelos *.pot, e instalar os módulos de tradução *.mo em seu sistema:
xgettext -k_ -o my-program.pot *.c *.h --from-code=iso-8859-1
Se você preferir, pode criar arquivo *.pot diferentes para partes diferentes de seu programa ao invés de um arquivo grande para ajudar os tradutores, e depois juntar todos os arquivo *.po dentro de um único antes de converter ele para *.mo com o msgcat:
msgcat -o my-program.es.po my-program.part1.es.po my-program.part2.po my-program.part3.es.po
Para compilar os arquivos *.po no *.mo, apenas faça:
msgfmt my-program.es.po -o my-program.es.mo
Depois, não esqueça de instala-lo no diretório apropriado de seu sistema:
cp my-program.es.mo /usr/share/locale/es/LC_MESSAGES/my-program.mo
Naturalmente, você pode instruir o seu programa a buscar o arquivo *.mo em um diferente diretório, mesmo em um caminho relativo. Apenas leia as página “man”, esse artigo é apenas uma introdução ao assunto.
Traduzido de http://www.miriamruiz.es/weblog/?p=88