惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Hacker News: Front Page
A
About on SuperTechFans
腾讯CDC
罗磊的独立博客
博客园 - Franky
Last Week in AI
Last Week in AI
博客园_首页
酷 壳 – CoolShell
酷 壳 – CoolShell
量子位
小众软件
小众软件
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
爱范儿
爱范儿
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Register - Security
The Register - Security
云风的 BLOG
云风的 BLOG
L
LangChain Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
D
Docker
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Recorded Future
Recorded Future
Vercel News
Vercel News
Martin Fowler
Martin Fowler
WordPress大学
WordPress大学
J
Java Code Geeks
有赞技术团队
有赞技术团队
V
V2EX
IT之家
IT之家
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
雷峰网
雷峰网
Jina AI
Jina AI
B
Blog RSS Feed
H
Help Net Security
N
Netflix TechBlog - Medium
Latest news
Latest news
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 司徒正美
Y
Y Combinator Blog
人人都是产品经理
人人都是产品经理
Stack Overflow Blog
Stack Overflow Blog
C
Cisco Blogs
Microsoft Security Blog
Microsoft Security Blog
阮一峰的网络日志
阮一峰的网络日志
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
大猫的无限游戏
大猫的无限游戏
C
Check Point Blog
P
Proofpoint News Feed
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
N
News and Events Feed by Topic
T
Threatpost

博客园 - Shake. Wang's blog

解决sqlserver2005中文版与vs2005的WebApplicationProject的冲突问题 终极解决MagicAjax提交中文表单乱码的问题 Google的使命 - Shake. Wang's blog MagicAjax的中文问题 给web用户控件自定义后台事件 [导入]再谈css--如何针对不同位置的元素使用不同的风格 [导入]当css遇到xhtml--从display:inline到float:left - Shake. Wang's blog [导入][转]台湾鸿海总裁郭台铭给员工的一封邮件,很有借鉴意义 [导入]Unable to get the project ile from the web server错误的解决方法 [导入]ASP.NET 2.0 的内部变化 [导入]VSTS新鲜感触。。。 Blogger 的传说 超女运动终于谢幕了 基于MasterPage和UserControl的网站架构模式 也说: 谁来重燃开发者的激情 cs第二次整容... 寻找丢失的iexplore进程 伟大架构师的秘密 抗战60周年祭
WebApplication的多国语言实现思路
Shake. Wang's blog · 2005-08-19 · via 博客园 - Shake. Wang's blog

互联网的无国界性,使得任何有国际化运作目标的webapplication(网站也属于webapplication的范畴)都必须要关注多国语言的版本处理问题。这个问题必须在架构初期就应该考虑的到。但具体如何入手,目前一些成熟的开源项目已经给我们提供了一个很好的参考,CS是其中一个很好的例子。

一般情况下,需要进行多国语言处理的,主要有几个方面:程序中的页面提示和操作描述文字、出错信息、出错后跳转的解释页面、帮助页面、页面中的任何导航信息等。可以把这些通称为文字资源,鉴于.net对xml的强大支持,可以考虑将上述的一些操作提示和出错信息使用xml结构文件存储,而解释页面帮助页面则分别制作成html页面,放到单独的文件夹中。这样就构成了一个语言包,那么,同理可以制作其他语言的语言包,分别以语言的名字来命名。

有了资源,那么只要再构造成一个资源管理器即可实现对不同资源内容的读取,这个ResourceManager仅仅是对xml文件的读取,可以参照asp.net 的configuration来做。我们来看看cs的resource.xml结构

<?xml version="1.0" encoding="UTF-8" ?> <root> <!-- Main Navigation --> <resource name="weblogs">博客</resource> <resource name="forums">论坛</resource> <resource name="photos">相册</resource> <resource name="admin">管理</resource> <!--....--> </root>

可以看到这个结构很简洁,同样它把出错信息仿照windows的errorcode做在另外一个message.xml文件里,格式如下

<?xml version="1.0" encoding="UTF-8" ?> <root> <message id="1"> <title>无权限登录</title> <body>您不是超级管理员.</body> </message>

而resourcemanager类实现就是用来方便的管理这些结构化的信息,中间的具体实现就不详细介绍了,无非就是读取一下XML信息返回字符串型值,那么封装后的类,我们可以在需要显示提示信息的时候很方便的来调用这些静态的方法

throw new Exception(ResourceManager.GetString("exception_norssurl","zh-CN"));

现在要考虑的一点是:是根据用户的浏览器来动态切换语言,还是已知用户的使用环境在web.config里配置使用的语言包。其实,这两种做法可以综合在一起,在asp.net的web.config里面配置默认的语言包,然后再根据用户的机器信息来判断使用何种语言。

那么,怎么实现动态切换呢?可以再提供一个language.xml,将所有的语言包所在的文件夹名称配置进来,然后通过程序读取这个配置,就能动态的找到所需的语言包地址,然后再在指定的语言包里读取指定的信息。在看一下这个languages.xml的结构:

<?xml version="1.0" encoding="UTF-8" ?> <root> <!-- Specify enabled languages here --> <language name="U.S. English" key="en-US" /> <language name="简体中文" key="zh-CN" /> <language name="繁體中文" key="zh-TW" /> <language name="Danish" key="da-DK" /> <language name="Hellenic" key="el-GR" /> </root>

至此,整个webapplication即可实现很方便的多国语言切换了。呵呵,现在看来是不是很简单,当然,多国语言的实现还有其他的方法,比如直接建立资源文件,然后利用.net类库中读取资源的方法来实现,反正方法都是大同小异,不过cs这种多国语言处理模式可以直接把现有的代码和xml结构等直接拿过来用到其他任何webapplication上,几乎是百分之百重用 。