使用 ASP.NET 表达式时未拾取资源文件

Resource file not being picked up when using ASP.NET expression

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

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

<%= Resources.Address.Street1 %>

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

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

顺便说一句,文化是在会话变量中设置的,然后在母版页中我有这样的东西:

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

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

我是不是漏掉了什么?

我建议您考虑在标签控件上使用 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>

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

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

    base.InitializeCulture();
}