如果你想添加加拿大法语资源,那么,你需要创建另一个资源文件"TestSiteResources.fr-CA.resx"。这个名字的中间部分定义了本地化,并且它应该与通过UICulture属性指定的相同。
3.这些文件将被保存在ASP.NET 2.0的App_GlobalResources文件夹下。
【提示】如果你仅想在某些页面上显示本地化字符串,那么,通过把资源文件放到App_LocalDirectory文件夹下,你可以在整个应用程序中限制本地化行为。这样将使得本地化成为页面特定的,而不是全应用程序范围内的。这些命名应该如下所示(假定你仅想本地化一个名为MyPage.aspx的页面):
MyPage.aspx.resx:这是MyPage.aspx的缺省的资源文件。
MyPage.aspx.fr-FR.resx:当文化改变为French时,将使用它,但是仅仅应用程序中的MyPage.aspx被本地化。
所有上面的.resx文件将被编译到运行时刻程序集中。这些程序集被称作"小程序集",并且为.resx文件提供了强类型包装器。因此,我们不需要担心在ASP.NET 2.0中由我们自己来创建资源程序集的问题。在你发行你的网站后,这些程序集被放在/bin文件夹下的单独的文件夹中(名字为locale):
对于非ASP.NET应用程序,我们需要使用两个工具:
1.资源文件生成器(resgen.exe);
2.程序集链接器(al.exe)。
在MSDN中存在大量有关如何使用这些工具的详细信息。有兴趣的读者可以找来看看。
现在,既然我们已经针对不同文化和语言创建了资源文件,那么接下来,当用户动态地改变文化时,我们需要一种方法来在运行时刻加载它们。幸好实现这一点在ASP.NET 2.0中相当容易。请见下面的代码:
String welcome = Resources.TestSiteResources.Welcome; |
在这行代码中,我们使用了Resources命名空间,它是由ASP.NET自动创建的,这时它把资源文件编译成"小"程序集并且我们使用与我们创建的资源文件名相同的TestSiteResources类。然后,我们存取Welcome属性,它将基于当前文化从资源文件中提供实际的文本。如果我们想得到标签控件lblWelcome的文本,那么,我们可以使用ASP.NET 2.0中提供的两个方法来进行相同的设置:
1.隐式本地化:在此,我们指定在控件定义中的新的元标签并且让ASP.NET基于resourcekey属性从资源文件中取得该值:
<asp:Label id=lblWelcome meta:resourcekey="lblWelcome" Text ="Welcome" runat=" server "></asp:Label> |
为了使这能够工作,我们需要把页面特定的资源文件放到/App_LocalDirectory文件夹下。隐式本地化有助于缩小全局资源文件的大小并且有助于改进全局资源管理。当你有大部分页面特定的内容时,你可以使用这种方法。
你不需要手工地做任何事情来设置这些隐式本地化属性。只要在设计方式下打开你的web页面,然后转到"Tools->Generate Local Resources"。这将为你的页面自动地创建一个资源文件。在Visual Studio 2005资源文件编辑器中,你仅需要针对每一个控件设置不同的域值(Control.Property)。
2.显式本地化:当我们拥有全局资源文件时使用这一技术。在此,我们使用表达式来从资源文件中设置值,如下所示:
<asp:Label id=lblWelcome Text ="<%$ Resources:TestSiteResources, Welcome %>" runat=" server "> </asp:Label> |
我们能够使用VS IDE实现这种设置。选择标签控件,转到其属性窗口,选择"Expressions->Text"。然后,从下拉框中选择"Resources"并输入类名(在这个示例中是,TestSiteResources)和Resource键(Banner)。这是本地化一个页面中的UI控件的推荐方式。
3.以编程方式访问强类型化资源类,如下所示:
lblWelcome.Text = Resources.TestSiteResources.Welcome; |
这种方法可以工作,但是它需要针对页面中的每一个控件进行编码。因此,你可以对所有的控件使用第二种方法,而且使用这个方法来存取相应于其它内容的资源字符串(如果需要的话)。还应注意,象Calendar控件这样的控件都实现了内置的本地化功能。一旦当前线程的UICulture和Culture发生改变,它就会自动地显示本地化内容,这一切都归功于ASP.NET!
查看本文来源