Problema con sito multilingua e CSS

martedì 15 luglio 2008 - 15.13

paquito_ita Profilo | Senior Member

Ciao,

Ho fatto un po' di pratica con una paginetta di esempio e le risorse (locali) messe a disposizione da ASP.NET per realizzare agevolmenteun sito in diverse lingue.
Tuttavia ci sono alcuni aspetti che mi lasciano perplesso:

[1] Adottando questa tecnica l'ID degli elementi interessati vengono cambiati in maniera imprevedibile (ad esempio: ID="menu" diventa id="ctl00_menu"). In tal modo se uso l'ID nel file CSS per di questi elementi non vi sarà match e la regola CSS non verrà applicata.

[2] Se ho un buttonImage nella MasterPage cliccando la quale la lingua del sito deve cambiare (es solo inglese/italiano per semplicità) come faccio a gestire il cambiamento della lingua?
FInora usavo (per una pagina aspx non master)
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { Session["lang"] = "ITA"; base.InitializeCulture(); } } protected void eng_button_Click(object sender, EventArgs e) { Session["lang"] = "ITA"; InitializeCulture(); } protected void ita_button_Click(object sender, EventArgs e) { Session["lang"] = "ENG"; InitializeCulture(); } protected override void InitializeCulture() { if (Session["lang"] != null && Session["lang"].ToString().Equals("ITA")) { Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("it"); Thread.CurrentThread.CurrentUICulture = new CultureInfo("it-IT"); } else if (Session["lang"] != null && Session["lang"].ToString().Equals("ENG")) { Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US"); Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US"); } }
Mentre nella Master Page questo non funziona

Grazie in anticipo

rossimarko Profilo | Guru

>[1] Adottando questa tecnica l'ID degli elementi interessati
>vengono cambiati in maniera imprevedibile (ad esempio: ID="menu"
>diventa id="ctl00_menu"). In tal modo se uso l'ID nel file CSS
>per di questi elementi non vi sarà match e la regola CSS non
>verrà applicata.

Ciao,

purtroppo se i controlli sono lato server il loro clientID (http://msdn.microsoft.com/it-it/library/system.web.ui.control.clientid.aspx) è dinamico e viene generato in base alla gerarchia dei controlli. In questi casi è meglio usare i className per la gestione degli stili.

>[2] Se ho un buttonImage nella MasterPage cliccando la quale
>la lingua del sito deve cambiare (es solo inglese/italiano per
>semplicità) come faccio a gestire il cambiamento della lingua?
> ...
>Mentre nella Master Page questo non funziona

Perchè non ti funziona? Ti rimane la lingua precedente? Lo fa anche se forzi il ricaricamento della pagina?

PS: Considera la possibilità di impostare una classe di base per tutte le tue pagine. In questa classe sovrascrivi il metodo InitializeCulture e poi nella master imposti semplicemente il valore della session.

-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

paquito_ita Profilo | Senior Member


>>Mentre nella Master Page questo non funziona
>
>Perchè non ti funziona? Ti rimane la lingua precedente? Lo fa anche se forzi il ricaricamento della pagina?

Si la lingua rimane quella precendente. Il ricaricamento della pagina lo forzo con u Response.redirect alla stessa master Page?

rossimarko Profilo | Guru

Il redirect lo devi fare sulla stessa pagina..

Fai una prova impostando una classe base per tutte le pagine che implementa il metodo InitializeCulture (inizialmente prova con 2 o 3), altrimenti nel global.asax aggancia l'evento PostAcquireRequestState e imposta li la culture del thread.

Se ti serve qualche info a riguardo chiedi pure.
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5