Página seguinte Página anterior Índice

4. Biblioteca de funções libc e aplicativos GNU

A biblioteca padrão de funções do Linux suporta Internacionalização e Localização segundo o padrão POSIX (Portable Operating System Interface). Trata-se de uma norma estabelecida pelo IEEE (Institute of Electrical and Electronics Engineers) para intercomunicação entre diferentes sistemas operativos. Existe também um padrão estabelecido pelo ANSI (American National Standards Institute) para a linguagem de programação C que permite escrever programas com suporte internacional.

4.1 Configurando o suporte internacional

Resumidamente, podemos dizer que as funções que tratam informações dependentes da língua ou do país podem ter seu comportamento modificado, bastando para tanto estabelecar algumas variáveis de ambiente. E que funções são essas? Podemos citar as de formatação de datas, valores monetários e mensagens de erro do sistema. Se você não sabe o que é uma variável de ambiente, sugiro que leia o manual com o comando

man environ

O padrão POSIX permite usar diversas variáveis de configuração, cada uma delas definindo o tratamento dado a um tipo de informação, a saber

LC_COLLATE

Define regras para comparação entre caracteres no alfabeto local. Por exemplo, a letra `ã' deve ser tratada como idêntica ao `a' no Português quando ordenamos alfabeticamente.

L_CTYPE

Define regras para comparação entre caracteres maiúsculos e minúsculos. Se estivermos trabalhando com o código ASCII, sabemos que o código numérico de uma letra minúscula é 32 a mais do quê a maiúscula correspondente, mas para uma letra acentuada esta regra não é válida!

LC_MONETARY

Muda o comportamento das funções de formatação de valores monetários e permite descobrir, por exemplo, o símbolo da moeda local, ou se usa ponto ou vírgula como separador de milhares e de casas decimais.

LC_MESSAGES

Estabelece a língua em que as mensagens serão apresentadas e como é uma resposta afirmativa ou negativa (S/N).

LC_NUMERIC

Estabelece o comportamento das funções de leitura/escrita de valores numéricos permitindo, por exemplo que usemos a vírgula decimal.

LC_TIME

Define a formatação de datas e horas.

LC_ALL

Define de uma só vez todas as categorias. Se usarmos LC_ALL, não precisaremos definir nenhuma das outras, a não ser que queiramos um comportamento diferente para aquele ítem específico.

LANG

Define de uma só vez todas as categorias, se LC_ALL não estiver definida.

Maiores informações podem ser obtidas no manual do sistema com o comando

man 7 locale 
O `7' no comando anterior é necessário para evitar confusão com uma função homônima da linguagem Perl. Note que as configurações acima afetam, em princípio, apenas as funções disponíveis na biblioteca de funções da linguagem C. Na prática, todos os programas que rodam em Linux usam aquela biblioteca, mas o sistema operativo não provê, catálogos de mensagens em diversas línguas para todos os programas.

A identificação da língua e do local é feita por dois códigos de duas letras, separados por um sinal ``_''. Se omitirmos o código de país, assume-se o país padrão para a língua informada, mas deve haver um catálogo correspondente. Deste modo, o código ``pt_PT'' significa Português de Portugal, enquanto ``pt_BR'' significa Português do Brasil. Escolher uma combinação língua/local basta então colocar em seu arquivo /etc/profile uma linha contendo

LC_ALL="pt_PT"
export LC_ALL
Usuários brasileiros devem usar ``pt_BR'' ao invés de ``pt_PT''. Teste o resultado com os comandos a seguir (/inexistente é o nome de um arquivo que não existe):
echo ÁÉÍÓÚ | tr '[:upper:]' '[:lower:]'
tar tf /inexistente
ls -l /
date
O resultado do primeiro deverá ser ``áéíóú''. Os outros devem retornar mensagens em Português, mas talvez nem todas, porque em muitos programas o suporte para nossa língua ainda é muito restrito.

Na distribuição Debian, certifique-se de ter instalado o pacote ``locales'', que pertence ao grupo ``admin''. O nome do arquivo que contém o pacote (na versão 2.0 da distribuição) é locales_2.0.7t-1.deb e em meu CD está no diretório debian/main/binary-i386/admin.

4.2 Problemas com a libc 5

Até meados de 1997 todas as distribuições de Linux usavam a mesma biblioteca libc, que estava na versão 5, desenvolvida a partir de uma versão mais antiga da libc do projeto GNU. Esta biblioteca possui suporte muito limitado à internacionalização e normalmente nenhum dos catálogos de locais era incluído na distribuição, ficando o inglês como língua padrão.

A versão 6 da libc do Linux baseia-se na versão 2 da libc do projeto GNU. O suporte à internacionalização foi muito melhorado, além de incluir outros atributos que não interessam para os fins deste HOWTO. Se sua distribuição for a Debian versão 2, Red Hat versão 5 ou qualquer outra que use a nova libc, então não há mais nada a fazer além do descrito na seção anterior.

Mas se você usa uma distribuição ainda baseada na libc 5 (Slackware, Caldera 1.x ou uma versão mais antiga de Debian ou Red Hat) é preciso instalar a coleção de locais. Não tente copiar a coleção de uma distribuição mais recente, pois os formatos dos arquivos são incompatíveis. Pegue na página do Portuguese HOWTO o arquivo locales-pt.tgz. Para instalá-lo na distribuição Slackware, basta (como usuário root) usar o comando

installpkg locales-pt.tgz
e para outras distribuições use o comando
tar xzf locales-pt.tgz -C /

Verifique se há dois subdiretórios do /usr/share/locale chamados pt_BR e pt_PT. Basta então configurar a variável de ambiente LC_ALL, como já descrito.

4.3 Free Translation Project

Programadores que quiserem desenvolver aplicações com suporte a mais de uma língua devem usar algum método de definir mensagens em tempo de execução, possivelmente usando uma biblioteca de funções para este fim. O projeto GNU criou o ``Free Translation Project'', com esta finalidade. Muitos aplicativos GNU já permitem que se troquem as mensagens bastando criar um catálogo que é lido pelo programa ao iniciar. Há equipes de tradução responsáveis por cada língua.

Há uma lista de discussão via e-mail para cada equipe de tradução, rodando em um servidor provido pela Linux International. Para fazer contato com a equipe de tradução para Português, envie um e-mail para pt@li.org e para assinar a lista envie e-mail para pt-request@li.org contendo apenas a palavra ``subscribe''. Assine a lista somente se você quiser fazer parte da equipe de tradutores, pois ela não se destina ao esclarecimento de dúvidas de usuários!

Mais informações podem ser encontradas na documentação do pacote gettext disponível via FTP anônimo em qualquer repositório de software do GNU. Provavelmente sua distribuição já tem um pacote pronto para ser instalado, mas se você desejar, os fontes da versão mais recentes podem ser encontrados em

ftp://ftp.gnu.org/pub/gnu/
e o nome do arquivo a copiar é ``gettext-<versão>.tar.gz''.


Página seguinte Página anterior Índice