【转】ASP.NET网站实现中英文转换…

news/2024/5/21 1:15:48/文章来源:https://blog.csdn.net/juelingfeng/article/details/38416783

摘要:随着计算机网络的发展,一些商业机构也开始向国际市场迈进。因此这些商业的机构的网站 也开始面向全世界的用户,要求网站具有多语言的选择,实现本地化。在.NET1.1框架下面,如果你要实现本地化,你可能要借助某些插件,甚至要编写一连 串的代码;但是在.NET2.0框架底下,你会发现一切原来是那么的简单~~!ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客

主要内容:

1. 简单例子

2. 进一步认识Localization

3. 语言转换

4. 解决方案

一. 简单例子

下面通过一个简单的例子来说明利用Localization来实现本地化是那么的简单,首先我们打开Visual Studio 2005,新建一个名叫Localization的工程(名字就无关紧要了,随你喜欢~~),如下所示:

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客

然后我们在Default.aspx这张页面上放一些控件,例如我们在页面上放一个按钮,一个标签一个文本框,添加完之后的页面就好像下面的一样:

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客

接下来的一步主要是负责生成本地资源,我们点击“工具->生成本地资源(R)”,

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客

于是我们的项目中多了一个文件夹App_LocalResources,里面包含一个文件Default.aspx.resx,而这个文件就是用来编辑保存我们想要显示的一些文字资源,

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客

例如我们为我们添加的控件输入以下信息:

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客

在完成以上步骤之后,我们就可以看到效果了。

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客

在以上的步骤中,我们没有手工编写任何代码,而由.NET2.0自动实现绑定过程。而页面跟以往的不同就是HTML代码发生了变化:

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客<%ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客Page Language="C#"   CodeFile="Default.aspx.cs" Inherits="_Default" Culture="auto" meta:resourcekey="PageResource1" UICulture="auto" %>

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客<html xmlns="http://www.w3.org/1999/xhtml" >

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客<head runat="server">

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客    <title>无标题页</title>

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客</head>

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客<body>

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客    <form id="form1" runat="server">

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客    <div>

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客        <asp:Button ID="Button1" runat="server" meta:resourcekey="Button1Resource1" Text="Button" />

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客        <asp:TextBox ID="TextBox1" runat="server" meta:resourcekey="TextBox1Resource1"></asp:TextBox>

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客        <asp:Label ID="Label1" runat="server" meta:resourcekey="Label1Resource1" Text="Label"></asp:Label></div>

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客    </form>

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客</body>

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客</html>

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客

除了Page里面增加了 Culture="auto" meta:resourcekey="PageResource1" UICulture="auto"等属性设置外,我 们添加的控件也相应的多了meta:resourcekey这个属性,而.NET2.0就是根据这些属性来进行语言绑定。

在上述的简单项目中,我们只提供了一种语言,还没达到本地化的要求,于是我们向 App_localresources这个目录手工增加一个资源文件Default.aspx.en-us.resx文件(其中英文[美国]的语言代码 是"en-us"),我们向里面添加一些key/value对,如下所示:

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客

然后我们去修改IE的Internet选项的语言,添加“英文(美国)[en-us]”,并且把它移动到最上面:

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客

再运行一次我们的项目,你会发现简单的本地化已经实现,

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客

至此,通过一个简单的例子,我们已经初步认识了.NET2.0是如何实现利用Localization来实现本地化的。但是如果我们要构建一个优秀的国际化网站或软件,我们需要对Localization做进一步的认识。

二. 进一步认识Localization

到了这里,你会发现上述的页面中是每一个页面对应一些属于自己的资源文件,如果我们要求多张 页面或者全部页面都要用同一个资源文件的时候,该怎么做呢?很简单,我们可以在项目中添加一个文件夹,名叫App_GlobalResources,这是 系统默认的存放全局资源的目录。例如我们在全局目录中添加两个文件,分别是global.resx和global.en-us.resx,

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客

然后我们分别在里面输入一些对应的key/value值,至于怎么应用我们的全局资源绑定到页面中,我们有两种方法:

一种是在HTML代码里面进行绑定,表达式是 <%$ resources: [applicationkey], resourcekey, [default] %>,例如我们在Default.aspx多放一个按钮,其HTML代码为:

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客  <asp:Button ID="Button2" runat="server" Text="<%$ resources: global, String1 %>

于是我们会得到以下的效果,可以看出资源已绑定到控件上。

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客

