사용자의 Accept-Language 헤더에 적절하게 대응해야하는 ASP.NET 웹 API 응용 프로그램이 있습니다.요청에 따라 언어 리소스를 동적으로 변경하는 좋은 방법
현재 문자열은 resx에 저장되고 Visual Studio의 생성 클래스를 통해 컴파일 안전 방식으로 액세스됩니다. 내가 뭘하고 싶은지 현재 접근 방식을 유지하고 resx의 각 번역 버전에 대한 위성 어셈블리를 만드는 것입니다. 그런 다음 사용자의 Accept-Language 헤더를 분석하여 사용자가 수락 한 언어를보고 위성 어셈블리에서 요청한 언어의 리소스를로드합니다. 비주얼 스튜디오을 담당하기 때문에
나는, 나는 ResourceSet
의 도움으로 언어 별 ResourceManager
개체의 집합을 만들어 모든 행동 자신을 구현할 수 있지만, 다음은 컴파일시 안전을 유지하는 것이 가능하지 않을 것입니다 가정 resx 파일의 클래스를 자동으로 업데이트합니다.
지역화 된 언어 리소스를 동적으로 선택하는 가장 좋은 방법은 무엇입니까?
귀하의 게시물에서 다음과 같은 Accept-Language 헤더를 보내려고하면 : Accept-Language : it, de, en; q = 0.5' 그리고 ASP.NET은 요청 된 리소스를 이탈리아어로 찾을 수 없습니다. 다음에 독일어를 시도하지는 않지만 대신 중립적 인 문화로 돌아갑니다. 이 문제를 해결할 수있는 방법은 무엇입니까? –
예, accept-language 헤더의 최상위 언어 (또는 적어도 유효한 .NET culture 이름 인 맨 위의 언어) 만 고려한 것 같습니다. 현지화가 가능한지 여부에 따라 더 똑똑하고 다른 도구를 사용하면 좋을 것입니다. 그러나 현지화 된 것을 진정으로 결정하는 것은 불가능합니다 (위성 어셈블리 방식은 한 가지 dll에 대해 독일어를 사용하고 한 dll에 대해 독일어를 사용하고 다른 하나에 대해 다른 하나의 이탈리아와 다른 것을로드 할 수 있음을 의미합니다) 대다수의 최종 사용자는 아마 하나에 대해서만 관심을 가질 것입니다. – Clafou
즉, 나는 지난 주와 똑같은 문제가있어서이 "자동"설정의 대체를 구현했습니다. 내 경우에는 MVC 였고 OnActionExecuting에서이 문제를 처리했습니다. 모든 작업을 수행하는 것은 약간의 작업입니다. (얻을 수있는 것은 q 문법의 헤더 문자열뿐입니다. 구문 분석을 수행하고 .NET에서 culture 이름을 허용하지 않으므로 유효성을 검사해야합니다.) 나는 var orderedValidAcceptLanguages = AcceptLanguage.Parse (httpContext.Request.Headers [ "Accept-Language"])와 같은 것으로 끝났다. (x => x.IsValid) .OrderByDescending (x => xQ) .ToList(); ' – Clafou