ASP.NET2.0的全球化与本地化之全球化

在我的网站中,在创建资源文件并加入一些本地化数据后,我首先开始使用显式本地化来设置控件(例如,在我的网站中的标签)的文本,以便它们可以从资源文件中得到它们的值。既然存在四种语言;所以,除一个完全可依赖的资源文件之外(没有本地化命名),我创建了四个资源文件。

  一、 加入全球化信息

  在我的网站中,在创建资源文件并加入一些本地化数据后,我首先开始使用显式本地化来设置控件(例如,在我的网站中的标签)的文本,以便它们可以从资源文件中得到它们的值。既然存在四种语言;所以,除一个完全可依赖的资源文件之外(没有本地化命名),我创建了四个资源文件。

  注意,这些资源文件都以本地化标记作为它们的中间名称,因此,我需要把UICulture设置为与该本地化相同的名字以便ASP.NET存取这些资源文件。

  但是,问题是:我该怎样在PostBack事件中动态地改变文化呢?幸好,ASP.NET在Page类中提供了一种可重载的方法: InitializeCulture()。这个方法在页面生命周期(在生成任何控件之前)中执行得很早,并且在此,我们能够设置当前线程的UICulture和Culture。

  由于这个方法位于Page类中,并且我不想针对每一个web页面都重复相同的代码,所以我创建了一个BasePage类,我的应用程序中的所有的aspx页面都派生自这个BasePage类。但是现在,我又面临另一个问题。下面,让我进行解释:

  回到UI设计:我使用了一个MasterPage和一个Header用户控件(在一个ContentPlaceHolder内)。我把一个缺省的页面与该MasterPage相关联。整个站点必须动态地实现本地化。因此,在顶部,有一个下拉框,用户可以从中选择一种语言/文化。在BasePage的InitilializeCulture方法中,我必须取得用户从下拉框选择的项的值;但是,因为它还没有被初始化,所以,我还不能存取任何控件的值。答案是:使用表单集合(从响应对象内)。下面是实现代码:

///<SUMMARY>
///从通用的页面头部的下拉框列表中选择的语言名。
///我们需要使用这个名字,因为我们还没有任何其它控件属性-现在控件本身还没有被初始化。
///因此,我们使用"嵌套的"下拉框列表名,从中我们可以从Request.Form[]集合中得到该下拉框列表的值。
/// </SUMMARY>
public const string LanguageDropDownID = "ctl00$cphHeader$Header1$ddlLanguage";
/// <SUMMARY>
///在一个回寄表单中的PostBack事件目标域的名字。你可以使用
///它来确定是哪个控件触发了PostBack:
/// Request.Form[PostBackEventTarget] .
/// </SUMMARY>
public const string PostBackEventTarget = "__EVENTTARGET";

相关消息:
1234下一页

责任编辑:叶江

关键字:.NET 微软

专家博文

白皮书