mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
#21243: Fixing issue with multiple calls to cultrue selector
Taken some of the fixes from jtkech and anoordende Work Item: 21243
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
using System.Web;
|
||||
using System.Web.Routing;
|
||||
using Orchard.UI.Admin;
|
||||
|
||||
namespace Orchard.Localization {
|
||||
@@ -9,7 +8,7 @@ namespace Orchard.Localization {
|
||||
}
|
||||
|
||||
internal static bool IsRequestAdmin(HttpContextBase context) {
|
||||
if (AdminFilter.IsApplied(new RequestContext(context, new RouteData())))
|
||||
if (AdminFilter.IsApplied(context.Request.RequestContext))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
|
@@ -31,7 +31,7 @@ namespace Orchard.Localization.Selectors {
|
||||
if (context.Request.UrlReferrer != null)
|
||||
path = context.Request.UrlReferrer.AbsolutePath;
|
||||
else
|
||||
path = context.Request.Path;
|
||||
return null;
|
||||
}
|
||||
else {
|
||||
path = context.Request.Path;
|
||||
|
@@ -1,18 +1,37 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Orchard.Mvc;
|
||||
|
||||
namespace Orchard.Localization.Services {
|
||||
public class CurrentCultureWorkContext : IWorkContextStateProvider {
|
||||
private readonly ICultureManager _cultureManager;
|
||||
private readonly IEnumerable<ICultureSelector> _cultureSelectors;
|
||||
private readonly IHttpContextAccessor _httpContextAccessor;
|
||||
|
||||
public CurrentCultureWorkContext(ICultureManager cultureManager) {
|
||||
_cultureManager = cultureManager;
|
||||
public CurrentCultureWorkContext(IEnumerable<ICultureSelector> cultureSelectors,
|
||||
IHttpContextAccessor httpContextAccessor) {
|
||||
_cultureSelectors = cultureSelectors;
|
||||
_httpContextAccessor = httpContextAccessor;
|
||||
}
|
||||
|
||||
public Func<WorkContext, T> Get<T>(string name) {
|
||||
if (name == "CurrentCulture") {
|
||||
return ctx => (T)(object)_cultureManager.GetCurrentCulture(ctx.HttpContext);
|
||||
var cultureName = GetCurrentCulture();
|
||||
return ctx => (T)(object)cultureName;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private string GetCurrentCulture() {
|
||||
var httpContext = _httpContextAccessor.Current();
|
||||
|
||||
var culture = _cultureSelectors
|
||||
.Select(c => c.GetCulture(httpContext))
|
||||
.Where(c => c != null)
|
||||
.OrderByDescending(c => c.Priority)
|
||||
.FirstOrDefault(c => !string.IsNullOrEmpty(c.CultureName));
|
||||
|
||||
return culture == null ? string.Empty : culture.CultureName;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -60,21 +60,7 @@ namespace Orchard.Localization.Services {
|
||||
}
|
||||
|
||||
public string GetCurrentCulture(HttpContextBase requestContext) {
|
||||
var requestCulture = _cultureSelectors
|
||||
.Select(x => x.GetCulture(requestContext))
|
||||
.Where(x => x != null)
|
||||
.OrderByDescending(x => x.Priority);
|
||||
|
||||
if ( !requestCulture.Any() )
|
||||
return String.Empty;
|
||||
|
||||
foreach (var culture in requestCulture) {
|
||||
if (!String.IsNullOrEmpty(culture.CultureName)) {
|
||||
return culture.CultureName;
|
||||
}
|
||||
}
|
||||
|
||||
return String.Empty;
|
||||
return _workContextAccessor.GetContext().CurrentCulture;
|
||||
}
|
||||
|
||||
public CultureRecord GetCultureById(int id) {
|
||||
|
Reference in New Issue
Block a user