문제

3 개의 도메인 .com, .de 및 .it가있는 웹 사이트가 있습니다.

각 도메인은 국가의 현지 언어/문화에 기본적으로 기본적으로 필요합니다. 기본 페이지를 만들고 초기화를 추가했습니다.

  Protected Overrides Sub InitializeCulture()

    Dim url As System.Uri = Request.Url
    Dim hostname As String = url.Host.ToString()
    Dim SelectedLanguage As String

    If HttpContext.Current.Profile("PreferredCulture").ToString Is Nothing Then

        Select Case hostname
            Case "www.domain.de"
                SelectedLanguage = "de"

                Thread.CurrentThread.CurrentUICulture = New CultureInfo(SelectedLanguage)
                Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(SelectedLanguage)

            Case "www.domain.it"
                SelectedLanguage = "it"

                Thread.CurrentThread.CurrentUICulture = New CultureInfo(SelectedLanguage)
                Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(SelectedLanguage)

            Case Else
                SelectedLanguage = "en"

                Thread.CurrentThread.CurrentUICulture = New CultureInfo(SelectedLanguage)
                Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(SelectedLanguage)
        End Select
    End If
End Sub

이건 괜찮아. 사용자가 도메인 언어를 무시할 수 있도록 홈페이지에서 3 개의 언어 선택 버튼을 원하기 때문에 문제가 발생합니다.

그래서 내 default.asp.vb에는 이와 같은 3 개의 버튼 이벤트가 있습니다 ...

Protected Sub langEnglish_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles langEnglish.Click

    Dim SelectedLanguage As String = "en"
    'Save selected user language in profile'
   HttpContext.Current.Profile.SetPropertyValue("PreferredCulture", SelectedLanguage)

    'Force re-initialization of the page to fire InitializeCulture()'
    Context.Server.Transfer(Context.Request.Path)


End Sub

그러나 물론 성공화는 버튼을 선택한 모든 버튼 선택을 무시합니다. 버튼 클릭이 발생했는지 여부를 확인하고 루틴을 건너 뛸 수있는 방법이 있습니까?

모든 조언은 대단히 감사하겠습니다. 감사합니다.

도움이 되었습니까?

해결책

Protected Overrides Sub InitializeCulture()

    'Set the PreferredCulture as the SelectedLanguage by default'
    Dim SelectedLanguage As String = HttpContext.Current.Profile("PreferredCulture").ToString()

    'If there is no PreferredCulture, use these defaults'
    If [String].IsNullOrEmpty(SelectedLanguage) = True Then

        Select Case Request.Url.Host.ToString()
            Case "www.domain.de"
                SelectedLanguage = "de"

            Case "www.domain.it"
                SelectedLanguage = "it"

            Case Else
                SelectedLanguage = "en"

        End Select
    End If

    'Finally set the culture'
    Thread.CurrentThread.CurrentUICulture = New CultureInfo(SelectedLanguage)
    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(SelectedLanguage)
End Sub

다른 팁

내 해결책은 이것을 두 부분으로 나누는 것입니다.

  1. 세션 시작시 세션 변수에서 도메인에서 파생 된 문화를 저장합니다.
  2. InitializeCulture에서 나는 문화를 초기화하기 위해 세션 변수에서 값을 가져옵니다.

언어를 변경하려면 세션 변수를 변경하고 페이지를 재개해야합니다.

사용자가 언어를 선택하면 해당 도메인으로 리디렉션 할 수 있습니까? 사용자가 자신의 언어를 "이탈리아어"로 전환하면 응답 할 수 있습니다. 그 후 "InitializeCulture"방법이주의를 기울입니다.

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