Página Inicial > PHP, Tutoriais > Traduzindo páginas com Smarty

Traduzindo páginas com Smarty

Pessoal,

Este artigo foi escrito para atender a um pedido do nosso amigo Vinicius que precisa utilizar o smarty para traduzir suas páginas. O smarty possui uma ferramenta chamada config_load que pode ser facilmente utilizada para este fim e é exatamente ela que eu vou demonstrar como utilizar neste artigo.

Antes de começarmos devo apenas deixar claro que este procedimento não traduzirá automaticamente suas páginas, quero dizer que, conteúdo dinâmico, escrito e gravado em um banco de dados não serão “traduzidos” pelo smarty em tempo de execução, isto é, caso você tenha uma página de recados (mural de recados) você não conseguirá com este procedimento traduzir para outros idiomas o que é escrito pelos visitantes.

O smarty utilizará a ferramenta config_load para traduzir textos estáticos da sua página, como values de botões, labels de inputs etc…

Caso o interesse seja por traduzir conteúdo dinâmico, aconselho utilizar outras ferramentas para esse fim (desconheço pois nunca tive a intenção de utilizar).

1. criando nosso arquivo de configuração [ languages.conf ]

Nosso arquivo de configuração chamado de languages.conf deve ser salva sem formatação, ou seja, texto puro.

msg_boasVindas = "Seja bem vindo(a)"

No arquivo languages.conf criamos uma variavel para o smarty chamada msg_boasVindas e com o valor “Seja bem vindo(a)”. Note que não iniciamos a variavel com $ nem finalizamos com ; .

2. Iniciando nosso template [ traduzindo.tpl ]

A primeira coisa que precisamos fazer em nosso template é informar ao smarty qual arquivo de configuração será utilizado pelo template.
Os arquivos de configuração podem ter diversas informações sobre o template, como cores, idioma, textos, valores etc…

{config_load file="languages.conf"}
<html>
...

Em seguida colocamos no local desejado da nossa pagina as variaveis criadas no arquivo de configuração.

{config_load file="languages.conf"}
<html>
...
<body>
 
{#msg_boasVindas#} {$nomeVisitante}.
 
</body>
</html>

Note que {$nomeVisitante} é uma variável que será alimentada pelo arquivo .php que chamou este template, utilizando a função display(“traduzindo.tpl”); e que possívelmente virá do banco de dados…

Já a variavel {#msg_boasVindas#} é a variável que criamos no arquivo languages.conf, perceba a diferença de variáveis vindas do .php e as variaveis vindas do .conf, na primeira iniciamos como de costume com $ e na segunda colocamos entre # (tralha).

3. Nosso arquivo .php [ traduzindo.php ]

Agora que ja temos o nosso .conf e o nosso .tpl vamos criar nosso .php simples e apenas didático.

<?php
include("Smarty.php");        //incluimos a classe smarty.
$objSmarty = new smarty();  // instanciamos o objeto smarty.
 
$nomeVisitante = "Gerson Novais"; // Didaticamente statico o nome do visitante.
 
$objSmarty->display("traduzindo.tpl"); //carregamos o template.
?>

O resultado quando rodar este exemplo seria simples:

Seja bem vindo(a) Gerson Novais.

Mas você deve estar se perguntando: onde está a tradução?
Pois é, não traduzimos nada ainda e não usamos 100% do que o config_load nos proporciona. vamos fazer algumas modificações em nosso arquivo languages.conf

4. Modificando o arquivo languages.conf

[pt_br]
msg_boasVindas = "Seja bem vindo(a)"
 
[eng]
msg_boasVindas = "Welcome"
 
[fran]
msg_boasVindas = "Bienvenue"

Pronto, essa modificação irá criar “seções” em nosso arquivo. Perceba que as seções são bem sugestivas, cada uma para um idioma específico (utilizei o google tradutor :D ).
Importante lembrar que o nome da variavel msg_boasVindas deve ser a mesma para todas as seções que a utilizarão caso contrário a variável não será encontrada….

Agora temos que fazer uma pequena modificação no nosso template traduzindo.tpl pois precisamos dizer ao smarty que além de usar o arquivo languages.conf ele precisa usar o conjunto de variáveis de uma determinada seção. Portanto precisamos dizer ao template qual seção será usada.

{config_load file="languages.conf" section="fran"}
<html>
...
<body>
 
{#msg_boasVindas#} {$nomeVisitante}.
 
</body>
</html>

Pronto, a modificação é simples, basta usarmos o section= para dizer qual seção usaremos. Perceba que o {#msg_boasVindas#} continua igual.

Desta vez quando testarmos o exemplo, teremos o seguinte resultado:

Bienvenue Gerson Novais.

Vamos melhorar nosso exemplo, tornando a mudança de idioma escolhida pelo visitante. Para isso no template vamos cirar links que passem por GET qual seção usar. (apenas didático)

{config_load file="languages.conf" section="fran"}
<html>
...
<body>
 
{#msg_boasVindas#} {$nomeVisitante}.
<p><a href="traduzindo.php?lang=pt_br">pt_br</a></p>
<p><a href="traduzindo.php?lang=eng">eng</a></p>
<p><a href="traduzindo.php?lang=fran">fran</a></p>
 
</body>
</html>

Quando acessarmos os links eles irão nos enviar para a mesma página, mas irá passar a variavel lang por GET. $_GET['lang'] em nosso arquivo .php

Como disse apenas para ilustrar o funcionamento vamos aproveitar de forma simples essa variavel diretamente no $_GET sem fazer qualquer verificação de segurança. Recomendo que sejam feitas verificações visto que são informações que podem ser facilmente manipuladas pelo visitante do seu site.

<?php
include("Smarty.php");        //incluimos a classe smarty.
$objSmarty = new smarty();  // instanciamos o objeto smarty.
 
$nomeVisitante = "Gerson Novais"; // Didaticamente statico o nome do visitante.
 
$lang = $_GET['lang'] ? $_GET['lang'] : "pt_br"; // caso $_GET['lang'] não seja passado pega-se por padrão "pt_br"
 
$objSmarty->assign("lang",$lang);  //Passamos para o nosso template a variavel $lang para a variavel {$lang}
 
$objSmarty->display("traduzindo.tpl"); //carregamos o template.
?>

Agora que recebemos nosso lang e passamos para o template na forma de {$lang} podemos mudar nosso template para ao invés de usar a section estática fran usar a section dinâmica $lang. veja.

{config_load file="languages.conf" section=$lang}
<html>
...
<body>
 
{#msg_boasVindas#} {$nomeVisitante}.
 
</body>
</html>

Pronto, estudem este exemplo e vejam o que vocês podem usar com o config_load ele é muito simples de se utilizar e extremamente útil.

Maiores informações sobre o config_load vocês podem obter no site oficial do smarty na documentação.
config_load

Espero ter ajudado e espero ter sido simples o suficiente para um bom estudo. Caso tenham dúvidas por favor me procurem que eu tentarei ajuda-los.

Att,
Gerson Novais

Categories: PHP, Tutoriais Tags:
  1. Felipe Luchi
    12, maio, 2010 em 17:07 | #1

    Gostei da dica, legal.
    Simples e objetivo.
    Parabens

  1. Nenhum trackback ainda.