Página em PHP com tradução de forma simples

Este passo-a-passo é útil para ter versões de páginas e sites pequenos em diferentes idiomas, de forma muito simples.

Há formas mais adequadas para tradução de grandes sites e conteúdos, utilizando gettext (uma biblioteca do Projeto GNU utilizada para fazer a internacionalização de softwares) e arquivos PO, como o WordPress e diversos outros sistemas utilizam.

Estou usando esta forma de tradução para sites que são compostos de apenas uma ou duas páginas estáticas, com pouco conteúdo.

Foi baseado no script How to Add PHP Multilingual Support to a Website de Gabriel Livan.

Basicamente são necessários 4 arquivos:

  1. Arquivo principal do conteúdo: index.php
  2. Arquivo para configurar a tradução: common.php
  3. Arquivos com as traduções em si, pelo menos dois para haver a troca: lang.en.php e lang.pt-br.php

A estrutura fica assim:

site-simples
├── css
├── img
├── js
├── ...
├── languages            # Pasta para as traduções
│   ├── lang.en.php      # Conteúdo em inglês
│   ├── lang.pt-br.php   # Conteúdo em português
│   └── lang.xx.php      # Conteúdo em outros idiomas
├── common.php           # Arquivo de configuração
├── index.php            # Arquivo principal
├── ...
├── LICENSE
└── README.md

Dica: utilizar código para idiomas ISO 639-1 e, se necessário, código ISO para países, para aproveitar na tag <html> com o atributo lang.

O funcionamento é bem simples:

  1. No arquivo de conteúdo (index.php):
    1. Adicionar chamada para o arquivo de configuração, entre tags de PHP, no início do arquivo:
      <?php include_once 'common.php'; ?>
    2. Adicionar links para os idiomas desejados, utilizando um parâmetro na URL e o código do idioma, da forma que ficar melhor no tema do site:
      <a href="/?lang=en">English version</a>
      <a href="/?lang=pt-br">Versão em Português</a>
    3. Incluir na tag <html> o atributo lang de forma dinâmica conforme o idioma escolhido:
      <html lang="<?php echo $lang; ?>">
    4. No lugar do conteúdo a ser traduzido, incluir uma variável do tipo array com a chave indicando o termo desejado, por exemplo:
      <?php echo $wrd['nome']; ?>
      <?php echo $wrd['slogan']; ?>
      <?php echo $wrd['resumo']; ?>
      <?php echo $wrd['sobre']; ?>
  1. No arquivo de configuração (common.php):
    1. Receber o parâmetro da URL e definir um idioma padrão caso não exista o parâmetro:
      if(isset($_GET['lang'])) {
          $lang = $_GET['lang'];
      }
      else {
          $lang = 'pt-br';
      }
    2. Mapear os idiomas da URL com os respectivos arquivos de tradução, definindo também um arquivo padrão, caso seja digitado um idioma que não possua arquivo relacionado:
      switch ($lang) {
         case 'en':
         $lang_file = 'lang.en.php';
         break;
         
         case 'pt-br':
         $lang_file = 'lang.pt-br.php';
         break;
      
         default:
         $lang_file = 'lang.pt-br.php';
      
      }
      
      include_once 'languages/'.$lang_file;
  2. Nos arquivos de tradução (lang.en.php, lang.pt-br.php, lang.xx.php):
    1. Definir a variável como um array:
      $wrd = array();
    2. Definir cada tradução, por exemplo:
      $wrd['nome'] = 'Seu nome';
      $wrd['sobre'] = 'Texto com informações sobre o serviço';

Para ver um exemplo de uso, recentemente refiz meu site pessoal, criando uma versão em inglês: lfreitas.info

Créditos da foto: Photo by Esther from Pexels.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *