using System.Globalization; using Abp; using Abp.AspNetCore.Mvc.Controllers; using Abp.AspNetCore.Mvc.Extensions; using Abp.Extensions; using Abp.Localization; using Abp.Logging; using Abp.Runtime.Session; using Abp.Timing; using Abp.Web.Models; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Localization; using Microsoft.AspNetCore.Mvc; using VberZero; namespace VberAdmin.Controllers { public class LocalizationController : AbpController { protected readonly Abp.Web.Http.IUrlHelper UrlHelper; public LocalizationController(Abp.Web.Http.IUrlHelper urlHelper) { UrlHelper = urlHelper; } public virtual ActionResult ChangeCulture(string cultureName, string returnUrl = "") { if (!IsValidCultureCode(cultureName)) throw new AbpException("未知语言: " + cultureName + "。"); string cookieValue = CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(cultureName, cultureName)); Response.Cookies.Append(VzConsts.LocalizationCookieName, cookieValue, new CookieOptions() { Expires = Clock.Now.AddYears(2), HttpOnly = true }); //Response.Cookies.Append(CookieRequestCultureProvider.DefaultCookieName, cookieValue, new CookieOptions() //{ // Expires = Clock.Now.AddYears(2), // HttpOnly = true //}); if (AbpSession.UserId.HasValue) SettingManager.ChangeSettingForUser(AbpSession.ToUserIdentifier(), LocalizationSettingNames.DefaultLanguage, cultureName); if (Request.IsAjaxRequest()) return Json(new AjaxResponse()); if (!string.IsNullOrWhiteSpace(returnUrl)) { string stringToUnEscape = UrlHelper.LocalPathAndQuery(Uri.EscapeDataString(returnUrl), Request.Host.Host, Request.Host.Port); if (!string.IsNullOrWhiteSpace(stringToUnEscape)) { string str2 = Uri.UnescapeDataString(stringToUnEscape); if (Url.IsLocalUrl(str2)) return LocalRedirect(str2); } } return LocalRedirect("/"); } public bool IsValidCultureCode(string cultureCode) { if (cultureCode.IsNullOrWhiteSpace()) return false; try { var cultureInfo = CultureInfo.GetCultureInfo(cultureCode); return cultureInfo != null; } catch (CultureNotFoundException ex) { LogHelper.LogException(ex); return false; } } } }