使用aspx页面中的Asp.Net WebForms上的"属性资源"本地化文本

Lea*_*des 5 c# asp.net resources localization webforms

我正在尝试翻译我的aspx页面中的按钮文本.我正在使用asp.net webforms,但我还没有实现它.在MVC中,我可以完全按照自己的意愿行事,但在webforms中,这对我来说是一种痛苦.

这是我的资源

我的资源

我试图在aspx中使用它,但没有成功.我可以使用此代码在代码后面执行此操作

 protected void Page_Load(object sender, EventArgs e)
    {
        Button1.Text = Properties.Resources.BUTTON_SEND;
    }
Run Code Online (Sandbox Code Playgroud)

但我真的想直接在页面上做

 <asp:Button ID="Button1" runat="server" Text="HERE_COMES_THE_LOCALIZABLE_TEXT" />
Run Code Online (Sandbox Code Playgroud)

有谁可以帮助我吗?

Hen*_*ski 8

这就是我在Visual Studio 2013,2015和2017上的表现:

  1. 对于全局资源,请右键单击Project并选择Add > Add ASP.NET Folder > App_GlobalResources.
  2. 对于本地资源,请右键单击要在其中使用资源的文件所在的文件夹,然后选择Add > Add ASP.NET Folder > App_LocalResources.

    对于标签和错误消息,我更喜欢使用LocalResources.这种做法使项目更有条理,更容易修改.这是一个更多细节的链接.

  3. 创建资源文件并将其命名如下:

    创建

    它可以创建多达App_LocalResources文件夹,因为你需要,但同样,App_LocalResources文件夹,将放置资源文件(.resx),必须在相同的文件夹.aspx,.Master.ascx文件.

    Frontend.Master.resx用于标签和消息,默认语言为
    Frontend.Master.pt-br .resx用于巴西葡萄牙语标签和消息.

    如果用户将浏览器的语言更改为pt-BR,则页面使用pt-br.resx.

  4. 创建资源项.Name = Key,Value =显示文本

    编辑

  5. 使用本地或全局资源文件:

    <head>
         <title><%= GetGlobalResourceObject("Labels", "HelloWorld") %></title>
    </head>
    <body>
        <button type="button">
            <span><%= GetLocalResourceObject("Header_NavButton_Sr") %></span>
            <asp:Literal runat="server" Text="<%$ resources:Header_NavButton_Sr %>"></asp:Literal>
        </button>
        <a href="index.html"><%= GetLocalResourceObject("Header_TextLogo") %></a>
        <asp:TextBox ID="tb1" runat="server" Text="<%$ resources:Navbar_Home %>"></asp:TextBox>
    </body>
    
    Run Code Online (Sandbox Code Playgroud)

GlobalResources文件生成一个.designer.cs文件.如果资源文件的名称为'Labels.pt-br.resx',则此文件在全局namespace调用中生成名为"Labels"的静态类Resources.对此负责的是GlobalResourceProxyGenerator在资源文件属性中定义的"自定义工具" ,您可以访问全局资源编写Resources.Labels.ResourceKey.

要使LocalResources文件像GlobalResources一样进行静态访问,您可以执行以下操作:

  1. 选择本地资源文件
  2. 按F4或右键单击并选择"属性"
  3. Custom Tool类型'PublicResXFileCodeGenerator'上
  4. Build Action选择Embedded Resource
  5. 在此之后,重建您的应用程序或网站.现在您可以看到VisualStudio生成一个.designer.cs嵌套了资源文件的文件.

如何使用它?

按照我在本回答中创建的结构,我们在MasterPages文件夹中有一个LocalResource,生成名称空间WebFormsProject2.MasterPages.App_LocalResources.如果打开'.designer.cs',在本例中Frontend.Master.designer.cs,在另一个文本编辑器上,您将看到它生成一个Frontend_Master在命名空间上命名的类,WebFormsProject2.MasterPages.App_LocalResources以及一些与您在资源文件中创建的资源键同名的静态属性.现在您只需要创建对此命名空间的引用并访问属性,例如Frontend_Master.Header_TextLogo.

例:

<%@ Import Namespace="WebFormsProject2.MasterPages.App_LocalResources" %>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">

    <title><%= Frontend_Master.Header_TextLogo %></title>

</head>
<body>...</body>
Run Code Online (Sandbox Code Playgroud)