Browse Source

Add QueryStringCultureReplacementContext.

pull/9545/head
maliming 5 years ago
parent
commit
b4040e75ab
  1. 9
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Localization/AbpAspNetCoreMvcQueryStringCultureReplacement.cs
  2. 7
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Localization/AbpLanguagesController.cs
  3. 3
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Localization/IQueryStringCultureReplacement.cs
  4. 14
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Localization/QueryStringCultureReplacementContext.cs

9
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Localization/AbpAspNetCoreMvcQueryStringCultureReplacement.cs

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

7
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Localization/AbpLanguagesController.cs

@ -33,7 +33,12 @@ namespace Volo.Abp.AspNetCore.Mvc.Localization
new RequestCulture(culture, uiCulture) new RequestCulture(culture, uiCulture)
); );
returnUrl = await QueryStringCultureReplacement.ReplaceAsync(returnUrl, new RequestCulture(culture, uiCulture)); returnUrl = await QueryStringCultureReplacement.ReplaceAsync(new QueryStringCultureReplacementContext()
{
HttpContext = HttpContext,
RequestCulture = new RequestCulture(culture, uiCulture),
ReturnUrl = returnUrl
});
if (!string.IsNullOrWhiteSpace(returnUrl)) if (!string.IsNullOrWhiteSpace(returnUrl))
{ {

3
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Localization/IQueryStringCultureReplacement.cs

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

14
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Localization/QueryStringCultureReplacementContext.cs

@ -0,0 +1,14 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Localization;
namespace Volo.Abp.AspNetCore.Mvc.Localization
{
public class QueryStringCultureReplacementContext
{
public HttpContext HttpContext { get; set; }
public string ReturnUrl { get; set; }
public RequestCulture RequestCulture { get; set; }
}
}
Loading…
Cancel
Save