From 23b101a644cae0f1b2f0b3b9e83a13c62d53bb1b Mon Sep 17 00:00:00 2001 From: Nathan Heskew Date: Mon, 12 Jul 2010 03:03:18 -0700 Subject: [PATCH] Starting to get some content localization hooked up. - can create new translations and content items (in manage content) link to other localizations of the content - still a bit buggy when creating a new translation to override an existing translation - the ux is still, definately, a bid ol' wip --HG-- branch : dev --- .../Localization/CultureManagerTests.cs | 2 +- .../Controllers/AdminController.cs | 51 +++++++++++++++---- .../Drivers/LocalizationDriver.cs | 31 ++++++++--- .../Services/ILocalizationService.cs | 11 ++++ .../Services/LocalizationService.cs | 47 +++++++++++++++++ .../Core/Localization/Styles/admin.css | 23 +++++++++ .../ViewModels/AddLocalizationViewModel.cs | 11 ++++ .../ContentLocalizationsViewModel.cs | 14 +++++ ...del.cs => SelectLocalizationsViewModel.cs} | 4 +- .../Localization/Views/Admin/Translate.ascx | 9 ++-- .../Localization/Views/CultureSelection.ascx | 5 ++ ...tion.ContentTranslations.SummaryAdmin.ascx | 20 ++++++-- .../Localization.ContentTranslations.ascx | 5 ++ .../Parts/Localization.CultureSelection.ascx | 4 -- src/Orchard.Web/Core/Orchard.Core.csproj | 10 +++- .../Settings/Controllers/AdminController.cs | 2 +- .../Services/DefaultCultureManager.cs | 6 ++- .../Localization/Services/ICultureManager.cs | 3 +- .../Localization/Services/ICultureSelector.cs | 2 +- .../Services/SiteCultureSelector.cs | 2 +- src/Orchard/Localization/Text.cs | 2 +- 21 files changed, 222 insertions(+), 42 deletions(-) create mode 100644 src/Orchard.Web/Core/Localization/Services/ILocalizationService.cs create mode 100644 src/Orchard.Web/Core/Localization/Services/LocalizationService.cs create mode 100644 src/Orchard.Web/Core/Localization/Styles/admin.css create mode 100644 src/Orchard.Web/Core/Localization/ViewModels/AddLocalizationViewModel.cs create mode 100644 src/Orchard.Web/Core/Localization/ViewModels/ContentLocalizationsViewModel.cs rename src/Orchard.Web/Core/Localization/ViewModels/{ContentTranslationsViewModel.cs => SelectLocalizationsViewModel.cs} (51%) create mode 100644 src/Orchard.Web/Core/Localization/Views/CultureSelection.ascx create mode 100644 src/Orchard.Web/Core/Localization/Views/EditorTemplates/Parts/Localization.ContentTranslations.ascx delete mode 100644 src/Orchard.Web/Core/Localization/Views/EditorTemplates/Parts/Localization.CultureSelection.ascx diff --git a/src/Orchard.Tests/Localization/CultureManagerTests.cs b/src/Orchard.Tests/Localization/CultureManagerTests.cs index cd8dc90dd..2248f7143 100644 --- a/src/Orchard.Tests/Localization/CultureManagerTests.cs +++ b/src/Orchard.Tests/Localization/CultureManagerTests.cs @@ -88,7 +88,7 @@ namespace Orchard.Tests.Localization { } public class TestCultureSelector : ICultureSelector { - public CultureSelectorResult GetCulture(HttpContext context) { + public CultureSelectorResult GetCulture(HttpContextBase context) { return new CultureSelectorResult { Priority = 1, CultureName = "en-US" }; } } diff --git a/src/Orchard.Web/Core/Localization/Controllers/AdminController.cs b/src/Orchard.Web/Core/Localization/Controllers/AdminController.cs index e47f32b7c..6b8e8693e 100644 --- a/src/Orchard.Web/Core/Localization/Controllers/AdminController.cs +++ b/src/Orchard.Web/Core/Localization/Controllers/AdminController.cs @@ -1,31 +1,44 @@ using System; +using System.Linq; using System.Web.Mvc; -using System.Web.Routing; using Orchard.ContentManagement; -using Orchard.Core.Contents.ViewModels; +using Orchard.Core.Localization.Models; +using Orchard.Core.Localization.Services; +using Orchard.Core.Localization.ViewModels; using Orchard.Localization; +using Orchard.Localization.Services; using Orchard.Mvc.Results; using Orchard.Mvc.ViewModels; namespace Orchard.Core.Localization.Controllers { + [ValidateInput(false)] public class AdminController : Controller, IUpdateModel { private readonly IContentManager _contentManager; + private readonly ICultureManager _cultureManager; + private readonly ILocalizationService _localizationService; - public AdminController(IOrchardServices orchardServices, IContentManager contentManager) { + public AdminController(IOrchardServices orchardServices, IContentManager contentManager, ICultureManager cultureManager, ILocalizationService localizationService) { _contentManager = contentManager; + _cultureManager = cultureManager; + _localizationService = localizationService; Services = orchardServices; } public IOrchardServices Services { get; set; } - public ActionResult Translate(int id, string from) { + public ActionResult Translate(int id, string to) { var contentItem = _contentManager.Get(id, VersionOptions.Latest); if (contentItem == null) return new NotFoundResult(); - var model = new EditItemViewModel { + var siteCultures = _cultureManager.ListCultures().Where(s => s != _localizationService.GetContentCulture(contentItem)); + var model = new AddLocalizationViewModel { Id = id, + SelectedCulture = siteCultures.Any(s => s == to) + ? to + : _cultureManager.GetCurrentCulture(HttpContext), // could be null but the person doing the translating might be translating into their current culture + SiteCultures = siteCultures, Content = _contentManager.BuildEditorModel(contentItem) }; @@ -40,21 +53,37 @@ namespace Orchard.Core.Localization.Controllers { if (contentItem == null) return new NotFoundResult(); - var viewModel = new EditItemViewModel(); - if (TryUpdateModel(viewModel)) - viewModel.Content = _contentManager.UpdateEditorModel(contentItem, this); + var viewModel = new AddLocalizationViewModel(); + TryUpdateModel(viewModel); + + ContentItem contentItemTranslation; + var existingTranslation = _localizationService.GetLocalizedContentItem(contentItem, viewModel.SelectedCulture); + if (existingTranslation != null) { // edit existing + contentItemTranslation = existingTranslation.ContentItem; + } + else { // create + contentItemTranslation = _contentManager.New(contentItem.ContentType); + var localized = contentItemTranslation.As(); + localized.MasterContentItem = contentItem; + localized.Culture = _cultureManager.GetCultureByName(viewModel.SelectedCulture); + _contentManager.Create(contentItemTranslation, VersionOptions.Draft); + } + + if (ModelState.IsValid) + viewModel.Content = _contentManager.UpdateEditorModel(contentItemTranslation, this); - //todo: create translation here if (!ModelState.IsValid) { Services.TransactionManager.Cancel(); + viewModel.SiteCultures = _cultureManager.ListCultures().Where(s => s != _localizationService.GetContentCulture(contentItem)); PrepareEditorViewModel(viewModel.Content); return View(viewModel); } - _contentManager.Publish(contentItem); + + _contentManager.Publish(contentItemTranslation); var metadata = _contentManager.GetItemMetadata(viewModel.Content.Item); if (metadata.EditorRouteValues == null) - return null; + return null; //todo: (heskew) redirect to somewhere better than nowhere return RedirectToRoute(metadata.EditorRouteValues); } diff --git a/src/Orchard.Web/Core/Localization/Drivers/LocalizationDriver.cs b/src/Orchard.Web/Core/Localization/Drivers/LocalizationDriver.cs index 191af1e9c..0f30e48ce 100644 --- a/src/Orchard.Web/Core/Localization/Drivers/LocalizationDriver.cs +++ b/src/Orchard.Web/Core/Localization/Drivers/LocalizationDriver.cs @@ -1,35 +1,50 @@ -using JetBrains.Annotations; -using Orchard.ContentManagement; +using System.Linq; +using System.Web; +using JetBrains.Annotations; using Orchard.ContentManagement.Drivers; using Orchard.Core.Common; using Orchard.Core.Localization.Models; +using Orchard.Core.Localization.Services; using Orchard.Core.Localization.ViewModels; +using Orchard.Localization.Services; namespace Orchard.Core.Localization.Drivers { [UsedImplicitly] public class LocalizationDriver : ContentPartDriver { - public LocalizationDriver(IOrchardServices services) { + private readonly ICultureManager _cultureManager; + private readonly ILocalizationService _localizationService; + + public LocalizationDriver(IOrchardServices services, ICultureManager cultureManager, ILocalizationService localizationService) { + _cultureManager = cultureManager; + _localizationService = localizationService; Services = services; } public IOrchardServices Services { get; set; } protected override DriverResult Display(Localized part, string displayType) { + // for viewing or adding translation if (!Services.Authorizer.Authorize(Permissions.ChangeOwner)) { return null; } - var model = new ContentTranslationsViewModel(part); + var model = new ContentLocalizationsViewModel(part) { + CanLocalize = _cultureManager.ListCultures() + .Where(s => s != _cultureManager.GetCurrentCulture(new HttpContextWrapper(HttpContext.Current)) && s != _localizationService.GetContentCulture(part.ContentItem)) + .Count() > 0, + Localizations = _localizationService.GetLocalizations(part.ContentItem) + }; return ContentPartTemplate(model, "Parts/Localization.ContentTranslations").LongestMatch(displayType, "Summary", "SummaryAdmin").Location("primary", "5"); } protected override DriverResult Editor(Localized part) { - var model = new LocalizationEditorViewModel(); + // ContentTranslations: for when there are drafts of translations + // CultureSelection: for a new translation + + //var model = new SelectTranslationsViewModel(part); //if (part.ContentItem.Is()) - return ContentPartTemplate(model, "Parts/Localization.IsLocalized").Location("primary", "before.3"); + return ContentPartTemplate(new SelectLocalizationsViewModel(part), "Parts/Localization.ContentTranslations").Location("secondary", "5"); } } - - public class LocalizationEditorViewModel {} } \ No newline at end of file diff --git a/src/Orchard.Web/Core/Localization/Services/ILocalizationService.cs b/src/Orchard.Web/Core/Localization/Services/ILocalizationService.cs new file mode 100644 index 000000000..fc007499a --- /dev/null +++ b/src/Orchard.Web/Core/Localization/Services/ILocalizationService.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; +using Orchard.ContentManagement; +using Orchard.Core.Localization.Models; + +namespace Orchard.Core.Localization.Services { + public interface ILocalizationService : IDependency { + Localized GetLocalizedContentItem(IContent masterContentItem, string culture); + string GetContentCulture(IContent contentItem); + IEnumerable GetLocalizations(IContent contentItem); + } +} diff --git a/src/Orchard.Web/Core/Localization/Services/LocalizationService.cs b/src/Orchard.Web/Core/Localization/Services/LocalizationService.cs new file mode 100644 index 000000000..c45750759 --- /dev/null +++ b/src/Orchard.Web/Core/Localization/Services/LocalizationService.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Orchard.ContentManagement; +using Orchard.Core.Localization.Models; +using Orchard.Localization.Services; + +namespace Orchard.Core.Localization.Services { + public class LocalizationService : ILocalizationService { + private readonly IContentManager _contentManager; + private readonly ICultureManager _cultureManager; + + public LocalizationService(IContentManager contentManager, ICultureManager cultureManager) { + _contentManager = contentManager; + _cultureManager = cultureManager; + } + + Localized ILocalizationService.GetLocalizedContentItem(IContent content, string culture) { + return _contentManager.Query(content.ContentItem.ContentType).Join() + .List() + .Select(i => i.As()) + .Where(l => l.MasterContentItem != null && l.MasterContentItem.ContentItem.Id == content.ContentItem.Id && string.Equals(l.Culture.Culture, culture, StringComparison.OrdinalIgnoreCase)) + .SingleOrDefault(); + } + + string ILocalizationService.GetContentCulture(IContent content) { + return content.Is() && content.As().Culture != null + ? content.As().Culture.Culture + : _cultureManager.GetSiteCulture(); + } + + IEnumerable ILocalizationService.GetLocalizations(IContent content) { + var localized = content.As(); + + if (localized.MasterContentItem != null) + return _contentManager.Query(content.ContentItem.ContentType).Join() + .List() + .Select(i => i.As()) + .Where(l => l.Id != content.ContentItem.Id && (l.Id == localized.MasterContentItem.ContentItem.Id || l.MasterContentItem != null && l.MasterContentItem.ContentItem.Id == localized.MasterContentItem.ContentItem.Id)); + + return _contentManager.Query(content.ContentItem.ContentType).Join() + .List() + .Select(i => i.As()) + .Where(l => l.MasterContentItem != null && l.MasterContentItem.ContentItem.Id == content.ContentItem.Id); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Core/Localization/Styles/admin.css b/src/Orchard.Web/Core/Localization/Styles/admin.css new file mode 100644 index 000000000..bd4604788 --- /dev/null +++ b/src/Orchard.Web/Core/Localization/Styles/admin.css @@ -0,0 +1,23 @@ +.content-localization .content-localizations li, +.content-localization .add-localization { + font-size:1.4em; +} +.content-localization .content-localizations { + font-size:.9em; + margin:1.44em 0 .44em; +} +.content-localization .content-localizations>* { + display:inline; +} +.content-localization .content-localizations li { + border-bottom:0; + display:inline; + margin-left:.5em; + padding:0; +} +.content-localization .content-localizations li::after { + content:", "; +} +.content-localization .content-localizations li:last-child::after { + content:""; +} \ No newline at end of file diff --git a/src/Orchard.Web/Core/Localization/ViewModels/AddLocalizationViewModel.cs b/src/Orchard.Web/Core/Localization/ViewModels/AddLocalizationViewModel.cs new file mode 100644 index 000000000..50ef1689d --- /dev/null +++ b/src/Orchard.Web/Core/Localization/ViewModels/AddLocalizationViewModel.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; +using Orchard.Mvc.ViewModels; + +namespace Orchard.Core.Localization.ViewModels { + public class AddLocalizationViewModel : BaseViewModel { + public int Id { get; set; } + public string SelectedCulture { get; set; } + public IEnumerable SiteCultures { get; set; } + public ContentItemViewModel Content { get; set; } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Core/Localization/ViewModels/ContentLocalizationsViewModel.cs b/src/Orchard.Web/Core/Localization/ViewModels/ContentLocalizationsViewModel.cs new file mode 100644 index 000000000..d888695a7 --- /dev/null +++ b/src/Orchard.Web/Core/Localization/ViewModels/ContentLocalizationsViewModel.cs @@ -0,0 +1,14 @@ +using System.Collections.Generic; +using Orchard.ContentManagement; + +namespace Orchard.Core.Localization.ViewModels { + public class ContentLocalizationsViewModel { + public ContentLocalizationsViewModel(IContent part) { + Id = part.ContentItem.Id; + } + + public int Id { get; private set; } + public bool CanLocalize { get; set; } + public IEnumerable Localizations { get; set; } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Core/Localization/ViewModels/ContentTranslationsViewModel.cs b/src/Orchard.Web/Core/Localization/ViewModels/SelectLocalizationsViewModel.cs similarity index 51% rename from src/Orchard.Web/Core/Localization/ViewModels/ContentTranslationsViewModel.cs rename to src/Orchard.Web/Core/Localization/ViewModels/SelectLocalizationsViewModel.cs index d8339e152..d581664a2 100644 --- a/src/Orchard.Web/Core/Localization/ViewModels/ContentTranslationsViewModel.cs +++ b/src/Orchard.Web/Core/Localization/ViewModels/SelectLocalizationsViewModel.cs @@ -1,8 +1,8 @@ using Orchard.Core.Localization.Models; namespace Orchard.Core.Localization.ViewModels { - public class ContentTranslationsViewModel { - public ContentTranslationsViewModel(Localized part) { + public class SelectLocalizationsViewModel { + public SelectLocalizationsViewModel(Localized part) { } } diff --git a/src/Orchard.Web/Core/Localization/Views/Admin/Translate.ascx b/src/Orchard.Web/Core/Localization/Views/Admin/Translate.ascx index cc48f9092..664432381 100644 --- a/src/Orchard.Web/Core/Localization/Views/Admin/Translate.ascx +++ b/src/Orchard.Web/Core/Localization/Views/Admin/Translate.ascx @@ -1,7 +1,8 @@ -<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl" %> -<%@ Import Namespace="Orchard.Core.Contents.ViewModels" %> -

