• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Asp.net中多语言的实现

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

/Files/geniushuai/MultiLanguage.rar

首先可以参考一下(有比较详细的归纳):

http://www.cnblogs.com/aierong/archive/2008/11/25/culture.html

这里我只说我的应用。

了解一个名词:表达式语法
表达式语法格式:<%$ ... %>
它是ASP.NET2.0新增了一种声明性表达式语法,可在分析页之前将值替换到页中.
ASP.NET表达式是基于运行时计算的信息设置控件属性的一种声明性方式.
ASP.NET表达式主要应用在:连接字符串,应用程序设置,资源文件等地方.

ASP.NET 表达式的基本语法如下:
<%$ expressionPrefix: expressionValue %>

下面演示表达式语法在连接字符串和应用程序设置的应用:

a.表达式语法在连接字符串的应用
将存储在Web.config文件中的连接字符串的值设置为控件的连接字符串属性
<asp:SqlDataSource ID="SqlDataSource1" Runat="server"
    SelectCommand="SELECT * FROM Employees"
    ConnectionString="<%$ ConnectionStrings:NorthwindCon %>">
</asp:SqlDataSource>

<configuration>
  <connectionStrings>
    <add name="NorthwindCon"
      connectionString="Data Source=yanfa0;Integrated Security=SSPI;Initial Ctalog=Northwind;"
      providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>


b.表达式语法在应用程序设置的应用
使用表达式来引用在Web.config配置文件中定义的应用程序设置
<asp:Label ID="Label1" runat="server" Text="<%$ AppSettings:Txt %>"></asp:Label>

<appSettings>
 <add key="Txt" value="Abc"/>
</appSettings>

其实表达式语法还有一个重要的应用,就是在资源文件中的使用,而资源文件正是我实现本地化的基础.

 

区域性的格式设置
区域性名称和标识符名称遵循RFC 1766标准,具体请查看msdn
请看下图,抓取的部分区域性图片:

区域性通常分为三个类型:固定区域性、非特定区域性和特定区域性。
a.固定区域性不区分区域性。可以使用空字符串("")或者按区域性标识符0x007F来指定固定区域性,它与英语语言关联,但不与任何国家/地区关联。
b.非特定区域性是与某种语言关联但不与国家/地区关联的区域性。
c.特定区域性是与某种语言和某个国家/地区关联的区域性。
例如:"fr"(法语)是非特定区域性,而"fr-FR"(法语(法国))是特定区域性
特别提示:"zh-CHS"(简体中文)和"zh-CHT"(繁体中文)是非特定区域性。

区域性是有层次结构的,即特定区域性的父级是非特定区域性,而非特定区域性的父级是InvariantCulture

利用ASP.NET2.0可轻松地逐页更改区域性设置
只需将UICulture和Culture(区域性)属性添加到.aspx等类似页面内的Page指令即可
<%@ Page  Culture="Auto" UICulture="Auto" %>

要想对站点中的所有页面都设置相同的区域性设置,只需将以下元素添加到位于站点的根处的web.config文件中即可,这样就不必分别为每个页面进行分配了
<globalization uiCulture="auto" culture="auto" />

还可以为ASP.NET指定一个默认区域性
以下指定页面的用户界面区域性是自动,默认区域性是英语,页的区域性是自动,默认区域性是英语(美国)
<globalization uiCulture="auto:en" culture="auto:en-US" />

Culture:指示页的区域性设置
UICulture:指定用于页的用户界面(UI)区域性设置

 

B.设置语言首选项
自动检测功能所选择的默认Culture和UICulture有时可能不是用户所需要的
例如:一个美国籍业务员来到中国出差,在中国总部上网下业务单.这种情况下,Web应用程序应该为用户提供显式更改语言的功能,给他提供英文版的业务下单页

using System.Threading;
using System.Globalization;

protected override void InitializeCulture ( )
{
    //显式的指定区域为en,为美国籍业务员显示英文页
    //实际应用中可以根据用户选择来动态设置语言
    //还可以利用Profile来记住用户选择的语言,以便用户以后访问网站时自动进入相应语言页
    Thread.CurrentThread.CurrentUICulture = new  CultureInfo ( "en" );
    Thread.CurrentThread.CurrentCulture =  CultureInfo.CreateSpecificCulture ( "en-US" );
}

注意:对Thread.CurrentThread.CurrentCulture和 Thread.CurrentThread.CurrentUICulture所做的更改需要在InitializeCulture()方法中进行,因为 对首选浏览器语言的自动检测是在页生存期的早期发生的

特别提示:
CultureInfo类的实例化一般有两个途径,如下所示:
CultureInfo culture = CultureInfo. CreateSpecificCulture (name);
CultureInfo culture = new CultureInfo(name);
二者的区分:
使用第一种方法,只能创建固定区域性或特定区域性的CultureInfo实例。
使用第二种方法,则是建立一个name所指定的区域性的CultureInfo实例,它可以是固定的,非特定的或特定区域性的

Thread类的CurrentCulture属性用来获取或配置当前线程的区域性,它必须被配置为特定区域性。
假如Thread.CurrentThread.CurrentCulture = new CultureInfo ( "en" );就会报错!

 2.多语言的实现

其实实现是比较简单的,只需要下面几个步骤

1.创建全局资源表

2.在session中存放表示当前的culture的变量,如“en-us”,"zh-cn"

3.创建所有页面的基类PageBase,覆盖InitializeCulture函数

4.页面上的文本值, 表达式语法赋值

 

添加两个全局资源表

Strings.resx和Strings.en-us.resx(注意-后面的字符要符合RFC 1766标准,没带后缀的话就是默认值)

 

如下图:

PageBase

 1using System;
 2using System.Collections.Generic;
 3using System.Linq;
 4using System.Web;
 5using System.Globalization;
 6

 

基本页面:

 1using System;
 2using System.Collections.Generic;
 3using System.Linq;
 4using System.Web;
 5using System.Web.UI;
 6using System.Web.UI.WebControls;
 7using System.Globalization;
 8public partial class _Default :PageBase
 9

 简单的一个多语言的例子

缺点:切换语言时需要load两次

建议:可以利用ajax请求修改完session值后在执行window.location=window.self.location;

如:

 1       function PageRefresh(language)
 2       }

 

 代码下载:vs2008


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
asp.net插件实现发布时间:2022-07-10
下一篇:
LazyLoadingjQueryTabswithASP.NET[转]发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap