CodeIgniter: Templates e Internacionalização

by Vicente Russo Neto on May 31, 2008

Encontrei uma maneira rápida e fácil de usar várias línguas com templates. Acho que não é um sistema de templates de verdade, mas por enquanto, está dando conta do recado. Depois da configuração inicial do meu CodeIgniter, decidi implementar um sistema de várias linguas. Seguindo esse tutorial, notei que cada página (view) traduzida é na verdade um arquivo independente, Não achei isso legal, pois se meu designer precisa mudar uma tag ou uma propriedade, ele teria que mudar em todas as views.

O truque é simples, e certamente deve haver outra forma mais elegante de fazer isso. O artigo acima diz que se eu tenho uma visão “myview”, eu não preciso adicionar um sufixo caso eu esteja na minha língua padrão, mas em outras línguas, eu preciso do sufixo do código da língua, por exemplo _pt, _en, etc. Mas no meu caso, todas as línguas deverão ter seu próprio sufixo, até mesmo a língua padrão, e a minha view sem sufixo é na verdade o template da página.

O código abaixo mostra o meu controlador chamando meu template:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

//Remember to include this
require_once('i18n.php');

class Myview extends i18n {

    function Myview()
    {
        parent::i18n();
    }
   
    function index()
    {
        $this->load_view('myview'); // Aqui eu carrego o meu template que será interceptado
    }
}

/* End of file welcome.php */
/* Location: ./system/application/controllers/welcome.php */

Minha pequena modificação começa aqui. Eu não preciso chamar myview_pt pelo controlador (nesse caso eu teria que fazer uma checagem de qual lingua o usuario selecionou), porque o controlador modificado do artigo citado faz isso automaticamente. Então eu apenas crio myview_en.php e myview_pt.php (assumingo que tenho apenas essas duas línguas), e o conteudo desses arquivos seria algo mais ou menos assim:

1
2
<? $this->lang->load('myview', 'english'); ?>
<? include('myview.php'); ?>

Na primeira linha, “myview” é um arquivo localizado em system/language/english/myview_lang.php

Dessa forma eu coloco todo o meu html e css no myview.php e trabalho simulando um template. Espero que alguem venha comentar esse post dizendo “Olha, é assim que se faz corretamente”, mas até lá eu vou trabalando dessa forma pois assim pelo menos está resolvendo meu problema.

Até a próxima!

Did you like this? Share it:

{ 6 comments… read them below or add one }

Mikael August 12, 2008 at 6:46 pm

Valeu pelo comentário Vicente!

Robson September 16, 2008 at 11:32 am

A versão 1.6 já possui suporte nativo à internacionalização. Vc continua precisando apenas de uma view também e faz chamadas das variáveis da página via $this->lang->line(‘form_save’) , por exemplo.

admin September 17, 2008 at 6:07 pm

Sim, mas no caso não se usa templates

akira_lee December 3, 2008 at 11:52 am

Olá,
Tenho o codeigniter (estou a começar a explorar) mas ainda não percebi muito bem como posso usar as línguas. Tenho a pasta language/en, language/pt e language/es coloco um ficheiro com as variáveis (iguais em todos) e respectivas traduções, mas como faço para alterar o idioma? Há alguma maneira de o fazer sem ter que fazer refresh à pagina?

Obrigada

admin December 3, 2008 at 5:12 pm

Olá, infelizmente só com refresh mesmo, pois o CI depende da url para saber qual linguagem usar

nada March 31, 2009 at 8:46 pm

nada de mais, só um teste, favor apagar, desculpa ai amigo ter postado um teste em seu blog

Leave a Comment