Изменение культуры и пользовательского интерфейса на сайте обновляет только одно поле

У меня возникла проблема, когда динамическое изменение культуры и культуры пользовательского интерфейса путем нажатия кнопки для изменения языка на веб-сайте ( 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.

Другие вопросы по тегам