Repository 32bit  Forum
Repository 64bit  Wiki

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.

Re: sito bilingue

Messaggioda conraid » lun mag 27, 2013 13:08

beh, puoi usare <b> anche se non formalmente corretto. Però sì, se il traduttore è a zero di html diventa un problema
Avatar utente
conraid
Staff
Staff
 
Messaggi: 11967
Iscritto il: mer lug 13, 2005 23:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current

Re: sito bilingue

Messaggioda aschenaz » lun mag 27, 2013 18:00

Io, come dicevo, non uso gettext e sbaglio. Ma la ragione è che mi sono realizzato un sistemino che funziona bene e non mi sono mai messo ad approfondire altri metodi.

Il mio sistema l'ho integrato nella classe che uso per i siti, ma ora l'ho estrapolato in forma strutturata. In pratica è un sistema plurilingue: avendo la competenza linguistica ed un po' di tempo a disposizione, si possono mettere quante lingue si vogliono.

Funziona così: c'è una directory con le bandierine, che devono essere tutte dello stesso tipo e dello stesso formato e devono essere nominate con la sigla della lingua (ad esempio it.png, en.png etc.); un semplicissimo script va a controllare le bandierine che ci sono nella directory e forma un'array delle lingue disponibili; quando l'utente sceglie la lingua, cliccando sulla bandierina, viene settato un cookie con la scelta; per la visualizzazione dei testi, ricorro ad un file esterno in cui sono memorizzate tutte le traduzioni in forma di array; in ogni array, i testi sono posizionati in ordine alfabetico per sigla (ad esempio, se le lingue sono solo "en" e "it", metto prima il testo inglese e poi quello italiano). Per aggiungere lingue, basta semplicemente aggiungere la relativa bandierina (ad esempio de.png) nella directory e i corrispondenti testi negli array del file esterno (ricordando l'ordine alfabetico, per cui, nell'esempio dato, i testi in tedesco andrebbero per primi...). Sembra complicato, ma nei fatti non lo è.

Ma ecco gli script:
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". */
$linguedisponibili=array();
foreach(scandir("flags") as $flag) {
   list($sigla,$ext)=explode(".",$flag);
   if($ext=="png") {
      $linguedisponibili[]=$sigla;
   }
}
/* Ho inizializzato un array vuoto per le lingue disponibili; poi sono andato a leggere la directory
dove ho messo le bandierine, ho estratto dal nome di ogni bandierina le prime due lettere, che costituiscono
la sigla della lingua ed ho popolato l'array in ordine alfabetico. */
$indicelingua=array_search($lingua,$linguedisponibili); // Verifico la chiave della lingua scelta nell'array.
include("lingue.php"); // includo la libreria con gli array multilingue
/* Poi, nel corpo della pagina, visualizzo le singole voci in questa forma: echo $NOMECAMPO[$indicelingua] */
?>
<html>
<head>
   <title><?php echo $titolohead[$indicelingua] ?></title>
</head>
<body>
<h1><?php echo $titolohome[$indicelingua] ?></h1>
<ul>
<?php
foreach($linguedisponibili as $flaglingua) echo "
   <li><a href=\"index.php?l=$flaglingua\"><img src=\"flags/$flaglingua.png\" alt=\"$flaglingua\" /></a></li>";
   echo "\n";
// Per ogni lingua visualizzo la bandiera con il link per la scelta.
?>
</ul>
<p><?php echo $hello[$indicelingua] ?></p>
</body>
</html>


lingue.php (la libreria con le traduzioni)
Codice: Seleziona tutto
<?php
/* Per ogni chiamata, preparo un array con le traduzioni in tutte le lingue che intendo
rendere disponibili, in ordine alfabetico per sigla (ad es. "de" "en" "es" "it"...); in questo
caso abbiamo solo due lingue: "en" e "it".*/

$titolohead=array("Multilingual Site","Sito Multilingue");
$titolohome=array("This is the homepage of my multilingual site","Questa &egrave; la home del mio sito multilingue");
$hello=array("Hello world","Ciao mondo");

// etc. etc.
?>


