我已经做了很多研究,但我不确定我应该如何进行。
通常的本地化只会在语言发生变化时发生变化,因此法语的 Hello 将是 Bonjour,但我的应用程序需要为某些用户提供特殊关键字,因此 UserX 可能会说“Hello”需要是“Allo”。
我想拥有带有IdentityName_resourceKey的资源密钥,如果该密钥存在,则将其退回到resourceKey。
我在想我需要一个自定义 ResourceProvider 但我的实现是一个简单的 if 语句,所以我不想编写一个完整的资源提供程序。
我写了一个 DisplayName 属性的扩展,它工作得很好,但这不是很好,因为我需要每个数据注释属性中的一个,如果我直接在页面或控制器中使用资源,这将不起作用......
public class LocalizedDisplayNameAttribute : DisplayNameAttribute
{
private readonly PropertyInfo _propertyInfo;
public LocalizedDisplayNameAttribute(string resourceKey, Type resourceType) : base(resourceKey)
{
var clientName = CustomMembership.Instance.CurrentUser.Client.Name;
_propertyInfo = resourceType.GetProperty(clientName + "_" + base.DisplayName, BindingFlags.Static | BindingFlags.Public)
?? resourceType.GetProperty(base.DisplayName, BindingFlags.Static | BindingFlags.Public);
}
public override string DisplayName
{
get
{
if (_propertyInfo == null)
{
return base.DisplayName;
}
return (string) _propertyInfo.GetValue(_propertyInfo.DeclaringType, null);
}
}
}
我正在寻找用最少的代码实现这一点的最佳方法..
谢谢!