Tjenare alla! Problemet är troligen att InitializeCulture körs före SetCurrentCulture. Lösningarna kan vara många, men på något sätt måste du köra SetCurrentCulture före InitializeCulture. Om du kör en Redirect till din sida efter att ha satt sessionsvariabeln bör du få språkbytet att ske med endast en klickning. Problemet till varför du måste göra en redirect är att InitializeCulture körs tidigt och sätter om tråden.. när du sedan trycker på din knapp så gör du en postback och ställer om tråden. I det läget så har du redan kommit så långt in i sidans livscykel så kulturen du sätter på tråden kommer inte tillföra något.. eftersom resurshanteringen dras igång långt tidigare än ditt click-event. En lösning på problemet är att du inte gör en postback utan istället använder dig av en vanlig URL, där du skickar med kulturen som en parameter och i InitializeCulture plockar ut värdet och sätter om kulturen (men se även till att spara undan kulturen i tex en session om InitializeCulture inte hittar din query string.. ).. Hej Niklas, har en artikel på hur du kan göra en rätt bra rutin utan att behöva uppfinna hjulet igen. Det är samma som jag använder här på pellesoft med hjälp av en cachad xml-fil och faktiskt samma som används till EpiServer med för den delen. Pelle: Fredrik, jag diskuterade detta med EPiServers utvecklingschef för ett tag sedan - dock saknades det bra svaret du efterlyser! :)Problem med CultureInfo
Jag hoppas det finns någon här på forumet som jag hjälpa mig. Saken är den att jag vill bygga en webb med stöd för flera språk. Jag har gjort en basklass som mina sidor ärver ifrån. Denna bassklass ser ut enligt följande:
public class BasePage : System.Web.UI.Page
{
protected override void InitializeCulture()
{
if (Session["CULTURE"] != null)
{
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(((String)Session["CULTURE"]).ToString());
Thread.CurrentThread.CurrentUICulture = new CultureInfo(((String)Session["CULTURE"]).ToString());
base.InitializeCulture();
}
}
public void SetCurrentCulture(string culture)
{
Session.Add("CULTURE", culture);
this.InitializeCulture();
}
}
Sedan har jag ett antal flaggor (knappar) från vilket anrop till SetCurrentCulture görs i basklassen.
Problemet är att jag måste klicka två gånger på flaggan för att få språket att ändras till valt land.
Någon som fattar vad jag menar? ;-)
Jag är tacksam för alla information som rör mitt problem.
// nicke
Sv: Problem med CultureInfo
Sv:Problem med CultureInfo
/Ted
www.tednyberg.comSv:Problem med CultureInfo
Om du gör så, så kommer du inte behöva göra en extra round-trip till servern.
/Fredrik Normén [MVP]
blog: http://fredrik.nsquared2.comSv: Problem med CultureInfo
Sv:Problem med CultureInfo
Skulle vara intreserad av varför du inte väljer resurshanteringen som följer med i ASP.Net som är ett mycket smidigt sätt att hantera resurser etc. Fördelen med den som kommer med är att den är optimerad för bästa möjliga prestanda och mkt mkt lätt att underhålla och hantera. Skulle vara mkt nyfiken varför någon väljer bort den. ASP.Net teamet har laggt ner mkt forskning och arbeta för att ta fram en bra lösning som funkar i alla typer av apps, så som Enterprise lösningar samt är skalbar etc, går att även använda tillsammans med ASP.Net Ajax mm.. De större företagen som översättätter texter åt tex MS jobbar även efter resursfiler när de översätter MS produkter etc. Det innebär att företag kan skicka sina filer till en sådant företag och få dom översatta till olika språk, samt så är det en standard som många företag kan hantera och det finns en massa verktyg för dom, även ett MS gjort i ett webb gränsnitt.. Att skapa en egen är för mig att uppfinna hjultet ;)
/Fredrik Normén [ASP.Net MVP]
blog: http://fredrik.nsquared2.comSv: Problem med CultureInfo
Jag håller med dig om att resursfiler är ett suveränt sätt för att på ett effektivt (och skalbart) sett hantera localization.