Ich habe einen anderen Ansatz. Sie müssen immer noch DataAnnotation
Attribute erben, aber Sie können eine flexiblere Übersetzungslösung erhalten.
-Code aus my blog post (lesen Fore es mehr Details)
End Ergebnis
public class User
{
[Required]
[LocalizedDisplayNameAttribute("User_Id")]
public int Id { get; set; }
[Required]
[StringLength(40)]
[LocalizedDisplayNameAttribute("User_FirstName")]
public string FirstName { get; set; }
[Required]
[StringLength(40)]
[LocalizedDisplayNameAttribute("User_LastName")]
public string LastName { get; set; }
}
1 Inherit alle Datenaufbelichtung Attribute wie diese
public class RequiredAttribute : System.ComponentModel.DataAnnotations.RequiredAttribute
{
private string _displayName;
public RequiredAttribute()
{
ErrorMessageResourceName = "Validation_Required";
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
_displayName = validationContext.DisplayName;
return base.IsValid(value, validationContext);
}
public override string FormatErrorMessage(string name)
{
var msg = LanguageService.Instance.Translate(ErrorMessageResourceName);
return string.Format(msg, _displayName);
}
}
2 Inherit Displayname
public class LocalizedDisplayNameAttribute : DisplayNameAttribute
{
private PropertyInfo _nameProperty;
private Type _resourceType;
public LocalizedDisplayNameAttribute(string className, string propertyName)
: base(className + (propertyName == null ? "_Class" : ("_" + propertyName)))
{
}
public override string DisplayName
{
get
{
return LanguageService.Instance.Translate(base.DisplayName) ?? "**" + base.DisplayName + "**";
}
}
}
3. die Sprache Service erstellen (Sie können in es in jede beliebige Sprache Quelle wechseln)
public class LanguageService
{
private static LanguageService _instance = new LanguageService();
private List<ResourceManager> _resourceManagers = new List<ResourceManager>();
private LanguageService()
{
}
public static LanguageService Instance { get { return _instance; } }
public void Add(ResourceManager mgr)
{
_resourceManagers.Add(mgr);
}
public string Translate(string key)
{
foreach (var item in _resourceManagers)
{
var value = item.GetString(key);
if (value != null)
return value;
}
return null;
}
}
Schließlich müssen Sie die String-Tabellen registrieren Sie verwenden, um die Überprüfungsmeldungen zu übersetzen und Ihre Modelle
LanguageService.Instance.Add(MyNameSpace.ModelResource.ResourceManager);
LanguageService.Instance.Add(MyNameSpace.ValidationResources.ResourceManager);
Kann jemand bitte Licht werfen, ob das möglich ist und wie sich diesem zu nähern. Vielen Dank. –
werfen Sie einen Blick auf http://adamyan.blogspot.be/2010/02/aspnet-mvc-2-localization-complete.html Sie können die Liste der Standardnachrichten hier finden: http://stackoverflow.com/a/24186038/187650 – juFo