另一种方式则是在程序代码进行绑定,由于.NET2.0框架会将全局资源文件编译成一个类,也就是说我们刚才创建的global.resx文件将被编译成一个类global,而资源文件里面的所有key将成为类的属性,以供在程序里进行访问。例如我们可以在程序里这样写:

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客this.Button2.Text Resources.global.String1;

大家等会可以下载附件尝试一下,看看效果是否一样~~~~ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客

另外,资源文件除了可以存放一些字符串之外,还可以存放图片,声频,文件等等,

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客

例如我们在资源文件中添加一些图片资源,你可以将图片设置为在编译时链接或者嵌入到资源文件,

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客

而在程序代码里面,我们得到的将是System.Drawing.Bitmap类型的变量,至于添加其他类型的文件,得到的是什么,这里不多说了,大家自己探讨一下吧。

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客

三. 语言设置

大家是否觉得如果每次都要去Internet选项来进行语言的选择会很麻烦,那么如何在自己 的项目中设置要显示某一种语言呢?很简单,通常我们有三种途径。首先需要讲两个属性,一个是Culture,这个决定各种数据类型是如何组织,如数字与日 期;另一个是UICulture,这个就决定了采用哪一种本地化资源,也就是使用哪种语言。详细请看MSDN~~~

1. 在具体页面进行设置

<%@ Page Language="C#"   CodeFile="Default.aspx.cs" Inherits="_Default" Culture="auto" meta:resourcekey="PageResource1" UICulture="auto" %>

如上,由于将UICulture和Culture属性都设置成auto,.NET2.0会根 据你的Internet语言选项来确定加载哪些资源文件,当然你也可以将UICulture和Culture都设置成"en-us",那么这张页面所加载 的就是英文的资源文件了。不过这样写很麻烦,每一张页面都要写,太繁琐了,于是我们可以在web.config里面设置我们所要的语言。

2. 在web.config里面进行设置

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客<configuration>

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客   <system.web>

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客      <globalization culture="en-us" uiCulture="en-us"/>

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客   </system.web>

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客</configuration>

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客

通过这样设置,项目中的全部页面就会自动加载英文资源文件了,但要注意的一点是,如果在页面 中也设置了UICulture和Culture属性,那么它将覆盖web.config里面的设置。例如某张页面的这两个属性设为"zh-cn",那么这 张页面将显示中文而不是英文。但还是觉得不好,因为页面要加载的语言文件都写死了,不灵活。

3. 在代码里面进行设置

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客using System.Globalization;

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客using System.Threading;

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客// Set the culture to the browser's accept language

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客Thread.CurrentThread.CurrentCulture 

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客    CultureInfo.CreateSpecificCulture(Request.UserLanguages[0]);

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客// Set the user interface culture to the browser's accept language

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客Thread.CurrentThread.CurrentUICulture 

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客    new CultureInfo(Request.UserLanguages[0]);

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客

在程序代码里面进行设置,重载页面的InitializeCulture事件,注意在代码里的语言设置,会覆盖页面的HTML属性或者web.config的设置。上述的Request.UserLanguages[0]是获取Internet语言选项的第一种语言代码。

四. 解决方案

经过上述的初步和进一步的认识,相信大家已经理解了Localization的原理以及实现方法,但真要在我们的系统中实现多语言,实现本地化,我们应该怎样来架构呢?

通常我们为了减少重复代码,我们一般是建立一个基页面PageBase类,让所有的页面都继 承基页面,在基页面重写InitializeCulture事件,而用户所选择的语言我们可以储存在 Session,Cookie,QueryString或者.NET2.0提供的profile里面。 下面我们以存储在Session为例,构建我们的基页面,为简单起见,我只是通过一个按钮来选择语言,真正实现的时候可能会用一个下拉框:

主页面:

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客using System;

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客using System.Data;

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客using System.Configuration;

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客using System.Web;

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客using System.Web.Security;

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客using System.Web.UI;

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客using System.Web.UI.WebControls;

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客using System.Web.UI.WebControls.WebParts;

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客using System.Web.UI.HtmlControls;

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客using Localization;

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客

/// <summary>

/// 本地化

/// kenneth

/// 2006.07.16

/// </summary>

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客public partial class _Default MyPageBase

{

    protected void Page_Load(object sender, EventArgs e)

    {

        this.Button2.Text Resources.global.String1;

    }

    protected void Button2_Click(object sender, EventArgs e)

    {

        if (Session["PreferredCulture"].ToString().ToUpper() == "EN-US")

             Session["PreferredCulture"]= "zh-cn";

         else if (Session["PreferredCulture"].ToString().ToUpper() == "ZH-CN")

             Session["PreferredCulture"] "en-us";

        //重定向页面

        Response.Redirect(Request.Url.PathAndQuery); 

    }

}

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客

