Come gestire in un sito multilingua i contenuti dinamici presenti nell...

martedì 11 settembre 2012 - 18.21
Tag Elenco Tags  VB.NET  |  .NET 3.5

zseven Profilo | Senior Member

Ciao Ragazzi,
sto realizzando un sito in multilingua utilizzando prevalentemente le local resources.
La struttura è di due masterpage collegate e quindi delle pagine con i contenuti.

La seconda Master in particolare, contiene sulla sinistra l'elenco delle news.

Come gestite voi la visualizzazione di contenuti dinamici nella lingua prescelta?

Avevo pensato che potevo fare una funzione che mi passasse tutti i valori, lingua compresa, per restituire poi il testo nella lingua corrispondente, ma ho pensato che dovrei passarmi troppi valori, man mano che aumentano le lingue, e quindi potrei caricare troppo il sito.

Di sicuro la soluzione più immediata è quella di fare una seconda masterpage per ogni lingua, ma vorrei cercare di mantenere un unico file comune a tutti e mostrare i contenuti lingua per lingua.

Sapete aiutarmi?
Grazie mille

Gluck74 Profilo | Guru

ciao,
i contenuti in varie lingue dipendono anche dal DB.
Non so come hai strutturato l'inserimento dati ed il database, ma ammettiamo che hai la tabella delle news fatta così:

idNews, idLingua, contenuto.

se non ho capito male il tuo sito ha una combo con la scelta della lingua, quindi dovresti avere sempre disponibile l'ID della lingua scelta.
Dovrai semplicemente fare il tuo controllo di visualizzazione news (list, grid, repeater) che filtra le news in base a questo parametro che hai già.

ciao
____________
http://glucolo.wordpress.com
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

zseven Profilo | Senior Member

ciao Gluck,
no in realtà la scelta della lingua l'ho impostata in base alla globalization, quindi recuperando il valore della Culture e mostrando così i valori recuperati dal file resx a seconda della lingua prescelta.
Il problema nasceva appunto sulla visualizzazione di contenuti dinamici, in quanto credo non sia possibili inserire contenuti dinamici nel file .resx, giusto?

Il db è strutturato con una colonna per lingua, vale a dire:
ID | TitoloIT | Titolo EN | TestoIT | Testo EN
e così via.

Quindi quando cambio lingua ho la necessità di cambiare anche il nome della colonna da richiamare nel listview.

Pensi sia scorretto costruire così il db?

Gluck74 Profilo | Guru

no, non è corretto (in più poco pratico).
Una tabella fatta così comporta un numero fisso di lingue. Se arriva la necessità di fare una nuova lingua, dovresti prima modificare la tabella! Veramente poco pratico!!!

A questo punto, se non hai la possibilità di rifare il DB, devi giocartela da codice.

Il listview lo agganci ad un objectdatasource che richiama un metodo GetNews(idNews, idLingua)
questo metodo fa la select nel DB scegliendo le colonne in base alla lingua; l'importante è che comunque le rinomini. Esempio
string colonnaTitolo, colonnaTesto; switch (idLingua) { case 39: colonnaTitolo="TitoloIT"; colonnaTesto="testoIT"; break; case 34: ... ... } string query = string.format( "SELECT {0} as TitoloNews, {1} as TestNews FROM TblNews where idNews={2}", colonnaTitolo, colonnaTesto, idNews.ToString() );

A questo punto la tua ListView basta che legga le colonne TitoloNews e TestNews.
ciao
____________
http://glucolo.wordpress.com
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

zseven Profilo | Senior Member

L'esempio che mi hai portato è chiarissimo, ed era più o meno quello che pensavo.

Però il db lo posso ancora impostare nella maniera corretta, soprattutto se questo rende il lavoro più agevole adesso e dopo.

L'alternativa sarebbe quella di inserire un record per ogni lingua, o quanto meno la parte che varia in base alla lingua, non vado ad appesantire maggiormamente così il database?
Mi suggerisci altri metodi?

Gluck74 Profilo | Guru

no, il database non patisce, vai tranquillo ;-)

se puoi ti consiglio di portarlo nella forma più snella e più "malleabile"
____________
http://glucolo.wordpress.com
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

zseven Profilo | Senior Member

Ok grazie mille, pensavo di strutturare così allora:

Tab_news_BASE
ID | DATA | FOTO |

Tab_news_DET
ID | id_culture | id_new_base | TITOLO | TESTO

Tab_CULTURE
ID | NOME_CULTURE


In questa maniera quando il cliente inserirà una news farò inserire le informazioni uguale per tutte le lingue nella tabella "tab_news_BASE", e poi lingua per lingua inserirò i dettagli recuperando l'ID della news base, quindi ci sarà un'unica riga per ogni news base, e "n" righe per le differenti lingue.

Che ne pensi, va bene secondo te come impostazione?

Gluck74 Profilo | Guru

Perfetta.

____________
http://glucolo.wordpress.com
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

zseven Profilo | Senior Member

Ciao, scusa se riprendo questo post, ma mi sto trovando un attimo in difficoltà su un concetto legato a quanto scritto sopra.

Dunque ho fatto l'imposazione come scritto sopra per i prodotti di un sito, quindi ho:
tab_prodotti_base
tab_prodotti_det

Nella prima tabella poi tengo il campo id_tipo collegato ad un'altra tabella tab_tipi dove ci sono i seguenti campi:
ID_tipo (PK)
id_culture
nome_tipo

con una situazione tipo questa:
1|1|tipo uno in italiano
2|1|tipo due in italiano
3|2|tipo uno in inglese
4|2|tipo due in inglese

Adesso in fase di inserimento del prodotto l'utente scegliera una volta il tipo in italiano inserendolo nella tabella_base.
Questo ovviamente porterà problemi poi in fase di visualizzazione prodotti in inglese, in quanto non ci sarà la corrispondenza dell'id con la cultura ed il tipo.

Potrei risolvere togliendo la tipologia dalla tabella_base nella tabella_det, però poi per il cliente diventa molto più lunga la fase di inserimento e va a duplicare un valore che poi è lo stesso ma deve cambiare solo il nome corrispondente alla lingua.

Spero di aver spiegato bene, so che è un pò difficile da capire.
Riuscite a darmi qualche suggerimento per risolvere?

Grazie mille.

zseven Profilo | Senior Member

LA notte porta consiglio :D ho risolto aggiungendo anche per le tabelle tab_tipo una tabella_det con la cultura e le relative traduzioni.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5