进入旧版 | 服务项目 | 成功案例 | 联系方式 | 过客留言 | 友情链接
   
设为首页
加入收藏
联系我们
网站首页 | 新闻资讯 | 操作系统 | 办公软件 | 网络软件 | 工具软件 | 媒体动画 | 网页制作 | 网站开发 | 程序开发 | 平面设计
Photoshop视频教程 | Word入门 | Flash入门 | JScript | VBScript | ASP | PHP | ADO | 网页特效 | 3DS MAX6.0命令 | 系统进程
您当前的位置:GOODSGY电脑学习网 -> 网站开发 -> ASP -> 文章内容  
ASP.NET 2.0的全球化与本地化之全球化(1)

     一、 加入全球化信息
  
    在我的网站中,在创建资源文件并加入一些本地化数据后,我首先开始使用显式本地化来设置控件(例如,在我的网站中的标签)的文本,以便它们可以从资源文件中得到它们的值。既然存在四种语言;所以,除一个完全可依赖的资源文件之外(没有本地化命名),我创建了四个资源文件。
  
  
  
    注意,这些资源文件都以本地化标记作为它们的中间名称,因此,我需要把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";
  
    请注意,在此,我是如何使用"parentControl:ChildControl"方法从表单集合中存取控件的。通过使用这一约定,你可以存取任何ASP.NET生成的嵌套控件。借助于表单集合中选择的值,我可以通过一个switch case语句来进行文化设置:
  
  /// <SUMMARY>
  ///重载InitializeCulture方法来设置在当前线程中用户选择的选项
  ///。注意,这个方法在Page生命周期的早期调用
  ///,并且目前我们不存在任何控件
  ///,因此必须使用Form集合.
  /// </SUMMARY>
  protected override void InitializeCulture()
  {
   ///<remarks><REMARKS>
   ///检查是否PostBack发生.不能使用在此方法中使用IsPostBack
   ///,因为这个属性还没有设置。
   ///</remarks>
   if (Request[PostBackEventTarget] != null) {
    string controlID = Request[PostBackEventTarget];
    if (controlID.Equals(LanguageDropDownID)) {
     string selectedValue = Request.Form[Request[PostBackEventTarget]].ToString();
     switch (selectedValue)
     {
      case "0": SetCulture("hi-IN", "hi-IN");
       break;
      case "1": SetCulture("en-US", "en-US");
       break;
      case "2": SetCulture("en-GB", "en-GB");
       break;
      case "3": SetCulture("fr-FR", "fr-FR");
       break;
      default: break;
     }
    }
   }
   ///<remarks>
   ///从会话中取得文件,如果控制给导航到同一程序中的一个新页面。
   ///</remarks>
   if (Session["MyUICulture"] != null && Session["MyCulture"] != null)
   {
    Thread.CurrentThread.CurrentUICulture = (CultureInfo)Session["MyUICulture"];
    Thread.CurrentThread.CurrentCulture = (CultureInfo)Session["MyCulture"];
   }
   base.InitializeCulture();
  }
  /// <Summary>
  ///使用参数设置当前的UICulture和CurrentCulture
  /// </Summary>
  /// <PARAM name="name"></PARAM>
  /// <PARAM name="locale"></PARAM>
  protected void SetCulture(string name, string locale) {
   Thread.CurrentThread.CurrentUICulture = new CultureInfo(name);
   Thread.CurrentThread.CurrentCulture = new CultureInfo(locale);
   ///<remarks>
   ///由用户把当前线程的文化集保存在会话中
   ///,以便它能够在当前应用程序中跨页面应用。
   ///</remarks>
   Session["MyUICulture"] = Thread.CurrentThread.CurrentUICulture;
   Session["MyCulture"] = Thread.CurrentThread.CurrentCulture;
  }
  
    因此,用户在他/她选择的语言中会看到此内容。我们需要把该文件选择保存到一个会话或一个Cookie变量中,因为如果用户移动到同一应用程序中的其它一些页面,那么,当新的页面类一开始被实例化时,该线程的文化信息将会丢失(HTTP是无状态的!)。注意,在用户的会话到期时,如果你不想丢失当前线程的文化信息,那么你可以使用Cookies。
  
    一旦我们从web应用程序中提取了所有的内容并且基于用户选择和使用Resources.TestWebSite.XXXPropertyName设置好了Culture和UICulture,那么,我们就已经为我们的全球化框架作好了准备。现在,剩下的唯一事情是把资源特定的数据添加到相应的资源文件中。针对每一种文件类型,我们需要有一个单独的(和适当命名的)资源文件。这个过程称为本地化。在我的web.config文件中,我使用了下列属性:
  
  <globalization responseEncoding"=utf-8" requestEncoding="utf-8" fileEncoding="utf-8" />
  
    注意,这里使用了编码属性-utf-8(8位Unicode转换格式),因为它是可变长度字符编码;并且,除了它是ASCII兼容的之外,还能够代表例如Greek,Arabic等语言。有关UTF-8编码的更多信息,请参考下面这个链接:
  
    http://en.wikipedia.org/wiki/UTF-8
  
    另外,特别值得注意的是,尽管我们能够在发布服务器上拥有原始XML形式的资源文件(这样,用户可以方便地编辑它们而不必重新编译整个站点),但是,如果我们对资源文件作出任何修改的话,应用程序将重新开始运行。这有可能妨碍此发布的应用程序的性能。
  
  
    做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。