基页面MyPageBase:

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客using System;

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客using System.Data;

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客using System.Configuration;

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客using System.Web;

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客using System.Web.Security;

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客using System.Web.UI;

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客using System.Web.UI.WebControls;

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客using System.Web.UI.WebControls.WebParts;

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客using System.Web.UI.HtmlControls;

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客using System.Threading;

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客using System.Globalization;

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客namespace Localization

{

    /// <summary>

    /// MyPageBase 基类实现本地化

    /// kenneth

    /// 2006.07.16

    /// </summary>

    public class MyPageBase System.Web.UI.Page

    {

        protected override void InitializeCulture()

        {

            // 用Session来存储语言信息

            if(Session["PreferredCulture"] == null)

                Session["PreferredCulture"] Request.UserLanguages[0];

            string UserCulture Session["PreferredCulture"].ToString();

            if (UserCulture != "")

            {

                //根据Session的值重新绑定语言代码

                Thread.CurrentThread.CurrentUICulture new CultureInfo(UserCulture);

                Thread.CurrentThread.CurrentCulture CultureInfo.CreateSpecificCulture(UserCulture);

            }

        }

    }

}

ASP.NET中英文转换,转 - 鹏鹏 - 鹏鹏的博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_869039.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

这个网站他不简单系列(一)低调而强大的DICT.CN

这个网站他不简单系列(一)低调而强大的DICT.CN emilmatthew 08/06/25 OK&#xff0c;闲话少说&#xff0c;我们先看网站&#xff1a;DICT.CN&#xff0c;不知诸位看下来有何感觉&#xff1f;是啊&#xff0c;不就是个在线词典吗&#xff1f;是啊&#xff0c;我也觉得不就是个在…

[8.18]东西放久了会发霉的,网站也一样,拿出来晒晒~~~

这个网站叫DOUPACK(中文名称叫豆瓣包裹),主要的意图就是可以在屏幕上拖动你的豆瓣小组,组成一个你喜欢的样子.感觉最后会变成一个恶搞度>实用度的应用.由于整个用户系统都要弄下来,所以制作时间有些长... 去年11月开始做的,原先是利用业余时间做的,弄了4个月,还差一个月的工…

web2.0网站的四大特性简述

本文文字内容转自天极网: http://homepage.yesky.com/216/2634716.shtml 本文图片转自: http://web2.wsj2.com/architectures_of_participation_the_next_big_thing.htm 收集和学习了大家对于Web2.0特性的看法&#xff0c;加上这几天的思考&#xff0c;整理我对于Web2.0到底是…

Gin + GoCv + Element 简单搭建图片风格迁移网站

成品效果 输入&#xff1a;jpg/png 格式图片 输出&#xff1a;风格迁移后的图片 目录结构 # tree├─controller // 控制器 ├─models // 风格迁移模型 │ ├─eccv16 │ └─instance_norm ├─router // 路由转发 ├─static // 静态资源 ├─sys // 系统配置 ├─tem…

手机访问网站 点击手机号码直接拨打电话

分享一下我老师大神的人工智能教程&#xff01;零基础&#xff0c;通俗易懂&#xff01;http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章。分享知识&#xff0c;造福人民&#xff0c;实现我们中华民族伟大复兴&#xff01; 手机访问网站,点击手机号码直接拨打电话: …

使用IntelliJ IDEA开发SpringMVC网站

转自https://my.oschina.net/gaussik/blog/385697 1.安装jdk&#xff0c;maven和tomcat 2.创建maven web项目 Create New Project 最后生成结果如下图&#xff0c;注意左侧部分 上侧部分选择Auto-Import就好 如果生成过慢&#xff0c;可以参看下面两篇文章&#xff1a; 文章1&a…

回首10年前的30个最受欢迎的网站

10年前的Web技术还比较落后&#xff0c;浏览器功能也非常有限&#xff0c;你知道现在最受欢迎的这些网站&#xff0c;在10年前甚至更早的时候是什么样子吗&#xff1f;文中为你揭示包括Google、雅虎、eBay、维基百科等网站的老面孔&#xff1a; 1. Google (1998) Google (1998…

让你的Onedrive网盘秒变网站,文件展示,直连下载,视频在线播放

