当我第一次开始本地化网站时,我只是做了这样的本地化:
<%= Resources.ResourceFile.ResourceName %>
它似乎工作得非常好。但是,ReSharper 5.0 Beta就是这样的:
<asp:Localize Text="<%$ Resources: ResourceFile, ResourceName %>" runat="server">
Value
</asp:Localize>
它的完成方式是否重要?
另外,为什么ReSharper将原始文本保留在localize控件中?我认为它是存在的,以防资源文件中的值为空,它可以显示“默认”文本。情况似乎并非如此。删除它并自行关闭本地化控件是否安全?
答案 0 :(得分:2)
我在msdn上找到的以下信息可能会帮助您了解您想要的差异
使用强类型检索全局资源
Resources.ResourceFile.ResourceName使用to retrieve global resources using strong typing
资源被编译到命名空间Resources中,每个默认资源都成为Resources类的成员。例如,如果您已创建默认资源文件WebResources.resx并且该文件包含名为WelcomeText的资源,则可以在代码中引用该资源,如以下代码所示
字符串欢迎; welcome = Resources.WebResources.WelcomeText;
了解更多详情:http://msdn.microsoft.com/en-us/library/ms227982.aspx
明确的本地化
<asp:Button ID="Button1" runat="server"
Text="<%$ Resources:WebResources, Button1
标题%&gt;
资源表达式采用以下形式,其中Class是可选的,除非资源是全局资源,并且需要ResourceID:
Class值标识使用全局资源时要使用的资源文件。编译.resx文件时,基本文件名(不带扩展名)将显式用作生成的程序集的类名。如果要使用本地资源文件(与当前页面名称匹配的文件)中的资源,则不必包含类名。这是因为ASP.NET将页面类与资源类匹配。
ResourceID值是要读取的资源的标识符。在前面的示例中,按钮的Text属性是从全局资源文件WebResources.resx(或相应的本地化版本)中读取的。在该文件中,ASP.NET使用具有标识符Button1Caption的资源的值以及页面本身。要设置页面属性,可以在@ Page指令
中使用资源表达式更多相关信息:http://msdn.microsoft.com/en-us/library/ms227427(v=VS.100).aspx
答案 1 :(得分:2)
好吧,你不能使用&lt;%=%&gt; asp服务器控件上的服务器标签。
所以
<asp:Localize Text="<%= Resources.ResourceFile.ResourceName %>" runat="server">
Value
</asp:Localize>
将导致编译错误。
遗憾的是,您无法将动态数据传递到服务器控件属性,除非它是可以应用<%# %>
服务器标记的数据绑定,例如:
<asp:Repeater runat="server">
...
<asp:Localize Text="<%# Resources.ResourceFile.ResourceName %>" runat="server">
Value
</asp:Localize>
...
</asp:Repeater>
您可以随时将其移至代码隐藏,但这很糟糕。
<%$ %>
'东西'但是如果你去它准备进入维护地狱(除非我们当然是在谈论一个3页的申请......)
我个人使用<%= %>
,我从不使用re-sharper来全球化/本地化我的应用程序。
此外,我从未使用<asp:Localize />
服务器控件,我没有遇到任何问题...
答案 2 :(得分:1)
第一个创建一个单独的Rsource文件foreach页面(模块),但第二个创建一个(或afew)并输出所有的资源键。
第二种方法可以让您轻松地为您的应用程序创建新语言,因为所有字符串都聚集在一个地方,您可以将其提供给任何人进行翻译。
答案 3 :(得分:1)
afaik存在差异,这是时间问题。
我还没有确认,但我真的希望&lt;%$在页面生命周期的早期发生。