.NET Framework MVC Globalizatioin & localization(全球化和本地化, 多语言)

xiaoxiao2022-06-11  15

参考自: https://www.cnblogs.com/zoro-zero/p/6674442.html

(如有侵权还请联系本人删除)

//######

在Filters文件夹(当然了,在哪里都可以, 你高兴就好)添加类LocalizationAttribute

 public class LocalizationAttribute : ActionFilterAttribute     {         public override void OnActionExecuting(ActionExecutingContext filterContext)         {             var cultureRouteValue = filterContext.RouteData.Values["culture"];             var cultureCookieValue = filterContext.HttpContext.Request.Cookies["CULTURE"];             System.Diagnostics.Debug.WriteLine($">>>>>>{cultureCookieValue}|{cultureRouteValue}");             if (cultureRouteValue != null && !string.IsNullOrWhiteSpace(cultureRouteValue.ToString()))             {                 Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(cultureRouteValue.ToString());                 if (cultureCookieValue?.ToString() != cultureRouteValue.ToString())                 {                     filterContext.HttpContext.Response.SetCookie(                         new HttpCookie("CULTURE", cultureRouteValue.ToString())                         {                             Expires = DateTime.Now.AddYears(1)                         }                         );                 }                 filterContext.RouteData.Values["culture"] = cultureRouteValue.ToString();             }             else if (cultureCookieValue != null)             {                 Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(cultureCookieValue.Value);                 filterContext.RouteData.Values["culture"] = cultureCookieValue.Value;             }             else             {                 Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(filterContext.HttpContext.Request.UserLanguages[0]);                 filterContext.RouteData.Values["culture"] = filterContext.HttpContext.Request.UserLanguages[0];             }

            base.OnActionExecuting(filterContext);         }     }

//######

在RouteConfig.cs配置如下路由(你也可以根据自己爱好配置)

  public static void RegisterRoutes(RouteCollection routes)         {             routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(               name:"Localization",                url:"{culture}/{controller}/{action}/{id}",                defaults: new { culture="zh-CN", controller = "Home", action = "Index", id = UrlParameter.Optional },               constraints: new { culture = "zh-CN|en-US" }//添加约束, 添加其它语言记得来这里添加"|culture"             );

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

 

//######

在你的MC(Models class/Controllers class)中使用Attribute, 像这样:

   [Localization]     public class HomeController : Controller     {         public ActionResult Index()         {             return View();         }

        public ActionResult About()         {             ViewBag.Message = "Your application description page.";

            return View();         }

        public ActionResult Contact()         {             ViewBag.Message = "Your contact page.";

            return View();         }     } 

 

//######

其它不用我多说了吧(Resources.xxxxx.xxxx / @Resources.xxxxx.xxxx)?? .net framework比.net core多语言好实现一丢丢, 不知道以后.net core在多语言上会不会更方便一点

转载请注明原文地址: https://www.6miu.com/read-4931422.html

最新回复(0)