asp.net Resursfiler som inte fungerar.

Permalänk
Medlem

asp.net Resursfiler som inte fungerar.

Hej där,

jag har skapat två stycken lokala resursfiler för en sida som heter Register.aspx.

De heter:
Register.aspx.en-US.resx
Register.aspx.sv-SE.resx

När jag exekverar programmet så får jag inga exceptions.
Men det går inte att välja språk.
Testar jag att sätta breakpoint i Language klassen när den kör första thread, så ser jag att den har värdet "sv",
detta trots att jag inte har valt något i listan utan bara låtit sidan Register.aspx laddas.
Sätter jag en breakpoint på if satsen i Language så ser det ut som att villkoret blir false,
men trots detta så innehåller cultureName "sv" som värde. Och jag ser även att base.InitializeCulture(); körs.
Men texten ändras inte.

Någon av er som har erfarenhet av detta och kan hjälpa mig :).

Trevlig helg
/Rickard

Nedan är koden

Markup Register.aspx:

<asp:DropDownList ID="languageList" runat="server"> <asp:ListItem Text="English" Value="en-US"></asp:ListItem> <asp:ListItem Text="Svenska" Value="sv"></asp:ListItem> </asp:DropDownList> <asp:Button ID="ChooseLanguage" runat="server" Text="Choose Language" OnClick="ChooseLanguage_Click" PostBackUrl="~/Account/Register.aspx"/>

Code behind register.aspx.cs:

public partial class Register : Language { protected void ChooseLanguage_Click(object sender, EventArgs e) { DropDownList list = (DropDownList)RegisterUser.CreateUserStep.ContentTemplateContainer.FindControl("languageList"); Language.CultureName = list.SelectedItem.Value.ToString(); } }

Egenskapade klassen Language

public class Language : System.Web.UI.Page { static string cultureName; public static string CultureName { get { return cultureName; } set { cultureName = value; } } protected override void InitializeCulture() { if (cultureName == null) { cultureName = "sv-SE"; } Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cultureName); Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureName); base.InitializeCulture(); } }

Permalänk

Prova publicera sidan till IIS och prova där igenom. Jag har erfarenhet av detta och har samma "problem". Går inte att byta språk när jag "debuggar" men när sidan väl är publicerad så fungerar det. Prova det.

Permalänk
Medlem
Skrivet av shakeshar:

Prova publicera sidan till IIS och prova där igenom. Jag har erfarenhet av detta och har samma "problem". Går inte att byta språk när jag "debuggar" men när sidan väl är publicerad så fungerar det. Prova det.

Hej där,

och tack för din hjälp.

Har dock inte möjligheten att göra det.
Måste få det att fungera och köras utan IIS.

Har simplifierat allt och bara gjort så att det gäller en lokal resurs och override metoden ligger i codebehind för index.
Men fungerar fortfarande inte. Jag ser att värdet från variabeln lang kommer till:
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang);

Så att det står
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(en-US);

Men texten vägrar ändra på sig.

Värt att nämna är att allt fungerar om jag gör så att användaren själv inte får välja språk utan att webbläsarens språkinställning sköter det.
Men det är när jag implementerar ovverride av InitializeCulture och användaren ska välja det inte fungerar.

http://pastebin.com/B6AnaGRu

Permalänk
Medlem

testa detta:

protected override void InitializeCulture() { string lang = Request["languageList"]; if (lang != null) { System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang); System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo(lang); } base.InitializeCulture(); }

Visa signatur

as far as we can tell, the massacre went well...

Permalänk

Okey,
Jag ska inte bråka med dig angåend IIS MEN tänkte att du kunde prova köra det lokalt på din maskin.

Hur som helst. Jag har löst det genom att använda kakor. Två steg.
Jag utgår först och främst ifrån webbläsaren prefered language men vill man själv byta språk så sker det först via en vanlig metod i en controller.

1.

public ActionResult Setlanguage(string Id) { .... HttpCookie _cookie = new HttpCookie(COOKIE); _cookie.Value = Id; //Id är i det har fallet antinge "sv" eller "en" _cookie.Expires = DateTime.Now.AddYears(1); Response.Cookies.Add(_cookie); ... }

2.

Steg två är en HttpModule som håller koll på delar av http anropen.

private void Application_AcquireRequestState(object sender, EventArgs e) public class HttpRequestModule : IHttpModule { public HttpRequestModule() { } private const string COOKIE = "CERTIT_FILE_LANGUAGE"; public String ModuleName { get { return "HttpRequestModule"; } } public void Init(HttpApplication application) { application.AcquireRequestState += (new EventHandler(this.Application_AcquireRequestState)); } { HttpApplication application = (HttpApplication)sender; HttpContext context = application.Context; HttpCookie cultureCookie = application.Request.Cookies[COOKIE]; string lang = (string.IsNullOrEmpty(application.Request.UserLanguages[0]) ? "" : application.Request.UserLanguages[0]); if (cultureCookie == null) { cultureCookie = new HttpCookie(COOKIE); cultureCookie.Value = lang; cultureCookie.Expires = DateTime.Now.AddYears(1); application.Response.Cookies.Add(cultureCookie); } else { lang = cultureCookie.Value; } CultureInfo ci = new CultureInfo(lang); System.Threading.Thread.CurrentThread.CurrentUICulture = ci; System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name); }

Web.config

.... <system.webServer> <validation validateIntegratedModeConfiguration="false" /> <modules runAllManagedModulesForAllRequests="true"> <add name="HttpRequestModule" type="FileCloud.Web.Handlers.HttpRequestModule,FileCloud.Web" /> </modules> </system.webServer> ....

Men vill poängtera att detta kommer inte fungera med Visual Studio Development server utan kommer hoppa igång först när du publicerar det till IIS.

Permalänk
Medlem

Jag vill tacka alla er som skrev, speciellt shakeshar.

Jag lyckades lösa detta och skicka in arbetet (skolarbete) innan jag hann se detta inlägg.
Jag tänkte om. Jag lyckdes få det att fungera genom att använda propertien PostBackUrl = Index.aspx?Language=en-US. På en imagebutton. Sen gjorde jag likadant fast sv-SE på en annan imagebutton.

Sedan i code behind för Index så räckte:

protected override void InitializeCulture()
{
if (Request["Language"] != null)
{
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(Request["Language"].ToString());
System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request["Language"].ToString());
}
base.InitializeCulture();
}

Känns som om jag hade testat allt och så fungerade det direkt efter PostBackUrl sattes.
Många timmar men tillslut möda :).

Stort tack till alla som skrev.
/Rickard