2

私は何か超基本的なものを欠いているに違いありません...しかし、リソースファイルを使用してローカリゼーションを行おうとしており、ここにあるMSDNの例を単に使用しています:

私のページの背後にあるコード:

  Protected Overrides Sub InitializeCulture()
        If Request.Form("listLanguages") IsNot Nothing Then
            Dim selectedLanguage As String = _
                Request.Form("listLanguages")
            UICulture = Request.Form("listLanguages")
            Culture = Request.Form("listLanguages")
            Thread.CurrentThread.CurrentCulture = _
                CultureInfo.CreateSpecificCulture(selectedLanguage)
            Thread.CurrentThread.CurrentUICulture = New  _
                CultureInfo(selectedLanguage)
        End If
        MyBase.InitializeCulture()
    End Sub

私のマークアップでは:

    <form id="form1" runat="server" defaultbutton="btnStart"  autocomplete="off" >
                   <asp:Label ID="lblLanguageChoice" AssociatedcontrolID="listLanguages" runat="server" Text="Language Options"></asp:Label>
                   <asp:ListBox ID="listLanguages" runat="server">
                       <asp:ListItem Value="en"  Selected="True" Text="English"></asp:ListItem>
                       <asp:ListItem Value="es" Text="Español"></asp:ListItem>
                   </asp:ListBox>
                   <asp:Button ID="btnChangeLanguage" runat="server" 
                    Text="Change Language" />
.......

ただし、コードをステップ実行するとき (言語を選択してボタンを押した後)、リスト ボックスは常に「何もありません」です。これは、ページ サイクルの早い段階でこのイベントが発生することを考えると理にかなっています。

このルーチンに自分の言語選択を知らせるにはどうすればよいですか? ボタンのクリック時に選択をセッション変数に詰め込もうとしましたが、「クリックビハインド」です。(1 回クリックすると、言語の選択は保存されますが、既定の言語のままになります。2 回クリックすると、選択した言語に切り替わります。) ボタンをクリックした瞬間に更新され、ユーザーがそれを押す必要がないソリューションが必要です。二回。

編集: 私は理由を見つけました - 今、私はそれを修正する方法を理解する必要があります! それは、クレイジーな ASP 命名規則のことです。リスト ボックスの名前が「listLanguages」ではありません。それをステップスルーすると、「ctl00$MainContent$listLanguages」という名前であることがわかります。ClientIDMode static は、名前ではなく ID を変更するため、解決しません。完全に解決したら投稿します。

EDIT2: どうぞ 。このページには多くのパラメーターがないため、これは少しハックであり、機能するだけです。誰かがよりエレガントなソリューションを知っていれば、本当に感謝しています!

  Dim request As HttpRequest = Me.Request
        Dim params As NameValueCollection = request.Form
        For Each par As String In params.AllKeys
            If par.Contains("listLanguages") Then
                Dim selectedLanguage As String = request(par)
                UICulture = request(par)
                Culture = request(par)
                Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage)
                Thread.CurrentThread.CurrentUICulture = New CultureInfo(selectedLanguage)
            End If
        Next

        MyBase.InitializeCulture()
4

1 に答える 1