我必須失去了一些東西超級基本...但試圖使用資源文件做本地化,我簡單地使用MSDN例如發現here:ASP.Net本地化InitializeCulture控制總是空
在後面的代碼我頁:
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" />
.......
但逐步執行代碼時(選擇語言後,打的按鈕)列表框中總是「沒有」 - 在頁面週期的早期這個事件被激發的情況下,這是有道理的。
我怎樣才能得到這個例程知道我的語言選擇?我嘗試在點擊按鈕時將選項填充到會話變量中,但隨後我是「點擊後」。 (點擊一次,它保存語言選擇,但保持默認語言,點擊兩次,並切換到所選語言。)我需要一個在點擊按鈕時刷新並且不需要用戶點擊它的解決方案兩次。
編輯: 我找到了原因 - 現在我只需要弄清楚如何解決它!這是瘋狂的ASP命名約定的事情。我的列表框不被命名爲「listLanguages」。通過它逐步被命名爲「ctl00 $ MainContent $ listLanguages」。 ClientIDMode static不會解析它,因爲它會更改id而不是名稱。一旦我徹底解決後會發佈。
編輯2: 在這裏,我們去。這有點冒險,只能用,因爲這個頁面沒有很多參數。如果有人知道更優雅的解決方案,我會非常感激!
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()
這是一個非常好的解決方案。但它取決於JavaScript,這意味着使用該網站的用戶必須啓用JavaScript。儘管如此,似乎它會工作。謝謝! – user158017
我實際上並沒有使用它。我仍在使用我的解決方案,因爲它不依賴於JavaScript。所以我沒有把它作爲答案。但我會給你代表並檢查它。 – user158017