ASP.NET 설정 문화를 설정하는 문화
-
18-09-2019 - |
문제
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
다른 팁
내 해결책은 이것을 두 부분으로 나누는 것입니다.
- 세션 시작시 세션 변수에서 도메인에서 파생 된 문화를 저장합니다.
- InitializeCulture에서 나는 문화를 초기화하기 위해 세션 변수에서 값을 가져옵니다.
언어를 변경하려면 세션 변수를 변경하고 페이지를 재개해야합니다.
사용자가 언어를 선택하면 해당 도메인으로 리디렉션 할 수 있습니까? 사용자가 자신의 언어를 "이탈리아어"로 전환하면 응답 할 수 있습니다. 그 후 "InitializeCulture"방법이주의를 기울입니다.
제휴하지 않습니다 StackOverflow