.NET中实现网站的国际化

news/2024/5/20 5:35:13/文章来源:https://blog.csdn.net/XuWei_XuWei/article/details/36423701

本文适当的修改了原文,,特此说明

原文地址:http://dotnet.9sssd.com/aspnet/art/949

网站在开发的过程中需要实现多语言版本,我们暂且认为有英语和汉语两个版本。网站结构包括,UI过程,rest服务,以及相应的js,各个部分我们都要实现多语言,本文实现的是根据用户请求浏览器设定的语言,来加载国际化资源实现国际化,不是网页中多语言的按钮切换的效果,但是在部署过程中要能实现多与语言配置。

首先我们出场的是资源文件,C#的项目实现本地化和区域化,我们要用到资源文件。

添加资源文件夹

添加资源文件夹

添加资源文件项

添加资源文件项

这里文件的命名最好能规范,如英文版本建议 lang.en.resx,汉语版本建议用lang.zh-cn.resx。

实际使用效果

ASP.NET 一步一步实现网站的多语言版本

资源文件夹由各个语言版本的资源文件组成,资源文件以.resx后缀和.cs后缀成对出现,其实质是一定规则的Xml文件。这个很容易理解,应用程序通过资源文件实现多语言版本的切换,这个资源文件自然保存着语言版本的键值对应关系,如果你还不太理解的资源文件的话,可以用记事本打开.resx文件,为了真正看到资源文件的核心数据,我们先提前添加一个资源。

ASP.NET 一步一步实现网站的多语言版本 - 1

.resx文件

以root为根节点的xml文件,刚才我们添加的资源表示为:


1 <data name="website" xml:space="preserve">
2 <value>cnblogs</value>
3 </data>

我们操作.resx文件就是要形成多个data节点。

接下来我们要添加键值对应关系了,如果键值对应对比较少,我们可以通过上图中的图形化界面操作,但是既然是网站,需要翻译的内容必定会很多,难道我们一个一个添加吗?

既然核心文件就是这个data节点,我们只要保证data节点补充完整即可。

这里我们提供两种方法供参考。

1、可以先把键值对事先批量保存在数据库中,再通过读取数据,使用程序批量生成data节点集合,补充完整即可。这样做的好处是可以把数据保存下来,省去手工添加的繁琐。

其实在实际开发过程中,翻译内容键是会不断增加调整的,并且资源文件不允许重复键,也就意味着要不断的修改数据和程序。总之,这不算一种科学的方法。

2、我们需要发现一个工具,vs早已经准备好了,Resgen

它可以实现txt文件与.resx文件的相互转化,准确快速:

Resgen

上图中的txt文件格式可以是这样。

website=网站

service=服务

以上两种方法各有利弊,我个人还是推荐第二种方法。

生成资源文件是实现多语言版本的第一步,有些需要注意的地方:

1)键的名字不能重复,最好是有意义的无空格及特殊字符的。

2)多个语言版本的文件中需要都有指定的键。

即 :


1 <data name="website" xml:space="preserve">
2 <value>cnblogs</value>
3 </data>

这个节点需要在lang.en.resx和lang.zh-cn.resx文件中都存在,只是value值不同,否则在读取时会出现混淆。

读取使用资源文件

资源文件整理完以后,我们需要替换所有需要翻译的内容为资源文件变量,无论是前台aspx页面还是cs文件都可以按照以下格式替换:


1 <%=Resources.lang.website%>

这个时候可以体现键名字规范的好处,智能提示可以清晰的找出,并且不会出现_等符号。

读取资源文件中的值更多的方式参考下面的网址:

http://msdn.microsoft.com/zh-cn/library/ms227427(v=vs.100).aspx ,,asp.net网页资源文件概述,在网页中使用资源小节

http://msdn.microsoft.com/zh-cn/library/ms227982(v=vs.100).aspx ,,编程方式检索资源文件

js中实现多语言

js实际上与资源文件是没有关系的,所以以上 的资源文件在js部分不能直接使用。既然js也需要有多语言版本,所以js也必定有自己的"资源文件"--json

我们借助json存储需要翻译的js提示语言,value等值的对应关系。

两个语言版本,我们生成3个js文件,以备后用:

js中实现多语言

每个文件中存放的相应的json数组,翻译内容键值对应。

var note { website:"博客园",sure:"确定"}

使用:

在需要使用的js文件中引入lang.en.js和 lang.zh-cn.js,做相应的替换即可。


1 ///<reference path="/Jscript/Translate/lang.en.js" />
2 ///<reference path="/Jscript/Translate/lang.js" />
3 ///<reference path="/Jscript/Translate/lang.zh-cn.js" />

note.sure

为了代码规范我建议在生成json文件时加上注释:


1 ///<param name="TianJia" type="String">添加</param>
2 Add:"Add",

