Foi, então, criado um código em C com as marcações para que o programa seja traduzido. Mas, o que traduzir? Se rodado, imediatamente, a saída do programa será a mesma que a do código não internacionalizado.
É necessário, nesse momento, criar-se um arquivo com as referências:
[jorge@Nexus artigos]$ xgettext -a hello_int.c
Após a execução desse comando, é gerado o arquivo "messages.po". Renomeei-o para hello_int.po, para uma maior facilidade de trabalho.
[jorge@Nexus artigos]$ ls -l *.po
-rw-rw-r-- 1 jorge jorge 629 dez 23 19:45 hello_int.po
[jorge@Nexus artigos]$ cat hello_int.po
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Free Software Foundation, Inc.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 1998-12-23 19:45-0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: ENCODING\n"
#: hello_int.c:6 hello_int.c:7
msgid "hello"
msgstr ""
#: hello_int.c:6
msgid "/usr/share/locale"
msgstr ""
#: hello_int.c:8
msgid "Hello World!"
msgstr ""
Deve-se observar que, além de retirar os textos marcados do programa, a saída padrão do comando xgettext inclui o nome do arquivo e a posição da mensagem no arquivo:
#: hello_int.c:8
O texto que segue essa linha refere-se à(s) cadeia(s) de caracteres encontrada(s) na linha 8 do arquivo hello_int.c. Essa referência ajuda o tradutor a contextualizar a tradução e a procurar no código fonte do programa por quaisquer observações do autor do mesmo (como, por exemplo, solicitações para a não modificação do código ou até mesmo a não tradução de determinada mensagem).