ASP.Net网站多语言的实现

ASP.NET网站多语言的实现

    在大中型网站中,有时需求将网站做成多个语言的版本,以适应在不同地区上线运营的需求。要求能够根据网站维护人员在后台的配置来显示不同语言版本。

    由于在项目中用到了这种功能,因此将实际应用的方式总结一下,希望能让大家和我自己都能够有所收获。

一.网站实现多语言的主要方面:

    在将网站做成一个完整的多语言版本时,主要有两方面的要求:1.页面Html中文字的多语言支持;2.JS提示信息(如alert,confrim等)的多语言支持。下面来分别说明一下这两个方面的具体实现:

1.页面中.Html文字的多语言支持:

    这里实现的是对页面上的控件(如Label)中的文字实现多语言支持。只需要应用DotNet中的区域化机制即可,即生成资源文件,然后在WebConfig中配置即可,网上详细说明的文章很多,因此这里只是简单的说明一下实现。

实现步骤:

1.1.添加资源文件

    首先使用一种语言正常完成页面,然后切换到页面的设计视图,在【工具】选单下找到【生成本地资源选项】(注意:此选项只有在网页的设计视图下才会呈现),如图:

clip_image002[1]

    稍等片刻,VS在同一级目录下会自动为页面生成相应的资源文件,并给页面中的html标签添加资源文件的读取标记(meta:resourcekey="lblNoteResource1)。自动生成的资源文件位于aspx页面的同级目录下的App_LocalResources文件夹下,命名方式为“页面名称+.aspx.resx”(如:Indedx.aspx.resx)。此时有几个需要注意的地方:

    (1) 生成资源文件以后,VS会在页面的[<%@ Page]标签下自动添加两个属性: culture="auto"和uiculture="auto"。这两个属性的作用是使页面优先跟据浏览器的语言设置自动加载相应语言的资源文件及时间货币等显示方式,因此我们需要将这两个属性删除,以保证页面按照我们在WebConfig中的配置来显示。

    (2) 对于页面中的非服务器端控件,(即input等传统html控件),无法自动生成资源文件,需要手动添加meta:resourcekey标记,并将其添加到资源文件中。(这也是比较头疼的一个地方,不知道大家是如何解决的,如果有好的方式,还请不吝赐教)。添加时还需要保证标签中都有runat="server"标记,否则html标签读取不到相应的资源文件。

    (3) 生成的资源文件为默认资源文件,当系统找不到配置的资源文件时,会去读取默认资源文件

    资源文件生成完之后,我们需要手动添加多种语言的资源文件,将,例如,添加繁体版的资源文件,则添加Indedx.aspx.zh-TW.resx.命名规则为刚才生成的默认资源文件名中的aspx与resx中添加区域代码如,台湾为(zh-TW).因为资源文件本质上是xml,所以建议使用VS中的XML编辑器来打开编辑。

1.2.添加WebConfig节点

    在<system.web>节点下添加节点<globalization culture="zh-TW" uiCulture="zh-TW"/>,其中uiCulture的值表示页面读取的哪个资源文件,为区域代码;culture则代表当前网站的区域文化信息,如时间,货币格式等的显示方式。

2.JS提示及显示信息(如alert,confrim等)的多语言支持

这一部分处理的时候,使用过两种方式,一种是借用Ajax方式来实现,第二种使用js读取XML的方式。区别就是第一种每次js提示时需要到服务器端来读取xml,会加重服务器的负担,因此后来实际中改用了第二种方式。

这种方式的实现步骤:

2.1. 用JS获取网站语言设置

网站当前的语言设置放在WebConfig中,但是可能是由于安全原因的限制,没能用JS读取到WebConfig中的相关配置项信息,因此绕了一下:当网站启动时,先将语言配置从WebConfig读出来,放入一个XML文件,然后用js去读取此文件,获取当前网站的应显示何种语言。具体实现如下:

先在Global.asax中读取标识,并存入XML.

void Application_Start(object sender, EventArgs e)

{

WriteLanguagekeyToXML();

………………………

}

/// <summary>

/// 將判斷大陸版本或臺灣版本的標志寫入Web.xml add by bai_clong

/// </summary>

private void WriteLanguagekeyToXML()

{

//System.IO.FileStream fs = new System.IO.FileStream("/JS/JSXML/Web.xml",System.IO.FileMode.);

System.Xml.XmlDocument xmldoc = new System.Xml.XmlDocument();

//xmldoc.Load(HttpContext.Current.Server.MapPath(filePath + fileName));

System.Web.UI.Page pg = new Page();

string lastFilePath = System.AppDomain.CurrentDomain.BaseDirectory;

lastFilePath += "JS\\JSXML\\Web.xml";

if (!System.IO.File.Exists(lastFilePath))

{

CreateWebXml(lastFilePath);

}

xmldoc.Load(lastFilePath);

System.Xml.XmlNode xmlnode = xmldoc.SelectSingleNode("/configuration/add[@key=’languagekey’]");

if (!xmlnode.Attributes["value"].Value.Equals(System.Configuration.ConfigurationManager.AppSettings["languagekey’"].ToString()))

{

xmlnode.Attributes["value"].Value = System.Configuration.ConfigurationManager.AppSettings["languagekey’"].ToString();

xmldoc.Save(lastFilePath);

}

}

/// <summary>

/// 創建WEB.XML文件

/// </summary>

/// <param name="filePath">文件路徑</param>

private void CreateWebXml(string filePath)

{

System.Xml.XmlDocument xmlDoc=new System.Xml.XmlDocument();

System.Xml.XmlDeclaration declaration = xmlDoc.CreateXmlDeclaration("1.0", "utf-8","yes");

xmlDoc.AppendChild(declaration);

System.Xml.XmlElement rootNode = xmlDoc.CreateElement("configuration");

System.Xml.XmlElement xmlNode = xmlDoc.CreateElement("add");

System.Xml.XmlAttribute xmlKey = xmlDoc.CreateAttribute("key");

xmlKey.Value = " languagekey’";

xmlNode.Attributes.Append(xmlKey);

System.Xml.XmlAttribute xmlValue = xmlDoc.CreateAttribute("value");

xmlValue.Value = "0";

xmlNode.Attributes.Append(xmlValue);

string commentString = FRIMYLEC.Library.Model.Entity.Common.EventMessage.GetEventMessage(FRIMYLEC.Library.Common.CommonString.WebXmlCommentString);

System.Xml.XmlComment comment = xmlDoc.CreateComment(commentString);

rootNode.AppendChild(comment);

rootNode.AppendChild(xmlNode);

xmlDoc.AppendChild(rootNode);

xmlDoc.Save(filePath);

}

2.2 将JS需要显示的文字及提示信息提取到XML:

    将JS需要显示的文字提取出来到XML,也要根据语言做成多个文件,放在网站目录下,不同语言的文件的命名可以自己定义,如图:

clip_image004

    以语言为简体和繁体为例,其中AlertMessage.xml为简体内容,AlertMesage_TW为繁体内容,文件内容:

简体:

<?xml version="1.0" encoding="utf-8" ?>

<alertmessage>

<!--Modules\WorkFlowTemplete\AuditRecordQuery.aspx Begin-->

<add key="ApplicationCodeNotExist" value="对象代码不存在,请输入正确的对象代码!"></add>

<!--Modules\WorkFlowTemplete\AuditRecordQuery.aspx End-->

………………………….

繁体:

<?xml version="1.0" encoding="utf-8" ?>

<alertmessage>

<!--Modules\WorkFlowTemplete\AuditRecordQuery.aspx Begin-->

<add key="ApplicationCodeNotExist" value="物件代碼不存在,請輸入正確的物件代碼!"></add>

<!--Modules\WorkFlowTemplete\AuditRecordQuery.aspx End-->

……………………….

2.3使用JS读取当前语言的XML文件

这部分JS代码可以放在单独的JS文件中,在需要实现多语言的页面中引用即可。

具体代码如下:

//獲得對應的漢字, js中调用此方法获取文字(message为Key)

function getMessage(message)

{

loadFile();

String.prototype.trim=function()

{

return this.replace(/(^\s*)|(\s*$)/g,"");

}

return xmlDoc.selectSingleNode("alertmessage/add[@key='"+message.trim()+"']").getAttribute("value");

}

//加載xml文件

function loadFile()

{

getLanguagekey();

createDocumentObject();

if(languagekey=="1")

{

xmlDoc.load(getRootPath()+"/JS/JSXML/AlertMessage_TW.xml");

}

else if(languagekey=="0")

{

xmlDoc.load(getRootPath()+"/JS/JSXML/AlertMessage.xml");

}

}

//firefox並不支援selectSingleNode和selectNodes方法;下面兩段是用XPath來解決firefox

//模擬selectSingleNode和selectNodes方法

function createSelectSingleNodeAddSelectNodesMethod()

{

XMLDocument.prototype.selectSingleNode = Element.prototype.selectSingleNode = function (xpath){

var x = this .selectNodes(xpath)

if ( ! x || x.length < 1 ) return null ;

return x[ 0 ];

}

XMLDocument.prototype.selectNodes = Element.prototype.selectNodes = function (xpath){

var xpe = new XPathEvaluator();

var nsResolver = xpe.createNSResolver( this .ownerDocument == null ?

this .documentElement : this .ownerDocument.documentElement);

var result = xpe.evaluate(xpath, this , nsResolver, 0 , null );

var found = [];

var res;

while (res = result.iterateNext())

found.push(res);

return found;

}

}

//創建文檔對象

function createDocumentObject()

{

//ie

if((xmlDoc==null) && window.ActiveXObject)

{

xmlDoc=new ActiveXObject("Microsoft.XMLDOM");//Msxml2.DOMDocument

}

//FF

else if(document.implementation && document.implementation.createDocument)

{

xmlDoc=document.implementation.createDocument("", "", null);

createSelectSingleNodeAddSelectNodesMethod();

}

xmlDoc.async=false;

}

//獲得大陸或臺灣簡繁體標志信息

function getLanguagekey()

{

var configDoc=null;

//ie

if((configDoc==null) && window.ActiveXObject)

{

configDoc=new ActiveXObject("Microsoft.XMLDOM");//Msxml2.DOMDocument

}

//FF

else if(document.implementation && document.implementation.createDocument)

{

configDoc=document.implementation.createDocument("", "", null);

createSelectSingleNodeAddSelectNodesMethod();

}

configDoc.async=false;

configDoc.load(getRootPath()+"/JS/JSXML/Web.xml");

var languagekeyNode=configDoc.selectSingleNode("configuration/add[@key='languagekey']");

languagekey=languagekeyNode.getAttribute("value");

}

2.4 在JS获取相应的文字信息:

    完成了以上功能之后,js中的调用就比较简单了:

    例如:

document.getElementById("Label2").innerHTML=getMessage("XMLkey");

alert(getMessage("XMLkey"));

confirm(getMessage("XMLkey"));

二.总结:

    在实现多语言的过程中,除了以上两个方面,可能还会遇到其它一些问题,比如时间,货币等格式通常要配套显示等等,有些也可以应用DotNet中已有的国际化支持来实现。对于语言的显示上,上面两个方面的解决应该可以把主要的问题解决掉。不知道大家在项目中有什么更好的方案,尤其是对于JS的国际化,如果有的话,还请大家不吝赐教...

转载于:https://www.cnblogs.com/lansetiankong/archive/2010/07/30/1788790.html

Asp.net core api 配置多语言 前提:我这里是通过对应的参数来判断name字段展示数据库的name /name-en/name-jp等字段,不是自动更改的。(简体中文(zh-cn),日语(ja),英语(en-us),繁体中文(zh-tw))BaseQuery实体 //这个是接口请求参数,可在自己对应的文件添加 lang。通过请求参数lang(语言)参数 ,决定字段显示(数据库设置了字段)最后运行项目就可以根据你选择的主题切换字段对应的语言。进行设置 对应的语言用来判断字段的值对应哪个语言。需要在控制器接口加上过滤器的名字。 阅读详情

相关推荐

C# ASP.NET 多语言网站实现最佳实践完整示例

构建一个多语言网站,技术只是基础。真正的挑战在于思维方式的转变——我们是否愿意站在不同文化背景的用户角度去思考问题?当你看到一位日本用户顺利填写了符合本地习惯的地址表单,或是一位法国客户称赞你的界面“très élégant”时,你会发现,这一切努力都值得。❤️而这,正是 ASP.NET 赋予我们的力量:用一行行代码,连接世界的每一个角落。🌍💻本文还有配套的精品资源,点击获取简介:在面向全球用户的Web开发中,多语言支持至关重要。

weixin_35705784的博客 1084

asp.net i18n 支持

记录防止忘记。

一壁蔷薇枝 1642

基于asp.net+Web+mvc4.0 EasyUI 最新 权限管理 开源 MES建材管理系统源码

基于asp.net+Web+mvc4.0 EasyUI 最新 权限管理 开源 MES建材管理系统源码。

ASP_NET支持多语言

【全文】ASP.NET 2.0中实现:1.使用工具自动生成本地化资源(LocalResources)首先建立一个WEB工程,如图所示:双击Default.aspx,切换到[设计]视图,从工具箱里拖一个Button进来。点击菜单中的[工具]->[生成本地资源],如图所示:这时发现在解决方案方案视图里自动增加了一份本地资源,如下图所示:切换到属性视图,可以看到Text和ToolTip都被加上了

liusen5555的专栏 1141

ASP.NET环境实现多语言详细介绍

多语言实现详解 附件描述: MutiLangDemo1.rar为演示项目文件,下载后可直接运行。 MutiLangTool.rar为一个辅助小工具,将会在你选择的目录下为每个aspx页面生成资源文件名并放在创建的App_LocalResources目录中,资源文件并没有将相应的页面的资源(因各种原因...

weixin_34345753的博客 221

asp.net core 多语言解决方案

引用自:https://www.cnblogs.com/ives/p/language.html 这里本文使用Microsoft.AspNetCore.Localization来实现多语言的解决方案 默认是包含这个包的,所有不需要再额外安装 首先需要注入我们需要的服务 1.在startup.cs中注入 public void ConfigureServices(IServiceCollection services) { //设置语言包文件夹名称 ...

zouzh的专栏 2352

ASP.NET网站实现多语言版本 【转】

一、项目概述1、目的利用资源文件解决网站多语言版本的问题,在制作网站的时候,经常会遇到多种语言的版本,早期在asp的系统当中,很多网站开发师都会用传统的方法来开发,就是将同一套程序复制两份,功能是实现了,但往往后期的维护带来很大的麻烦,而在asp.net的时代,做这样的事情,原来是那么的简单.2、概念 资源文件是 XML 文件,其...

weixin_30505043的博客 195

Asp.net MVC2实现中英多语言支持网站(转自forgetu)

  本文基于ASP.NET MVC2说一下网站如何支持中英多语言技术。   新建一个asp.net mvc 2 项目,先看一下mvc 2项目的初始结构:    Views 用于呈现用户界面,通常是aspx和ascx或html文件,这里一般不涉及程序的逻辑处理。 Scripts 用于存在js脚本文件。 Models 中包含了程序的核心数据,这...

weixin_30707875的博客 182

ASPNET2.0网站实现多语言方法

1.     跟以前一样做界面,只是注意,把所有需要有多语言界面的文字都用label来做2.     做完以后,在Solution Explorer里选中这个文件,选Tools->Generate Local Resource3.     你会发现生成了一个目录,App_LocalResources;这个目录里多了一个resx的文件。比如你的aspx文件是default.aspx,它就会生

踏实做事,诚信做人 1196

Asp.net MVC 2 网站轻松实现多语言支持

  本文短地址:http://zdd.me/aspnetmultilingual   现在的网站大多数都支持多语言,为不同语言的用户访问网站提供方便。我在前几天用asp.net mvc 2 做了一个网站同时提供了中文和英文的支持,在这里将我的网站多语言实现方式与各位网友分享一下,也希望有更好的实现方式的网友能够赐教。   新建一个asp.net mvc 2 项目,先看一下mvc 2项...

weixin_30455067的博客 116

实现多语言网站Asp.Net 2.0)

Asp.Net 2.0中可以重写页面代码文件中的InitializeCulture()来设置页面UICulture。例如: 1protectedoverridevoidInitializeCulture() 2{ 3if(Session["UICulture"]!=null) 4{ 5Page.UI...

weixin_30325487的博客 69

Asp.net中使用资源文件实现网站多语言

首先需要新建一个ASP.NET Web Application.然后右键项目文件Add->Add ASP.NET Folder->App-GlobalResources. 新建好资源文件夹后,向文件夹中添加一个resx文件,我这里是添加一个LocalText.resx文件。 如上图所示,设置Name和Value的值。 保存后复制LocalText.resx,粘贴到App_G...

weixin_34061482的博客 172

asp.net2.0多语言版本网站软件的实现--青蛙非王子(lostfrog)

1.     跟以前一样做界面,只是注意,把所有需要有多语言界面的文字都用label来做,当然gridview等等也可以2 .   做完以后,在vs2005里打开这个文件(注意:一定是在设计模式下,否则生成本地资源将会灰掉),选工具->生成本地资源3 .   你会发现生成了一个目录,App_LocalResources;这个目录里多了一个resx的文件。比如你的aspx文件是default

.net成长手札 2491

【C#.NET】C#创建多语言网站

1.这里只是一些从书中摘录的一些简单的实例,不过大同小异,应该都是可通用的。记录一下。。。2.在需要添加多语言页面的设计视图中,选择"工具"--"生成本地化资源".(解决方案资源管理器中的App_LocalResources就是生成的本地资源文件)在App_LocalResources中会多出一个Default.aspx.resx文件,为创建多语言网站我们需要为Default.aspx.res...

weixin_30284355的博客 278

ASP.NET2.0中实现多语言解决方案的完整细节

很多网站都有多种语言切换的功能,典型的是中、英文两种语言,本文介绍在ASP.NET实现中、英文两种语言的完整细节。一、打开Visual Studio 2005并新建一个解决方案,我们起名为MyWeb。二、在MyWeb上新建一个网站,如下图所示:三、为新建的网站上添加web.config文件,并在appSettings中加入DefaultCulture配置节:  appSe

雪尘的专栏 2916

.Net码农】Asp.net 2.0实现多语言

http://www.cnblogs.com/yongheng178/archive/2008/08/14/1267482.html Asp.net 2.0实现多语言 1.新建一个asp.net web应用程序 2.创建的项目如下图所示 3.右击web项目名称,添加一个全局资源文件夹"app_GlobalResources" ,这个是asp.net 2.0特

能看代码的CrackLibby 621
上一篇: 样板项目
下一篇: ASP.net 中的View State问题
weixin_30763397
博客等级 码龄11年 104粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值