原文链接:
https://www.c-sharpcorner.com/article/how-to-create-multiple-languages-in-asp-net-mvc-4-5-framework/
Step1:建立一个空的MVC网站
Step2:添加两个Resources File
Step3:在Models文件夹中添加一个Registration类
namespace MultipleLanguage.Models { public class Registration { [Display(Name = "FirstName", ResourceType = typeof(Resource))] [Required(ErrorMessageResourceType = typeof(Resource), ErrorMessageResourceName = "FirstNameRequired")] public string FirstName { get; set; } [Display(Name = "LastName", ResourceType = typeof(Resource))] [Required(ErrorMessageResourceType = typeof(Resource), ErrorMessageResourceName = "LastNameRequired")] public string LastName { get; set; } [Display(Name = "Email", ResourceType = typeof(Resource))] [Required(ErrorMessageResourceType = typeof(Resource), ErrorMessageResourceName = "EmailRequired")] [RegularExpression(@"^([0-9a-zA-Z]([\+\-_\.][0-9a-zA-Z]+)*)+@(([0-9a-zA-Z][-\w]*[0-9a-zA-Z]*\.)+[a-zA-Z0-9]{2,3})$", ErrorMessageResourceType = typeof(Resource), ErrorMessageResourceName = "EmailInvalid")] public string Email { get; set; } [Display(Name = "Country", ResourceType = typeof(Resource))] [Required(ErrorMessageResourceType = typeof(Resource), ErrorMessageResourceName = "CountryNameRequired")] public string Country { get; set; } } }
Step4:添加一个语言控制的类LanguageMang
namespace MultipleLanguage { public class LanguageMang { public static List<Languages> AvailableLanguages = new List<Languages> { new Languages { LanguageFullName = "English", LanguageCultureName = "en" }, new Languages { LanguageFullName = "Chinese", LanguageCultureName = "Zh" } }; public static bool IsLanguageAvailable(string lang) { return AvailableLanguages.Where(a => a.LanguageCultureName.Equals(lang)).FirstOrDefault() != null ? true : false; } public static string GetDefaultLanguage() { return AvailableLanguages[0].LanguageCultureName; } public void SetLanguage(string lang) { try { if (!IsLanguageAvailable(lang)) lang = GetDefaultLanguage(); var cultureInfo = new CultureInfo(lang); Thread.CurrentThread.CurrentUICulture = cultureInfo; Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cultureInfo.Name); HttpCookie langCookie = new HttpCookie("culture", lang); langCookie.Expires = DateTime.Now.AddYears(1); HttpContext.Current.Response.Cookies.Add(langCookie); } catch (Exception) { } } } public class Languages { public string LanguageFullName { get; set; } public string LanguageCultureName { get; set; } } }
Step5:添加MyController基类用来判断设置当前需要用的语言(关键在这边,一开始就要判断):
namespace MultipleLanguage { public class MyController : Controller { protected override IAsyncResult BeginExecuteCore(AsyncCallback callback, object state) { string lang = null; HttpCookie langCookie = Request.Cookies["culture"]; if (langCookie != null) { lang = langCookie.Value; } else { var userLanguage = Request.UserLanguages; var userLang = userLanguage != null ? userLanguage[0] : ""; if (userLang != "") { lang = userLang; } else { lang = LanguageMang.GetDefaultLanguage(); } } new LanguageMang().SetLanguage(lang); return base.BeginExecuteCore(callback, state); } } }
Step 6:添加测试的例子
1)Controller:
namespace MultipleLanguage.Controllers { public class HomeController : MyController { // GET: Home public ActionResult Index() { return View(); } [HttpPost] public ActionResult Index(Registration r) { return View(r); } public ActionResult ChangeLanguage(string lang) { new LanguageMang().SetLanguage(lang); return RedirectToAction("Index", "Home"); } } }
2)Views:
@model MultipleLanguage.Models.Registration @{ ViewBag.Title = MultipleLanguage.Resource.Register; } <h2> @MultipleLanguage.Resource.Register </h2> <div style="padding:5px"> @{ foreach (var i in MultipleLanguage.LanguageMang.AvailableLanguages) { @Html.ActionLink(i.LanguageFullName, "ChangeLanguage", "Home", new { lang = i.LanguageCultureName }, null) <text> </text> } } </div> @using (Html.BeginForm()) { @Html.AntiForgeryToken() <div class="form-horizontal"> <h4> @MultipleLanguage.Resource.Register </h4> <hr /> @Html.ValidationSummary(true, "", new { @class = "text-danger" }) <div class="form-group"> @Html.LabelFor(model => model.FirstName, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.FirstName, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.FirstName, "", new { @class = "text-danger" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.LastName, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.LastName, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.LastName, "", new { @class = "text-danger" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.Country, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.Country, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Country, "", new { @class = "text-danger" }) </div> </div> <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <input type="submit" value="@MultipleLanguage.Resource.Register" class="btn btn-default" /> </div> </div> </div> } <div> @Html.ActionLink("Back to List", "Index") </div> <script src="~/Scripts/jquery-1.10.2.min.js"></script> <script src="~/Scripts/jquery.validate.min.js"></script> <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
Step7: 测试效果
1.中文版
2.英文版
原文:https://www.cnblogs.com/keeplearningandsharing/p/14637128.html