mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-07-15 16:15:46 +08:00

* 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 <jersio@hotmail.com> Co-authored-by: psp589 <pablosanchez589@gmail.com>
49 lines
1.8 KiB
C#
49 lines
1.8 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|