Acesso direto ao conteúdo
Logotipo Dicas-L, por Ricardo Burile

Busca

Visite também: Segurança Linux ·  UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

Você está aqui: Home  → Arquivo Dicas-L

 

Curso de Inglês Online

Assine a Lista Dicas-L

Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.

Internacionalização de programas em PHP

Colaboração: Walter Rodrigo de Sá Cruz

Data de Publicação: 20 de Abril de 2005

A biblioteca GNU gettext é utilizada para resolver um problema comum em programação: Se o seu programa vai ser distruído em dezenas de linguagens, qual o caminho a seguir em relação à internacionalização? Produzir diversos arquivos compilados, um em cada idioma (como o windows)? E se o programa for interpretado ao invés de compilado? Mais uma versão diferente para cada idioma ? NÃO!

Com o gettext, temos uma solução simples e eficiente (no mundo MS já existia algo semelhante desde o VB5, porém só recentemente, com o .NET esse tipo de recurso passou a ser difundido e utilizado de maneira extensiva). O que o gettext faz? Ao criar o código, o programador marca as strings que serão traduzidas. O gettext dispõe de utilitários que extraem todas essas strings marcadas para um arquivo de texto, a partir da qual um tradutor faz as devidas traduções em suas língua. Então, o seu programa, ao inicializar, carrega a biblioteca gettext e carrega as strings traduzidas de acordo com o idioma configurado.

O gettext é usado no linux para internacionalização de programas em C, C++, shell script, python, perl, e é claro, o PHP não podia ficar de fora.

Segue um exemplo rápido de internacionalização em PHP:

Suponhamos um arquivo chamado artigo.php com o conteúdo:

  <?php
  echo "String normal";
  ?>

Que, sem nenhum segredo, imprimiria na tela "String normal".

Vamos agora preparar o arquivo para usar o gettext. A tradução dele será para o espanhol da Espanha

  <?php
  $language = 'es_ES';
  putenv("LANG=$language"); //configura a variável de ambiente LANG para es_ES
  setlocale(LC_ALL, $language); // configura a variável de localidade para es_ES
  
  // Configura o text domain como 'messages'
  $domain = 'messages';
  bindtextdomain($domain, "locale/");
  textdomain($domain);
  echo gettext("String traduzida");
  ?>

Reparem que antes do echo foram adicionadas algumas linhas de inicialização do gettext. E a própria linha do echo foi mudada de

  echo "String traduzida";

para

  echo gettext("String traduzida");

Para extrairmos as strings, usamos o seguinte comando no shell:

  xgettext -n *.php --language=C++

Que criará o arquivo messages.po com o seguinte conteúdo:

  # SOME DESCRIPTIVE TITLE.
  # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
  # This file is distributed under the same license as the PACKAGE package.
  # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
  #
  #, fuzzy
  msgid ""
  msgstr ""
  "Project-Id-Version: PACKAGE VERSION\n"
  "POT-Creation-Date: 2005-04-14 11:34-0300\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: 8bit\n"
  
  #: artigo.php:10
  msgid "String traduzida"
  msgstr ""

Nossa intenção é traduzir o programa para o espanhol falado na Espanha. O código para a Espanha é es_ES (esses códigos são definidos pela RFC 1766 e pelo padrão ISO 639). Devemos então copiar o arquivo messages.po gerado para locale/<LANG_CODE>/LC_MESSAGES/, no caso, locale/es_ES/LC_MESSAGES/ e traduzido no campo msgstr.

Após traduzido, devemos gerar o arquivo .mo com o comando:

  msgfmt messages.po

A tradução está pronta! Quer fazer um teste? Execute no browser o arquivo artigo.php.

Normalmente, usa-se uma versão abreviada ao chamar o gettext junto com o echo ou o print:

  <?php
  echo T_("String traduzida");
  ?>

E então, ao extrair as strings com o xgettext, adiciona-se a string "--keyword=T_" ao comando, ficando:

  xgettext -n *.php --language=C++ --keyword=T_

Esse é apenas o básico da internacionalização com o gettext :). E lembrando que temos ainda de nos preocupar com outras questões como a questão de datas (alguns países e a maioria dos bancos de dados usa o formato mm-dd-YYYY) e outras coisas mais.

Para mais informações, visite a página do manual do gettext do php (http://php.net/gettext)

Veja a relação completa dos artigos de Walter Rodrigo de Sá Cruz

Formato PDF
Newsfeed RSS
Formato para impressão
PDF RSS Imprimir

Referências Adicionais

Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.

Avalie esta dica

  • Currently 3.00/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.0 /5 (1172 votos)

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script
Lan University

Submarino.com.br

Encontre imóveis, apartamentos e casas a venda no Imobilien
Saiba mais

 

 

Procure pela casa ou apartamento ideal à venda ou para aluguel na busca inteligente do Imohoo
Buscar imóveis