Sviluppo di un sito multilingua

di Stefano Mostarda, in .NET,

In ASP.NET 1.x c'è un supporto decente per quanto riguarda la globalizzazione di una applicazione. Si può facilmente impostare la cultura del thread in base alla lingua del browser cambiando così l'impostazione di date, numeri, valute, ecc ecc. Quello in cui però è veramente carente il framework, è un supporto integrato anche per la traduzione dei testi. L'unica risorsa disponibile, i file di risorse, non offre quasi nulla di automatico (solo la scelta della lingua), ma solo un posto dove memorizzare le traduzioni.
La situazione con Whidbey è nettamente migliorata, infatti attraverso un attributo nel controllo, si possono collegare le proprietà "localizzabili" di questo al file di risorse e avere così la traduzione in automatico. Non solo, si può ottenere anche una tipizzazione sulle risorse, ovvero inserendo dati nei file di risorse, si può ottenere l'autocompletion (un pò come il profiling insomma). Non li ho ancora guardati come si dovrebbe, ma credo che questo sia merito dei BuildProviders.
Tornando sulla versione attuale del framework, ho sviluppato in questi giorni un sito con la caratteristica del multilingua. Visto che dovremo sviluppare alcuni siti con la medesima caratteristiche, ho adottato una tecnologia "aperta" a tutte le esigenze. Alla luce di quanto ho detto prima, la soluzione che ho scelto è la seguente:
1. I dati vengono archiviati sul db (Qui ho dei dubbi. Un file xml rende il tutto più facilmente "portabile", lo si mette nella root dell'applicazione e poi in cache vedremo...)
2. Ho creato 3 interfacce (una base e 2 che derivano da questa) e ereditato tutti i controlli "localizzabili" aggiungendo l'implementazione dell'interfaccia relativa. L'interfaccia base dichiara una proprietà comune a tutti i nuovi controlli: un codice che fa da collegamento tra l'etichetta e la base dati. In quelle derivate, c'è una proprietà che contiene il valore dell'etichetta tradotta e che nel setter si occupa di impostare la giusta proprietà per il controllo ("Text" per il checbox, "ErrorMessage" per il validator). La differenza sta nel fatto che una viene implementata dai controlli singoli (Button, ChekBox, Label, etc etc), quindi contiene una proprietà di tipo string; l'altra dai controlli multipli (CheckBoxList, RadioButtonList, DropDownList) quindi di tipo string[].
3. Ho creato una classe base che si occupa di scorrere tutti gli oggetti localizzabili, ovvero che implementano l'interfaccia base, e assegnargli l'etichetta in base alla lingua selezionata dall'utente.

Nei prossimi giorni vedremo anche la vera implementazione di tutto ciò.

Stay Tuned...

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese