Изменение культуры и пользовательского интерфейса на сайте обновляет только одно поле
У меня возникла проблема, когда динамическое изменение культуры и культуры пользовательского интерфейса путем нажатия кнопки для изменения языка на веб-сайте ( http://cptestlocalisation.azurewebsites.net/) не изменяет "все" мои поля resx (изменяется только одно поле) по какой-то причине) на основе запасного варианта для следующих файлов App_LocalResources:
Site.Master.resx
Site.Master.fr.resx
Site.Master.zh.resx
Однако вышеперечисленное прекрасно работает только при настройке языкового предпочтения браузера и обновлении страницы.
Содержание соответственно:
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 关于我们
menuItemHome.Text 登出
Что не работает фрагмент кода:
<h1 runat="server" enableviewstate="false">
<asp:Localize runat="server" ID="header" meta:resourcekey="header" />
</h1>
Что работает:
<asp:LoginView ID="HeadLoginView" runat="server" EnableViewState="false">
<AnonymousTemplate>
[ <a href="#" ID="HeadLoginStatus" runat="server"><asp:Localize runat="server" ID="login" meta:resourcekey="login" /></a> ]
</AnonymousTemplate>
<LoggedInTemplate>
Welcome <span class="bold"><asp:LoginName ID="HeadLoginName" runat="server" /></span>!
[ <asp:LoginStatus ID="HeadLoginStatus" runat="server" LogoutAction="Redirect" meta:resourcekey="logout" LogoutPageUrl="~/"/> ]
</LoggedInTemplate>
</asp:LoginView>
Код позади:
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:
<globalization culture="auto" uiCulture="auto" enableClientBasedCulture="true" />
Мне нужна помощь, чтобы разобраться в этом вопросе. Если вы видите веб-сайт, при нажатии кнопки изменяется только ссылка для входа в верхний правый угол.
1 ответ
Я не ожидал бы, что это сработает. Вы изменяете культуру и культура только для текущей темы с момента нажатия кнопки. Все, что обрабатывается до события нажатия кнопки, не будет выполнено. Вместо того, чтобы делать это таким образом, установите куки с выбранной культурой, а затем перенаправьте страницу обратно на себя. Проверьте наличие cookie в событии oninit и, если он найден, измените культуру, чтобы она соответствовала значению cookie.