Sito asp.net Multilanguage

martedì 21 maggio 2013 - 16.36
Tag Elenco Tags  VB.NET  |  .NET 4.0

86Marco Profilo | Expert

Salve ragazzi e buon pomeriggio a tutti.

Sto, con l'aiuto di un tutorial su internet, cercando di capire come poter creare una applicazione web multilinguaggio utilizzando i resource locali e globali.

Fermo restando che Vi chiedo (per avere una maggiore sicurezza su quello che ho inteso) che differenza passa tra i resources locali e globali; Vi rendo noto il mio problema.

Per facilitarvi il tutto ho inserito il progettino zip della web application. di seguito i passi del mio lavoro:
1) Ho due pagine ASPX (Default e Default3) ognuna delle quali ha un resource locale in ita e inglese

211x204 9Kb


2) Imposto il culture e UICulture su Auto per ogni pagina
3) Imposto come al punto 2 anche sul webconfig

594x47 4Kb

4) Imposto sulla dropdown della pagina Default il codice necessario per variare la culture del browser (applicando lingue differenti)

il mio problema è questo:
Impostando la lingua inglese (per esempio) sulla dropdown della pagina default come posso fare affinchè tutte le pagine che vedrò d'ora in avanti siano sempre visualizzate in inglese?
Impostando infatti la lingua inglese sulla pagina Default dalla dropdown list mi viene correttamente impostata la lingua di quella pagina, ma se poi navigo il sito sul Default3 mi viene visualizzata la pagina in italiano, per quale motivo??? :)

Spero come sempre nel vostro aiuto... Grazieeee :)

Allego in attach il progetto

mexico77 Profilo | Junior Member

Allora la differenza tra risorse locali e globali come stesso le parole indicano è che le prime si riferiscono alla singola pagina mentre le seconde a tutte le occorrenze del sito a cui si riferiscono.

Poi per il tuo problema devi impostare:
Questo codice:
Protected Overrides Sub InitializeCulture()
Dim c As CultureInfo
' Culture
If (Not (Session("Culture")) Is Nothing) Then
c = CType(Session("Culture"), CultureInfo)
Else
c = New CultureInfo("it-it")
End If
Thread.CurrentThread.CurrentCulture = c
' UI Culture
If (Not (Session("UICulture")) Is Nothing) Then
c = CType(Session("UICulture"), CultureInfo)
Else
c = New CultureInfo("it-it")
End If
Thread.CurrentThread.CurrentUICulture = c
MyBase.InitializeCulture()
End Sub

Che viene eseguito all'inizio di ogni pagina. L'ideale è metterlo in una classe e richiamarla nella pagine per pura pulizia di codice.

Poi ovviamente quando hai la funzione che ti fa cambiare lingua devi impostare il cambio della CultureInfo etc
Session("Language") = 1
Dim culture As String = "it-it"
Session("Culture") = New CultureInfo(culture)
Session("UICulture") = New CultureInfo(culture)
Server.Transfer(Request.Path)

Spero ti sia stato di aiuto.
www.setteweb.it

86Marco Profilo | Expert

Ciao Mexico e grazie intanto per la risposta.
Quindi facendo cosi io sbagliavo?


717x249 12Kb


ridaria Profilo | Expert

perchè per ogni pagina devi inizializzare la cultura:
in questo modo:

Protected Overrides Sub InitializeCulture()

Dim cultura As String = ""
Dim lingua As String = ""


cultura = HttpContext.Current.Request.Cookies("IlTuoSITO").Values("lingua")

'System.Web.HttpContext.Current.Response.Write("httpModule " & cultura)
'se l'utente non ha mai cliccato uno dei pulsantini della Lingua il cookie non c'è e la cultura non può essere definita, pertanto, IMPOSTO LA CULTURA iTALIANA
If cultura = "" Then

cultura = "it-IT"

End If

System.Threading.Thread.CurrentThread.CurrentUICulture = New System.Globalization.CultureInfo(cultura) '("en-gb")

MyBase.InitializeCulture()



End Sub

Come vedi il tipo di cultura lo leggo da un cookie:
cultura =
è stata la mia scelta per archiviare la vultura/lingua scelta dall'utente.

Quindi quando cliccki sul pulsante lingua it/ing./fr. etc.... scrivi nel kookie o se vuoi in un db la lingua correntemente scelta.

In ogni pagina piazzi la sub InitializeCulture, che ti ho messo sopra.

Con questa il sistema intercetta la cultura definita e ti legge le variabili giuste che contengono il testo scritto nella lingua scelta.


Ciao e fammi sapere

PS ti suggerisco di evitare l'uso di variabili di sessione per stivare la lingua scelta. Sono soggette allo scadere della sessione, e possono dare sgradite sorprese al navigatore ;-) E poi un uso assiduo di queste nello stesso progetto te ne fa perdere il controllo, con possibilità di sovrascritture inattese. Insomma Evitale


Riccardo D'Aria

mexico77 Profilo | Junior Member

Come fai tu ti richiami la lingua selezionata ogni volta. e al caricamento è la stessa per questo conviene impostare la session.
www.setteweb.it

86Marco Profilo | Expert

Perfetto ragazzi! grazie

Provo e vi faccio sapere! Siete stati utilissimi. Grazuie ancora

ridaria Profilo | Expert

.....
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5