Programmatically change resource file language (resx) in Code Behind

asp.net, c#, localization, resource-file

Solution

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

Problem

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?

Original source