2011-02-16 107 views
2

我正在本地化ASP.NET网站。通常本地化的文本在.aspx页面我只是用为什么这一行的本地化行为如此?

<%= Resources.ResourceFile.ResourceName %>

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

<%$ Resources:ResourceFile, ResourceName %>

但是,如果我有一个按钮和本地化Text财产这种方式,但后添加任何其他字符,定位符,它显示为明文。

所以Text="<%$ Resources:ResourceFile, ResourceName %> &raquo;"显示为
<%$资源:的resourcefile,资源名称%> »

我敢肯定有这个有效的原因,我无法找到如何在MSDN上的解释Text属性对此进行评估。我甚至没有100%确定<%$的实际效果。

+0

尝试将单引号括起来而不是双引号。所以`文本='<%$资源:ResourceFile,ResourceName%> »'` – Bazzz 2011-02-16 16:08:50

+0

@Bazzz,这并没有工作。同样的结果。 – Brandon 2011-02-16 16:15:20

回答

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,ExpressionBuilder了解更多关于ResourceExpressionBuilder的信息,或者如果您真的想要;一个用于本地化的实现(数据库支持,因此我没有使用ResourceExpressionBuilder)onmyblog(3部分)。