3

私はかなりの調査を行いましたが、これをどのように進めるべきかわかりません。

通常のローカリゼーションは、言語が変更された場合にのみ変更されるため、フランス語の 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);
        }
    }
}

最小限のコードでこれを実装する最良の方法を探しています..

ありがとうございました!

4

1 に答える 1

0

より良い方法があります。Data Annotations がその答えです。

これは単なるサンプルです。System.Globalization.CultureInfo とデータ注釈 (System.ComponentModel.DataAnnotations) をさらに深く使用する必要があります。

モデル クラスを次のように定義できます (値が "strHello" の CustomResourceValues という名前のリソース ファイルがあると仮定します)。

public class SomeObject(){

    <Display(Name:="strHello", ResourceType:=GetType(My.Resources.CustomResourceValues))>
    public string HelloMessage{ get; set; }

}

したがって、私たちの見解では、作業は htmlhelper によって行われなければなりません (レンダリング エンジンのようなカミソリとモデルが "SomeObject" のタイプであると仮定します)。

@Html.LabelFor(Function(x) x.HelloMessage)

基本情報http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.displayattribute.resourcetype(v=vs.95).aspx

于 2012-05-29T17:04:17.767 に答える