首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将asp CommandArgument指令更改为html以切换语言?

问如何将asp CommandArgument指令更改为html以切换语言?
EN

Stack Overflow用户
提问于 2012-01-29 11:22:23
回答 2查看 1.8K关注 0票数 0

我有一个多语种的公司网站(Visual / VB / ASP.NET 4.0),当您在主页上单击一个标志时,文本将更改为该语言,并在我创建了一个类BasePage.vb之后,整个会话都与您在一起。一切都很好,但是URL从不改变.clients.aspx仍然是clients.aspx,尽管文本确实切换到了荷兰语。

@Aritstos推荐它使它看起来像clients.aspx?lang=nl,而不是其他语言中的clients.aspx。

当前,我的asp主页超链接看起来如下所示:

代码语言:javascript
复制
      <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链接,如:

代码语言:javascript
复制
     <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的代码:

代码语言:javascript
复制
    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中,我有这样一个:

代码语言:javascript
复制
  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中,我有这样一个:

代码语言:javascript
复制
  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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-06 13:18:56

要从url读取参数(在您的例子中),可以使用clients.aspx?lang=nl中的(lang):

代码语言:javascript
复制
Request.QueryString("lang")

通过这种方式,您可以使用简单的if或select case语句来确定用户请求哪种语言。就像这样:

代码语言:javascript
复制
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

现在,为了使用户在导航站点时使用相同的语言,您可以使用以下代码将其保存在会话中:

代码语言:javascript
复制
Session("lang") = "en"

若要读取会话值,请使用以下代码:

代码语言:javascript
复制
Dim lang as String = CType(Session.Item("lang"), String)

现在,当我们将这两种方法结合起来并确保没有混淆时:

代码语言:javascript
复制
' 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
票数 2
EN

Stack Overflow用户

发布于 2012-01-29 14:08:34

URL参数不会自动从一个请求传递到下一个请求。

您需要确定语言是否总是作为URL参数传递,还是将所选语言存储在会话变量中。

如果选择会话变量存储,也有几种实现语言选择的方法。

在BasePage中,检测URL参数(例如,lang=nl),并像这样实现语言选择(对不起,C#代码):

代码语言:javascript
复制
if (Request["lang"]=="nl")
    Session["lang"] = "nl";

您还可以使用LinkButton并将RequestLanguageChange_Click实现为

代码语言:javascript
复制
Session["lang"] = "nl";
Response.Redirect(Request.RawUrl);

您没有提到实际如何实现多语言功能。无论如何,您的代码需要分析会话“lang”的值,以查找所有UI元素的文本。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9052787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档