在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应用程序命名空间的资源。认为这是问题。
答案 0 :(得分:1)
我已经得到了它的工作:
<asp:Localize runat="server" Text="<%$ Resources:PageResource1.Title %>" />
我的资源位于名称为App_LocalResources
的文件的PageName.aspx.resx
文件夹中。我的资源键名称为PageResource1.Title
。
对于全球资源(App_GlobalResource\ErrorMessages.resx
),这似乎有效:
<%$ Resources:ErrorMessages, ErrorHasOccurred %>