<%:Html.TitleForPage(T("Translate Content").ToString())%>

+<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl" %> +<%@ Import Namespace="Orchard.Core.Localization.ViewModels" %><% +Model.Content.Zones.AddRenderPartial("primary:before", "CultureSelection", Model); %> +

<%:Html.TitleForPage(T("Translate Content").ToString()) %>

<% using (Html.BeginFormAntiForgeryPost()) { %> <%:Html.ValidationSummary() %> <%:Html.EditorForItem(m=>m.Content) %> -<%} %> +<%} %> \ No newline at end of file diff --git a/src/Orchard.Web/Core/Localization/Views/CultureSelection.ascx b/src/Orchard.Web/Core/Localization/Views/CultureSelection.ascx new file mode 100644 index 000000000..3f792ff3c --- /dev/null +++ b/src/Orchard.Web/Core/Localization/Views/CultureSelection.ascx @@ -0,0 +1,5 @@ +<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl" %> +
+ + <%:Html.DropDownList("SelectedCulture", new SelectList(Model.SiteCultures, Model.SelectedCulture)) %> +
\ No newline at end of file diff --git a/src/Orchard.Web/Core/Localization/Views/DisplayTemplates/Parts/Localization.ContentTranslations.SummaryAdmin.ascx b/src/Orchard.Web/Core/Localization/Views/DisplayTemplates/Parts/Localization.ContentTranslations.SummaryAdmin.ascx index 5f99eb6aa..99053666c 100644 --- a/src/Orchard.Web/Core/Localization/Views/DisplayTemplates/Parts/Localization.ContentTranslations.SummaryAdmin.ascx +++ b/src/Orchard.Web/Core/Localization/Views/DisplayTemplates/Parts/Localization.ContentTranslations.SummaryAdmin.ascx @@ -1,4 +1,16 @@ -<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl" %> -
- [translate content] -
\ No newline at end of file +<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl" %> +<%@ Import Namespace="Orchard.Core.Localization.Models" %> +<%@ Import Namespace="Orchard.ContentManagement" %> +<% + Html.RegisterStyle("admin.css"); %> +<% if (Model.Localizations.Count() > 0 || Model.CanLocalize) { %> +
<% + if (Model.Localizations.Count() > 0) { %> + <%--//todo: need this info in the view model--%> +

<%:T("Other localizations:") %>

<%:Html.UnorderedList(Model.Localizations, (c, i) => Html.ItemDisplayLink(c.ContentItem.As().Culture != null ? c.ContentItem.As().Culture.Culture : "[site's default culture]", c), "localizations") %>
<% + } + if (Model.CanLocalize) { %> +
<%:Html.ActionLink(T("+ New translation").Text, "translate", "admin", new { area = "Localization", id = Model.Id }, null)%>
<% + } %> +
<% +} %> \ No newline at end of file diff --git a/src/Orchard.Web/Core/Localization/Views/EditorTemplates/Parts/Localization.ContentTranslations.ascx b/src/Orchard.Web/Core/Localization/Views/EditorTemplates/Parts/Localization.ContentTranslations.ascx new file mode 100644 index 000000000..9cf23d634 --- /dev/null +++ b/src/Orchard.Web/Core/Localization/Views/EditorTemplates/Parts/Localization.ContentTranslations.ascx @@ -0,0 +1,5 @@ +<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl" %> +
+ Publish also in + [translations to publish] +
\ No newline at end of file diff --git a/src/Orchard.Web/Core/Localization/Views/EditorTemplates/Parts/Localization.CultureSelection.ascx b/src/Orchard.Web/Core/Localization/Views/EditorTemplates/Parts/Localization.CultureSelection.ascx deleted file mode 100644 index f05cec4a7..000000000 --- a/src/Orchard.Web/Core/Localization/Views/EditorTemplates/Parts/Localization.CultureSelection.ascx +++ /dev/null @@ -1,4 +0,0 @@ -<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl" %> -
- [do the translate content] -
\ No newline at end of file diff --git a/src/Orchard.Web/Core/Orchard.Core.csproj b/src/Orchard.Web/Core/Orchard.Core.csproj index c18f5cd98..512d10e93 100644 --- a/src/Orchard.Web/Core/Orchard.Core.csproj +++ b/src/Orchard.Web/Core/Orchard.Core.csproj @@ -82,12 +82,16 @@ + + + + - + @@ -239,13 +243,15 @@ + + - + diff --git a/src/Orchard.Web/Core/Settings/Controllers/AdminController.cs b/src/Orchard.Web/Core/Settings/Controllers/AdminController.cs index 71d5b36dc..e5657c4d0 100644 --- a/src/Orchard.Web/Core/Settings/Controllers/AdminController.cs +++ b/src/Orchard.Web/Core/Settings/Controllers/AdminController.cs @@ -59,7 +59,7 @@ namespace Orchard.Core.Settings.Controllers { return new HttpUnauthorizedResult(); var viewModel = new SiteCulturesViewModel { - CurrentCulture = CultureInfo.CurrentCulture.Name, + CurrentCulture = _cultureManager.GetCurrentCulture(HttpContext), SiteCultures = _cultureManager.ListCultures(), }; viewModel.AvailableSystemCultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures) diff --git a/src/Orchard/Localization/Services/DefaultCultureManager.cs b/src/Orchard/Localization/Services/DefaultCultureManager.cs index 40bd7b17e..1ead59bc0 100644 --- a/src/Orchard/Localization/Services/DefaultCultureManager.cs +++ b/src/Orchard/Localization/Services/DefaultCultureManager.cs @@ -48,7 +48,7 @@ namespace Orchard.Localization.Services { } } - public string GetCurrentCulture(HttpContext requestContext) { + public string GetCurrentCulture(HttpContextBase requestContext) { var requestCulture = _cultureSelectors .Select(x => x.GetCulture(requestContext)) .Where(x => x != null) @@ -70,6 +70,10 @@ namespace Orchard.Localization.Services { return _cultureRepository.Get(id); } + public CultureRecord GetCultureByName(string cultureName) { + return _cultureRepository.Get(cr => cr.Culture == cultureName); + } + public string GetSiteCulture() { return CurrentSite == null ? null : CurrentSite.SiteCulture; } diff --git a/src/Orchard/Localization/Services/ICultureManager.cs b/src/Orchard/Localization/Services/ICultureManager.cs index e866e78c6..284f0430c 100644 --- a/src/Orchard/Localization/Services/ICultureManager.cs +++ b/src/Orchard/Localization/Services/ICultureManager.cs @@ -7,8 +7,9 @@ namespace Orchard.Localization.Services { IEnumerable ListCultures(); void AddCulture(string cultureName); void DeleteCulture(string cultureName); - string GetCurrentCulture(HttpContext requestContext); + string GetCurrentCulture(HttpContextBase requestContext); CultureRecord GetCultureById(int id); + CultureRecord GetCultureByName(string cultureName); string GetSiteCulture(); bool IsValidCulture(string cultureName); } diff --git a/src/Orchard/Localization/Services/ICultureSelector.cs b/src/Orchard/Localization/Services/ICultureSelector.cs index 3495e1606..1c4804c4a 100644 --- a/src/Orchard/Localization/Services/ICultureSelector.cs +++ b/src/Orchard/Localization/Services/ICultureSelector.cs @@ -7,6 +7,6 @@ namespace Orchard.Localization.Services { } public interface ICultureSelector : IDependency { - CultureSelectorResult GetCulture(HttpContext context); + CultureSelectorResult GetCulture(HttpContextBase context); } } diff --git a/src/Orchard/Localization/Services/SiteCultureSelector.cs b/src/Orchard/Localization/Services/SiteCultureSelector.cs index 87b74f760..cac220fe6 100644 --- a/src/Orchard/Localization/Services/SiteCultureSelector.cs +++ b/src/Orchard/Localization/Services/SiteCultureSelector.cs @@ -7,7 +7,7 @@ namespace Orchard.Localization.Services { public class SiteCultureSelector : ICultureSelector { protected virtual ISite CurrentSite { get; [UsedImplicitly] private set; } - public CultureSelectorResult GetCulture(HttpContext context) { + public CultureSelectorResult GetCulture(HttpContextBase context) { string currentCultureName = CurrentSite.SiteCulture; if (String.IsNullOrEmpty(currentCultureName)) { diff --git a/src/Orchard/Localization/Text.cs b/src/Orchard/Localization/Text.cs index dc9679030..30c0442c9 100644 --- a/src/Orchard/Localization/Text.cs +++ b/src/Orchard/Localization/Text.cs @@ -23,7 +23,7 @@ namespace Orchard.Localization { public LocalizedString Get(string textHint, params object[] args) { Logger.Debug("{0} localizing '{1}'", _scope, textHint); - string currentCulture = _cultureManager.GetCurrentCulture(HttpContext.Current); + string currentCulture = _cultureManager.GetCurrentCulture(new HttpContextWrapper(HttpContext.Current)); var localizedFormat = _resourceManager.GetLocalizedString(_scope, textHint, currentCulture); return args.Length == 0