Traduzione master page e pagine interne
magister82 non è online. Ultima attività: 17/11/2008 9.48.08magister82
Inserito il: 03 settembre 2008 17.08
12 messaggi dal 23 apr 2008 Istalla Microsoft Silverlight!
Ciao a tutti
Ho trovato un piccolo problema in un mio progetto in fase di traduzione delle pagine.

Ho una pagina chiamata masterpage.master al cui interno ce ne sta un'altra chiamata defaults.aspx.
Nella master page ho 2 bottoni per impostare la lingua (italiano e inglese) e, sia per la master page sia per la default.aspx ho creato delle i file resx relativi alle due lingue (rispettivamente masterpage.master.it.resx e masterpage.master.en.resx per la masterpage, e defaults.it.resx e defaults.en.resx per la pagina figlio ).

al click sul bottone eseguo questo codice nella masterpage

protected void ImageButton5_Click(object sender, ImageClickEventArgs e)
{
string Lang = "en";
LoadTranslatetdPage(Lang);
}

private void LoadTranslatetdPage(string Lang)
{
Session.Add("Lang", Lang);
Response.Redirect(Request.Url.ToString());
}

Mentre al Page_Init eseguo questo codice

protected void Page_Init(object sender, EventArgs e)
{
if (Session["Lang"] != null)
{
Page.UICulture = Session["Lang"].ToString();
}
else
{
Page.UICulture = "auto";
}
}

Il risultato è che la pagina master viene correttamente tradotta mentre la figlia no.
Ho dato un occhiata in giro e ho scoperto che:
1) La pagina figlia viene caricata prima della master
2) non eredita le impostazioni della culture.

E' possibile fare in modo che la pagina figlia erediti la UICulture dalla masterpage senza andare a scrivere del codice nella Defaults.aspx?
Grazie per l'eventuale aiuto

Matteo
RE: Traduzione master page e pagine interne
PeppeDotNet non è online. Ultima attività: 19/11/2008 17.42.19PeppeDotNet
Inserito il: 03 settembre 2008 17.30
contributi / www.peppedotnet.it / 366 messaggi dal 21 gen 2007 Istalla Microsoft Silverlight!
Per modificare la culture di una pagina aspx devi effettuare l'overload del metodo InitializeCulture(). Al suo interno puoi prelevare dalla sessione il valore della lingua precedentemente impostato e modificare la culture del web corrente.

protected override void InitializeCulture()
{
string lang = String.Format("{0}", Session["Lang"]);
if(!String.IsNullOrEmpty(lang))
{
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(lang);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang);
}
}

Leggiti questo:
http://www.peppedotnet.it/Articoli/Localization.aspx

Marchi Giuseppe
http://www.peppedotnet.it
RE: Traduzione master page e pagine interne
magister82 non è online. Ultima attività: 17/11/2008 9.48.08magister82
Inserito il: 03 settembre 2008 17.40
12 messaggi dal 23 apr 2008 Istalla Microsoft Silverlight!
Si avevo letto anche di quello ma, visto che dovrò fare ben più di una pagina figlia, volevo evitare di dover andare a scrivere nel codice di ciascuna l'verride.

Ho trovato la soluzione invece andando a lavora sul global.asax in particolare definendo quanto segue

void Application_PreRequestHandlerExecute (object sender, EventArgs e)
{
if (Context.Session != null && Context.Session["Lang"] != null)
{
String selectedLanguage = Context.Session["Lang"].ToString().ToLower();
String currentLanguage = CultureInfo.CurrentUICulture.TwoLetterISOLanguageName.ToLower();
if (!currentLanguage.Equals(selectedLanguage))
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage);
}
}
}


E così facendo funziona tutto a meraviglia.
il codice originale lo trovate su:
http://www.codeproject.com/KB/locale/MasterPage_Localization.aspx

guardate nei commenti di famous

Grazie cmq del supporto.
RE: Traduzione master page e pagine interne
PeppeDotNet non è online. Ultima attività: 19/11/2008 17.42.19PeppeDotNet
Inserito il: 03 settembre 2008 17.43
contributi / www.peppedotnet.it / 366 messaggi dal 21 gen 2007 Istalla Microsoft Silverlight!
Per evitare di dover sovrascrivere quel metodo in tutte le tue pagine figlie, basta che crei una classe che eredita da Page, fai l'overload del metodo InitializeCulture e poi tutte le pagine le fai ereditare dalla tua classe al posto che da page.

Marchi Giuseppe
http://www.peppedotnet.it
Microsoft Most Valuable Professional
RE: Traduzione master page e pagine interne
nostromo non è online. Ultima attività: 19/11/2008 19.03.22nostromo
Inserito il: 03 settembre 2008 18.21
contributi / Top Poster / Community manager / www.soluzioni4d.it / Blog / 12489 messaggi dal 18 feb 2004 Istalla Microsoft Silverlight!
note al margine


quando dici:


1) La pagina figlia viene caricata prima della master


questo accade perche la Master è un UserControl (eredita da tale classe) ed è in realtà contenuta all'interno della pagina e non viceversa.

per il resto il consiglio di Peppe è validissimo

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
RE: Traduzione master page e pagine interne
magister82 non è online. Ultima attività: 17/11/2008 9.48.08magister82
Inserito il: 04 settembre 2008 09.27
12 messaggi dal 23 apr 2008 Istalla Microsoft Silverlight!
Grazie mille dei consigli sto implememtando la solution vi farò sapere al più presto se tutto è andato a buon fine ;-)
RE: Traduzione master page e pagine interne
magister82 non è online. Ultima attività: 17/11/2008 9.48.08magister82
Inserito il: 04 settembre 2008 10.52
12 messaggi dal 23 apr 2008 Istalla Microsoft Silverlight!
Ok tutto a posto funziona correttamente.
Grazie del supporto ;-)

Matteo

Vai a:
Torna al forum |   Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.


gghi - 930 pt
PeppeDotNet - 700 pt
vladimiro - 210 pt

Iscriviti anche tu e raccogli punti. Questo mese in palio Windows Vista Ultimate, ANTS Profiler e 1 ebook!


COMMUNITY
ULTIMI MESSAGGI


IN EVIDENZA
MISC
Powered by .db Forums