현재 2 언어를 지원해야하는 MVC4 응용 프로그램에서 작업하고 있습니다. 나는 형태로 자원을 DataAnnotations을 사용하고 있습니다 : 내가 존재하는 경우 언어 쿠키를 읽는 글로벌 액션 필터을 만든culture 변경 후 유효성 검사 오류 메시지가 변경되지 않습니다.
public class SignupModel
{
[Required(ErrorMessageResourceName = "Registration_ValidEmailRequired", ErrorMessageResourceType = typeof(Validation))]
[Email(ErrorMessageResourceName = "Registration_ValidEmailRequired", ErrorMessageResourceType = typeof(Validation))]
public string Email { get; set; }
[Required(ErrorMessageResourceName = "Registration_PasswordRequired", ErrorMessageResourceType = typeof(Validation))]
[StringLength(100, MinimumLength = 8, ErrorMessageResourceName = "Registration_PasswordInvalidLength", ErrorMessageResourceType = typeof(Validation))]
[DataType(DataType.Password)]
public string Password { get; set; }
}
, 이에 따라 현재 문화 및 uiculture을 설정 . 쿠키가 존재하지 않으면 현재 문화권의 쿠키가 생성됩니다. 예상대로
public void OnActionExecuting(ActionExecutingContext filterContext)
{
var langCookie = GetOrSetLanguageCookie(filterContext.HttpContext);
var culture = new CultureInfo(langCookie.Value);
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
}
모든 것이 이러한 상황이 발생하는 경우를 제외하고 작동합니다 :
- 후 HTML 양식에서 (의 홈과의 멋진 가입 양식을 가정 해 봅시다 이것은 OnActionExecuting는 필터에 같은 모습입니다 클라이언트 측 유효성 검사가 없으므로 멋진 레이아웃에서는 아무 것도 작동하지 않습니다.) 홈 컨트롤러의 Signup 동작.
- 게시 된 데이터에 오류가있는 경우 현재 문화권과 일치하는 언어로 표시됩니다. (좋고 예상 된).
- 실제로 서버에 다시 게시하는 클라이언트에서 활성화 된 드롭 다운을 사용하여 언어를 변경하십시오. (나는 아직 PRG을 구현하지 않았기 때문에 동일한 데이터가 다시 게시된다는 경고를 볼 수 있습니다.)
- 뷰는 내가 선택한 언어로 렌더링되지만 유효성 검사 메시지는 원래 동일한 언어로 유지됩니다.
언어 스위치를 처리하는 동작 필터를 디버깅하는 경우 오류가 원래 언어로 유지되는 것을 볼 수 있으므로 서버에서 한 번만 내 유효성 검사가 수행됩니다. ModelState를 제거하고 유효성 검사를 수행해야한다고 생각합니다. 그러나이 문제를 해결할 더 좋은 방법이 있다면 해킹인지 궁금합니다.
감사합니다. 여기 R.