4

理由はわかりませんが、MVC3のデータ注釈は定数値を要求します。これは、エラーメッセージや表示名などでは理解できません。私はこれらの注釈が大好きです。とても使いやすく、とても強力ですが、複数の言語をサポートする必要がある場合はどうでしょうか。

私が次のモデルを持っていると想像してください:

public class Person
{
    public string First_Name { get; set; }
}

何も変更せず、MVC3が構築するCRUDビューを使用すると、テキストフィールドの横に「First_Name」というラベルが表示されるので、データ注釈を追加して表示名を次のように変更します。

public class Person
{
    [Display(Name="First name")]
    public string First_Name { get; set; }
}

これは問題なく機能します。しかし、ユーザーの言語に応じて異なる表示名を指定したいのですが、以前に作成した関数を使用して、GetDisplayName(string ToGet, string Language)関心のある文字列を返すだけですが、データ注釈をこれに変更すると、次のようになります。

public class Person
{
    [Display(Name=GetDisplayName("First_Name", "English"))]
    public string First_Name { get; set; }
}

次に、注釈に定数値が必要であるというコンパイラエラーが発生します。なぜですか????

誰かが私がやろうとしていることを達成する方法を知っていますか?ありがとう

アップデート

わかりました。これを行うための最良の方法は、.resx以下のいくつかの回答と他の投稿の回答にあるリソースファイルを使用することです。これはほとんどの部分でうまく機能します。

変数名でリソースをリクエストする方法を知っている人はいますか?今回はデータ属性のコンテキストではなく、コントローラーとビューのみです。

基本的に、現時点ではでリソースを取得していますが、動的に生成された文字列であるwhere@Resources.SomeKeyの関数内でそれを使用できるようにしたいと思います。@Resources["SomeOtherKey"]SomeOtherKey

4

5 に答える 5

7

翻訳されたプロパティ名がリソースファイルにある場合、それはすぐにサポートされます...フレームワークを拡張する必要はありません。

使用するだけです:

[Display(Name = "Resource_Key", ResourceType = typeof(DataFieldLabels))]
public string myProperty { get; set; }

ここで、「Resource_Key」はリソースファイルのキーです...そして「DataFieldLabels」はベースリソースファイルの名前です。

編集:

リソースファイルに動的にアクセスするには、次の操作を実行できます。

ResourceSet resset = ResourceManager.GetResourceSet(culture, true, false);
var translated = resset.GetString("myToken")
于 2012-07-25T17:54:53.937 に答える
1

DataAnnotationsパラメータ値には定数、つまり実際の文字列が必要です。

于 2012-07-25T17:07:10.880 に答える
1

定数のみを割り当てることができます。

拡張を実行してそこでkeyValuesを割り当てると、拡張機能はデータベース、リソースファイル、Webサービスなど、他の場所からフェッチできます。

于 2012-09-21T17:10:20.393 に答える
0

国際化に関するHanselmanの投稿を確認することをお勧めします。多分それは役立つかもしれません

于 2012-07-25T16:56:20.730 に答える
-1
[Display(Name = "strResourceString", ResourceType = typeof(Resourcefile.strResourceString))]
于 2012-09-21T11:29:08.580 に答える