Programmatically change resource file language (resx) in Code Behind
Asked Answered
F

1

8

I have a .Net application in C# and I have a file structure something like:

App_LocalResources
 - MyPage.aspx.resx
 - MyPage.aspx.fr.resx
MyPage.aspx
MyPage.aspx.cs

I am trying to programatically change the language which tells the application which resx file to use. I want to do this in the code behind file (MyPage.aspx.cs).

I have tried both of these in the OnPreRender, Page_Init, and Page_Load events:

Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-CA");
Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-CA");

and it does not work. The page still shows the english language. The MyPage.aspx file has this:

<h3><asp:Literal runat="server" Text="<%$ Resources:pageTitle %>" /></h3>

Note that I cannot care about the browser language. It must over-ride this. I have been searching the web for this solution to no avail. All examples show switching the language the way I have already tried (above) however this does not affect the resource file used. Any ideas?

Freeze answered 9/9, 2009 at 16:48 Comment(0)
S
13

You must override the InitializeCulture method and put your code there. Ex:

protected override void InitializeCulture()
{
   base.InitializeCulture();
   System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-CA");
   System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-CA");
}

Hope this helps

Skylark answered 9/9, 2009 at 17:2 Comment(1)
MartinB you have my impressed thanks. Either I was searching with the wrong terms or there is very little info about this online. That worked perfectly. I'm glad this will be up on SO for future people looking for the answer. Thank you!Freeze

© 2022 - 2024 — McMap. All rights reserved.