Gli script sono funzionanti. Per provarli subito, metto in allegato anche la directory con le bandierine.

Non sarà il massimo ma funziona.

EDIT - Ah, per quanto riguarda la scelta del cookie piuttosto che della session, l'avevo spiegata prima la ragione: secondo me, se uno vuole visualizzare un sito in una data lingua, non credo che per lui sia piacevole ogni volta andare a scegliere la lingua... Poi..., fate vobis.
Allegati
flags.tar.gz
(4.58 KiB) Scaricato 11 volte
pensieriemotivi.aschenaz.eu - music-blog
Avatar utente
aschenaz
Staff
Staff
 
Messaggi: 4409
Iscritto il: mar lug 27, 2004 23:00
Località: Reggio Calabria
Nome Cognome: Nino
Slackware: current 64bit
Kernel: 3.10.30
Desktop: KDE 4.10.5

Re: sito bilingue

Messaggioda samiel » lun mag 27, 2013 19:14

Considero una soluzione alla volta...
@ aschkenaz

Se non ho chiamate a singole stringhe di testo,
ma alcune pagine, come devo sistemare la <ul> del menu?
E po , appunto, qui ho 5-6 pagine per ogni lingua...

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

Re: sito bilingue

Messaggioda aschenaz » lun mag 27, 2013 20:14

Basta rinominare le pagine in questo modo:
italiane - it.nomepagina.php, it.altronomepagina.php etc.
inglesi - en.nomepagina.php, en.altronomepagina.php etc.

Poi, dopo aver settato la variabile $lingua come prima, richiami le pagine con...
Codice: Seleziona tutto
include("$lingua.nomepagina.php"); // etc...

... invece di richiamare le singole stringhe. La sostanza non cambia.
pensieriemotivi.aschenaz.eu - music-blog
Avatar utente
aschenaz
Staff
Staff
 
Messaggi: 4409
Iscritto il: mar lug 27, 2004 23:00
Località: Reggio Calabria
Nome Cognome: Nino
Slackware: current 64bit
Kernel: 3.10.30
Desktop: KDE 4.10.5

Re: sito bilingue

Messaggioda samiel » lun mag 27, 2013 20:32

All'interno di lingue.php?
Ma devo sfogliare il menu fon un foreach?
samiel
Staff
Staff
 
Messaggi: 5500
Iscritto il: ven gen 16, 2004 0:00
Località: Venezia
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian

Re: sito bilingue

Messaggioda aschenaz » lun mag 27, 2013 22:29

Beh, se intendi usare pagine intere, il file lingue.php potrebbe non servirti. Tuttalpiù potresti usarlo proprio per le voci di menu, se intendi tradurle, o per altri contenuti della index. Per il menu, sì, se intendi usare un array, fai come al solito con foreach.
Se hai un $menu=array("home","pagina1","pagina2"...), i file delle pagine li chiami it.home.php, en.home.php, it.pagina1.php etc... e poi
foreach($menu as $pagina) echo "
<a href=\"$lingua.$pagina.php\">$pagina</a>";
pensieriemotivi.aschenaz.eu - music-blog
Avatar utente
aschenaz
Staff
Staff
 
Messaggi: 4409
Iscritto il: mar lug 27, 2004 23:00
Località: Reggio Calabria
Nome Cognome: Nino
Slackware: current 64bit
Kernel: 3.10.30
Desktop: KDE 4.10.5

Re: sito bilingue

Messaggioda samiel » mar mag 28, 2013 20:59

Tipo così (che però ha errori...)
Codice: Seleziona tutto
<div id="navlist">
        <ul>
<?php
isset($_REQUEST["pagina"]) ? $lingua.$pagina=$_REQUEST["pagina"] : $lingua.$pagina="home";

$menu=array(
    "home"=>"",
    "camera"=>"Sistemazione",
    "prezzi"=>"Prezzi",
    "dovesiamo" =>"Dove siamo",
    "prenotazione"=>"Prenotazione",
    "contatti"=>"Contattaci",
    "link"=>"Link utili"
);

$activemenu=0; $folder="home";

