12

当我第一次开始本地化网站时,我只是这样进行本地化:

<%= Resources.ResourceFile.ResourceName %>

它似乎工作得很好。但是,ReSharper 5.0 Beta 是这样做的:

<asp:Localize Text="<%$ Resources: ResourceFile, ResourceName %>" runat="server">
  Value
</asp:Localize>

以哪种方式完成重要吗?

另外,为什么 ReSharper 将原始文本保留在本地化控件中?我认为如果资源文件中的值是空的,它就在那里,它可以显示“默认”文本。情况似乎并非如此。将其删除并自行关闭本地化控件是否安全?

4

4 回答 4

2

以下我在 msdn 上找到的信息可能会帮助您了解您想要的差异

使用强类型检索全局资源

使用 Resources.ResourceFile.ResourceNameto retrieve global resources using strong typing

资源被编译到命名空间 Resources 中,每个默认资源都成为 Resources 类的成员。例如,如果您创建了默认资源文件 WebResources.resx,并且该文件包含名为 WelcomeText 的资源,您可以在代码中引用该资源,如下代码所示

字符串欢迎;欢迎 = Resources.WebResources.WelcomeText;

更多细节:http: //msdn.microsoft.com/en-us/library/ms227982.aspx

显式本地化

<asp:Button ID="Button1" runat="server" 
    Text="<%$ Resources:WebResources, Button1

标题%>

资源表达式采用以下形式,其中 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

于 2010-05-26T05:48:13.183 回答
2

好吧,您不能在 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 />服务器控制,我没有任何问题......

于 2010-05-26T10:49:13.443 回答
1

afaik 是有区别的,这是时间问题。

我还没有确认,但我真的希望 <%$ 在页面生命周期的早期发生。

  • <%= 它几乎是一个 <% Response.Write("Some Text") %>,这就是为什么你不能在 aspx 的很多地方使用它的原因,即它需要在页面被渲染时完成
  • <%# 发生在 DataBind / 远离页面/控件的初始化期间。请注意,DataBind 代码可能正在使用之前设置的其他属性,因此这是一个重要的区别。
  • 鉴于上述情况并且您可以在控件属性中使用 <%$,我真的希望它会在页面/控件生命周期的早期发生。
于 2010-05-26T17:23:52.920 回答
1

第一个为每个页面(模块)创建一个单独的 Rsource 文件,但第二个创建一个(或几个)并将所有资源键放在上面。

第二种方法让您可以轻松地为您的应用程序创建新语言,因为所有字符串都集中在一个地方,您可以将其提供给任何人进行翻译。

于 2010-05-23T04:32:54.300 回答