ASP.NET2.0中的全球化与本地化UICulture,Culture
来源:转载 日期:2007-2-28 14:59:01 阅读:324 评论:0
 

 
  一、简介

  全球化和本地化是每一位开发者在创建全球化产品或应用程序时必须清楚的两个重要的慨念。尽管有许多文章对这个题目作过较好的解释,但是我一直没有看到一篇全面而综合地讨论关于全球化/本地化的所有重要概念的文章。本文旨在通过一个具体案例来详细分析使用ASP.NET2.0开发一个web应用程序时所涉及到的全球化问题。

  二、背景理论

  全球化是应用程序开发中某一阶段的任务,其目的是使程序能够跨多个文化地区可用而不必顾及语言和地区性差别。例如,你在开发一个小型库存管理程序,而你生活在例如英格兰这样一个以英语为主要语言的地区。现在,如果你想把你的程序卖到另一个不同国家,比方说是德国,那么你需要确保你的程序以德语显示并实现输入。

  本地化是使用一种地区特定的文化和语言来创建内容、输入和输出数据的过程。文化将会影响日期显示设置(如是mm/dd/yyyy还是dd/mm/yyyy),货币显示格式等。现在,确保我们的程序能够被本地化的过程称为国际化或全球化。用更简单的术语来说,全球化能够被定义为一组活动,通过这一活动,可以确保我们的程序能够运行在使用不同语言和文化的地区。

  因此,全球化是与内在代码的改变相关联的以便支持这样的改变,如使用资源文件等;而本地化是使用一种特定的文化和地区性信息的过程,以便该程序能够使用本地的语言和文化。这意味着要把字符串翻译成一个特定的本地的语言;为此,要把语言特定的字符串放到资源文件中。一般地,应该从主构建和代码开发阶段就开始考虑全球化问题,而本地化通常在以后才实现。

  三、 文化和本地化

  首先,让我先解释一下文化和本地化。

  一般地,语言也依赖于地理位置。例如,法语既是法国人的语言也是加拿大人的语言(除此之外,还有其它许多国家也说法语)。但是从语言角度来讲,加拿大法语不同于法国法语。同样,在美国英语和英国英语之间也存在一定的区别。因此,语言常常需要与说该语言的特定地区相联系,并且这是通过使用本地化(语言+地理位置)实现的。

  例如,fr是法语语言的代码,而fr-FR意味着法国使用的法语。因此,fr仅指定了这种语言,而fr-FR才实现了本地化。同样,fr-CA定义另一个代表加拿大法语和文化的本地化。如果我们仅仅使用fr,那么它仅代表是一种中立性质的文化(也即是,地区中立)。

  那么,我们如何定义或改变当前文化呢?

  在.NET FCL(框架类库)的CultureInfo类中存在两个属性,我们可以通过重载该类的构造器来对它们进行设置,然后使用它来改变当前执行线程的文化:

  1.UICulture:取得/设置当前执行线程的用户接口。这个属性帮助运行时刻从一个特定的资源文件(我们将在后面看到)中加载资源字符串。这个属性能够使用中立文化,也可以是本地化。例如:

Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr");

  或:

Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-CA");

  2.Culture:取得/设置地区特定的文化和货币、日期等的格式。这个属性需要语言也需要位置(本地化)。

Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-A"); //正确,因为我们已经给出了本地化
Thread.CurrentThread.CurrentCulture = new CultureInfo("fr"); //错误,无法工作

  有时,我们需要一种不属于任何语言或本地化的文化,对于任何地区/语言都不变。为此,我们可以使用CultureInfo.InvariantCulture属性。这一属性在内部系统处理期间使用;此时,要求是文化独立的,或者存储不需要被直接显示给终端用户的数据。

  UICulture和Culture属性都能够在Web.Config文件的<GLOBALIZATION>属性中进行定义。另外,它们还能够在页面级上被指定。但是,我们不想硬编码这些值而是喜欢动态地设置它们。由上面可知,我们还能够使用Thread.CurrentThread.CurrentCulture和Thread.CurrentThread.CurrentUICulture属性以编码方式得到/设置这些值。因此,我们将在本应用程序中使用这些属性。

