Я провел немало исследований, и я не уверен, как мне поступить с этим.
Обычная локализация изменится только при изменении языка, так что Hello for french будет 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);
}
}
}
Я ищу лучший способ реализовать это с наименьшим количеством кода ..
Спасибо!