-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
#6793: Adding a content-independent culture selector shape for the fr…
…ont-end (#8784) * Adds a new CultureSelector shape for front-end * fixed query string culture change * Moving NameValueCollectionExtensions from Orchard.DynamicForms and Orchard.Localization to Orchard.Framework * Code styling * Simplifying UserCultureSelectorController and removing the addition of the culture to the query string * EOF empty lines and code styling * Fixing that the main Orchard.Localization should depend on Orchard.Autoroute * Code styling in LocalizationService * Updating LocalizationService to not have to use IEnumerable.Single * Matching culture name matching in LocalizationService culture- and casing-invariant --------- Co-authored-by: Sergio Navarro <[email protected]> Co-authored-by: psp589 <[email protected]>
- Loading branch information
1 parent
0b86413
commit 15cad85
Showing
13 changed files
with
226 additions
and
55 deletions.
There are no files selected for viewing
12 changes: 0 additions & 12 deletions
12
src/Orchard.Web/Modules/Orchard.DynamicForms/Helpers/NameValueCollectionExtensions.cs
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
48 changes: 48 additions & 0 deletions
48
src/Orchard.Web/Modules/Orchard.Localization/Controllers/UserCultureSelectorController.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
using System; | ||
using System.Web.Mvc; | ||
using Orchard.Autoroute.Models; | ||
using Orchard.CulturePicker.Services; | ||
using Orchard.Environment.Extensions; | ||
using Orchard.Localization.Providers; | ||
using Orchard.Localization.Services; | ||
using Orchard.Mvc.Extensions; | ||
|
||
namespace Orchard.Localization.Controllers { | ||
[OrchardFeature("Orchard.Localization.CultureSelector")] | ||
public class UserCultureSelectorController : Controller { | ||
private readonly ILocalizationService _localizationService; | ||
private readonly ICultureStorageProvider _cultureStorageProvider; | ||
public IOrchardServices Services { get; set; } | ||
|
||
public UserCultureSelectorController( | ||
IOrchardServices services, | ||
ILocalizationService localizationService, | ||
ICultureStorageProvider cultureStorageProvider) { | ||
Services = services; | ||
_localizationService = localizationService; | ||
_cultureStorageProvider = cultureStorageProvider; | ||
} | ||
|
||
public ActionResult ChangeCulture(string culture) { | ||
if (string.IsNullOrEmpty(culture)) { | ||
throw new ArgumentNullException(culture); | ||
} | ||
|
||
var returnUrl = Utils.GetReturnUrl(Services.WorkContext.HttpContext.Request); | ||
if (string.IsNullOrEmpty(returnUrl)) | ||
returnUrl = ""; | ||
|
||
if (_localizationService.TryGetRouteForUrl(returnUrl, out AutoroutePart currentRoutePart) | ||
&& _localizationService.TryFindLocalizedRoute(currentRoutePart.ContentItem, culture, out AutoroutePart localizedRoutePart)) { | ||
returnUrl = localizedRoutePart.Path; | ||
} | ||
|
||
_cultureStorageProvider.SetCulture(culture); | ||
if (!returnUrl.StartsWith("~/")) { | ||
returnUrl = "~/" + returnUrl; | ||
} | ||
|
||
return this.RedirectLocal(returnUrl); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
31 changes: 31 additions & 0 deletions
31
src/Orchard.Web/Modules/Orchard.Localization/Services/Utils.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
using System.Web; | ||
|
||
namespace Orchard.CulturePicker.Services { | ||
public static class Utils { | ||
public static string GetReturnUrl(HttpRequestBase request) { | ||
if (request.UrlReferrer == null) { | ||
return ""; | ||
} | ||
|
||
string localUrl = GetAppRelativePath(request.UrlReferrer.AbsolutePath, request); | ||
return HttpUtility.UrlDecode(localUrl); | ||
} | ||
|
||
public static string GetAppRelativePath(string logicalPath, HttpRequestBase request) { | ||
if (request.ApplicationPath == null) { | ||
return ""; | ||
} | ||
|
||
logicalPath = logicalPath.ToLower(); | ||
string appPath = request.ApplicationPath.ToLower(); | ||
if (appPath != "/") { | ||
appPath += "/"; | ||
} | ||
else { | ||
return logicalPath.Substring(1); | ||
} | ||
|
||
return logicalPath.Replace(appPath, ""); | ||
} | ||
} | ||
} |
Oops, something went wrong.