Alguns recursos do BASH para você utilizar em seus programas

Neste artigo mostrarei alguns recursos úteis para os amantes de shell-script, mas que não querem escrever somente scripts, e sim verdadeiros e complexos programas.

[ Hits: 45.177 ]

Por: Leandro Santiago em 07/02/2008 | Blog: http://leandrosan.wordpress.com


Como criar programas internacionalizáveis



Mais um com nome comprido ;-)

A idéia aqui é fazer programas que possam ser facilmente traduzidos para qualquer idioma, sem que você tenta que necessariamente "botar a mão" no código.

Mas o que seria exatamente traduzir um programa? Ora, não seria necessário aqui traduzir o código, mas somente aquilo que é visível ao usuário, ou seja, a interface.

Inicialmente pensei em simplesmente transformar cara string (texto de interface) numa variável, mas percebi que não funcionaria.

Acompanhe meu exemplo:

MENSAGEMHELLOWORLD="Olá, esta é uma mensagem de Hello Wold".

Escreva "$MENSAGEMHELLOWORLD"

Até agora funcionaria bem, pois a mensagem é bem simples.

Mas vamos supor que quisesse escrever uma mensagem que envolvesse alguma outra variável, que pudesse ter seu valor modificado:

ANO=2007

MENSAGEMDEANO="Olá, nós estamos no ano de $ANO. Daqui há um ano será $((ANO+1))."

ANO="1997"

Escreva "$MENSAGEMDEANO"

Ele provavelmente exibiria algo como:

"Olá, nós estamos no ano de 2007. Daqui há um ano será 2008."

E não...

"Olá, nós estamos no ano de 1997. Daqui há um ano será 1998."

... que é o que queremos.

Como resolver isso? Queremos que as variáveis da mensagem sejam definidos no exato momento da chamada da mensagem, e não na sua declaração. Alguma idéia?

Sim! Vamos usar funções! Eu adoro funções. Você não? ;-)

Vamos declarar a mensagem de uma maneira diferente:

MENSAGEMDEANO() { echo "Olá, nós estamos no ano de $ANO. Daqui há um ano será $((ANO+1))."; }

Assim, podemos chamar a função Escreva da seguinte forma:

Escreva $(MENSAGEMDEANO)

Ou a chamada da função pode aparecer no meio de outra string:

Escreva "Esta é uma mensagem: \"$(MENSAGEMDEANO)\", entendeu?"

Que funcionará muito bem, embora seja ruim do ponto-de-vista de desempenho.

Agora a primeira pergunta: Porque escrever a função da mensagem em uma linha?

A resposta é: Assim fica muito mais fácil para alguém que for traduzir o programa para outro idioma ver que aquilo é uma mensagem, e não precisa saber que se trata de uma função!

O que você fazer? Colocar todas as declarações das mensagens num arquivo em separado, que teria o seu conteúdo da seguinte forma:

# Tradução do programa tal-tal-tal para emuxês

# "Deseja formatar o computador $COMPUTERNUM?"
MSGFORMATE() { echo "Disejah FOrMaTaH u kOmpUTAdor $COMPUTERNUM???"; }

# "A instalação foi abortada. Por favor verifique o arquivo $LOGFILE para mais informações"
MSGABORTINSTAL() { echo "A instALAXXaUM FoI AbOrtaDEenhah...... poR FaVor vEriFIKe u ARkIVu $LOGFILE prAH + InfORmAXXoexXx"; }

# Créditos das mensagens ao Aurélio e seu Miguxeitor: http://aurelio.net/web/miguxeitor.html ;-)

Assim, a pessoa que traduzisse seu programa precisaria somente modificar o que está entre aspas!

E, no início do seu programa haveria algo como:

LANGUAGE=emuxes_pt_BR

source languages/${LANGUAGE}.sh

Só acrescentando uma informação: Procurei utilizar aqui somente ferramentas nativas do bash, embora seja possível utilizar a ferramenta gettext para criar programas internacionalizáveis em shell-script também. Mas acredito que isto seja assunto para outro artigo. Quem sabe o próximo?

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Declaração Condicional de Funções
   3. Como criar programas internacionalizáveis
   4. Como criar programas com opções - melhorado
   5. A diferença entre as crases (``) e o '$()'
   6. Curiosidades sobre a aritmética do bash
   7. Conclusão, referências e todo o resto
Outros artigos deste autor

Rodando vídeos .rmvb no Linux

Brincando com vetores - complemento

Ogle: O player de DVD

Brincando com vetores

Mudando o tema dos cursores do mouse no Linux

Leitura recomendada

Criando uma ISO bootável do OpenBSD

Automatização de backup

Convertendo TXT ou HTML em OGG

Coloque ordem em seus programas

Incrementando seus scripts com dialog

  
Comentários
[1] Comentário enviado por hugoeustaquio em 07/02/2008 - 18:03h

"Eu havia dito que expressões como ((1<2)) retornam verdadeiro para o shell. A questão é: porque isto acontece? "

Isso acontece porque 1 é menor que 2 ;)

Viva o bash!

[2] Comentário enviado por tenchi em 07/02/2008 - 20:00h

Ah hugoeustaquio, não é que você está certo? rsrs
Acabei dizendo tal bobagem para mostrar que algumas operações do bash se assemelham muito às de linguagens como C, onde 1 é verdadeiro e 0, falso. O problema é que muitas pessoas simplesmente desconhecem tais recursos.
Mas valeu pela correção ;-)

[3] Comentário enviado por chimico em 08/02/2008 - 09:53h

Muito bom, parabéns pelo artigo!

[4] Comentário enviado por k4mus em 08/02/2008 - 09:59h

Parabens amigo. A algum tempo q eu procurava algum material como este.

vlw

[5] Comentário enviado por everton3x em 08/02/2008 - 11:57h

Muito bom artigo, não tanto por mostrar como fazer "algumas coisinhas" com Shell Script, mas principalmente por mostrar aos pagãos o quão poderoso é o bash.
Parabéns!

[6] Comentário enviado por juliaojunior em 08/02/2008 - 18:26h

muito bom. Direto para favoritos. :>

[7] Comentário enviado por Teixeira em 09/02/2008 - 22:15h

Gostei muito do artigo.
Eu mesmo tinha outra idéia do assunto, pois achava que a coisa seria muito complicada.
O amigo veio provar o contrário.
Pode ser complexo no início, e exige grande disciplina, mas certamente complicado não é.
( Normalmente é a verbose que assusta um pouco )
Parabéns !

[8] Comentário enviado por elgio em 22/02/2008 - 15:24h

Sobre a arimetica um cuidado deve ser tomado ao escrever os numeros:

$ echo $(( 9 < 011 ))
0


Ué? 9 é menor que 11, então porque a expressão deu FALSO? (valor 0)

Porque números precedidos com ZERO são interpretados como octal pelo BASH e 011 octal = 9 em decimal:

$ echo $(( 9 == 011 ))
1

[9] Comentário enviado por elgio em 22/02/2008 - 15:30h

A propósito: legal este teu artigo.
Cheio de manhas.

[10] Comentário enviado por removido em 28/04/2014 - 18:17h

Didática muito boa, favoritado!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts