Newsgroup: it.comp.www.php
Titolo: Sito multilingua

Salve,
Dovrei realizzare un mio sito personale multilingua (ita,eng), e da quel
che ho letto e' possibile farlo con php e mysql (salvando il testo delle
pagine sul database).
Conoscete una guida online, un tutorial, o un sito di esempio da cui
potrei prendere spunto?
Grazie

Mike ha scritto:

Perchè salvare il testo su un database?
Ti consiglio invece di utilizzare la funzione gettext().
Saluti,
David
-- 
Linux Registered User #334216
Get FireFox! >> 
http://www.spreadfirefox.com/?q=affiliates&id=48183&t=1
Staff >> 
http://www.debianizzati.org
 <<

 
Si, so che e' possibile fare il tutto con gettext().
Quello che dovrei fare e' piu' che altro a scopo didattico. Avrei
bisogno di imparare ad utilizzare php assieme a mysql, ma il sito che devo
fare e' di minime dimensioni, quindi l'unica cosa che mi era venuta in
mente per utilizzare sia php che mysql era di farlo multilingua con questo
sistema. Tra l'altro in rete ho letto che e' una cosa fattibile, mi
chiedevo solo se per caso c'erano guide o altro.
O dici che e' proprio sconsigliato e non avrebbe senso?
Grazie
Saluti

 
Beh, io te lo sconsiglierei.
Se devi imparare ad usare PHP + MySQL allora fai un sistema di gestione
degli utenti: registrazione, login, ...
Ma per il multilinguismo, ti consiglio vivamente gettext(): eviti query
_inutili_ al database, non devi attivare un db MySQL, e per modificare
le traduzioni ti basta cambiare un file di testo. Nel caso di db MySQL,
dovresti definire tante costanti quanti testi hai... e non ha molto senso...


 Ma per il multilinguismo, ti consiglio vivamente gettext()
Ma vale pure per i testi dinamici? Voglio dire, supponi che ci sia una 
redazione che periodicamente deve inserire un articolo, e questo 
articolo deve essere scritto in tre lingue (ita, eng, esp). Il discorso 
gettext() viene meno, perche' l'articolo deve comunque essere salvato su 
database. O no? Insomma, gettext() lavora sul solo contenitore, o anche 
sul contenuto?
Intanto filo a studiare il manuale, yes :-)
-- 
Falco Stellare - DeepVoid
www.deepvoid.it

 
Allora, ti faccio un esempio.
<?php
setlocale(LC_ALL, 'en_GB'); // o it_IT, en_US, fr_FR, la lingua che vuoi
tu insomma!
bindtextdomain("miaapp", "/path/ai/file/mo");
textdomain("miaapp");
echo gettext("Ciao"); // oppure _("Ciao"): _() è un alias di gettext().
?>
Ora, tu hai dei file .po che devi convertire in .mo, per poter essere
usati da gettext.
I file .po hanno questa forma
msgid "Stringa nella lingua usata nel codice"
msgstr "Stringa tradotta".
Quindi, per l'esempio precedente:
msgid "Ciao"
msgstr "Hello"
(questo è en_GB.po (o en_US, quello che setti in setlocale())).
Per convertire il file .po in un binario .mo fai:
$ msgfmt -o en_GB.mo en_GB.po
Posizioni quindi il .mo nella cartella indicata in bindtextdomain().
Nel caso precedente, con setlocale(LC_ALL, "en_GB"), l'echo non darà
"Ciao", ma darà "Hello" (la stringa in msgstr).
Ora, il tuo problema sorge con i testi "dinamici".
Potresti:
1) scrivere uno script PHP di supporto, che modifichi in remoto
on-the-fly i file .po e li converta in .mo (cioè, quando qualcuno posta
deve scrivere il messaggio sia in italiano che in inglese... separati da
opportuni token, che tu vai a processare nello script. Quindi la parte
in italiano la metti in msgid e la parte tradotta in msgstr. E poi
compili il .po in .mo);
2) utilizzare la soluzione che dici tu, cioè utilizzare un database come
backend. Anche in questo caso, però, dovresti utilizzare dei token per
separare le diverse lingue in cui scrivi i tuoi testi "dinamici". E
salvare tutto, compresi i token, nel database, e mostrare solo il testo
nella lingua scelta, scartando il resto.
3) qualcuno ha qualche altra idea?
Saluti,
David
P.S.: a conti fatti, la soluzione del db con i tokens per i testi
dinamici mi sembra la soluzione più ottimale. Per i testi statici (tipo
voci di menù, nomi, ...) utilizza gettext(), così da non impegnare il
server del db...


 
La struttura della cartella deve essere:
/path/ai/file/mo
|en_EN
||----LC_MESSAGES
||----|----miapp.mo
|it_IT
||----LC_MESSAGES
||----|----miapp.mo
|es_ES
||----LC_MESSAGES
||----|----miapp.mo
David
P.S.: non so se la struttura della cartella _deve necessariamente_
essere questa... io ho sempre usato questa e non ho mai avuto problemi.



mi inserisco io non ho mai avuto problemi con la lingua e non sto usando
gettext (perchè devo vedermela bene...)
Mi chiedo ma se devo dare la poss agli utenti di cambiare i testi ?
si può fare....?