我正在创建一个包含多种语言的Web应用程序。 我已经设置了这样的文化
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage);
我有几个语言文件,如“en.resx”和“de.resx”。 我可以从他们背后的代码中读取它们,就像这样
var test = GetGlobalResourceObject(Thread.CurrentThread.CurrentUICulture.ToString(), "aboutUsLnk");
但是从标记页面怎么样。 我一直在网上搜索,大多数网页建议这样的东西
<asp:Literal Text='<%$ Resources:Resource, aboutUsLnk %>' runat="server" />
如果我有一个名为Resource的.resx文件,那就有效,但我不是我想要的。我错过了什么?
答案 0 :(得分:3)
如果我有一个名为Resource的.resx文件但是那不是我想要的,那就有效。我错过了什么?
您可能正在寻找本地资源和 meta:resourcekey 属性。
每页定义本地(您为它们定义与您的页面完全相同的名称),您可以使用它们来存储特定于一个页面的资源。您可以通过添加ASP.NET特定文件夹(App_LocalResources)创建它们,然后在其中为每个页面添加本地资源:
App_LocalResources/{pagename}.resx
然后从页面标记(AboutUs.aspx)中调用资源文件(AboutUs.resx,AboutUs.fr-BE.resx,...)中的资源对象将是这样的:
<asp:Literal Text='About Us' meta:resourcekey="aboutUsLnk" runat="server" />
您提到的全球资源是在整个网站上定义的(通常您在此处存储资源,如&#34;编辑&#34;,&#34;保存&#34;等),并且通常在您展示时调用。
请阅读此处了解更多详情:http://msdn.microsoft.com/en-us/magazine/cc163566.aspx
修改强>
对不起,对于误解,你可能会问如何调用你的全球资源,这些资源可以区分每种文化。您可以使用GetGlobalResourceObject
在标记代码中执行此操作,几乎与在后面的代码中执行的操作相同。
您可以编写服务器控件之外的任何地方:
<%= GetGlobalResourceObject(System.Threading.Thread.CurrentThread.CurrentUICulture.ToString(), "aboutUsLnk")%>
要在服务器控件属性中调用GetGlobalResourceObject
,您不能使用<%= %>
,但可以将服务器控件包装在其周围(在允许此操作的控件中,例如Label
) :
<asp:Label ID="Label1" runat="server"><%= GetGlobalResourceObject(System.Threading.Thread.CurrentThread.CurrentUICulture.ToString(), "aboutUsLnk")%></asp:Label>
或者,您可以使用绑定语法:
<asp:Label ID="Label1" runat="server" Text='<%# GetGlobalResourceObject(System.Threading.Thread.CurrentThread.CurrentUICulture.ToString(), "aboutUsLnk")%>'></asp:Label>
请注意,使用后者时,您需要绑定控件:
protected void Page_Load(object sender, EventArgs e)
{
Label1.DataBind();
}
编辑2
您可以将上层代码包装在一些帮助器方法中,以提高代码可读性。在后面的代码中声明它:
protected string GetResource(string resourceName)
{
return GetGlobalResourceObject(System.Threading.Thread.CurrentThread.CurrentUICulture.ToString(), resourceName).ToString();
}
在标记中你可以像以前一样称它为:
<asp:Label ID="Label1" runat="server" Text='<%# GetResource("aboutUsLnk")%>'></asp:Label>
<asp:Label ID="Label2" runat="server"><%= GetResource("aboutUsLnk")%></asp:Label>