+4

Internacionalização simples com Y_Template

criado por Sergio A. Pohlmann .'. em 29/10/2009 11:34am
Num artigo anterior do phpbrasil, vimos como utilizar o Y_Template. Este artigo considera que você já o está utilizando, ou, pelo menos, já sabe como instala-lo e como deve ser utilizado.

Uma das “dores de cabeça” mais frequentes dos programadores, é a questão de internacionalizar o código. Quer dizer: Fazer com que o produto final possa ser visto em mais de um idioma.
Para este fim, existem várias formas, classes, métodos e técnicas. O que proponho aquí, é um complemento aos que estão utilizando a classe de template Y_Template, já que a i18n (internacionalização) foi um dos objetivos quando desenvolví a classe.

Consideremos os seguintes códigos(PHP e HTML).

Arquivo exemplo.php:
<?php

// Starting Template
include_once ("include/Y_Template.class.php"); 
$T = new Y_Template( "templates/teste.html" );

$T->Show( "header" );
$T->Show( "content" );
$T->Show( "end" );

?>

Arquivo teste.html:
<!-- begin: header -->
<html>
  <body>
    <center>
      <title> i18n com Y_Template </title>
      <h1> SITE INTERNACIONALIZADO COM Y_TEMPLATE</h1>
      <h2> Feito por Sérgio A. Pohlmann - 2009 </h2>
<!-- end:  header -->
		
<!-- begin: content -->
      <hr />
	  <p>
	  OI! Este conteúdo está sendo interpretado por um template, 
	  para que o mesmo se veja em um idioma específico.
	  </p>
<!-- end:   content -->
		
<!-- begin: end -->
	</center>
  </body>
</html>
<!-- end:  end -->

Este arquivo faz uma página com um header e um parágrafo simples. Originalmente está em Português. Nada especial, certo?
Bem, antão, “mãos à obra”: Vamos alterar o bloco “header” do template. Na verdade, o que vamos fazer é copia-lo duas vezes, traduzir seu conteúdo e mudar o nome de cada bloco para o formato “nome.idioma”:

<!-- begin: header.br -->
<html>
  <body>
    <center>
      <title> i18n com Y_Template </title>
      <h1> SITE INTERNACIONALIZADO COM Y_TEMPLATE</h1>
      <h2> Feito por Sérgio A. Pohlmann - 2009 </h2>
<!-- end:  header -->

<!-- begin: header.es -->
<html>
  <body>
    <center>
      <title> i18n con Y_Template </title>
      <h1> SITIO INTERNACIONALIZADO CON Y_TEMPLATE</h1>
      <h2> Hecho por Sérgio A. Pohlmann - 2009 </h2>
<!-- end:  header.es -->

<!-- begin: header.en -->
<html>
  <body>
    <center>
      <title> i18n with Y_Template </title>
      <h1> INTERNACIONALIZATED SITE WITH Y_TEMPLATE</h1>
      <h2> By Sérgio A. Pohlmann - 2009 </h2>
<!-- end:  header.en -->

E agora atualizamos a página. Ei! Segue em português! Algo deu errado! Ou não?
Bem, acontece que o Y_Template trabalha com um principio de prioridades para apresentação de blocos com idiomas. Se você não faz nenhuma configuração, ele, originalmente, considera:
Primeira prioridade: Blocos em português (.br)
Segunda Prioridade: Blocos em espanhol (.es)
Terceira Prioridade: Blocos em Inglês (.en)
* Sim, você pode trocar isto, já vamos ver mais adiante. Calma!

Mmmmm! Quer dizer que está considerando primeiro o bloco “header.br”, por isto funciona em português. Mas “peraí...”. Antes, quando não havia nenhuma definição de idioma nos blocos, ele também estava mostrando em português. Por quê?
Porque quando chamamos um bloco (com o método “Show”), ele verifica as prioridades de idiomas. E se não encontrar nenhuma definição que sirva nas prioridades, utilizará o bloco sem definição.
Resumindo: Quando chamamos um “$T->Show( ‘header’)”, ele primeiro tenta sua primera prioridade de idioma (originalmente português). Se encontra o bloco “header.br”, mostrará este. Se não encontra, tentará o bloco “header.es”, que é a segunda prioridade. Não havendo o referido bloco, tentará a terceira prioridade “header.en”. Finalmente, se não encontrou nenhum dos blocos de idioma que ele tem como prioridade, “se dá por vencido” e tenta mostrar o “header” (sem nenhuma especificação de idioma).
Isto explica porque antes já funcionava em português.

Para que possamos mostrar o bloco de outro idioma, devemos especificar ANTES de chamar a classe de template:

<?php

define( "Y_LANGUAGE_1", "en" );     // First priority language

// Starting Template
include_once ("include/Y_Template.class.php"); 
$T = new Y_Template( "templates/teste.html" );

$T->Show( "header" );
$T->Show( "content" );
$T->Show( "end" );

?>

Comentários:

Mostrando 1 - 10 de 12 comentários
Disculpein os comentarios repetidos mais o botão não funcionava
08/12/2009 7:43am (~14 anos atrás)

