双语网站资源文件

news/2024/5/21 0:14:33/文章来源:https://blog.csdn.net/weixin_34384681/article/details/86166819

      原文链接:http://songwenjie12.blog.163.com/blog/static/131224420200910685249410/

 

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

主要内容:

1. 简单例子

2. 进一步认识Localization

3. 语言转换

4. 解决方案

一. 简单例子

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

双语网站资源文件 - 宋文杰 - 无忧

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

双语网站资源文件 - 宋文杰 - 无忧

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

双语网站资源文件 - 宋文杰 - 无忧

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

双语网站资源文件 - 宋文杰 - 无忧

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

双语网站资源文件 - 宋文杰 - 无忧

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

双语网站资源文件 - 宋文杰 - 无忧

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

双语网站资源文件 - 宋文杰 - 无忧双语网站资源文件 - 宋文杰 - 无忧<%双语网站资源文件 - 宋文杰 - 无忧@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" Culture="auto" meta:resourcekey="PageResource1" UICulture="auto" %>

双语网站资源文件 - 宋文杰 - 无忧

双语网站资源文件 - 宋文杰 - 无忧<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

双语网站资源文件 - 宋文杰 - 无忧

双语网站资源文件 - 宋文杰 - 无忧<html xmlns="http://www.w3.org/1999/xhtml" >

双语网站资源文件 - 宋文杰 - 无忧<head runat="server">

双语网站资源文件 - 宋文杰 - 无忧    <title>无标题页</title>

双语网站资源文件 - 宋文杰 - 无忧</head>

双语网站资源文件 - 宋文杰 - 无忧<body>

双语网站资源文件 - 宋文杰 - 无忧    <form id="form1" runat="server">

双语网站资源文件 - 宋文杰 - 无忧    <div>

双语网站资源文件 - 宋文杰 - 无忧        <asp:Button ID="Button1" runat="server" meta:resourcekey="Button1Resource1" Text="Button" />

双语网站资源文件 - 宋文杰 - 无忧        <asp:TextBox ID="TextBox1" runat="server" meta:resourcekey="TextBox1Resource1"></asp:TextBox>

双语网站资源文件 - 宋文杰 - 无忧        <asp:Label ID="Label1" runat="server" meta:resourcekey="Label1Resource1" Text="Label"></asp:Label></div>

双语网站资源文件 - 宋文杰 - 无忧    </form>

双语网站资源文件 - 宋文杰 - 无忧</body>

双语网站资源文件 - 宋文杰 - 无忧</html>

双语网站资源文件 - 宋文杰 - 无忧

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

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

双语网站资源文件 - 宋文杰 - 无忧

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

双语网站资源文件 - 宋文杰 - 无忧

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

双语网站资源文件 - 宋文杰 - 无忧

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

二. 进一步认识Localization

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

双语网站资源文件 - 宋文杰 - 无忧

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

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

双语网站资源文件 - 宋文杰 - 无忧  <asp:Button ID="Button2" runat="server" Text="<%$ resources: global, String1 %>

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

双语网站资源文件 - 宋文杰 - 无忧

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

双语网站资源文件 - 宋文杰 - 无忧this.Button2.Text = Resources.global.String1;

大家等会可以下载附件尝试一下,看看效果是否一样~~~~双语网站资源文件 - 宋文杰 - 无忧

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

双语网站资源文件 - 宋文杰 - 无忧

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

双语网站资源文件 - 宋文杰 - 无忧

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

双语网站资源文件 - 宋文杰 - 无忧

三. 语言设置

大家是否觉得如果每次都要去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里面进行设置

双语网站资源文件 - 宋文杰 - 无忧<configuration>

双语网站资源文件 - 宋文杰 - 无忧   <system.web>

双语网站资源文件 - 宋文杰 - 无忧      <globalization culture="en-us" uiCulture="en-us"/>

