2017-05-11 1 views
1

번역 된 모든 문자열을 지정하려면 공유 resx 파일을 사용하고 싶습니다. (번역사 편의를 위해, 그리고 더 중요한 것은 DRY 원칙과 충돌하는 수십 개의 별도 resx 파일을 피하는 것입니다) . 컨트롤러 및 뷰에 대해 IStringLocalizer를 사용하고 있지만 모델의 데이터 주석을 구현하는 방법을 파악할 수 없습니다..Net 핵심 데이터 주석 - 공유 리소스를 사용하는 지역화

Models.AccountViewModels.LoginViewModel.en.resx와 같은 별도의 파일을 사용하여 작동하지만 특정 리소스 대신 데이터 주석에 공유 리소스 파일을 사용하려면 어떻게해야합니까? 구현 예제를 공유 할 수 있습니까?

미리 감사드립니다.

P. 환경은 .Net Core 1.1입니다. 유효성 검사와 표시 주석이 해당 버전에 있어야합니다.

답변

8

1 단계 : ValidationMessages.cs라는 간단한 클래스를 만들고 비워 둡니다. 귀하의 클래스가/Validation 폴더에 있다고 가정합니다.

2 단계 : Startup.cs 파일에 데이터 주석 로컬 라이저 바이더 수정은 다음과 같이 할 수 있습니다 :

mvcBuilder.AddDataAnnotationsLocalization(options => 
{ 
    options.DataAnnotationLocalizerProvider = (type, factory) => 
    { 
     return factory.Create(typeof(ValidationMessages)); 
    }; 
}); 

3 단계 : 폴더를 생성/검증 나는 당신이 모든 자원을 유지한다고 가정에서/자원 (그 폴더에있는 파일)을 입력하고 거기에 ValidationMessages.fr-FR.resx 파일을 추가하십시오 (예 : 프랑스어 문화권).

4 단계 : 원하는 키가있는 리소스 파일에 항목을 추가하십시오. RequiredError, MaxLengthError 등과 같은 키가 있다고 가정합니다.

5 단계 : [Required (ErrorMessage = "RequiredError")]로 모델 클래스의 속성을 장식합니다.

다음 번에 속성 유효성 검사가 실패하면 유효성 검사 메시지는 ValidationMessages. culture 파일에서 가져옵니다.

DisplayAttribute를 사용하는 경우 유효성 검사 메시지뿐만 아니라 속성 이름도 검색된다는 점에 유의하십시오.

+0

이 솔루션은 매우 유용합니다! –

+0

이 질문을보실 수 있습니까? https://stackoverflow.com/questions/48014436/how-to-localize-dataannotations-from-both-sharedsource-resx-and-viewmodel-resx –