我有一个多语种的公司网站(Visual / VB / ASP.NET 4.0),当您在主页上单击一个标志时,文本将更改为该语言,并在我创建了一个类BasePage.vb之后,整个会话都与您在一起。一切都很好,但是URL从不改变.clients.aspx仍然是clients.aspx,尽管文本确实切换到了荷兰语。
@Aritstos推荐它使它看起来像clients.aspx?lang=nl,而不是其他语言中的clients.aspx。
当前,我的asp主页超链接看起来如下所示:
<asp:LinkButton ID="LinkButton7" runat="server"
CommandArgument="nl" OnClick="RequestLanguageChange_Click"
class="flagbutton">
<asp:Image ID="Image1" runat="server" ImageUrl="~/images/flagnl.png"
tooltip="Bekijk deze website in het Nederlands" title="Bekijk deze website
in het Nederlands"/>
<img class="map" src="images/flaghovernl.png" alt=""/>
</asp:LinkButton>我尝试将asp链接更改为html链接,如:
<a href="default.aspx?lang-nl" class="flagbutton">
<img src="images/flagnl.png" alt="Bekijk deze website in het Nederlands"
title="Bekijk deze website in het Nederlands"/>
<img class="map" src="images/flaghovernl.png" alt=""/>但那不管用。该页面不会将语言转换为荷兰语。当我点击任何链接,比如说,about.aspx,lang-nl就消失了.所以荷兰语里什么也没有出现。有人告诉我,javascript_dopostback是由苹果人做的吗?这是不好的。谁能告诉我如何改变我的链接,以便他们创建一个字符串在URL的末尾写着“lang-nl”,在他们的整个会话中都是这样吗?任何帮助都将是真诚的感谢!
PS -这是我的BasePage.vb的代码:
Imports Microsoft.VisualBasic
Imports System
Imports System.Data
Imports System.Configuration
Imports System.Globalization
Imports System.Threading
Imports System.Web
Imports System.Web.Security
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts
Imports System.Web.UI.HtmlControls
Namespace Udev.MasterPageWithLocalization.Classes
''' <summary>
''' Custom base page used for all web forms.
''' </summary>
Public Class BasePage
Inherits Page
Protected Overrides Sub InitializeCulture()
'retrieve culture information from session
Dim culture__1 As String =
Convert.ToString(Session([Global].SESSION_KEY_CULTURE))
'check whether a culture is stored in the session
If culture__1.Length > 0 Then
Culture = culture__1
End If
'set culture to current thread
Thread.CurrentThread.CurrentCulture =
CultureInfo.CreateSpecificCulture(culture__1)
Thread.CurrentThread.CurrentUICulture = New CultureInfo(culture__1)
'call base class
MyBase.InitializeCulture()
End Sub
End Class
End Namespace在我的Global.vb中,我有这样一个:
Namespace Udev.MasterPageWithLocalization.Classes
''' <summary>
''' Summary description for Global
''' </summary>
Public Structure [Global]
Public Const SESSION_KEY_CULTURE As String = "culture"
End Structure
End Namespace在我的Culture.vb中,我有这样一个:
Namespace Udev.MasterPageWithLocalization.Classes
''' <summary>
''' This class provides ISO definitions for all cultures that are supported by
this application.
''' </summary>
Public Structure Culture
'German - Switzerland definition
Public Const DE As String = "de"
'English - Great Britain definition
Public Const EN As String = "en"
End Structure
End Namespace发布于 2012-11-06 13:18:56
要从url读取参数(在您的例子中),可以使用clients.aspx?lang=nl中的(lang):
Request.QueryString("lang")通过这种方式,您可以使用简单的if或select case语句来确定用户请求哪种语言。就像这样:
Select Case Request.QueryString("lang")
Case "en"
' switch the english
Case "ar"
' switch to arabic
Case "jp"
' switch to japan
Case Else
' your default
End Select现在,为了使用户在导航站点时使用相同的语言,您可以使用以下代码将其保存在会话中:
Session("lang") = "en"若要读取会话值,请使用以下代码:
Dim lang as String = CType(Session.Item("lang"), String)现在,当我们将这两种方法结合起来并确保没有混淆时:
' check if there is a lang value in the url
If Request.QueryString("lang").Length > 0 Then
Select Case Request.QueryString("lang")
Case "en"
Session("lang") = "en"
' switch the english languge
Case "ar"
Session("lang") = "ar"
' switch to arabic
Case "jp"
Session("lang") = "jp"
' sitch to japaneese
Case Else
Session("lang") = "en"
' your default language
End Select
Else
' check if there is a value in the session
Select Case CType(Session.Item("lang"), String)
Case "en"
' switch the english languge
Case "ar"
' switch to arabic
Case "jp"
' sitch to japaneese
Case Else
' your default language
End Select
End If发布于 2012-01-29 14:08:34
URL参数不会自动从一个请求传递到下一个请求。
您需要确定语言是否总是作为URL参数传递,还是将所选语言存储在会话变量中。
如果选择会话变量存储,也有几种实现语言选择的方法。
在BasePage中,检测URL参数(例如,lang=nl),并像这样实现语言选择(对不起,C#代码):
if (Request["lang"]=="nl")
Session["lang"] = "nl";您还可以使用LinkButton并将RequestLanguageChange_Click实现为
Session["lang"] = "nl";
Response.Redirect(Request.RawUrl);您没有提到实际如何实现多语言功能。无论如何,您的代码需要分析会话“lang”的值,以查找所有UI元素的文本。
https://stackoverflow.com/questions/9052787
复制相似问题