- Home
- Categorie
- Coding e Sistemistica
- PHP
- Creazione sito multilingua
-
Ciao a tutti, ottima spiegazione. Ma se per esempio mi trovo nella pagina pinco.php e voglio cambiare la lingua cliccando sulla bandierina, richiamo una pagina che si chiama setLang.php e gli passo per GET la lingua che voglio settare quindi setLang.php?ln=en
La pagina contiene il seguente codice:[PHP]<?
if($_GET['ln']!="")
setcookie("lingua",$_GET['ln'],time()+360000000000);
else
setcookie("lingua","it",time()+360000000000);
define("kLingua",$_COOKIE['lingua']);
?>[/PHP]E' giusto?
Come faccio a tornare alla pagina pinco.php?
Grazie!!
-
In teoria puoi anche solo creare una funzione che ti setti il cookie e poi ti faccia il refresh della pagina, così non importa in quale pagina tu sia.
Una volta che il cookie è settato sei a posto. Importante, ma anche scontato, che il cookie che viene creato basta sovrascriverlo per avere una nuova lingua per "sempre" (metto le virgolette perché non esiste qualcosa di perenne bensì a lunga scadenza).
[PHP]
function lingua($lingua){
setcookie("lingua",$lingua,time()+3600000000000);
header("location:".$_SERVER['PHP_SELF']);
}
[/PHP]
Non l'ho testata ma il concetto è semplice: ad ogni bandiera (o link lingua) si associa un onclick con valore lingua(it) nel caso dell'italiano, lingua(en) nel caso dell'inglese e via discorrendo.
Questo it ed en saranno i nomi del file delle definizioni del sito (e se vuoi crei una seconda funzione con l'id_lingua per la parte database, come spiegato sopra).
Quindi si avrà un
[PHP]
include "lingue/".$_COOKIE['lingua'].".php";
//il risultato nel caso dell'italiano sarà: lingue/it.php
[/PHP]
Di conseguenza si dovranno creare due file (nel caso di due lingue) con le stesse costanti (quindi creare prima l'italiano perfettamente e POI le altre lingue) con i nomi di it,en,ru,te,sp,fr ecc...
Io uso due lettere ma anche tre vanno bene.Per la soluzione che hai proposto tu, talkoman, puoi passare tramite GET la URL della pagina dalla quale invii la richiesta di cambio lingua tramite:
setLang.php?ln=it&url=$_SERVER['PHP_SELF']
ma è SCONSIGLIATISSSSSIIIMISSSIMO!!!! poiché se un hacker dovesse mettere l'indirizzo di una pagina che esegue funzioni dannose poi ne saresti tu il responsabile!!
E' una delle fregature del GET.
O lo passi tramite post creando una funzione in javascript ma a questo punto creati la funzione lingua e rimane tutto nella pagina
-
Ma come faccio a richiamare una funzione cliccando sulla bandierina e ri-aggiornare la pagina?
Grazie
[URL=http://www.giorgiotave.it/forum/gt-world/101972-forum-gt-disponibile-alle-versioni-per-telefoni-cellulari.html]Postato via Mobile
-
ad ogni bandiera (o link lingua) si associa un onclick con valore lingua(it) nel caso dell'italiano, lingua(en) nel caso dell'inglese e via discorrendo.
Come dicevo basta un evento onclick sull'immagine, al quale associ il nome della funzione e tra parentesi il valore che vuoi passare (bandiera italiana: onclick="lingue(it);"> Inglese: onclick="lingue(en);">)
-
Ma posso con un onClick richiamare una funzione PHP?
-
Certamente
-
Non mi funziona...
Allora io ho le bandierine in un file funzioni.inc.php che includo in tutte le pagine.
Le bandierine sono nella seguente funzione:
[PHP]<? function testa(){?>
<div class="testa">
<a href="index.php"><img src="immagini/logoTop.png" alt="Home Page" class="logoTop" /></a>
<div id="bandiere">
<a href="#" onclick="lingue(it);"><div class="IT"></div></a>
<a href="#" onclick="lingue(en);"><div class="EN"></div></a>
</div>
</div>
<?php }[/PHP]E in ogni pagina richiamo la funzione testa().
Ora la funzione lingue() dove la devo inserire? Sempre dentro il file funzioni.inc.php o addirittura dentro la funzione testa()? Se metto il redirect dentro la funzione lingue(), non mi reinderizza a funzioni.inc.php?
-
ma non devi mica mettere le bandiere in una funzione!
Devi mettere il codice del cookie dentro alla funzione e richiamarla.
Le bandiere sono semplici link
-
Io le metto dentro una funzione insieme a tutta la testata del sito perchè se cambio una cosa dovrei cambiarla in tutte le pagine. Così modifico la funzione e automaticamente si cambia in tutte le pagine....ma parliamo delle bandierine....
E' giusto così?
[PHP]<? function testa(){?>
<?
function lingua($lingua){
setcookie("lingua",$lingua,time()+3600000000000);
header("location:".$_SERVER['PHP_SELF']);
}
?>
<div class="testa">
<a href="index.php"><img src="immagini/logoTop.png" alt="Home Page" class="logoTop" /></a>
<div id="bandiere">
<a href="#" onclick="lingua('it');"><div class="IT"></div></a>
<a href="#" onclick="lingua('en');"><div class="EN"></div></a>
</div>
</div>
<?php }?>[/PHP]
-
Allora, se devi avere le bandiere modificabili mettile in un file esterno e includilo.
La funzione della lingua è una cosa a se stante. Non deve essere una sottofunzione o dipendende da qualcosa,
-
Infatti è in un file a parte che includo "funzioni.inc.php"
Così com'è?
[PHP]<? function testa(){?>
<div class="testa">
<a href="index.php"><img src="immagini/logoTop.png" alt="Home Page" class="logoTop" /></a>
<div id="bandiere">
<a href="#" onclick="lingua('it');"><div class="IT"></div></a>
<a href="#" onclick="lingua('en');"><div class="EN"></div></a>
</div>
</div>
<?php }
function lingua($lingua){
setcookie("lingua",$lingua,time()+3600000000000);
define("kLingua",$_COOKIE['lingua']);
header("location:".$_SERVER['PHP_SELF']);
}?>[/PHP]
-
Non mi funziona
-
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