我正在本地化一个ASP.NET网站。通常在.aspx页面中本地化文本我只使用
<%= Resources.ResourceFile.ResourceName %>
对于asp.net控件,这不起作用。我必须使用语法
<%$ Resources:ResourceFile, ResourceName %>
但是,如果我有一个按钮并以这种方式本地化Text
属性,但在其后添加任何其他字符,则本地化会中断并显示为纯文本。
所以Text="<%$ Resources:ResourceFile, ResourceName %> »"
显示为
&lt;%$ Resources:ResourceFile,ResourceName%&gt; »
我确定这是有正当理由的,我在MSDN上找不到关于Text属性如何评估它的解释。我甚至不确定<%$
实际上做了什么。
答案 0 :(得分:1)
发生的事情是ASP.net正在调用Expression Builder。这里有效发生的是,而不是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") + "»"
。
您可以在msdn上详细了解ResourceExpressionBuilder,ExpressionBuilder,或者您真的想要了解更多信息。本地化的实现(数据库支持,因此我没有使用ResourceExpressionBuilder)on my blog(3部分)。