Newsgroup: it.comp.www.php
Titolo: Scope e multilingua

Salve :-)
Sto scrivendo un piccolo CMS multilingua e mi chiedevo come gestire le
localizzazioni.
Per i contenuti dinamici me la sbrigo a livello di struttura di
database e query.
Per quanto riguarda le stringhe statiche invece non ho ancora in mente
un'idea precisa su come fare.
Per adesso all'inizio della pagina metto un
require("lang/$lingua_sigla/local.php");
con $lingua_sigla che contiene IT, EN, FR o altro in base alla lingua
selezionata.
Nel file local.php c'è semplicemente la definizione di costanti, tipo:
DEFINE("STR_Welcome", "Benvenuto nel portale");
DEFINE("STR_Login", "Accedi");
....
etc, etc....
Ho usato delle costanti perchè almeno sono disponibili ovunque.
Se uso delle variabili mi scontro con un problema che ho con PHP che
ancora non riesco ad aggirare: lo SCOPE delle variabili.
Ancora non uso classi (che da questo aspetto mi spaventano ancora di
più!) ma faccio molte funzioncine per le varie funzionalità.
Sfortunatamente se voglio fare una funzione che stampa del testo sono
costretto:
- o a fare la 'global' su ogni singola variabile corrispondente alle
stringhe che mi servono
- o appunto renderle costanti in modo da averle sempre accessibili
Secondo voi qual'è l'approccio migliore e più versatile? In che altro
modo potrei organizzare il tutto?
Inoltre il problema dello scope mi si presenta puntualmente quando
devo effettuare query in una funzione e sono costretto a passare anche
la connessione come parametro (magari mettendolo come opzionale e con
valore di default, ma è scomodo), oppure ad effettuarci una global
(come faccio di solito).
Mi chiarite un pò di queste cavolate che ho nel cervello?
Grazie :-)

 Grazie :-)
Allora non posso fare miracoli :P
Cmq ti accenno alle 2 soluzioni di cui prima:
quelle che chiami stringhe statiche le puoi mettere nel in una tabella del
DB che avrà almeno le 3 colonne "key", "value" e "lan",
tu prima di ogni script (dopo aver fatto la connessione al DB) lanci la
routine che "carica" le costanti facendo un ciclo sulla query con filtro
della lingua e che creerà le costanti al volo facendo un bel
if( ! defined( $row['key'] ) ) 
	define( $row['key'], $row['value'] );
e voilà se la prima riga della query fosse stata:
"STR_Welcome" | "Benvenuto nel portale" | "it"
ora avresti quella define bella definita
questo approccio potrebbe rivelarsi interessante perchè potresti
aggiungerci altre colonne che potrebbero distinguere per eventuali sezioni
e poi volendo potresti poterne modificare agevolmente attraverso una
maschera del tuo CMS senza dover mettere mano al filesystem...
poi l'altro soluzione è utilizzare una funzione che definisca una variabile
array internamente statica (che temo tu sono sappia cosa sia, nel caso ti
rimando ad una lettura del manuale) che voglia un parametro che
rappresenterebbe il nome della costante e la funzione ne restituirebbe il
valore, questa funzione dovrebbe essere lanciata una prima volta (ad
esempio senza parametri) all'inizio dello script e caricherebbe i valori
nel proprio array (questi potrebbero essere presi da qualsiasi parte file
di configurazione, ini, DB, xml...) e poi ogni qualvolta che ti serve un
certo valore non fai altro che richiamarla passandoglelo come parametro
(eventualmente potrai anche passargli la lingua come secondo...)
detto questo è dovero dirti che oggi come oggi si può affermare che un
approcio diverso dall'OOP è sbagliato e ti creerà solo problemi, visto che
parlavi di modularità e altri "paroloni"...
Ciao

 Ciao
Ciao :-}

 Ciao :-)
Ciao

 faccio di solito).
Stessa cosa. Una classe "TabellaDB" a cui passi, in fase di creazione, la 
connessione al DB e i cui metodi (select(), query(), update(), ecc.) usano 
direttamente la variabile impostata nella classe.
 
Bye.