家里蹲博客

一个网络人的世界!

asp.net 2.0中的全球化与本地化

介绍

当每个开发者创建全球化的产品和程序时,全球化和本地化是两个重要的步骤.

全球化一个asp.net 2.0站点

语言也决定于地理位置,比如法语同时在法国和加拿大使用.但是法国使用的法语和加拿大使用的法语有很大的区别.所以我们要同时指定语言和地区.比如fr代表法语,fr-FR指的是法国的法语.

.NET FCL中的CultureInfo有两个属性,我们可以重载改类的构造函数,用来改变当前执行线程的语言.

1.UICulture:这个属性帮助运行时从资源文件加载资源字符,可以设置成无确定地区的语言,如
Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr");或
Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-CA");

2.Culture:这个属性只能为制定区域的语言

UICulture和Culture的区别是:UICulture是用来加载资源文件,Culture是用来设置日期,数字货币格式的.

有时候我们需要一个与语言区域无关的语言,他可能是变化不定的.我们可以用CultureInfo.InvariantCulture属性.

UICulture和Culture属性都可以在web.config的globalization中定义.他们也可以在页面级设置.但是我们也能动态的设置这些值.如上面代码所示.

更改语言

1.用浏览器设置.我们需要设置Culture和UICulture的值为auto且enableClientBasedCulture=true:
GLOBALIZATION

2.用户设置.我们可以提供一个选项让用户来选定或改变语言区域.

如果要使我们的程序全球化就必须遵照以下几点:
1.所有的内容必须本地化 这意味着所有的字符串和文本根据语言和区域显示.
2.每个控件的标题和内容必须根据语言和区域显示.
3.时间日期须根据语言区域格式化
4.所有发送给用户消息须根据语言和区域显示

如果要本地化整个应用程序,我们要把资源文件添加到App_GlobalResources文件夹中,如TestSiteResource.resx,TestSiteResource.zh-CN.resx
如果仅仅本地化一些特定的页面,我们将资源文件添加到App_LocalDirectory文件夹,文件命名应该如下:
MyPage.aspx.resx:这是MyPage.aspx的默认资源文件
MyPage.aspx.zh-CN.resx:当语言区域设定到中文,仅程序中的MyPage.aspx页面被本地化.

String welcome = Resources.TestSiteResources.Welcome;
这行代码,我们用到了当资源文件被编译时asp.net自动创建的Resources名字空间.linux虚拟主机这可以读取资源文件里面的内容.我们还可以用其他两个方法达到同样的目的:

1.隐式本地化 为控件指定meta标记,使asp.net从resourcekey属性中获取资源文件的值:
aspasp
为了使其工作,我们需要在/App_LocalDirectory文件夹里创建该页面的资源文件.

2.显式本地化 他能在我们拥有Global resource文件时工作 从资源文件读取的表达式如下:
spasp

3.用程序自动的获取强类型的资源文件类
lblWelcome.Text = Resources.TestSiteResources.Welcome;

整合本地化

我们要设置UICulture属性以便asp.net可以访问相应的资源文件.

如何能够在PostBack事件中改变语言区域呢?还好asp.net在Page类中提供了一个InitializeCulture()去重写.这个方法在页面的生命周期中很早的被执行,我们可以在这里设置当前线程的UICulture和Culture属性

如果想在所有的页面实现更换语言,我们可以创建一个BasePage页面,让其他页面继承.

但是InitializeCulture()事件执行的比初始化控件要早,如何获取控件的值呢?答案是用Form集合

为了本地化还需设置页面编码
globalization

定义语言阅读方向

这是必须的因为有些语言的阅读顺序是从右到左的.我们可以设置dir属性达到目的.这个标记用在或中.华夏名网代理属性值从资源文件中读取,RTL或LTR.


用数据库实现本地化

总结

1.不要依赖浏览器的设置,给出一个切换语言的链接.

2.用资源文件分离表示层的数据.如果找不到指定的资源文件,asp.net将使用默认的资源文件.

3.当使用数据库表储存数据和内容时,你需要创建单独的表储存本地化内容.

4.如果你用sn.exe创建强名称的主程序程序集,你需要用相同密钥对的私钥签名附属程序集(资源).强名称的程序集要求附属程序集也是强名称的. 
阅读更多
想对作者说点什么? 我来说一句

asp.net 全球化本地化揭秘Demo

2010年07月16日 606KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