ASP.NET2.0中的全球化与本地化UICulture,Culture相关推荐

  1. ASP.NET2.0中的ClientScriptManager 类用法—如何添加客户端事件!

    在ASP.NET2.0中,ClientScriptManager 类通过键 String 和 Type 唯一地标识脚本.具有相同的键和类型的脚本被视为重复脚本.因此,我们可以使用脚本类型来避免混淆可能 ...

  2. 深度解析ASP.NET2.0中的Callback机制

    callback的一般使用方法还算简单,直接参照msdn的帮助和范例就足够了.但是想要真正用好.用精,或者想开发一些基于callback机制的WEB组件,那么,就要先深入了解callback的实现机制 ...

  3. 在ASP.Net2.0中使用UrlRewritingNet实现链接重写(转)

    在ASP.Net2.0中使用UrlRewritingNet实现链接重写 很多时候我们需要链接转向(Url Rewriting),例如二级域名转向.文章访问链接等场合. 让我们看两个例子: 1 你现在看 ...

  4. 在ASP.Net2.0中使用UrlRewritingNet实现链接重写

    在ASP.Net2.0中使用UrlRewritingNet实现链接重写 很多时候我们需要链接转向(Url Rewriting),例如二级域名转向.文章访问链接等场合. 让我们看两个例子: 1 你现在看 ...

  5. ASP.NET2.0中的ClientScriptManager 类用法—如何添加客户端事件

    在ASP.NET2.0中,ClientScriptManager 类通过键 String 和 Type 唯一地标识脚本.具有相同的键和类型的脚本被视为重复脚本.因此,我们可以使用脚本类型来避免混淆可能 ...

  6. ASP.NET2.0中themes、Skins轻松实现网站换肤!

    ASP.NET2.0中themes.Skins轻松实现网站换肤! 可能有些朋友还不是很清楚themes.skins.下面先介绍下themes.skins.. 一.简介: 一看Themes.Skins这 ...

  7. [导入]ASP.NET2.0中Tabs的简单实现

    摘要: ASP.NET2.0中Tabs的简单实现  阅读全文 [新闻]"Wintel"联盟已名存实亡 文章来源:http://www.cnblogs.com/gyche/archi ...

  8. asp.net2.0中的ValidationGroup (转)

    asp.net2.0中的ValidationGroup 在asp.net 1.1中,对于验证类控件,在使用时,遇到有的不需要验证的控件时,是十分麻烦的,就是说不可能有选择验证某些控件,而在asp.ne ...

  9. 在asp.net2.0中使用串行化对象实现自定义配置

    在一次升级一个entlib1.0到entlib的高版本程序时,碰到entlib的一个通过XmlSerializer方式实现的自定义配置.而在entlib的高版本中这样的配置不再被支持.可是又不希望修改 ...

最新文章

  1. Hello world!
  2. 2019web前端趋势_2019年最值得关注的Web开发趋势
  3. TCP/IP详解--第三章
  4. 来宾可以删除服务器文件怎么设置密码,服务器来宾用用户设置密码
  5. android开发系列之多线程
  6. 11 个新项目入选 CNCF Sandbox | 云原生生态周报 Vol. 56
  7. DOS介绍以及常用命令
  8. 有关于idea快捷键冲突的问题
  9. 尼尔机器人技能快捷键_《尼尔机械纪元》连招操作技巧
  10. 好看的导航网站源码-简约自适应网站网址导航系统
  11. 记录一次java.lang.ClassCastException的java类型转换异常解决方案-附最终解决方案
  12. 使用Mybatis如何对Mysql进行分页功能?
  13. android操作XML的几种方式(转)
  14. tablayout 增加数字小标_Android中TabLayout添加小红点的示例代码
  15. 小米MAX Root,第三方REC,XP框架刷入
  16. python网络编程 交互式游戏设计——吹牛(RemoteBet)(无封帧)
  17. 流体力学与流体计算力学基础(一)
  18. 2008新版眼保健操图解
  19. 文档数据防泄密需求分析
  20. xss漏洞学习心得(泪目)

热门文章

  1. Html与Css关联到一起
  2. jenkins配置从节点
  3. layout折叠后显示标题
  4. Intellij IDEA 快捷键整理
  5. 操作文件方法简单总结(File,Directory,StreamReader,StreamWrite ) - Zery-zhang
  6. 《敏捷开发绩效管理》扩展阅读(敏捷开发绩效管理,敏捷团队绩效管理)
  7. We Are The World -- 欧美群星 迈克尔.杰克逊
  8. [转载]内存分配 知识,全局,局部,静态变量
  9. java的构造函数格式_java – 自定义MapReduce输入格式 – 找不到构造函数
  10. python面向对象编程138讲_Python---面向对象编程-1