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.