Sat*_*h J 8 globalization localization asp.net-mvc-3
我们在数据库中有本地化的字符串,并想知道扩展ASP.NET资源提供程序模型是否适用于ASP.NET MVC 3 Razor视图引擎.
请告诉我,一旦我们扩展了ASP.NET资源提供程序模型,ASP.NET MVC 3 Razor视图引擎是否支持从数据库中检索本地化字符串.或者它只适用于Classic ASP.NET而不适用于ASP.NET MVC.
谢谢
Satyaprakash J.
到目前为止,我发现的最干净的解决方案是:http://www.codeproject.com/Tips/514321/A-Simple-and-Effective-Way-to-Localize-ASP-Net-MVC.
欢迎提出意见/反馈.
编辑1:根据评论,我添加了代码示例并使用该链接作为参考.
我创建了一个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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后我在Global.asax中的ApplicationStart上引用了自定义提供程序
ModelMetadataProviders.Current = new Project.Web.Helpers.CustomDataAnnotationsProvider();
Run Code Online (Sandbox Code Playgroud)
您不必更改模型,可以使用显示注释:
[Display(Name = "CustomerAccountNumber")]
public string CustomerAccountNumber { get; set; }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10022 次 |
| 最近记录: |