sito bilingue

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
aschenaz
Staff
Staff
Messaggi: 4623
Iscritto il: mer 28 lug 2004, 0:00
Nome Cognome: Nino
Slackware: current
Kernel: 5.4.x
Desktop: KDE
Località: Reggio Calabria
Contatta:

Re: sito bilingue

Messaggio da aschenaz »

Vediamo se ho capito...
index.php

Codice: Seleziona tutto

<?php
if(isset($_GET["l"])) {
	$l2set=$_GET["l"];
	setcookie("linguascelta",$l2set,time()+31536000);
	header("Location: index.php");
} 
elseif(isset($_COOKIE["linguascelta"])) $lingua=$_COOKIE["linguascelta"];
else $lingua="it";
/* Ho verificato se è stata scelta la lingua nella querystring ($_GET["l"]) e, nel caso, 
memorizzo un cookie con la scelta per una durata di un anno, tornando poi con l'header alla pagina
per leggere il cookie impostato; altrimenti verifico se esiste già un cookie con la lingua e, nel 
caso, lo importo nella variabile $lingua; come default, infine, setto la lingua ad "it". */
isset($_REQUEST["pagina"]) ? $pagina=$_REQUEST["pagina"] : $pagina="home";
$linguedisponibili=array("en","it");
/*
foreach(scandir("flags") as $flag) {
	list($sigla,$ext)=explode(".",$flag);
	if($ext=="png") {
		$linguedisponibili[]=$sigla;
	}
}
Visto che, nel caso, servono solo inglese e italiano, è inutile sprecare risorse per la scansione della directory delle bandierine.
$indicelingua=array_search($lingua,$linguedisponibili); // Verifico la chiave della lingua scelta nell'array.
include("lingue.php"); // includo la libreria con gli array multilingue
Quindi, se usi pagine intere, questa parte non serve più. Se usi lingue.php, nel corpo della pagina, visualizza le singole voci in questa forma: echo $NOMECAMPO[$indicelingua]. Altrimenti, per piccole parti, puoi riportare qui i pochi array che servono e poi richiamarli nella forma $NOMECAMPO[$lingua]: */
$titolohead=array(
	"en"=>"Multilingual Site",
	"it"=>"Sito Plurilingue"
);
$paginanondisponibile=array(
	"en"=>"Page under costruction",
	"it"=>"Pagina in allestimento"
);
/* Il menu, a questo punto conviene scinderlo tra pagine (il cui nome base rimane sempre uguale perché deve richiamare dei file) e titoli visualizzati, diversi per le due lingue, MANTENENDO LO STESSO ORDINE DELL'ARRAY DELLE PAGINE: */
$menu=array("home","camera","prezzi","dovesiamo","prenotazione","contatti","link");
$titolipagina=array(
	"en"=>array("Home","Accomodation","Prices","Where we are","Reservation","Contact us","Useful links"),
	"it"=>array("Home","Sistemazione","Prezzi","Dove siamo","Prenotazione","Contattaci","Link utili")
);
// Trovo l'indice della pagina corrente:
$indicepagina=array_search($pagina,$menu);
?>
<html>
<head>
	<title><?php echo $titolohead[$lingua] ?></title>
</head>
<body>
	<ul>
<?php
// Per ogni lingua visualizzo la bandiera con il link per la scelta:
foreach($linguedisponibili as $flaglingua) echo "
		<li style=\"list-style:none;float:left;width:40px\"><a href=\"index.php?l=$flaglingua\"><img src=\"flags/$flaglingua.png\" alt=\"$flaglingua\" /></a></li>";
	echo "
	</ul>
	<br style=\"clear:both\" />\n";
?>
   <div id="navlist">
			<ul>
<?php
// Visualizzo il menu
foreach($menu as $kmenu=>$vmenu) {
	// Se non è la pagina corrente visualizzo il link:
	$vmenu!=$pagina ? $aprilink="<a href=\"index.php?pagina=$vmenu\">" : $aprilink="";
	$vmenu!=$pagina ? $chiudilink="</a>" : $chiudilink="";
	/* Richiamo il titolo nella lingua corrente, usando la chiave della voce di menu 
	(per questo è fondamentale mantenere lo stesso ordine negli array): */
	$titolopagina=$titolipagina[$lingua][$kmenu];
	echo "
		<li>$aprilink$titolopagina$chiudilink</li>";
}
echo "\n";
?>
		</ul>
	</div>
<?php
// Se la pagina è diversa dalla home visualizzo il suo titolo:
if($pagina!="home") echo "
	<h1>".$titolipagina[$lingua][$indicepagina]."</h1>\n"; 
$nomefile=$pagina."_".$lingua;
if(file_exists("pages/$nomefile.php")) include("pages/$nomefile.php");
else echo "
		<p>$paginanondisponibile[$lingua]</p>\n";
?>
</body>
</html>
Per le pagine interne, forma i file con questi nomi: home_it.php, home_en.php etc. (stesse voci del menu, mi raccomando) e mettili nella sottodirectory "pages" (o come vuoi tu, l'importante è che poi li richiami dalla sottodirectory giusta nell'include). Ad esempio, io ho creato due semplici file per la home...
home_it.php

Codice: Seleziona tutto

	<div>
	Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
	</div>
home_en.php

Codice: Seleziona tutto

				
       <div>
	Nor again is there anyone who loves or pursues or desires to obtain pain of itself, because it is pain, but occasionally circumstances occur in which toil and pain can procure him some great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no annoying consequences, or one who avoids a pain that produces no resultant pleasure?
	</div>

