Newsgroup: it.comp.www.php
Titolo: L'ostacolo del multilanguage...

Salve,
 
vi spiego brevemente il problema, ipotizziamo un database di un libro di 
ricette in cui ogni ricetta deve avere gli ingredienti tradotti in "x" 
lingue.
 
Ho ipotizzato di crearmi una tabella principale di ingredienti in lingua 
inglese ed un altra più generica con tutte le lingua da associare con 
una FK alla main table in inglese:
 
engtable
----------
ID NAME
1  milk
2  bread
3  water
 
alllangtable
-----------------------------
ID LANG NAME   FK_id_engtable
1  ita  latte  1
2  ita  pane   2
3  ita  acqua  3
4  spa  leche  1
5  spa  pan    2
6  spa  agua   3
 
Con questa soluzione non ci si sbaglia perché voglio una completa 
corrispondenza con l'inglese e con le FK non si sfugge, a marzo una 
risposta nel n.g. è stata quella di crearmi una tabella singola con 
tutte le lingue inglese completo e formare una "internal key" verso gli 
ingredienti in inglese ma si rischiavamo casini senza una vera e propria FK.
 
Una teacher di php/mysql mi ha consigliato di crearmi dei file esterni 
per le lingue ma non ho ben capito a cosa si riferisse e soprattutto se 
voi reputaste tale scelta, in base al problema, vincente.
 
Saluti!
^Bart

Il 15/06/19 22:52, ^Bart ha scritto:

A mio avviso ti ha consigliato bene. puoi crearti dei file .po (tramite 
ad esempio poedit) e leggerli tramite gettext
https://www.php.net/manual/en/book.gettext.php
 
 
prendi la lingua dall'url e carichi il file corretto.
 
esempio
 
www.miosito.com/recipient
 
www.miosito.com/it/recipient
 
www.miosito.com/de/recipient
 
ecc..
 
sai perfettamente che se l'url non contiene la lingua è in inglese 
altrimenti carichi il file corrispondente it.po, de.po ecc
 
all'interno dell'applicazione setti il locale con la lingua caricata
 
 
ancora più complesso ma ancor meglio ed è quello che ho fatto per una 
mia applicazione è prendere la lingua del browser
 
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2)
 
e caricare il file .po corrispondente, se non è presente prendi l'IP del 
browser e cerchi in quale nazione è l'IP
 
https://ipstack.com/
 (tramite una chiamata API)
 
, altrimenti imposto l'inglese come default, con la facoltà di scegliere 
la lingua da un menù.
 
 
 
Ciao

>>>>  
http://www.bb2002.it
 :)  <<<<<
........... [ al lavoro ] ...........

 voi reputaste tale scelta, in base al problema, vincente.
 
Pessima idea, secondo me, visto il tipo di applicazione che stai facendo.
 
I file .po sono ottimi per tradurre le interfacce, perché, oltre ad 
avere ottime prestazioni (sono "precompilati") hanno un ottimo supporto 
per i plurali, e ci sono applicazioni che aiutano i traduttori a tradurli.
 
Ma tu stai facendo un sito di ricette. Si presume che gli ingredienti 
possano cambiare costantemente, e possano arrivare nuove traduzioni in 
qualsiasi momento.
 
Usando file esterni dovresti rifare il deploy dell'applicazione a ogni 
minima modifica.
 
Bye.

Il 17/06/19 09:03, Ammammata ha scritto:

quella dell'ip nell'applicazione che ho sviluppato viene come seconda 
opzione
la prima è la lingua del browser, se l'applicazione non ha il file po 
corrispondente cerca l'ip da dove si connette l'utente e cerca il 
relativo po, se non lo trova allora imposta l'inglese come default.
 
Se tu hai il browser in italiano, e il sito gestisce il file po italiano 
lo carica altrimenti presume che se ti colleghi dalla svizzera tu sia 
svizzero e prende l'ip del provider che al 90% (ci abito) sarà nella 
svizzera tedesca.
 
PS
in quei casi setto il browser in inglese (3 click nelle impostazioni) e 
vivo felice.
 
PPS
la lingua del sistema operativo un applicazione web non può 
intercettarla a meno di bucare la sandbox del browser
 
Saluti

 Bye.
 
Saluti.
^Bart

 ma si rischiavamo casini senza una vera e propria FK.
 
casini! quali casini?
la seguente tabella cosa avrebbe che non va?
 
ID LANG NAME
1  eng  milk
2  eng  bread
3  eng  water
1  ita  latte
2  ita  pane
3  ita  acqua
4  spa  leche
5  spa  pan
6  spa  agua

 
 
manca una chiave univoca, ma almeno i codici lingua sono corretti
 
https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
 
 
nota però che nell'esempio  il latte spagnolo ha codice 4 mentre nelle 
altre due lingue ha codice 1 (pane 5-2, acqua 6-3)
 
immagino sia un errore di copia/incolla o una numerazione automatica fatta 
da excel ;)
 
-- 
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
........... [ al lavoro ] ...........

 immagino sia un errore di copia/incolla 
errore di copia/incolla