У меня есть многоязычный веб-сайт компании (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