2

ASP.NETWebサイトをローカライズしています。通常、.aspxページのテキストをローカライズするために使用します

<%= Resources.ResourceFile.ResourceName %>

asp.netコントロールの場合、これは機能しません。構文を使用する必要があります

<%$ Resources:ResourceFile, ResourceName %>

ただし、ボタンがあり、Textその方法でプロパティをローカライズしたが、その後に文字を追加すると、ローカリゼーションが中断され、プレーンテキストとして表示されます。

したがって、 <%$ Resources:ResourceFile、ResourceName%>»Text="<%$ Resources:ResourceFile, ResourceName %> &raquo;"として表示されます

これには正当な理由があると確信しています。Textプロパティがこれをどのように評価するかについての説明がMSDNで見つかりません。私は<%$実際に何をしているのか100%確信さえしていません。

4

1 に答える 1

1

何が起こっているのかというと、ASP.netがExpressionBuilderを呼び出しているということです。ここで効果的に行われるのは、ASP.netコンパイラが以下を変換するのではなく、次のことです。

<asp:AControlWithATextProperty runat="server" Text="Some Text">

に:

AControlWithATextProperty ctl1 = new AControlWithATextProperty();
ctl1.Text = "Some Text";

ファイル内のマークアップをコードビハインドと組み合わせ.aspxたファイルに変換する.csと、実際には次のようなことが行われます。

<asp:AControlWithATextProperty runat="server" Text="<%$ Resources:ResourceFile, ResourceName %>">

になる:

AControlWithATextProperty ctl1 = new AControlWithATextProperty();
ctl1.Text = ResourceExpressionBuilder.EvaluateExpression("ResourceFile, Resourcename");

<%$ %>asp.netコンパイラは、タグのコンテンツをマークアップからのプロパティ内のそれ以上のテキストと連結することを処理できないように思われます。バグ、または仕様によるものです。つまり、で終わることはありませんctl1.Text = ResourceExpressionBuilder.EvaluateExpression("ResourceFile, Resourcename") + "&raquo;"

ResourceExpressionBuilderの詳細については、msdn、ExpressionBuilder全般、または本当に必要な場合に読むことができます。私のブログ(3つの部分) のローカリゼーション用の実装(データベースに裏打ちされているため、ResourceExpressionBuilderを使用しなかったという事実)。

于 2011-02-16T16:08:02.457 に答える