2011-12-19 9 views
8

Abbiamo stringhe localizzate nel database e vorremmo sapere se extending the ASP.NET Resource Provider Model funzionerebbe con il motore di visualizzazione Razor di ASP.NET MVC 3.ASP.NET MVC 3: - Utilizzo del database invece dei file di risorse come archivio di localizzazione

Gentilmente fammi sapere se il motore di visualizzazione Razor ASP.NET MVC 3 supporta il recupero di stringhe localizzate dal database dopo aver esteso il modello del provider di risorse ASP.NET. Oppure funziona solo con Classic ASP.NET e non con ASP.NET MVC.

Grazie

Satyaprakash J

+0

possibile duplicato di [ASP.NET MVC 2 Localizzazione/Globalizatio n memorizzato nel database?] (http://stackoverflow.com/questions/2568129/asp-net-mvc-2-localization-globalization-stored-in-the-database) – jrummell

risposta

9

La soluzione più pulito che ho trovato finora è: http://www.codeproject.com/Tips/514321/A-Simple-and-Effective-Way-to-Localize-ASP-Net-MVC.

Commenti/Feedback sono i benvenuti.

Modifica 1: In base ai commenti, ho aggiunto esempi di codice e ho utilizzato il collegamento come riferimento.

ho creato una classe 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); 
    } 
} 

Poi ho fatto riferimento il provider personalizzato su ApplicationStart in Global.asax

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

Non è necessario cambiare il modello e possibile utilizzare l'annotazione di visualizzazione :

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

Si noti che le risposte di solo collegamento sono scoraggiate, i riferimenti tendono a diventare obsoleti nel tempo. Prendi in considerazione l'aggiunta di una sinossi autonoma qui, mantenendo il link come riferimento. – kleopatra

Problemi correlati