MVC 多语言

最近项目需要用到多语言。

研究了一下,也参考了很多技术文章。

这里贴一下参考地址:http://www.cnblogs.com/unintersky/p/3969612.html


主要步骤我这里简述一下:

一:   MVC项目中 新增  Lang文件夹

文件夹中添加 CultureAwareHttpModule.cs类

具体代码:

public class CultureAwareHttpModule : IHttpModule
    {
        private CultureInfo currentCulture;
        private CultureInfo currentUICulture;

        public void Dispose()
        {//throw new NotImplementedException();
        }

        public void Init(HttpApplication context)
        {
            //throw new NotImplementedException();
            context.BeginRequest += SetCurrentCulture;
            context.EndRequest += RecoverCulture;
        }

        private void SetCurrentCulture(object sender, EventArgs args)
        {
            currentCulture = Thread.CurrentThread.CurrentCulture;
            currentUICulture = Thread.CurrentThread.CurrentUICulture;
            HttpContextBase contextWrapper = new HttpContextWrapper(HttpContext.Current);
            RouteData routeData = RouteTable.Routes.GetRouteData(contextWrapper);
            if (routeData == null)
            {
                return;
            }
            object culture;
            if (routeData.Values.TryGetValue("lang", out culture))
            {
                try
                {
                    Thread.CurrentThread.CurrentCulture = new CultureInfo(culture.ToString());
                    Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture.ToString());
                }
                catch
                { }
            }
        }
        private void RecoverCulture(object sender, EventArgs args)
        {
            Thread.CurrentThread.CurrentCulture = currentCulture;
            Thread.CurrentThread.CurrentUICulture = currentUICulture;
        }
    }

继续添加

增加3个资源文件:

Language.resx 默认语言



Language.zh-cn.resx 中文



Language.en-us.resx 英文





二:修改 路由配置

public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapRoute(
              "Globalization",
              "{lang}/{controller}/{action}/{id}",
              new { lang = "zh", controller = "Login", action = "Login", id = UrlParameter.Optional }, // 参数默认值
              new { lang = "^[a-zA-Z]{2}(-[a-zA-Z]{2})?$" }    //参数约束
            );

            //routes.MapRoute(
            //    name: "Default",
            //    url: "{controller}/{action}/{id}",
            //    defaults: new { controller = "Test", action = "Index", id = UrlParameter.Optional }
            //);
        }
    }


三:  修改web.config配置文件

命名空间别打错了。

<system.webServer>
    <modules>
      <add name="CultureAwareHttpModule" type="TestMVC.Lang.CultureAwareHttpModule" />
    </modules>
</system.webServer>

然后我们创建一个 view

代码如下:

@using TestMVC.Lang
@{
    ViewBag.Title = "Test";
}

<div>
@{
                string controller = ViewContext.Controller.ValueProvider.GetValue("controller").RawValue.ToString();
                string action = ViewContext.Controller.ValueProvider.GetValue("action").RawValue.ToString();
                
                System.Globalization.CultureInfo info = System.Threading.Thread.CurrentThread.CurrentCulture;
            }

            @Html.ActionLink("中文", action, new { Controller = controller, lang = "zh-CN" }, new { @class = "disib", @id = "aCN" })
            @Html.ActionLink("English", action, new { Controller = controller, lang = "en-US" }, new { @class = "disib", @id = "aUS" })

    <div style="color:red;">
    @Language.Test
        </div>
</div>


效果如下:




  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值