js多语言翻译的关键是js中需要翻译的内容被相应的js文件中的json值替换。比如翻译英文版的 "确定",在程序中我们必须读到相应的 lang.en.js 文件,这样才可以取到sure值。

我们可以通过cookie来决定加载哪个翻译的js"资源文件",也可以部署时直接把相应的js转移到 lang.js,而删除其它不用的js翻译文件。这也是以上我说生成3个js文件的原因。

说完了js的配置,我们再返回头来说说资源文件的配置。

程序如何决定网站启动时使用哪个资源文件?

资源文件由在webconfig的<system.web>下globalization节点设置,打开相应的本地化节点即可:


1 <globalization culture="en-US" uiCulture="en-US"/>
2 <!--<globalization culture="zh-CN" uiCulture="zh-CN"/>-->

这样就实现了网站的多语言配置,如果要实现网页切换国际化,需要在cookie和Global.asax继续处理

PS:

其实网站国际化,从实现效果来看,有这么3中

1.网页中没有出现 简体中文 繁体中文 英文 等语言的切换按钮,就是根据用户请求信息头里面带的信息,网站服务器自动根据附带的标识加载对应的国际资源文件(本文)

2.网页中出现上述的切换按钮,但多个语言布局是不一样的,因为不同字符,占位是不一样的,汉语翻译成英文,很可能导致原来的布局完全变形,这种情况就是每个语言的网站都是一个独立的站点,第一次请求根据用户请求传递的标识符,转向到不同的站点,用户在页面切换语言,则转向相应语言的站点即可,每个站点负责一个语言版本的网站就行了

3.网页中出现上述按钮,布局也是一样,就是上文说的需要在上文的基础上,需要在cookie和Global.asax继续处理的这种情况,这种国际化,需要在上文的基础上,额外做的工作是,用cookie记下用户选择的语言,请求时,会附带上用户指定的语言,然后在Global.asax中的request事件中,指定加载哪个国际化资源文件(显式设置 Thread.CurrentUICulture 属性设置为特定区域性,无论用户的浏览器或操作系统语言,资源管理器(ResourceManager)总是检索该区域性的资源),不再让web服务器自动加载,即可

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

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

相关文章

人生苦短,我用Python(二)— 爬取会议网站 EasyChair Smart CFP

寒假留校帮学长写了个爬虫&#xff0c;抓取会议网站上一些CFP信息。想着把一些知识点、坑点记下来&#xff0c;一来做个小总结给工作收收尾&#xff0c;二是以后再遇到好从容应对。 这是我写的第二个比较完善的爬虫了&#xff0c;比第一个要简单许多&#xff0c;完全过程化的代…

由12306.CN谈谈网站性能技术http://coolshell.cn/articles/6470.html

由12306.CN谈谈网站性能技术 2012年01月16日 陈皓 评论 340 条评论 163,061 人阅读 12306.cn网站挂了&#xff0c;被全国人民骂了。我这两天也在思考这个事&#xff0c;我想以这个事来粗略地和大家讨论一下网站性能的问题。因为仓促&#xff0c;而且完全基于本人有限的经验和…

搭建VueJS2.9+ElementUI单页面网站,编写导航页,导航栏跳转、切换

对于一个单页面应用来说&#xff0c;导航页是至关重要的一个页面&#xff0c;所有的组件都会在这个页面里进行显示。先看效果图&#xff0c;文章最下边有我的模板源代码下载路径。接下来我们就开始进行导航页的开发。 1、安装vue-router 搭建vue环境时装过的忽略此步骤。在…

大型网站系统架构分析

本文转载自博客 Mainzs Blog 感谢作者的辛勤劳动成果过 大型网站系统架构分析 千万级的注册用户&#xff0c;千万级的帖子&#xff0c;nTB级的附件&#xff0c;还有巨大的日访问量&#xff0c;大型网站采用什么系统架构保证性能和稳定性&#xff1f; 首先讨论一下大型网站需…

大型网站架构演变和知识体系

&#xff08;原文&#xff1a;http://www.blogjava.net/BlueDavy/archive/2008/09/03/226749.html&#xff09;之前也有一些介绍大型网站架构演变的文章&#xff0c;例如LiveJournal的、ebay的&#xff0c;都是非常值得参考的&#xff0c;不过感觉他们讲的更多的是每次演变的结…

大型网站架构

这里转载几篇关于大型网站架构方面的内容&#xff0c;以便日后细细品读。一下内容均来自Mainzs Blog 架构设计之性能设计经验 性能(performance)设计非常重要&#xff0c;对于服务器端实时交易系统来说系统性能的重要性不言而喻&#xff0c;对客户端软件来说性能好的软件也…

IIS6.1无法发布vs2010开发的网站若干问题的解决方案

1、未能加载文件或程序集“XXX”或它的某一个依赖项。系统找不到指定的文件 基本的思路是缺少某个引用的文件&#xff0c;出现类似的错误有多种情况。说一下我这里出现这种情况的原因 由于做项目时web.config文件需要一些配置&#xff0c;比如说Form认证&#xff0c;所以我直接…

