- Home
- Categorie
- Coding e Sistemistica
- PHP
- Creazione sito multilingua
-
La funzione la puoi richiamare ma sempre in javascript:[PHP]
<script type="text/javascript">function lingua(var1) { <?php setcookie("lingua",?>var1<?php ,time()+3600000000000); define("kLingua",$_COOKIE['lingua']); header("location:".$_SERVER['PHP_SELF']); ?> } </script>[/PHP]
Non l'ho testata ma dovrebbe funzionare. Mettila prima delle bandiere.
Se non funziona allora crea una funzione per lingua, preimpostando la lingua e cambiando i nomi delle funzioni in italiano(), inglese() e richiamandole con l'onclick:
[PHP]
function italiano()
{
<?php
setcookie("lingua","it" ,time()+3600000000000);
define("kLingua",$_COOKIE['lingua']);
header("location:".$_SERVER['PHP_SELF']);
?>
}
</script>[/PHP]
-
Mi da errore qui:
(nel primo esempio di codice che mi hai scritto)
[PHP]setcookie("lingua",?>var1<?php ,time()+3600000000000);[/PHP]Parse error: syntax error, unexpected ';' in /web/htdocs/www.finsicilia.it/home/comen2010/funzioni.inc.php on line 5
-
Immaginavo (bisogna provarci a volte).
Allora crea una funzione per ogni lingua e la richiami dalle bandiere:
[PHP]
<script type="text/javascript">
function italiano(){
<?php
setcookie("lingua","it" ,time()+3600000000000);
define("kLingua",$_COOKIE['lingua']);
header("location:".$_SERVER['PHP_SELF']);
?>
}
function inglese(){
<?php
setcookie("lingua","en" ,time()+3600000000000);
define("kLingua",$_COOKIE['lingua']);
header("location:".$_SERVER['PHP_SELF']);
?>
}
function francese(){
<?php
setcookie("lingua","fr" ,time()+3600000000000);
define("kLingua",$_COOKIE['lingua']);
header("location:".$_SERVER['PHP_SELF']);
?>
}
</script>
[/PHP]Chiaramente inserisci il tutto in un file incluso e poi lo richiami dalle bandiere con l'evento onclick:
onclick="italiano();" >
e così per le altre lingue.
Non credo ci siano errori di battitura ma è tardi. Provaci e fammi sapere.
Buona notte
-
Niente, ci rinuncio... non funziona!
Se faccio in questo modo non mi carica la pagina perchè l'header lo fa sballare.
Se levo l'header il cookie non lo setta comunque...
Ci rinuncio!
-
Mai rinunciare. Ci sono mille vie per ottenere un risultato!
Il più semplice, a questo punto, è settare un get sulla stessa pagina:
[PHP]
if(isset($_GET['lingua'])){
setcookie("lingua",$_GET['lingua'] ,time()+3600000000000);
header("location:".$_SERVER['PHP_SELF']);
}
//il define tienilo fuori se no viene creato solo se è settato il GET lingua
define("kLingua",$_COOKIE['lingua']);[/PHP]
E nelle bandiere metti:
[PHP]
<div id="bandiere">
<a href="<?php echo $_SERVER['PHP_SELF']; ?>?lingua=it"><div class="IT"></div></a>
<a href="<?php echo $_SERVER['PHP_SELF']; ?>?lingua=en"><div class="EN"></div></a>
</div>
[/PHP]
Così ti fai un semplice controllo del GET. Se c'è la variabile lingua settata allora setta il cookie in automatico e fa un refresh della pagina.
Così ti basta aggiungere una bandiera cambiando il valore della variabile lingua e hai una nuova lingua.
Fammi sapere...
-
Ciao ragazzi, ho creato un file italiano.php che l'ho incluso nel file config.php.
Adesso provo a vedere se funziona il tutto scrivo nel file italiano.php questo codice
define("kHome","Home");
define("kContattaci","Contattaci");
define("kEshop","E-Shop");Vado nella index.php è scrivo:
<?php echo "KHome | KContattaci | kEshop"; ?>
Ma non mi stampa niente, cioè mi stampa i nome delle costanti come mai?
Ciao
-
Semplice, perchè così come hai scritto le costanti sono lette come stringa, in quanto sono tra doppi apici. Per ottenere il valore delle costanti, devi pensarle come variabili ma senza il dollaro davanti. Per questo uso la k
Quindi metti kHome." | ".kecc.. E funzionerà tutto perfettamente!
[URL=http://www.giorgiotave.it/forum/gt-world/101972-forum-gt-disponibile-alle-versioni-per-telefoni-cellulari.html]Postato via Mobile
-
Perfetto adesso va Grazie mille
-
Con il GET non dovrebbero esserci problemi, era stato il mio primo pensiero...mi sono solo bloccato perchè nel caso in cui sono nella pagina "pinco.php?p=34&t=ciao" e provo a fare un <? $_SERVER['PHP_SELF']; ?>?ln=en mi cancella tutti i valori GET che avevo prima.....
-
Se hai delle variabili GET già impostate devi usare $_SERVER['REQUEST_URI'] e gli aggiungi:
$_SERVER['REQUEST_URI']."&lingua=it
così ti rimangono le variabili invariate, aggiungendoti solamente la lingua.
Se invece non hai delle variabili GET settate non c'è problema.
Fatti un controllo. Se il GET è settato allora aggiungi &lingua=it altrimenti aggiungi ?lingua=it
-
C'è un modo per sapere se sono settate variabili GET in generale o devo sapere io per quella pagina quali potrebbero essere e vedo se è settata?
Comunque veramente grazie mille
-
E se lo facessimo con AJAX così non c'è bisogno di ri-caricare la pagina?
-
La parte con il GET va che è una meraviglia. C'è solo una cosa che vorrei migliorare..se mi date una mano ve ne sono grato.
Praticamente nel redirect (header) faccio un controllo. Se sono settate variabili GET redirect a $_SERVER['REQUEST_URI'] se no a $_SERVER['PHP_SELF']
Però devo controllare che tra queste variabili non sia solo la variabile Lingua.
E poi nelle bandierine:
[PHP]<a href="<?php echo $_SERVER['PHP_SELF']; ?>?lingua=it"><div class="IT"></div></a>
<a href="<?php if(isset($_GET) && count($_GET)) echo $_SERVER['REQUEST_URI']."&lingua=en"; else echo $_SERVER['PHP_SELF']."?lingua=en"; ?>"><div class="EN"></div></a>[/PHP]
Con questo codice, se ho la pagina index.php?news=2&lingua=en, se clicco sulla bandiera inglese mi collegherà a index.php?news=2&lingua=en&lingua=en
-
A quel punto dovresti fare tutto in ajax.
Il caricamento di quel tipo sarebbe troppo per php.
PHP funziona in modo sincrono, questo non permette di inviare dati ne di riceverli in modo asincrono.
Quindi una volta caricato il file della lingua, devi ricaricare la pagina con un nuovo file lingua per ottenere il risultato voluto.
Non so se esiste un isset($_GET). Prova, non si sa mai...
-
Forse non ti è chiaro il concetto del GET.
La forza di questo metodo è che una volta settato il cookie non hai più bisogno della variabile lingua nella URL.
Quella serve solo per il cambio di lingua poi non serve.
Quindi non ci deve essere sempre nella url (sai che brutto? ).
-
Esatto...se io sono nella pagina
index.php?news=2la bandierina avrà come link: index.php?news=2&lingua=en
Dentro il codice che controlla se $_GET['lingua'] è settata, faccio il redirect alla
<? $_SERVER['PHP_SELF'];?> ma perdo a quel punto il valore della variabile $_GET['news']. E' quello che voglio conservare, non la variabile $_GET['lingua']
-
Infatti per quello ti ho suggerito la request_uri, così tieni tutte le variabili get dell'url.
[URL=http://www.giorgiotave.it/forum/gt-world/101972-forum-gt-disponibile-alle-versioni-per-telefoni-cellulari.html]Postato via Mobile
-
Tengo tutte le variabili get, ma anche lingua allora
-
Quello non è un problema.
Tanto ogni volta che lo vede setta la lingua nel cookie. Se è sempre uguale non ti cambia nulla.
Se non vuoi che esegua un'operazione inutile, metti un controllo all'inizio:
[PHP]if(isset($_GET['lingua']) && $_GET['lingua']!=$_COOKIE['lingua']){
//cambia il cookie
}[/PHP]
In questo modo non esegue il settaggio del cookie se non c'è la variabile get lingua e se c'è ma è uguale a quella già settata nel cookie non fa comunque nulla.
Così cambia solo se è settata la lingua diversa dal cookie lingua.
Contorto da spiegare ma mooolto semplice da capire
-
Forse mi sono espresso male.
Metti caso che sono sulla pagina "ciao.php?news=2"Allora vedo che ho già un GET settato allora quando creo il link alla bandierina, invece di crearlo per $_SERVER['PHP_SELF'] (che mi farebbe perdere il valore di news), lo creo con $_SERVER['REQUEST_URI']. E fino a qui è tutto ok.
Ora in questo pezzo di codice:
[PHP]
if(isset($_GET['lingua'])){
setcookie("lingua",$_GET['lingua'] ,time()+3600000000000);
$redirect=$_SERVER['PHP_SELF'];
header("location:".$redirect);
}
define("kLingua",$_COOKIE['lingua']);
[/PHP]Cosa succede? Vede se la variabile "lingua" è settata e la assegna al Cookie. A quel punto mi deve re-indirizzare alla stessa pagina. Ma se faccio con $_SERVER['PHP_SELF'] perdo il valore di "news"...
Se metto $_SERVER['REQUEST_URI'] funziona perchè mi reindirizza a "ciao.php?news=2&lingua=en". Il mio problema è, come faccio ad eliminare dall'indirizzo a cui re-indirizzare il valore di "lingua"??
Sono stato più chiaro ora? Se no riprovo