Gettext
gettext é uma biblioteca do Projeto GNU que faz a internacionalização de softwares, ou seja, a escrita de multiplas línguas em softwares, a mais recente versão disponível é a 0.22.4.
Programação
editarO código fonte é primeiro modificado para as chamadas do GNU gettext. Isto é, para a maioria das linguagens de programação, é feito uma encapsulação das strings e o gettext irá chamar qual strings o usuário irá visualizar. Esta função é usualmente modificada para _ (underline), veja por exemplo o código em C:
printf(gettext("My name is %s.\n"), my_name);
é escrito assim:
printf(_("My name is %s.\n"), my_name);
Outras linguagens também possuem a funcionalidade do gettext como: C++, Objective-C, shell script, bash, LISP, Smalltalk, Java, awk, Pascal, wxWidgets, Tcl, Perl, PHP, Ruby e outras mais.
Tradução
editarPara a tradução da string é necessário junto ao programa um arquivo com extensão .po, ou um template, que contenha uma lista de todas as frases e palavras que precisam ser traduzidas no código fonte. Dentro do arquivo .po de um programa escrito em C é necessário conter:
#: src/name.c:36
msgid "My name is %s.\n"
msgstr "Meu nome é %s.\n."
Em um software que contenha várias linguagens de programação, as mensagens de tradução funcionam normalmente, basta somente referenciar o nome do arquivo fonte e a linha.
Funcionamento
editarPara a tradução das frases da língua nativa do programa para a língua que deseja traduzir é necessário um programa que edite arquivos .po e depois de traduzidas as mensagens é necessário ter um compilador para gerar o arquivo .mo, os programas mais comuns são o Kbabel para KDE e Poedit que é multiplataforma, estes programas fazem com que as strings de tradução estejam alinhadas no arquivo, facilitando a localização das frases que não foram traduzidas ou com tradução incompletas e também podem compilar o arquivo "po" e gerar o arquivo "mo".
Para gerar o arquivo .po a partir dos arquivos de código:
xgettext -o lang/template.po glade/*.glade lib/program/Main.c
e para compilar o arquivo de tradução .po para .mo digite:
msgfmt minha_traducao.po -o minha_traducao.mo