Acho este Template manager muinto bom e facil de usar, eu ja o uso ele fas bastante tempo principalmente por sua simplicidade, tamanho e o soporte a I18n en comparação con outros como smarty etc que são enormes e tein uma grande cantidade de arquivos (Este so tein un que não tein peso :) ) que no momento de sincronizar con o server de produção resulta bastante impractico alem de que o usuario tein que aprender como funciona deixa de colocar estructuras for while no codigo php pra colocar nos templates, :p não deveria ser asin.

Congratulations!!! Sergio.
08/12/2009 7:40am (~14 anos atrás)

Acho este Template manager muinto bom e facil de usar, eu ja o uso ele fas bastante tempo principalmente por sua simplicidade, tamanho e o soporte a I18n en comparação con outros como smarty etc que são enormes e tein uma grande cantidade de arquivos (Este so tein un que não tein peso :) ) que no momento de sincronizar con o server de produção resulta bastante impractico alem de que o usuario tein que aprender como funciona deixa de colocar estructuras for while no codigo php pra colocar nos templates, :p não deveria ser asin.

Congratulations!!! Sergio.
08/12/2009 7:39am (~14 anos atrás)

Acho este Template manager muinto bom e facil de usar, eu ja o uso ele fas bastante tempo principalmente por sua simplicidade, tamanho e o soporte a I18n en comparação con outros como smarty etc que são enormes e tein uma grande cantidade de arquivos (Este so tein un que não tein peso :) ) que no momento de sincronizar con o server de produção resulta bastante impractico alem de que o usuario tein que aprender como funciona deixa de colocar estructuras for while no codigo php pra colocar nos templates, :p não deveria ser asin.

Congratulations!!! Sergio.
08/12/2009 7:39am (~14 anos atrás)

Acho este Template manager muinto bom e facil de usar, eu ja o uso ele fas bastante tempo principalmente por sua simplicidade, tamanho e o soporte a I18n en comparação con outros como smarty etc que são enormes e tein uma grande cantidade de arquivos (Este so tein un que não tein peso :) ) que no momento de sincronizar con o server de produção resulta bastante impractico alem de que o usuario tein que aprender como funciona deixa de colocar estructuras for while no codigo php pra colocar nos templates, :p não deveria ser asin.

Congratulations!!! Sergio.
08/12/2009 7:38am (~14 anos atrás)

Acho este Template manager muinto bom e facil de usar, eu ja o uso ele fas bastante tempo principalmente por sua simplicidade, tamanho e o soporte a I18n en comparação con outros como smarty etc que são enormes e tein uma grande cantidade de arquivos (Este so tein un que não tein peso :) ) que no momento de sincronizar con o server de produção resulta bastante impractico alem de que o usuario tein que aprender como funciona deixa de colocar estructuras for while no codigo php pra colocar nos templates, :p não deveria ser asin.

Congratulations!!! Sergio.
08/12/2009 7:38am (~14 anos atrás)

Acho este Template manager muinto bom e facil de usar, eu ja o uso ele fas bastante tempo principalmente por sua simplicidade, tamanho e o soporte a I18n en comparação con outros como smarty etc que são enormes e tein uma grande cantidade de arquivos (Este so tein un que não tein peso :) ) que no momento de sincronizar con o server de produção resulta bastante impractico alem de que o usuario tein que aprender como funciona deixa de colocar estructuras for while no codigo php pra colocar nos templates, :p não deveria ser asin.

Congratulations!!! Sergio.
08/12/2009 7:38am (~14 anos atrás)

Acho este Template manager muinto bom e facil de usar, eu ja o uso ele fas bastante tempo principalmente por sua simplicidade, tamanho e o soporte a I18n en comparação con outros como smarty etc que são enormes e tein uma grande cantidade de arquivos (Este so tein un que não tein peso :) ) que no momento de sincronizar con o server de produção resulta bastante impractico alem de que o usuario tein que aprender como funciona deixa de colocar estructuras for while no codigo php pra colocar nos templates, :p não deveria ser asin.

Congratulations!!! Sergio.
08/12/2009 7:38am (~14 anos atrás)

Acho este Template manager muinto bom e facil de usar, eu ja o uso ele fas bastante tempo principalmente por sua simplicidade, tamanho e o soporte a I18n en comparação con outros como smarty etc que são enormes e tein uma grande cantidade de arquivos (Este so tein un que não tein peso :) ) que no momento de sincronizar con o server de produção resulta bastante impractico alem de que o usuario tein que aprender como funciona deixa de colocar estructuras for while no codigo php pra colocar nos templates, :p não deveria ser asin.

Congratulations!!! Sergio.
08/12/2009 7:37am (~14 anos atrás)

Acho este Template manager muinto bom e facil de usar, eu ja o uso ele fas bastante tempo principalmente por sua simplicidade, tamanho e o soporte a I18n en comparação con outros como smarty etc que são enormes e tein uma grande cantidade de arquivos (Este so tein un que não tein peso :) ) que no momento de sincronizar con o server de produção resulta bastante impractico alem de que o usuario tein que aprender como funciona deixa de colocar estructuras for while no codigo php pra colocar nos templates, :p não deveria ser asin.

Congratulations!!! Sergio.
08/12/2009 7:37am (~14 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)