old-www/HOWTO/Portuguese-HOWTO-4.html

151 lines
8.5 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
<TITLE>Linux Portuguese-HOWTO: Biblioteca de fun&ccedil;&otilde;es libc e aplicativos GNU</TITLE>
<LINK HREF="Portuguese-HOWTO-5.html" REL=next>
<LINK HREF="Portuguese-HOWTO-3.html" REL=previous>
<LINK HREF="Portuguese-HOWTO.html#toc4" REL=contents>
</HEAD>
<BODY>
<A HREF="Portuguese-HOWTO-5.html">Next</A>
<A HREF="Portuguese-HOWTO-3.html">Previous</A>
<A HREF="Portuguese-HOWTO.html#toc4">Contents</A>
<HR>
<H2><A NAME="SEC:LIBC"></A> <A NAME="s4">4. Biblioteca de fun&ccedil;&otilde;es libc e aplicativos GNU</A></H2>
<P>A biblioteca padr&atilde;o de fun&ccedil;&otilde;es do Linux suporta Internacionaliza&ccedil;&atilde;o e
Localiza&ccedil;&atilde;o segundo o padr&atilde;o POSIX (Portable Operating System Interface).
Trata-se de uma norma estabelecida pelo IEEE (Institute of Electrical and
Electronics Engineers) para intercomunica&ccedil;&atilde;o entre diferentes sistemas
operativos. Existe tamb&eacute;m um padr&atilde;o estabelecido pelo ANSI (American National
Standards Institute) para a linguagem de programa&ccedil;&atilde;o C que permite escrever
programas com suporte internacional.
<P>
<H2><A NAME="ss4.1">4.1 Configurando o suporte internacional</A>
</H2>
<P>Resumidamente, podemos dizer que as fun&ccedil;&otilde;es que tratam informa&ccedil;&otilde;es dependentes
da l&iacute;ngua ou do pa&iacute;s podem ter seu comportamento modificado, bastando para
tanto estabelecer algumas vari&aacute;veis de ambiente. E que fun&ccedil;&otilde;es s&atilde;o essas?
Podemos citar as de formata&ccedil;&atilde;o de datas, valores monet&aacute;rios e mensagens de
erro do sistema. Se voc&ecirc; n&atilde;o sabe o que &eacute; uma vari&aacute;vel de ambiente, sugiro que
leia o manual com o comando
<PRE>
man environ
</PRE>
<P>O padr&atilde;o POSIX permite usar diversas vari&aacute;veis de configura&ccedil;&atilde;o, cada uma delas
definindo o tratamento dado a um tipo de informa&ccedil;&atilde;o, a saber
<DL>
<DT><B>LC_COLLATE</B><DD><P>Define regras para compara&ccedil;&atilde;o entre caracteres no alfabeto local. Por
exemplo, a letra `&atilde;' deve ser tratada como id&ecirc;ntica ao `a' no Portugu&ecirc;s
quando ordenamos alfabeticamente.
<P>
<DT><B>LC_CTYPE</B><DD><P>Define regras para compara&ccedil;&atilde;o entre caracteres mai&uacute;sculos e
min&uacute;sculos. Se estivermos trabalhando com o c&oacute;digo ASCII, sabemos que o
c&oacute;digo num&eacute;rico de uma letra min&uacute;scula &eacute; 32 a mais do que a mai&uacute;scula
correspondente, mas para uma letra acentuada esta regra n&atilde;o &eacute; v&aacute;lida!
<P>
<DT><B>LC_MONETARY</B><DD><P>Muda o comportamento das fun&ccedil;&otilde;es de formata&ccedil;&atilde;o de valores monet&aacute;rios e
permite descobrir, por exemplo, o s&iacute;mbolo da moeda local, ou se usa ponto
ou v&iacute;rgula como separador de milhares e de casas decimais.
<P>
<DT><B>LC_MESSAGES</B><DD><P>Estabelece a l&iacute;ngua em que as mensagens ser&atilde;o apresentadas e como &eacute; uma
resposta afirmativa ou negativa (S/N).
<P>
<DT><B>LC_NUMERIC</B><DD><P>Estabelece o comportamento das fun&ccedil;&otilde;es de leitura/escrita de valores
num&eacute;ricos permitindo, por exemplo que usemos a v&iacute;rgula decimal.
<P>
<DT><B>LC_TIME</B><DD><P>Define a formata&ccedil;&atilde;o de datas e horas.
<P>
<DT><B>LC_ALL</B><DD><P>Define de uma s&oacute; vez todas as categorias. Se usarmos LC_ALL, n&atilde;o
precisaremos definir nenhuma das outras, a n&atilde;o ser que queiramos um
comportamento diferente para aquele &iacute;tem espec&iacute;fico.
<P>
<DT><B>LANG</B><DD><P>Define de uma s&oacute; vez todas as categorias, se LC_ALL n&atilde;o estiver definida.
Tamb&eacute;m &eacute; usada pelo comando <CODE>man</CODE> para compor os caminhos pelos quais
ele procurar&aacute; as p&aacute;ginas do manual. Veja as observa&ccedil;&otilde;es a respeito desta
vari&aacute;vel nas se&ccedil;&otilde;es
<A HREF="Portuguese-HOWTO-5.html#SEC:LOCALE">Locale</A>,
<A HREF="Portuguese-HOWTO-5.html#SEC:LOCALE">Locale</A> e
<A HREF="Portuguese-HOWTO-5.html#SEC:LOCALE">Locale</A>.
</DL>
<P>Maiores informa&ccedil;&otilde;es podem ser obtidas no manual do sistema com o comando
<PRE>
man 7 locale
</PRE>
O `7' no comando anterior &eacute; necess&aacute;rio para evitar confus&atilde;o com uma fun&ccedil;&atilde;o
hom&ocirc;nima da linguagem Perl. Note que as configura&ccedil;&otilde;es acima afetam, em
princ&iacute;pio, apenas as fun&ccedil;&otilde;es dispon&iacute;veis na biblioteca de fun&ccedil;&otilde;es da linguagem
C. Na pr&aacute;tica, todos os programas que rodam em Linux usam aquela biblioteca,
mas o sistema operativo n&atilde;o prov&ecirc;, cat&aacute;logos de mensagens em
diversas l&iacute;nguas para todos os programas.
<P>A identifica&ccedil;&atilde;o da l&iacute;ngua e do local &eacute; feita por dois c&oacute;digos de duas letras,
separados por um sinal ``_''. Se omitirmos o c&oacute;digo de pa&iacute;s, assume-se o pa&iacute;s
padr&atilde;o para a l&iacute;ngua informada, mas deve haver um cat&aacute;logo correspondente.
Deste modo, o c&oacute;digo ``pt_PT'' significa Portugu&ecirc;s de Portugal, enquanto
``pt_BR'' significa Portugu&ecirc;s do Brasil. Escolher uma combina&ccedil;&atilde;o l&iacute;ngua/local
basta ent&atilde;o colocar em seu arquivo <CODE>/etc/profile</CODE> uma linha contendo
<PRE>
LC_ALL="pt_PT"
export LC_ALL
</PRE>
Usu&aacute;rios brasileiros devem usar ``pt_BR'' ao inv&eacute;s de ``pt_PT''. Teste o
resultado com os comandos a seguir (<CODE>/inexistente</CODE> &eacute; o nome de um
arquivo que <B>n&atilde;o</B> existe):
<PRE>
echo &Aacute;&Eacute;&Iacute;&Oacute;&Uacute; | tr '[:upper:]' '[:lower:]'
tar tf /inexistente
ls -l /
date
cal 1 1999
</PRE>
O resultado do primeiro dever&aacute; ser ``<CODE>&aacute;&eacute;&iacute;&oacute;&uacute;</CODE>''. Os comandos <CODE>tar</CODE> e
<CODE>ls</CODE> devem retornar mensagens em Portugu&ecirc;s e <CODE>cal</CODE> deve mostrar um
calend&aacute;rio de janeiro de 1999, com <EM>do se te qu qu se s&aacute;</EM> no cabe&ccedil;alho dos
dias da semana.
<P>Na distribui&ccedil;&atilde;o Debian, certifique-se de ter instalado o pacote ``locales'',
que pertence ao grupo ``admin''. O nome do arquivo que cont&eacute;m o pacote (na
vers&atilde;o 2.0 da distribui&ccedil;&atilde;o) &eacute; <CODE>locales_2.0.7t-1.deb</CODE> e em meu CD
est&aacute; no diret&oacute;rio <CODE>debian/main/binary-i386/admin</CODE>.
<H2><A NAME="ss4.2">4.2 Problemas com a libc 5</A>
</H2>
<P>At&eacute; meados de 1997 todas as distribui&ccedil;&otilde;es de Linux usavam a mesma biblioteca
<EM>libc</EM>, que estava na vers&atilde;o 5, desenvolvida a partir de uma vers&atilde;o
mais antiga da libc do projeto GNU. Esta biblioteca possuia suporte muito
limitado &agrave; internacionaliza&ccedil;&atilde;o e normalmente nenhum dos cat&aacute;logos de locais
era inclu&iacute;do na distribui&ccedil;&atilde;o, ficando o ingl&ecirc;s como l&iacute;ngua padr&atilde;o.
<P>A vers&atilde;o 6 da libc do Linux baseia-se na vers&atilde;o 2 da libc do projeto GNU. O
suporte &agrave; internacionaliza&ccedil;&atilde;o foi muito melhorado, al&eacute;m de incluir outros
atributos que n&atilde;o interessam para os fins deste HOWTO. Se sua distribui&ccedil;&atilde;o for
a Debian vers&atilde;o 2, Red Hat vers&atilde;o 5 ou qualquer outra que use a nova libc,
ent&atilde;o n&atilde;o h&aacute; mais nada a fazer al&eacute;m do descrito na se&ccedil;&atilde;o anterior.
<P>Mas se voc&ecirc; usa uma distribui&ccedil;&atilde;o ainda baseada na libc 5 (Slackware, Caldera
1.x ou uma vers&atilde;o mais antiga de Debian ou Red Hat) &eacute; preciso instalar a
cole&ccedil;&atilde;o de locais. N&atilde;o tente copiar a cole&ccedil;&atilde;o de uma distribui&ccedil;&atilde;o mais
recente, pois os formatos dos arquivos s&atilde;o incompat&iacute;veis. Pegue na p&aacute;gina do
Portuguese HOWTO o arquivo <CODE>locales-pt.tgz</CODE>. Para instal&aacute;-lo na
distribui&ccedil;&atilde;o Slackware, basta (como usu&aacute;rio <B>root</B>) usar o comando
<PRE>
installpkg locales-pt.tgz
</PRE>
e para outras distribui&ccedil;&otilde;es use o comando
<PRE>
tar xzf locales-pt.tgz -C /
</PRE>
<P>Verifique se h&aacute; dois subdiret&oacute;rios do <CODE>/usr/share/locale</CODE> chamados
<CODE>pt_BR</CODE> e <CODE>pt_PT</CODE>. Basta ent&atilde;o configurar a vari&aacute;vel de ambiente
LC_ALL, como j&aacute; descrito.
<P>
<HR>
<A HREF="Portuguese-HOWTO-5.html">Next</A>
<A HREF="Portuguese-HOWTO-3.html">Previous</A>
<A HREF="Portuguese-HOWTO.html#toc4">Contents</A>
</BODY>
</HTML>