Site multi-língua

Galera quero montar um site multi-língua, porém por hora, ñ quero usar a classe CDbMessageSource, quero usar a classe CPhpMessageSource que me parece q serte para ler um array em um arquivo php e é exatamente oq quero. Só q não acho algo q mostre de forma clara a implementação disso.

E claro, isso teria q ser variável ou seja, teria no site as "banderinhas" dos países e ao clicar no país daria um refresh (seria melhor com jQuery) e mudaria o idioma.

Infos extras, já tenho em meu projeto a pasta que contem os arquivos de tradução que preciso em framework/i18n/data e se eu testar:


$locale = Yii::app()->getLocale('pt-br');

echo "<pre>";

print_r($locale->monthNames);

echo "</pre>";

Ele me mostra os meses traduzidos, até aí blz, mas preciso traduzir o conteúdo do site, coisas como menus, e textos de labels de formulário.

falae,

tente dar uma olhada nessa ext: http://www.yiiframework.com/extension/cms

dá uma olhada na implementação da tradução p/ ver se ajuda

Cálcio,

Uma vez segui esta wiki:

http://www.yiiframework.com/wiki/26/setting-and-maintaining-the-language-in-application-i18n/

Mais fiz umas modificação.

Valeu, vou tentar implementar hj a noite.

Vou tentar primeiro a opção que o @Newerton sugeriu parece + simples. @Newerton as modificações q vc fez foi usando behaviour como nos comentários do link q postou?

Cálcio,

Vou mostrar como está uma aplicação de um cliente que foi o primeiro que fiz multilinguagem.

config/main.php




return array(

    'language' => 'pt_br',

...



Você precisa definir a linguagem padrão, que é onde você vai usar o Yii::t().

protected/component/Controller.php




public function init(){

...

       if (isset($_GET['linguagem']) && !empty($_GET['linguagem'])) {

            Yii::app()->language = $_GET['linguagem'];

            Yii::app()->session['_linguagem'] = Yii::app()->language;

        } else if (isset(Yii::app()->session['_linguagem']) && !empty(Yii::app()->session['_linguagem'])) {

            Yii::app()->language = Yii::app()->session['_linguagem'];

        } else {

            Yii::app()->session['_linguagem'] = Yii::app()->language;

        }

        setLocalidade(Yii::app()->language);

...

}



Eu fiz 3 comparação, caso a linguagem venha por GET, por Sessão ou caso não venha nada, como a primeira visita, já define a linguagem padrão pelo Yii::app()->linguagem.

A função que fiz setLocalidade(), que sempre deixo no global.php que fica na pasta root, e para definir o setlocale() do PHP, por que algumas notícias tem o nome da semana por extenso(Segunda-feira, terça-feira,…) eo setlocale muda isso automático pra mim.

Onde chamo esse setLocalidade()?

index.php




$global=dirname(__FILE__).'/global.php';

$yii=dirname(__FILE__).'/framework/yii.php';

$config=dirname(__FILE__).'/protected/config/main.php';

...



Nesse global.php que está junto com o index.php que eu defino os error_reporting(), selocale() e outros parametros.

setLocalidade()




function setLocalidade($lang){

    

    if($lang == 'pt_br'){

        setlocale(LC_ALL, "pt_BR", "ptb");

    } else if($lang == 'es'){

        setlocale(LC_ALL, "esp", "pt");

    } else if($lang == 'en'){

        setlocale(LC_ALL, "en", "us");

    }

}



Agora o Controller onde eu defino a linguagem quando é clicado nas bandeiras.




class IndexController extends Controller {

public function actionLinguagem() {


        if (isset($_GET['linguagem']) && !empty($_GET['linguagem'])) {

            Yii::app()->language = $_GET['linguagem'];

            Yii::app()->session['_linguagem'] = Yii::app()->language;

        } else if (isset(Yii::app()->session['_linguagem'])) {

            Yii::app()->session->destroy();

        }


        $url = $_SERVER['HTTP_REFERER'];

        $this->redirect($url);

    }

}



Link:


Yii::app()->createUrl('index/linguagem', array('linguagem' => 'pt_br'));

Yii::app()->createUrl('index/linguagem', array('linguagem' => 'en'));

Yii::app()->createUrl('index/linguagem', array('linguagem' => 'es'));

No proximo projeto que pegar com linguagem quero fazer com cookie, ai o usuário não precisa ficar sempre selecionando a linguagem.

Pode usar a API do IPInfoDB.com para fazer a consulta da localidade por IP e assim definir o idioma como o Newerton demonstrou!

@Hans, vc já implementou ele com Yii? Se sim. Foi de boa?

Se alguém conhecer algum link ou video aula que monstre isso seria legal compartilhar aqui.

Sim, mas não conheço nenhum material a respeito!