2011-12-19 3 views
8

우리는 데이터베이스에 현지화 된 문자열을 가지고 있으며 extending the ASP.NET Resource Provider Model이 ASP.NET MVC 3 면도기 뷰 엔진에서 작동하는지 알고 싶습니다.ASP.NET MVC 3 : - 리소스 파일 대신 데이터베이스를 지역화 저장소로 사용

ASP.NET MVC 3 면도기 뷰 엔진이 ASP.NET 리소스 공급자 모델을 확장 한 후에는 데이터베이스에서 지역화 된 문자열 검색을 지원하는지 여부를 알려주십시오. 또는 ASP.NET MVC가 아닌 클래식 ASP.NET에서만 작동합니다.

릭은 이미 당신을 위해 일을했기 때문에 운에 당신에게

Satyaprakash J

+0

가능한 복제본 [ASP.NET MVC 2 Localization/Globalizatio n 데이터베이스에 저장된?] (http://stackoverflow.com/questions/2568129/asp-net-mvc-2-localization-globalization-stored-in-the-database) – jrummell

답변

9

내가 지금까지 찾은 깨끗한 솔루션입니다 : http://www.codeproject.com/Tips/514321/A-Simple-and-Effective-Way-to-Localize-ASP-Net-MVC.

의견/피드백은 환영합니다.

편집 1 : 의견에 따라 코드 예제를 추가하고 링크를 참조로 사용했습니다.

은 내가 customDataAnnotationsProvider 클래스 생성 : 내가 Global.asax에

에 ApplicationStart에 사용자 지정 공급자를 참조 그런

public class CustomDataAnnotationsProvider: DataAnnotationsModelMetadataProvider 
{ 
    private ResourceManager resourceManager = new ResourceManager(); 
    protected override ModelMetadata CreateMetadata(
         IEnumerable<Attribute> attributes, 
         Type containerType, 
         Func<object> modelAccessor, 
         Type modelType, 
         string propertyName) 
    { 
     string key = string.Empty; 
     string localizedValue = string.Empty; 


     foreach (var attr in attributes) 
     { 
      if (attr != null) 
      { 
       if (attr is DisplayAttribute) 
       { 
        key = ((DisplayAttribute)attr).Name; 
        if (!string.IsNullOrEmpty(key)) 
        { 
         localizedValue = resourceManager.GetLocalizedText(key); 
         ((DisplayAttribute)attr).Name = localizedValue; 
        } 
       } 
       else if (attr is ValidationAttribute) 
       { 
        key = ((ValidationAttribute)attr).ErrorMessage; 
        if (!string.IsNullOrEmpty(key)) 
        { 
         localizedValue = resourceManager.GetLocalizedText(key); 
         ((ValidationAttribute)attr).ErrorMessage = localizedValue; 
        } 
       } 
      } 
     } 
     return base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName); 
    } 
} 

ModelMetadataProviders.Current = new Project.Web.Helpers.CustomDataAnnotationsProvider(); 

당신은 당신의 모델을 변경하지 않고 디스플레이 주석을 사용할 수 있습니다 :

[Display(Name = "CustomerAccountNumber")] 
public string CustomerAccountNumber { get; set; } 
+0

링크 전용 답변은 권장되지 않으며 참조가 시간이 지남에 따라 오래되어 버리는 경향이 있습니다. 링크를 참조로 유지하면서 독립형 시놉시스를 여기에 추가하는 것을 고려하십시오. – kleopatra

관련 문제