ASP.NET MVC - 多国语言的简单实现

定义一个类

public class Book
{
    public int ID { get; set; }
    public string Title { get; set; }
    public string Author { get; set; }
    public double Price { get; set; }
    public double Action { get; set; }
}

右击项目-添加ASP.NET文件夹-创建App_GlobalResources-右击此文件夹-添加-资源文件,命名为Resource1.resx。这个文件是一个以文件名为类名的类型,名称和值分别代表了Book模型的属性名字的存取键和属性名字的存取值,Book的属性们是以键值对的方式被添加到资源文件的。注意将资源文件类的访问修饰符设为public。

接下来再复制一份Resource1.resx,命名为Resource1.zh.resx,前一个表示默认的英文,后一个表示中文。

为Book的属性添加数据注解

public class Book
{
    [Display(Name = "IDDisplay", ResourceType = typeof(App_GlobalResources.Resource1))]
    public int ID { get; set; }

[Display(Name = "TitleDisplay", ResourceType = typeof(App_GlobalResources.Resource1))]
    public string Title { get; set; }

[Display(Name = "AuthorDisplay", ResourceType = typeof(App_GlobalResources.Resource1))]
    public string Author { get; set; }

[Display(Name = "PriceDisplay", ResourceType = typeof(App_GlobalResources.Resource1))]
    public double Price { get; set; }

[Display(Name = "ActionDisplay", ResourceType = typeof(App_GlobalResources.Resource1))]
    public double Action { get; set; }
}

接下来在Test方法中将默认显示的属性名绑定到ViewBag中,然后从客户端读取这些字段名称

public class DefaultController : Controller
{
    private List<Book> books = new List<Book>
    {
            new Book{  ID=1, Title="寂静的春天", Author="xxx",Price=18.9 },
            new Book{  ID=2, Title="此时此地", Author="xxx",Price=11.9 },
            new Book{  ID=3, Title="无人生还", Author="xxx",Price=12.9 },
            new Book{  ID=4, Title="万有引力之虹", Author="xxx",Price=15.9 },
            new Book{  ID=5, Title="全球通史", Author="xxx",Price=18.9 },
            new Book{  ID=6, Title="来自民间的叛逆", Author="xxx",Price=18.1 },
            new Book{  ID=7, Title="雨天炎天", Author="xxx",Price=18.5 },
            new Book{  ID=8, Title="荒凉天使", Author="xxx",Price=17.9 },
            new Book{  ID=9, Title="精神分析引论", Author="xxx",Price=28.9 },
            new Book{  ID=10, Title="伯罗奔尼撒战争史", Author="xxx",Price=48.9 }
        };

//默认显示英语
    public ActionResult Test()
    {
        ViewBag.Title = App_GlobalResources.Resource1.TitleDisplay;
        ViewBag.Author = App_GlobalResources.Resource1.AuthorDisplay;
        ViewBag.Price = App_GlobalResources.Resource1.PriceDisplay;
        ViewBag.ID = App_GlobalResources.Resource1.IDDisplay;
        ViewBag.Action = App_GlobalResources.Resource1.ActionDisplay;
        return View(books);
    }

//语言切换
    public ActionResult ChangeLanguage(string language)
    {
        Session["CurrentLanguage"] = new System.Globalization.CultureInfo(language);
        return Redirect("Test");
    }
}

在Global文件中创建Application_AcquireRequestState事件

protected void Application_AcquireRequestState(object sender, EventArgs e)
{
    if (HttpContext.Current.Session != null)
    {
        System.Globalization.CultureInfo ci = (System.Globalization.CultureInfo)this.Session["CurrentLanguage"];
        if (ci == null)
        {
            ci = new System.Globalization.CultureInfo("en");
            this.Session["CurrentLanguage"] = ci;
        }
        System.Threading.Thread.CurrentThread.CurrentUICulture = ci;
        System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(ci.Name);
    }
}

在客户端读取数据

@model IEnumerable<WebErp.Controllers.Book>
<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Test</title>
    <style>
        #table-5 th { background:#7F66A0;color: #fff; border-bottom-width: 0; }
        #table-5 td {color: #000; }
        #table-5 tr, #table-5 th{border-width: 1px; border-style: solid; border-color: #7F66A0; }
        #table-5 td, #table-5 th{ padding: 5px 10px; font-size: 12px;font-family: Verdana; font-weight: bold; }
    </style>
