A seleção de idioma baseada em $ _SESSION não está funcionando corretamente

Meu site tem dois idiomas: inglês e russo. Os nomes de database desses idiomas são EN e RU.

Eu uso um script php + smarty antigo. Os códigos de seleção de idioma padrão desse script são os seguintes:

if(!isset($_SESSION)){ define('LANGUAGE_ID', 'EN'); } else if ($_SESSION['language'] == '') { define('LANGUAGE_ID', 'EN'); } 

Quando eu quero ver uma página em russo, eu via qualquer página com frase de idioma (? Language = RU) como esta:

http://www.example.com/index.php?language=RU

Mas essas páginas não são carregadas em russo em primeiro lugar. Quando clicei em outro link ou atualizei a página, carregamento de página em russo. Depois de salvar os cookies, eu posso ver as páginas em russo quando da primeira visita. Mas se eu excluir os cookies no navegador, então não pude ver em russo quando da primeira visita.

Experimentei muitas combinações, mas não consegui encontrar nenhuma solução. Você tem alguma ideia?

Muito obrigado…

Editar:

Eu encontrei alguns códigos em main.class.php:

 function __construct($dbh,$smartyBuild) { $this->dbh = $dbh; $this->sitevar = @$smartyBuild->FetchSiteVar(); $this->smartybuild = @$smartyBuild; if($_REQUEST['language'] !='') { $_SESSION['language'] = $_REQUEST['language']; } else { $langaugeAlready = mysql_fetch_array(mysql_query("select value from ".TABLE_PREFIX."sitevars where array_key = 'default_language_feed'")); if($_SESSION['language'] == '') { $_SESSION['language'] = $langaugeAlready['value']; } } if($_SESSION['language'] !='' ) { define('LANGUAGE_ID', $_SESSION['language']); } else { define('LANGUAGE_ID', 'EN'); $_SESSION['language'] = 'EN'; } } 

O problema está relacionado com esses códigos?

Como eu disse, sem todo o código, estamos adivinhando um pouco sobre o problema, mas aqui vai …

Parece que você está apenas verificando a variável $ _SESSION para o idioma e não a variável $ _GET (que obtém o idioma a partir do URL). Portanto, o valor só muda depois de atualizar a página.

Tente isso. Estou assumindo que sua intenção é mostrar o inglês como padrão e apenas russo se ele for definido na url, mas uma vez definido para manter esse idioma até que ele seja colocado novamente no URL.

  //start a session. must be called first on all pages you want it to work on session_start(); //first check if there's a new language coming from the URL if(isset($_GET['language'])) { // if we have a new language setting from the URL, check which one and save it in the session. // we check it is EN or RO before saving into the session since I don't know what you're using it for later. eg part of a DB query which would be a security risk if it is anything other than EN or RO. if($_GET['language'] == 'EN') { $_SESSION['language'] = 'EN'; } if($_GET['language'] == 'RO') { $_SESSION['language'] = 'RO'; } } //now check the session variable, which will have been updated above if changed if(isset($_SESSION['language'])) { // already have a language saved, so let's use it define('LANGUAGE_ID', $_SESSION['language']); } else { // no language from URL and no language saved, so default to english define('LANGUAGE_ID', 'EN'); }