From ddf500b169f80b3149a5738582473a95a877851f Mon Sep 17 00:00:00 2001 From: Brian Sokolnicki Date: Fri, 2 Aug 2019 12:53:50 -0500 Subject: [PATCH 001/432] bug fix for array iteration --- .../src/common/services/tree.service.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/services/tree.service.js b/src/Umbraco.Web.UI.Client/src/common/services/tree.service.js index 3e60b09ad9..3c9846fc43 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/tree.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/tree.service.js @@ -69,12 +69,14 @@ function treeService($q, treeResource, iconHelper, notificationsService, eventsS if (childPath.startsWith(p + ",")) { //this means that the node's path supercedes this path stored so we can remove the current 'p' and replace it with node.path expandedPaths.splice(expandedPaths.indexOf(p), 1); //remove it - expandedPaths.push(childPath); //replace it + if (expandedPaths.indexOf(childPath) === -1) { + expandedPaths.push(childPath); //replace it + } } else if (p.startsWith(childPath + ",")) { //this means we've already tracked a deeper node so we shouldn't track this one } - else { + else if (expandedPaths.indexOf(childPath) === -1) { expandedPaths.push(childPath); //track it } }); From 4b4f571d143c584637d9da255d22a77910cb3582 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20Knippers?= Date: Fri, 23 Aug 2019 15:18:53 +0200 Subject: [PATCH 002/432] Support for Segments in ContentTypeRepositoryBase --- .../Implement/ContentTypeRepositoryBase.cs | 187 +++++++----------- 1 file changed, 75 insertions(+), 112 deletions(-) diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/ContentTypeRepositoryBase.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/ContentTypeRepositoryBase.cs index f2efb03ba4..4428f35de7 100644 --- a/src/Umbraco.Core/Persistence/Repositories/Implement/ContentTypeRepositoryBase.cs +++ b/src/Umbraco.Core/Persistence/Repositories/Implement/ContentTypeRepositoryBase.cs @@ -1,4 +1,5 @@ -using System; + +using System; using System.Collections.Generic; using System.Data; using System.Globalization; @@ -410,24 +411,8 @@ AND umbracoNode.id <> @id", // note: this only deals with *local* property types, we're dealing w/compositions later below foreach (var propertyType in entity.PropertyTypes) { - if (contentTypeVariationChanging) - { - // content type is changing - switch (newContentTypeVariation) - { - case ContentVariation.Nothing: // changing to Nothing - // all property types must change to Nothing - propertyType.Variations = ContentVariation.Nothing; - break; - case ContentVariation.Culture: // changing to Culture - // all property types can remain Nothing - break; - case ContentVariation.CultureAndSegment: - case ContentVariation.Segment: - default: - throw new NotSupportedException(); // TODO: Support this - } - } + // Update property variations + propertyType.Variations = newContentTypeVariation & propertyType.Variations; // then, track each property individually if (propertyType.IsPropertyDirty("Variations")) @@ -455,23 +440,17 @@ AND umbracoNode.id <> @id", // via composition, with their original variations (ie not filtered by this // content type variations - we need this true value to make decisions. + propertyTypeVariationChanges = propertyTypeVariationChanges ?? new Dictionary(); + foreach (var propertyType in ((ContentTypeCompositionBase)entity).RawComposedPropertyTypes) { - if (propertyType.VariesBySegment() || newContentTypeVariation.VariesBySegment()) - throw new NotSupportedException(); // TODO: support this + if (propertyType.Variations == ContentVariation.Nothing) continue; - if (propertyType.Variations == ContentVariation.Culture) - { - if (propertyTypeVariationChanges == null) - propertyTypeVariationChanges = new Dictionary(); + var target = newContentTypeVariation & propertyType.Variations; - // if content type moves to Culture, property type becomes Culture here again - // if content type moves to Nothing, property type becomes Nothing here - if (newContentTypeVariation == ContentVariation.Culture) - propertyTypeVariationChanges[propertyType.Id] = (ContentVariation.Nothing, ContentVariation.Culture); - else if (newContentTypeVariation == ContentVariation.Nothing) - propertyTypeVariationChanges[propertyType.Id] = (ContentVariation.Culture, ContentVariation.Nothing); - } + // if content type moves to a different variant, property type becomes Culture here again + // if content type moves to Nothing, property type becomes Nothing here + propertyTypeVariationChanges[propertyType.Id] = (propertyType.Variations, target); } } @@ -512,7 +491,7 @@ AND umbracoNode.id <> @id", var impacted = GetImpactedContentTypes(entity, all); // if some property types have actually changed, move their variant data - if (propertyTypeVariationChanges != null) + if (propertyTypeVariationChanges?.Count > 0) MovePropertyTypeVariantData(propertyTypeVariationChanges, impacted); // deal with orphan properties: those that were in a deleted tab, @@ -661,27 +640,24 @@ AND umbracoNode.id <> @id", var impactedL = impacted.Select(x => x.Id).ToList(); //Group by the "To" variation so we can bulk update in the correct batches - foreach (var grouping in propertyTypeChanges.GroupBy(x => x.Value.ToVariation)) + foreach (var grouping in propertyTypeChanges.GroupBy(x => x.Value)) { var propertyTypeIds = grouping.Select(x => x.Key).ToList(); - var toVariation = grouping.Key; + var (FromVariation, ToVariation) = grouping.Key; - switch (toVariation) + if(!FromVariation.HasFlag(ContentVariation.Culture) && + ToVariation.HasFlag(ContentVariation.Culture)) { - case ContentVariation.Culture: - CopyPropertyData(null, defaultLanguageId, propertyTypeIds, impactedL); - CopyTagData(null, defaultLanguageId, propertyTypeIds, impactedL); - RenormalizeDocumentEditedFlags(propertyTypeIds, impactedL); - break; - case ContentVariation.Nothing: - CopyPropertyData(defaultLanguageId, null, propertyTypeIds, impactedL); - CopyTagData(defaultLanguageId, null, propertyTypeIds, impactedL); - RenormalizeDocumentEditedFlags(propertyTypeIds, impactedL); - break; - case ContentVariation.CultureAndSegment: - case ContentVariation.Segment: - default: - throw new NotSupportedException(); // TODO: Support this + CopyPropertyData(null, defaultLanguageId, propertyTypeIds, impactedL); + CopyTagData(null, defaultLanguageId, propertyTypeIds, impactedL); + RenormalizeDocumentEditedFlags(propertyTypeIds, impactedL); + } + else if (FromVariation.HasFlag(ContentVariation.Culture) && + !ToVariation.HasFlag(ContentVariation.Culture)) + { + CopyPropertyData(defaultLanguageId, null, propertyTypeIds, impactedL); + CopyTagData(defaultLanguageId, null, propertyTypeIds, impactedL); + RenormalizeDocumentEditedFlags(propertyTypeIds, impactedL); } } } @@ -693,78 +669,65 @@ AND umbracoNode.id <> @id", { var defaultLanguageId = GetDefaultLanguageId(); - switch (toVariation) + var cultureIsNotEnabled = !fromVariation.HasFlag(ContentVariation.Culture); + var cultureWillBeEnabled = toVariation.HasFlag(ContentVariation.Culture); + + if(cultureIsNotEnabled && cultureWillBeEnabled) { - case ContentVariation.Culture: + //move the names + //first clear out any existing names that might already exists under the default lang + //there's 2x tables to update - //move the names - //first clear out any existing names that might already exists under the default lang - //there's 2x tables to update + //clear out the versionCultureVariation table + var sqlSelect = Sql().Select(x => x.Id) + .From() + .InnerJoin().On(x => x.Id, x => x.VersionId) + .InnerJoin().On(x => x.NodeId, x => x.NodeId) + .Where(x => x.ContentTypeId == contentType.Id) + .Where(x => x.LanguageId == defaultLanguageId); + var sqlDelete = Sql() + .Delete() + .WhereIn(x => x.Id, sqlSelect); - //clear out the versionCultureVariation table - var sqlSelect = Sql().Select(x => x.Id) - .From() - .InnerJoin().On(x => x.Id, x => x.VersionId) - .InnerJoin().On(x => x.NodeId, x => x.NodeId) - .Where(x => x.ContentTypeId == contentType.Id) - .Where(x => x.LanguageId == defaultLanguageId); - var sqlDelete = Sql() - .Delete() - .WhereIn(x => x.Id, sqlSelect); + Database.Execute(sqlDelete); - Database.Execute(sqlDelete); + //clear out the documentCultureVariation table + sqlSelect = Sql().Select(x => x.Id) + .From() + .InnerJoin().On(x => x.NodeId, x => x.NodeId) + .Where(x => x.ContentTypeId == contentType.Id) + .Where(x => x.LanguageId == defaultLanguageId); + sqlDelete = Sql() + .Delete() + .WhereIn(x => x.Id, sqlSelect); - //clear out the documentCultureVariation table - sqlSelect = Sql().Select(x => x.Id) - .From() - .InnerJoin().On(x => x.NodeId, x => x.NodeId) - .Where(x => x.ContentTypeId == contentType.Id) - .Where(x => x.LanguageId == defaultLanguageId); - sqlDelete = Sql() - .Delete() - .WhereIn(x => x.Id, sqlSelect); + Database.Execute(sqlDelete); - Database.Execute(sqlDelete); + //now we need to insert names into these 2 tables based on the invariant data - //now we need to insert names into these 2 tables based on the invariant data + //insert rows into the versionCultureVariationDto table based on the data from contentVersionDto for the default lang + var cols = Sql().Columns(x => x.VersionId, x => x.Name, x => x.UpdateUserId, x => x.UpdateDate, x => x.LanguageId); + sqlSelect = Sql().Select(x => x.Id, x => x.Text, x => x.UserId, x => x.VersionDate) + .Append($", {defaultLanguageId}") //default language ID + .From() + .InnerJoin().On(x => x.NodeId, x => x.NodeId) + .Where(x => x.ContentTypeId == contentType.Id); + var sqlInsert = Sql($"INSERT INTO {ContentVersionCultureVariationDto.TableName} ({cols})").Append(sqlSelect); - //insert rows into the versionCultureVariationDto table based on the data from contentVersionDto for the default lang - var cols = Sql().Columns(x => x.VersionId, x => x.Name, x => x.UpdateUserId, x => x.UpdateDate, x => x.LanguageId); - sqlSelect = Sql().Select(x => x.Id, x => x.Text, x => x.UserId, x => x.VersionDate) - .Append($", {defaultLanguageId}") //default language ID - .From() - .InnerJoin().On(x => x.NodeId, x => x.NodeId) - .Where(x => x.ContentTypeId == contentType.Id); - var sqlInsert = Sql($"INSERT INTO {ContentVersionCultureVariationDto.TableName} ({cols})").Append(sqlSelect); + Database.Execute(sqlInsert); - Database.Execute(sqlInsert); + //insert rows into the documentCultureVariation table + cols = Sql().Columns(x => x.NodeId, x => x.Edited, x => x.Published, x => x.Name, x => x.Available, x => x.LanguageId); + sqlSelect = Sql().Select(x => x.NodeId, x => x.Edited, x => x.Published) + .AndSelect(x => x.Text) + .Append($", 1, {defaultLanguageId}") //make Available + default language ID + .From() + .InnerJoin().On(x => x.NodeId, x => x.NodeId) + .InnerJoin().On(x => x.NodeId, x => x.NodeId) + .Where(x => x.ContentTypeId == contentType.Id); + sqlInsert = Sql($"INSERT INTO {DocumentCultureVariationDto.TableName} ({cols})").Append(sqlSelect); - //insert rows into the documentCultureVariation table - cols = Sql().Columns(x => x.NodeId, x => x.Edited, x => x.Published, x => x.Name, x => x.Available, x => x.LanguageId); - sqlSelect = Sql().Select(x => x.NodeId, x => x.Edited, x => x.Published) - .AndSelect(x => x.Text) - .Append($", 1, {defaultLanguageId}") //make Available + default language ID - .From() - .InnerJoin().On(x => x.NodeId, x => x.NodeId) - .InnerJoin().On(x => x.NodeId, x => x.NodeId) - .Where(x => x.ContentTypeId == contentType.Id); - sqlInsert = Sql($"INSERT INTO {DocumentCultureVariationDto.TableName} ({cols})").Append(sqlSelect); - - Database.Execute(sqlInsert); - - break; - case ContentVariation.Nothing: - - //we don't need to move the names! this is because we always keep the invariant names with the name of the default language. - - //however, if we were to move names, we could do this: BUT this doesn't work with SQLCE, for that we'd have to update row by row :( - // if we want these SQL statements back, look into GIT history - - break; - case ContentVariation.CultureAndSegment: - case ContentVariation.Segment: - default: - throw new NotSupportedException(); // TODO: Support this + Database.Execute(sqlInsert); } } From 82c3af51fea5e9da6f720c5b277236c1e635a50b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20Knippers?= Date: Fri, 23 Aug 2019 13:19:33 +0200 Subject: [PATCH 003/432] Fixes writing / reading segment data combined with segment null --- .../ContentVariationExtensions.cs | 57 ++++++++++--------- .../Compose/NotificationsComponent.cs | 3 - 2 files changed, 31 insertions(+), 29 deletions(-) diff --git a/src/Umbraco.Core/ContentVariationExtensions.cs b/src/Umbraco.Core/ContentVariationExtensions.cs index 9fdc5f0b90..2c838eecbc 100644 --- a/src/Umbraco.Core/ContentVariationExtensions.cs +++ b/src/Umbraco.Core/ContentVariationExtensions.cs @@ -150,39 +150,44 @@ namespace Umbraco.Core culture = culture.NullOrWhiteSpaceAsNull(); segment = segment.NullOrWhiteSpaceAsNull(); - bool Validate(bool variesBy, string value) - { - if (variesBy) - { - // varies by - // in exact mode, the value cannot be null (but it can be a wildcard) - // in !wildcards mode, the value cannot be a wildcard (but it can be null) - if ((exact && value == null) || (!wildcards && value == "*")) - return false; - } - else - { - // does not vary by value - // the value cannot have a value - // unless wildcards and it's "*" - if (value != null && (!wildcards || value != "*")) - return false; - } - - return true; - } - - if (!Validate(variation.VariesByCulture(), culture)) + // if wildcards are disabled, do not allow "*" + if (!wildcards && (culture == "*" || segment == "*")) { if (throwIfInvalid) - throw new NotSupportedException($"Culture value \"{culture ?? ""}\" is invalid."); + throw new NotSupportedException($"Variation wildcards are not supported."); return false; } - if (!Validate(variation.VariesBySegment(), segment)) + if (variation.VariesByCulture()) + { + // varies by culture + // in exact mode, the culture cannot be null + if (exact && culture == null) + { + if (throwIfInvalid) + throw new NotSupportedException($"Culture may not be null because culture variation is enabled."); + return false; + } + } + else + { + // does not vary by culture + // the culture cannot have a value + // unless wildcards and it's "*" + if (culture != null && !(wildcards && culture == "*")) + { + if (throwIfInvalid) + throw new NotSupportedException($"Culture \"{culture}\" is invalid because culture variation is disabled."); + return false; + } + } + + // if it does not vary by segment + // the segment cannot have a value + if (!variation.VariesBySegment() && segment != null && !(wildcards && segment == "*")) { if (throwIfInvalid) - throw new NotSupportedException($"Segment value \"{segment ?? ""}\" is invalid."); + throw new NotSupportedException($"Segment \"{segment}\" is invalid because segment variation is disabled."); return false; } diff --git a/src/Umbraco.Web/Compose/NotificationsComponent.cs b/src/Umbraco.Web/Compose/NotificationsComponent.cs index db602b3db9..9b2609718e 100644 --- a/src/Umbraco.Web/Compose/NotificationsComponent.cs +++ b/src/Umbraco.Web/Compose/NotificationsComponent.cs @@ -209,9 +209,6 @@ namespace Umbraco.Web.Compose //group by the content type variation since the emails will be different foreach(var contentVariantGroup in entities.GroupBy(x => x.ContentType.Variations)) { - if (contentVariantGroup.Key == ContentVariation.CultureAndSegment || contentVariantGroup.Key == ContentVariation.Segment) - throw new NotSupportedException("Segments are not yet supported in Umbraco"); - _notificationService.SendNotifications( sender, contentVariantGroup, From aa4677e1ddf598dae8ddcd3b915f4c8ebe3b541c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20Knippers?= Date: Thu, 19 Sep 2019 13:50:19 +0200 Subject: [PATCH 004/432] Added and updated unit tests for the ValidateVariation method --- .../ContentVariationExtensions.cs | 2 + src/Umbraco.Tests/Models/VariationTests.cs | 96 +++++++++++++++---- 2 files changed, 79 insertions(+), 19 deletions(-) diff --git a/src/Umbraco.Core/ContentVariationExtensions.cs b/src/Umbraco.Core/ContentVariationExtensions.cs index 2c838eecbc..5b157307ab 100644 --- a/src/Umbraco.Core/ContentVariationExtensions.cs +++ b/src/Umbraco.Core/ContentVariationExtensions.cs @@ -184,6 +184,8 @@ namespace Umbraco.Core // if it does not vary by segment // the segment cannot have a value + // segment may always be null, even when the ContentVariation.Segment flag is set for this variation, + // therefore the exact parameter is not used in segment validation. if (!variation.VariesBySegment() && segment != null && !(wildcards && segment == "*")) { if (throwIfInvalid) diff --git a/src/Umbraco.Tests/Models/VariationTests.cs b/src/Umbraco.Tests/Models/VariationTests.cs index 8d64a6d28f..62c4849855 100644 --- a/src/Umbraco.Tests/Models/VariationTests.cs +++ b/src/Umbraco.Tests/Models/VariationTests.cs @@ -83,37 +83,95 @@ namespace Umbraco.Tests.Models Assert.AreEqual(nw, v.ValidateVariation(c, s, false, true, false)); } - // always support invariant,neutral - Assert4A(ContentVariation.Nothing, null, null, true); + // All tests: + // 1. if exact is set to true: culture cannot be null when the ContentVariation.Culture flag is set + // 2. if wildcards is set to false: fail when "*" is passed in as either culture or segment. + // 3. ContentVariation flag is ignored when wildcards are used. + // 4. Empty string is considered the same as null - // never support culture and/or segment - Assert4A(ContentVariation.Nothing, "culture", null, false); + #region Nothing + + Assert4A(ContentVariation.Nothing, null, null, true); + Assert4A(ContentVariation.Nothing, null, "", true); + Assert4B(ContentVariation.Nothing, null, "*", true, false, false, true); Assert4A(ContentVariation.Nothing, null, "segment", false); + Assert4A(ContentVariation.Nothing, "", null, true); + Assert4A(ContentVariation.Nothing, "", "", true); + Assert4B(ContentVariation.Nothing, "", "*", true, false, false, true); + Assert4A(ContentVariation.Nothing, "", "segment", false); + Assert4B(ContentVariation.Nothing, "*", null, true, false, false, true); + Assert4B(ContentVariation.Nothing, "*", "", true, false, false, true); + Assert4B(ContentVariation.Nothing, "*", "*", true, false, false, true); + Assert4A(ContentVariation.Nothing, "*", "segment", false); + Assert4A(ContentVariation.Nothing, "culture", null, false); + Assert4A(ContentVariation.Nothing, "culture", "", false); + Assert4A(ContentVariation.Nothing, "culture", "*", false); Assert4A(ContentVariation.Nothing, "culture", "segment", false); - // support '*' only when wildcards are supported - Assert4B(ContentVariation.Nothing, "*", null, true, false, false, true); - Assert4B(ContentVariation.Nothing, null, "*", true, false, false, true); - Assert4B(ContentVariation.Nothing, "*", "*", true, false, false, true); + #endregion + #region Culture - // support invariant if not exact Assert4B(ContentVariation.Culture, null, null, false, true, false, true); - - // support invariant if not exact, '*' when wildcards are supported - Assert4B(ContentVariation.Culture, "*", null, true, false, false, true); + Assert4B(ContentVariation.Culture, null, "", false, true, false, true); Assert4B(ContentVariation.Culture, null, "*", false, false, false, true); - Assert4B(ContentVariation.Culture, "*", "*", true, false, false, true); - - // never support segment Assert4A(ContentVariation.Culture, null, "segment", false); - Assert4A(ContentVariation.Culture, "culture", "segment", false); + Assert4B(ContentVariation.Culture, "", null, false, true, false, true); + Assert4B(ContentVariation.Culture, "", "", false, true, false, true); + Assert4B(ContentVariation.Culture, "", "*", false, false, false, true); + Assert4A(ContentVariation.Culture, "", "segment", false); + Assert4B(ContentVariation.Culture, "*", null, true, false, false, true); + Assert4B(ContentVariation.Culture, "*", "", true, false, false, true); + Assert4B(ContentVariation.Culture, "*", "*", true, false, false, true); Assert4A(ContentVariation.Culture, "*", "segment", false); - - Assert4B(ContentVariation.Culture, null, "*", false, false, false, true); + Assert4A(ContentVariation.Culture, "culture", null, true); + Assert4A(ContentVariation.Culture, "culture", "", true); Assert4B(ContentVariation.Culture, "culture", "*", true, false, false, true); + Assert4A(ContentVariation.Culture, "culture", "segment", false); - // could do the same with .Segment, and .CultureAndSegment + #endregion + + #region Segment + + Assert4B(ContentVariation.Segment, null, null, true, true, true, true); + Assert4B(ContentVariation.Segment, null, "", true, true, true, true); + Assert4B(ContentVariation.Segment, null, "*", true, false, false, true); + Assert4A(ContentVariation.Segment, null, "segment", true); + Assert4B(ContentVariation.Segment, "", null, true, true, true, true); + Assert4B(ContentVariation.Segment, "", "", true, true, true, true); + Assert4B(ContentVariation.Segment, "", "*", true, false, false, true); + Assert4A(ContentVariation.Segment, "", "segment", true); + Assert4B(ContentVariation.Segment, "*", null, true, false, false, true); + Assert4B(ContentVariation.Segment, "*", "", true, false, false, true); + Assert4B(ContentVariation.Segment, "*", "*", true, false, false, true); + Assert4B(ContentVariation.Segment, "*", "segment", true, false, false, true); + Assert4A(ContentVariation.Segment, "culture", null, false); + Assert4A(ContentVariation.Segment, "culture", "", false); + Assert4A(ContentVariation.Segment, "culture", "*", false); + Assert4A(ContentVariation.Segment, "culture", "segment", false); + + #endregion + + #region CultureAndSegment + + Assert4B(ContentVariation.CultureAndSegment, null, null, false, true, false, true); + Assert4B(ContentVariation.CultureAndSegment, null, "", false, true, false, true); + Assert4B(ContentVariation.CultureAndSegment, null, "*", false, false, false, true); + Assert4B(ContentVariation.CultureAndSegment, null, "segment", false, true, false, true); + Assert4B(ContentVariation.CultureAndSegment, "", null, false, true, false, true); + Assert4B(ContentVariation.CultureAndSegment, "", "", false, true, false, true); + Assert4B(ContentVariation.CultureAndSegment, "", "*", false, false, false, true); + Assert4B(ContentVariation.CultureAndSegment, "", "segment", false, true, false, true); + Assert4B(ContentVariation.CultureAndSegment, "*", null, true, false, false, true); + Assert4B(ContentVariation.CultureAndSegment, "*", "", true, false, false, true); + Assert4B(ContentVariation.CultureAndSegment, "*", "*", true, false, false, true); + Assert4B(ContentVariation.CultureAndSegment, "*", "segment", true, false, false, true); + Assert4B(ContentVariation.CultureAndSegment, "culture", null, true, true, true, true); + Assert4B(ContentVariation.CultureAndSegment, "culture", "", true, true, true, true); + Assert4B(ContentVariation.CultureAndSegment, "culture", "*", true, false, false, true); + Assert4B(ContentVariation.CultureAndSegment, "culture", "segment", true, true, true, true); + + #endregion } [Test] From ae6004166f351eb0c9f639dcb88acc7e85516aa1 Mon Sep 17 00:00:00 2001 From: Rasmus John Pedersen Date: Thu, 26 Sep 2019 18:39:54 +0200 Subject: [PATCH 005/432] Disallow deleting "Sensitive data" user group --- .../Models/Membership/UserGroupExtensions.cs | 13 +++++++++++++ .../users/views/groups/groups.controller.js | 2 +- .../src/views/users/views/groups/groups.html | 2 +- .../Filters/UserGroupValidateAttribute.cs | 13 ++++--------- .../Editors/UserGroupsController.cs | 4 ++-- .../Models/Mapping/UserMapDefinition.cs | 19 ++++++++++--------- 6 files changed, 31 insertions(+), 22 deletions(-) diff --git a/src/Umbraco.Core/Models/Membership/UserGroupExtensions.cs b/src/Umbraco.Core/Models/Membership/UserGroupExtensions.cs index 3903fe405b..b1d0189c56 100644 --- a/src/Umbraco.Core/Models/Membership/UserGroupExtensions.cs +++ b/src/Umbraco.Core/Models/Membership/UserGroupExtensions.cs @@ -15,6 +15,12 @@ namespace Umbraco.Core.Models.Membership return new ReadOnlyUserGroup(group.Id, group.Name, group.Icon, group.StartContentId, group.StartMediaId, group.Alias, group.AllowedSections, group.Permissions); } + public static bool IsSystemUserGroup(this IUserGroup group) => + IsSystemUserGroup(group.Alias); + + public static bool IsSystemUserGroup(this IReadOnlyUserGroup group) => + IsSystemUserGroup(group.Alias); + public static IReadOnlyUserGroup ToReadOnlyGroup(this UserGroupDto group) { return new ReadOnlyUserGroup(group.Id, group.Name, group.Icon, @@ -22,5 +28,12 @@ namespace Umbraco.Core.Models.Membership group.UserGroup2AppDtos.Select(x => x.AppAlias).ToArray(), group.DefaultPermissions == null ? Enumerable.Empty() : group.DefaultPermissions.ToCharArray().Select(x => x.ToString())); } + + private static bool IsSystemUserGroup(this string groupAlias) + { + return groupAlias == Constants.Security.AdminGroupAlias + || groupAlias == Constants.Security.SensitiveDataGroupAlias + || groupAlias == Constants.Security.TranslatorGroupAlias; + } } } diff --git a/src/Umbraco.Web.UI.Client/src/views/users/views/groups/groups.controller.js b/src/Umbraco.Web.UI.Client/src/views/users/views/groups/groups.controller.js index 1e51d4585e..b21859f5c4 100644 --- a/src/Umbraco.Web.UI.Client/src/views/users/views/groups/groups.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/users/views/groups/groups.controller.js @@ -81,7 +81,7 @@ } // Disallow selection of the admin/translators group, the checkbox is not visible in the UI, but clicking(and thus selecting) is still possible. // Currently selection can only be used for deleting, and the Controller will also disallow deleting the admin group. - if (userGroup.alias === "admin" || userGroup.alias === "translator") + if (userGroup.isSystemUserGroup) return; listViewHelper.selectHandler(userGroup, $index, vm.userGroups, vm.selection, $event); diff --git a/src/Umbraco.Web.UI.Client/src/views/users/views/groups/groups.html b/src/Umbraco.Web.UI.Client/src/views/users/views/groups/groups.html index 5d1496d90f..4d252a3ae0 100644 --- a/src/Umbraco.Web.UI.Client/src/views/users/views/groups/groups.html +++ b/src/Umbraco.Web.UI.Client/src/views/users/views/groups/groups.html @@ -86,7 +86,7 @@
+ ng-class="{'-selected': group.selected, '-selectable': group.hasAccess && !group.isSystemUserGroup}">
diff --git a/src/Umbraco.Web/Editors/Filters/UserGroupValidateAttribute.cs b/src/Umbraco.Web/Editors/Filters/UserGroupValidateAttribute.cs index 7d465a9ddc..78cd8e6a4d 100644 --- a/src/Umbraco.Web/Editors/Filters/UserGroupValidateAttribute.cs +++ b/src/Umbraco.Web/Editors/Filters/UserGroupValidateAttribute.cs @@ -51,16 +51,11 @@ namespace Umbraco.Web.Editors.Filters return; } - if (persisted.Alias != userGroupSave.Alias) + if (persisted.Alias != userGroupSave.Alias && persisted.IsSystemUserGroup()) { - if (persisted.Alias == Constants.Security.AdminGroupAlias - || persisted.Alias == Constants.Security.SensitiveDataGroupAlias - || persisted.Alias == Constants.Security.TranslatorGroupAlias) - { - var message = $"User group with alias: {persisted.Alias} cannot be changed"; - actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, message); - return; - } + var message = $"User group with alias: {persisted.Alias} cannot be changed"; + actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, message); + return; } //map the model to the persisted instance diff --git a/src/Umbraco.Web/Editors/UserGroupsController.cs b/src/Umbraco.Web/Editors/UserGroupsController.cs index 1b64722735..b081ca6137 100644 --- a/src/Umbraco.Web/Editors/UserGroupsController.cs +++ b/src/Umbraco.Web/Editors/UserGroupsController.cs @@ -154,8 +154,8 @@ namespace Umbraco.Web.Editors public HttpResponseMessage PostDeleteUserGroups([FromUri] int[] userGroupIds) { var userGroups = Services.UserService.GetAllUserGroups(userGroupIds) - //never delete the admin group or translators group - .Where(x => x.Alias != Constants.Security.AdminGroupAlias && x.Alias != Constants.Security.TranslatorGroupAlias) + //never delete the admin group, sensitive data or translators group + .Where(x => !x.IsSystemUserGroup()) .ToArray(); foreach (var userGroup in userGroups) { diff --git a/src/Umbraco.Web/Models/Mapping/UserMapDefinition.cs b/src/Umbraco.Web/Models/Mapping/UserMapDefinition.cs index abbb67c4aa..88960fb189 100644 --- a/src/Umbraco.Web/Models/Mapping/UserMapDefinition.cs +++ b/src/Umbraco.Web/Models/Mapping/UserMapDefinition.cs @@ -147,7 +147,9 @@ namespace Umbraco.Web.Models.Mapping target.Name = source.Name; target.ParentId = -1; target.Path = "-1," + source.Id; - MapUserGroupBasic(target, source.Alias, source.AllowedSections, source.StartContentId, source.StartMediaId, context); + target.IsSystemUserGroup = source.IsSystemUserGroup(); + + MapUserGroupBasic(target, source.AllowedSections, source.StartContentId, source.StartMediaId, context); } // Umbraco.Code.MapAll -ContentStartNode -MediaStartNode -Sections -Notifications @@ -162,7 +164,9 @@ namespace Umbraco.Web.Models.Mapping target.ParentId = -1; target.Path = "-1," + source.Id; target.UserCount = source.UserCount; - MapUserGroupBasic(target, source.Alias, source.AllowedSections, source.StartContentId, source.StartMediaId, context); + target.IsSystemUserGroup = source.IsSystemUserGroup(); + + MapUserGroupBasic(target, source.AllowedSections, source.StartContentId, source.StartMediaId, context); } // Umbraco.Code.MapAll -Udi -Trashed -AdditionalData -AssignedPermissions @@ -198,7 +202,7 @@ namespace Umbraco.Web.Models.Mapping } // Umbraco.Code.MapAll -ContentStartNode -MediaStartNode -Sections -Notifications -Udi - // Umbraco.Code.MapAll -Trashed -AdditionalData -Users -AssignedPermissions -IsSystemUserGroup + // Umbraco.Code.MapAll -Trashed -AdditionalData -Users -AssignedPermissions private void Map(IUserGroup source, UserGroupDisplay target, MapperContext context) { target.Alias = source.Alias; @@ -210,8 +214,9 @@ namespace Umbraco.Web.Models.Mapping target.ParentId = -1; target.Path = "-1," + source.Id; target.UserCount = source.UserCount; + target.IsSystemUserGroup = source.IsSystemUserGroup(); - MapUserGroupBasic(target, source.Alias, source.AllowedSections, source.StartContentId, source.StartMediaId, context); + MapUserGroupBasic(target, source.AllowedSections, source.StartContentId, source.StartMediaId, context); //Important! Currently we are never mapping to multiple UserGroupDisplay objects but if we start doing that // this will cause an N+1 and we'll need to change how this works. @@ -334,12 +339,8 @@ namespace Umbraco.Web.Models.Mapping // helpers - private void MapUserGroupBasic(UserGroupBasic target, string alias, IEnumerable sourceAllowedSections, int? sourceStartContentId, int? sourceStartMediaId, MapperContext context) + private void MapUserGroupBasic(UserGroupBasic target, IEnumerable sourceAllowedSections, int? sourceStartContentId, int? sourceStartMediaId, MapperContext context) { - target.IsSystemUserGroup = alias == Constants.Security.AdminGroupAlias - || alias == Constants.Security.TranslatorGroupAlias - || alias == Constants.Security.SensitiveDataGroupAlias; - var allSections = _sectionService.GetSections(); target.Sections = context.MapEnumerable(allSections.Where(x => sourceAllowedSections.Contains(x.Alias))); From e37434d816221cd949c1c9855993e8d3e9683d5d Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Sun, 29 Sep 2019 11:54:12 +0200 Subject: [PATCH 006/432] Don't keep appending the content name on each change of the language dropdown (cherry picked from 02c3a5a5b2797d59b229d1fbcc8ab6524f247e55 and 7de7e59f5543031fa0635499306509a42f57f3d7) --- .../umbeditorcontentheader.directive.js | 288 +++++++++--------- src/Umbraco.Web.UI.Client/src/init.js | 10 +- 2 files changed, 153 insertions(+), 145 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/editor/umbeditorcontentheader.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/editor/umbeditorcontentheader.directive.js index 8668d62d4f..b3948bd7c4 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/editor/umbeditorcontentheader.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/editor/umbeditorcontentheader.directive.js @@ -3,10 +3,10 @@ function EditorContentHeader(serverValidationManager, localizationService, editorState) { + function link(scope, el, attr, ctrl) { - var unsubscribe = []; - + if (!scope.serverValidationNameField) { scope.serverValidationNameField = "Name"; } @@ -15,15 +15,16 @@ } scope.isNew = scope.content.state == "NotCreated"; - + localizationService.localizeMany([ - scope.isNew ? "placeholders_a11yCreateItem" : "placeholders_a11yEdit", + scope.isNew ? "placeholders_a11yCreateItem" : "placeholders_a11yEdit", "placeholders_a11yName", - scope.isNew?"general_new":"general_edit"] + scope.isNew ? "general_new" : "general_edit"] ).then(function (data) { + scope.a11yMessage = data[0]; scope.a11yName = data[1]; - var title = data[2] +":"; + var title = data[2] + ": "; if (!scope.isNew) { scope.a11yMessage += " " + scope.content.name; title += scope.content.name; @@ -33,16 +34,17 @@ scope.a11yName = name + " " + scope.a11yName; title += name; } - scope.$root.locationTitle = title + " - " + scope.$root.locationTitle ; + + scope.$emit("$changeTitle", title); }); scope.vm = {}; scope.vm.dropdownOpen = false; scope.vm.currentVariant = ""; scope.vm.variantsWithError = []; scope.vm.defaultVariant = null; - + scope.vm.errorsOnOtherVariants = false;// indicating wether to show that other variants, than the current, have errors. - + function checkErrorsOnOtherVariants() { var check = false; angular.forEach(scope.content.variants, function (variant) { @@ -52,10 +54,10 @@ }); scope.vm.errorsOnOtherVariants = check; } - + function onCultureValidation(valid, errors, allErrors, culture) { var index = scope.vm.variantsWithError.indexOf(culture); - if(valid === true) { + if (valid === true) { if (index !== -1) { scope.vm.variantsWithError.splice(index, 1); } @@ -66,165 +68,165 @@ } checkErrorsOnOtherVariants(); } - + function onInit() { - + // find default. angular.forEach(scope.content.variants, function (variant) { if (variant.language.isDefault) { scope.vm.defaultVariant = variant; } }); - + setCurrentVariant(); - + angular.forEach(scope.content.apps, (app) => { if (app.alias === "umbContent") { app.anchors = scope.content.tabs; } }); - - - angular.forEach(scope.content.variants, function (variant) { - unsubscribe.push(serverValidationManager.subscribe(null, variant.language.culture, null, onCultureValidation)); - }); - - unsubscribe.push(serverValidationManager.subscribe(null, null, null, onCultureValidation)); - - - - } - function setCurrentVariant() { - angular.forEach(scope.content.variants, function (variant) { - if (variant.active) { - scope.vm.currentVariant = variant; - checkErrorsOnOtherVariants(); - } - }); - } - scope.goBack = function () { - if (scope.onBack) { - scope.onBack(); - } - }; + angular.forEach(scope.content.variants, function (variant) { + unsubscribe.push(serverValidationManager.subscribe(null, variant.language.culture, null, onCultureValidation)); + }); - scope.selectVariant = function (event, variant) { + unsubscribe.push(serverValidationManager.subscribe(null, null, null, onCultureValidation)); - if (scope.onSelectVariant) { - scope.vm.dropdownOpen = false; - scope.onSelectVariant({ "variant": variant }); - } - }; - scope.selectNavigationItem = function(item) { - if(scope.onSelectNavigationItem) { - scope.onSelectNavigationItem({"item": item}); - } - } - scope.selectAnchorItem = function(item, anchor) { - if(scope.onSelectAnchorItem) { - scope.onSelectAnchorItem({"item": item, "anchor": anchor}); - } - } + } - scope.closeSplitView = function () { - if (scope.onCloseSplitView) { - scope.onCloseSplitView(); - } - }; - - scope.openInSplitView = function (event, variant) { - if (scope.onOpenInSplitView) { - scope.vm.dropdownOpen = false; - scope.onOpenInSplitView({ "variant": variant }); - } - }; - - /** - * keep track of open variants - this is used to prevent the same variant to be open in more than one split view - * @param {any} culture - */ - scope.variantIsOpen = function(culture) { - return (scope.openVariants.indexOf(culture) !== -1); - } - - /** - * Check whether a variant has a error, used to display errors in variant switcher. - * @param {any} culture - */ - scope.variantHasError = function(culture) { - // if we are looking for the default language we also want to check for invariant. - if (culture === scope.vm.defaultVariant.language.culture) { - if(scope.vm.variantsWithError.indexOf("invariant") !== -1) { - return true; - } - } - if(scope.vm.variantsWithError.indexOf(culture) !== -1) { - return true; - } - return false; - } - - onInit(); - - //watch for the active culture changing, if it changes, update the current variant - if (scope.content.variants) { - scope.$watch(function () { - for (var i = 0; i < scope.content.variants.length; i++) { - var v = scope.content.variants[i]; - if (v.active) { - return v.language.culture; - } - } - return scope.vm.currentVariant.language.culture; //should never get here - }, function (newValue, oldValue) { - if (newValue !== scope.vm.currentVariant.language.culture) { - setCurrentVariant(); - } - }); - } - - scope.$on('$destroy', function () { - for (var u in unsubscribe) { - unsubscribe[u](); + function setCurrentVariant() { + angular.forEach(scope.content.variants, function (variant) { + if (variant.active) { + scope.vm.currentVariant = variant; + checkErrorsOnOtherVariants(); } }); } - - var directive = { - transclude: true, - restrict: 'E', - replace: true, - templateUrl: 'views/components/editor/umb-editor-content-header.html', - scope: { - name: "=", - nameDisabled: " Date: Sun, 29 Sep 2019 14:55:39 +0200 Subject: [PATCH 007/432] Uses just the fix from #6414 - to show a preview of svg files after selection in the media picker --- .../common/services/mediahelper.service.js | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/services/mediahelper.service.js b/src/Umbraco.Web.UI.Client/src/common/services/mediahelper.service.js index c8acdec353..97e4830408 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/mediahelper.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/mediahelper.service.js @@ -143,23 +143,28 @@ function mediaHelper(umbRequestHelper, $log) { */ resolveFileFromEntity: function (mediaEntity, thumbnail) { - if (!angular.isObject(mediaEntity.metaData) || !mediaEntity.metaData.MediaPath) { + var mediaPath = angular.isObject(mediaEntity.metaData) ? mediaEntity.metaData.MediaPath : null; + + if (!mediaPath) { //don't throw since this image legitimately might not contain a media path, but output a warning $log.warn("Cannot resolve the file url from the mediaEntity, it does not contain the required metaData"); return null; } if (thumbnail) { - if (this.detectIfImageByExtension(mediaEntity.metaData.MediaPath)) { - return this.getThumbnailFromPath(mediaEntity.metaData.MediaPath); + if (this.detectIfImageByExtension(mediaPath)) { + return this.getThumbnailFromPath(mediaPath); + } + else if (this.getFileExtension(mediaPath) === "svg") { + return this.getThumbnailFromPath(mediaPath); } else { return null; } } else { - return mediaEntity.metaData.MediaPath; - } + return mediaPath; + } }, /** @@ -294,6 +299,11 @@ function mediaHelper(umbRequestHelper, $log) { */ getThumbnailFromPath: function (imagePath) { + // Check if file is a svg + if (this.getFileExtension(imagePath) === "svg") { + return imagePath; + } + //If the path is not an image we cannot get a thumb if (!this.detectIfImageByExtension(imagePath)) { return null; From 1512800639b182017e94027154da457d301340be Mon Sep 17 00:00:00 2001 From: Sebastiaan Janssen Date: Mon, 30 Sep 2019 13:48:43 +0200 Subject: [PATCH 008/432] Bump to RC version --- src/SolutionInfo.cs | 2 +- src/Umbraco.Web.UI/Umbraco.Web.UI.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/SolutionInfo.cs b/src/SolutionInfo.cs index a4e859988e..f26965eeae 100644 --- a/src/SolutionInfo.cs +++ b/src/SolutionInfo.cs @@ -19,4 +19,4 @@ using System.Resources; // these are FYI and changed automatically [assembly: AssemblyFileVersion("8.2.0")] -[assembly: AssemblyInformationalVersion("8.2.0")] +[assembly: AssemblyInformationalVersion("8.2.0-rc")] diff --git a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj index 4141b60a3d..147912ed41 100644 --- a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj +++ b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj @@ -347,7 +347,7 @@ True 8200 / - http://localhost:8200/ + http://localhost:8200 False False From af8c3459e35ba64db9ac84b322c8ef49030bf0a8 Mon Sep 17 00:00:00 2001 From: Shannon Date: Mon, 30 Sep 2019 15:59:45 +0200 Subject: [PATCH 009/432] Moves Assert4A/B methods to methods and renames some parameters ... need to figure out what the rest mean --- src/Umbraco.Tests/Models/VariationTests.cs | 25 +++++++++++----------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/Umbraco.Tests/Models/VariationTests.cs b/src/Umbraco.Tests/Models/VariationTests.cs index 62c4849855..6ead404a09 100644 --- a/src/Umbraco.Tests/Models/VariationTests.cs +++ b/src/Umbraco.Tests/Models/VariationTests.cs @@ -70,18 +70,6 @@ namespace Umbraco.Tests.Models [Test] public void ValidateVariationTests() { - void Assert4A(ContentVariation v, string c, string s, bool xx) - { - Assert4B(v, c, s, xx, xx, xx, xx); - } - - void Assert4B(ContentVariation v, string c, string s, bool ew, bool nn, bool en, bool nw) - { - Assert.AreEqual(ew, v.ValidateVariation(c, s, true, true, false)); - Assert.AreEqual(nn, v.ValidateVariation(c, s, false, false, false)); - Assert.AreEqual(en, v.ValidateVariation(c, s, true, false, false)); - Assert.AreEqual(nw, v.ValidateVariation(c, s, false, true, false)); - } // All tests: // 1. if exact is set to true: culture cannot be null when the ContentVariation.Culture flag is set @@ -174,6 +162,19 @@ namespace Umbraco.Tests.Models #endregion } + private static void Assert4B(ContentVariation v, string culture, string segment, bool ew, bool nn, bool en, bool nw) + { + Assert.AreEqual(ew, v.ValidateVariation(culture, segment, true, true, false)); + Assert.AreEqual(nn, v.ValidateVariation(culture, segment, false, false, false)); + Assert.AreEqual(en, v.ValidateVariation(culture, segment, true, false, false)); + Assert.AreEqual(nw, v.ValidateVariation(culture, segment, false, true, false)); + } + + private static void Assert4A(ContentVariation v, string culture, string segment, bool xx) + { + Assert4B(v, culture, segment, xx, xx, xx, xx); + } + [Test] public void PropertyTests() { From 985df6e32b049675c8766b7ec1bfef2995dbadc5 Mon Sep 17 00:00:00 2001 From: Kenn Jacobsen Date: Mon, 30 Sep 2019 18:51:05 +0200 Subject: [PATCH 010/432] V8: Show the breadcrumb when creating new content (#6128) --- .../components/content/edit.controller.js | 18 +++++++++++------- .../editor/umbbreadcrumbs.directive.js | 1 + .../src/views/components/content/edit.html | 1 + .../components/editor/umb-breadcrumbs.html | 8 ++++---- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/content/edit.controller.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/content/edit.controller.js index 8e30ef66c5..e9ee77bec1 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/content/edit.controller.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/content/edit.controller.js @@ -36,14 +36,13 @@ //initializes any watches function startWatches(content) { - //watch for changes to isNew & the content.id, set the page.isNew accordingly and load the breadcrumb if we can - $scope.$watchGroup(['isNew', 'content.id'], function (newVal, oldVal) { - - var contentId = newVal[1]; - $scope.page.isNew = Object.toBoolean(newVal[0]); + //watch for changes to isNew, set the page.isNew accordingly and load the breadcrumb if we can + $scope.$watch('isNew', function (newVal, oldVal) { + + $scope.page.isNew = Object.toBoolean(newVal); //We fetch all ancestors of the node to generate the footer breadcrumb navigation - if (!$scope.page.isNew && contentId && content.parentId && content.parentId !== -1) { + if (content.parentId && content.parentId !== -1) { loadBreadcrumb(); if (!watchingCulture) { $scope.$watch('culture', @@ -115,7 +114,12 @@ } function loadBreadcrumb() { - entityResource.getAncestors($scope.content.id, "document", $scope.culture) + // load the parent breadcrumb when creating new content + var id = $scope.page.isNew ? $scope.content.parentId : $scope.content.id; + if (!id) { + return; + } + entityResource.getAncestors(id, "document", $scope.culture) .then(function (anc) { $scope.ancestors = anc; }); diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/editor/umbbreadcrumbs.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/editor/umbbreadcrumbs.directive.js index c95af03dab..7755d9d63b 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/editor/umbbreadcrumbs.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/editor/umbbreadcrumbs.directive.js @@ -96,6 +96,7 @@ Use this directive to generate a list of breadcrumbs. templateUrl: 'views/components/editor/umb-breadcrumbs.html', scope: { ancestors: "=", + forNewEntity: "=", entityType: "@", onOpen: "&" }, diff --git a/src/Umbraco.Web.UI.Client/src/views/components/content/edit.html b/src/Umbraco.Web.UI.Client/src/views/components/content/edit.html index 32e91b935a..8dd78883c2 100644 --- a/src/Umbraco.Web.UI.Client/src/views/components/content/edit.html +++ b/src/Umbraco.Web.UI.Client/src/views/components/content/edit.html @@ -24,6 +24,7 @@ diff --git a/src/Umbraco.Web.UI.Client/src/views/components/editor/umb-breadcrumbs.html b/src/Umbraco.Web.UI.Client/src/views/components/editor/umb-breadcrumbs.html index 54e599522d..1478d1da6f 100644 --- a/src/Umbraco.Web.UI.Client/src/views/components/editor/umb-breadcrumbs.html +++ b/src/Umbraco.Web.UI.Client/src/views/components/editor/umb-breadcrumbs.html @@ -2,14 +2,14 @@
  • - {{ancestor.name}} + {{ancestor.name}} - {{ancestor.name}} + {{ancestor.name}} - / + / - {{ancestor.name}} + {{ancestor.name}}
  • From 9e1809eeec9b1b60dde6066f6def762c7329fd24 Mon Sep 17 00:00:00 2001 From: Dirk Seefeld Date: Mon, 30 Sep 2019 19:07:37 +0200 Subject: [PATCH 011/432] Idseefeld umbraco config lang de (#5776) --- src/Umbraco.Web.UI/Umbraco/config/lang/de.xml | 1583 +++++++++++++++-- 1 file changed, 1416 insertions(+), 167 deletions(-) diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/de.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/de.xml index 3c8d24ec9c..f529595f65 100644 --- a/src/Umbraco.Web.UI/Umbraco/config/lang/de.xml +++ b/src/Umbraco.Web.UI/Umbraco/config/lang/de.xml @@ -4,17 +4,24 @@ The Umbraco community https://our.umbraco.com/documentation/Extending-Umbraco/Language-Files + + + + - Hostnamen verwalten + Kulturen und Hostnamen Protokoll Durchsuchen Dokumenttyp ändern Kopieren - Erstellen - Paket erstellen - Löschen + Neu + Exportieren + Neues Paket + Neue Gruppe + Entfernen Deaktivieren Papierkorb leeren + Aktivieren Dokumenttyp exportieren Dokumenttyp importieren Paket importieren @@ -27,16 +34,57 @@ Veröffentlichung zurücknehmen Aktualisieren Erneut veröffentlichen + Umbenennen Wiederherstellen + Berechtigungen setzen für Seite %0% + Wähle worunter kopiert werden soll + Wähle worunter verschoben werden soll + in der Baumstrukture + wurde verschoben nach + wurde kopiert nach Berechtigungen Zurücksetzen Zur Veröffentlichung einreichen Zur Übersetzung senden + Gruppe festlegen Sortieren - Zur Veröffentlichung einreichen Übersetzen Aktualisieren - Standardwert + Berechtigung festlegen + Freigeben + Inhaltsvorlage anlegen + Einladung erneut versenden + + + Inhalt + Administration + Struktur + Anderes + + + Erlaube Zugriff auf "Kultur und Hostname"-Einstellungen + Erlaube Zugriff auf Bearbeiten-Verlauf + Erlaube das Anzeigen eines Knotens + Erlaube Ändern des Dokumenten-Typs + Erlaube Kopieren + Erlaube Erzeugen + Erlaube Entfernen + Erlaube Verschieben + Erlaube Zugriff auf "Öffentlich zugänglich"-Einstellungen + Erlaube Veröffentlichung + Erlaube Rücknahme der Veröffentlichung + Erlaube Zugriff auf die Berechtigungen + Erlaube Zurücksetzen auf eine vorherige Version + Erlaube Anforderungen von Veröffentlichungen + Erlaube Anfordern von Übersetzungen + Erlaube Sortieren + Erlaube Übersetzung + Erlaube Sichern von Änderungen + Erlaube Anlegen von Inhaltsvorlagen + + + Inhalt + Info Erlaubnis verweigert. @@ -52,15 +100,18 @@ Die Domain '%0%' ist bereits zugeordnet Domain '%0%' aktualisiert Domains bearbeiten + + + Vererben Kultur Definiert die Kultureinstellung für untergeordnete Elemente dieses Elements oder vererbt vom übergeordneten Element. Wird auch auf das aktuelle Element angewendet, sofern auf tieferer Ebene keine Domain zugeordnet ist. - Domains - - - Ansicht für + Domainen + Auswahl aufheben Auswählen Etwas anderes machen Fett @@ -79,17 +130,60 @@ Nummerierung Makro einfügen Abbildung einfügen + Veröffentlichen und schliessen + Veröffentlichen mit Unterknoten Datenbeziehungen bearbeiten Zurück zur Liste Speichern + Sichern und schliessen Speichern und veröffentlichen Speichern und planen Speichern und zur Abnahme übergeben + Listenansicht sichern + Veröffentlichung planen Vorschau Die Vorschaufunktion ist deaktiviert, da keine Vorlage zugewiesen ist Stil auswählen Stil anzeigen Tabelle einfügen + Erzeuge Daten-Model und schliesse + Sichern und Daten-Model erzeugen + Zurücknehmen + Erneut anwenden + Vorgängerversion herstellen + TAG entfernen + Abbrechen + Bestätigen + + + Anzeigen als + Inhalt gelöscht + Inhalt unveröffentlicht + Inhalt unveröffentlicht für Sprache: %0% + Inhalt veröffentlicht + Inhalt veröffentlicht für Sprache: %0% + Inhalt gesichert + Inhalt gesichert für Sprache: %0% + Inhalt verschoben + Inhalt kopiert + Inhalt auf vorherige Version geändert + Veröffentlichung für Inhalt angefordert + Veröffentlichung für Inhalt angefordert in Sprache: %0% + Unterknoten wurden sortiert von Benutzer + Kopieren + Veröffentlichen + Veröffentlichen + Verschieben + Sichern + Sichern + Entfernen + Veröffentlichung zurücknehmen + Veröffentlichung zurücknehmen + Vorgängerversion wieder herstellen + Veröffentlichung anfordern + Veröffentlichung anfordern + Sortieren + Verlauf (alle Variationen) Um den Typ des ausgewählten Dokuments zu ändern, wählen Sie bitte zunächst aus der Liste der an dieser Stelle erlaubten Dokumenttypen. @@ -111,6 +205,12 @@ Die Zuordnung der Eigenschaften kann nicht abgeschlossen werden, da mindestens eine Eigenschaft mehrfach zugeordnet werden soll. Nur an dieser Stelle erlaubte Dokumenttypen werden angezeigt. + + Es konnte kein Verzeichnis unter dem Knoten mit der ID %0% angelegt werden. + Es konnte kein Verzeichnis unter dem Knoten mit dem Namen %0% angelegt werden. + Der Verzeichnisname darf keine ungültigen Zeichen enthalten. + Folgendes Element konnte nicht entfernt werden: %0% + Ist veröffentlicht Über dieses Dokument @@ -129,22 +229,45 @@ Dieses Dokument wurde nach dem Veröffentlichen bearbeitet. Dieses Dokument ist nicht veröffentlicht. Zuletzt veröffentlicht + Keine Elemente anzuzeigen Diese Liste enthält keine Einträge. + Es wurden keine untergeordneten Elemente hinzugefügt + Es wurden keine Mitglieder hinzugefügt Medientyp Verweis auf Medienobjekt(e) Mitgliedergruppe Mitgliederrolle Mitglieder-Typ + Es wurden keine Änderungen vorgenommen Kein Datum gewählt Name des Dokument + Dieses Media-Element hat keinen Link + Diesem Element kann kein Inhalt zugewiesen werden Eigenschaften Dieses Dokument ist veröffentlicht aber nicht sichtbar, da das übergeordnete Dokument '%0%' nicht publiziert ist + Diese Kultur wurde veröffentlicht, aber wird nicht angezeigt, weil sie auf dem Oberknoten '%0%' unveröffentlicht ist Ups! Dieses Dokument ist veröffentlicht aber nicht im internen Cache aufzufinden: Systemfehler. + Der URL wurde nicht gefunden + Dieses Dokument wurde veröffentlicht, aber sein URL würde mit Inhalt %0% kollidieren + Dieses Dokument wurde veröffentlicht, aber sein URL kann nicht aufgelöst (routed) werden Veröffentlichen + Veröffentlicht + Veröffentlicht (Änderungen bereit) Publikationsstatus + + Veröffentlichen mit Unterknoten zum Veröffentlichen der gewählten Sprache + samt aller Unterknoten der selben Sprache, um ihren Inhalt öffentlich verfügbar zu machen.]]> + + + Veröffentlichen mit Unterknoten zum Veröffentlichen der gewählten Sprache + samt aller Unterknoten der selben Sprache, um ihren Inhalt öffentlich verfügbar zu machen.]]> + Veröffentlichen am Veröffentlichung widerrufen am Datum entfernen + Datum wählen Sortierung abgeschlossen Um die Dokumente zu sortieren, ziehen Sie sie einfach an die gewünschte Position. Sie können mehrere Zeilen markieren indem Sie die Umschalttaste ("Shift") oder die Steuerungstaste ("Strg") gedrückt halten Statistiken @@ -152,6 +275,8 @@ Alternativtext (optional) Typ Veröffentlichung widerrufen + Entwurf + Nicht angelegt Zuletzt bearbeitet am Letzter Änderungszeitpunkt des Dokuments Datei entfernen @@ -160,20 +285,81 @@ Kein Mitglied der Gruppe(n) Untergeordnete Elemente Ziel + Dies führt zur folgenden Zeit auf dem Server: + + Was bedeutet dies? + ]]> + + Wollen Sie dieses Element wirklich entfernen? + Eigenschaft %0% verwendet Editor %1%, welcher nicht von Nested Content unterstützt wird. + Füge ein weiteres Textfeld hinzu + Entferne dieses Textfeld + Inhalt-Basis + Inklusive Entwürfen: veröffentliche auch unveröffentlichte Elemente. + Dieser Wert ist verborgen. Wenn Sie diesen Wert einsehen müssen, wenden Sie sich bitte an einen Administrator. + Dieser Wert ist verborgen. + Welche Sprache möchten Sie veröffentlichen? Alle Sprachinhalte wurden gesichert! + Welche Sprache möchten Sie veröffentlichen? + Welche Sprache möchten Sie sichern? + Alle Sprachinhalte wurden beim Anlegen gesichert! + Welche Sprachen möchten Sie zur Freigabe schicken? + Welche Sprachen möchten Sie zu einer bestimmten Zeit veröffentlichen? + Wählen Sie die Sprachen, deren Veröffentlichung zurück genommen werden soll. Das Zurücknehmen der Veröffentlichung einer Pflichtsprache betrifft alle Sprachen. + Veröffentlichte Sprachen + Unveröffentlichte Sprachen + Unveränderte Sprachen + Bereit zu Veröffentlichen? + Bereit zu Sichern? + Freigabe anfordern + Wählen Sie Datum und Uhrzeit für die Veröffentlichung bzw. deren Rücknahme. + + + Erzeuge eine neue Inhaltsvorlage von '%0%' + Leer + Wählen Sie eine Inhaltsvorlage + Inhaltsvorlage erzeugt + Inhaltsvorlage von '%0%' wurde erzeugt + Eine gleichnamige Inhaltsvorlage ist bereits vorhanden + Eine Inhaltsvorlage ist vordefinierter Inhalt, den ein Redakteur als Basis für neuen Inhalt verwenden kann Für Upload klicken + oder klicken Sie hier um eine Datei zu wählen + Sie können Dateien hierher ziehen, um sie hochzuladen. + Dieser Dateityp darf nicht hochgeladen werden + Max. Dateigröße ist + Media-Basis + Media-Element konnte nicht verschoben werden + Eltern- und Ziel-Verzeichnis dürfen nicht übereinstimmen + Media-Element konnte nicht kopiert werden + Unter Element Id %0% konnte kein Verzeichnis angelegt werden + Das Verzeichnis mit Id %0% konnte nicht umbenannt werden Neues Mitglied anlegen Alle Mitglieder + Mitgliedsgruppen haben keine weiteren editierbaren Eigenschaften. An welcher Stellen wollen Sie das Element erstellen - Erstellen unter + Neues Element unterhalb von + Wählen Sie einen Dokumenttyp für eine Inhaltsvorlage + Geben Sie einen Verzeichnisnamen ein Wählen Sie einen Namen und einen Typ - Es stehen keine erlaubten Dokumenttypen zur Verfügung. Sie müssen diese in den Einstellungen (unter "Dokumenttypen") aktivieren. - Es stehen keine erlaubten Medientypen zur Verfügung. Sie müssen diese in den Einstellungen (unter "Medientypen") aktivieren. + + + Dokumenttyp ohne Vorlage + Neues Verzeichnis + Neuer Datentyp + Neue JavaScript-Datei + Neue leere Partial-View + Neues Partial-View-Makro + Neue Partial-View nach Vorlage + Neues Partial-View-Makro nach Vorlage + Neues Partial-View-Makro (ohne Makro) + Neue Style-Sheet-Datei + Neue Rich-Text-Editor Style-Sheet-Datei Website anzeigen @@ -185,43 +371,48 @@ Willkommen - Stay - Discard changes - You have unsaved changes - Are you sure you want to navigate away from this page? - you have unsaved changes + Bleiben + Änderungen verwerfen + Es gibt ungesicherte Änderungen + Wollen Sie diese Seite wirklich verlassen? - es gibt ungesicherte Änderungen + Veröffentlichen macht die ausgewählten Elemente auf der Website sichtbar. + Aufheben der Veröffentlichung entfernt die ausgewählten Elemente und ihre Unterknoten von der Website. + Aufheben der Veröffentlichung entfernt diese Seite und ihre Unterseiten von der Website. + Es gibt ungesicherte Änderungen. Ändern des Dokumenttyps macht diese rückgängig. - Done - Deleted %0% item - Deleted %0% items - Deleted %0% out of %1% item - Deleted %0% out of %1% items - Published %0% item - Published %0% items - Published %0% out of %1% item - Published %0% out of %1% items - Unpublished %0% item - Unpublished %0% items - Unpublished %0% out of %1% item - Unpublished %0% out of %1% items - Moved %0% item - Moved %0% items - Moved %0% out of %1% item - Moved %0% out of %1% items - Copied %0% item - Copied %0% items - Copied %0% out of %1% item - Copied %0% out of %1% items + Fertig + %0% Element entfernt + %0% Elemente entfernt + %0% von %1% Element entfernt + %0% von %1% Elementen entfernt + %0% Element veröffentlicht + %0% Elemente veröffentlicht + %0% von %1% Element veröffentlicht + %0% von %1% Elementen veröffentlicht + %0% Veröffentlichung aufgehoben + %0% Veröffentlichungen aufgehoben + %0% von %1% Veröffentlichung aufgehoben + %0% von %1% Veröffentlichungen aufgehoben + %0% Element verschoben + %0% Elemente verschoben + %0% von %1% Element verschoben + %0% von %1% Elementen verschoben + %0% Element kopiert + %0% Elemente kopiert + %0% von %1% Element kopiert + %0% von %1% Elementen kopiert Name des Link Link + Anker / querystring Name Hostnamen verwalten Fenster schließen - Sind Sie sicher? - Deaktivieren bestätigen - Sind Sie sicher? + Wollen Sie dies wirklich entfernen + Wollen Sie folgendes wirklich deaktivieren + Sind Sie sich wirklich abmelden? Sind Sie sicher? Ausschneiden Wörterbucheintrag bearbeiten @@ -233,8 +424,9 @@ Link einfügen klicken um Macro hinzuzufügen Tabelle einfügen + Dies entfernt die Sprache Zuletzt bearbeitet - Link + Verknüpfung Anker: Wenn lokale Links verwendet werden, füge ein "#" vor den Link ein In einem neuen Fenster öffnen? @@ -242,6 +434,9 @@ Dieses Makro enthält keine einstellbaren Eigenschaften. Einfügen Berechtigungen bearbeiten für + Berechtigungen vergeben für + Berechtigungen vergeben für %0% für Benutzer-Gruppe %1% + Wählen Sie die Benutzer-Gruppe, deren Berechtigungen Sie setzen möchten Der Papierkorb wird geleert. Bitte warten Sie und schließen Sie das Fenster erst, wenn der Vorgang abgeschlossen ist. Der Papierkorb ist leer Wenn Sie den Papierkorb leeren, werden die enthaltenen Elemente endgültig gelöscht. Dieser Vorgang kann nicht rückgängig gemacht werden. @@ -257,27 +452,122 @@ Für Originalgröße auf die Abbildung klicken Element auswählen Zwischenspeicher-Element anzeigen + Verknüpfe mit Original + Einschliesslich Unterknoten + Die freundlichste Community + Seiten-Link + In neuem Fenster / Tab öffnen + Medien-Link + Inhalts-Startknoten wählen + Medienelement wählen + Bildzeichen wählen + Element wählen + Link wählen + Makro wählen + Inhalt wählen + Medien-Startknoten wählen + Mitglied wählen + Mitgliedergruppe wählen + Knoten wählen + Bereich wählen + Benutzer wählen + Keine Bildzeichen gefunden + Für dieses Makro gibt es keine Parameter + Es gibt keine Makros zum Einfügen + Externe Login-Anbieter + Ausnahmedetails + Stacktrace + Inner Exception + Verknüpfen Sie Ihr + Trennen Sie Ihr + Konto + Editor wählen + Kode-Vorlage wählen + + Dies wird den Knoten und all seine Sprachen entfernen. + Wenn Sie nur eine Sprache entfernen wollen, wählen Sie diese und setzen sie auf unveröffentlicht. + + + + Es gibt keine Einträge im Wörterbuch. - Bearbeiten Sie nachfolgend die verschiedenen Sprachversionen für den Wörterbucheintrag '<em>%0%</em>'. <br/>Unter dem links angezeigten Menüpunkt 'Sprachen' können Sie weitere hinzufügen. + + %0%'. +
    Unter dem links angezeigten Menüpunkt 'Sprachen' können Sie weitere hinzufügen. + ]]> +
    Name der Kultur + + + + Wörterbuch Übersicht + + + Sucher einrichten ]]> + + Sucher (z.B.: multi-index searcher) + ]]> + + Feldwerte + Gesundheitsstatus + Der Gesundheitsstatus und Lesbarkeit des Indizes. + Indizierer + Indexinformationen + Zeigt die Eigenschaften des Indizes + Examine Index-Verwaltung + + Index Detailanzeige und Verwaltungswerkzeuge + + Index erneuern + + + Abhängig von der Inhaltsmenge Ihrer Website kann das eingie Zeit dauern.
    + Es wird davon abgeraten, einen Index einer Website während hoher Auslastung- oder Inhaltbearbeitungszeiten zu erneuern. + ]]> +
    + Sucher + Durchsuche den Index und betrachte die Ergebnisse + Werkzeuge + Werkzeuge zur Indexverwaltung Benutzername eingeben Kennwort eingeben + Bestätige das Kennwort %0% benennen ... - Name angeben ... + Bitte Name angeben ... + Bitte E-Mail eingeben... + Bitte Benutzernamen eingeben... + Label... + Bitte eine Beschreibung eingeben... Durchsuchen ... Filtern ... Tippen, um Tags hinzuzufügen (nach jedem Tag die Eingabetaste drücken) ... + Bitte E-Mail eingeben + Bitte Nachricht eingeben... Der Benutzername ist normalerweise Ihre E-Mail-Adresse + #value oder ?key=value + Bitte einen Alias eingeben... + Alias erzeugen... Angepasste Listenansicht erstellen Angepasste Listenansicht entfernen + Ein Inhalts-, Medien oder Mitgliedstyp mit gleichem Alias ist bereits vorhanden. + + + Umbenannt + Tragen Sie hier einen neuen Verzeichnisnamen ein + %0% wurde umbenannt in %1% - Vorgabewert hinzufügen + Neuer Vorgabewert Feldtyp in der Datenbank Datentyp-GUID Steuerelement zur Darstellung @@ -288,6 +578,16 @@ Verknüpfte Stylesheets Beschriftung anzeigen Breite und Höhe + Alle Eigenschaftstypen und -daten + + die auf diesem Datentyp basierenden werden endgültig entfernt, + bitte bestätigen Sie, dass Sie diese ebenfalls entfernen wollen + + Ja, entferne + und alle Eigenschaftstypen und -daten die auf diesem Datentyp basierenden! + Wählen Sie das Verzeichnis aus der untenstehenden Baumstruktur, in das + verschoben werden soll. + wurde verschoben in Ihre Daten wurden gespeichert. Bevor Sie diese Seite jedoch veröffentlichen können, müssen Sie die folgenden Korrekturen vornehmen: @@ -303,10 +603,12 @@ '%0%' hat ein falsches Format + Der Server hat einen Fehler gemeldet Dieser Dateityp wird durch die Systemeinstellungen blockiert ACHTUNG! Obwohl CodeMirror in den Einstellungen aktiviert ist, bleibt das Modul wegen mangelnder Stabilität in Internet Explorer deaktiviert. Bitte geben Sie die Bezeichnung und den Alias des neuen Dokumenttyps ein. Es besteht ein Problem mit den Lese-/Schreibrechten auf eine Datei oder einen Ordner + Fehler beim Laden einer "Partial View Kodedatei" (Datei: %0%) Bitte geben Sie einen Titel ein Bitte wählen Sie einen Typ Soll die Abbildung wirklich über die Originalgröße hinaus vergrößert werden? @@ -317,12 +619,16 @@ Sie können keine Zelle trennen, die nicht zuvor aus mehreren zusammengeführt wurde. + Optionen Info Aktion Aktionen Hinzufügen Alias + Alles Sind Sie sicher? + Zurück + Zurück zur Übersicht Rahmen von Abbrechen @@ -332,10 +638,12 @@ Fenster schließen Kommentar bestätigen + Beschneiden Seitenverhältnis beibehalten + Inhalt Weiter Kopieren - Erstellen + Neu Datenbank Datum Standard @@ -343,6 +651,7 @@ Gelöscht Löschen ... Design + Wörterbuch Abmessungen nach unten Herunterladen @@ -351,55 +660,85 @@ Elemente E-Mail Fehler + Feld Suche + Erste(s) + Allgemein + Gruppen + Gruppe Höhe Hilfe - Symbol + Verbergen + Verlauf + Bildzeichen + Id Import + Unterverzeichnisse ebenfalls durchsuchen + Info Innerer Abstand Einfügen - installieren + Installieren + Ungültig Zentrieren + Bezeichnung Sprache + Letzte(s) Layout + Links Laden Gesperrt Anmelden Abmelden Abmelden Makro + Pflichtfeld + Nachricht Verschieben Name Neu Weiter Nein von + Aus Ok Öffnen + Optionen + An oder + Sortieren nach Kennwort Pfad Einen Moment bitte... Zurück Eigenschaften + Erneuern E-Mail-Empfänger für die Formulardaten Papierkorb + Ihr Mülleimer ist leer + Neu laden Verbleibend + Entfernen Umbenennen Erneuern Pflichtangabe + Wiederherstellen Wiederholen Berechtigungen + Geplantes Veröffentlichen Suchen + Leider können wir nicht finden, wonach Sie suchen. + Es wurden keine Elemente hinzugefügt Server + Einstellungen Anzeigen Seite beim Senden anzeigen Größe Sortieren - Submit - + Status + Senden Typ Durchsuchen ... + unter nach oben Aktualisieren Update @@ -414,8 +753,42 @@ Ja Ordner Suchergebnisse - Reorder - I am done reordering + Sortieren + Sortierung abschließen + Vorschau + Kennwort ändern + nach + Listenansicht + Sichern läuft... + Aktuelle(s) + Eingebettet + ausgewählt + + + Blau + + + Neue Gruppe + Neue Eigenschaft + Editor hinzufügen + Vorlage hinzufügen + Knoten unterhalb hinzufügen + Element unterhalb hinzufügen + Datentyp bearbeiten + Bereiche wechseln + Abkürzungen + Abkürzungen anzeigen + Listenansicht wechseln + Wurzelknotenberechtigung wechseln + Zeile ein-/auskommentieren + Zeile entfernen + Zeilen oberhalb kopieren + Zeilen unterhalb kopieren + Zeilen nach oben schieben + Zeilen nach unten schieben + Standard + Editor + Kulturvariantenberechtigung wechseln Hintergrundfarbe @@ -432,20 +805,28 @@ Die "web.config"-Datei konnte nicht angepasst werden (Zugriffsrechte?). Bitte passen Sie die Verbindungszeichenfolge manuell an. Die Datenbank ist erreichbar und wurde identifiziert als Datenbank - Klicken Sie auf <strong>Installieren</strong>, um die Datenbank für Umbraco %0% einzurichten. + + Installieren, um die Datenbank für Umbraco %0% einzurichten. + ]]> + Die Datenbank wurde für Umbraco %0% konfiguriert. Klicken Sie auf <strong>weiter</strong>, um fortzufahren. - <p>Die angegebene Datenbank ist leider nicht erreichbar. Bitte prüfen Sie die Verbindungszeichenfolge ("Connection String") in der "web.config"-Datei.</p> -<p>Um fortzufahren, passen Sie bitte die "web.config"-Datei mit einem beliebigen Text-Editor an. Scrollen Sie dazu nach unten, fügen Sie die Verbindungszeichenfolge für die zuverbindende Datenbank als Eintrag "UmbracoDbDSN" hinzu und speichern Sie die Datei.</p> -<p>Klicken Sie nach erfolgter Anpassung auf <strong>Wiederholen</strong>.<br />Wenn Sie weitere technische Informationen benötigen, besuchen Sie <a href="https://our.umbraco.com/wiki" target="_blank">The Umbraco documentation wiki</a>.</p> - + + <p>Die angegebene Datenbank ist leider nicht erreichbar. Bitte prüfen Sie die Verbindungszeichenfolge ("Connection String") in der "web.config"-Datei.</p> + <p>Um fortzufahren, passen Sie bitte die "web.config"-Datei mit einem beliebigen Text-Editor an. Scrollen Sie dazu nach unten, fügen Sie die Verbindungszeichenfolge für die zuverbindende Datenbank als Eintrag "UmbracoDbDSN" hinzu und speichern Sie die Datei.</p> + <p>Klicken Sie nach erfolgter Anpassung auf <strong>Wiederholen</strong>.<br />Wenn Sie weitere technische Informationen benötigen, besuchen Sie <a href="https://our.umbraco.com/wiki" target="_blank">The Umbraco documentation wiki</a>.</p> + Um diesen Schritt abzuschließen, müssen Sie die notwendigen Informationen zur Datenbankverbindung angeben.<br />Bitte kontaktieren Sie Ihren Provider bzw. Server-Administrator für weitere Informationen. - <p> - Bitte bestätigen Sie mit einem Klick auf <strong>Update</strong>, dass die Datenbank auf Umbraco %0% aktualisiert werden soll.</p> - <p> - Keine Sorge - Dabei werden keine Inhalte gelöscht und alles wird weiterhin funktionieren! - </p> - + + Bitte bestätigen Sie mit einem Klick auf Update, dass die Datenbank auf Umbraco %0% aktualisiert werden soll. +

    +

    + Keine Sorge - Dabei werden keine Inhalte gelöscht und alles wird weiterhin funktionieren! +

    + ]]> + Die Datenbank wurde auf die Version %0% aktualisiert. Klicken Sie auf <strong>weiter</strong>, um fortzufahren. Die Datenbank ist fertig eingerichtet. Klicken Sie auf <strong>"weiter"</strong>, um mit der Einrichtung fortzufahren. <strong>Das Kennwort des Standard-Benutzers muss geändert werden!</strong> @@ -463,7 +844,10 @@ Klicken Sie hier, um den technischen Artikel zu lesen Schauen Sie sich die <strong>Video-Lehrgänge</strong> zum Thema Verzeichnisberechtigungen für Umbraco an oder lesen Sie den technischen Artikel. <strong>Die Dateiberechtigungen sind möglicherweise fehlerhaft!</strong>Sie können Umbraco vermutlich ohne Probleme verwenden, werden aber viele Erweiterungspakete können nicht installiert werden. - <strong>Die Dateiberechtigungen sind nicht geeignet!</strong><br /><br />Die Dateiberechtigungen müssen angepasst werden. + + <strong>Die Dateiberechtigungen sind nicht geeignet!</strong><br /><br /> + Die Dateiberechtigungen müssen angepasst werden. + <strong>Die Dateiberechtigungen sind perfekt eingestellt!</strong><br /><br /> Damit ist Umbraco komplett eingerichtet und es können problemlos Erweiterungspakete installiert werden. Verzeichnisprobleme lösen Folgen Sie diesem Link für weitere Informationen zum Thema ASP.NET und der Erstellung von Verzeichnissen. @@ -471,30 +855,30 @@ Umbraco benötigt Schreibrechte auf verschiedene Verzeichnisse, um Dateien wie Bilder oder PDF-Dokumente speichern zu können. Außerdem werden temporäre Daten zur Leistungssteigerung der Website angelegt. Ich möchte mit einem leeren System ohne Inhalte und Vorgaben starten - Die Website ist zur Zeit komplett leer und ohne Inhalte und Vorgaben zu Erstellung eigener Dokumenttypen und Vorlagen bereit. - (<a href="http://Umbraco.tv/documentation/videos/for-site-builders/foundation/document-types">So geht's</a>) - Sie können "Runway" auch jederzeit später installieren. Verwenden Sie hierzu den Punkt "Pakete" im Entwickler-Bereich. - + Die Website ist zur Zeit komplett leer und ohne Inhalte und Vorgaben zu Erstellung eigener Dokumenttypen und Vorlagen bereit. + (<a href="http://Umbraco.tv/documentation/videos/for-site-builders/foundation/document-types">So geht's</a>) + Sie können "Runway" auch jederzeit später installieren. Verwenden Sie hierzu den Punkt "Pakete" im Entwickler-Bereich. + Die Einrichtung von Umbraco ist abgeschlossen und das Content-Management-System steht bereit. Wie soll es weitergehen? 'Runway' wurde installiert -Die Basis ist eingerichtet. Wählen Sie die Module aus, die Sie nun installieren möchten.<br /> -Dies sind unsere empfohlenen Module. Schauen Sie sich die an, die Sie installieren möchten oder Sie sich die <a href="#" onclick="toggleModules(); return false;" id="toggleModuleList">komplette Liste der Module an.</a> - + Die Basis ist eingerichtet. Wählen Sie die Module aus, die Sie nun installieren möchten.<br /> + Dies sind unsere empfohlenen Module. Schauen Sie sich die an, die Sie installieren möchten oder Sie sich die <a href="#" onclick="toggleModules(); return false;" id="toggleModuleList">komplette Liste der Module an.</a> + Nur für erfahrene Benutzer empfohlen Ich möchte mit einer einfache Website starten -<p> -"Runway" ist eine einfache Website mit einfachen Dokumententypen und Vorlagen. Der Installer kann Runway automatisch einrichten, -aber es kann einfach verändert, erweitert oder entfernt werden. Es ist nicht zwingend notwendig und Umbraco kann auch ohne Runway verwendet werden. -Runway bietet eine einfache Basis zum schnellen Start mit Umbraco. -Wenn Sie sich für Runway entscheiden, können Sie optional Blöcke nutzen, die "Runway Modules" und Ihre Runway-Seite erweitern. -</p> -<small> -<em>Runway umfasst:</em> Home page, Getting Started page, Installing Modules page.<br /> -<em>Optionale Module:</em> Top Navigation, Sitemap, Contact, Gallery. -</small> - + <p> + "Runway" ist eine einfache Website mit einfachen Dokumententypen und Vorlagen. Der Installer kann Runway automatisch einrichten, + aber es kann einfach verändert, erweitert oder entfernt werden. Es ist nicht zwingend notwendig und Umbraco kann auch ohne Runway verwendet werden. + Runway bietet eine einfache Basis zum schnellen Start mit Umbraco. + Wenn Sie sich für Runway entscheiden, können Sie optional Blöcke nutzen, die "Runway Modules" und Ihre Runway-Seite erweitern. + </p> + <small> + <em>Runway umfasst:</em> Home page, Getting Started page, Installing Modules page.<br /> + <em>Optionale Module:</em> Top Navigation, Sitemap, Contact, Gallery. + </small> + Was ist 'Runway'? Schritt 1/5 Lizenz Schritt 2/5: Datenbank @@ -515,7 +899,7 @@ Wenn Sie sich für Runway entscheiden, können Sie optional Blöcke nutzen, die Dieser Assistent führt Sie durch die Einrichtung einer neuen Installation von <strong>Umbraco %0%</strong> oder einem Upgrade von Version 3.0.<br /><br />Klicken Sie auf <strong>weiter</strong>, um zu beginnen. - Code der Kultur + Kode der Kultur Name der Kultur @@ -534,6 +918,99 @@ Wenn Sie sich für Runway entscheiden, können Sie optional Blöcke nutzen, die Anmelden mit Sitzung abgelaufen <p style="text-align:right;">&copy; 2001 - %0% <br /><a href="http://umbraco.com" style="text-decoration: none" target="_blank">umbraco.org</a></p> + Kennwort vergessen? + Es wird eine E-Mail mit einem Kennwort-Zurücksetzen-Link an die angegebene Adresse geschickt. + Es wird eine E-Mail mit Anweisungen zum Zurücksetzen des Kennwortes an die angegebene Adresse geschickt sofern diese im Datenbestand gefunden wurde. + Kennwort zeigen + Kennwort verbergen + Zurück zur Anmeldung + Bitte wählen Sie ein neues Kennwort + Ihr Kennwort wurde aktualisiert + Der aufgerufene Link ist ungültig oder abgelaufen + Umbraco: Kennwort zurücksetzen + + + + + + + + + + + + +
    + + + + + +
    + +
    + +
    +
    + + + + + + +
    +
    +
    + + + + +
    + + + + +
    +

    + Das Zurücksetzen Ihres Kennwortes wurde angefordert +

    +

    + Ihr Benutzername für das Umbraco-Administration lautet: %0% +

    +

    + + + + + + +
    + + Klicken Sie hier, um Ihr Kennwort zurück zu setzen + +
    +

    +

    Wenn Sie den Link nicht klicken können, kopieren Sie den fogenden URL und fügen Sie ihn direkt im Browser-Fenster ein:

    + + + + +
    + + %1% + +
    +

    +
    +
    +


    +
    +
    + + + ]]> +
    Dashboard @@ -556,6 +1033,7 @@ Wenn Sie sich für Runway entscheiden, können Sie optional Blöcke nutzen, die Bearbeiten Sie Ihre Benachrichtigungseinstellungen für '%0%' + Benachrichtigungseinstellungen wurden gesichert für Hallo %0%, @@ -566,44 +1044,173 @@ Wenn Sie sich für Runway entscheiden, können Sie optional Blöcke nutzen, die Einen schönen Tag wünscht Ihr freundlicher Umbraco-Robot - Hallo %0%

    -

    Dies ist eine automatisch E-Mail, welche Sie informiert, dass die Aufgabe '%1%' - an der Seite '%2%' - vom Benutzer '%3%' ausgeführt wurde. -

    - -

    -

    Zusammenfassung der Aktualisierung:

    - - %6% -
    -

    - - - -

    Einen schönen Tag wünscht

    - Ihr freundlicher Umbraco-Robot -

    -]]>
    + Die folgenden Sprachen wurden geändert %0% + + + + + + + + + + + + +
    + + + + + +
    + +
    + +
    +
    + + + + + + +
    +
    +
    + + + + +
    + + + + +
    +

    + Hallo %0%, +

    +

    + Diese automatische E-Mail soll Sie informiern, dass die Aufgabe '%1%' auf Seite '%2%' von Benutzer '%3%' ausgeführt wurde. +

    + + + + + + +
    + +
    + Bearbeiten
    +
    +

    +

    Zusammenfassung der Änderungen:

    + %6% +

    +

    + Einen schönen Tag wünscht
    +
    + Ihr freundlicher Umbraco-Robot +

    +
    +
    +


    +
    +
    + + +]]> +
    + + Folgende Sprachen wurden geändert:

    + %0% + ]]> +
    [%0%] Benachrichtigung: %1% ausgeführt an Seite '%2%' Benachrichtigungen - Wählen Sie ein Paket auf Ihrem lokalen Computer über "Datei auswählen" aus. <br />Umbraco-Pakete besitzen üblicherweise die Dateiendungen ".umb" oder ".zip". + Aktionen + Angelegt + Neues Paket + + + Umbraco-Pakete besitzen üblicherweise die Dateiendungen ".umb" oder ".zip". + ]]> + + Diese Aktion entfernt das Paket + Hierher ziehen zum Hochladen + Alle Unterknoten einschließen + oder hier klicken, um die Paket-Datei auszuwählen + Paket hochladen + + Wählen Sie ein Paket auf Ihrem lokalen Computer über "Datei auswählen" aus.
    + Installieren Sie nur Pakete von Quellen, denen Sie vertrauen. +
    + Ein weiteres Paket hochladen + Abbrechen und anderes Paket hochladen + Ich akzeptiere + Benutzungsbedingungen + Dateipfad + Absoluter Dateipfad (z. B.: /bin/umbraco.bin) + Installiert + Installierte Pakete + Lokale Installation + Benenden + Diese Paket hat keine Einstellungen + Es wurden noche keine Pakete angelegt + Sie haben keine Pakete installiert + + 'Pakete' rechts, oben), um es zu installieren + ]]> + + Packet Aktionen + Autor URL + Paketinhalt + Paketdateien + Bildsymbol URL + Paket installieren + Lizenz + Lizenz URL + Paketeigenschaften + Paket suchen + Ergebnis(se) für + Keine Ergebnisse für + Bitte versuchen Sie einen anderen Begriff oder stöbern Sie in den Kategorien + Beliebt + Neue Veröffentlichungen + hat + Karma Punkte + Information + Besitzer + Beitragende + Angelegt + Aktuelle Version + .NET Version + Heruntergeladenes + Likes + Kompatibilität + + Dieses Paket ist nach Berichten von Community-Mitgliedern mit folgenden Umbraco-Version kompatibel. + Es kann keine vollständige Kompatibilität garantiert werden für Versionen mit weniger als 100% Bewertungen. + + Externe Quellen Autor Dokumentation Paket-Meta-Daten Name des Pakets Paket enthält keine Elemente - Die Paket-Datei enthält keine Elemente die deinstalliert werden können.<br/><br/>Sie können das Paket ohne Gefahr deinstallieren indem Sie "Paket deinstallieren" anklicken. + +
    + Sie können das Paket ohne Gefahr deinstallieren indem Sie "Paket deinstallieren" anklicken.]]> +
    Paket-Optionen Informationen zum Paket Paket-Repository @@ -611,8 +1218,25 @@ Wenn Sie sich für Runway entscheiden, können Sie optional Blöcke nutzen, die Paket wurde deinstalliert Das Paket wurde erfolgreich deinstalliert Paket deinstallieren - Sie können einzelne Elemente, die Sie nicht deinstallieren möchten, unten abwählen. Wenn Sie "Deinstallation bestätigen" klicken, werden alle markierten Elemente entfernt.<br /><span style="color: Red; font-weight: bold;">Achtung:</span> alle Dokumente, Medien, etc, die von den zu entfernenden Elementen abhängen, werden nicht mehr funktionieren und im Zweifelsfall kann dass gesamte CMS instabil werden. Bitte deinstallieren Sie also mit Vorsicht. Falls Sie unsicher sind, kontaktieren Sie den Autor des Pakets. - Version des Pakets + + + Achtung: alle Dokumente, Medien, etc, die von den zu entfernenden Elementen abhängen, + werden nicht mehr funktionieren und im Zweifelsfall kann dass gesamte CMS instabil werden. + Bitte deinstallieren Sie also mit Vorsicht. Falls Sie unsicher sind, kontaktieren Sie den Autor des Pakets.]]> + + Paketversion + "Upgrading" von Version + Packet bereits installiert + Diese Paket kann nicht installiert werden. Es benötigt mindestens die Umbracoversion + Es wird deinstalliert... + Es wird heruntergeladen... + Es wird importiert... + Es wird installiert... + Es wird neu gestartet, bitte warten... + Fertig, Ihr Browser aktualisiert jetzt, bitte warten... + Bitte klicken Sie 'Beenden', um die Installation abzuschließen und die Seite neu zu laden. + Paket wird hochgeladen... Einfügen mit Formatierung (Nicht empfohlen) @@ -621,9 +1245,9 @@ Wenn Sie sich für Runway entscheiden, können Sie optional Blöcke nutzen, die Einfügen, aber Formatierung bereinigen (Empfohlen) - Rollenbasierter Zugriffschutz - Wenn Sie rollenbasierte Authentifikation mit Umbraco-Mitgliedsgruppen verwenden wollen. - Sie müssen zuerst eine Mitgliedsgruppe erstellen, bevor derrollenbasierte Zugriffschutz aktiviert werden kann. + Rollenbasierter Zugriffschutz + Wenn Sie rollenbasierte Authentifikation mit Umbraco-Mitgliedsgruppen verwenden wollen. + Sie müssen zuerst eine Mitgliedsgruppe erstellen, bevor derrollenbasierte Zugriffschutz aktiviert werden kann. Fehlerseite Seite mit Fehlermeldung (Benutzer-Login erfolgt, aber keinen Zugriff auf die aufgerufene Seite erlaubt) Bitte wählen Sie, auf welche Art der Zugriff auf diese Seite geschützt werden soll @@ -632,27 +1256,70 @@ Wenn Sie sich für Runway entscheiden, können Sie optional Blöcke nutzen, die Login-Seite Seite mit Login-Formular Zugriffsschutz entfernen + + %0% wirklich entfernen? + ]]> + Auswahl der Seiten, die das Login-Formular und die Fehlermeldung enthalten - Auswahl der Benutzerrollen, die Zugriff haben sollen - Kennwort und Login für diese Seite setzen - Zugriffsschutz durch einzelnen Benutzerzugang - Wenn Sie einen einfachen Zugriffsschutz unter Verwendung eines einzelnen Logins mit Kennwort aktivieren wollen + + Auswahl der Benutzergruppen, die Zugriff auf Seite %0% haben sollen + + %0% haben sollen.]]> + Mitglieder basierte Zugriffsberechtigung + Falls Sie Mitglieder basierte Zugriffsberechtigung gewähren wollen + - %0% kann nicht veröffentlicht werden, da die Veröffentlichung zeitlich geplant ist. - %0% konnte nicht veröffentlicht werden, da einige Daten die Gültigkeitsprüfung nicht bestanden haben. - %0% konnte nicht veröffentlicht werden, da ein Plug-In die Aktion abgebrochen hat. - %0% kann nicht veröffentlicht werden, da das übergeordnete Dokument nicht veröffentlicht ist. + Die Zugriffsrechte des Benutzers sind ungenügend, um alle Unterknoten zu veröffentlichen + + + + + %0% kann nicht veröffentlicht werden, da die Veröffentlichung zeitlich geplant ist. + + + + + + + + + %0% konnte nicht veröffentlicht werden, da ein Plug-In die Aktion abgebrochen hat. + + + %0% kann nicht veröffentlicht werden, da das übergeordnete Dokument nicht veröffentlicht ist. + Unveröffentlichte Unterelemente einschließen Bitte warten, Veröffentlichung läuft... %0% Elemente veröffentlicht, %1% Elemente ausstehend ... %0% wurde veröffentlicht %0% und die untergeordneten Elemente wurden veröffentlicht %0% und alle untergeordneten Elemente veröffentlichen - Mit <em>Ok</em> wird <strong>%0%</strong> veröffentlicht und auf der Website sichtbar.<br/><br />Sie können dieses Element mitsamt seinen untergeordneten Elementen veröffentlichen, indem Sie <em>Unveröffentlichte Unterelemente einschließen</em> aktivieren. + Sichern und Veröffentlichen, um %0% zu veröffentlicht und auf der Website sichtbar zu machen.

    + Sie können dieses Element mitsamt seinen untergeordneten Elementen veröffentlichen, indem Sie Unveröffentlichte Unterelemente einschließen markieren. + ]]> +
    Sie haben keine freigegeben Farben konfiguriert + + + + Sie haben ein entferntes oder im Papierkorb befindliches Inhaltselement ausgewählt + Sie haben entfernte oder im Papierkorb befindliche Inhaltselemente ausgewählt + + + Sie haben ein entferntes oder im Papierkorb befindliches Medienelement ausgewählt + Sie haben entfernte oder im Papierkorb befindliche medienelemente ausgewählt + Verworfen Externen Link eingeben @@ -665,8 +1332,13 @@ Wenn Sie sich für Runway entscheiden, können Sie optional Blöcke nutzen, die Zurücksetzen + Ausschnitt sichern + Neuer Ausschnitt + Fertig + Rückgängig machen + Wählen Sie eine Version, um diese mit der aktuellen zu vergleichen Aktuelle Version Zeigt die Unterschiede zwischen der aktuellen und der ausgewählten Version an.<br />Text in <del>rot</del> fehlen in der ausgewählten Version, <ins>grün</ins> markierter Text wurde hinzugefügt. Dokument wurde zurückgesetzt @@ -679,20 +1351,14 @@ Wenn Sie sich für Runway entscheiden, können Sie optional Blöcke nutzen, die Skript bearbeiten - Umbraco Concierge Inhalte - Umbraco Courier - Entwickler - Konfigurationsassistent + Formulare Medien Mitglieder - Newsletter + Pakete Einstellungen - Statistiken Übersetzung Benutzer - Hilfe - Formulare Die besten Umbraco-Video-Tutorials @@ -712,6 +1378,8 @@ Wenn Sie sich für Runway entscheiden, können Sie optional Blöcke nutzen, die Dieser Dokumenttyp verwendet als Masterdokumenttyp. Register vom Masterdokumenttyp werden nicht angezeigt und können nur im Masterdokumenttyp selbst bearbeitet werden Für dieses Register sind keine Eigenschaften definiert. Klicken Sie oben auf "neue Eigenschaft hinzufügen", um eine neue Eigenschaft hinzuzufügen. + Zugehörige Vorlage anlegen + Bildsymbol hinzufügen Sortierreihenfolge @@ -719,13 +1387,16 @@ Wenn Sie sich für Runway entscheiden, können Sie optional Blöcke nutzen, die Sortierung abgeschlossen. Ziehen Sie die Elemente an ihre gewünschte neue Position. Bitte warten, die Seiten werden sortiert. Das kann einen Moment dauern. + Dieser Knoten hat keine Unterknoten zum Sortieren + Validierung + Validierungsfehler müssen behoben werden, bevor das Element gesichert werden kann Fehlgeschlagen + Gesichert Unzureichende Benutzerberechtigungen. Vorgang kann nicht abgeschlossen werden. Abgebrochen Vorgang wurde durch eine benutzerdefinierte Erweiterung abgebrochen - Das Veröffentlichen wurde von einem individuellen Ereignishandler abgebrochen Eigenschaft existiert bereits Eigenschaft erstellt Name: %0% Datentyp: %1% @@ -739,63 +1410,191 @@ Wenn Sie sich für Runway entscheiden, können Sie optional Blöcke nutzen, die Stylesheet erfolgreich gespeichert Datentyp gespeichert Wörterbucheintrag gespeichert - Veröffentlichung nicht möglich, da das übergeordnete Dokument nicht veröffentlicht ist. - Inhalte veröffentlicht - Sichtbar auf der Webseite + Inhalt veröffentlicht + und ist auf der Website sichtbar + %0% Documente veröffentlicht und auf der Website sichtbar + %0% veröffentlicht und auf der Website sichtbar + %0% Documente veröffentlicht in Sprache %1% und auf der Website sichtbar Inhalte gespeichert Denken Sie daran, die Inhalte zu veröffentlichen, um die Änderungen sichtbar zu machen + Der Termin für die Veröffentlichung wurde geändert + %0% gesichert Zur Abnahme eingereicht Die Änderungen wurden zur Abnahme eingereicht + %0% Änderungen wurden zur Abnahme eingereicht Medium gespeichert Medium fehlerfrei gespeichert Mitglied gespeichert + Mitgliedsgruppe gespeichert Stylesheet-Regel gespeichert Stylesheet gespeichert Vorlage gespeichert Fehler beim Speichern des Benutzers. Benutzer gespeichert Benutzertyp gepsichert + Benutzergruppe gepsichert Datei wurde nicht gespeichert Datei konnte nicht gespeichert werden. Bitte überprüfen Sie die Schreibrechte auf Dateiebene. Datei gespeichert Datei erfolgreich gespeichert Sprache gespeichert + Medientyp gespeichert + Mitgliedertyp gespeichert + Mitgliedergruppe gespeichert Vorlage wurde nicht gespeichert Bitte prüfen Sie, ob möglicherweise zwei Vorlagen den gleichen Alias verwenden. Vorlage gespeichert Vorlage erfolgreich gespeichert! Veröffentlichung des Inhalts aufgehoben + Inhaltsvariante %0% unveröffentlicht + Die Veröffentlichung der Pflichtsprache '%0%' wurde zurück genommen. Das gleiche gilt für alle Sprachen dieses Inhalts. Partielle Ansicht gespeichert Partielle Ansicht ohne Fehler gespeichert. Partielle Ansicht nicht gespeichert Fehler beim Speichern der Datei. + Berechtigungen gesichert für + %0% Benutzergruppen entfernt + %0% wurde entfernt + %0% Benutzer aktiviert + %0% Benutzer deaktiviert + %0% ist jetzt aktiviert + %0% ist jetzt deaktiviert + Benutzergruppen wurden gesetzt + %0% Benutzer freigegeben + %0% ist jetzt freigegeben + Mitglied wurde in Datei exportiert + Beim Exportieren des Mitglieds trat ein Fehler auf + Benutzer %0% wurde entfernt + Benutzer einladen + Einladung wurde erneut an %0% geschickt + Das Dokument kann nicht veröffentlicht werden, solange '%0%' nicht veröffentlicht wurde + Validierung fehlgeschlagen für Sprache '%0%' + Dokumenttyp wurde in eine Datei exportiert + Beim Exportieren des Dokumenttyps trat ein Fehler auf + Das Veröffentlichungsdatum kann nicht in der Vergangenheit liegen + Die Veröffentlichung kann nicht eingeplant werden, solange '%0%' (benötigt) nicht veröffentlicht wurde + Die Veröffentlichung kann nicht eingeplant werden, solange '%0%' (benötigt) ein späteres Veröffentlichungsdatum hat als eine optionale Sprache + Das Ablaufdatum darf nicht in der Vergangenheit liegen + Das Ablaufdatum darf nicht vor dem Veröffentlichungsdatum liegen - Gewünschter CSS-Selektor, zum Beispiel 'h1', '.bigHeader' oder 'p.infoText' + Neuer Stil + Stil bearbeiten + Rich text editor Stile + + Definiere die Stile, die im 'Rich-Text-Editor' verfügbar sein sollen. + Stylesheet bearbeiten Stylesheet-Regel bearbeiten Bezeichnung im Auswahlmenü des Rich-Text-Editors Vorschau + So wird der Text im Rich-Text-Editor aussehen. + Selector + Benutze CSS Syntax, z. B.: "h1" oder ".redHeader" Stile + Die CSS-Auszeichnungen, die im Rich-Text-Editor verwendet werden soll, z. B.: "color:red;" + Kode + Rich Text Editor + Beim Entfernen der Vorlage mit Id %0% trat ein Fehler auf Vorlage bearbeiten + Bereich Platzhalter-Bereich verwenden Platzhalter einfügen + Einfügen + Wählen Sie, was in die Vorlage eingefügt werden soll Wörterbucheintrag einfügen - Makro einfügen - Umbraco-Feld einfügen - Mastervorlage - Schnellübersicht zu den verfügbaren Umbraco-Feldern + Ein Wörterbuchelement ist ein Platzhalter für lokalisierbaren Text. + Das macht es einfach mehrsprachige Websites zu gestalten. + Makro + + Ein Makro ist eine konfigurierbare Komponente, die großartig für wiederverwendbare Teile Ihres Entwurfes sind, + für welche Sie optionale Parameter benötigen, wie z. B. Galerien, Formulare oder Listen. + + Umbraco-Feld + + Zeigt den Wert eines benannten Feldes der aktuellen Seite an, mit der Möglichkeit den Wert zu verändern + oder einen alternativen Ersatzwert zu wählen. + Teilansicht (Partial View) + + Eine Teilansicht ist eine eigenständige Vorlagen-Datei, die innerhalb einer anderen Vorlage verwendet werden kann. + Sie ist gut geeignet, um "Markup"-Kode wiederzuverwenden oder komplexe Vorlagen in mehrere Dateien aufzuteilen. + + Basisvorlage + Keine Basis + Untergeordnete Vorlage einfügen + + @RenderBody() Platzhalters. + ]]> + + Definiert einen benannten Bereich + + @section { ... }. + Dieser benannte Bereich kann in der übergeordneten Vorlage + durch Verwendung von @RenderSection eingefügt werden. + ]]> + + Füge einen benannten Bereich ein + + @RenderSection(name) ein. + Dies verarbeitet einen benannten Bereich einer untergeordneten Vorlage, der mit @section [name]{ ... } umschlossen, definiert wurde. + ]]> + + Bereichsname + Bereich ist notwendig + + Wenn notwendig, dann muss die untergeordnete Vorlage eine @section Definition gleichen Namens enthalten, + anderfalls tritt ein Fehler auf. + + Abfrage-Generator + zurückgegebene Elemente, in + Ich möchte + den ganzen Inhalt + Inhalt vom Typ "%0%" + von + meiner website + wobei + und + ist + ist nicht + vor + vor (inkl. gewähltes Datum) + nach + nach (inkl. gewähltes Datum) + gleich + ungleich + enthält + ohne + größer als + größer als oder gleich + weniger als + weniger als oder gleich + Id + Name + Datum der Erzeugung + Datum der letzten Aktualisierung + sortiert nach + aufsteigend + absteigend + Vorlage Image Macro - Element hinzufügen - Zeilenlayout auswählen - Einfach auf <i class="icon icon-add blue"></i> klicken, um das erste Element anzulegen - Drop content + Neues Element + Layout auswählen + Neue Zeile + Neuer Inhalt + Inhalt entfernen + Einstellungen anwenden + nicht zugelassen]]> + Dieser Inhalt ist hier zugelassen Klicken, um Inhalt einzubetten Klicken, um Abbildung einzufügen Beschriftung ... @@ -807,7 +1606,7 @@ Wenn Sie sich für Runway entscheiden, können Sie optional Blöcke nutzen, die Einstellungen für das Zeilenlayout Zeilen sind vordefinierte horizontale Zellenanordnungen Zeilenlayout hinzufügen - Pasen Sie das Zeilenlayout an, indem Sie die Zellenbreite einstellen und Zellen hinzufügen. + Passen Sie das Zeilenlayout an, indem Sie die Zellenbreite einstellen und Zellen hinzufügen. Spalten Insgesamte Spaltenanzahl im Layout Einstellungen @@ -816,36 +1615,143 @@ Wenn Sie sich für Runway entscheiden, können Sie optional Blöcke nutzen, die Legen Sie fest, welche Stile die Autoren anpassen können. Alle Elemente erlauben Alle Zeilenlayouts erlauben + Maximal erlaubte Elemente + Leer lassen oder auf 0 setzen für unbegrenzt + Als Standard setzen + Extra wählen + Standard wählen + wurde hinzugefügt + + + Mischungen + Sie haben keine Gruppen hinzugefügt + Gruppe hinzufügen + Übernimm von + Eigenschaft hinzufügen + Notwendige Bezeichnung + Listenansicht aktivieren + + Konfiguriert die Verwendung einer sortier- und filterbaren Listenansicht der Unterknoten für diesen Dokumenttyp. + Die Unterknoten werden nicht in Baumstruktur angezeigt. + Erlaubte Vorlagen + + Wählen Sie die Vorlagen, die Editoren für diesen Dokumenttyp wählen dürfen + Als Wurzelknoten zulassen + + Ermöglicht es Editoren diesen Dokumenttyp in der obersten Ebene der Inhalt-Baum-Strukur zu wählen + Erlaubte Dokumenttypen für Unterknoten + + Erlaubt es Inhalt der angegebenen Typen unterhalb Inhalten dieses Typs anzulegen + Wählen Sie einen Unterknoten + Übernimm Tabs und Eigenschaften vone einem vorhandenen Dokumenttyp. Neue Tabs werden zum vorliegenden Dokumenttyp hinzugefügt oder mit einem gleichnamigen Tab zusammengeführt. + Dieser Dokumenttyp wird in einer Mischung verwendet und kann deshalb nicht selbst zusammengemischt werden. + Es sind keine Dokumenttypen für eine Mischung vorhanden. + Neu anlegen + Vorhandenen nutzen + Editor-Einstellungen + Konfiguration + Ja, entferne + wurde verschoben unter + wurde kopiert unter + Wähle den Ordner in den verschoben wird + Wähle den Ordner in den kopiert wird + in der untenstehenden Baumstruktur + Alle Dokumenttypen + Alle Inhalte + Alle Medien + welche auf diesem Dokumenttyp beruhen, werden unwiderruflich entfernt, bitte bestätigen Sie, dass diese ebenfalls entfernt werden sollen. + welche auf diesem Medientyp beruhen, werden unwiderruflich entfernt, bitte bestätigen Sie, dass diese ebenfalls entfernt werden sollen. + welche auf diesem Mitgliedstyp beruhen, werden unwiderruflich entfernt, bitte bestätigen Sie, dass diese ebenfalls entfernt werden sollen. + und alle Inhalte, die auf diesem Typ basieren + und alle Medienelemente, die auf diesem Typ basieren + und alle Mitglieder, die auf diesem Typ basieren + Mitglied kann bearbeiten + + Diese Eigenschaft zur Bearbeitung des Mitglieds auf seiner Profileseite freigeben + sensibelle Daten + + Diese Eigenschaft für Editoren, die keine Berechtigung für sensibelle Daten haben, verbergen + Auf Mitgliedsprofil anzeigen + Diesen Eigenschaftswert für die Anzeige auf der Profilseite des Mitglieds zulassen + Tab hat keine Sortierung + Wo wird diese Mischung verwendet? + + Diese Mischung wird aktuell in den Mischungen folgender Dokumenttypen verwendet: + Kultur basierte Variationen zulassen + Editoren erlauben, Inhalt dieses Typs in verschiedenen Sprachen anzulegen + Kultur basierte Variationen zulassen + Ist ein Elementtyp + Nested Content vorgesehen, nicht jedoch als Inhalt-Knoten in der Baumstruktur + ]]> + Dies kann nicht für Elementtypen verwendet werden + + + Sparche hinzufügen + Notwendige Sprache + Eigenschaften müssen für diese Sprache ausgefüllt sein bevor ein Knoten veröffentlicht werden kann. + Standardsprache + Eine Umbraco site kann nur eine Standardsprache haben. + Ändern der Standardsprache kann zum Fehlen von Standard-Inhalt führen. + Wird ersetzt durch + Kein Ersatzsprache + + Um mehrsprachigem Inhalt zu ermöglichen durch eine andere Sprache ersetzt zu werden, + falls die angefragte Sprache nicht verfügbar ist, wählen Sie diese Option hier aus. + Ersatzsprache + + + Parameter hinzufügen + Parameter bearbeiten + Makroname vergeben + Parameter + Definiere die Parameter, die verfügbar sein sollen, wenn dieses Makro verwendet wird. + + + Datenmodel erzeugen + Keine Sorge, das kann eine Weile dauern + Datenmodel erzeugt + Datenmodel konnte nicht erzeugt werden + Erzeugung des Datenmodels fehlgeschlagen, siehe Ausnahmen in den Log-Daten + Ersatzfeld hinzufügen + Ersatzfeld + Standardwert hinzufügen + Standardwert Alternatives Feld Alternativer Text Groß- und Kleinschreibung Kodierung Feld auswählen Zeilenumbrüche ersetzen + Ja, Zeilenumbrüche konvertieren Ersetzt Zeilenumbrüche durch das HTML-Tag <br /> Benutzerdefinierte Felder nur Datum + Format und Kodierung Als Datum formatieren + Formatire den Wert als Datum mit oder ohne Zeit entsprechend der aktiven Kultur HTML kodieren Wandelt Sonderzeichen in HTML-Zeichencodes um Wird nach dem Feldinhalt eingefügt Wird vor dem Feldinhalt eingefügt Kleinbuchstaben + Modifiziere Ausgabe Keine + Beispiel-Ausgabe An den Feldinhalt anhängen Dem Feldinhalt voranstellen Rekursiv - Textabsatz entfernen - Alle <p> am Anfang und am Ende des Feldinhalts werden entfernt + Ja, verwende es rekursiv + Trenner Standardfelder Großbuchstaben URL kodieren Wandelt Sonderzeichen zur Verwendung in URLs um Wird nur verwendet, wenn beide vorgenannten Felder leer sind Dieses Feld wird nur verwendet, wenn das primäre Feld leer ist - Datum und Zeit mit Trennzeichen: + Datum und Zeit Details zur Übersetzung @@ -853,17 +1759,19 @@ Wenn Sie sich für Runway entscheiden, können Sie optional Blöcke nutzen, die Felder Einschließlich der Unterseiten -Hallo %0%, + + Einen schönen Tag wünscht + Ihr freundlicher Umbraco-Robot + ]]> + Bitte erstellen Sie zuerst mindestens einen Übersetzer. Die Seite '%0%' wurde zur Übersetzung gesendet Sendet die Seite '%0%' zur Übersetzung @@ -877,6 +1785,9 @@ Ihr freundlicher Umbraco-Robot Hochladen der XML-Übersetzungsdatei + Inhalt + Inhalt-Vorlage + Medien Zwischenspeicher Papierkorb Erstellte Pakete @@ -894,8 +1805,11 @@ Ihr freundlicher Umbraco-Robot Mitgliederrollen Mitglieder-Typen Dokumententypen + Relationstypen Pakete Pakete + Teilansicht (Partial View) + Makro-Teilansicht(Partial View Macro Files) Paket-Repositories 'Runway' installieren Runway-Module @@ -903,9 +1817,11 @@ Ihr freundlicher Umbraco-Robot Client-Skripte Stylesheets Vorlagen - Berechtigungen - Benutzertypen + Log-Einträge anzeigen Benutzer + Einstellungen + Vorlagen + Drittanbieter Neues Update verfügbar @@ -914,23 +1830,51 @@ Ihr freundlicher Umbraco-Robot Fehler beim Überprüfen der Updates. Weitere Informationen finden Sie im Stacktrace. + Zugang + Basierend auf den zugewiesenen Gruppen und Startknoten, hat der Benutzer Zugang zu folgenden Knoten + Zugang zuweisen Administrator Feld für Kategorie + Benutzer angelegt Kennwort ändern + Foto ändern Neues Kennwort + wurde nicht ausgeschlossen + Das Kennwort wurde nicht geändert Neues Kennwort (Bestätigung) Sie können Ihr Kennwort für den Zugriff auf den Umbraco-Verwaltungsbereich ändern, indem Sie das nachfolgende Formular ausfüllen und auf 'Kennwort ändern' klicken Schnittstelle für externe Editoren + Weiteren Benutzer anlegen + + Lege neue Benutzer an, um ihnen Zugang zum Umbraco-Back-Office zu geben. + Während des Anlegens eines neuen Benutzer wird ein Kennwort erzeugt, das Sie dem Benutzer mitteilen können. + Feld für Beschreibung Benutzer endgültig deaktivieren Dokumenttyp Editor Feld für Textausschnitt + Fehlgeschlagene Anmeldeversuche + Bneutzerprofil aufrufen + Gruppen hinzufügen, um Zugang und Berechtigungen zuzuweisen + Weitere Benutzer einladen + Laden Sie neue Benutzer ein, um ihnen Zugang zum Umbraco-Back-Office zu geben. + Eine Einladungs-E-Mail wird an dem Benutzer geschickt. Diese enthält Informationen, wie sich der Benutzer im Umbraco-Back-Office anmelden kann. + Einladungen sind 72 Stunden lang gültig. Sprache - Login + Bestimmen Sie die Sprache für Menüs und Dialoge + Letztes Abmeldedatum + Letzte Anmeldung + letzte Änderung des Kennworts + Benutzername Startelement in der Medienbibliothek - Freigegebene Bereiche - Zugang sperren + Beschränke die Medien-Bibliothek auf einen bestimmen Startknoten + Medien-Startknoten + Beschränke die Medien-Bibliothek auf bestimme Startknoten + Bereiche + Umbraco-Back-Office sperren + hat sich noch nie angemeldet + Altes Kennwort Kennwort Kennwort zurücksetzen Ihr Kennwort wurde geändert! @@ -944,15 +1888,320 @@ Ihr freundlicher Umbraco-Robot Die Berechtigungen der untergeordneten Elemente ersetzen Die Berechtigungen für folgende Seiten werden angepasst: Dokumente auswählen, um deren Berechtigungen zu ändern - Auch untergeordnete Elemente - Startelement in den Inhalten + Foto entfernen + Normale Berechtigungen + Detailierte Berechtigungen + Knoten basierte Berechtigungen vergeben + Profil + Untergeordnete Elemente durchsuchen + Bereiche hinzufügen, um Benutzern Zugang zu gewähren + Wählen Sie Benutzergruppen + Kein Startknoten ausgewählt + Keine Startknoten ausgewählt + Startknoten in den Inhalten + Inhalt auf bestimmt Startknoten beschränken + Startknoten in den Inhalten + Inhalt auf bestimmte Startknoten beschränken + Benutzer zuletzt aktualiert + wurde angelegt + Der Benutzer wurde erfolgreich angelegt. Zu Anmelden im Umbraco-Back-Office verwenden Sie bitte folgendes Kennwort: + Benutzer Verwaltung Benutzername Berechtigungen - Rolle - Rollen + Benutzergruppe + wurde eingeladen + Eine Einladung mit Anweisungen zur Anmeldung im Umbraco-Back-Office wurde dem neuen Benutzer zugeschickt. + Hallo und Willkommen bei Umbraco! In nur einer Minute sind Sie bereit loszulegen, Sie müssen nur ein Kennwort festlegen und optinal Ihrem Avatar ein Bild hinzufügen. + Willkommen bei Umbraco! Bedauerlicherweise ist Ihre Einladung verfallen. Bitte kontaktieren Sie Ihren Administrator und bitten Sie ihn, diese erneut zu schicken. + Laden Sie ein Foto von sich hoch, um es anderen Benutzern zu erleichtern, sie zu erkennen. Klicken Sie auf den Kreis oben, um Ihr Foto hochzuladen. Autor + Änderung Ihr Profil Ihr Verlauf Sitzung läuft ab in + Invite user + Create user + Send invite + Back to users + Umbraco: Invitation + + + + + + + + + + + + +
    + + + + + +
    + +
    + +
    +
    + + + + + + +
    +
    +
    + + + + +
    + + + + +
    +

    + Hallo %0%, +

    +

    + Sie wurden von %1% ins Umbraco-Back-Office eingeladen. +

    +

    + Nachricht von %1%: +
    + %2% +

    + + + + + + +
    + + + + + + +
    + + Um diese Einladung anzunehmen,
    klicken Sie diese Schaltfläche +
    +
    +
    +

    + Falls die Schaltfläche nicht funktioniert, kopieren Sie folgenden URL und fügen ihn im Browser ein:

    + + + + +
    + + %3% + +
    +

    +
    +
    +


    +
    +
    + + +]]> +
    + Einladen + Einladung erneut verschicken... + Benutzer entfernen + Wollen Sie dieses Benutzerkonto wirklich entfernen? + Alle + Aktiv + Gesperrt + Ausgeschlossen + Eingeladen + Nicht aktiv + Name (A-Z) + Name (Z-A) + Newest + Oldest + Last login + + + Validierung + Prüfe auf gültiges E-Mail-Format + Prüfe auf gültiges Zahlen-Format + Prüfe auf gültiges URL-Format + ...oder verwende eigene Validierung + Pflichtfeld + Regulären Ausdruck eingeben + Fügen Sie mindestens + Fügen Sie maximal + Element(e) hinzu + Element(e) ausgewählt + Ungültiges Datum + Keine Zahl + Ungültiges E-Mail-Format + Der Wert darf nicht ungesetzt bleiben + Der Wert darf nicht leer bleiben + Der Wert ist ungültig + Eigene Validierung + + + + Wert wurde auf den empfohlenen Wert gesetzt: '%0%'. + Wert wurde für XPath '%2%' auf '%1%' in der Konfigurationsdatei '%3%' gesetzt. + Erwartete Wert '%1%' für '%2%' in der Konfigurationsdatei '%3%', '%0%' wurde jedoch gefunden. + Unerwarteten Wert '%0%' für '%2%' in der Konfigurationsdatei '%3%' gefunden. + "customErrors" auf '%0%' gesetzt. + "customErrors" aktuell auf '%0%' gesetzt. Es wird empfohlen, diese vor dem Live-Gang auf '%1%' zu setzen. + "customErrors" erfolgreich auf '%0%' gesetzt. + "MacroErrors" auf '%0%' gesetzt. + "MacroErrors" sind auf '%0%' gesetzt, + was verhindert, dass einige oder alle Seiten Ihrer Website vollständig geladen werden, falls Fehler in Makros auftreten. Schaltfläche "Beheben" setzt den Wert auf '%1%'. + "MacroErrors" sind jetzt auf '%0%' gesetzt. + "trySkipIisCustomErrors" ist auf '%0%' gestellt und Sie verwenden IIS-Version '%1%'. + "trySkipIisCustomErrors" ist aktuell auf '%0%' gestellt. Für Ihre IIS-Version (%2%) wird empfohlen, diese auf '%1%' zu stellen. + "trySkipIisCustomErrors" wurde erfolgreich auf '%0%' gestellt. + Folgende Datei ist nicht vorhanden: '%0%'. + '%0%' wurde nicht in der Konfigurationsdatei '%1%' gefunden.]]> + Es trat ein Fehler auf, für eine vollständige Fehlermeldung suchen Sie in den Logs nach: %0% + Datenbank - Das Datenbank-Schema ist korrekt für diese Umbraco-Version + %0% Probleme wurden in Ihrem Datenbank-Schema entdeckt (Weitere Details finden Sie in den Logs) + Es wurden einige Fehler während der Abgleichs des Datenbank-Schemas mit der vorliegenden Umbraco-Version. + Ihr Website-Zertifikat (SSL) ist gültig. + (SSL-)Zertifikat-Validierungsfehler: '%0%' + Ihr Website-Zertifikat (SSL) ist abgelaufen. + Ihr Website-Zertifikat (SSL) wird in %0% Tagen ablaufen. + Fehler beim PINGen der URL %0% - '%1%' + Sie betrachten diese Website %0% unter Verwendung des HTTPS-Schemas. + Der Schlüssel 'Umbraco.Core.UseHttps' im Abschnitt 'appSettings' der 'web.config'-Datei ist auf 'false' gesetzt. Sobald Sie diese Site über HTTPS nutzen, sollte dieser auf 'true' gestellt werden. + Der Schlüssel 'Umbraco.Core.UseHttps' im Abschnitt 'appSettings' der 'web.config'-Datei ist auf '%0%' gesetzt, Cookies sind %1% als sicher markiert. + Der Schlüssel 'Umbraco.Core.UseHttps' im Abschnitt 'appSettings' der 'web.config'-Datei konnte nicht geändert werden. Fehler: %0% + HTTPS aktivieren + Setzt Schlüssel 'umbracoSSL' im Abschnitt 'appSettings' der 'web.config'-Datei auf 'true'. + Der Schlüssel 'Umbraco.Core.UseHttps' im Abschnitt 'appSettings' der 'web.config'-Datei steht jetzt auf 'true', Cookies werden als sicher markiert. + Beheben + Überprüfungen mit Wertvergleichen vom Typ 'ShouldNotEqual' können nicht behoben werden. + Überprüfungen mit Wertvergleichen vom Typ 'ShouldEqual' mit einem gelieferten Wert können nicht behoben werden. + Es wurde kein Wert geliefert, um den Fehler bei der Überprüfungen zu beheben. + 'Debug' Kompilierungsmodus ist abgeschaltet. + 'Debug' Kompilierungsmodus ist gegenwertig eingeschaltet. Es ist empfehlenswert diesen vor Live-Gang abzuschalten. + 'Debug' Kompilierungsmodus wurde erfolgreich abgeschaltet. + Trace-Modus ist abgeschaltet. + Trace-Modus ist gegenwertig eingeschaltet. Es ist empfehlenswert diesen vor Live-Gang abzuschalten. + Trace-Modus wurde erfolgreich abgeschaltet. + Alle Ordner haben die korrekten Zugriffsrechte. + %0%.]]> + %0%. Falls nicht in diese geschrieben wird, brauchen Sie nichts zu unternehmen.]]> + Alle Dateien haben die korrekten Zugriffsrechte. + %0%.]]> + %0%. Falls nicht in diese geschrieben wird, brauchen Sie nichts zu unternehmen.]]> + X-Frame-Options ist vorhanden. Diese dienen zur Kontrolle, ob eine Site in IFRAMES anderer Sites angezeigt werden kann.]]> + X-Frame-Options ist nicht vorhanden. Es dient zur Kontrolle, ob eine Site in IFRAMES anderer Sites angezeigt werden kann.]]> + Header konfigurieren + Fügt einen Wert im Abschnitt 'httpProtocol/customHeaders' der 'web.config'-Datei hinzu um zu verhindern, dass diese Website in IFRAMES anderer Websites verwendet werden kann. + Der 'web.config'-Datei wurde eine Einstellung zum Erzeugen eines Headers, der andere Websites daran hindert, diese Site im IFRAME zu verwenden, hinzugefügt. + Die 'web.config'-Datei konnte nicht geändert werden. Fehler: %0% + X-Content-Type-Options ist vorhanden. Diese dienen zum Schutz gegen MIME-'Schnüffeln'-Schwachstellen. ]]> + X-Content-Type-Options ist nicht vorhanden. Diese dienen zum Schutz gegen MIME-'Schnüffeln'-Schwachstellen. ]]> + Fügt einen Wert im Abschnitt 'httpProtocol/customHeaders' der 'web.config'-Datei zum Schutz gegen MIME-'Schnüffeln'-Schwachstellen hinzu. + Der 'web.config'-Datei wurde eine Einstellung zum Schutz gegen MIME-'Schnüffeln'-Schwachstellen hinzugefügt. + Strict-Transport-Security, auch bekannt als HSTS-Header, ist vorhanden.]]> + Strict-Transport-Security, auch bekannt als HSTS-Header, ist nicht vorhanden.]]> + Fügt den Header 'Strict-Transport-Security' mit dem Wert 'max-age=10886400; preload' im Abschnitt 'httpProtocol/customHeaders' der 'web.config'-Datei hinzu. Benutzen Sie dies nur, wenn Sie Ihre Domainen für mindestens 18 Wochen unter HTTPS laufen lassen. + Die HSTS-Header-Einstellung wurde der 'web.config'-Datei hinzugefügt. + X-XSS-Protection ist vorhanden.]]> + X-XSS-Protection ist nicht vorhanden]]> + Fügt den Header 'X-XSS-Protection' mit dem Wert '1; mode=block' im Abschnitt 'httpProtocol/customHeaders' der 'web.config'-Datei hinzu. + Die X-XSS-Protection-Header-Einstellung wurde der 'web.config'-Datei hinzugefügt. + %0%.]]> + Es sind keine Header, die Informationen über die Website-Technologie preisgeben, vorhanden. + In der 'web.config'-Datei ist der Abschnitt 'system.net/mailsettings' nicht vorhanden. + In der 'web.config'-Datei ist der Host im Abschnitt 'system.net/mailsettings' nicht konfiguriert. + Die SMTP-Einstellungen sind korrekt konfiguriert und der Dienst arbeitet wie erwartet. + Der konfigurierte SMTP-Server mit Host '%0%' und Port '%1%' konnte nicht erreicht werden. Bitte überprüfen Sie die SMTP-Einstellungen in der 'web.config'-Datei im Abschnitt 'system.net/mailsettings'. + %0% eingestellt.]]> + %0% gestellt.]]> +

    + Die Ergebnisse der geplanten Systemzustandsprüfung läuft am %0% um %1% lauten wie folgt: +

    %2% + ]]>
    + Status der Umbraco Systemzustand: %0% + + + URL-Änderungsaufzeichnung abschalten + URL-Änderungsaufzeichnung einschalten + Kultur + Original URL + Weiterleiten zu + Url-Weiterleitungen verwalten + Die folgenden URLs leiten auf diesen Inhalt: + Es wurden keine Weiterleitungen angelegt + + Wenn eine veröffentlichte Seite umbenannt oder verschoben wird, + erzeugt dieses CMS automatisch eine entsprechende Weiterleitung. + + Wollen Sie wirklich die Weiterleitung von '%0%' nach '%1%' entfernen? + URL-Weiterleitung wurde entfernt. + Beim Entfernen der URL-Weiterleitung ist ein Fehler aufgetreten. + Dies entfernt die Weiterleitung + Wollen Sie die URL-Änderungsaufzeichnung wirklich abschalten? + Die URL-Änderungsaufzeichnung wurde abgeschaltet. + Fehler während der Abschaltung der URL-Änderungsaufzeichnung, weitere Information finden Sie in den Log-Dateien. + Die URL-Änderungsaufzeichnung wurde eingeschaltet. + Fehler während der Aktivierung der URL-Änderungsaufzeichnung, weitere Information finden Sie in den Log-Dateien. + + + Das Wörterbuch ist leer + + + Buchstaben verbleiben + + + Inhalt mit Id = {0} des Oberknotens mit Id = {1} wurde verworfen + Medienelement mit Id = {0} des Oberknotens mit Id = {1} wurde verworfen + Dieses Element kann nicht automatisch wiederhergestellt werden + + Es gibt keine Position für das automatische Wiederherstellen dieses Elementes. + Sie können es manuell mit Hilfe der untenstehenden Baumstruktur verschieben. + + wurde wiederhergestellt unterhalb von + + + Richtung + Ober- zu Unterknoten + Bidirektional + Oberknoten + Unterknoten + Anzahl + Relationen + Angelegt + Kommentar + Name + Es gibt keine Relationen für diesen Typ. + Relationentyp + Relationen + + + Lassen Sie uns beginnen + URL-Weiterleitungen verwalten + Inhalt + Begrüßung + Examine Management + Status der Veröffentlichungen + Models Builder + Systemzustand prüfen + Lassen Sie uns beginnen + Umbraco Forms installieren From 3fd412e962ade6742cc62ee958eaeec4f68a2eba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Gregersen?= Date: Fri, 19 Jul 2019 10:34:10 +0200 Subject: [PATCH 012/432] fix: Missing "=" in Flickr markup Seems to have been missing in quite a lot of versions :) --- src/Umbraco.Web/Media/EmbedProviders/Flickr.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web/Media/EmbedProviders/Flickr.cs b/src/Umbraco.Web/Media/EmbedProviders/Flickr.cs index 2ce014c639..861e849fe2 100644 --- a/src/Umbraco.Web/Media/EmbedProviders/Flickr.cs +++ b/src/Umbraco.Web/Media/EmbedProviders/Flickr.cs @@ -25,7 +25,7 @@ namespace Umbraco.Web.Media.EmbedProviders var imageHeight = GetXmlProperty(xmlDocument, "/oembed/height"); var imageTitle = GetXmlProperty(xmlDocument, "/oembed/title"); - return string.Format("\"{3}\"", imageUrl, imageWidth, imageHeight, HttpUtility.HtmlEncode(imageTitle)); + return string.Format("\"{3}\"", imageUrl, imageWidth, imageHeight, HttpUtility.HtmlEncode(imageTitle)); } } } From 47f27e8eec5b23b365c464f866e8f40020fb5dc5 Mon Sep 17 00:00:00 2001 From: Kenn Jacobsen Date: Mon, 30 Sep 2019 19:14:26 +0200 Subject: [PATCH 013/432] Remove "RenderModel" from various comments throughout the code (#4814) --- src/Umbraco.Web/Mvc/RenderIndexActionSelectorAttribute.cs | 2 +- src/Umbraco.Web/Mvc/RenderRouteHandler.cs | 4 ++-- src/Umbraco.Web/Mvc/RenderViewEngine.cs | 2 +- src/Umbraco.Web/Mvc/RouteDefinition.cs | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Web/Mvc/RenderIndexActionSelectorAttribute.cs b/src/Umbraco.Web/Mvc/RenderIndexActionSelectorAttribute.cs index fa80107181..99aa88b3e2 100644 --- a/src/Umbraco.Web/Mvc/RenderIndexActionSelectorAttribute.cs +++ b/src/Umbraco.Web/Mvc/RenderIndexActionSelectorAttribute.cs @@ -7,7 +7,7 @@ using System.Web.Mvc; namespace Umbraco.Web.Mvc { /// - /// A custom ActionMethodSelector which will ensure that the RenderMvcController.Index(RenderModel model) action will be executed + /// A custom ActionMethodSelector which will ensure that the RenderMvcController.Index(ContentModel model) action will be executed /// if the /// internal class RenderIndexActionSelectorAttribute : ActionMethodSelectorAttribute diff --git a/src/Umbraco.Web/Mvc/RenderRouteHandler.cs b/src/Umbraco.Web/Mvc/RenderRouteHandler.cs index 284c1344b6..c30f83170b 100644 --- a/src/Umbraco.Web/Mvc/RenderRouteHandler.cs +++ b/src/Umbraco.Web/Mvc/RenderRouteHandler.cs @@ -86,7 +86,7 @@ namespace Umbraco.Web.Mvc internal void SetupRouteDataForRequest(ContentModel contentModel, RequestContext requestContext, PublishedRequest frequest) { //put essential data into the data tokens, the 'umbraco' key is required to be there for the view engine - requestContext.RouteData.DataTokens.Add(Core.Constants.Web.UmbracoDataToken, contentModel); //required for the RenderModelBinder and view engine + requestContext.RouteData.DataTokens.Add(Core.Constants.Web.UmbracoDataToken, contentModel); //required for the ContentModelBinder and view engine requestContext.RouteData.DataTokens.Add(Core.Constants.Web.PublishedDocumentRequestDataToken, frequest); //required for RenderMvcController requestContext.RouteData.DataTokens.Add(Core.Constants.Web.UmbracoContextDataToken, UmbracoContext); //required for UmbracoViewPage } @@ -233,7 +233,7 @@ namespace Umbraco.Web.Mvc } /// - /// Returns a RouteDefinition object based on the current renderModel + /// Returns a RouteDefinition object based on the current content request /// /// /// diff --git a/src/Umbraco.Web/Mvc/RenderViewEngine.cs b/src/Umbraco.Web/Mvc/RenderViewEngine.cs index 0fa22616b2..f8a636c87b 100644 --- a/src/Umbraco.Web/Mvc/RenderViewEngine.cs +++ b/src/Umbraco.Web/Mvc/RenderViewEngine.cs @@ -89,7 +89,7 @@ namespace Umbraco.Web.Mvc var umbracoToken = controllerContext.GetDataTokenInViewContextHierarchy(Core.Constants.Web.UmbracoDataToken); // first check if we're rendering a partial view for the back office, or surface controller, etc... - // anything that is not IUmbracoRenderModel as this should only pertain to Umbraco views. + // anything that is not ContentModel as this should only pertain to Umbraco views. if (isPartial && !(umbracoToken is ContentModel)) return true; diff --git a/src/Umbraco.Web/Mvc/RouteDefinition.cs b/src/Umbraco.Web/Mvc/RouteDefinition.cs index 6acafabe1c..89b0467dc3 100644 --- a/src/Umbraco.Web/Mvc/RouteDefinition.cs +++ b/src/Umbraco.Web/Mvc/RouteDefinition.cs @@ -19,7 +19,7 @@ namespace Umbraco.Web.Mvc /// - /// The current RenderModel found for the request + /// Everything related to the current content request including the requested content /// public PublishedRequest PublishedRequest { get; set; } From e286e60a3b8632fdc8c3d5d890230851786c57a6 Mon Sep 17 00:00:00 2001 From: Kenn Jacobsen Date: Mon, 30 Sep 2019 19:22:37 +0200 Subject: [PATCH 014/432] Use umb-checkbox in the delete doctype confirm (#4982) --- .../src/views/documenttypes/delete.controller.js | 9 ++++++++- .../src/views/documenttypes/delete.html | 6 ++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/documenttypes/delete.controller.js b/src/Umbraco.Web.UI.Client/src/views/documenttypes/delete.controller.js index 919239a95d..f0c8a18251 100644 --- a/src/Umbraco.Web.UI.Client/src/views/documenttypes/delete.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/documenttypes/delete.controller.js @@ -6,7 +6,7 @@ * @description * The controller for deleting content */ -function DocumentTypesDeleteController($scope, dataTypeResource, contentTypeResource, treeService, navigationService) { +function DocumentTypesDeleteController($scope, dataTypeResource, contentTypeResource, treeService, navigationService, localizationService) { $scope.performDelete = function() { @@ -47,6 +47,13 @@ function DocumentTypesDeleteController($scope, dataTypeResource, contentTypeReso $scope.cancel = function() { navigationService.hideDialog(); }; + + $scope.labels = {}; + localizationService + .format(["contentTypeEditor_yesDelete", "contentTypeEditor_andAllDocuments"], "%0% " + $scope.currentNode.name + " %1%") + .then(function (data) { + $scope.labels.deleteConfirm = data; + }); } angular.module("umbraco").controller("Umbraco.Editors.DocumentTypes.DeleteController", DocumentTypesDeleteController); diff --git a/src/Umbraco.Web.UI.Client/src/views/documenttypes/delete.html b/src/Umbraco.Web.UI.Client/src/views/documenttypes/delete.html index 2a0185e186..c84eeeedae 100644 --- a/src/Umbraco.Web.UI.Client/src/views/documenttypes/delete.html +++ b/src/Umbraco.Web.UI.Client/src/views/documenttypes/delete.html @@ -28,10 +28,8 @@
    - + + From 9527059abf1f03c95c33ec06b86f8069f805a1d1 Mon Sep 17 00:00:00 2001 From: Kenn Jacobsen Date: Mon, 30 Sep 2019 19:24:00 +0200 Subject: [PATCH 015/432] Make sure search doesn't close when clicking "Clear" (#5797) --- .../src/views/components/application/umb-search.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/components/application/umb-search.html b/src/Umbraco.Web.UI.Client/src/views/components/application/umb-search.html index 35bf725e0a..332a212a0e 100644 --- a/src/Umbraco.Web.UI.Client/src/views/components/application/umb-search.html +++ b/src/Umbraco.Web.UI.Client/src/views/components/application/umb-search.html @@ -11,7 +11,7 @@ ng-change="vm.search(vm.searchQuery)" placeholder="Search..." focus-when="{{vm.searchHasFocus}}" /> - +
    From 48f04f302fc2a0e5dcd1f9b9e289f81d3b9c10d1 Mon Sep 17 00:00:00 2001 From: Anders Bjerner Date: Mon, 30 Sep 2019 22:11:27 +0200 Subject: [PATCH 016/432] =?UTF-8?q?Sorter=20->=20Sort=C3=A9r?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Umbraco.Web.UI/Umbraco/config/lang/da.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/da.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/da.xml index 05a637e255..b037dbf1d2 100644 --- a/src/Umbraco.Web.UI/Umbraco/config/lang/da.xml +++ b/src/Umbraco.Web.UI/Umbraco/config/lang/da.xml @@ -695,7 +695,7 @@ Ja Mappe Søgeresultater - Sorter + Sortér Afslut sortering Eksempel Skift kodeord From aab35ae3ba6c37caea5affdee46b584a9e93c83b Mon Sep 17 00:00:00 2001 From: Dave Woestenborghs Date: Mon, 30 Sep 2019 22:36:51 +0200 Subject: [PATCH 017/432] V8/fix user group selection (#6480) --- .../src/views/users/user.controller.js | 9 ++++----- .../src/views/users/views/users/users.controller.js | 6 +++--- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/users/user.controller.js b/src/Umbraco.Web.UI.Client/src/views/users/user.controller.js index bbce18f017..c935852bf8 100644 --- a/src/Umbraco.Web.UI.Client/src/views/users/user.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/users/user.controller.js @@ -213,9 +213,10 @@ } function openUserGroupPicker() { - var oldSelection = angular.copy(vm.user.userGroups); + var currentSelection = []; + angular.copy(vm.user.userGroups, currentSelection); var userGroupPicker = { - selection: vm.user.userGroups, + selection: currentSelection, submit: function (model) { // apply changes if (model.selection) { @@ -223,9 +224,7 @@ } editorService.close(); }, - close: function () { - // roll back the selection - vm.user.userGroups = oldSelection; + close: function () { editorService.close(); } }; diff --git a/src/Umbraco.Web.UI.Client/src/views/users/views/users/users.controller.js b/src/Umbraco.Web.UI.Client/src/views/users/views/users/users.controller.js index f10dc4e376..1ae0074bfa 100644 --- a/src/Umbraco.Web.UI.Client/src/views/users/views/users/users.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/users/views/users/users.controller.js @@ -350,9 +350,10 @@ } function openUserGroupPicker() { - var oldSelection = angular.copy(vm.newUser.userGroups); + var currentSelection = []; + angular.copy(vm.newUser.userGroups, currentSelection); var userGroupPicker = { - selection: vm.newUser.userGroups, + selection: currentSelection, submit: function (model) { // apply changes if (model.selection) { @@ -362,7 +363,6 @@ }, close: function () { // rollback on close - vm.newUser.userGroups = oldSelection; editorService.close(); } }; From 5f6ab6c146b637da16f2dcc056c1eecc0492a927 Mon Sep 17 00:00:00 2001 From: Dave Woestenborghs Date: Mon, 30 Sep 2019 22:38:09 +0200 Subject: [PATCH 018/432] V8/fix section selection (#6481) --- .../src/views/users/group.controller.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/users/group.controller.js b/src/Umbraco.Web.UI.Client/src/views/users/group.controller.js index d110e5d329..b4f396bb33 100644 --- a/src/Umbraco.Web.UI.Client/src/views/users/group.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/users/group.controller.js @@ -100,14 +100,14 @@ } function openSectionPicker() { - var oldSelection = angular.copy(vm.userGroup.sections); + var currentSelection = []; + angular.copy(vm.userGroup.sections, currentSelection); var sectionPicker = { - selection: vm.userGroup.sections, + selection: currentSelection, submit: function (model) { editorService.close(); }, close: function () { - vm.userGroup.sections = oldSelection; editorService.close(); } }; @@ -164,14 +164,14 @@ } function openUserPicker() { - var oldSelection = angular.copy(vm.userGroup.users); + var currentSelection = []; + angular.copy(vm.userGroup.users, currentSelection); var userPicker = { - selection: vm.userGroup.users, + selection: currentSelection, submit: function () { editorService.close(); }, close: function () { - vm.userGroup.users = oldSelection; editorService.close(); } }; From 5b8da1ce192a113f52020296543d05fa491a90bb Mon Sep 17 00:00:00 2001 From: Bjarne Fyrstenborg Date: Mon, 30 Sep 2019 22:39:37 +0200 Subject: [PATCH 019/432] =?UTF-8?q?Add=20umb-checkbox=20for=20publish=20un?= =?UTF-8?q?published=20content=20items=20with=20no=E2=80=A6=20(#6485)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../content/overlays/publishdescendants.html | 25 ++++++++----------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/views/content/overlays/publishdescendants.html b/src/Umbraco.Web.UI.Client/src/views/content/overlays/publishdescendants.html index 2e392e9e4f..4dcaeb6572 100644 --- a/src/Umbraco.Web.UI.Client/src/views/content/overlays/publishdescendants.html +++ b/src/Umbraco.Web.UI.Client/src/views/content/overlays/publishdescendants.html @@ -1,15 +1,15 @@
    -
    +

    -
    -