0

ボタンをクリックして Web サイト ( http://cptestlocalisation.azurewebsites.net )の言語を変更することでカルチャと UI カルチャを動的に変更しても、「すべて」の resx フィールドが変更されない (1 つのフィールドのみが変更される) 問題が発生しています。何らかの理由で) 次の 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" />

この問題の真相を突き止める手助けが必要です。Web サイトが表示されている場合、ボタンをクリックすると、右上隅にあるログイン リンクのみが変更されます。

4

1 に答える 1

1

私はそれがうまくいくとは思わないでしょう。ボタンクリックの実行時点から、現在のスレッドのカルチャと uiculture のみを変更しています。ボタン クリック イベントの前に処理されたものは影響を受けません。このようにする代わりに、選択したカルチャで Cookie を設定し、ページをそれ自体にリダイレクトします。oninit イベントで Cookie を確認し、見つかった場合は、Cookie の値に一致するようにカルチャを変更します。

于 2014-10-08T23:11:37.183 に答える