foreach($menu as $kmenu=>$vmenu) { if(array_key_exists($lingua.$pagina,$vmenu) |
    $lingua.$pagina==$kmenu) { $activemenu=$menu[$kmenu]; $folder=$kmenu; } }
    $vocimenu=array(
   "home"=>"Home",
   "dovesiamo"=>"Dove siamo",
   "prenotazione"=>"Prenotazione",
   "contatti"=>"Contatti",
   "link"=>"Link utili"
    );
foreach($vocimenu as $voce=>$vocevisualizzata) { echo '<li>';
if($lingua.$pagina!=$voce) { echo $voce=="home" ? '<a href=".">' : '<a
    href="index.php?pagina='.$voce.'">'; } echo $vocevisualizzata;
if($lingua.$pagina!=$voce) echo "</a>"; echo "</li>"; } echo "\n";
?>
        </ul>

</div><!--navlist-->

O mi sono complicato la vita per nulla?

Naturalmente, anche il menu deve risultare bilingue...
m
samiel
Staff
Staff
 
Messaggi: 5500
Iscritto il: ven gen 16, 2004 0:00
Località: Venezia
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian

Re: sito bilingue

Messaggioda aschenaz » mer mag 29, 2013 7:41

Ho paura che ci sia un po' di confusione in quel codice.
Ora vado un po' di fretta e ti dico quello che salta agli occhi. Poi me lo guardo per bene a casa.

Innanzitutto, all'inizio assegna semplicemente il nome della pagina corrente, come facevi di solito, ovvero senza $lingua ($lingua mettilo quando includi la pagina). Poi, visto che il menu deve assegnare anche il titolo della pagina, devi creare un menu diverso per ogni lingua, così:
Codice: Seleziona tutto
$menu.it=array(...);
$menu.en=array(...);
etc.

E infine, richiami il menu così:
Codice: Seleziona tutto
foreach($menu.$lingua as $kmenu=>$vmenu) {...}

E visualizzi le voci del menu così come facevi di solito.

Poi, al momento di includere la pagina,...
Codice: Seleziona tutto
include("$lingua.$pagina.php");
pensieriemotivi.aschenaz.eu - music-blog
Avatar utente
aschenaz
Staff
Staff
 
Messaggi: 4409
Iscritto il: mar lug 27, 2004 23:00
Località: Reggio Calabria
Nome Cognome: Nino
Slackware: current 64bit
Kernel: 3.10.30
Desktop: KDE 4.10.5

Re: sito bilingue

Messaggioda samiel » mer mag 29, 2013 19:03

Il codice non è "un po'", ma molto confuso...
Fra l'altro, il primo foreach non dovrebbe includere anch'esso entrambe le lingue?
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";

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

$indicelingua=array_search($lingua,$linguedisponibili);

// includo la libreria con gli array multilingue
// include("lingue.php");
?>

<div id="navlist">
        <ul>
<?php
isset($_REQUEST["pagina"]) ? $pagina=$_REQUEST["pagina"] : $pagina="home";

$menu.$it=array(
    "home"=>"",
    "camera"=>"Sistemazione",
    "prezzi"=>"Prezzi",
    "dovesiamo" =>"Dove siamo",
    "prenotazione"=>"Prenotazione",
    "contatti"=>"Contattaci",
    "link"=>"Link utili"
);
$menu.$en=array(
    "home"=>"",
    "camera"=>"Accomodation",
    "prezzi"=>"Prices",
    "dovesiamo" =>"Where we are",
    "prenotazione"=>"Reservation",
    "contatti"=>"Contact us",
    "link"=>"Useful links"
);

$activemenu=0; $folder="home";

foreach($menu.$lingua as $kmenu=>$vmenu) { if(array_key_exists($pagina,$vmenu) |
    $pagina==$kmenu) { $activemenu=$menu[$kmenu]; $folder=$kmenu; } }
    $vocimenu=array(
   "home"=>"Home",
   "camera"=>"Sistemazione",
   "prezzi"=>"Prezzi",
   "dovesiamo" =>"Dove siamo",
   "prenotazione"=>"Prenotazione",
   "contatti"=>"Contattaci",
   "link"=>"Link utili"
    );
foreach($vocimenu as $voce=>$vocevisualizzata) { echo '<li>';
if($pagina!=$voce) { echo $voce=="home" ? '<a href=".">' : '<a
    href="index.php?pagina='.$voce.'">'; } echo $vocevisualizzata;
if($pagina!=$voce) echo "</a>"; echo "</li>"; } echo "\n";
?>
        </ul>
</div><!--navlist-->

<html>
<head>
   <title><?php echo $titolohead[$indicelingua] ?></title>
</head>
<body>
<h1><?php echo $titolohome[$indicelingua] ?></h1>
<ul>
<?php
foreach($linguedisponibili as $flaglingua) echo "
   <li><a href=\"index.php?l=$flaglingua\"><img src=\"flags/$flaglingua.png\"
alt=\"$flaglingua\" /></a></li>";
   echo "\n";
?>
</ul>
<p><?php echo $hello[$indicelingua] ?></p>
<div id="content">
<?php if(file_exists("$folder/$lingua.$pagina.php")) include("$folder/.$lingua.$pagina.php");
else @include("moduli/nondisp.php"); ?>
</div><!--content-->
</body>
</html>

Inoltre credo che l'include("lingue.php");
a questo punto non serva...

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

Re: sito bilingue

Messaggioda aschenaz » mer mag 29, 2013 22:10

È $menu.it etc. non $menu.$it.
Prova, prima di tutto a fare questa correzione. Poi vediamo il resto...
pensieriemotivi.aschenaz.eu - music-blog
Avatar utente
aschenaz
Staff
Staff
 
Messaggi: 4409
Iscritto il: mar lug 27, 2004 23:00
Località: Reggio Calabria
Nome Cognome: Nino
Slackware: current 64bit
Kernel: 3.10.30
Desktop: KDE 4.10.5

Re: sito bilingue

Messaggioda samiel » mer mag 29, 2013 22:13

Così mi dà errore
Codice: Seleziona tutto
Parse error: syntax error, unexpected '=' in /home/samiel/public_html/prova2/index.php on line 59


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

Re: sito bilingue

Messaggioda samiel » ven mag 31, 2013 18:27

Correzioni?
Sono incagliato alla grande :-(

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

Re: sito bilingue

Messaggioda aschenaz » sab giu 01, 2013 12:04

Il problema è che, se non ricordo male, tu avevi predisposto una struttura particolare, con sottomenu e sottodirectory per ogni pagina. Ma qui il codice mi sembra amputato di qualche parte essenziale. Dovresti postare la pagina originale, prima delle modifiche bilingue. Altrimenti non ci capisco nulla... :?
pensieriemotivi.aschenaz.eu - music-blog
Avatar utente
aschenaz
Staff
Staff
 
Messaggi: 4409
Iscritto il: mar lug 27, 2004 23:00
Località: Reggio Calabria
Nome Cognome: Nino
Slackware: current 64bit
Kernel: 3.10.30
Desktop: KDE 4.10.5

Re: sito bilingue

Messaggioda samiel » sab giu 01, 2013 13:12

No, questa è un'altra cosa,
solo le pagine che vedi,
niente sottomenu destri e sinistri.

Aspetta... volevo utilizzare il codice tuo,
quello che hai postato. Ma in modo da caricare
pagine e non stringhe di testo

Dopo cerco di capire
anchel'altra soluzione...

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

Re: sito bilingue

Messaggioda aschenaz » sab giu 01, 2013 15:50

E allora devi togliere quelle parti relative alle sottodirectory ed ai sottomenu. Nel codice che hai postato sopra ci sono chiamate ad array non definiti...
pensieriemotivi.aschenaz.eu - music-blog
Avatar utente
aschenaz
Staff
Staff
 
Messaggi: 4409
Iscritto il: mar lug 27, 2004 23:00
Località: Reggio Calabria
Nome Cognome: Nino
Slackware: current 64bit
Kernel: 3.10.30
Desktop: KDE 4.10.5

PrecedenteProssimo

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite