mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-26 20:16:15 +08:00
committed by
Sébastien Ros
parent
f3f7c98e47
commit
a542efbe8d
@@ -30,15 +30,10 @@ namespace Orchard.Localization.Services {
|
||||
if (localized == null)
|
||||
return null;
|
||||
|
||||
var masterContent = content.ContentItem.As<LocalizationPart>().MasterContentItem != null ? content.ContentItem.As<LocalizationPart>().MasterContentItem : content;
|
||||
// Warning: Returns only the first of same culture localizations.
|
||||
return _contentManager
|
||||
.Query<LocalizationPart>(versionOptions, content.ContentItem.ContentType)
|
||||
.Where<LocalizationPartRecord>(l =>
|
||||
(l.Id == masterContent.Id || l.MasterContentItemId == masterContent.Id)
|
||||
&& l.CultureId == cultureRecord.Id)
|
||||
.Slice(1)
|
||||
.FirstOrDefault();
|
||||
if (localized.Culture.Culture == culture)
|
||||
return localized;
|
||||
|
||||
return ((ILocalizationService)this).GetLocalizations(content, versionOptions).FirstOrDefault(x=>x.Culture.Id == cultureRecord.Id);
|
||||
}
|
||||
|
||||
string ILocalizationService.GetContentCulture(IContent content) {
|
||||
@@ -92,8 +87,8 @@ namespace Orchard.Localization.Services {
|
||||
}
|
||||
|
||||
// Warning: May contain more than one localization of the same culture.
|
||||
return query.List().ToList();
|
||||
return query.List();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
}
|
||||
|
||||
if (Model.MissingCultures.Any()) {
|
||||
var contentItemId = Model.MasterContentItem != null ? Model.MasterContentItem.Id : Model.ContentItem.Id;
|
||||
var contentItemId = Model.ContentItem.Id;
|
||||
if (returnUrl != "") {
|
||||
<div class="add-localization">@Html.ActionLink(T("+ New translation").Text, "Translate", "Admin", new { area = "Orchard.Localization", id = contentItemId, ReturnUrl = returnUrl }, new { itemprop = "UnsafeUrl" })</div>
|
||||
}
|
||||
@@ -39,14 +39,14 @@
|
||||
|
||||
@Html.Hidden(Html.FieldNameFor(m => m.SelectedCulture), Model.SelectedCulture)
|
||||
}
|
||||
else if (Model.MasterContentItem != null) {
|
||||
else {
|
||||
@T("This is the <em>{0}</em> variation of {1}",
|
||||
BuildSelectedCultureList(
|
||||
Html.FieldIdFor(m => m.SelectedCulture),
|
||||
Html.FieldNameFor(m => m.SelectedCulture),
|
||||
Model.MissingCultures,
|
||||
Model.SelectedCulture),
|
||||
Html.ItemEditLink(Model.MasterContentItem))
|
||||
Html.ItemEditLink(Model.MasterContentItem != null?Model.MasterContentItem:Model.ContentLocalizations.Localizations.FirstOrDefault()))
|
||||
|
||||
if (Model.ContentLocalizations.Localizations.Any()) {
|
||||
<dl class="content-localization">
|
||||
@@ -64,14 +64,7 @@
|
||||
</dl>
|
||||
}
|
||||
}
|
||||
else {
|
||||
@T("This is the <em>{0}</em> variation of the content",
|
||||
BuildSelectedCultureList(
|
||||
Html.FieldIdFor(m => m.SelectedCulture),
|
||||
Html.FieldNameFor(m => m.SelectedCulture),
|
||||
Model.MissingCultures,
|
||||
Model.SelectedCulture))
|
||||
}
|
||||
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ using System.Web.Mvc;
|
||||
using Orchard.ContentManagement;
|
||||
using Orchard.ContentManagement.MetaData;
|
||||
using Orchard.Environment.Extensions;
|
||||
using Orchard.Localization.Models;
|
||||
using Orchard.Localization.Services;
|
||||
using Orchard.Taxonomies.Drivers;
|
||||
using Orchard.Taxonomies.Fields;
|
||||
@@ -56,8 +57,15 @@ namespace Orchard.Taxonomies.Controllers {
|
||||
? _taxonomyService.GetTerms(taxonomy.Id).Where(t => !string.IsNullOrWhiteSpace(t.Name)).Select(t => t.CreateTermEntry()).Where(te => !te.HasDraft).ToList()
|
||||
: new List<TermEntry>(0);
|
||||
List<TermPart> appliedTerms = new List<TermPart>();
|
||||
int firstTermIdForCulture = 0;
|
||||
if (contentId > 0) {
|
||||
appliedTerms = _taxonomyService.GetTermsForContentItem(contentId, taxonomyFieldName, VersionOptions.Published).Distinct(new TermPartComparer()).ToList();
|
||||
|
||||
// It takes the first term localized with the culture in order to set correctly the TaxonomyFieldViewModel.SingleTermId
|
||||
var firstTermForCulture = appliedTerms.FirstOrDefault(x => x.As<LocalizationPart>() != null && x.As<LocalizationPart>().Culture != null && x.As<LocalizationPart>().Culture.Culture == culture);
|
||||
if (firstTermForCulture != null) {
|
||||
firstTermIdForCulture = firstTermForCulture.Id;
|
||||
}
|
||||
terms.ForEach(t => t.IsChecked = appliedTerms.Select(x => x.Id).Contains(t.Id));
|
||||
}
|
||||
viewModel = new TaxonomyFieldViewModel {
|
||||
@@ -66,7 +74,7 @@ namespace Orchard.Taxonomies.Controllers {
|
||||
Terms = terms,
|
||||
SelectedTerms = appliedTerms,
|
||||
Settings = taxonomySettings,
|
||||
SingleTermId = appliedTerms.Select(t => t.Id).FirstOrDefault(),
|
||||
SingleTermId = firstTermIdForCulture,
|
||||
TaxonomyId = taxonomy != null ? taxonomy.Id : 0,
|
||||
HasTerms = taxonomy != null && _taxonomyService.GetTermsCount(taxonomy.Id) > 0
|
||||
};
|
||||
|
||||
@@ -70,20 +70,21 @@ namespace Orchard.Taxonomies.Handlers {
|
||||
if (partFieldDefinitions == null)
|
||||
return; // contentitem without taxonomy
|
||||
base.BuildEditorShape(context);
|
||||
var missingCultures = localizationPart.HasTranslationGroup ?
|
||||
RetrieveMissingCultures(localizationPart.MasterContentItem.As<LocalizationPart>(), true) :
|
||||
RetrieveMissingCultures(localizationPart, localizationPart.Culture != null);
|
||||
var missingCultures = RetrieveMissingCultures(localizationPart, localizationPart.Culture != null);
|
||||
foreach (var partFieldDefinition in partFieldDefinitions) {
|
||||
if (partFieldDefinition.Settings.GetModel<TaxonomyFieldLocalizationSettings>().TryToLocalize) {
|
||||
var originalTermParts = _taxonomyService.GetTermsForContentItem(context.ContentItem.As<LocalizationPart>().MasterContentItem.Id, partFieldDefinition.Name, VersionOptions.Latest).Distinct(new TermPartComparer()).ToList();
|
||||
var originalTermParts = _taxonomyService.GetTermsForContentItem(context.ContentItem.Id, partFieldDefinition.Name, VersionOptions.Latest).Distinct(new TermPartComparer()).ToList();
|
||||
var newTermParts = new List<TermPart>();
|
||||
foreach (var originalTermPart in originalTermParts) {
|
||||
var masterTermPart = _taxonomyExtensionsService.GetMasterItem(originalTermPart.ContentItem);
|
||||
if (masterTermPart != null) {
|
||||
foreach (var missingCulture in missingCultures) {
|
||||
var newTerm = _localizationService.GetLocalizedContentItem(masterTermPart, missingCulture);
|
||||
if (newTerm != null)
|
||||
newTermParts.Add(newTerm.ContentItem.As<TermPart>());
|
||||
if (newTerm != null) {
|
||||
if (!newTermParts.Contains(newTerm.ContentItem.As<TermPart>())) { //Prevent duplicates
|
||||
newTermParts.Add(newTerm.ContentItem.As<TermPart>());
|
||||
}
|
||||
}
|
||||
else
|
||||
_notifier.Add(NotifyType.Warning, T("Term {0} can't be localized on {1}, term has been removed on this language", originalTermPart.ContentItem.As<TitlePart>().Title, missingCulture));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user