【问题标题】:Resource file not being picked up when using ASP.NET expression使用 ASP.NET 表达式时未拾取资源文件
【发布时间】:2015-06-18 08:03:37
【问题描述】:

我正在尝试在 ASP.NET Web 窗体应用程序 (.NET 4.0) 中使用资源文件。我正在使用VS2012。我在App_GlobalResources 文件夹中有以下文件:

  • Address.resx(默认语言,英语)
  • Address.ja-JP.resx(日语)

问题是当我尝试在 ASP.NET 页面(*.aspx 文件)中显示日语文本时。如果我使用以下语法,一切正常:

<%= Resources.Address.Street1 %>

但是当我尝试将其绑定到 asp:Label 控件的属性时,会显示默认文本(英文)而不是日文:

<asp:Label ID="lblStreet1" runat="server" Text='<%$ Resources:Address,Street1 %>'></asp:Label>

在会话变量中设置 BTW 文化,然后在母版页中我有这样的内容:

Thread.CurrentThread.CurrentCulture = (CultureInfo) Session["ci"];
Thread.CurrentThread.CurrentUICulture = (CultureInfo) Session["uci"];

另外,我不知道这是否相关,但我在 Visual Studio 外部生成了 Address.ja-JP.resx(使用 Notepad++),然后将文件移动到 App_GlobalResources 文件夹并将文件包含在解决方案中。

我错过了什么吗?

【问题讨论】:

    标签: c# asp.net webforms localization globalization


    【解决方案1】:

    我能够找到解决问题的方法。在后面的代码中我不得不重写InitializeCulture 方法,我做了这样的事情:

    protected override void InitializeCulture()
    {
        Thread.CurrentThread.CurrentCulture = (CultureInfo) Session["ci"];
        Thread.CurrentThread.CurrentUICulture = (CultureInfo) Session["uci"];
    
        base.InitializeCulture();
    }
    

    【讨论】:

      【解决方案2】:

      我建议您考虑在标签控件上使用 meta:resourcekey。在您的情况下,您可以使用:

      <asp:Label ID="lblStreet1" runat="server" meta:resourcekey="myStreet1Label"></asp:Label>
      

      您的 resx 文件中的资源键将如下所示:

      <data name="myStreet1Label.Text">
      <value xml:space="preserve">The street data.</value></data>
      

      【讨论】:

      • 感谢 d-unit,这可能可行,但我不想那样做。太多页面已经在使用表达式语法:&lt;%$ ... %&gt; :(
      • 在这种情况下,也许可以尝试使用 HttpContext.GetGlobalResourceObject。
      • 谢谢,我试过Text='&lt;%# GetGlobalResourceObject("Address", "Street1") %&gt;'&gt;,但它不起作用...
      • 找到了我的问题的解决方案(见我的回答)。无论如何感谢您的帮助。
      猜你喜欢
      • 1970-01-01
      • 2010-11-15
      • 1970-01-01
      • 2021-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-27
      • 2011-11-23
      相关资源
      最近更新 更多