代码之家  ›  专栏  ›  技术社区  ›  Brandon

这两种在aspx/ascx文件中本地化字符串的方法有什么区别?

  •  12
  • Brandon  · 技术社区  · 15 年前

    当我第一次开始本地化一个网站时,我就是这样做的:

    <%= Resources.ResourceFile.ResourceName %>
    

    它似乎工作得很好。不过,ReSharper 5.0测试版是这样做的:

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

    不管用哪种方式做都重要吗?

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

    4 回复  |  直到 15 年前
        1
  •  2
  •   Jaguar    15 年前

    嗯,您不能使用<%=%&燃气轮机;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>
    

    你可以把这个移到代码后面,但那很糟糕。

    <%$ %> “thing”可以工作,但是如果你经过它准备进入维护地狱(当然除非我们谈论的是一个3页的应用程序…)

    我个人使用 <%= %> 而且,我从来没用过 <asp:Localize /> 服务器控制,我没有任何问题。。。

        2
  •  2
  •   Pranay Rana    15 年前

    以下是我在msdn上找到的信息,这些信息可能会帮助您理解您想要的区别

    使用强类型检索全局资源

    使用Resources.ResourceFile.ResourceName to retrieve global resources using strong typing

    资源被编译到命名空间资源中,每个默认资源都成为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
    

    标题%>

    资源表达式采用以下形式,其中类是可选的,除非资源是全局的,并且需要ResourceID:

    更多信息: http://msdn.microsoft.com/en-us/library/ms227427(v=VS.100).aspx

        3
  •  1
  •   Nasser Hadjloo    15 年前

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

        4
  •  1
  •   eglasius    15 年前

    好吧,有区别,这是时间问题。

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

    • <
    • <%#在远离页/控件初始化的DataBind/期间发生。请注意,DataBind代码可能正在使用前面设置的其他属性,因此这是一个重要的区别。