ASP.Net 通用本地化在切换语言时不起作用
ASP.Net Generic Localization does not work while switching language
我使用 DisplayName
和 Required
属性实现了本地化,当我从英语切换到阿拉伯语时,它与 DisplayName
一起工作正常,但对于 Required 属性 - 它没有更新阿拉伯语错误消息。
下面是我的实现方式和我的代码:
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 在语言切换时成功更新。
谢谢。
您的自定义 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);
}
}
我使用 DisplayName
和 Required
属性实现了本地化,当我从英语切换到阿拉伯语时,它与 DisplayName
一起工作正常,但对于 Required 属性 - 它没有更新阿拉伯语错误消息。
下面是我的实现方式和我的代码:
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 在语言切换时成功更新。
谢谢。
您的自定义 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);
}
}