#17063: Making Widgets localizable

Work Item: 17063

--HG--
branch : 1.x
This commit is contained in:
Sebastien Ros
2011-09-19 17:22:15 -07:00
parent 2572ffa496
commit 1906833a04
5 changed files with 25 additions and 5 deletions

View File

@@ -1,9 +1,10 @@
using Orchard.ContentManagement; using Orchard.ContentManagement;
using Orchard.ContentManagement.Aspects;
using Orchard.ContentManagement.Utilities; using Orchard.ContentManagement.Utilities;
using Orchard.Localization.Records; using Orchard.Localization.Records;
namespace Orchard.Localization.Models { namespace Orchard.Localization.Models {
public sealed class LocalizationPart : ContentPart<LocalizationPartRecord> { public sealed class LocalizationPart : ContentPart<LocalizationPartRecord>, ILocalizablePart {
private readonly LazyField<CultureRecord> _culture = new LazyField<CultureRecord>(); private readonly LazyField<CultureRecord> _culture = new LazyField<CultureRecord>();
private readonly LazyField<IContent> _masterContentItem = new LazyField<IContent>(); private readonly LazyField<IContent> _masterContentItem = new LazyField<IContent>();
@@ -25,5 +26,9 @@ namespace Orchard.Localization.Models {
return Record.MasterContentItemId != 0; return Record.MasterContentItemId != 0;
} }
} }
string ILocalizablePart.Culture {
get { return Culture == null ? null : Culture.Culture; }
}
} }
} }

View File

@@ -1,7 +1,7 @@
@model Orchard.Localization.ViewModels.EditLocalizationViewModel @model Orchard.Localization.ViewModels.EditLocalizationViewModel
@if (Model.ContentItem.ContentItem.Id > 0 && Model.SelectedCulture != null && Model.ContentLocalizations.Localizations.Count() > 0) {
Style.Require("LocalizationAdmin");
<fieldset class="localization culture-selection"> <fieldset class="localization culture-selection">
@if (Model.ContentItem.ContentItem.Id > 0 && Model.SelectedCulture != null && Model.ContentLocalizations.Localizations.Count() > 0) {
Style.Require("LocalizationAdmin");
<fieldset class="culture-selected"> <fieldset class="culture-selected">
<label for="SelectedCulture">@T("Content Localization")</label> <label for="SelectedCulture">@T("Content Localization")</label>
<div>@T("This is the <em>{0}</em> variation of {1}.", <div>@T("This is the <em>{0}</em> variation of {1}.",
@@ -9,7 +9,7 @@ Style.Require("LocalizationAdmin");
Html.ItemEditLink(Model.MasterContentItem ?? Model.ContentItem))</div> Html.ItemEditLink(Model.MasterContentItem ?? Model.ContentItem))</div>
@Html.Hidden("SelectedCulture", Model.SelectedCulture) @Html.Hidden("SelectedCulture", Model.SelectedCulture)
</fieldset> </fieldset>
@if (Model.ContentLocalizations.Localizations.Count() > 0) { if (Model.ContentLocalizations.Localizations.Count() > 0) {
<dl class="content-localization"> <dl class="content-localization">
<dt>@T("Other translations:")</dt> <dt>@T("Other translations:")</dt>
<dd class="content-localizations"> <dd class="content-localizations">
@@ -17,4 +17,6 @@ Style.Require("LocalizationAdmin");
</dd> </dd>
</dl> </dl>
} }
</fieldset>} }
<div class="add-localization">@Html.ActionLink(T("+ New translation").Text, "Translate", "Admin", new { area = "Orchard.Localization", id = Model.ContentItem.Id }, null)</div>
</fieldset>

View File

@@ -70,6 +70,13 @@ namespace Orchard.Widgets.Filters {
Logger.Warning("The widget '{0}' is has no assigned layer or the layer does not exist.", widgetPart.Title); Logger.Warning("The widget '{0}' is has no assigned layer or the layer does not exist.", widgetPart.Title);
continue; continue;
} }
// ignore widget for different cultures
var localizablePart = widgetPart.As<ILocalizablePart>();
if (localizablePart == null || localizablePart.Culture != workContext.CurrentCulture) {
continue;
}
if (activeLayerIds.Contains(commonPart.Container.ContentItem.Id)) { if (activeLayerIds.Contains(commonPart.Container.ContentItem.Id)) {
var widgetShape = _contentManager.BuildDisplay(widgetPart); var widgetShape = _contentManager.BuildDisplay(widgetPart);
zones[widgetPart.Record.Zone].Add(widgetShape, widgetPart.Record.Position); zones[widgetPart.Record.Zone].Add(widgetShape, widgetPart.Record.Position);

View File

@@ -0,0 +1,5 @@
namespace Orchard.ContentManagement.Aspects {
public interface ILocalizablePart : IContent {
string Culture { get ; }
}
}

View File

@@ -164,6 +164,7 @@
<Compile Include="Caching\DefaultParallelCacheContext.cs" /> <Compile Include="Caching\DefaultParallelCacheContext.cs" />
<Compile Include="Caching\ICacheContextAccessor.cs" /> <Compile Include="Caching\ICacheContextAccessor.cs" />
<Compile Include="Caching\IParallelCacheContext.cs" /> <Compile Include="Caching\IParallelCacheContext.cs" />
<Compile Include="ContentManagement\Aspects\ILocalizablePart.cs" />
<Compile Include="ContentManagement\ContentIdentity.cs" /> <Compile Include="ContentManagement\ContentIdentity.cs" />
<Compile Include="ContentManagement\ContentItemBehavior.cs" /> <Compile Include="ContentManagement\ContentItemBehavior.cs" />
<Compile Include="ContentManagement\ContentPartBehavior.cs" /> <Compile Include="ContentManagement\ContentPartBehavior.cs" />