www.goodsgy.com

在百度中搜索:ASP.NET 2.0的全球化与本地化之全球化(1)
在Google中搜索:ASP.NET 2.0的全球化与本地化之全球化(1)
在Yahoo中搜索:ASP.NET 2.0的全球化与本地化之全球化(1)

收藏到网摘:新浪VIVI 365key 我摘 POCO网摘 博采中心 YouNote 和讯网摘 天天收藏
[] [返回上一页] [打 印] [收 藏]

 相关文章    最新文章
· [图文] Flash制作鼠标感应Tween类动画效果..
· 初学ASP编程易犯的一个错误要注意
· ASP实现SQL语句日期格式的加减运算
· [组图] Flash实例:可爱的小青蛙闹钟
· ASP程序中输出Excel文件实例一则
· [组图] Flash也能制作特色小图标
· IIS下ASP程序运行故障的解决
· [组图] Flash实例教程:卡通MM眨眼睛动画
· PPT文稿的位置移动后,Flash动画为什么不..
· [图文] Flash基础:了解动画基础知识
 
· 初学ASP编程易犯的一个错误要注意
· ASP实现SQL语句日期格式的加减运算
· ASP程序中输出Excel文件实例一则
· ASP实现IE地址栏参数的判断
· ASP技巧:判断远程图片是否存在
· ASP去掉字符串头尾连续回车和空格的Funct..
· 深入认识学习ASP应用Cookies的技巧
· ASP实现邮件发送普通附件和嵌入附件
· 在ASP.NET中把图片保存到SQL SERVER数据库..
· 巧用枚举CommandBehavior关闭SqlDataRead..

∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论…]
站内搜索

精彩图文
  网站导航  
操作系统 办公软件 网络软件
Vista Windows2003 WindowsXP Windows2000/NT Windows9X/ME Linux 其他 Word Excel Powerpoint Outlook 金山系列 其他 网页浏览 上传下载 联络聊天 邮件工具 服务器软件 网络辅助
工具软件 媒体动画 网页制作
系统工具 媒体工具 压缩工具 图文处理 文件管理 其他 3DMAX Authorware Director Maya 视频处理 其他 Flash Dreamweaver FireWorks FrontPage LiveMotion Golive HTML/CSS 其它
网站开发 平面设计 程序设计
ASP JSP PHP CGI JavaScript VBScript XML/SOAP Web服务器 Photoshop PhotoImpact CorelDraw Illustrator Freehand 设计欣赏 其他 VB VC .NET C/C++ DELPHI JAVA

冀ICP备05019428号
Copyright © 2004-2008 电脑学习网 Inc.All rights reserved.
TEL:13832340607
QQ:39873155
E_Mail:goodsgy(#)hotmail.com   (把(#)替换成@)
MSN:goodsgy(#)hotmail.com   (把(#)替换成@)