Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá a todos, estou desenvolvendo um sistema de multiplos idiomas para meu site.
O que está acontecendo é o seguinte,tenho uma classe que altera o idioma através de cookies, essa classe dá include em um arquivo php, onde eu salvo os arrays com toda a 'tradução' do sistema.
Consigo instanciar a classe na view e ela dá include no arquivo normalmente, mas parece que ela faz esse include antes de carregar a view, sendo assim os arrays com as informações não são carregados.
A classe:
class LangSelect{
public function changeLang(){
//Não está abrindo os cookies na primeira execução
if(isset($_GET['lang']) && $_GET['lang'] != null){
$newLang = $_GET['lang'];
$path = "app/language/".$newLang.".php";
if(file_exists($path)){
setcookie("language", $newLang, time()+(24*3600*30));
$self = $_SERVER['PHP_SELF'];
$self = explode("/",$self);
$self = end($self);
header("Location: ".$self);
}
}
if(isset($_COOKIE['language'])){
$lang = $_COOKIE['language'];
$path = "app/language/".$lang.".php";
if(file_exists($path)){
include($path);
} else {
exit();
}
} else {
setcookie("language",DEFAULTLANG, time()+(24*3600*30));
include("app/language/portugues-br.php");
}
}
}
Instanciando a classe na view.tpl:
$changeLang = new LangSelect();
$callCL = $changeLang->changeLang();
O arquivo que é incluido:
$show['teste'] = "Linha de teste";
echo "incluido pt br";
O echo "incluido pt br" é carregado antes de todo html, mas quando vou chamar o $show['teste'] exibe o erro "undefined index".
Alguem sabe como eu posso ou carregar esses arrays antes do html, ou outra solução?
Grato a todo tipo de ajuda,
Dênis Fernandes
Obrigado pela resposta,
Não deu certo, declarei como global a variavel logo após instanciar a classe na view,
$changeLang = new LangSelect();
$callCL = $changeLang->changeLang();
global $show;
O error de variavel indefinida sumiu, porém o echo da variavel não funcionou.
Existe alguma outra idéia para o caso?
Att,
Dênis Fernandes
BOm cara num sei como ta todo seu codigo mais...
declara essas array ou objetos, no Construtor da class LangSelect{}, seria uma possibilidade ..
e uma ideia mais você tem que ve se nao vai amarra seu codigo.
Poxa, acho que isso iria justamente "amarrar" o código. Pois o sistema é de médio porte e carrega muitos arrays com as traduções, jogar tudo na classe acho que não seria uma boa idéia.
Básicamente o sistema busca nos cookies qual o idioma atual, vai até o arquivo correspondente do idioma, pega os arrays e suas traduções e supostamente deveria jogar esses arrays na view.
Onde é justamente onde está o problema, os arrays não vão pra view.
Cara, sabe de algum outro jeito de fazer esse sistema de multiplos idiomas?
Att,
Dênis Fernandes
pode retorna a string e da o include direto na View.. (POG on)=X
vai te que fica atendo aos caminhos do arquivo..
$path = "app/language/".$lang.".php";
if(file_exists($path)){
return (string)$path;//string de retorno
// view
$changeLang = new LangSelect();
$callCL = $changeLang->changeLang();
include_once($callCL);
var_dump($show);Cara, agora sim funcionou legal!!
Mas eu não entendi,o porque é uma gambiarra?
=X .. Tmb num sei .. kkk (acho que num é nao..)
o Importante e que funciono né =P
kkkkkk
Sim, isso que importa, obrigado pela ajuda, precisando de algo só falar! :yay:
talves resolva..
http://php.net/manual/en/language.variables.scope.php
global $show;