心雨纷扬

 

ASP.NET MVC的本地化支持(一)

今天折腾半天,终于把MVC3的本地化搞出来了,不过由于还在项目中,没有分离出代码给使用,所以没有项目。

搞这个东西我参照了网上的一个人写的一篇博客,不过由于他使用的模板还有mvc版本与我的不一致,所以以下内容结合了我实际操作中的问题。

本地化是我们在开发互联网Web应用的共同问题,是你的程序本地化的要点就是分离页面内容和逻辑实现,这个意味着,如果你想在页面显示某些内容 ,不要把它们直接放到页面上或者后台逻辑里。你应该给予这些内容一个可以链接到设置的语言恰当的内容(此处翻译不出来了)。接下来让我们开始实现本地化吧。

ASP.NET MVC的本地化支持

ASP.NET MVC的是基于ASP.NET运行,所以由ASP.NET提供的所有功能,都可以在MVC里使用,例如缓存,会话状态和本地化。 在传统的ASP.NET Web窗体时代我们使用资源文件存储不同语言中的内容和使用由Visual Studio自动生成的ResourceManager类来检索它们。在ASP.NET MVC他们一样有效的。

让我创建一个标准的ASP.NET MVC的一个示例应用程序。该网站是中文的,我们可以看到所有的内容都是在视图和控制器类里写死的。

我使用的框架是mvc3的基于Razor模板的网站。

使用Visual Studio 2010 创建 MVC3的Web应用程序,在随后出现的选择中选择Internet 应用程序,视图引擎为Razor;

image

可以看出来现在网站是中文的,而且我们可以看到所有的内容在视图和控制器里都是硬编码的。

现在我需要做的是把所有的内容从页面和控制器里分离出来,Asp.Net给我们一个名为App_GlobalResources的文件,它里面包含各种语言的全局资源文件。我们只需要在解决方案管理器里的Web项目上右击鼠标,添加->添加至Asp.Net文件夹->App_GlobalResources

image

我创建了中文、英文两个语言的资源文件,中文是程序的默认语言,所以我先创建Global.resx文件,然后是Global.en.resx,中间的“en”是英语的Culture Name。如果你需要法语,那么你只需要再创建Global.fr.resx文件,Visual Studio会自动生成对应的类。

image

现在让我在资源文件里添加一些内容,在主页上我们需要替换三处:标题、消息还有描述,所以我们在这两个资源文件里添加3个项。

image

标题和描述都在视图页面里定义了,所以我将更改视图。

@{
    ViewBag.Title = Resources.Global.Home_Index_Title;
}

@ViewBag.Message

@Resources.Global.Home_Index_Desc http://asp.net/mvc

   1:          public ActionResult Index()
   2:          {
   3:              ViewBag.Message = Resources.Global.Home_Index_Message;
   4:              return View();
   5:          }

下篇ASP.NET MVC的本地化支持(二)

posted on 2011-03-03 23:33  心雨纷扬  阅读(3368)  评论(0编辑  收藏  举报

导航