LocalizationController.cs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. using System.Globalization;
  2. using Abp;
  3. using Abp.AspNetCore.Mvc.Controllers;
  4. using Abp.AspNetCore.Mvc.Extensions;
  5. using Abp.Extensions;
  6. using Abp.Localization;
  7. using Abp.Logging;
  8. using Abp.Runtime.Session;
  9. using Abp.Timing;
  10. using Abp.Web.Models;
  11. using Microsoft.AspNetCore.Http;
  12. using Microsoft.AspNetCore.Localization;
  13. using Microsoft.AspNetCore.Mvc;
  14. using VberZero;
  15. namespace VberAdmin.Controllers
  16. {
  17. public class LocalizationController : AbpController
  18. {
  19. protected readonly Abp.Web.Http.IUrlHelper UrlHelper;
  20. public LocalizationController(Abp.Web.Http.IUrlHelper urlHelper)
  21. {
  22. UrlHelper = urlHelper;
  23. }
  24. public virtual ActionResult ChangeCulture(string cultureName, string returnUrl = "")
  25. {
  26. if (!IsValidCultureCode(cultureName))
  27. throw new AbpException("未知语言: " + cultureName + "。");
  28. string cookieValue = CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(cultureName, cultureName));
  29. Response.Cookies.Append(VzConsts.LocalizationCookieName, cookieValue, new CookieOptions()
  30. {
  31. Expires = Clock.Now.AddYears(2),
  32. HttpOnly = true
  33. });
  34. //Response.Cookies.Append(CookieRequestCultureProvider.DefaultCookieName, cookieValue, new CookieOptions()
  35. //{
  36. // Expires = Clock.Now.AddYears(2),
  37. // HttpOnly = true
  38. //});
  39. if (AbpSession.UserId.HasValue)
  40. SettingManager.ChangeSettingForUser(AbpSession.ToUserIdentifier(), LocalizationSettingNames.DefaultLanguage, cultureName);
  41. if (Request.IsAjaxRequest())
  42. return Json(new AjaxResponse());
  43. if (!string.IsNullOrWhiteSpace(returnUrl))
  44. {
  45. string stringToUnEscape = UrlHelper.LocalPathAndQuery(Uri.EscapeDataString(returnUrl), Request.Host.Host,
  46. Request.Host.Port);
  47. if (!string.IsNullOrWhiteSpace(stringToUnEscape))
  48. {
  49. string str2 = Uri.UnescapeDataString(stringToUnEscape);
  50. if (Url.IsLocalUrl(str2))
  51. return LocalRedirect(str2);
  52. }
  53. }
  54. return LocalRedirect("/");
  55. }
  56. public bool IsValidCultureCode(string cultureCode)
  57. {
  58. if (cultureCode.IsNullOrWhiteSpace())
  59. return false;
  60. try
  61. {
  62. var cultureInfo = CultureInfo.GetCultureInfo(cultureCode);
  63. return cultureInfo != null;
  64. }
  65. catch (CultureNotFoundException ex)
  66. {
  67. LogHelper.LogException(ex);
  68. return false;
  69. }
  70. }
  71. }
  72. }