</head>
<body>
    @Html.ActionLink("English", "ChangeLanguage", new { language = "en" })
    @Html.ActionLink("Chinese", "ChangeLanguage",new { language="zh" })
    <table id="table-5" >
        <tr>
            <th>@ViewBag.ID</th>
            <th>
                @ViewBag.Title
            </th>
            <th>
                @ViewBag.Author
            </th>
            <th>
                @ViewBag.Price
            </th>
            
            <th>@ViewBag.Action</th>
        </tr>
        @foreach (var item in Model)
        {
            <tr>
                <td>@item.ID</td>            
                <td>@Html.DisplayFor(list => item.Title)</td>            
                <td>@Html.DisplayFor(list => item.Author)</td>            
                <td>@Html.DisplayFor(list => item.Price)</td>
                <td>@Html.ActionLink("删除","delete?ID="+item.ID)</td>
            </tr>
        }
    </table>
</body>
</html>

用过滤器实现切换多语言效果,参考:https://www.cnblogs.com/zoro-zero/p/6674442.html

原文地址:https://www.cnblogs.com/myrocknroll/p/8159145.html

时间: 2024-08-05 14:33:47

ASP.NET MVC - 多国语言的简单实现的相关文章

Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理

这是本人第一次写,写的不好的地方还忘包含.写这个的主要原因是翔通过这个来学习下EF的CodeFirst模式,本来也想用AngularJs来玩玩的,但是自己只会普通的绑定,对指令这些不是很熟悉,所以就基本不用了.还有最主要的原因就是锻炼下自己的能力.好了其他就不多说了,下面来看下我对这个项目的整体概述吧: 目录: 目录我以后会在这边添加上去的 一.Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理 基本设计 项目中使用到的工具: Visual Studio 2013,

Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理6

接下来先做角色这一板块的(增删改查),首先要新建一个Role控制器,在添加一个RoleList的视图.表格打算采用的是bootstrap的表格. using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace AuthorDesign.Web.Areas.Admin.Controllers { public class Role

Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理10

今天把用户的菜单显示和页面的按钮显示都做好了,下面先来个效果图 接下来说下我实现的方法: 首先我在每个方法前面都加了这个属性, /// <summary> /// 表示当前Action请求为一个具体的功能页面 /// </summary> public class AdminActionMethod : Attribute { /// <summary> /// 页面请求路径 /// </summary> public string ActionUrl {

Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理1

首先给上项目的整体框架图:,这里我没有使用BLL,因为感觉太烦了就没有去使用. 那么接下来我们首先先去Model层中添加Model. 管理员类: using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using System.

Asp.Net MVC 5使用Identity之简单的注册和登陆

由于.Net MVC 5登陆和注册方式有很多种,但是Identity方式去实现或许会更简单更容易理解 首先新建一个项目 其次如下选择Empty和MVC的选项 然后打开NuGet包管理器分别安装几个包 EntityFramework Microsoft.AspNet.Identity.Core Microsoft.AspNet.Identity.EntityFramework Microsoft.AspNet.Identity.Owin Modernizr Microsoft.Owin.Host.

Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理7

做完角色之后接下来做先做页面按钮的增加.删除.修改.这里用到的功能和角色那边是一样的.就不多说了.直接上代码. 后台控制器代码 using AuthorDesign.Web.App_Start.Common; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace AuthorDesign.Web.Areas.Admin

Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理2

首先我们来写个类进行获取当前线程内唯一的DbContext using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Runtime.Remoting.Messaging; using System.Text; using System.Threading.Tasks; namespace AuthorDesign.DAL { /// <sum

Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理9

前两天因有事就没来得及写.今天刚刚好空了.这次写的是对角色和管理员对页面按钮之间的控制.先看页面效果 说明:先根据角色设置好角色的权限,然后管理员在对应的角色下的权限去设置其权限. 在设置角色权限的时候 当某个角色对应某个页面的按钮都是未选中的时候,则设置它的IsShow为0,反之则为1,这样有利于设置管理员的时候方便查询需要设置的页面. 当isshow为0的时候删除管理员表对应的该页面Id的记录. 角色和管理员页面按钮显示这块到这里就结束了. 百度网盘源码下载地址

Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理3

首先在webconfig中加入下面这句代码,这个主要是用来生成数据库的连接字符串 <connectionStrings> <add name="AuthorDesignContext" providerName="System.Data.SqlClient" connectionString="Data Source=.;Initial Catalog=AuthorDesign;Integrated Security=False;User