之前我们介绍了免费的5TB的Onedrive网盘&#xff0c;不但能做本地硬盘使用&#xff0c;还能扩展你的硬盘&#xff0c;今天我们就来介绍一下另一款Onedrive网盘的神器OneIndex,这是针对Onedrive网盘的一个开源程序。可以将Onedrive存储的文件展示&#xff0c;直连下载。视频还能…

LAMP网站架构方案分析

LAMP&#xff08;Linux-Apache-MySQL-PHP&#xff09;网站架构是目前国际流行的Web框架&#xff0c;该框架包括&#xff1a;Linux操作系统&#xff0c;Apache网络服务器&#xff0c;MySQL数据库&#xff0c;Perl、PHP或者Python编程语言&#xff0c;所有组成产品均是开源软件&a…

如何更改VS2005调试网站的浏览器类型

选择网站根目录&#xff0c;右键单击 选择“浏览方式” 在这里就可以设置浏览器的类型了 转载于:https://www.cnblogs.com/qishichang/archive/2007/11/25/971588.html

微软官宣IE将“退役”,老网站如何 实现在Chrome、Firefox中兼容运行?

问题 美国微软公司为了推广其Chromium内核的Edge浏览器&#xff0c;在2021年5月19日突然宣布&#xff0c;自2022年6月15日起&#xff0c;绝大多数版本的Windows 10系统将不再支持IE浏览器&#xff0c;因此IE即将彻底退出互联网的舞台。具体来说微软决定将不再支持Windows 10所…

Python必去的6个网站

1.The Hitchhiker’s Guide to Python。 equests作者创建的网站&#xff0c;对于Python的方方面面都有指导作用 2. Python 3 Module of the Week 和 Python Module of the Week。 Python 3 Module of the Week系列文章&#xff0c;每篇介绍一个 Python 标准库的使用 3. …

你的网站被流量冲崩了吗?稳住!ab来帮你了

【来源】 ab 全称 Apache Benchmar , 顾名思义是Apache提供的一种性能测试工具。主要作用是检测web服务每秒可以处理多少个请求。它可以用于apache、IIs、tomcat、nginx等服务器的简单压力测试 【语法】 格式&#xff1a;ab [options] path 其中options参数常用有以下&#xf…

推荐大家研究一个网站tineye.com

http://www.tineye.com/&#xff0c;这个站点做得很有想法&#xff0c;详细体验我过几天发出&#xff0c;有兴趣的朋友可以先看看。 刚刚用这个站点上传了我硕士毕业的标准照&#xff0c;回顾了那段意气奋发的年代。

如何应对高并发 —— 动态网站静态化

零. 前言 为了应对高并发&#xff0c; 大多数网站在更新不频繁的页面都做了动态网页静态化处理。 典型的如&#xff1a; 淘宝的首页、 网易新闻的首页等。 当然这些网站加载速度这么快&#xff0c; 不仅仅是静态化&#xff0c; 还有 CDN、 缓存等各个方面的优化。 从阿里在 Inf…

HTML5移动端手机网站开发流程

最近一直在研究移动手机网站的开发&#xff0c;发现做手机网站没有想象中的那么难。为什么会这么说呢&#xff1f;我们试想下:我们连传统的PC网站都会做&#xff0c;难道连一个小小的手机网站难道都搞不定吗&#xff1f;其实手机网站就是一个微缩版的PC网站罢了&#xff01;至于…

网站pc版转成手机版的三种方法

现在做自媒体博客的朋友有很多&#xff0c;可是&#xff0c;大家的自媒体博客都是PC版&#xff0c;只适用于电脑&#xff0c;平板上面&#xff0c;对于手机来说的话就不适合了&#xff0c;影响用户体验。下面&#xff0c;邵连虎博客就教大家三种方法把自媒体博客PC版转换成手机…

一些GIS数据网站分享

在平时的工作和学习中收集了不少的GIS数据的网站&#xff0c;给大家分享一下&#xff0c;整理不易&#xff0c;还请大家多多支持&#xff0c;后续会根据收集的数据网站继续更新&#xff0c;我都是根据我自己收集的情况推荐&#xff0c;涵盖可能不是很全&#xff0c;也欢迎大家补…

分享12个非常好的免费矢量资源网站

原文作者&#xff1a;梦想 原文出处&#xff1a;http://www.cnblogs.com/lhb25/archive/2011/04/08/2003802.html 在工作中&#xff0c;Web设计师经常需要到网上查找一些免费资源以更快更好的完成设计任务。这些资源都是到用时方恨少啊&#xff0c;所以今天本文与大家分享12个…