Add QueryStringCultureReplacement.

pull/9545/head
maliming 4 years ago
parent 9c51cf8a13
commit 34fc8bc75d

@ -0,0 +1,28 @@
using System;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Localization;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.AspNetCore.Mvc.Localization
{
public class AbpAspNetCoreMvcQueryStringCultureReplacement : IQueryStringCultureReplacement, ITransientDependency
{
public virtual Task<string> ReplaceAsync(string returnUrl, RequestCulture requestCulture)
{
if (!string.IsNullOrWhiteSpace(returnUrl))
{
if (returnUrl.Contains("culture=", StringComparison.OrdinalIgnoreCase))
{
returnUrl = Regex.Replace(returnUrl, "culture=[A-Za-z-]+?&", $"culture={requestCulture.Culture}&", RegexOptions.Compiled | RegexOptions.IgnoreCase);
}
if (returnUrl.Contains("ui-Culture=", StringComparison.OrdinalIgnoreCase))
{
returnUrl = Regex.Replace(returnUrl, "ui-culture=[A-Za-z-]+?$", $"ui-culture={requestCulture.UICulture}",RegexOptions.Compiled | RegexOptions.IgnoreCase);
}
}
return Task.FromResult<string>(returnUrl);
}
}
}

@ -1,6 +1,7 @@
using Microsoft.AspNetCore.Localization;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.RequestLocalization;
using Volo.Abp.Localization;
@ -12,8 +13,15 @@ namespace Volo.Abp.AspNetCore.Mvc.Localization
[ApiExplorerSettings(IgnoreApi = true)]
public class AbpLanguagesController : AbpController
{
protected IQueryStringCultureReplacement QueryStringCultureReplacement { get; }
public AbpLanguagesController(IQueryStringCultureReplacement queryStringCultureReplacement)
{
QueryStringCultureReplacement = queryStringCultureReplacement;
}
[HttpGet]
public IActionResult Switch(string culture, string uiCulture = "", string returnUrl = "")
public virtual async Task<IActionResult> Switch(string culture, string uiCulture = "", string returnUrl = "")
{
if (!CultureHelper.IsValidCultureCode(culture))
{
@ -25,6 +33,8 @@ namespace Volo.Abp.AspNetCore.Mvc.Localization
new RequestCulture(culture, uiCulture)
);
returnUrl = await QueryStringCultureReplacement.ReplaceAsync(returnUrl, new RequestCulture(culture, uiCulture));
if (!string.IsNullOrWhiteSpace(returnUrl))
{
return Redirect(GetRedirectUrl(returnUrl));
@ -33,7 +43,7 @@ namespace Volo.Abp.AspNetCore.Mvc.Localization
return Redirect("~/");
}
private string GetRedirectUrl(string returnUrl)
protected virtual string GetRedirectUrl(string returnUrl)
{
if (returnUrl.IsNullOrEmpty())
{

@ -0,0 +1,10 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Localization;
namespace Volo.Abp.AspNetCore.Mvc.Localization
{
public interface IQueryStringCultureReplacement
{
Task<string> ReplaceAsync(string returnUrl, RequestCulture requestCulture);
}
}
Loading…
Cancel
Save