samiel
Staff
Staff
Messaggi: 5511
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Re: sito bilingue

Messaggio da samiel »

Fantasticoooooo! Ma... è troppo!!
Posto il codice intero dell'index.php se ad altri potesse servire:

Codice: Seleziona tutto

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="it">

<?php
if(isset($_GET["l"])) {
   $l2set=$_GET["l"];
   setcookie("linguascelta",$l2set,time()+31536000);
   header("Location: index.php");
}
elseif(isset($_COOKIE["linguascelta"])) $lingua=$_COOKIE["linguascelta"];
else $lingua="it";

isset($_REQUEST["pagina"]) ? $pagina=$_REQUEST["pagina"] : $pagina="home";
$linguedisponibili=array("en","it");

/*
foreach(scandir("flags") as $flag) {
   list($sigla,$ext)=explode(".",$flag);
   if($ext=="png") {
      $linguedisponibili[]=$sigla;
   }
}
*/

$titolohead=array(
   "en"=>"Multilingual Site",
   "it"=>"Sito Plurilingue"
);
$paginanondisponibile=array(
   "en"=>"Page under costruction",
   "it"=>"Pagina in allestimento"
);

$menu=array("home","camera","prezzi","dovesiamo","prenotazione","contatti","link");
$titolipagina=array(
   "en"=>array("Home","Accomodation","Prices","Where we are","Reservation","Contact us","Useful links"),
   "it"=>array("Home","Sistemazione","Prezzi","Dove siamo","Prenotazione","Contattaci","Link utili")
);
$indicepagina=array_search($pagina,$menu);
?>
<head>
<title><?php echo $titolohead[$lingua] ?></title>

<meta name="generator" content="Quanta Plus" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="robots" content="index,follow" />
<link rel="stylesheet" type="text/css" href="stylesheets/layout.css" />

<?php
$pages = array ("camera_it","camera_en","dovesiamo_it","dovesiamo_en");
if (isset($_GET["pagina"]) && in_array($_GET["pagina"], $pages)) {
    echo '<link rel="stylesheet" href="css/screen.css" type="text/css" media="screen" />';
    echo '<link rel="stylesheet" href="css/lightbox.css" type="text/css" media="screen" />';
}
?>

<script src="js/jquery-1.7.2.min.js"></script>
<script src="js/jquery-ui-1.8.18.custom.min.js"></script>
<script src="js/jquery.smooth-scroll.min.js"></script>
<script src="js/lightbox.js"></script>

<script>
  jQuery(document).ready(function($) {
      $('a').smoothScroll({
        speed: 1000,
        easing: 'easeInOutCubic'
      });

      $('.showOlderChanges').on('click', function(e){
        $('.changelog .old').slideDown('slow');
        $(this).fadeOut();
        e.preventDefault();
      })
  });

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-2196019-1']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();
</script>
</head>

<body>
<div id="header">
   <ul>
<?php
// Per ogni lingua visualizzo la bandiera con il link per la scelta:
foreach($linguedisponibili as $flaglingua) echo "
      <li style=\"list-style:none;float:right;width:40px\"><a href=\"index.php?l=$flaglingua\"><img src=\"flags/$flaglingua.png\" alt=\"$flaglingua\" /></a></li>";
   echo "
   </ul>
   <br style=\"clear:both\" />\n";
?>

<h1>Bed & Breakfast</h1>
<h2>Venezia</h2>

<div id="navlist">
         <ul>
<?php

foreach($menu as $kmenu=>$vmenu) {
   $vmenu!=$pagina ? $aprilink="<a href=\"index.php?pagina=$vmenu\">" : $aprilink="";
   $vmenu!=$pagina ? $chiudilink="</a>" : $chiudilink="";
   $titolopagina=$titolipagina[$lingua][$kmenu];
   echo "
      <li>$aprilink$titolopagina$chiudilink</li>";
}
echo "\n";
?>
      </ul>
   </div><!--navlist-->
</div><!--header-->

<div id="content">
<?php
if($pagina!="home") echo "
   <h1 class=\"full\">".$titolipagina[$lingua][$indicepagina]."</h1>\n";
$nomefile=$pagina."_".$lingua;
if(file_exists("pages/$nomefile.php")) include("pages/$nomefile.php");
else echo "
      <p>$paginanondisponibile[$lingua]</p>\n";
?>
</div><!--content-->

<div id="footer">
    <?php
    print ($pagina == "home") ? "<img id=\"piclog1\"
    src=\"pics/valid_xhtml11_blue.png\" alt=\"Valid XHTML 1.1\" title=\"Logo W3C
    Valid XHTML 1.1\" /> <img id=\"piclog2\" src=\"pics/valid_css2_blue.png\"
    alt=\"Valid CSS2\" title=\"Logo W3C Valid CSS2\" /> <img id=\"piclog3\"
    src=\"pics/php5-power-micro.png\" alt=\"Logo Powered by PHP5\" title=\"Logo
    Powered by PHP5\" /> <p>&#169; B&B - 2013</p>" :
    "<p>&#169; B&B \"Sull'acqua\" - 2013</p>";
    ?>
</div><!--footer-->
</body>
</html>
@ aschkenaz
C'è solo Una sola cosa residua, ma te la segnalo con un messaggio
comunque la fornitura a vita di "Baicoli", come minimo, devi accettarla :-)

m

Rispondi