ASP.NET网站实现中英文转换(本地化资源)

news/2024/5/10 7:48:05/文章来源:https://blog.csdn.net/weixin_30938149/article/details/96502822

主要内容:

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#" AutoEventWireup="true"  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#" AutoEventWireup="true"  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);

            }

        }

    }

}

转载于:https://www.cnblogs.com/aiqingqing/p/4459534.html

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

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

相关文章

大型网站框架的演变

大型网站框架的演变 之前也有一些介绍大型网站架构演变的文章&#xff0c;例如LiveJournal的、ebay的&#xff0c;都是非常值得参考的&#xff0c;不过感觉他们讲的更多的是每次演变的结果&#xff0c;而没有很详细的讲为什么需要做这样的演变&#xff0c;再加上近来感觉有不少…

10个提供免费PHP脚本下载的网站

1.PHP Junkyard 这里提供免费的PHP脚本下载。包括PHP资源&#xff0c;教程&#xff0c;文章等等。 2.Free-Php.net Free-Php.net 为你提供分类列表&#xff0c;包括免费的PHP脚本&#xff0c;商业PHP脚本&#xff0c;PHP资源&#xff0c;PHP教程&#xff0c;网页资源&#xff0…

Https网站搭建——通过https://localhost:8443访问tomcat首页

图片大致介绍了Https浏览器与服务器握手的过程&#xff0c;涉及到的名词&#xff1a;证书、Hash算法、随机数密码、公钥加密、私钥解密、握手消息、hash验证、摘要 tomcat服务器配置可以实现https双向认证&#xff0c;简单起见&#xff0c;我们只实现单向认证&#xff0c;过程&…

网站流量分析及网络营销方法-小经验

做了一段网站&#xff0c;经常上站长网。也学习到了不少东西&#xff0c;但是本人还是和大家一样始终是一个技术出身的programmer. 所以有小经验的话&#xff0c;还是应该写在博客园&#xff0c;给自家人看。管理大师德鲁克教导我们&#xff1a;没有测量就没有管理&#xff08;…

Linux下Web服务器应用之网站安全-https

Linux下Web服务器应用之网站安全(https)解决方案 HTTPS&#xff08;全称&#xff1a;Hypertext Transfer Protocol over Secure Socket Layer&#xff09;&#xff0c;是以安全为目标的HTTP通道&#xff0c;简单讲是HTTP的安全版。即HTTP下加入SSL层&#xff0c;HTTPS的安全基础…

网站访问统计系统 piwik

piwik官网地址:http://piwik.org/ Piwik是一套基于PhpMySQL技术构建的开源网站访问统计系统&#xff0c;前身是phpMyVisites。Piwik可以给你详细的统计信息&#xff0c;比如网页 浏览人数, 访问最多的页面, 搜索引擎关键词等等&#xff0c;并且采用了大量的AJAX/Flash技术&…

网站前端性能优化总结【转】

一、服务器侧优化 1. 添加 Expires 或 Cache-Control 信息头 某些经常使用到、并且不会经常做改动的图片&#xff08;banner、logo等等&#xff09;、静态文件&#xff08;登录首页、说明文档等&#xff09;可以设置较长的有效期&#xff08;expiration date&#xff09;&…

网站性能工具Yslow的使用方法

Yslow是雅虎开发的基于网页性能分析浏览器插件&#xff0c;从年初我使用了YSlow后&#xff0c;改变了博客模板大量冗余代码&#xff0c;不仅提升了网页的打开速度&#xff0c;这款插件还帮助我分析了不少其他网站的代码&#xff0c;之前我还特意写了提高网站速度的秘籍&#xf…

10款方便的在线文件格式转换工具网站。

1.online-convert online-convert是一个十分优秀的在线格式转换应用&#xff0c;支持格式覆盖文档、图片、音频、视频、电子书、Flash以及一些 不常见的格式。使用非常简单&#xff0c;你只需根据在你想转换成的格式的分类&#xff08;如文档的在document converter&#xff09…

获得alexa网站下面美国排名前二十的网址

