关于asp.net:更改站点文化和ui文化只更新一个字段

Changing the culture and ui culture on the site only updates one field

我遇到了一个问题,即通过单击按钮来更改网站 (http://cptestlocalisation.azurewebsites.net) 上的语言来动态更改文化和 UI 文化不会更改"全部"我的 resx 字段(由于某种原因,只有一个字段更改)基于以下 App_LocalResources 文件的后备:

1
2
3
Site.Master.resx
Site.Master.fr.resx
Site.Master.zh.resx

但是,只有在调整浏览器的语言首选项并刷新页面时,上述方法才能正常工作。

内容分别为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
header.Text Localisation and Globalisation Test Website
login.Text  Log In
logout.LogoutText   Log Out
menuItemAbout.Text  About
menuItemHome.Text   Home

header.Text Localisation et mondialisation test Site Web
login.Text  Se Connecter
logout.LogoutText   Se D??connecter
menuItemAbout.Text  ? propos
menuItemHome.Text   maison

header.Text ?????°??–?’??…¨?????–?μ?èˉ???‘???
login.Text  ????…¥
logout.LogoutText   Log Out
menuItemAbout.Text  ?…3?o???‘???
menuItemHome.Text   ?????o

什么不起作用的代码片段:

1
<h1 runat="server" enableviewstate="false">

什么有效:

1
2
3
4
5
6
7
8
    <AnonymousTemplate>
        [  ]
    </AnonymousTemplate>
    <LoggedInTemplate>
        Welcome <span class="bold"></span>!
        [  ]
    </LoggedInTemplate>
</asp:LoginView>

后面的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
protected void btnEnglish_Click(object sender, EventArgs e)
{
    Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US");
    Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en-US");
    InitializeCulture();
}

protected void btnFrench_Click(object sender, EventArgs e)
{
    Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("fr");
    Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("fr");
    InitializeCulture();
}

protected void btnChinese_Click(object sender, EventArgs e)
{
    Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("zh");
    Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("zh");
    InitializeCulture();
}

Web.config 条目:

1
<globalization culture="auto" uiCulture="auto" enableClientBasedCulture="true" />

我需要帮助来了解这个问题的根源。如果您看到该网站,则只有右上角的登录链接会在单击按钮时发生变化。


我不希望它起作用。您只是从按钮单击的执行点更改当前线程的文化和 uiculture。在按钮单击事件之前处理的任何事情都不会受到影响。不要这样做,而是使用所选文化设置一个 cookie,然后将页面重定向回自身。检查 oninit 事件中的 cookie,如果找到,更改文化以匹配 cookie 值。