2

我正在本地化一个 ASP.NET 网站。通常用于本地化 .aspx 页面中的文本,我只是使用

<%= Resources.ResourceFile.ResourceName %>

对于 asp.net 控件,这是行不通的。我必须使用语法

<%$ Resources:ResourceFile, ResourceName %>

但是,如果我有一个按钮并以Text这种方式本地化属性,但在其后添加任何其他字符,则本地化会中断并显示为纯文本。

所以Text="<%$ Resources:ResourceFile, ResourceName %> &raquo;"显示为
<%$ Resources:ResourceFile, ResourceName %> »

我确信这是有正当理由的,我只是在 MSDN 上找不到关于 Text 属性如何评估它的解释。我什至不能 100% 确定它的<%$实际作用。

4

1 回答 1

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") + "&raquo;".

您可以在 msdn 上阅读更多关于ResourceExpressionBuilder的信息,一般来说是ExpressionBuilder,或者如果您真的想阅读; 我的 博客(3 部分)上实现本地化(数据库支持,因此我没有使用 ResourceExpressionBuilder )。

于 2011-02-16T16:08:02.457 回答