私はかなりの調査を行いましたが、これをどのように進めるべきかわかりません。
通常のローカリゼーションは、言語が変更された場合にのみ変更されるため、フランス語の 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);
}
}
}
最小限のコードでこれを実装する最良の方法を探しています..
ありがとうございました!