diff --git a/src/Umbraco.Core/Extensions/StringExtensions.cs b/src/Umbraco.Core/Extensions/StringExtensions.cs index 0494224614..7a9dc53ed0 100644 --- a/src/Umbraco.Core/Extensions/StringExtensions.cs +++ b/src/Umbraco.Core/Extensions/StringExtensions.cs @@ -42,9 +42,9 @@ namespace Umbraco.Extensions 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 f66e3a6b23..2380657180 100644 --- a/src/Umbraco.Core/Models/Mapping/UserMapDefinition.cs +++ b/src/Umbraco.Core/Models/Mapping/UserMapDefinition.cs @@ -425,6 +425,10 @@ namespace Umbraco.Cms.Core.Models.Mapping 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 dd96faf298..aab9a5d8a7 100644 --- a/src/Umbraco.Core/Models/UserExtensions.cs +++ b/src/Umbraco.Core/Models/UserExtensions.cs @@ -219,14 +219,14 @@ namespace Umbraco.Cms.Core.Models 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 1f89fea12d..4a33b6cc47 100644 --- a/src/Umbraco.Core/PropertyEditors/ValueConverters/ContentPickerValueConverter.cs +++ b/src/Umbraco.Core/PropertyEditors/ValueConverters/ContentPickerValueConverter.cs @@ -32,12 +32,20 @@ namespace Umbraco.Cms.Core.PropertyEditors.ValueConverters { if (source == null) return null; - //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 not string) { - var attemptConvertInt = source.TryConvertTo(); - if (attemptConvertInt.Success) - return attemptConvertInt.Result; + var attemptConvertInt = source.TryConvertTo(); + if (attemptConvertInt.Success) + return attemptConvertInt.Result; + } + //Don't attempt to convert to int for UDI + if( source is string strSource + && !string.IsNullOrWhiteSpace(strSource) + && !strSource.StartsWith("umb") + && int.TryParse(strSource, NumberStyles.Integer, CultureInfo.InvariantCulture, out var intValue)) + { + return intValue; } var attemptConvertUdi = source.TryConvertTo(); diff --git a/src/Umbraco.Core/Security/ContentPermissions.cs b/src/Umbraco.Core/Security/ContentPermissions.cs index 3d3ae55a62..206422b6e1 100644 --- a/src/Umbraco.Core/Security/ContentPermissions.cs +++ b/src/Umbraco.Core/Security/ContentPermissions.cs @@ -236,11 +236,11 @@ namespace Umbraco.Cms.Core.Security // 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 c06711a91e..a1f6c09d5c 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 @@ namespace Umbraco.Extensions 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 5e2b66c720..a77bee7c44 100644 --- a/src/Umbraco.Examine.Lucene/BackOfficeExamineSearcher.cs +++ b/src/Umbraco.Examine.Lucene/BackOfficeExamineSearcher.cs @@ -382,91 +382,5 @@ namespace Umbraco.Cms.Infrastructure.Examine 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 39d260a24d..ddd97adb1a 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 @@ namespace Umbraco.Cms.Infrastructure.Examine { // 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 @@ namespace Umbraco.Cms.Infrastructure.Examine 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 b401e51f85..218ee4298b 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 @@ namespace Umbraco.Cms.Infrastructure.Search } ); - var intId = entity.Id.TryConvertTo(); - 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 8f0c8ce49b..c1c22d0b89 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 @@ namespace Umbraco.Cms.Core.Services.Implement 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 06b279cdac..d2ebb72bca 100644 --- a/src/Umbraco.Infrastructure/Services/Implement/EntityXmlSerializer.cs +++ b/src/Umbraco.Infrastructure/Services/Implement/EntityXmlSerializer.cs @@ -568,11 +568,11 @@ namespace Umbraco.Cms.Core.Services.Implement 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 89012e7d6c..401ff20539 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 4056f5fdd4..0000000000 --- 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 2c399d0e93..4e7930f8b6 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 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.CoreThings [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 ae51d77a93..bb6267aebd 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 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Models 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 0d7777fb26..5d5a3bbd1e 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 c85ae8705a..c035812441 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 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Web.BackOffice.Authorization 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 aa227842ec..15cf625341 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.Security; 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 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Web.BackOffice.Authorization 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 a3428e8fe3..effc5d6f12 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.Security; 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 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Web.BackOffice.Authorization 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 cf08011bc5..7ff68aca52 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 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Web.BackOffice.Authorization } [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 1f760de4fd..36d01675d5 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 System.Threading.Tasks; 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 @@ namespace Umbraco.Cms.Web.BackOffice.Authorization } 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 @@ namespace Umbraco.Cms.Web.BackOffice.Authorization } 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 6fe807e6fe..118aede07a 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 @@ namespace Umbraco.Cms.Web.BackOffice.Authorization { 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 d8ee3126a4..ec7ebe30a1 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 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers 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 821719c796..7e62e514f7 100644 --- a/src/Umbraco.Web.BackOffice/Controllers/UsersController.cs +++ b/src/Umbraco.Web.BackOffice/Controllers/UsersController.cs @@ -554,7 +554,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers // 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 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers 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 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers 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 178d9d50f0..568ebab1c6 100644 --- a/src/Umbraco.Web.BackOffice/Filters/CheckIfUserTicketDataIsStaleAttribute.cs +++ b/src/Umbraco.Web.BackOffice/Filters/CheckIfUserTicketDataIsStaleAttribute.cs @@ -118,13 +118,7 @@ namespace Umbraco.Cms.Web.BackOffice.Filters 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 abf3854f5b..efbc71f6cb 100644 --- a/src/Umbraco.Web.BackOffice/Trees/ContentBlueprintTreeController.cs +++ b/src/Umbraco.Web.BackOffice/Trees/ContentBlueprintTreeController.cs @@ -103,9 +103,13 @@ namespace Umbraco.Cms.Web.BackOffice.Trees 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 2f27f8adac..1bddb12cde 100644 --- a/src/Umbraco.Web.BackOffice/Trees/ContentTreeControllerBase.cs +++ b/src/Umbraco.Web.BackOffice/Trees/ContentTreeControllerBase.cs @@ -469,7 +469,7 @@ namespace Umbraco.Cms.Web.BackOffice.Trees // 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 2be23f69e2..c4112cc77e 100644 --- a/src/Umbraco.Web.BackOffice/Trees/ContentTypeTreeController.cs +++ b/src/Umbraco.Web.BackOffice/Trees/ContentTypeTreeController.cs @@ -117,7 +117,7 @@ namespace Umbraco.Cms.Web.BackOffice.Trees // 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 20b72a7e68..2f1f83a214 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 a2692dc334..c78a9a1c55 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 faec3f5e9f..05c2caad27 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 9332e63f57..84ec9efc7d 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 143c754a72..f5386892b9 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 77ab76aab1..2c811cd274 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 96079b5905..5a5dfaa2bb 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 d58d45b1b6..9ab5d3f1b3 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 5a431dacf3..ee03ca6fc9 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 f9a2243554..eadd695738 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 6695c9ad0e..9775668df9 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 821e816314..1bf5d052dd 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 a20d0ce4e3..9f518fa319 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 c557c44a3c..36a6f2f457 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 4cdbe3e0f8..14fddc054f 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 f707074225..ad6db137ba 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 f51ab92a9c..953c7b0bf3 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 2aceb81ec5..6fb16bc8e0 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 f371ad2cf0..d5bd6c2af1 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 a2f044b102..cf2db35e9c 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 f65a8c0cb7..0fee4e6a18 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 @@ 創建擴展包 刪除 禁用 - 清空回收站 + 清空回收站 匯出文檔類型 - 導入文檔類型 + 導入文檔類型 導入擴展包 即時編輯模式 退出