`
zhouxin464585932
  • 浏览: 80517 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

ASP.NET MVC 多语言解决方案

阅读更多
ASP.NET MVC 多语言解决方案()
就一个网站的多语言特性来说,我认为分为两个方面:

1、HTML界面上显示的文字需要多语言

2、HTML界面上JS输出的文字需要多语言

原来在HTML部分直接写的文字都不能直接写要输出的文字,而是要采用标记的方法来替换。JS也是同理。

那么在MVC下怎么能透明的实现多语言呢?所谓透明的实现是指,程序员在开发程序当中,不需要过多的考虑多语言的问题,直接调用一个方法就能实现多语言,而且所要用到的语言文件每个语言一个文件就够了,集中翻译这个语言就完成了多语言的功能。

例如
<html>

<head>

</head>

<body>

多语言输出的文字 //这里就不能直接写中文了,一个好方法是 直接用 <%= Html.Lang("string1") %> 来进行输出

</body>

</html>

这里<%= Html.Lang("clickme") %> 是对 HTMLHelper 进行了扩展,增加了一个 Lang 的方法,参数是需要翻译的资源字符串的Name。

怎么为 HTMLHelper 进行扩展?下面这个类就是增加了的扩展类

Code
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Globalization;

using System.Web.Compilation;
using System.Web.Mvc;
using System.Web.Routing;

namespace System.Web.Mvc {
public static class LocalizationHelpers {
/// <summary>
/// 在外边的 Html 中直接使用
/// </summary>
/// <param name="htmlhelper"></param>
/// <param name="key"></param>
/// <returns></returns>
public static string Lang(this HtmlHelper htmlhelper, string key) {
string FilePath = htmlhelper.ViewContext.HttpContext.Server.MapPath("/") + "Resource\\";
return GetLangString(htmlhelper.ViewContext.HttpContext, key, FilePath);
}
/// <summary>
/// 在外边的 Html 中直接使用,对 JS 进行输出字符串
/// </summary>
/// <param name="htmlhelper"></param>
/// <param name="key"></param>
/// <returns></returns>
public static string LangOutJsVar(this HtmlHelper htmlhelper, string key) {
string FilePath = htmlhelper.ViewContext.HttpContext.Server.MapPath("/") + "Resource\\";
string langstr = GetLangString(htmlhelper.ViewContext.HttpContext, key, FilePath);
return string.Format("var {0} = '{1}'", key,langstr);
}
/// <summary>
/// 在 C# 中使用
/// </summary>
/// <param name="httpContext"></param>
/// <param name="key"></param>
/// <returns></returns>
public static string InnerLang(HttpContextBase httpContext, string key) {
string FilePath = httpContext.Server.MapPath("/") + "Resource\\";
return GetLangString(httpContext, key, FilePath);
}

private static string GetLangString(HttpContextBase httpContext, string key, string FilePath) {
LangType langtype = LangType.cn;
if (httpContext.Session["Lang"] != null) {
langtype = (LangType)httpContext.Session["Lang"];
}
return LangResourceFileProvider.GetLangString(key, langtype, FilePath);
}
}

public static class LangResourceFileProvider {
public static string GetLangString(string Key, LangType langtype, string FilePath) {
string filename;
switch (langtype) {
case LangType.cn: filename = "zh-cn.resources"; break;
case LangType.en: filename = "en-us.resources"; break;
default: filename = "zh-cn.resources"; break;
}

System.Resources.ResourceReader reader = new System.Resources.ResourceReader(FilePath + filename);

string resourcetype;
byte[] resourcedata;
string result = string.Empty;

try {
reader.GetResourceData(Key, out resourcetype, out resourcedata);
//去掉第一个字节,无用
byte[] arr = new byte[resourcedata.Length - 1];
for (int i = 0; i < arr.Length; i++) {
arr[i] = resourcedata[i + 1];
}
result = System.Text.Encoding.UTF8.GetString(arr);

}
catch (Exception ex) {

}
finally {
reader.Close();
}

return result;
}
}

public enum LangType {
cn,
en
}
}
这个类叫 LocalizationHelpers ,公开了 Lang,LangOutJsVar,InnerLang 三个方法,其中 Lang,LangOutJsVar 可以在 Html 界面中直接调用,InnerLang 可以在C#后台使用。

这里使用了 .resx 资源文件,注意这里这个文件需要被编译后才能使用,否则找不到已经增加的项。编译这个可以使用.NET 自带的 ResGen.exe。

上面这个类很简单,就是根据传入的 Session["Lang"] 中的语言类型来做判断,该读那个资源文件(资源文件必须在 Resource 目录下),然后读取所需要的NAME,返回对应的字符串VALUE,VALUE中就是最后要输出的文字了。



在前台的 .aspx 中就可以直接用 <%= Html.Lang("String1") %>来输出了。至于JS的输出,看下面例子

<script language="javascript" type="text/javascript">
<%= Html.LangOutJsVar("msg")%>
function show()
{
alert(msg);
}
</script>

这样就OK了。

如果有的需要在C#中取资源字符串,那么可以使用

ViewData["Message"] = LocalizationHelpers.InnerLang(this.ControllerContext.HttpContext, "Welcome");来输出。

我根据ASP.NET MVC 4做了个DEMO,截图如下

分享到:
评论

相关推荐

    asp.net mvc验证码实现

    ASP.NET MVC是一个强大的Web应用程序开发框架,用于构建动态、数据驱动的网站。在这个场景中,我们关注的是在ASP.NET MVC中实现验证码的功能。验证码的主要目的是防止自动机器人或恶意用户进行非法操作,例如垃圾...

    【ASP.NET编程知识】基于ASP.NET MVC的ABP框架入门学习教程.docx

    ASP.NET MVC ABP框架入门学习教程 一、为什么使用ABP框架 在软件开发过程中,我们遇到了许多重复机械的工作,例如数据持久层实现、日志、ASP.NET MVC、IOC以及自动映射等。这些组件的组合使软件系统的复杂度急剧...

    ext asp.net mvc nhibernate 完整项目示例

    【标签】:“ext asp.net mvc nhibernate 完整项目示例”标签明确了项目的核心技术栈,EXT.NET提供了丰富的UI控件,ASP.NET MVC提供了灵活的架构设计,而NHibernate则是强大的数据持久化解决方案。 【文件名称列表...

    基于ASP.NET MVC 3的企业应用项目总结

    - **多语言支持**: 使用微软官方推荐的多语言解决方案 ##### 架构特点 - **多层架构**: 项目采用了基于.NET平台的多层架构,确保了良好的可维护性和扩展性。 - **前端展现**: 使用了Telerik for MVC组件,提高了...

    ASP.NET MVC 5 框架揭秘.pdf

    ASP.NET MVC 5 是微软开发的一个用于构建动态、数据驱动的Web应用程序的框架,它结合了Model-View-Controller(MVC)设计模式、ASP.NET...通过阅读本书,你将了解到如何利用MVC 5的全部潜力,打造现代化的Web解决方案。

    mvc asp.net 后台模版

    总的来说,“mvc asp.net 后台模版”集合为开发者提供了各种场景下的解决方案,无论是在数据库操作、用户界面设计还是系统安全方面,都能找到适用的模板。通过学习和利用这些模板,开发者可以更高效地构建后台管理...

    Programming Microsoft ASP.NET MVC - Covers ASP.NET MVC2 and Microsoft Visual Studio 2010

    Microsoft Visual Studio 2010是微软发布的一款集成开发环境(IDE),支持多种语言和开发框架,包括ASP.NET MVC2。它提供了一套全面的工具和服务,帮助开发者高效地设计、编码、调试和部署应用程序。 #### 主要功能...

    Apress Pro ASP.NET MVC 3 Framework

    在本书的第一章中,作者详细介绍了微软最初为何创建ASP.NET MVC框架、它与前代和其他替代方案有何不同,以及ASP.NET MVC 3中有哪些新特性。 #### 三、Web开发简史 为了更好地理解ASP.NET MVC的设计理念及其目标,...

    基于ASP.NET MVC技术的图书管理系统的设计与实现(1).zip

    总之,《基于ASP.NET MVC技术的图书管理系统的设计与实现》是一个涵盖了软件工程多个方面的项目,涉及到Web开发的各个方面,包括但不限于架构设计、数据库管理、用户交互和性能优化。这个系统的实施不仅能够提升图书...

    asp.net mvc高性能多语言例子

    ASP.NET MVC 是微软提供的一种基于模型-视图-控制器(MVC)模式的Web应用程序开发框架,它在ASP.NET平台上提供了高效、灵活且可测试的解决方案。本示例旨在展示如何在ASP.NET MVC项目中实现高性能和多语言支持,帮助...

    asp.net+mvc+ef+ioc多语言通用后台框架

    总结来说,这个压缩包提供了一个基于ASP.NET MVC、Entity Framework和IoC的多语言后台框架,包含了完整的解决方案、测试项目、各层次的代码组织,以及可能的插件支持,方便开发者快速构建和扩展管理型Web应用。

    毕业设计:基于ASP.NET MVC实现的简易在线考试系统。.zip

    - **系统**:指的是在此项目中构建的在线考试系统,它是一个完整的软件解决方案,包含多个组件,如用户管理、试题库、考试安排、成绩管理等。 【压缩包子文件的文件名称列表】:Graduation Design,虽然没有具体的...

    Asp.NET MVC3.0 基础教程

    ### ASP.NET MVC3.0 基础教程关键知识点详解 #### 一、ASP.NET MVC3简介 **ASP.NET MVC3** 是微软推出的基于MVC(Model-View-Controller)设计模式的Web开发框架,旨在简化Web应用的开发流程,提高开发效率。此...

    asp.net MVC人力资源管理系统源码

    【标题】"asp.net MVC人力资源管理系统源码"是一款基于C#编程语言,使用asp.net MVC框架构建的人力资源管理软件的源代码实现。这个系统为理解MVC模式在实际项目中的应用提供了很好的学习素材,对于开发者尤其是初学...

    ASP.NET MVC Blog

    这个项目利用了ASP.NET MVC框架的强大功能,为开发者和用户提供了高效、灵活且易于维护的博客解决方案。 ASP.NET MVC是微软推出的一种模型-视图-控制器(Model-View-Controller)架构模式的实现,它鼓励分离关注点...

Global site tag (gtag.js) - Google Analytics