2011-12-19 6 views
8

Mamy zlokalizowane ciągi znaków w bazie danych i chcielibyśmy się dowiedzieć, czy extending the ASP.NET Resource Provider Model będzie działać z przeglądarką widoków ASP.NET MVC 3.ASP.NET MVC 3: - Używanie bazy danych zamiast plików zasobów jako magazynu lokalizacji

Prosimy o informację, czy mechanizm wyświetlania maszyn Razer ASP.NET MVC 3 obsługuje pobieranie zlokalizowanych ciągów z bazy danych po rozszerzeniu modelu dostawcy zasobów ASP.NET. Czy działa tylko z klasycznym ASP.NET, a nie z ASP.NET MVC.

Dziękuję

Satyaprakash J

+0

możliwy duplikat lokalizacji [ASP.NET MVC 2/Globalizatio n przechowywane w bazie danych?] (http://stackoverflow.com/questions/2568129/asp-net-mvc-2-localization-globalization-stored-in-the-database) – jrummell

Odpowiedz

9

Najczystsze rozwiązanie znalazłem tak daleko jest: http://www.codeproject.com/Tips/514321/A-Simple-and-Effective-Way-to-Localize-ASP-Net-MVC.

Komentarze/Opinie są mile widziane.

Edytuj 1: Na podstawie komentarzy dodałem przykłady kodu i wykorzystałem łącze jako odniesienie.

Stworzyłem klasę customDataAnnotationsProvider:

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); 
    } 
} 

Potem odwołuje dostawcy niestandardowego na ApplicationStart w Global.asax

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

Nie musisz zmienić swój model i może korzystać z adnotacji wyświetlacza :

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

Należy zauważyć, że odradza się udzielanie jedynie linków, odniesienia mają tendencję do starzenia się w miarę upływu czasu. Rozważ dodanie osobnego streszczenia tutaj, zachowując link jako odniesienie. – kleopatra

Powiązane problemy