Иметь многоязычный веб-сайт, нужны строки запросов, показывающие язык, весь код включен - PullRequest
1 голос
/ 30 января 2012

У меня есть многоязычный веб-сайт компании (9 языков - Visual Studio 2010 / VB / ASP.NET 4.0). Я следовал учебному пособию о том, как сделать так, чтобы клиент мог щелкнуть флаг, и страница отобразится на языке этой культуры. Это прекрасно работает в этом отношении. Страница EVERY на веб-сайте настроена для наследования BasePage.vb. У меня есть 9 файлов ресурсов (.resx) в моей папке App_GlobalResources.

Проблема:

Если конечный пользователь включен, например, domain / default.aspx, и он щелкает по немецкому флагу, текст переключится на немецкий и будет длиться весь сеанс. Это хорошо. Но URL остается прежним - домен / default.aspx. Он НЕ предлагает язык в URL, даже если текст на веб-странице изменился.

Мне было рекомендовано, чтобы было лучше, чтобы, когда клиент выбирает язык, URL-адрес читался как domain / default.aspx? Lang = de или domain / DE /default.aspx (предпочтительно) .

Мой вопрос:

Как мне это сделать? Легче ли использовать правило перезаписи IIS7? Если так, то как? Нужно ли что-то редактировать в своем коде или в файле basepage.vb? Любое руководство в этом отношении будет с благодарностью!

(П.С. - Я знаю, что это долго, но для любого, кто достаточно любезен, чтобы вникнуть в это, я перечислю мои кодировки ниже для ясности, если они необходимы)

--- Homepage.master-просто 2 примера. "de" вызывает файл LocalizedText.de.resx) -----

  <asp:LinkButton ID="LinkButton8" runat="server"
  CommandArgument="en" OnClick="RequestLanguageChange_Click"
  class="flagbutton">      
  <asp:Image ID="Image8" runat="server" ImageUrl="~/images/flagen.png"
  tooltip="View this website in English" title="View this website in English"/>
  <img class="map" src="images/flaghoveren.png" alt=""/>
  </asp:LinkButton>


  <asp:LinkButton ID="LinkButton6" runat="server"
  CommandArgument="de" OnClick="RequestLanguageChange_Click"
  class="flagbutton">      
  <asp:Image ID="Image7" runat="server" ImageUrl="~/images/flagde.png"
  tooltip="View this website in Deutsch" title="View this website in Deutsch"/>
  <img class="map" src="images/flaghoverde.png" alt=""/>
  </asp:LinkButton>

--------------- Код домашней страницы.master.vb ------------------------- -

        Partial Public Class Homepage
      Inherits System.Web.UI.MasterPage
      Protected Sub Page_Load(sender As Object, e As EventArgs)
      End Sub

      Protected Sub RequestLanguageChange_Click(sender As Object, e As EventArgs)
          Dim senderLink As LinkButton = TryCast(sender, LinkButton)

          'store requested language as new culture in the session
       Session(Udev.MasterPageWithLocalization.Classes.Global.SESSION_KEY_CULTURE) = 
          senderLink.CommandArgument()

          'reload last requested page with new culture
          Server.Transfer(Request.Path)
      End Sub
  End Class

----------------- BasePage.vb (в папке App_Code) -------------------

  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

------------- Culture.vb (в папке App_Code) -------------------

  Imports Microsoft.VisualBasic
  Imports System
  Imports System.Data
  Imports System.Configuration
  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>
      ''' 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

-------------- Global.vb (в папке App_Code) ------------------------- -

  Imports System
  Imports System.Data
  Imports System.Configuration
  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>
      ''' Summary description for Global
      ''' </summary>
      Public Structure [Global]
          Public Const SESSION_KEY_CULTURE As String = "culture"
      End Structure
  End Namespace
...