当前位置:编程学习 > 网站相关 >>

【译】MVC3 20个秘方-(4)实现多语言

 

场景
互联网是由千百万个人使用。他们来自数百个不同的国家,使用数百种不同的语言。甚至在加拿大、美国和英国之间英语也有许多方言。

所以,不在你的网站上仅仅呈现一种语言是重要的。

解决方案

创建资源文件,并且以键值对的形式添加静态文本,通过CurrentUICulture来提供改变语言的能力。

讨论

资源文件是基于文本的XML文件,用来支持静态网站多国语言。你创建一个主要的资源文件,包含你的默认语言。为文本创建一些key/value pair。然后,你就可以在你的controller、view、model中的任何地方使用这些文本了。下图是个例子

 

\

注意圈红的地方要设置为public。如果一个文件的访问修饰符不是public ,它可能不能被访问到。

下面开始创建你的资源文件。右键单击project,添加->新建文件夹,添加新项,选择资源文件。创建。

正如你在上边例子看到的。我已经为书中的每一个字段创建了一个条目。下一步就是更新这个model ,在DisplayAttribute中引用这些值。

代码如下:

 

 

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Data.Entity;

using System.ComponentModel.DataAnnotations;

using MvcApplication.Validations;

 

namespace MvcApplication.Models

{

    public class Book

    {

        public int ID { get; set; }

        [Required]

        [Display(Name = "TitleDisplay",

        ResourceType = typeof(Resources.Resource1))]

        public string Title { get; set; }

        [Display(Name = "IsbnDisplay",

        ResourceType = typeof(Resources.Resource1))]

        [Required]

        [IsbnValidation]

        public string Isbn { get; set; }

        [Display(Name = "SummaryDisplay",

        ResourceType = typeof(Resources.Resource1))]

        [Required]

        public string Summary { get; set; }

        [Display(Name = "AuthorDisplay",

        ResourceType = typeof(Resources.Resource1))]

        [Required]

        public string Author { get; set; }

        [Display(Name = "ThumbnailDisplay",

        ResourceType = typeof(Resources.Resource1))]

        public string Thumbnail { get; set; }

        [Display(Name = "PriceDisplay",

        ResourceType = typeof(Resources.Resource1))]

        [Range(1, 100)]

        public double Price { get; set; }

        [Display(Name = "PublishedDisplay",

        ResourceType = typeof(Resources.Resource1))]

        [DataType(DataType.Date)]

        [Required]

        public DateTime Published { get; set; }

    }

    public class BookDBContext : DbContext

    {

        public DbSet<Book> Books { get; set; }

    }

}

 

 

在上边的例子中,DisplayAttribute 特性中的“Name”是从资源文件检索的key。resource type 中定义了资源文件的名称。

提示:为了更方便调试资源文件,避免在view中处理数据。我强烈建议在controller里创建一个 ViewBag并且在view中引用这些值。因为如果直接在view里访问资源文件。View不由Visual studio 编译。如果你犯错了,你将遇到一个运行时的错误。而在controller里使用资源文件的好处就是如果定义的key文件没有找到。Visual studio 会编译失败。

下边的例子将更新Book Index view 把静态的文本放到资源文件里。如果你检查那个view 你会发现没有太多的项要放到资源文件里。

下边我们按照下边的表创建key/value pairs。

\

你们可以注意到,我把后边4个key/value pair 写的比较通用。

因为资源文件是整个网站都可以访问的。在其他的地方我们一样可以用他们来替换静态文本。

更新之后我们的资源文件应该变成这样了

\

创建完资源文件,让我们打开BookController 并且用如下代码替换Index() action:

 

 public ViewResult Index()

        {

            #region ViewBag Resources

            ViewBag.Title =

            Resources.Resource1.BookIndexTitle;

            ViewBag.CreateLink =

            Resources.Resource1.CreateLink;

            ViewBag.TitleDisplay =

            Resources.Resource1.TitleDisplay;

            ViewBag.IsbnDisplay =

            Resources.Resource1.IsbnDisplay;

            ViewBag.SummaryDisplay =

            Resources.Resource1.SummaryDisplay;

            ViewBag.AuthorDisplay =

            Resources.Resource1.AuthorDisplay;

            ViewBag.ThumbnailDisplay =

            Resources.Resource1.ThumbnailDisplay;

            ViewBag.PriceDisplay = Resources.Resource1.PriceDisplay;

            ViewBag.PublishedDisplay =

            Resources.Resource1.PublishedDisplay;

            ViewBag.EditLink =

            Resources.Resource1.EditLink;

&

补充:Web开发 , 其他 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,