双语网站资源文件 - 宋文杰 - 无忧   </system.web>

双语网站资源文件 - 宋文杰 - 无忧</configuration>

双语网站资源文件 - 宋文杰 - 无忧

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

3. 在代码里面进行设置

双语网站资源文件 - 宋文杰 - 无忧using System.Globalization;

双语网站资源文件 - 宋文杰 - 无忧using System.Threading;

双语网站资源文件 - 宋文杰 - 无忧

双语网站资源文件 - 宋文杰 - 无忧// Set the culture to the browser's accept language

双语网站资源文件 - 宋文杰 - 无忧Thread.CurrentThread.CurrentCulture = 

双语网站资源文件 - 宋文杰 - 无忧    CultureInfo.CreateSpecificCulture(Request.UserLanguages[0]);

双语网站资源文件 - 宋文杰 - 无忧

双语网站资源文件 - 宋文杰 - 无忧// Set the user interface culture to the browser's accept language

双语网站资源文件 - 宋文杰 - 无忧Thread.CurrentThread.CurrentUICulture = 

双语网站资源文件 - 宋文杰 - 无忧    new CultureInfo(Request.UserLanguages[0]);

双语网站资源文件 - 宋文杰 - 无忧

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

四. 解决方案

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

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

主页面:

双语网站资源文件 - 宋文杰 - 无忧using System;

双语网站资源文件 - 宋文杰 - 无忧using System.Data;

双语网站资源文件 - 宋文杰 - 无忧using System.Configuration;

双语网站资源文件 - 宋文杰 - 无忧using System.Web;

双语网站资源文件 - 宋文杰 - 无忧using System.Web.Security;

双语网站资源文件 - 宋文杰 - 无忧using System.Web.UI;

双语网站资源文件 - 宋文杰 - 无忧using System.Web.UI.WebControls;

双语网站资源文件 - 宋文杰 - 无忧using System.Web.UI.WebControls.WebParts;

双语网站资源文件 - 宋文杰 - 无忧using System.Web.UI.HtmlControls;

双语网站资源文件 - 宋文杰 - 无忧using Localization;

双语网站资源文件 - 宋文杰 - 无忧

