문제

내가 필요로 하는 다국어 구사 가능 웹 사이트,함께 같은 url

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

과거에는,내가 설정한 가상 디렉토리에서 IIS,다음을 감지하는 URL 에서 글로벌입니다.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 을 처리하지 않에 대한 리소스,등등.

도움이 되었습니까?

해결책

하기로 결정했으로 새로운 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

마지막으로 저는 기본값을 사용합니다.aspx 에서 뿌리를 리다이렉 기본 lang 사용된 브라우저에서 목록.
어쩌면 이것으로 수행 할 수 있습니다.기본값으로,하지만 일하지 않는 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

일부 소스:
* 마이크릴의 블로그
* 크리스바의 블로그
* MSDN

다른 팁

  1. 사 urlrewriteing.net 대 asp.net webforms 거나,라우팅과 mvc.다시 쓰기 www.site.com/en/something.aspx url:페이지입니다.aspx?lang=en.
    UrlRewriteing.net 할 수 있도록 쉽게 구성을 통해 regex 웹.config.사용할 수도 있습니다 라우팅과 webforms 지금,그것은 아마도 비슷한...
  2. 와 webforms,모든 페이지에서 상속되 BasePage 클래스에는 다음속에서 페이지를 클래스입니다.
    에 BasePage 클래스를 재정의"InitializeCulture()"및 문화 정보를 스레드에,당신 같은 설명합니다.
    그것은 좋은 하에서 이 순서는:1.체크인 url 을 Lang param,2.체크 쿠키,3.기본값으로 설정 lang
  3. 정적 내용(텍스트,사진 url)페이지에서 사용 LocalResources,또는 글로벌 경우 컨텐츠의 반복에 걸쳐 사이트입니다.당신이 볼 수있는 비디오 캐스트에 사용하는 지역/글로벌 res.에 www.asp.net
  4. 준비하는 db 여러 언어로 제공됩니다.그러나 그것은 또 다른 이야기입니다.

I personnaly 사용 자원 파일.

매우 효율적이,매우 간단합니다.

UrlRewriting 는 방법입니다.

이에 MSDN 에 가장 좋은 방법 그것을 할 수 있습니다.

http://msdn.microsoft.com/en-us/library/ms972974.aspx

종류의 접지만,실제로 일을 피 이와 서로 다른 경로를하지 않는 한 다른 언어로 완전히는 콘텐츠와 별도니다.

Google 순위,또는 사용자가 Url 을 공유(하나의 큰 장점의 깨끗한 Url)를,당신은 주소로 숙박 시설로 가능합니다.

당신이 찾을 수 있는 사용자의 언어 환경설정에서 자신의 브라우저 설정:

CultureInfo.CurrentUICulture

다음 URL 을 영어 또는 스페인:

www.domain.com/products/newproduct

동일한 주소에 대한 모든 언어로,그러나 사용자가 페이지에서 자신이 선택한 언어입니다.

우리가 사용하는 이에 캐나다 시스템을 제공 영어와 프랑스에서 동일한 시간입니다.

이렇게하려면 URL 라우팅,이 게시물을 참조:

친절한 URL URL 팅

또한,시계 새로운 IIS7.0-URL 다시 쓰기.훌륭한 여기에 문서 http://learn.iis.net/page.aspx/496/iis-url-rewriting-and-aspnet-routing/

내가 좋아하는 이부 는 옵션이 사용해야 합니까?

  1. 을 개발하는 경우 새로운 ASP.NET 웹 응용 프로그램을 사용하는 중 ASP.NET MVC 나 ASP.NET 동적 데이터,기술 사용 ASP.NET 라우팅이라고 합니다.응용 프로그램 제공에 대한 기본 지원이 깨끗한 Url 을 포함하여 세대의 깨끗한 Url 링크에서 당신의 웹 페이지입니다.Note ASP.NET 라우팅을 지원하지 않는 기준 Web Forms 응용 프로그램으로 아직 있지만,계획을 지원합니다.

  2. 이미 있는 경우에는 유산 ASP.NET 웹 응용 프로그램을 변경하고 싶지 않아 그것을 사용하고,URL-rewrite 모듈이 있습니다.URL 재작성 모듈를 번역할 수 있 검색 엔진-친절한 Url 형식으로 하는 응용 프로그램에서 현재 사용합니다.또한,그것을 만들 수 있습 리디렉션할 수 있는 규칙을 사용하여 리디렉션 검색 엔진 크롤러를 깨끗한 Url.http://learn.iis.net/page.aspx/496/iis-url-rewriting-and-aspnet-routing/

감사합니다, Maulik.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top