在切换语言时,ASP.Net通用本地化不起作用

时间:2015-07-26 10:59:09

标签: c# asp.net-mvc-4 localization custom-attributes

我使用DisplayNameRequired属性实现了本地化,当我从英语切换到阿拉伯语时,它适用于DisplayName但是对于必需属性 - 它没有更新阿拉伯语错误消息。

以下是我实施的方式和下面的代码:

DisplaName - 在语言切换方面都可以正常工作..

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Event)]
    public class LocalizedDisplayNameAttribute : DisplayNameAttribute
    {
        private ResourceUtils.Key _resourceKey;

        public LocalizedDisplayNameAttribute(ResourceUtils.Key resourceKey)
            : base()
        {
            _resourceKey = resourceKey;
        }

        public override string DisplayName
        {
            get
            {
                return ResourceUtils.GetDisplayName(_resourceKey);
            }
        }
    }

它工作正常但只有一次 - 在从一种语言切换到另一种语言时,它会在切换后保留以前语言的旧消息.ErrorMessage不会更新..

public class RequiredLocalizedAttribute : RequiredAttribute
{
    public RequiredLocalizedAttribute(ResourceUtils.Key resourceKey)
    {
        this.ErrorMessage = ResourceUtils.GetDisplayName(resourceKey);
    }
}

Global.asax

DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(RequiredLocalizedAttribute), typeof(RequiredAttributeAdapter));

模态代码。

[LocalizedDisplayName(ResourceUtils.Key.Number)]
[RequiredLocalized(ResourceUtils.Key.NumberMessage)]
public int Number { get; set; }

我该怎么办?在为ErrorMessage切换语言时它无法正常工作 - 在语言切换时,DisplayName会成功更新。

感谢。

1 个答案:

答案 0 :(得分:1)

您的自定义required属性只初始化一次,而不是每次请求。并在构造函数中设置错误消息。因此,您的错误消息不会更新。 考虑为它编写自定义工厂。或者只需使用FormatErrorMessage方法更新您的邮件:

public class RequiredLocalizedAttribute : RequiredAttribute
{
    ResourceUtils.ResourceKey _resourceKey;
    public RequiredLocalizedAttribute(ResourceUtils.ResourceKey resourceKey)
    {
        this._resourceKey = resourceKey;
    }

    public override string FormatErrorMessage(string name)
    {
        this.ErrorMessage = ResourceUtils.GetDisplayName(resourceKey);
        return base.FormatErrorMessage(name);
    }
}