2008-09-17 1 views
7

мне нужно сделать многоязычный веб-сайт, с URLs какЛучший способ справиться с URL-адреса в многоязычном сайте в ASP.net

www.domain.com/en/home.aspx for english 
www.domain.com/es/home.aspx for spanish 

В прошлом, я бы создал два виртуальных каталогов в IIS, а затем определить URL-адрес в global.aspx и изменить язык в соответствии с URL-адресом

Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs) 
    Dim lang As String 
    If HttpContext.Current.Request.Path.Contains("/en/") Then 
     lang = "en" 
    Else 
     lang = "es" 
    End If 
    Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(lang) 
    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(lang) 


End Sub 

Решение больше похоже на взлом. Я думаю об использовании маршрутизации для нового веб-сайта.

Вы знаете лучший или более элегантный способ сделать это?

редактировать: Вопрос об обработке URL, а не о ресурсах и т.д.

ответ

7

Я решил пойти с новым ASP.net маршрутизации.
Почему не urlRewriting? Потому что я не хочу менять чистый URL-адрес, который дает вам маршрутизация.

Вот код:

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) 
    ' Code that runs on application startup 
    RegisterRoutes(RouteTable.Routes) 
End Sub 


Public Sub RegisterRoutes(ByVal routes As RouteCollection) 
    Dim reportRoute As Route 
    Dim DefaultLang As String = "es" 

    reportRoute = New Route("{lang}/{page}", New LangRouteHandler) 
    '* if you want, you can contrain the values 
    'reportRoute.Constraints = New RouteValueDictionary(New With {.lang = "[a-z]{2}"}) 
    reportRoute.Defaults = New RouteValueDictionary(New With {.lang = DefaultLang, .page = "home"}) 

    routes.Add(reportRoute) 
End Sub 

Тогда LangRouteHandler.vb класс:

Public Class LangRouteHandler 
    Implements IRouteHandler 

    Public Function GetHttpHandler(ByVal requestContext As System.Web.Routing.RequestContext) As System.Web.IHttpHandler _ 
     Implements System.Web.Routing.IRouteHandler.GetHttpHandler 

    'Fill the context with the route data, just in case some page needs it 
    For Each value In requestContext.RouteData.Values 
     HttpContext.Current.Items(value.Key) = value.Value 
    Next 

    Dim VirtualPath As String 
    VirtualPath = "~/" + requestContext.RouteData.Values("page") + ".aspx" 

    Dim redirectPage As IHttpHandler 
    redirectPage = BuildManager.CreateInstanceFromVirtualPath(VirtualPath, GetType(Page)) 
    Return redirectPage 

    End Function 
End Class 

Наконец я использую default.aspx в корне переориентировать по умолчанию языков, используемых в списке браузера ,
Возможно, это можно сделать с помощью маршрута.Значения по умолчанию, но не работают в Visual Studio (возможно, он работает на сервере)

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) 
    Dim DefaultLang As String = "es" 
    Dim SupportedLangs As String() = {"en", "es"} 
    Dim BrowserLang As String = Mid(Request.UserLanguages(0).ToString(), 1, 2).ToLower 
    If SupportedLangs.Contains(BrowserLang) Then DefaultLang = BrowserLang 

    Response.Redirect(DefaultLang + "/") 
End Sub 

Некоторые источники:
* Mike Ormond's blog
* Chris Cavanagh’s Blog
* MSDN

0

Я personnaly использовать the resources files.

Очень эффективный, очень простой.

+0

uhh? Мы говорим о обработке URL-адресов и сопоставлении на определенном языке. – 2008-09-17 12:41:55

+0

Да, но с файлами ресурсов вам не нужно отображать URL-адреса на языках, поэтому проблема решена. – thomasb 2010-01-19 09:08:54

1
  1. Используйте urlrewriteing.net для веб-форм asp.net или маршрутизации с помощью mvc. Перепишите www.site.com/en/something.aspx на url: page.aspx? Lang = ru.
    UrlRewriteing.net можно легко настроить с помощью регулярного выражения в web.config. Вы также можете использовать маршрутизацию с веб-формами сейчас, вероятно, это похоже ...
  2. с веб-формами, каждая страница aspx наследуется от класса BasePage, который затем наследуется от класса Page.
    В классе BasePage переопределить «InitializeCulture()» и установить информацию о культуре в поток, как описано в вопросе.
    Это хорошо сделать в этом порядке: 1. проверить URL-адрес для Lang param, 2. проверить cookie, 3. установить по умолчанию lang
  3. Для статического контента (текст, URL-адрес страницы) на страницах используйте LocalResources или Global if content повторяется через сайт. Вы можете смотреть видеозапись при использовании глобальных/локальных res. на www.asp.net
  4. Подготовить db для нескольких языков. Но это уже другая история.
0

Вид касательной, но Я бы вообще не делал этого с разными путями, если разные языки полностью не разделены друг от друга.

Для ранга Google или для пользователей, использующих URL-адреса (одно из больших преимуществ «чистых» URL-адресов), вы хотите, чтобы адрес оставался как можно более постоянным.

Вы можете найти языковые предпочтения пользователей из настроек браузера:

CultureInfo.CurrentUICulture 

Тогда ваш URL для английского или испанского:

www.domain.com/products/newproduct

Тот же адрес для любого языка, но пользователь получает страницу на выбранном языке.

Мы используем это в Канаде для одновременного предоставления систем на английском и французском языках.

0

Кроме того, следить новый IIS 7.0 - URL переписывания. Отличная статья здесь http://learn.iis.net/page.aspx/496/iis-url-rewriting-and-aspnet-routing/

Мне понравилась эта деталь Какой вариант использовать?

  1. При разработке нового веб-приложения ASP.NET, которая использует либо ASP.NET MVC или ASP.NET Dynamic Data технологии, использование маршрутизации ASP.NET. Ваше приложение получит выгоду от собственной поддержки чистых URL-адресов, включая создание чистых URL-адресов для ссылок на ваших веб-страницах. Обратите внимание, что маршрутизация ASP.NET пока не поддерживает стандартные приложения Web Forms, хотя в будущем планируется ее поддержка.

  2. Если у вас уже есть устаревшее веб-приложение ASP.NET и вы не хотите его менять, используйте модуль URL-перезаписи. Модуль URL-rewrite позволяет вам переводить URL-адреса, оптимизированные для поисковых систем, в формат, который в настоящее время используется вашим приложением. Кроме того, он позволяет создавать правила переадресации, которые могут использоваться для перенаправления поисковых роботов для очистки URL-адресов. http://learn.iis.net/page.aspx/496/iis-url-rewriting-and-aspnet-routing/

Спасибо, Maulik.

Смежные вопросы