diff --git a/src/Umbraco.Core/Extensions/StringExtensions.cs b/src/Umbraco.Core/Extensions/StringExtensions.cs
index 04942246141e..7a9dc53ed092 100644
--- a/src/Umbraco.Core/Extensions/StringExtensions.cs
+++ b/src/Umbraco.Core/Extensions/StringExtensions.cs
@@ -42,9 +42,9 @@ static StringExtensions()
public static int[] GetIdsFromPathReversed(this string path)
{
var nodeIds = path.Split(Constants.CharArrays.Comma, StringSplitOptions.RemoveEmptyEntries)
- .Select(x => x.TryConvertTo())
+ .Select(x => int.TryParse(x, NumberStyles.Integer, CultureInfo.InvariantCulture, out var output) ? Attempt.Succeed(output) : Attempt.Fail())
.Where(x => x.Success)
- .Select(x => x.Result)
+ .Select(x=>x.Result)
.Reverse()
.ToArray();
return nodeIds;
diff --git a/src/Umbraco.Core/Models/Mapping/UserMapDefinition.cs b/src/Umbraco.Core/Models/Mapping/UserMapDefinition.cs
index f66e3a6b23ef..238065718002 100644
--- a/src/Umbraco.Core/Models/Mapping/UserMapDefinition.cs
+++ b/src/Umbraco.Core/Models/Mapping/UserMapDefinition.cs
@@ -425,6 +425,10 @@ private IEnumerable CreateUserEditorNavigation()
private static int GetIntId(object id)
{
+ if (id is string strId && int.TryParse(strId, NumberStyles.Integer, CultureInfo.InvariantCulture, out var asInt))
+ {
+ return asInt;
+ }
var result = id.TryConvertTo();
if (result.Success == false)
{
diff --git a/src/Umbraco.Core/Models/UserExtensions.cs b/src/Umbraco.Core/Models/UserExtensions.cs
index dd96faf298e9..aab9a5d8a7e0 100644
--- a/src/Umbraco.Core/Models/UserExtensions.cs
+++ b/src/Umbraco.Core/Models/UserExtensions.cs
@@ -219,14 +219,14 @@ private static bool StartsWithPath(string test, string path)
private static string GetBinPath(UmbracoObjectTypes objectType)
{
- var binPath = Constants.System.Root + ",";
+ var binPath = Constants.System.RootString + ",";
switch (objectType)
{
case UmbracoObjectTypes.Document:
- binPath += Constants.System.RecycleBinContent;
+ binPath += Constants.System.RecycleBinContentString;
break;
case UmbracoObjectTypes.Media:
- binPath += Constants.System.RecycleBinMedia;
+ binPath += Constants.System.RecycleBinMediaString;
break;
default:
throw new ArgumentOutOfRangeException(nameof(objectType));
diff --git a/src/Umbraco.Core/PropertyEditors/ValueConverters/ContentPickerValueConverter.cs b/src/Umbraco.Core/PropertyEditors/ValueConverters/ContentPickerValueConverter.cs
index 1f89fea12de0..4a33b6cc4738 100644
--- a/src/Umbraco.Core/PropertyEditors/ValueConverters/ContentPickerValueConverter.cs
+++ b/src/Umbraco.Core/PropertyEditors/ValueConverters/ContentPickerValueConverter.cs
@@ -32,12 +32,20 @@ public override object ConvertSourceToIntermediate(IPublishedElement owner, IPub
{
if (source == null) return null;
+
+ if(source is not string)
+ {
+ var attemptConvertInt = source.TryConvertTo();
+ if (attemptConvertInt.Success)
+ return attemptConvertInt.Result;
+ }
//Don't attempt to convert to int for UDI
- if(!(source is string) || source is string strSource && !string.IsNullOrWhiteSpace(strSource) && !strSource.StartsWith("umb"))
+ if( source is string strSource
+ && !string.IsNullOrWhiteSpace(strSource)
+ && !strSource.StartsWith("umb")
+ && int.TryParse(strSource, NumberStyles.Integer, CultureInfo.InvariantCulture, out var intValue))
{
- var attemptConvertInt = source.TryConvertTo();
- if (attemptConvertInt.Success)
- return attemptConvertInt.Result;
+ return intValue;
}
var attemptConvertUdi = source.TryConvertTo();
diff --git a/src/Umbraco.Core/Security/ContentPermissions.cs b/src/Umbraco.Core/Security/ContentPermissions.cs
index 3d3ae55a62e8..206422b6e1c5 100644
--- a/src/Umbraco.Core/Security/ContentPermissions.cs
+++ b/src/Umbraco.Core/Security/ContentPermissions.cs
@@ -236,11 +236,11 @@ public static bool HasPathAccess(string path, int[] startNodeIds, int recycleBin
// only users with root access have access to the recycle bin,
// if the above check didn't pass then access is denied
- if (formattedPath.Contains(string.Concat(",", recycleBinId, ",")))
+ if (formattedPath.Contains(string.Concat(",", recycleBinId.ToString(CultureInfo.InvariantCulture), ",")))
return false;
// check for a start node in the path
- return startNodeIds.Any(x => formattedPath.Contains(string.Concat(",", x, ",")));
+ return startNodeIds.Any(x => formattedPath.Contains(string.Concat(",", x.ToString(CultureInfo.InvariantCulture), ",")));
}
public static bool IsInBranchOfStartNode(string path, int[] startNodeIds, string[] startNodePaths, out bool hasPathAccess)
diff --git a/src/Umbraco.Core/Services/UserServiceExtensions.cs b/src/Umbraco.Core/Services/UserServiceExtensions.cs
index c06711a91ef1..a1f6c09d5c08 100644
--- a/src/Umbraco.Core/Services/UserServiceExtensions.cs
+++ b/src/Umbraco.Core/Services/UserServiceExtensions.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.Globalization;
using System.Linq;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.Models.Membership;
@@ -12,9 +13,9 @@ public static class UserServiceExtensions
public static EntityPermission GetPermissions(this IUserService userService, IUser user, string path)
{
var ids = path.Split(Constants.CharArrays.Comma, StringSplitOptions.RemoveEmptyEntries)
- .Select(x => x.TryConvertTo())
+ .Select(x => int.TryParse(x, NumberStyles.Integer, CultureInfo.InvariantCulture, out var value) ? Attempt.Succeed(value) : Attempt.Fail())
.Where(x => x.Success)
- .Select(x => x.Result)
+ .Select(x=>x.Result)
.ToArray();
if (ids.Length == 0) throw new InvalidOperationException("The path: " + path + " could not be parsed into an array of integers or the path was empty");
diff --git a/src/Umbraco.Examine.Lucene/BackOfficeExamineSearcher.cs b/src/Umbraco.Examine.Lucene/BackOfficeExamineSearcher.cs
index 5e2b66c72064..a77bee7c4426 100644
--- a/src/Umbraco.Examine.Lucene/BackOfficeExamineSearcher.cs
+++ b/src/Umbraco.Examine.Lucene/BackOfficeExamineSearcher.cs
@@ -382,91 +382,5 @@ private void AppendPath(StringBuilder sb, string path, bool includeThisNode)
sb.Append(path);
sb.Append("\\,*");
}
-
- // TODO: When/Where is this used?
-
- ///
- /// Returns a collection of entities for media based on search results
- ///
- ///
- ///
- private IEnumerable MemberFromSearchResults(IEnumerable results)
- {
- //add additional data
- foreach (var result in results)
- {
- var m = _umbracoMapper.Map(result);
-
- //if no icon could be mapped, it will be set to document, so change it to picture
- if (m.Icon == Constants.Icons.DefaultIcon)
- {
- m.Icon = Constants.Icons.Member;
- }
-
- if (result.Values.ContainsKey("email") && result.Values["email"] != null)
- {
- m.AdditionalData["Email"] = result.Values["email"];
- }
- if (result.Values.ContainsKey(UmbracoExamineFieldNames.NodeKeyFieldName) && result.Values[UmbracoExamineFieldNames.NodeKeyFieldName] != null)
- {
- if (Guid.TryParse(result.Values[UmbracoExamineFieldNames.NodeKeyFieldName], out var key))
- {
- m.Key = key;
- }
- }
-
- yield return m;
- }
- }
-
- // TODO: When/Where is this used?
-
- ///
- /// Returns a collection of entities for media based on search results
- ///
- ///
- ///
- private IEnumerable MediaFromSearchResults(IEnumerable results)
- => _umbracoMapper.Map>(results);
-
- // TODO: When/Where is this used?
-
- ///
- /// Returns a collection of entities for content based on search results
- ///
- ///
- ///
- private IEnumerable ContentFromSearchResults(IEnumerable results, string culture = null)
- {
- var defaultLang = _languageService.GetDefaultLanguageIsoCode();
- foreach (var result in results)
- {
- var entity = _umbracoMapper.Map(result, context =>
- {
- if (culture != null)
- {
- context.SetCulture(culture);
- }
- }
- );
-
- var intId = entity.Id.TryConvertTo();
- if (intId.Success)
- {
- //if it varies by culture, return the default language URL
- if (result.Values.TryGetValue(UmbracoExamineFieldNames.VariesByCultureFieldName, out var varies) && varies == "y")
- {
- entity.AdditionalData["Url"] = _publishedUrlProvider.GetUrl(intId.Result, culture: culture ?? defaultLang);
- }
- else
- {
- entity.AdditionalData["Url"] = _publishedUrlProvider.GetUrl(intId.Result);
- }
- }
-
- yield return entity;
- }
- }
-
}
}
diff --git a/src/Umbraco.Infrastructure/Examine/ContentValueSetValidator.cs b/src/Umbraco.Infrastructure/Examine/ContentValueSetValidator.cs
index 39d260a24d9a..ddd97adb1a15 100644
--- a/src/Umbraco.Infrastructure/Examine/ContentValueSetValidator.cs
+++ b/src/Umbraco.Infrastructure/Examine/ContentValueSetValidator.cs
@@ -1,4 +1,5 @@
using System.Collections.Generic;
+using System.Globalization;
using System.Linq;
using Examine;
using Umbraco.Cms.Core.Scoping;
@@ -30,7 +31,7 @@ public bool ValidatePath(string path, string category)
{
// we cannot return FAILED here because we need the value set to get into the indexer and then deal with it from there
// because we need to remove anything that doesn't pass by parent Id in the cases that umbraco data is moved to an illegal parent.
- if (!path.Contains(string.Concat(",", ParentId.Value, ",")))
+ if (!path.Contains(string.Concat(",", ParentId.Value.ToString(CultureInfo.InvariantCulture), ",")))
return false;
}
@@ -39,7 +40,7 @@ public bool ValidatePath(string path, string category)
public bool ValidateRecycleBin(string path, string category)
{
- var recycleBinId = category == IndexTypes.Content ? Constants.System.RecycleBinContent : Constants.System.RecycleBinMedia;
+ var recycleBinId = category == IndexTypes.Content ? Constants.System.RecycleBinContentString : Constants.System.RecycleBinMediaString;
//check for recycle bin
if (PublishedValuesOnly)
diff --git a/src/Umbraco.Infrastructure/Search/UmbracoTreeSearcher.cs b/src/Umbraco.Infrastructure/Search/UmbracoTreeSearcher.cs
index b401e51f8511..218ee4298ba9 100644
--- a/src/Umbraco.Infrastructure/Search/UmbracoTreeSearcher.cs
+++ b/src/Umbraco.Infrastructure/Search/UmbracoTreeSearcher.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.Globalization;
using System.Linq;
using Examine;
using Umbraco.Cms.Core.Mapping;
@@ -162,17 +163,16 @@ private IEnumerable ContentFromSearchResults(IEnumerable();
- if (intId.Success)
+ if (int.TryParse(entity.Id.ToString(),NumberStyles.Integer, CultureInfo.InvariantCulture, out var intId))
{
//if it varies by culture, return the default language URL
if (result.Values.TryGetValue(UmbracoExamineFieldNames.VariesByCultureFieldName, out var varies) && varies == "y")
{
- entity.AdditionalData["Url"] = _publishedUrlProvider.GetUrl(intId.Result, culture: culture ?? defaultLang);
+ entity.AdditionalData["Url"] = _publishedUrlProvider.GetUrl(intId, culture: culture ?? defaultLang);
}
else
{
- entity.AdditionalData["Url"] = _publishedUrlProvider.GetUrl(intId.Result);
+ entity.AdditionalData["Url"] = _publishedUrlProvider.GetUrl(intId);
}
}
diff --git a/src/Umbraco.Infrastructure/Services/Implement/ContentTypeServiceBaseOfTRepositoryTItemTService.cs b/src/Umbraco.Infrastructure/Services/Implement/ContentTypeServiceBaseOfTRepositoryTItemTService.cs
index 8f0c8ce49b52..c1c22d0b89a2 100644
--- a/src/Umbraco.Infrastructure/Services/Implement/ContentTypeServiceBaseOfTRepositoryTItemTService.cs
+++ b/src/Umbraco.Infrastructure/Services/Implement/ContentTypeServiceBaseOfTRepositoryTItemTService.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.Globalization;
using System.Linq;
using Microsoft.Extensions.Logging;
using Umbraco.Cms.Core.Events;
@@ -946,11 +947,7 @@ public IEnumerable GetContainers(int[] containerIds)
public IEnumerable GetContainers(TItem item)
{
var ancestorIds = item.Path.Split(Constants.CharArrays.Comma, StringSplitOptions.RemoveEmptyEntries)
- .Select(x =>
- {
- var asInt = x.TryConvertTo();
- return asInt ? asInt.Result : int.MinValue;
- })
+ .Select(x => int.TryParse(x, NumberStyles.Integer, CultureInfo.InvariantCulture, out var asInt) ? asInt : int.MinValue)
.Where(x => x != int.MinValue && x != item.Id)
.ToArray();
diff --git a/src/Umbraco.Infrastructure/Services/Implement/EntityXmlSerializer.cs b/src/Umbraco.Infrastructure/Services/Implement/EntityXmlSerializer.cs
index 06b279cdac03..d2ebb72bca8e 100644
--- a/src/Umbraco.Infrastructure/Services/Implement/EntityXmlSerializer.cs
+++ b/src/Umbraco.Infrastructure/Services/Implement/EntityXmlSerializer.cs
@@ -568,11 +568,11 @@ private XElement SerializePropertyType(IPropertyType propertyType, IDataType def
private XElement SerializeContentBase(IContentBase contentBase, string urlValue, string nodeName, bool published)
{
var xml = new XElement(nodeName,
- new XAttribute("id", contentBase.Id),
+ new XAttribute("id", contentBase.Id.ToInvariantString()),
new XAttribute("key", contentBase.Key),
- new XAttribute("parentID", contentBase.Level > 1 ? contentBase.ParentId : -1),
+ new XAttribute("parentID", (contentBase.Level > 1 ? contentBase.ParentId : -1).ToInvariantString()),
new XAttribute("level", contentBase.Level),
- new XAttribute("creatorID", contentBase.CreatorId),
+ new XAttribute("creatorID", contentBase.CreatorId.ToInvariantString()),
new XAttribute("sortOrder", contentBase.SortOrder),
new XAttribute("createDate", contentBase.CreateDate.ToString("s")),
new XAttribute("updateDate", contentBase.UpdateDate.ToString("s")),
diff --git a/src/Umbraco.Tests.Integration/Umbraco.Tests.Integration.csproj b/src/Umbraco.Tests.Integration/Umbraco.Tests.Integration.csproj
index 89012e7d6c28..401ff2053940 100644
--- a/src/Umbraco.Tests.Integration/Umbraco.Tests.Integration.csproj
+++ b/src/Umbraco.Tests.Integration/Umbraco.Tests.Integration.csproj
@@ -9,6 +9,11 @@
true
+
+
+
+
+
IS_WINDOWS
diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Composing/CompositionTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Composing/CompositionTests.cs
deleted file mode 100644
index 4056f5fdd403..000000000000
--- a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Composing/CompositionTests.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright (c) Umbraco.
-// See LICENSE for more details.
-
-using NUnit.Framework;
-
-namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Composing
-{
- [TestFixture]
- public class CompositionTests
- {
- }
-}
diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/CoreThings/TryConvertToTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/CoreThings/TryConvertToTests.cs
index 2c399d0e93e3..4e7930f8b6bc 100644
--- a/src/Umbraco.Tests.UnitTests/Umbraco.Core/CoreThings/TryConvertToTests.cs
+++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/CoreThings/TryConvertToTests.cs
@@ -49,49 +49,43 @@ public void ConvertToBoolTest()
[Test]
- [TestCase("en-US")]
- [TestCase(null)]
- [TestCase("da-DK")]
- [TestCase("tr-TR")]
- public void ConvertToIntegerTest(string culture)
+ [TestCase("en-US", -1, ExpectedResult = -1)]
+ [TestCase("en-US", "-1", ExpectedResult = -1)]
+ [TestCase("en-US", "100", ExpectedResult = 100)]
+ [TestCase("en-US", "100.000", ExpectedResult = 100)]
+ [TestCase("en-US", "100,000", ExpectedResult = 100)]
+ [TestCase("en-US", "100.001", ExpectedResult = 100)]
+ [TestCase("en-US", 100, ExpectedResult = 100)]
+ [TestCase("en-US", 100.000, ExpectedResult = 100)]
+ [TestCase("en-US", 100.001, ExpectedResult = 100)]
+ [TestCase("sv-SE", -1, ExpectedResult = -1)]
+ [TestCase("sv-SE", "−1", ExpectedResult = -1)] // Note '−' vs '-'
+ [TestCase("sv-SE", "100", ExpectedResult = 100)]
+ [TestCase("sv-SE", "100.000", ExpectedResult = 100)]
+ [TestCase("sv-SE", "100,000", ExpectedResult = 100)]
+ [TestCase("sv-SE", "100.001", ExpectedResult = 100)]
+ [TestCase("sv-SE", 100, ExpectedResult = 100)]
+ [TestCase("sv-SE", 100.000, ExpectedResult = 100)]
+ [TestCase("sv-SE", 100.001, ExpectedResult = 100)]
+ [TestCase("da-DK", "-1", ExpectedResult = -1)]
+ [TestCase("da-DK", -1, ExpectedResult = -1)]
+ [TestCase("da-DK", "100", ExpectedResult = 100)]
+ [TestCase("da-DK", "100.000", ExpectedResult = 100)]
+ [TestCase("da-DK", "100,000", ExpectedResult = 100)]
+ [TestCase("da-DK", "100.001", ExpectedResult = 100)]
+ [TestCase("da-DK", 100, ExpectedResult = 100)]
+ [TestCase("da-DK", 100.000, ExpectedResult = 100)]
+ [TestCase("da-DK", 100.001, ExpectedResult = 100)]
+ public int ConvertToIntegerTest(string culture, object input)
{
if (culture is not null)
{
CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo(culture);
}
- var conv = "-1".TryConvertTo();
+ var conv = input.TryConvertTo();
Assert.IsTrue(conv);
- Assert.AreEqual(-1, conv.Result);
- conv = "100".TryConvertTo();
- Assert.IsTrue(conv);
- Assert.AreEqual(100, conv.Result);
-
- conv = "100.000".TryConvertTo();
- Assert.IsTrue(conv);
- Assert.AreEqual(100, conv.Result);
-
- conv = "100,000".TryConvertTo();
- Assert.IsTrue(conv);
- Assert.AreEqual(100, conv.Result);
-
- // oops
- conv = "100.001".TryConvertTo();
- Assert.IsTrue(conv);
- Assert.AreEqual(100, conv.Result);
-
- conv = 100m.TryConvertTo();
- Assert.IsTrue(conv);
- Assert.AreEqual(100, conv.Result);
-
- conv = 100.000m.TryConvertTo();
- Assert.IsTrue(conv);
- Assert.AreEqual(100, conv.Result);
-
- // oops
- conv = 100.001m.TryConvertTo();
- Assert.IsTrue(conv);
- Assert.AreEqual(100, conv.Result);
+ return conv.Result;
}
[Test]
diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/UserExtensionsTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/UserExtensionsTests.cs
index ae51d77a9394..bb6267aebda8 100644
--- a/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/UserExtensionsTests.cs
+++ b/src/Umbraco.Tests.UnitTests/Umbraco.Core/Models/UserExtensionsTests.cs
@@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
+using System.Globalization;
using System.Linq;
using Moq;
using NUnit.Framework;
@@ -101,10 +102,10 @@ public void CombineStartNodes(string groupSn, string userSn, string expected)
var comma = new[] { ',' };
- var groupSnA = groupSn.Split(comma, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray();
- var userSnA = userSn.Split(comma, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray();
+ var groupSnA = groupSn.Split(comma, StringSplitOptions.RemoveEmptyEntries).Select(x=>int.Parse(x, CultureInfo.InvariantCulture)).ToArray();
+ var userSnA = userSn.Split(comma, StringSplitOptions.RemoveEmptyEntries).Select(x=>int.Parse(x, CultureInfo.InvariantCulture)).ToArray();
var combinedA = UserExtensions.CombineStartNodes(UmbracoObjectTypes.Document, groupSnA, userSnA, esmock.Object).OrderBy(x => x).ToArray();
- var expectedA = expected.Split(comma, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).OrderBy(x => x).ToArray();
+ var expectedA = expected.Split(comma, StringSplitOptions.RemoveEmptyEntries).Select(x=>int.Parse(x, CultureInfo.InvariantCulture)).OrderBy(x => x).ToArray();
var ok = combinedA.Length == expectedA.Length;
if (ok)
diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.UnitTests.csproj b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.UnitTests.csproj
index 0d7777fb2629..5d5a3bbd1ec7 100644
--- a/src/Umbraco.Tests.UnitTests/Umbraco.Tests.UnitTests.csproj
+++ b/src/Umbraco.Tests.UnitTests/Umbraco.Tests.UnitTests.csproj
@@ -7,6 +7,11 @@
Umbraco.Cms.Tests.UnitTests
+
+
+
+
+
diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Authorization/ContentPermissionsPublishBranchHandlerTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Authorization/ContentPermissionsPublishBranchHandlerTests.cs
index c85ae8705a1d..c03581244100 100644
--- a/src/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Authorization/ContentPermissionsPublishBranchHandlerTests.cs
+++ b/src/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Authorization/ContentPermissionsPublishBranchHandlerTests.cs
@@ -2,6 +2,7 @@
// See LICENSE for more details.
using System.Collections.Generic;
+using System.Globalization;
using System.Security.Claims;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
@@ -90,10 +91,10 @@ private static Mock CreateMockUserService(int parentNodeId, Dictio
var mockUserService = new Mock();
mockUserService
- .Setup(x => x.GetPermissionsForPath(It.IsAny(), It.Is(y => y == $"{Constants.System.Root},{parentNodeId},{DescendentNodeId1}")))
+ .Setup(x => x.GetPermissionsForPath(It.IsAny(), It.Is(y => y == $"{Constants.System.RootString},{parentNodeId.ToString(CultureInfo.InvariantCulture)},{DescendentNodeId1}")))
.Returns(new EntityPermissionSet(parentNodeId, new EntityPermissionCollection(new List { new EntityPermission(1, parentNodeId, descendendNodePermissionsForPath[DescendentNodeId1]) })));
mockUserService
- .Setup(x => x.GetPermissionsForPath(It.IsAny(), It.Is(y => y == $"{Constants.System.Root},{parentNodeId},{DescendentNodeId1},{DescendentNodeId2}")))
+ .Setup(x => x.GetPermissionsForPath(It.IsAny(), It.Is(y => y == $"{Constants.System.RootString},{parentNodeId.ToString(CultureInfo.InvariantCulture)},{DescendentNodeId1},{DescendentNodeId2}")))
.Returns(new EntityPermissionSet(parentNodeId, new EntityPermissionCollection(new List { new EntityPermission(1, parentNodeId, descendendNodePermissionsForPath[DescendentNodeId2]) })));
return mockUserService;
diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Authorization/ContentPermissionsQueryStringHandlerTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Authorization/ContentPermissionsQueryStringHandlerTests.cs
index aa227842ecd6..15cf62534186 100644
--- a/src/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Authorization/ContentPermissionsQueryStringHandlerTests.cs
+++ b/src/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Authorization/ContentPermissionsQueryStringHandlerTests.cs
@@ -18,6 +18,7 @@
using Umbraco.Cms.Core.Services;
using Umbraco.Cms.Tests.Common.Builders;
using Umbraco.Cms.Web.BackOffice.Authorization;
+using Umbraco.Extensions;
using Constants = Umbraco.Cms.Core.Constants;
namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Web.BackOffice.Authorization
@@ -222,7 +223,7 @@ private static ContentPermissions CreateContentPermissions(IEntityService entity
var mockUserService = new Mock();
mockUserService
- .Setup(x => x.GetPermissionsForPath(It.IsAny(), It.Is(y => y == $"{Constants.System.Root},{nodeId}")))
+ .Setup(x => x.GetPermissionsForPath(It.IsAny(), It.Is(y => y == $"{Constants.System.RootString},{nodeId.ToInvariantString()}")))
.Returns(new EntityPermissionSet(nodeId, new EntityPermissionCollection(new List { new EntityPermission(1, nodeId, permissionsForPath) })));
var mockContentService = new Mock();
diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Authorization/ContentPermissionsResourceHandlerTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Authorization/ContentPermissionsResourceHandlerTests.cs
index a3428e8fe3e2..effc5d6f125d 100644
--- a/src/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Authorization/ContentPermissionsResourceHandlerTests.cs
+++ b/src/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Authorization/ContentPermissionsResourceHandlerTests.cs
@@ -14,6 +14,7 @@
using Umbraco.Cms.Core.Services;
using Umbraco.Cms.Tests.Common.Builders;
using Umbraco.Cms.Web.BackOffice.Authorization;
+using Umbraco.Extensions;
using Constants = Umbraco.Cms.Core.Constants;
namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Web.BackOffice.Authorization
@@ -110,7 +111,7 @@ private static ContentPermissions CreateContentPermissions(int nodeId, string[]
var mockUserService = new Mock();
mockUserService
- .Setup(x => x.GetPermissionsForPath(It.IsAny(), It.Is(y => y == $"{Constants.System.Root},{nodeId}")))
+ .Setup(x => x.GetPermissionsForPath(It.IsAny(), It.Is(y => y == $"{Constants.System.RootString},{nodeId.ToInvariantString()}")))
.Returns(new EntityPermissionSet(nodeId, new EntityPermissionCollection(new List { new EntityPermission(1, nodeId, permissionsForPath) })));
var mockContentService = new Mock();
diff --git a/src/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Authorization/UserGroupHandlerTests.cs b/src/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Authorization/UserGroupHandlerTests.cs
index cf08011bc59c..7ff68aca523b 100644
--- a/src/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Authorization/UserGroupHandlerTests.cs
+++ b/src/Umbraco.Tests.UnitTests/Umbraco.Web.BackOffice/Authorization/UserGroupHandlerTests.cs
@@ -65,14 +65,14 @@ public async Task User_Matching_Single_Requested_Group_Id_Is_Authorised()
}
[Test]
- public async Task User_Matching_One_Of_Requested_Group_Ids_Is_Authorised()
+ public async Task User_Matching_Only_One_Of_Requested_Group_Ids_Is_NOT_Authorised()
{
AuthorizationHandlerContext authHandlerContext = CreateAuthorizationHandlerContext();
UserGroupHandler sut = CreateHandler(queryStringValue: $"{Group1Id},{Group2Id}");
await sut.HandleAsync(authHandlerContext);
- Assert.IsTrue(authHandlerContext.HasSucceeded);
+ Assert.IsTrue(authHandlerContext.HasFailed);
}
[Test]
diff --git a/src/Umbraco.Web.BackOffice/Authorization/AdminUsersHandler.cs b/src/Umbraco.Web.BackOffice/Authorization/AdminUsersHandler.cs
index 1f760de4fd73..36d01675d5e4 100644
--- a/src/Umbraco.Web.BackOffice/Authorization/AdminUsersHandler.cs
+++ b/src/Umbraco.Web.BackOffice/Authorization/AdminUsersHandler.cs
@@ -1,6 +1,7 @@
// Copyright (c) Umbraco.
// See LICENSE for more details.
+using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
@@ -8,6 +9,7 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Primitives;
+using Umbraco.Cms.Core;
using Umbraco.Cms.Core.Editors;
using Umbraco.Cms.Core.Models.Membership;
using Umbraco.Cms.Core.Security;
@@ -62,7 +64,7 @@ protected override Task IsAuthorized(AuthorizationHandlerContext context,
}
else
{
- var ids = _httpContextAccessor.HttpContext.Request.Query.Where(x => x.Key == requirement.QueryStringName).ToList();
+ var ids = queryString.ToString().Split(Constants.CharArrays.Comma, StringSplitOptions.RemoveEmptyEntries).ToList();
if (ids.Count == 0)
{
// Must succeed this requirement since we cannot process it.
@@ -70,8 +72,10 @@ protected override Task IsAuthorized(AuthorizationHandlerContext context,
}
userIds = ids
- .Select(x => x.Value.ToString())
- .Select(x => x.TryConvertTo()).Where(x => x.Success).Select(x => x.Result).ToArray();
+ .Select(x => int.TryParse(x, NumberStyles.Integer, CultureInfo.InvariantCulture, out var output) ? Attempt.Succeed(output) : Attempt.Fail())
+ .Where(x => x.Success)
+ .Select(x => x.Result)
+ .ToArray();
}
if (userIds.Length == 0)
diff --git a/src/Umbraco.Web.BackOffice/Authorization/UserGroupHandler.cs b/src/Umbraco.Web.BackOffice/Authorization/UserGroupHandler.cs
index 6fe807e6fe93..118aede07a16 100644
--- a/src/Umbraco.Web.BackOffice/Authorization/UserGroupHandler.cs
+++ b/src/Umbraco.Web.BackOffice/Authorization/UserGroupHandler.cs
@@ -2,6 +2,7 @@
// See LICENSE for more details.
using System.Collections.Generic;
+using System.Globalization;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
@@ -62,23 +63,22 @@ protected override Task IsAuthorized(AuthorizationHandlerContext context,
{
IUser currentUser = _backOfficeSecurityAccessor.BackOfficeSecurity.CurrentUser;
- IQueryCollection queryString = _httpContextAccessor.HttpContext?.Request.Query;
- if (queryString == null)
+ var querystring = _httpContextAccessor.HttpContext?.Request.Query[requirement.QueryStringName];
+ if (querystring is null)
{
// Must succeed this requirement since we cannot process it.
return Task.FromResult(true);
}
- KeyValuePair[] ids = queryString.Where(x => x.Key == requirement.QueryStringName).ToArray();
- if (ids.Length == 0)
+ if (querystring.Value.Count == 0)
{
// Must succeed this requirement since we cannot process it.
return Task.FromResult(true);
}
- var intIds = ids
- .Select(x => x.Value.ToString())
- .Select(x => x.TryConvertTo()).Where(x => x.Success).Select(x => x.Result).ToArray();
+ var intIds = querystring.Value.ToString().Split(Constants.CharArrays.Comma)
+ .Select(x => int.TryParse(x, NumberStyles.Integer, CultureInfo.InvariantCulture, out var output) ? Attempt.Succeed(output) : Attempt.Fail())
+ .Where(x => x.Success).Select(x => x.Result).ToArray();
var authHelper = new UserGroupEditorAuthorizationHelper(
_userService,
diff --git a/src/Umbraco.Web.BackOffice/Controllers/MemberController.cs b/src/Umbraco.Web.BackOffice/Controllers/MemberController.cs
index d8ee3126a449..ec7ebe30a164 100644
--- a/src/Umbraco.Web.BackOffice/Controllers/MemberController.cs
+++ b/src/Umbraco.Web.BackOffice/Controllers/MemberController.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
+using System.Globalization;
using System.Linq;
using System.Net.Http;
using System.Net.Mime;
@@ -524,15 +525,14 @@ private async Task> UpdateMemberAsync(MemberSave contentItem)
return ValidationProblem(validatePassword.Errors.ToErrorMessage());
}
- Attempt intId = identityMember.Id.TryConvertTo();
- if (intId.Success == false)
+ if (!int.TryParse(identityMember.Id, NumberStyles.Integer, CultureInfo.InvariantCulture, out var intId))
{
return ValidationProblem("Member ID was not valid");
}
var changingPasswordModel = new ChangingPasswordModel
{
- Id = intId.Result,
+ Id = intId,
OldPassword = contentItem.Password.OldPassword,
NewPassword = contentItem.Password.NewPassword,
};
diff --git a/src/Umbraco.Web.BackOffice/Controllers/UsersController.cs b/src/Umbraco.Web.BackOffice/Controllers/UsersController.cs
index 821719c79605..7e62e514f776 100644
--- a/src/Umbraco.Web.BackOffice/Controllers/UsersController.cs
+++ b/src/Umbraco.Web.BackOffice/Controllers/UsersController.cs
@@ -554,7 +554,7 @@ private async Task SendUserInviteEmailAsync(UserBasic userDisplay, string from,
// This needs to be in the correct mailto format including the name, else
// the name cannot be captured in the email sending notification.
- // i.e. "Some Person"
+ // i.e. "Some Person"
var toMailBoxAddress = new MailboxAddress(to.Name, to.Email);
var mailMessage = new EmailMessage(fromEmail, toMailBoxAddress.ToString(), emailSubject, emailBody, true);
@@ -577,12 +577,7 @@ public ActionResult PostSaveUser(UserSave userSave)
return ValidationProblem(ModelState);
}
- var intId = userSave.Id.TryConvertTo();
- if (intId.Success == false)
- return NotFound();
-
-
- var found = _userService.GetUserById(intId.Result);
+ var found = _userService.GetUserById(userSave.Id);
if (found == null)
return NotFound();
@@ -673,13 +668,7 @@ public async Task>> PostChangePasswo
return ValidationProblem(ModelState);
}
- Attempt intId = changingPasswordModel.Id.TryConvertTo();
- if (intId.Success == false)
- {
- return NotFound();
- }
-
- IUser found = _userService.GetUserById(intId.Result);
+ IUser found = _userService.GetUserById(changingPasswordModel.Id);
if (found == null)
{
return NotFound();
diff --git a/src/Umbraco.Web.BackOffice/Filters/CheckIfUserTicketDataIsStaleAttribute.cs b/src/Umbraco.Web.BackOffice/Filters/CheckIfUserTicketDataIsStaleAttribute.cs
index 178d9d50f076..568ebab1c62f 100644
--- a/src/Umbraco.Web.BackOffice/Filters/CheckIfUserTicketDataIsStaleAttribute.cs
+++ b/src/Umbraco.Web.BackOffice/Filters/CheckIfUserTicketDataIsStaleAttribute.cs
@@ -118,13 +118,7 @@ private async Task CheckStaleData(ActionExecutingContext actionContext)
return;
}
- Attempt userId = identity.GetId().TryConvertTo();
- if (userId == false)
- {
- return;
- }
-
- IUser user = _userService.GetUserById(userId.Result);
+ IUser user = _userService.GetUserById(identity.GetId());
if (user == null)
{
return;
diff --git a/src/Umbraco.Web.BackOffice/Trees/ContentBlueprintTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/ContentBlueprintTreeController.cs
index abf3854f5bfc..efbc71f6cbc5 100644
--- a/src/Umbraco.Web.BackOffice/Trees/ContentBlueprintTreeController.cs
+++ b/src/Umbraco.Web.BackOffice/Trees/ContentBlueprintTreeController.cs
@@ -103,9 +103,13 @@ protected override ActionResult GetTreeNodes(string id, Form
return nodes;
}
- var intId = id.TryConvertTo();
+ if (!int.TryParse(id, NumberStyles.Integer, CultureInfo.InvariantCulture, out var intId))
+ {
+ return nodes;
+ }
+
//Get the content type
- var ct = _contentTypeService.Get(intId.Result);
+ var ct = _contentTypeService.Get(intId);
if (ct == null) return nodes;
var blueprintsForDocType = entities.Where(x => ct.Alias == ((IContentEntitySlim) x).ContentTypeAlias);
diff --git a/src/Umbraco.Web.BackOffice/Trees/ContentTreeControllerBase.cs b/src/Umbraco.Web.BackOffice/Trees/ContentTreeControllerBase.cs
index 2f27f8adace2..1bddb12cdeb3 100644
--- a/src/Umbraco.Web.BackOffice/Trees/ContentTreeControllerBase.cs
+++ b/src/Umbraco.Web.BackOffice/Trees/ContentTreeControllerBase.cs
@@ -469,7 +469,7 @@ protected sealed override ActionResult GetMenuForNode(string
// only add empty recycle bin if the current user is allowed to delete by default
if (deleteAllowed)
{
- menu.Items.Add(new MenuItem("emptyRecycleBin", LocalizedTextService)
+ menu.Items.Add(new MenuItem("emptyrecyclebin", LocalizedTextService)
{
Icon = "trash",
OpensDialog = true
diff --git a/src/Umbraco.Web.BackOffice/Trees/ContentTypeTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/ContentTypeTreeController.cs
index 2be23f69e24a..c4112cc77e39 100644
--- a/src/Umbraco.Web.BackOffice/Trees/ContentTypeTreeController.cs
+++ b/src/Umbraco.Web.BackOffice/Trees/ContentTypeTreeController.cs
@@ -117,7 +117,7 @@ protected override ActionResult GetMenuForNode(string id, Fo
// root actions
menu.Items.Add(LocalizedTextService, opensDialog: true);
- menu.Items.Add(new MenuItem("importDocumentType", LocalizedTextService)
+ menu.Items.Add(new MenuItem("importdocumenttype", LocalizedTextService)
{
Icon = "page-up",
SeparatorBefore = true,
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/cs.xml b/src/Umbraco.Web.UI/umbraco/config/lang/cs.xml
index 20b72a7e6858..2f1f83a214d6 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/cs.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/cs.xml
@@ -16,10 +16,10 @@
Vytvořit skupinu
Odstranit
Deaktivovat
- Vyprázdnit koš
+ Vyprázdnit koš
Aktivovat
Exportovat typ dokumentu
- Importovat typ dokumentu
+ Importovat typ dokumentu
Importovat balíček
Editovat na stránce
Odhlásit
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/cy.xml b/src/Umbraco.Web.UI/umbraco/config/lang/cy.xml
index a2692dc334c9..c78a9a1c55ca 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/cy.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/cy.xml
@@ -18,10 +18,10 @@
Dileu
Analluogi
Golygu gosodiadau
- Gwagu bin ailgylchu
+ Gwagu bin ailgylchu
Galluogi
Allforio Math o Ddogfen
- Mewnforio Math o Ddogfen
+ Mewnforio Math o Ddogfen
Mewnforio Pecyn
Golygu mewn Cynfas
Gadael
@@ -102,7 +102,7 @@
Parth '%0%' wedi diweddaru
Golygu Parthau Presennol
-
Etifeddu
@@ -908,7 +908,7 @@
Mae "Runway" yn wefan syml sy'n darparu mathau o ddogfennau a thempledi syml. Gall y gosodwr osod Runway i chi yn awtomatig,
- ond gallwch olygu, estyn neu ei ddileu yn hawdd. Nid yw'n angenrheidiol a gallwch ddefnyddio Umbraco yn berffaith heb. Ond,
+ ond gallwch olygu, estyn neu ei ddileu yn hawdd. Nid yw'n angenrheidiol a gallwch ddefnyddio Umbraco yn berffaith heb. Ond,
mae Runwayyn cynnig sylfaen hawdd wedi'i seilio ar arferion gorau er mwyn i chi gychwyn yn gyflymach nag erioed.
Os rydych chi'n dewis gosod Runway, gallwch ddewis blociau adeiliadu syml o'r enw Modylau Runway er mwyn mwyhau eich tudalennau Runway.
@@ -1095,15 +1095,15 @@ Er mwyn gweinyddu eich gwefan, agorwch swyddfa gefn Umbraco a dechreuwch ychwang
@@ -2327,9 +2327,9 @@ Er mwyn gweinyddu eich gwefan, agorwch swyddfa gefn Umbraco a dechreuwch ychwang
Cuddstôr Cof
@@ -2340,7 +2340,7 @@ Er mwyn gweinyddu eich gwefan, agorwch swyddfa gefn Umbraco a dechreuwch ychwang
Gall ailadeiladu fod yn ddrud.
- Defnyddio fo pan mae ail-lwytho ddim yn ddigon, a ti'n feddwl mai'r stôr cronfa ddata heb gael ei
+ Defnyddio fo pan mae ail-lwytho ddim yn ddigon, a ti'n feddwl mai'r stôr cronfa ddata heb gael ei
chynhyrchu'n iawn—a fyddai'n arwydd o broblem gritigol efo Umbraco.
]]>
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/da.xml b/src/Umbraco.Web.UI/umbraco/config/lang/da.xml
index faec3f5e9f05..05c2caad27da 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/da.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/da.xml
@@ -18,10 +18,10 @@
Slet
Deaktivér
Edit settings
- Tøm papirkurv
+ Tøm papirkurv
Aktivér
Eksportér dokumenttype
- Importér dokumenttype
+ Importér dokumenttype
Importér pakke
Redigér i Canvas
Log af
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/de.xml b/src/Umbraco.Web.UI/umbraco/config/lang/de.xml
index 9332e63f5719..84ec9efc7d07 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/de.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/de.xml
@@ -16,10 +16,10 @@
Neue Gruppe
Entfernen
Deaktivieren
- Papierkorb leeren
+ Papierkorb leeren
Aktivieren
Dokumenttyp exportieren
- Dokumenttyp importieren
+ Dokumenttyp importieren
Paket importieren
'Canvas'-Modus starten
Abmelden
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/en.xml b/src/Umbraco.Web.UI/umbraco/config/lang/en.xml
index 143c754a7212..f5386892b94f 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/en.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/en.xml
@@ -17,10 +17,10 @@
Delete
Disable
Edit settings
- Empty recycle bin
+ Empty recycle bin
Enable
Export Document Type
- Import Document Type
+ Import Document Type
Import Package
Edit in Canvas
Exit
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml b/src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml
index 77ab76aab1a2..2c811cd27453 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml
@@ -18,10 +18,10 @@
Delete
Disable
Edit settings
- Empty recycle bin
+ Empty recycle bin
Enable
Export Document Type
- Import Document Type
+ Import Document Type
Import Package
Edit in Canvas
Exit
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/es.xml b/src/Umbraco.Web.UI/umbraco/config/lang/es.xml
index 96079b59053a..5a5dfaa2bbb3 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/es.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/es.xml
@@ -15,10 +15,10 @@
Crear grupo
Borrar
Deshabilitar
- Vaciar Papelera
+ Vaciar Papelera
Activar
Exportar Documento (tipo)
- Importar Documento (tipo)
+ Importar Documento (tipo)
Importar Paquete
Editar en vivo
Cerrar sesión
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/fr.xml b/src/Umbraco.Web.UI/umbraco/config/lang/fr.xml
index d58d45b1b6c5..9ab5d3f1b339 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/fr.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/fr.xml
@@ -16,10 +16,10 @@
Créer un groupe
Supprimer
Désactiver
- Vider la corbeille
+ Vider la corbeille
Activer
Exporter le type de document
- Importer un type de document
+ Importer un type de document
Importer un package
Editer dans Canvas
Déconnexion
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/he.xml b/src/Umbraco.Web.UI/umbraco/config/lang/he.xml
index 5a431dacf301..ee03ca6fc9ea 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/he.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/he.xml
@@ -13,9 +13,9 @@
צור חבילה
מחק
נטרל
- רוקן סל מיחזור
+ רוקן סל מיחזור
ייצא סוג קובץ
- ייבא סוג מסמך
+ ייבא סוג מסמך
ייבא חבילה
ערוך במצב "קנבס"
יציאה
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/it.xml b/src/Umbraco.Web.UI/umbraco/config/lang/it.xml
index f9a224355415..eadd6957385b 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/it.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/it.xml
@@ -13,9 +13,9 @@
Crea pacchetto
Cancella
Disabilita
- Svuota il cestino
+ Svuota il cestino
Esporta il tipo di documento
- Importa il tipo di documento
+ Importa il tipo di documento
Importa il pacchetto
Modifica in Area di Lavoro
Uscita
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/ja.xml b/src/Umbraco.Web.UI/umbraco/config/lang/ja.xml
index 6695c9ad0e26..9775668df9ef 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/ja.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/ja.xml
@@ -14,9 +14,9 @@
パッケージの作成
削除
無効
- ごみ箱を空にする
+ ごみ箱を空にする
ドキュメントタイプの書出
- ドキュメントタイプの読込
+ ドキュメントタイプの読込
パッケージの読み込み
ライブ編集
ログアウト
@@ -1087,4 +1087,4 @@ Runwayをインストールして作られた新しいウェブサイトがど
すべて選択
すべての選択を解除
-
\ No newline at end of file
+
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/ko.xml b/src/Umbraco.Web.UI/umbraco/config/lang/ko.xml
index 821e81631495..1bf5d052ddd4 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/ko.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/ko.xml
@@ -13,9 +13,9 @@
패키지 새로 만들기
삭제
비활성
- 휴지통 비우기
+ 휴지통 비우기
추출 문서 유형
- 등록 문서 유형
+ 등록 문서 유형
패키지 등록
캔버스 내용 편집
종료
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/nb.xml b/src/Umbraco.Web.UI/umbraco/config/lang/nb.xml
index a20d0ce4e372..9f518fa319ef 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/nb.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/nb.xml
@@ -14,9 +14,9 @@
Opprett pakke
Slett
Deaktiver
- Tøm papirkurv
+ Tøm papirkurv
Eksporter dokumenttype
- Importer dokumenttype
+ Importer dokumenttype
Importer pakke
Rediger i Canvas
Logg av
@@ -920,4 +920,4 @@ Vennlig hilsen Umbraco roboten
Velg alle
Opphev alle
-
\ No newline at end of file
+
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/nl.xml b/src/Umbraco.Web.UI/umbraco/config/lang/nl.xml
index c557c44a3cab..36a6f2f4573b 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/nl.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/nl.xml
@@ -18,10 +18,10 @@
Verwijderen
Uitschakelen
Instellingen wijzigen
- Prullenbak leegmaken
+ Prullenbak leegmaken
Inschakelen
Documenttype exporteren
- Documenttype importeren
+ Documenttype importeren
Package importeren
Aanpassen in Canvas
Afsluiten
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/pl.xml b/src/Umbraco.Web.UI/umbraco/config/lang/pl.xml
index 4cdbe3e0f8b2..14fddc054f6a 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/pl.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/pl.xml
@@ -15,10 +15,10 @@
Stwórz grupę
Usuń
Deaktywuj
- Opróżnij kosz
+ Opróżnij kosz
Aktywuj
Eksportuj typ dokumentu
- Importuj typ dokumentu
+ Importuj typ dokumentu
Importuj zbiór
Edytuj na stronie
Wyjście
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/pt.xml b/src/Umbraco.Web.UI/umbraco/config/lang/pt.xml
index f70707422530..ad6db137ba18 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/pt.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/pt.xml
@@ -13,9 +13,9 @@
Criar Pacote
Remover
Desabilitar
- Esvaziar Lixeira
+ Esvaziar Lixeira
Exportar Tipo de Documento
- Importar Tipo de Documento
+ Importar Tipo de Documento
Importar Pacote
Editar na Tela
Sair
@@ -835,4 +835,4 @@ Você pode publicar esta página e todas suas sub-páginas ao selecionar pub
Selecionar tudo
Desmarcar todos
-
\ No newline at end of file
+
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/ru.xml b/src/Umbraco.Web.UI/umbraco/config/lang/ru.xml
index f51ab92a9c4c..953c7b0bf38e 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/ru.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/ru.xml
@@ -17,11 +17,11 @@
Значение по умолчанию
Удалить
Отключить
- Очистить корзину
+ Очистить корзину
Включить
Экспорт
Экспортировать
- Импортировать
+ Импортировать
Импортировать пакет
Править на месте
Выйти
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/sv.xml b/src/Umbraco.Web.UI/umbraco/config/lang/sv.xml
index 2aceb81ec59a..6fb16bc8e0a4 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/sv.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/sv.xml
@@ -20,9 +20,9 @@
Standardvärde
Ta bort
Avaktivera
- Töm papperskorgen
+ Töm papperskorgen
Exportera dokumenttyp
- Importera dokumenttyp
+ Importera dokumenttyp
Importera paket
Redigera i Canvas
Logga ut
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/tr.xml b/src/Umbraco.Web.UI/umbraco/config/lang/tr.xml
index f371ad2cf00b..d5bd6c2af197 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/tr.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/tr.xml
@@ -17,10 +17,10 @@
Sil
Devre Dışı Bırak
Ayarları düzenle
- Geri dönüşüm kutusunu boşalt
+ Geri dönüşüm kutusunu boşalt
Etkinleştir
Belge Türünü Dışa Aktar
- Belge Türünü İçe Aktar
+ Belge Türünü İçe Aktar
Paketi İçe Aktar
Kanvas'ta Düzenle
Çıkış
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/zh.xml b/src/Umbraco.Web.UI/umbraco/config/lang/zh.xml
index a2f044b102d4..cf2db35e9cd3 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/zh.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/zh.xml
@@ -14,9 +14,9 @@
创建扩展包
删除
禁用
- 清空回收站
+ 清空回收站
导出文档类型
- 导入文档类型
+ 导入文档类型
导入扩展包
实时编辑模式
退出
diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/zh_tw.xml b/src/Umbraco.Web.UI/umbraco/config/lang/zh_tw.xml
index f65a8c0cb7da..0fee4e6a1838 100644
--- a/src/Umbraco.Web.UI/umbraco/config/lang/zh_tw.xml
+++ b/src/Umbraco.Web.UI/umbraco/config/lang/zh_tw.xml
@@ -14,9 +14,9 @@
創建擴展包
刪除
禁用
- 清空回收站
+ 清空回收站
匯出文檔類型
- 導入文檔類型
+ 導入文檔類型
導入擴展包
即時編輯模式
退出