/** <summary>

/// 本地化

/// kenneth

/// 2006.07.16

/// </summary>

双语网站资源文件 - 宋文杰 - 无忧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); 

    }

}

双语网站资源文件 - 宋文杰 - 无忧

基页面MyPageBase:

双语网站资源文件 - 宋文杰 - 无忧using System;

双语网站资源文件 - 宋文杰 - 无忧using System.Data;

双语网站资源文件 - 宋文杰 - 无忧using System.Configuration;

双语网站资源文件 - 宋文杰 - 无忧using System.Web;

双语网站资源文件 - 宋文杰 - 无忧using System.Web.Security;

双语网站资源文件 - 宋文杰 - 无忧using System.Web.UI;

双语网站资源文件 - 宋文杰 - 无忧using System.Web.UI.WebControls;

双语网站资源文件 - 宋文杰 - 无忧using System.Web.UI.WebControls.WebParts;

双语网站资源文件 - 宋文杰 - 无忧using System.Web.UI.HtmlControls;

双语网站资源文件 - 宋文杰 - 无忧using System.Threading;

双语网站资源文件 - 宋文杰 - 无忧using System.Globalization;

双语网站资源文件 - 宋文杰 - 无忧

双语网站资源文件 - 宋文杰 - 无忧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);

            }

        }

    }

}

 

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

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

相关文章

excel 模糊查找sql_SQL入门及练习网站推荐

数据分析师使用最多的就是Excel和SQL两个工具了&#xff0c;SQL负责从底层数据库导出数据&#xff0c;Excel对数据进行处理和可视化展现。SQL简单易学、使用频次高&#xff0c;很多互联网公司的运营、数据分析师、产品经理&#xff0c;都要求具备SQL技能。下面是字节跳动和某保…

薛峰:从SEO到SMO

2019独角兽企业重金招聘Python工程师标准>>> 剥开一颗巧克力&#xff0c;这是很容易被人们忽略的瞬间。然而&#xff0c;如果在那片薄薄的包装锡纸上&#xff0c;读到一句打动内心的句子&#xff0c;这个瞬间就会立即变得不同。的确&#xff0c;享受巧克力的丝滑口感…

开源网站有哪些_网站优化篇:网站程序的选择

在搭建时&#xff0c;我们要选择什么样的程序呢&#xff1f;这个是有讲究的&#xff0c;建议大家使用自己最熟悉的程序&#xff0c;因为不熟悉&#xff0c;我们就要去学习程序的使用&#xff0c;一个程序要几天才能够操作&#xff0c;1天&#xff0c;2天&#xff0c;或又者是7天…

网站“HTTP Headers”请求头部详细解读

网站“HTTP Headers”请求头部详细解读2010-01-17 作者&#xff1a; 来源&#xff1a;国外翻译 【大 中 小】 评论&#xff1a;0新浪微博QQ空间开心网人人网豆瓣更多无论是做前端还是做后端&#xff0c;都会不时与HTTP Headers打交道&#xff0c;了解它无疑对Web开发有莫大帮助…

seo提交工具_网站seo优化具体怎么做?这些工具你需要用到!

所谓工欲善其事&#xff0c;必先利其器。不想让自己操作起来摸不着北&#xff0c;去战场(网站)之前&#xff0c;先准备好这些武器(工具)&#xff0c;会让你省下不少精力&#xff0c;数据更明确&#xff01;网站seo优化-1、百度站长平台百度站长平台里面有非常多功能&#xff0c…

html命名侧边栏_五、前端开发—搭建静态网站侧边栏

高能预警&#xff0c;这次写的组件会非常的多&#xff0c;一大堆代码正在袭来。。。。。构图解析这次我们做一个网页中页面侧边栏&#xff0c;其中会放一些导航信息。在写代码之前&#xff0c;我们先分析一下&#xff0c;我们想要达成的效果&#xff1a;首先&#xff0c;最上方…

assetbundle服务器iis网站,Unity Webgl打ab包放到IIS上

用编译器和地址都可以实例化出预制体和下载&#xff0c;用浏览器打开程序就无法实例化&#xff0c;打包和下载代码如下[MenuItem("AssetBundle/Package (Default)")]static void PutBundleAssetesAll(){//将这些资源包放在一个名为ABs的目录下// string assetBundleD…

教务网主界面html代码,教育类网站html代码

【实例简介】网页制作课设使用【实例截图】【核心代码】教育类网站├── about.html├── contact.html├── courses.html├── css│ ├── animate.css│ ├── bootstrap.min.css│ ├── custom-fonts.css│ ├── flexslider.css│ ├── font-awesom…

超异类的“无用类”网站导航网站 - theuselessweb.com

为什么80%的码农都做不了架构师&#xff1f;>>> 日期&#xff1a;2012-11-25 来源&#xff1a;GBin1.com 如果你实在是觉得上网无聊的话&#xff0c;你可以尝试一下我们今天介绍的这个超级异类的网站 - theuselessweb.com&#xff0c; 这个网站自己本身并没有什么…

苹果cms替换资源_苹果cms怎么做seo?

苹果cms怎么做seo&#xff1f;苹果cms怎么做seo&#xff1f;由于早期之前做过一个自己公司网站&#xff0c;当时并没有注意到关键词排名问题&#xff0c;后来公司接到一个seo优化的单&#xff0c;当时我们也没那个能力&#xff0c;只得托人去做seo&#xff1b;从这以后&#xf…

abv asp是静态网页吗_作为SEO老人不轻易建议客户进行动态网页优化设置

一个企业的网站在建设时无论是动态还是静态页面在网站建设时都已经决定了&#xff0c;在网站建成之后&#xff0c;对于SEO优化来说&#xff0c;静态网页是相对较简单的&#xff0c;因为静态网页就是一个对应的URL有且仅有一个对应的页面&#xff0c;而动态网页一般都是通过代码…

域名怎么样才合格_seo:怎么样分析你对手的网站?

这里所说的分析竞争对手的网站包括很多&#xff0c;今天只和大家谈论分析竞争对手首页源代码!如何查看源文件代码&#xff0c;我想懂点网页代码基础的人都应该知道&#xff0c;为了方便有新手朋友光临阅读&#xff0c;我就再啰嗦一遍&#xff0c;在浏览器直接右击你浏览的网页&…

html5手机电商网页设计代码_北京营销型网页设计费用,电商做网站服务价格

北京营销型网页设计费用,电商做网站服务价格,有些企业旗下有很多产品或者不同的服务&#xff0c;既想突出这款产品&#xff0c;又怕忽略那个服务&#xff0c;这样做很容易造成一个网站有多个主题&#xff0c;不仅网站内容看起来杂乱无章&#xff0c;而且也不利于搜索引擎对于网…

网站集合

2019独角兽企业重金招聘Python工程师标准>>> wireshark http://www.wireshark.org/ Google App Engine http://appengine.google.com/ 转载于:https://my.oschina.net/u/140714/blog/182370

平台型网站服务器采购,为满足网络智能室网络AI能力平台的需求 中国联通采购10台GPU服务器...

原标题&#xff1a;为满足网络智能室网络AI能力平台的需求 中国联通采购10台GPU服务器最近中国联通公布公告宣布采购10台GPU服务器&#xff0c;预算为400万元。2019年中国联通通信云网络运营域资源池ONS系统创新业务与云平台部分扩容工程项目中&#xff0c;为满足网络智能室网络…

安卓 fragment内显示网站_Coupang 安卓架构?—?Part 3 通过重构包消除依赖

在上一篇文章中&#xff0c;继关注点分离(Separation of concerns) 之后我们研究了安卓应用程序模块化(Modularizing Android Application)。我们通过应用程序模块化消除了依赖关系&#xff0c;提高了代码的安全性和可维护性&#xff0c;并通过复用在其他移动端项目中分离出的模…

网博士自助建站系统_已经这么多自助建站了,为什么还要上线跨屏建站?

已经这么多自助建站了&#xff0c;为什么还要上线跨屏建站&#xff1f;其实&#xff0c;在做跨屏建站项目的时候&#xff0c;也曾经想过这个问题&#xff0c;比如现在做自助建站晚了吗&#xff1f;自己的优势在哪里&#xff1f;等等&#xff0c;苦思冥想以后&#xff0c;决定还…

rss源推荐2020_推荐几个超级厉害的网站。打开就会沉迷其中!

Hello&#xff0c;大家好 我是每日君给周末还在加班的每日君点个好看吧Colorhubhttps://colorhub.me/Colorhub 是一个质量超级高的高清无版权图片网站&#xff0c;并且网站上面的图片都是支持个人和商业免费使用。网站免费提供了超过 10 万张高清无版权图片&#xff0c;而且网站…

asp.net在网站根目录下创建文件夹

假设要在asp.net网站的根目录下建立文件夹hovertree,C#代码如下&#xff1a; C#代码 string m_keleyiFolderName Server.MapPath("/hovertree"); if (Directory.Exists(m_keleyiFolderName)) { //文件夹已经存在 return; } else { try { Directory.Cre…

iis添加asp.net网站,访问提示:由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射

今天在iis服务器配置asp.net网站&#xff0c;遇到一个问题&#xff0c;记录一下&#xff1a; 问题&#xff1a;由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本&#xff0c;请添加处理程序。如果应下载文件&#xff0c;请添加 MIME 映射。 WindowServer2012服务器&…