다국어 웹 애플리케이션 - ASP.NET에서 사용자의 언어를 어떻게 감지합니까?
-
05-07-2019 - |
문제
ASP.NET 웹 애플리케이션을 구축하고 있으며 모든 문자열은 리소스 파일에 저장됩니다. 응용 프로그램에 제 2 언어를 추가하고 싶습니다. 이상적으로는 사용자의 브라우저 언어 (또는 Windows 언어)를 자동 감지하고 기본값을 영어 외에 선택하게하는 대신 기본값을 사용하고 싶습니다. 현재 모든 리소스 모집단을 수동으로 처리하고 있으므로 두 번째 리소스 파일과 언어를 추가하는 것은 내 관점에서 사소한 것입니다.
아무도이 작업을 수행 한 적이 있습니까, 아니면 내가 그 가치를 검색 할 수있는 방법에 대한 생각이 있습니까? ASP.NET은 서버 기반이므로 특정 브라우저 설정에 액세스 할 수없는 것 같습니다.
해결: 여기에 내가 한 일이 있습니다. 나는 "각각"을 사용하여 "httpcontext.current.request.userlanguages"를 사용하여 내가 지원하는 것을 검색했습니다. 나는 아직 왼쪽 두 문자를 확인하고 있습니다. 우리는 아직 어떤 방언도 영어와 스페인어 만 지원하지 않기 때문입니다. 모든 도움에 감사드립니다!
해결책
이것 기사 (원본 링크가 죽었을 때 Archive.org에 연결됨) 브라우저의 언어 설정을 자동 감지하는 데 도움이 될 수 있습니다.
편집] 예. 인용 된 기사는 ASP.NET을 사용하지 않습니다. 이것 기사 하다.
다른 팁
web.config에서 이것을 시도하십시오 :
<globalization culture="auto" uiCulture="auto" />
이로 인해 ASP.NET은 요청 헤더에서 클라이언트의 문화를 자동으로 감지하게됩니다. 페이지 속성을 통해 PAGE 기준으로이를 설정할 수도 있습니다.
ASP.NET 4의 request.userlanguages는 이것을 문자열 배열로 구문 분석합니다.
좋은 정보 : http://www.w3.org/protocols/rfc2616/rfc2616-sec14.html
이것은 현지화로서 좋은 질문입니다 asp.net 많은 개발자들이 간과합니다.
asp.net ~해야 한다 사용자의 브라우저 설정을 자동으로 픽업하고 CultureInfo.CurrentCulture
사용자의 브라우저 언어에. 라인을 사용하여 문제를 강요 할 수 있습니다 Page_OnInit()
처럼:
Thread.CurrentThread.CurrentCulture = new CultureInfo(HttpContext.Current.Request.UserLanguages[0]);
이것을 어떻게 테스트 할 수 있습니까? 브라우저에 언어 패널을 입력하고 설정을 변경하십시오.
/// <summary>
/// Sets a user's Locale based on the browser's Locale setting. If no setting
/// is provided the default Locale is used.
/// </summary>
public static void SetUserLocale(string CurrencySymbol, bool SetUiCulture)
{
HttpRequest Request = HttpContext.Current.Request;
if (Request.UserLanguages == null)
return;
string Lang = Request.UserLanguages[0];
if (Lang != null)
{
// *** Problems with Turkish Locale and upper/lower case
// *** DataRow/DataTable indexes
if (Lang.StartsWith("tr"))
return;
if (Lang.Length < 3)
Lang = Lang + "-" + Lang.ToUpper();
try
{
System.Globalization.CultureInfo Culture = new System.Globalization.CultureInfo(Lang);
if (CurrencySymbol != null && CurrencySymbol != "")
Culture.NumberFormat.CurrencySymbol = CurrencySymbol;
System.Threading.Thread.CurrentThread.CurrentCulture = Culture;
if (SetUiCulture)
System.Threading.Thread.CurrentThread.CurrentUICulture = Culture;
}
catch
{ ;}
}
}
이 기사의 출처는 다음과 같습니다.브라우저 언어를 감지하는 방법