大型网站系统架构演化之路

前言 一个成熟的大型网站&#xff08;如淘宝、京东等&#xff09;的系统架构并不是开始设计就具备完整的高性能、高可用、安全等特性&#xff0c;它总是随着用户量的增加&#xff0c;业务功能的扩展 逐渐演变完善的&#xff0c;在这个过程中&#xff0c;开发模式、技术架构、设…

简单登录网站的搭建(未完成)

简单登录网站搭建 题干&#xff1a; 自己写一个登陆页面&#xff0c;并能实现对接数据库&#xff0c;判断用户名与密码是否正确。 步骤&#xff1a; 我这里并没有完整的搭建成功 只是进行了前后端代码的编写 &#xff08;PHPSTUDY的环境没搭建好 没能成功的连接上数据库&am…

推荐四个在线任务管理网站

推荐四个在线任务管理网站 Posted on 2008-01-11by David Zou 现在通过网上协作完成的任务是越来越多了。 Capote movies 网络协作的优势不言而喻&#xff1a; 不需要在乎对方的学历、年龄、性格、相貌等等&#xff0c;只要你们有想要完成同一件事情&#xff0c;就可以进行网络…

在RHEL8的系统上搭建网站

在rhel8的系统上搭建网站&#xff1a;该网站ip地址主机位为11&#xff0c;设置documentroot为/www/任意字母&#xff0c;网页内容为&#xff1a;my name is… 准备工作&#xff1a;配置yum源 更新httpd 开始操作&#xff1a; 启动服务&#xff1a; 查看状态&#xff1a; 查…

基于ASP.NET和Sql Server实现的读书平台网站

1 课程设计目的 综合运用软件工程思想、面向对象分析和设计方法、ASP.NET、数据库等基础知识&#xff0c;完成一个B/S架构的Web应用程序,掌握应用ASP.NET技术开发中小型网站的相关知识和技术。 2 课程设计内容 针对一个咸鱼读书网系统项目需求&#xff0c;利用数据库管理系统…

基于HTML实现的游戏专题网站

摘 要大观园系列是游民星空出品的向广大用户提供了解新上市游戏的方便途径&#xff0c;上玩家直观的看到游戏界面&#xff0c;内容&#xff0c;人物设定&#xff0c;剧情等重要信息&#xff0c;促使玩家购买。提供方便的同时&#xff0c;也增加了网站浏览量。大观园&#xff1a…

小说网站-包括PC版本和移动版本

一、网站简介1.1 设计思路根据一般人阅读小说的顺序&#xff0c;利用了HTML5、CSS3制作一个普通pc端和跨平台移动端。PC端&#xff1a;小说的首页、小说某类具体信息、某小说详细信息页移动端&#xff1a;小说的首页、小说分类、小说某类具体信息、小说详情1.2 网站的主体功能小…

好客租房67-render-props模式-3演示mouseover的组件的复用

//导入react import React from react import ReactDOM from react-dom//导入组件 // 约定1&#xff1a;类组件必须以大写字母开头 // 约定2:类组件应该继承react.component父类 从中可以使用父类的方法和属性 // 约定3:组件必须提供render方法 // 约定4:render方法必须有返回值…

10天学会Web标准建站

目录&#xff1a; 使用Web标准建站第1天&#xff1a;选择什么样的DOCTYPE 使用Web标准建站第2天&#xff1a;什么是名字空间 使用Web标准建站第3天&#xff1a;定义语言编码 使用Web标准建站第4天&#xff1a;调用样式表 使用Web标准建站第5天&#xff1a;XHTML代码规范 使用We…

阿里云CDN网站违规URL屏蔽访问处理方案

阿里云CDN网站违规URL屏蔽访问处理方案 今天收到阿里云cdn的通知&#xff1a; 尊敬的****XXX.com&#xff1a;您的网站URL&#xff1a;http://XXXX.XXXXX.com/XX/XXX/XXX.apk涉及违法不良信息&#xff0c;违反了相关服务协议和《互联网信息服务管理办法》第十五条规定&#x…

提高网站速度的最佳实践

相信互联网已经越来越成为人们生活中不可或缺的一部分。ajax&#xff0c;flex等等富客户端的应用使得人们越加“幸福”地体验着许多原先只能在C/S实 现的功能。比如Google机会已经把最基本的office应用都搬到了互联网上。当然便利的同时毫无疑问的也使页面的速度越来越慢。自己…

大型网站架构演变和知识体系

在这篇文章中将阐述一个普通的网站发展成大型网站过程中的一种较为典型的架构演变历程和所需掌握的知识体系&#xff0c;希望能给想从事互联网行业的同学一点初步的概念。 之前也有一些介绍大型网站架构演变的文章&#xff0c;例如LiveJournal的、ebay的&#xff0c;都是非常值…