Skip to content

Commit dc015a5

Browse files
committed
fix language change problem
1 parent c097aee commit dc015a5

File tree

2 files changed

+92
-1
lines changed

2 files changed

+92
-1
lines changed
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
using System;
2+
using System.Globalization;
3+
using System.Linq;
4+
using Abp;
5+
using Abp.AspNetCore.Mvc.Controllers;
6+
using Abp.AspNetCore.Mvc.Extensions;
7+
using Abp.Auditing;
8+
using Abp.Extensions;
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 IUrlHelper = Abp.Web.Http.IUrlHelper;
15+
16+
namespace AbpCompanyName.AbpProjectName.Web.Controllers
17+
{
18+
public class LocalizationController : AbpController
19+
{
20+
private readonly IUrlHelper _urlHelper;
21+
22+
public LocalizationController(IUrlHelper urlHelper)
23+
{
24+
_urlHelper = urlHelper;
25+
}
26+
27+
[DisableAuditing]
28+
public virtual ActionResult ChangeCulture(string cultureName, string returnUrl = "")
29+
{
30+
if (!IsValidCultureCode(cultureName))
31+
{
32+
throw new AbpException("Unknown language: " + cultureName + ". It must be a valid culture!");
33+
}
34+
35+
var cookieValue = CookieRequestCultureProvider.MakeCookieValue(
36+
new RequestCulture(cultureName, cultureName)
37+
);
38+
39+
Response.Cookies.Append(
40+
CookieRequestCultureProvider.DefaultCookieName,
41+
cookieValue,
42+
new CookieOptions
43+
{
44+
Expires = Clock.Now.AddYears(2),
45+
HttpOnly = true
46+
}
47+
);
48+
49+
if (Request.IsAjaxRequest())
50+
{
51+
return Json(new AjaxResponse());
52+
}
53+
54+
if (string.IsNullOrWhiteSpace(returnUrl))
55+
{
56+
return LocalRedirect("/");
57+
}
58+
59+
var escapedReturnUrl = Uri.EscapeDataString(returnUrl);
60+
var localPath = _urlHelper.LocalPathAndQuery(escapedReturnUrl, Request.Host.Host, Request.Host.Port);
61+
if (!string.IsNullOrWhiteSpace(localPath))
62+
{
63+
var unescapedLocalPath = Uri.UnescapeDataString(localPath);
64+
if (Url.IsLocalUrl(unescapedLocalPath))
65+
{
66+
return LocalRedirect(unescapedLocalPath);
67+
}
68+
}
69+
70+
return LocalRedirect("/");
71+
}
72+
73+
private static bool IsValidCultureCode(string cultureCode)
74+
{
75+
if (cultureCode.IsNullOrWhiteSpace())
76+
{
77+
return false;
78+
}
79+
80+
try
81+
{
82+
return CultureInfo.GetCultures(CultureTypes.AllCultures)
83+
.Any(e => e.Name.ToLowerInvariant() == cultureCode.ToLowerInvariant());
84+
}
85+
catch (CultureNotFoundException)
86+
{
87+
return false;
88+
}
89+
}
90+
}
91+
}

src/AbpCompanyName.AbpProjectName.Web/Views/Shared/Components/LanguageSelection/Default.cshtml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
{
1111
if (language.Name != Model.CurrentLanguage.Name)
1212
{
13-
<li><a href="@Url.Action("ChangeCulture", "AbpLocalization")?cultureName=@(language.Name)&returnUrl=@(Model.CurrentUrl)"><div class="@language.Icon"></div> @language.DisplayName</a></li>
13+
<li><a href="@Url.Action("ChangeCulture", "Localization")?cultureName=@(language.Name)&returnUrl=@(Model.CurrentUrl)"><div class="@language.Icon"></div> @language.DisplayName</a></li>
1414
}
1515
}
1616
</ul>

0 commit comments

Comments
 (0)