Asp.Net 3.5使用Web应用程序进行显式本地化

时间:2009-09-30 18:19:37

标签: asp.net localization

在asp.net 3.5应用程序上,我试图显式本地化文本。下面的例子来自MSDN

<asp:Label ID="Label2" Runat="server" Text="<%$ Resources:LocalizedText, Msg1 %>">

问题是它似乎无法找到资源类。我使用的是asp.net应用程序,而不是网站。我已经尝试为资源类指定完整的命名空间。例如:

<asp:Label ID="Label2" Runat="server" Text="<%$ Resources:MyProject.Web.Properties.Resources, Msg1 %>">

但无济于事。有什么想法吗?

忘了提...如果我像这样使用数据绑定表达式,它可以工作:

<asp:Label ID="Label2" Runat="server" Text="<% MyProject.Web.Properties.Resources.Msg1 %>">

更新

在ResourceExpressionBuilder中花了一点时间与反射器相遇:

private static IResourceProvider GetGlobalResourceProvider(string classKey)
{
    string str = "Resources." + classKey;
    CacheInternal cacheInternal = HttpRuntime.CacheInternal;
    string key = "A" + str;
    IResourceProvider provider = cacheInternal[key] as IResourceProvider;
    if (provider == null)
    {
        EnsureResourceProviderFactory();
        provider = s_resourceProviderFactory.CreateGlobalResourceProvider(classKey);
        cacheInternal.UtcInsert(key, provider);
    }
    return provider;
}

因此看起来它期待Resources.xxx的命名空间。我当前的资源文件位于WebApp&gt;属性&gt;具有Web应用程序命名空间的资源。认为这是问题。

1 个答案:

答案 0 :(得分:1)

我已经得到了它的工作:

<asp:Localize runat="server" Text="<%$ Resources:PageResource1.Title %>" />

我的资源位于名称为App_LocalResources的文件的PageName.aspx.resx文件夹中。我的资源键名称为PageResource1.Title

对于全球资源(App_GlobalResource\ErrorMessages.resx),这似乎有效:

<%$ Resources:ErrorMessages, ErrorHasOccurred %>