以编程方式更改Code Behind中的资源文件语言(resx)

She*_*rri 8 c# asp.net localization resource-file

我在C#中有一个.Net应用程序,我有一个类似的文件结构:

App_LocalResources
 - MyPage.aspx.resx
 - MyPage.aspx.fr.resx
MyPage.aspx
MyPage.aspx.cs
Run Code Online (Sandbox Code Playgroud)

我试图以编程方式更改语言,告诉应用程序使用哪个resx文件.我想在代码隐藏文件(MyPage.aspx.cs)中执行此操作.

我在OnPreRender,Page_Init和Page_Load事件中尝试了这两种方法:

Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-CA");
Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-CA");
Run Code Online (Sandbox Code Playgroud)

它不起作用.该页面仍显示英语.MyPage.aspx文件包含:

<h3><asp:Literal runat="server" Text="<%$ Resources:pageTitle %>" /></h3>
Run Code Online (Sandbox Code Playgroud)

请注意,我不关心浏览器语言.它必须超越这个.我一直在网上搜索这个解决方案无济于事.所有示例都显示了我已经尝试过的方式切换语言(上图)但是这不会影响所使用的资源文件.有任何想法吗?

mbe*_*Net 13

您必须覆盖InitializeCulture方法并将代码放在那里.例如:

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

希望这可以帮助