为什么80%的码农都做不了架构师&#xff1f;>>> #!/usr/bin/python #encoding:utf8 #author:cosmeimport re import urllibdef getTop25ReginalSties():GETTOP25 re.compile(r^\<a\shref\\"/siteinfo/(?P<gettop>\S)\"\>\S\</a\>.*)…

最新70佳单页网站设计案例欣赏(中篇)

单页网站是指只有一个页面的网站&#xff0c;这种形式的网站曾经非常流行&#xff0c;现在依然有很多人喜欢。不过&#xff0c;并不是每个网站都适合做成单页&#xff0c;一般都是内容比较少而且将来内容也不怎么增加的情况才适合这样做。如果你打算做一个这样的网站&#xff0…

(转载)让网站变灰的CSS代码(支持IE、FIREFOX和CHROME)

2019独角兽企业重金招聘Python工程师标准>>> <p style"margin: 20px 0px; font-size: 1.2em; line-height: 1.8; font-family: Tahoma, Verdana, 宋体; color: #525252;">原文&#xff1a;<a href"http://www.uisdc.com/gray-css-code"…

从两个服务器访问相同网站

目标: 从两台服务器访问同一个网站. 模型: 服务器A , 服务器B 上运行apache 安装php 服务器C 上保存网页文件, 及运行Mysql数据库 大致流程: 服务器C 建立网页存放目录和Mysql数据目录 启用 nfs 服务 并共享网页存放…

从杨致远辞去雅虎说起,那些衰落的网站巨头给我们的启示

盘点一下近些年衰落的互联网巨头 雅虎---无可置疑排名第一位&#xff0c;昔日的互联网霸主99年市值超过1200亿美金&#xff0c;记得小时候看过一个动画片&#xff0c;里面经常有个大猩猩叫“yahoo”哈哈&#xff0c;从哪个时候雅虎成为我第一知道的互联网品牌&#xff0c;但是今…

我的.Net电子商务网站第一步 - UI

决定要做一个电子商务网站&#xff0c;一直以来都觉得自己美工很烂&#xff0c;那先从美工入手吧&#xff01; 折腾了2天之后&#xff0c;有了最初的效果&#xff0c;在线demo请点击&#xff1a;http://byyee.com/software/shoppingmall/ 网站用的是国外空间&#xff0c;如果访…

自主服务器详细发布网站教程,能上网即可以做网站服务

很多人只知道固定公网IP发布网站&#xff0c;动态IP时甚至无公网IP时&#xff0c;如何发布网站呢&#xff1f;根据不同的网络环境分析不同的发布网站方式。一&#xff0c;固定公网IP时。通过dnspod或nat123域名解析&#xff0c;将域名解析到网站主机IP即可。二&#xff0c;动态…

IIS发布asp.net网站出现的错误

1、 【转】配置错误 不能在此路径中使用此配置节 配置错误 不能在此路径中使用此配置节(转)2011年12月29日 11:22 配 置错误 不能在此路径中使用此配置节。如果在父级别上锁定了该节&#xff0c;便会出现这种情况。锁定是默认设置的 (overrideModeDefault"Deny")&…

joomla的几个不错的网站

http://www.joomlagate.com/download/free-joomla-templates Joomla之门 ::下载 RSS Joomla! 免费模板 RSS 各种免费 Joomla! 模板 Free Joomla Templates. 不仅有前台模板&#xff0c;还包括后台模板&#xff1b;不仅有网站模板&#xff0c;还包括论坛模板、留言本模板等。 …

微软网站打不开_终于等到你,微软正式发布 Windows Terminal 预览版

前一段时间&#xff0c;一直在知乎、技术社区收到技术小伙伴们的终极拷问&#xff1a;微软Build 大会上提到的「6月中旬」要上Windows store 的 Windows Terminal 到底啥时候可以用到呀&#xff1f;有一次&#xff0c;我跑去我给 Windows Terminal 提的某个 issue 里问 Windows…

优秀设计:12个带给你灵感的创意单页网站作品

单页网站作为一个流行趋势已有一段时间了&#xff0c;但他们的受欢迎程度似乎并没有任何减少。这种页面设计方法并不适用于每个项目&#xff0c;但有时它是合适的&#xff0c;是有意义的。例如&#xff0c;当没有很多内容&#xff0c;而且你知道的内容在未来不会增长很多&#…