diff --git a/src/Umbraco.Core/Models/Member.cs b/src/Umbraco.Core/Models/Member.cs index 02d6b9aece..1ed11af93e 100644 --- a/src/Umbraco.Core/Models/Member.cs +++ b/src/Umbraco.Core/Models/Member.cs @@ -109,6 +109,30 @@ namespace Umbraco.Core.Models IsApproved = true; } + /// + /// Constructor for creating a Member object + /// + /// + /// + /// + /// + /// The password value passed in to this parameter should be the encoded/encrypted/hashed format of the member's password + /// + /// + /// + public Member(string name, string email, string username, string rawPasswordValue, IMemberType contentType, bool isApproved) + : base(name, -1, contentType, new PropertyCollection()) + { + Mandate.ParameterNotNull(contentType, "contentType"); + + _contentTypeAlias = contentType.Alias; + _contentType = contentType; + _email = email; + _username = username; + _rawPasswordValue = rawPasswordValue; + IsApproved = isApproved; + } + private static readonly Lazy Ps = new Lazy(); private class PropertySelectors diff --git a/src/Umbraco.Core/Properties/AssemblyInfo.cs b/src/Umbraco.Core/Properties/AssemblyInfo.cs index 7d94f51fbe..35ff0beb22 100644 --- a/src/Umbraco.Core/Properties/AssemblyInfo.cs +++ b/src/Umbraco.Core/Properties/AssemblyInfo.cs @@ -39,7 +39,6 @@ using System.Security.Permissions; [assembly: InternalsVisibleTo("UmbracoExamine")] [assembly: InternalsVisibleTo("Concorde.Sync")] -[assembly: InternalsVisibleTo("Umbraco.VisualStudio")] [assembly: InternalsVisibleTo("Umbraco.Courier.Core")] [assembly: InternalsVisibleTo("Umbraco.Courier.Persistence")] @@ -52,4 +51,8 @@ using System.Security.Permissions; [assembly: InternalsVisibleTo("Umbraco.Forms.Web")] //allow this to be mocked in our unit tests -[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] \ No newline at end of file +[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] + +//allow custom unit-testing code to access internals through custom adapters +[assembly: InternalsVisibleTo("Umbraco.VisualStudio")] // backwards compat. +[assembly: InternalsVisibleTo("Umbraco.UnitTesting.Adapter")] // new, more imperative name diff --git a/src/Umbraco.Core/PropertyEditors/ValueConverters/DecimalValueConverter.cs b/src/Umbraco.Core/PropertyEditors/ValueConverters/DecimalValueConverter.cs index 89af76ea12..10b3b7188e 100644 --- a/src/Umbraco.Core/PropertyEditors/ValueConverters/DecimalValueConverter.cs +++ b/src/Umbraco.Core/PropertyEditors/ValueConverters/DecimalValueConverter.cs @@ -22,7 +22,7 @@ namespace Umbraco.Core.PropertyEditors.ValueConverters if (sourceString != null) { decimal d; - return (decimal.TryParse(sourceString, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out d)) ? d : 0M; + return (decimal.TryParse(sourceString, NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign, CultureInfo.InvariantCulture, out d)) ? d : 0M; } // in the database an a decimal is an a decimal diff --git a/src/Umbraco.Core/Services/IMembershipMemberService.cs b/src/Umbraco.Core/Services/IMembershipMemberService.cs index 801f88d9ac..7736a4f609 100644 --- a/src/Umbraco.Core/Services/IMembershipMemberService.cs +++ b/src/Umbraco.Core/Services/IMembershipMemberService.cs @@ -72,6 +72,18 @@ namespace Umbraco.Core.Services /// T CreateWithIdentity(string username, string email, string passwordValue, string memberTypeAlias); + /// + /// Creates and persists a new + /// + /// An can be of type or + /// Username of the to create + /// Email of the to create + /// This value should be the encoded/encrypted/hashed value for the password that will be stored in the database + /// Alias of the Type + /// IsApproved of the to create + /// + T CreateWithIdentity(string username, string email, string passwordValue, string memberTypeAlias, bool isApproved); + /// /// Gets an by its provider key /// diff --git a/src/Umbraco.Core/Services/MemberService.cs b/src/Umbraco.Core/Services/MemberService.cs index ca1f27129c..26e74f66cc 100644 --- a/src/Umbraco.Core/Services/MemberService.cs +++ b/src/Umbraco.Core/Services/MemberService.cs @@ -826,6 +826,22 @@ namespace Umbraco.Core.Services return CreateMemberWithIdentity(username, email, username, passwordValue, memberType); } + /// + /// Creates and persists a new + /// + /// An can be of type or + /// Username of the to create + /// Email of the to create + /// This value should be the encoded/encrypted/hashed value for the password that will be stored in the database + /// Alias of the Type + /// Is the member approved + /// + IMember IMembershipMemberService.CreateWithIdentity(string username, string email, string passwordValue, string memberTypeAlias, bool isApproved) + { + var memberType = FindMemberTypeByAlias(memberTypeAlias); + return CreateMemberWithIdentity(username, email, username, passwordValue, memberType, isApproved); + } + /// /// Creates and persists a Member /// @@ -836,12 +852,13 @@ namespace Umbraco.Core.Services /// Name of the Member to create /// This value should be the encoded/encrypted/hashed value for the password that will be stored in the database /// MemberType the Member should be based on + /// Optional IsApproved of the Member to create /// - private IMember CreateMemberWithIdentity(string username, string email, string name, string passwordValue, IMemberType memberType) + private IMember CreateMemberWithIdentity(string username, string email, string name, string passwordValue, IMemberType memberType, bool isApproved = true) { if (memberType == null) throw new ArgumentNullException("memberType"); - var member = new Member(name, email.ToLower().Trim(), username, passwordValue, memberType); + var member = new Member(name, email.ToLower().Trim(), username, passwordValue, memberType, isApproved); using (var uow = UowProvider.GetUnitOfWork()) { diff --git a/src/Umbraco.Core/Services/UserService.cs b/src/Umbraco.Core/Services/UserService.cs index dd9892e47c..68aa66e231 100644 --- a/src/Umbraco.Core/Services/UserService.cs +++ b/src/Umbraco.Core/Services/UserService.cs @@ -19,7 +19,6 @@ namespace Umbraco.Core.Services /// public class UserService : ScopeRepositoryService, IUserService { - //TODO: We need to change the isUpgrading flag to use an app state enum as described here: http://issues.umbraco.org/issue/U4-6816 // in the meantime, we will use a boolean which we are currently using during upgrades to ensure that a user object is not persisted during this phase, otherwise // exceptions can occur if the db is not in it's correct state. @@ -113,6 +112,26 @@ namespace Umbraco.Core.Services return CreateUserWithIdentity(username, email, passwordValue, userType); } + /// + /// Creates and persists a new + /// + /// Username of the to create + /// Email of the to create + /// This value should be the encoded/encrypted/hashed value for the password that will be stored in the database + /// Alias of the Type + /// Is the member approved + /// + IUser IMembershipMemberService.CreateWithIdentity(string username, string email, string passwordValue, string memberTypeAlias, bool isApproved) + { + var userType = GetUserTypeByAlias(memberTypeAlias); + if (userType == null) + { + throw new EntityNotFoundException("The user type " + memberTypeAlias + " could not be resolved"); + } + + return CreateUserWithIdentity(username, email, passwordValue, userType, isApproved); + } + /// /// Creates and persists a Member /// @@ -122,8 +141,9 @@ namespace Umbraco.Core.Services /// Email of the Member to create /// This value should be the encoded/encrypted/hashed value for the password that will be stored in the database /// MemberType the Member should be based on + /// Is the user approved /// - private IUser CreateUserWithIdentity(string username, string email, string passwordValue, IUserType userType) + private IUser CreateUserWithIdentity(string username, string email, string passwordValue, IUserType userType, bool isApproved = true) { if (userType == null) throw new ArgumentNullException("userType"); @@ -152,7 +172,7 @@ namespace Umbraco.Core.Services StartContentId = -1, StartMediaId = -1, IsLockedOut = false, - IsApproved = true + IsApproved = isApproved }; //adding default sections content and media user.AddAllowedSection("content"); diff --git a/src/Umbraco.Tests/Membership/UmbracoServiceMembershipProviderTests.cs b/src/Umbraco.Tests/Membership/UmbracoServiceMembershipProviderTests.cs index 72900351b2..0f37a4aa26 100644 --- a/src/Umbraco.Tests/Membership/UmbracoServiceMembershipProviderTests.cs +++ b/src/Umbraco.Tests/Membership/UmbracoServiceMembershipProviderTests.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Specialized; -using System.Configuration.Provider; +using System.Collections.Specialized; using System.Web.Security; using Moq; using NUnit.Framework; @@ -83,10 +81,10 @@ namespace Umbraco.Tests.Membership mServiceMock.Setup(service => service.GetByEmail("test@test.com")).Returns(() => null); mServiceMock.Setup(service => service.GetDefaultMemberType()).Returns("Member"); mServiceMock.Setup( - service => service.CreateWithIdentity(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) - .Callback((string u, string e, string p, string m) => + service => service.CreateWithIdentity(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) + .Callback((string u, string e, string p, string m, bool isApproved) => { - createdMember = new Member("test", e, u, p, memberType); + createdMember = new Member("test", e, u, p, memberType, isApproved); }) .Returns(() => createdMember); var provider = new MembersMembershipProvider(mServiceMock.Object); @@ -114,10 +112,10 @@ namespace Umbraco.Tests.Membership mServiceMock.Setup(service => service.GetByEmail("test@test.com")).Returns(() => null); mServiceMock.Setup(service => service.GetDefaultMemberType()).Returns("Member"); mServiceMock.Setup( - service => service.CreateWithIdentity(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) - .Callback((string u, string e, string p, string m) => + service => service.CreateWithIdentity(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) + .Callback((string u, string e, string p, string m, bool isApproved) => { - createdMember = new Member("test", e, u, p, memberType); + createdMember = new Member("test", e, u, p, memberType, isApproved); }) .Returns(() => createdMember); @@ -147,10 +145,10 @@ namespace Umbraco.Tests.Membership mServiceMock.Setup(service => service.GetByEmail("test@test.com")).Returns(() => null); mServiceMock.Setup(service => service.GetDefaultMemberType()).Returns("Member"); mServiceMock.Setup( - service => service.CreateWithIdentity(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) - .Callback((string u, string e, string p, string m) => + service => service.CreateWithIdentity(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) + .Callback((string u, string e, string p, string m, bool isApproved) => { - createdMember = new Member("test", e, u, p, memberType); + createdMember = new Member("test", e, u, p, memberType, isApproved); }) .Returns(() => createdMember); diff --git a/src/Umbraco.Tests/PropertyEditors/PropertyEditorValueConverterTests.cs b/src/Umbraco.Tests/PropertyEditors/PropertyEditorValueConverterTests.cs index 8134924c61..73abf62eba 100644 --- a/src/Umbraco.Tests/PropertyEditors/PropertyEditorValueConverterTests.cs +++ b/src/Umbraco.Tests/PropertyEditors/PropertyEditorValueConverterTests.cs @@ -96,5 +96,25 @@ namespace Umbraco.Tests.PropertyEditors Assert.AreEqual(expected, result); } + + [TestCase(null, "1", false, 1)] + [TestCase(null, "1", true, 1)] + [TestCase(null, "0", false, 0)] + [TestCase(null, "0", true, 0)] + [TestCase(null, null, false, 0)] + [TestCase(null, null, true, 0)] + [TestCase(null, "-1", false, -1)] + [TestCase(null, "-1", true, -1)] + [TestCase(null, "1.65", false, 1.65)] + [TestCase(null, "1.65", true, 1.65)] + [TestCase(null, "-1.65", false, -1.65)] + [TestCase(null, "-1.65", true, -1.65)] + public void CanConvertDecimalAliasPropertyEditor(Core.Models.PublishedContent.PublishedPropertyType propertyType, object value, bool preview, double expected) + { + var converter = new DecimalValueConverter(); + var result = converter.ConvertDataToSource(propertyType, value, preview); + + Assert.AreEqual(expected, result); + } } } diff --git a/src/Umbraco.Tests/Services/ContentServiceTests.cs b/src/Umbraco.Tests/Services/ContentServiceTests.cs index d521219918..352e54eb12 100644 --- a/src/Umbraco.Tests/Services/ContentServiceTests.cs +++ b/src/Umbraco.Tests/Services/ContentServiceTests.cs @@ -1504,6 +1504,7 @@ namespace Umbraco.Tests.Services })); Assert.IsTrue(ServiceContext.PublicAccessService.AddRule(content1, "test2", "test2").Success); + // how is that one even working since "test" is more than 1 char? Assert.IsNotNull(ServiceContext.NotificationService.CreateNotification(ServiceContext.UserService.GetUserById(0), content1, "test")); ServiceContext.ContentService.AssignContentPermission(content1, 'A', new[] {0}); @@ -1512,7 +1513,7 @@ namespace Umbraco.Tests.Services { RootContentId = content1.Id }).Success); - + // Act ServiceContext.ContentService.EmptyRecycleBin(); var contents = ServiceContext.ContentService.GetContentInRecycleBin(); @@ -1915,7 +1916,7 @@ namespace Umbraco.Tests.Services var c1 = MockedContent.CreateSimpleContent(contentType); ServiceContext.ContentService.Save(c1); } - + long total; var entities = service.GetPagedChildren(-1, 0, 6, out total).ToArray(); Assert.That(entities.Length, Is.EqualTo(6)); @@ -1935,7 +1936,7 @@ namespace Umbraco.Tests.Services var contentType = MockedContentTypes.CreateSimpleContentType(); ServiceContext.ContentTypeService.Save(contentType); - // only add 9 as we also add a content with children + // only add 9 as we also add a content with children for (int i = 0; i < 9; i++) { var c1 = MockedContent.CreateSimpleContent(contentType); diff --git a/src/Umbraco.Tests/Services/ContentTypeServiceTests.cs b/src/Umbraco.Tests/Services/ContentTypeServiceTests.cs index 9c3bbab42c..16829198ba 100644 --- a/src/Umbraco.Tests/Services/ContentTypeServiceTests.cs +++ b/src/Umbraco.Tests/Services/ContentTypeServiceTests.cs @@ -222,7 +222,7 @@ namespace Umbraco.Tests.Services var root = MockedContent.CreateSimpleContent(contentType1, "Root", -1); ServiceContext.ContentService.Save(root); ServiceContext.ContentService.Publish(root); - + var level1 = MockedContent.CreateSimpleContent(contentType2, "L1", root.Id); ServiceContext.ContentService.Save(level1); ServiceContext.ContentService.Publish(level1); @@ -520,7 +520,7 @@ namespace Umbraco.Tests.Services var deletedContent = cs.GetById(content.Id); var deletedChildContentType = cts.GetContentType(childContentType.Id); var deletedContentType = cts.GetContentType(contentType.Id); - + Assert.IsNull(deletedChildContentType); Assert.IsNull(deletedContent); Assert.IsNull(deletedContentType); @@ -980,7 +980,7 @@ namespace Umbraco.Tests.Services { // Arrange var contentType = MockedContentTypes.CreateSimpleContentType("contentType", string.Empty); - + // Act & Assert Assert.Throws(() => ServiceContext.ContentTypeService.Save(contentType)); } @@ -1542,7 +1542,8 @@ namespace Umbraco.Tests.Services SortOrder = 1, DataTypeDefinitionId = -88 }; - var authorAdded = basePage.AddPropertyType(authorPropertyType, "Content"); + Assert.IsTrue(basePage.AddPropertyType(authorPropertyType, "Content")); + var titlePropertyType = new PropertyType(Constants.PropertyEditors.TextboxAlias, DataTypeDatabaseType.Ntext, "title") { Name = "Title", @@ -1551,20 +1552,20 @@ namespace Umbraco.Tests.Services SortOrder = 1, DataTypeDefinitionId = -88 }; - var titleAdded = basePage.AddPropertyType(authorPropertyType, "Meta"); + Assert.IsTrue(basePage.AddPropertyType(titlePropertyType, "Meta")); service.Save(basePage); - basePage = service.GetContentType(basePage.Id); - var totalPt = basePage.PropertyTypes.Count(); + var count = basePage.PropertyTypes.Count(); + Assert.AreEqual(2, count); basePage.RemovePropertyGroup("Content"); - service.Save(basePage); + service.Save(basePage); basePage = service.GetContentType(basePage.Id); - Assert.AreEqual(totalPt, basePage.PropertyTypes.Count()); + Assert.AreEqual(count, basePage.PropertyTypes.Count()); } [Test] diff --git a/src/Umbraco.Web.UI.Client/src/common/filters/preserveNewLineInHtml.filter.js b/src/Umbraco.Web.UI.Client/src/common/filters/preserveNewLineInHtml.filter.js new file mode 100644 index 0000000000..4a22830431 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/common/filters/preserveNewLineInHtml.filter.js @@ -0,0 +1,12 @@ +/** +* @ngdoc filter +* @name umbraco.filters.preserveNewLineInHtml +* @description +* Used when rendering a string as HTML (i.e. with ng-bind-html) to convert line-breaks to
tags +**/ +angular.module("umbraco.filters").filter('preserveNewLineInHtml', function () { + return function (text) { + return text.replace(/\n/g, '
'); + } +}); + \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/views/common/overlays/mediaPicker/mediapicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/overlays/mediaPicker/mediapicker.controller.js index 1992bed068..fb38581eac 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/overlays/mediaPicker/mediapicker.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/common/overlays/mediaPicker/mediapicker.controller.js @@ -1,7 +1,7 @@ //used for the media picker dialog angular.module("umbraco") .controller("Umbraco.Overlays.MediaPickerController", - function ($scope, mediaResource, umbRequestHelper, entityResource, $log, mediaHelper, mediaTypeHelper, eventsService, treeService, $element, $timeout, $cookies, localStorageService, localizationService) { + function($scope, mediaResource, umbRequestHelper, entityResource, $log, mediaHelper, mediaTypeHelper, eventsService, treeService, $element, $timeout, $cookies, localStorageService, localizationService) { if (!$scope.model.title) { $scope.model.title = localizationService.localize("defaultdialogs_selectMedia"); @@ -96,7 +96,6 @@ angular.module("umbraco") }; $scope.gotoFolder = function(folder) { - if (!$scope.multiPicker) { deselectAllImages($scope.model.selectedImages); } @@ -108,7 +107,6 @@ angular.module("umbraco") if (folder.id > 0) { entityResource.getAncestors(folder.id, "media") .then(function(anc) { - // anc.splice(0,1); $scope.path = _.filter(anc, function(f) { return f.path.indexOf($scope.startNodeId) !== -1; @@ -123,12 +121,12 @@ angular.module("umbraco") $scope.path = []; } - getChildren(folder.id); $scope.currentFolder = folder; localStorageService.set("umbLastOpenedMediaNodeId", folder.id); + return getChildren(folder.id); }; - $scope.clickHandler = function (image, event, index) { + $scope.clickHandler = function(image, event, index) { if (image.isFolder) { if ($scope.disableFolderSelect) { $scope.gotoFolder(image); @@ -143,7 +141,7 @@ angular.module("umbraco") $scope.target = image; // handle both entity and full media object - if(image.image) { + if (image.image) { $scope.target.url = image.image; } else { $scope.target.url = mediaHelper.resolveFile(image); @@ -188,8 +186,12 @@ angular.module("umbraco") images.length = 0; } - $scope.onUploadComplete = function() { - $scope.gotoFolder($scope.currentFolder); + $scope.onUploadComplete = function(files) { + $scope.gotoFolder($scope.currentFolder).then(function() { + if (files.length === 1 && $scope.model.selectedImages.length === 0) { + selectImage($scope.images[$scope.images.length - 1]); + } + }); }; $scope.onFilesQueue = function() { @@ -203,8 +205,7 @@ angular.module("umbraco") if (nodePath.indexOf($scope.startNodeId.toString()) !== -1) { $scope.gotoFolder({ id: $scope.lastOpenedNode, name: "Media", icon: "icon-folder" }); return true; - } - else { + } else { $scope.gotoFolder({ id: $scope.startNodeId, name: "Media", icon: "icon-folder" }); return false; } @@ -219,26 +220,25 @@ angular.module("umbraco") if ($scope.lastOpenedNode && $scope.lastOpenedNode !== -1) { entityResource.getById($scope.lastOpenedNode, "media") .then(ensureWithinStartNode, gotoStartNode); - } - else { + } else { gotoStartNode(); } - } - else { + } else { //if a target is specified, go look it up - generally this target will just contain ids not the actual full //media object so we need to look it up var id = $scope.target.udi ? $scope.target.udi : $scope.target.id var altText = $scope.target.altText; mediaResource.getById(id) - .then(function (node) { - $scope.target = node; - if (ensureWithinStartNode(node)) { - selectImage(node); - $scope.target.url = mediaHelper.resolveFile(node); - $scope.target.altText = altText; - $scope.openDetailsDialog(); - } - }, gotoStartNode); + .then(function(node) { + $scope.target = node; + if (ensureWithinStartNode(node)) { + selectImage(node); + $scope.target.url = mediaHelper.resolveFile(node); + $scope.target.altText = altText; + $scope.openDetailsDialog(); + } + }, + gotoStartNode); } $scope.openDetailsDialog = function() { @@ -260,6 +260,24 @@ angular.module("umbraco") }; }; + var debounceSearchMedia = _.debounce(function() { + $scope.$apply(function() { + if ($scope.searchOptions.filter) { + searchMedia(); + } else { + // reset pagination + $scope.searchOptions = { + pageNumber: 1, + pageSize: 100, + totalItems: 0, + totalPages: 0, + filter: '' + }; + getChildren($scope.currentFolder.id); + } + }); + }, 500); + $scope.changeSearch = function() { $scope.loading = true; debounceSearchMedia(); @@ -271,50 +289,33 @@ angular.module("umbraco") searchMedia(); }; - var debounceSearchMedia = _.debounce(function () { - $scope.$apply(function () { - if ($scope.searchOptions.filter) { - searchMedia(); - } else { - // reset pagination - $scope.searchOptions = { - pageNumber: 1, - pageSize: 100, - totalItems: 0, - totalPages: 0, - filter: '' - }; - getChildren($scope.currentFolder.id); - } - }); - }, 500); - function searchMedia() { $scope.loading = true; entityResource.getPagedDescendants($scope.startNodeId, "Media", $scope.searchOptions) - .then(function (data) { + .then(function(data) { // update image data to work with image grid - angular.forEach(data.items, function(mediaItem){ - // set thumbnail and src - mediaItem.thumbnail = mediaHelper.resolveFileFromEntity(mediaItem, true); - mediaItem.image = mediaHelper.resolveFileFromEntity(mediaItem, false); - // set properties to match a media object - if (mediaItem.metaData && - mediaItem.metaData.umbracoWidth && - mediaItem.metaData.umbracoHeight) { - - mediaItem.properties = [ - { - alias: "umbracoWidth", - value: mediaItem.metaData.umbracoWidth.Value - }, - { - alias: "umbracoHeight", - value: mediaItem.metaData.umbracoHeight.Value - } - ]; - } - }); + angular.forEach(data.items, + function(mediaItem) { + // set thumbnail and src + mediaItem.thumbnail = mediaHelper.resolveFileFromEntity(mediaItem, true); + mediaItem.image = mediaHelper.resolveFileFromEntity(mediaItem, false); + // set properties to match a media object + if (mediaItem.metaData && + mediaItem.metaData.umbracoWidth && + mediaItem.metaData.umbracoHeight) { + + mediaItem.properties = [ + { + alias: "umbracoWidth", + value: mediaItem.metaData.umbracoWidth.Value + }, + { + alias: "umbracoHeight", + value: mediaItem.metaData.umbracoHeight.Value + } + ]; + } + }); // update images $scope.images = data.items ? data.items : []; // update pagination @@ -332,7 +333,7 @@ angular.module("umbraco") function getChildren(id) { $scope.loading = true; - mediaResource.getChildren(id) + return mediaResource.getChildren(id) .then(function(data) { $scope.searchOptions.filter = ""; $scope.images = data.items ? data.items : []; @@ -358,11 +359,10 @@ angular.module("umbraco") } } } - if (imageIsSelected) { folderImage.selected = true; } } } - }); + }); \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/views/components/property/umb-property.html b/src/Umbraco.Web.UI.Client/src/views/components/property/umb-property.html index b24e0985af..24bc1de6ed 100644 --- a/src/Umbraco.Web.UI.Client/src/views/components/property/umb-property.html +++ b/src/Umbraco.Web.UI.Client/src/views/components/property/umb-property.html @@ -11,7 +11,7 @@ * - +
diff --git a/src/Umbraco.Web.UI.Client/src/views/prevalueeditors/textstring.html b/src/Umbraco.Web.UI.Client/src/views/prevalueeditors/textstring.html index 8fcfc8b5c6..a394bdefe4 100644 --- a/src/Umbraco.Web.UI.Client/src/views/prevalueeditors/textstring.html +++ b/src/Umbraco.Web.UI.Client/src/views/prevalueeditors/textstring.html @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/grid.prevalues.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/grid.prevalues.html index ca422000c3..06bdfe2e99 100644 --- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/grid.prevalues.html +++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/grid/grid.prevalues.html @@ -9,30 +9,29 @@ ui-sortable ng-model="model.value.templates"> -
  • +
  • + class="preview-rows layout" style="margin-top: 5px; margin-bottom: 20px; float:left">
    + ng-class="{last:$last}" + ng-repeat="section in template.sections | filter:zeroWidthFilter" + ng-style="{width: percentage(section.grid) + '%', height: '60px', 'max-width': '100%'}">
    - {{template.name}}
    + {{template.name}}
    -
  • @@ -55,7 +54,7 @@ ui-sortable ng-model="model.value.layouts"> -
  • +
  • @@ -64,7 +63,7 @@
    + ng-style="{width: percentage(area.grid) + '%', 'max-width': '100%'}">
    @@ -79,12 +78,11 @@
    -
  • @@ -98,7 +96,7 @@ - + + ng-model="model.value.config">
  • @@ -133,8 +131,11 @@ - -
      + +
        diff --git a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj index 19d9574c94..e91f9afe9f 100644 --- a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj +++ b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj @@ -568,6 +568,7 @@ + diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/Breadcrumb.cshtml b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/Breadcrumb.cshtml old mode 100644 new mode 100755 index ff63081996..5dd44df7f9 --- a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/Breadcrumb.cshtml +++ b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/Breadcrumb.cshtml @@ -1,13 +1,13 @@ @inherits Umbraco.Web.Macros.PartialViewMacroPage @* - This snippet makes a breadcrumb of parents using an unordered html list. + This snippet makes a breadcrumb of parents using an unordered HTML list. How it works: - It uses the Ancestors() method to get all parents and then generates links so the visitor can go back - Finally it outputs the name of the current page (without a link) *@ -@{ var selection = CurrentPage.Ancestors(); } +@{ var selection = Model.Content.Ancestors(); } @if (selection.Any()) { @@ -19,6 +19,6 @@ } @* Display the current page as the last item in the list *@ -
      • @CurrentPage.Name
      • +
      • @Model.Content.Name
      } \ No newline at end of file diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/Gallery.cshtml b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/Gallery.cshtml old mode 100644 new mode 100755 index f7c5954c5a..7ed0e01680 --- a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/Gallery.cshtml +++ b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/Gallery.cshtml @@ -1,50 +1,50 @@ @inherits Umbraco.Web.Macros.PartialViewMacroPage @* - Macro to display a gallery of images from media the media section. + Macro to display a gallery of images from the Media section. Works with either a 'Single Media Picker' or a 'Multiple Media Picker' macro parameter (see below). How it works: - Confirm the macro parameter has been passed in with a value - - Loop through all the media Id's passed in (might be a single item, might be many) + - Loop through all the media Ids passed in (might be a single item, might be many) - Display any individual images, as well as any folders of images Macro Parameters To Create, for this macro to work: Alias:mediaIds Name:Select folders and/or images Type: Multiple Media Picker - Type: (note: you can use a Single Media Picker if that's more appropriate to your needs) + Type: (note: You can use a Single Media Picker if that's more appropriate to your needs) *@ -@{ var mediaIds = Model.MacroParameters["mediaIds"]; } +@{ var mediaIds = Model.MacroParameters["mediaIds"] as string; } + @if (mediaIds != null) { -
        - @foreach (var mediaId in mediaIds.ToString().Split(',')) +
        + @foreach (var mediaId in mediaIds.Split(',')) { - var media = Umbraco.Media(mediaId); + var media = Umbraco.TypedMedia(mediaId); @* a single image *@ if (media.DocumentTypeAlias == "Image") { - @Render(media); + @Render(media as Image); } @* a folder with images under it *@ - if (media.Children("Image").Any()) + if (media.Children().Any()) { - foreach (var image in media.Children("Image")) + foreach (var image in media.Children()) { @Render(image); } } - } -
      + } -@helper Render(dynamic item) +@helper Render(Image item) { -
    • - - @item.Name +
    • + } \ No newline at end of file diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListAncestorsFromCurrentPage.cshtml b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListAncestorsFromCurrentPage.cshtml old mode 100644 new mode 100755 index b7ca9d06e4..8d4d897b89 --- a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListAncestorsFromCurrentPage.cshtml +++ b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListAncestorsFromCurrentPage.cshtml @@ -1,24 +1,24 @@ @inherits Umbraco.Web.Macros.PartialViewMacroPage @* - This snippet makes a list of links to the of parents of the current page using an unordered html list. + This snippet makes a list of links to the of parents of the current page using an unordered HTML list. How it works: - It uses the Ancestors() method to get all parents and then generates links so the visitor can go back - Finally it outputs the name of the current page (without a link) *@ -@{ var selection = CurrentPage.Ancestors(); } +@{ var selection = Model.Content.Ancestors(); } @if (selection.Any()) {
        @* For each page in the ancestors collection which have been ordered by Level (so we start with the highest top node first) *@ - @foreach (var item in selection.OrderBy("Level")) + @foreach (var item in selection.OrderBy(x => x.Level)) {
      • @item.Name »
      • } @* Display the current page as the last item in the list *@ -
      • @CurrentPage.Name
      • +
      • @Model.Content.Name
      } diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesFromChangeableSource.cshtml b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesFromChangeableSource.cshtml old mode 100644 new mode 100755 index 2fa2aab07c..3af1291be4 --- a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesFromChangeableSource.cshtml +++ b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesFromChangeableSource.cshtml @@ -13,20 +13,19 @@ *@ @{ var startNodeId = Model.MacroParameters["startNodeId"]; } + @if (startNodeId != null) { @* Get the starting page *@ - var startNode = Umbraco.Content(startNodeId); - var selection = startNode.Children.Where("Visible"); + var startNode = Umbraco.TypedContent(startNodeId); + var selection = startNode.Children.Where(x => x.IsVisible()); if (selection.Any()) { } diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesFromCurrentPage.cshtml b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesFromCurrentPage.cshtml old mode 100644 new mode 100755 index 9bd13f68a2..09144cff47 --- a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesFromCurrentPage.cshtml +++ b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesFromCurrentPage.cshtml @@ -1,6 +1,14 @@ @inherits Umbraco.Web.Macros.PartialViewMacroPage -@{ var selection = CurrentPage.Children.Where("Visible"); } +@* + This snippet makes a list of links to the of children of the current page using an unordered HTML list. + + How it works: + - It uses the Children method to get all child pages + - It then generates links so the visitor can go to each page +*@ + +@{ var selection = Model.Content.Children.Where(x => x.IsVisible()); } @if (selection.Any()) { diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesOrderedByDate.cshtml b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesOrderedByDate.cshtml old mode 100644 new mode 100755 index c8cbdf7d32..5cd74a62f9 --- a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesOrderedByDate.cshtml +++ b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesOrderedByDate.cshtml @@ -1,11 +1,22 @@ @inherits Umbraco.Web.Macros.PartialViewMacroPage -@{ var selection = CurrentPage.Children.Where("Visible").OrderBy("CreateDate desc"); } -@* OrderBy() takes the property to sort by and optionally order desc/asc *@ +@* + This snippet makes a list of links to the of children of the current page using an unordered HTML list. -
        - @foreach (var item in selection) - { -
      • @item.Name
      • - } -
      + How it works: + - It uses the Children method to get all child pages + - It then uses the OrderByDescending() method, which takes the property to sort. In this case the page's creation date. + - It then generates links so the visitor can go to each page +*@ + +@{ var selection = Model.Content.Children.Where(x => x.IsVisible()).OrderByDescending(x => x.CreateDate); } + +@if (selection.Any()) +{ +
        + @foreach (var item in selection) + { +
      • @item.Name
      • + } +
      +} diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesOrderedByName.cshtml b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesOrderedByName.cshtml old mode 100644 new mode 100755 index da73ff8164..643855006f --- a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesOrderedByName.cshtml +++ b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesOrderedByName.cshtml @@ -1,11 +1,22 @@ @inherits Umbraco.Web.Mvc.UmbracoTemplatePage -@{ var selection = CurrentPage.Children.Where("Visible").OrderBy("Name"); } -@* OrderBy() takes the property to sort by *@ +@* + This snippet makes a list of links to the of children of the current page using an unordered HTML list. -
        - @foreach (var item in selection) - { -
      • @item.Name
      • - } -
      + How it works: + - It uses the Children method to get all child pages + - It then uses the OrderBy() method, which takes the property to sort. In this case, the page's name. + - It then generates links so the visitor can go to each page +*@ + +@{ var selection = Model.Content.Children.Where(x => x.IsVisible()).OrderBy(x => x.Name); } + +@if (selection.Any()) +{ +
        + @foreach (var item in selection) + { +
      • @item.Name
      • + } +
      +} diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesOrderedByProperty.cshtml b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesOrderedByProperty.cshtml old mode 100644 new mode 100755 index 436faf1ef5..e2eeb08204 --- a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesOrderedByProperty.cshtml +++ b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesOrderedByProperty.cshtml @@ -15,12 +15,15 @@ @{ var propertyAlias = Model.MacroParameters["propertyAlias"]; } @if (propertyAlias != null) { - var selection = CurrentPage.Children.Where("Visible").OrderBy(propertyAlias); + var selection = Model.Content.Children.Where(x => x.IsVisible()).OrderBy(x => x.GetPropertyValue(propertyAlias.ToString())); -
        - @foreach (var item in selection) - { -
      • @item.Name
      • - } -
      + @if (selection.Any()) + { +
        + @foreach (var item in selection) + { +
      • @item.Name
      • + } +
      + } } diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesWithDoctype.cshtml b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesWithDoctype.cshtml old mode 100644 new mode 100755 index 4ca6f93c71..9ac71a4fd2 --- a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesWithDoctype.cshtml +++ b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListChildPagesWithDoctype.cshtml @@ -1,17 +1,13 @@ @inherits Umbraco.Web.Macros.PartialViewMacroPage @* - This snippet shows how simple it is to fetch only children of a certain Document Type using Razor. - Be sure to change "DocumentTypeAlias" below to match your needs, such as "TextPage" or "NewsItems". + This snippet shows how simple it is to fetch only children of a certain Document Type. + + Be sure to change "IPublishedContent" below to match your needs, such as "TextPage" or "NewsItem". (You can find the alias of your Document Type by editing it in the Settings section) *@ -@{ var selection = CurrentPage.Children("DocumentTypeAlias").Where("Visible"); } -@* - As an example of more querying, if you have a true/false property with the alias of shouldBeFeatured: - var selection= CurrentPage.Children("DocumentTypeAlias").Where("shouldBeFeatured == true").Where("Visible"); -*@ - +@{ var selection = Model.Content.Children().Where(x => x.IsVisible()); } @if (selection.Any()) { diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListDescendantsFromCurrentPage.cshtml b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListDescendantsFromCurrentPage.cshtml old mode 100644 new mode 100755 index 1e2274bcc0..e649328cfb --- a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListDescendantsFromCurrentPage.cshtml +++ b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListDescendantsFromCurrentPage.cshtml @@ -2,27 +2,27 @@ @* This snippet creates links for every single page (no matter how deep) below - the page currently being viewed by the website visitor, displayed as nested unordered html lists. + the page currently being viewed by the website visitor, displayed as nested unordered HTML lists. *@ -@{ var selection = CurrentPage.Children.Where("Visible"); } +@{ var selection = Model.Content.Children.Where(x => x.IsVisible()); } @* Ensure that the Current Page has children *@ @if (selection.Any()) { @* Get the first page in the children, where the property umbracoNaviHide is not True *@ - var naviLevel = CurrentPage.FirstChild().Where("Visible").Level; + var naviLevel = Model.Content.FirstChild(x => x.IsVisible()).Level; @* Add in level for a CSS hook *@
        - @* For each child page where the property umbracoNaviHide is not True *@ + @* Loop through the selection *@ @foreach (var item in selection) {
      • @item.Name @* if this child page has any children, where the property umbracoNaviHide is not True *@ - @if (item.Children.Where("Visible").Any()) + @if (item.Children.Where(x => x.IsVisible()).Any()) { @* Call our helper to display the children *@ @childPages(item.Children) @@ -33,7 +33,7 @@ } -@helper childPages(dynamic selection) +@helper childPages(IEnumerable selection) { @* Ensure that we have a collection of pages *@ if (selection.Any()) @@ -43,13 +43,13 @@ @* Add in level for a CSS hook *@
          - @foreach (var item in selection.Where("Visible")) + @foreach (var item in selection.Where(x => x.IsVisible())) {
        • @item.Name @* if the this page has any children, where the property umbracoNaviHide is not True *@ - @if (item.Children.Where("Visible").Any()) + @if (item.Children.Where(x => x.IsVisible()).Any()) { @* Call our helper to display the children *@ @childPages(item.Children) diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListImagesFromMediaFolder.cshtml b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListImagesFromMediaFolder.cshtml old mode 100644 new mode 100755 index 1549c1eed2..6e5d68b829 --- a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListImagesFromMediaFolder.cshtml +++ b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/ListImagesFromMediaFolder.cshtml @@ -5,7 +5,7 @@ How it works: - Confirm the macro parameter has been passed in with a value - - Loop through all the media Id's passed in (might be a single item, might be many) + - Loop through all the media Ids passed in (might be a single item, might be many) - Display any individual images, as well as any folders of images Macro Parameters To Create, for this macro to work: @@ -15,9 +15,9 @@ @{ var mediaId = Model.MacroParameters["mediaId"]; } @if (mediaId != null) { - @* Get all the media item associated with the id passed in *@ - var media = Umbraco.Media(mediaId); - var selection = media.Children("Image"); + @* Get the media item associated with the id passed in *@ + var media = Umbraco.TypedMedia(mediaId); + var selection = media.Children(); if (selection.Any()) { @@ -25,7 +25,7 @@ @foreach (var item in selection) {
        • - @item.Name + @item.Name
        • }
        diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/MultinodeTree-picker.cshtml b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/MultinodeTree-picker.cshtml old mode 100644 new mode 100755 index ae8e427449..379b5b0ea0 --- a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/MultinodeTree-picker.cshtml +++ b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/MultinodeTree-picker.cshtml @@ -1,21 +1,23 @@ @inherits Umbraco.Web.Macros.PartialViewMacroPage @* - This snippet lists the items from a Multinode tree picker, using the pickers default settings. - Content Values stored as xml. + This snippet lists the items from a Multinode tree picker, using the picker's default settings. + Content Values stored as XML. To get it working with any site's data structure, set the selection equal to the property which has the multinode treepicker (so: replace "PropertyWithPicker" with the alias of your property). *@ -@{ var selection = CurrentPage.PropertyWithPicker.Split(','); } +@{ var selection = Model.Content.GetPropertyValue>("PropertyWithPicker"); } -
          - @foreach (var id in selection) - { - var item = Umbraco.Content(id); -
        • - @item.Name -
        • - } -
        \ No newline at end of file +@if (selection.Any()) +{ +
          + @foreach (var item in selection) + { +
        • + @item.Name +
        • + } +
        +} \ No newline at end of file diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/Navigation.cshtml b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/Navigation.cshtml old mode 100644 new mode 100755 index f2a4920a12..94870a37c4 --- a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/Navigation.cshtml +++ b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/Navigation.cshtml @@ -3,16 +3,19 @@ @* This snippet displays a list of links of the pages immediately under the top-most page in the content tree. This is the home page for a standard website. - It also highlights the current active page/section in the navigation with the css class "current". + It also highlights the current active page/section in the navigation with the CSS class "current". *@ -@{ var selection = CurrentPage.Site().Children.Where("Visible"); } +@{ var selection = Model.Content.Site().Children.Where(x => x.IsVisible()); } -
          - @foreach (var item in selection) - { -
        • - @item.Name -
        • - } -
        +@if (selection.Any()) +{ +
          + @foreach (var item in selection) + { +
        • + @item.Name +
        • + } +
        +} diff --git a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/SiteMap.cshtml b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/SiteMap.cshtml old mode 100644 new mode 100755 index 0aef1eb3a4..7630b26ed1 --- a/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/SiteMap.cshtml +++ b/src/Umbraco.Web.UI/Umbraco/PartialViewMacros/Templates/SiteMap.cshtml @@ -1,13 +1,13 @@ @inherits Umbraco.Web.Macros.PartialViewMacroPage @* - This snippet makes a list of links of all visible pages of the site, as nested unordered html lists. + This snippet makes a list of links of all visible pages of the site, as nested unordered HTML lists. How it works: - It uses a custom Razor helper called Traverse() to select and display the markup and links. *@ -@{ var selection = CurrentPage.Site(); } +@{ var selection = Model.Content.Site(); }
        @* Render the sitemap by passing the root node to the traverse helper, below *@ @@ -15,14 +15,14 @@
        -@* Helper method to travers through all descendants *@ -@helper Traverse(dynamic node) +@* Helper method to traverse through all descendants *@ +@helper Traverse(IPublishedContent node) { @* Update the level to reflect how deep you want the sitemap to go *@ var maxLevelForSitemap = 4; @* Select visible children *@ - var selection = node.Children.Where("Visible").Where("Level <= " + maxLevelForSitemap); + var selection = node.Children.Where(x => x.IsVisible() && x.Level <= maxLevelForSitemap); @* If any items are returned, render a list *@ if (selection.Any()) diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/zh_tw.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/zh_tw.xml new file mode 100644 index 0000000000..7212b4d97d --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/config/lang/zh_tw.xml @@ -0,0 +1,1358 @@ + + + + The Umbraco community + http://our.umbraco.org/documentation/Extending-Umbraco/Language-Files + + + 管理主機名稱 + 跟蹤審計 + 流覽節點 + 改變文檔類型 + 複製 + 創建 + 創建擴展包 + 刪除 + 禁用 + 清空回收站 + 匯出文檔類型 + 導入文檔類型 + 導入擴展包 + 即時編輯模式 + 退出 + 移動 + 提醒 + 公眾存取權限 + 發佈 + 取消發佈 + 重新載入節點 + 重新發佈整站 + 回復 + 許可權 + 回滾 + 提交至發佈者 + 發送給翻譯 + 排序 + 提交至發佈者 + 翻譯 + 更新 + 預設值 + + + 禁止訪問 + 添加功能變數名稱 + 移除 + 錯誤的節點 + 功能變數名稱錯誤 + 功能變數名稱重複 + 語言 + 功能變數名稱 + 新功能變數名稱 '%0%' 已創建 + 功能變數名稱 '%0%' 已刪除 + 功能變數名稱 '%0%' 已使用 + 功能變數名稱 '%0%' 已更新 + 編輯當前功能變數名稱 + + 繼承 + 語言 + 或從父節點繼承文化設定。
        + 也會改變目前節點設定,除非下方網域有其他項目。]]>
        + 功能變數名稱 + + + 查看 + + + 清除選擇 + 選擇 + 選擇目前資料夾 + 做別的事情 + 粗體 + 取消段落縮進 + 插入表單字段 + 插入圖片標題 + 編輯Html + 段落縮進 + 斜體 + 居中 + 左對齊 + 右對齊 + 插入連結 + 插入本地連結(錨點) + 圓點列表 + 數字清單 + 插入巨集 + 插入圖片 + 編輯關聯 + 回到清單 + 保存 + 保存並發佈 + 保存並提交審核 + 保存清單檢視 + 預覽 + 因未設置範本無法預覽 + 選擇樣式 + 顯示樣式 + 插入表格 + 產生模組 + + + 要更改所選節點的文檔類型,先在列表中選擇合適的文檔類型。 + 然後設置當前文檔類型到新文檔類型的各欄位間的對應映射關係並保存。 + 內容已被重新發佈 + 當前屬性 + 當前類型 + 不能改變文檔類型,因為沒有可替代的類型。 + 文檔類型已更改 + 要映射的欄位 + 映射欄位 + 新範本 + 新類型 + + 內容 + 選擇新的文檔類型 + 選中文檔的類型已被成功更改為[new type],以下欄位被映射: + + 不能完成欄位映射,因為存在一個欄位映射至多欄位的問題。 + 僅顯示可作為替代的文檔類型。 + + + 已發表 + 關於本頁 + 別名 + (圖片的替代文本) + 替代連結 + 點擊編輯 + 創建者 + 創建者 + 更新者 + 創建時間 + 此文件創建的日期時間 + 文檔類型 + 編輯 + 過期於 + 該項發佈之後有更改 + 該項沒有發佈 + 最近發佈 + 沒有可供顯示的項目 + 此列表中沒有可供顯示的項目 + 媒體類型 + 媒體連結位址 + 會員組 + 角色 + 會員類型 + 沒有選擇時間 + 頁標題 + 屬性 + 該文檔不可見,因為其上級 '%0%' 未發佈。 + 糟糕:該文檔已發佈,但是沒有更新至緩存(內部錯誤) + 糟糕:沒辦法連結到此網址(內部錯誤-請參見記錄) + 糟糕:此文件已經發表,但是網址和其他內容相衝 %0% + 發佈 + 發佈狀態 + 發佈於 + 取消發表於 + 清空時間 + 排序完成 + 拖拽項目或按一下列頭即可排序,可以按住Shift多選。 + 統計 + 標題(可選) + 其他說明文字(可選) + 類型 + 取消發佈 + 最近編輯 + 本文件修改時間 + 移除文件 + 連結到文檔 + 會員組成員 + 非會員組成員 + 子項目 + 目標 + 預計發表的時間(伺服器端) + 這是什麼意思?]]> + + + 點選以便上傳 + 拖曳檔案至此... + 媒體連結 + 或按這裡選擇檔案 + 只允許檔案類型為 + 檔案大小上限為 + + + 新增一位會員 + 所有會員 + + + 您想在哪裡創建 %0% + 創建在 + 選擇類型和標題 + "文檔類型"處變更。]]> + "媒體類型"處變更。]]> + 文檔類型沒有相關範本 + 沒有資料夾 + 新資料類別 + + + 流覽您的網站 + - 隱藏 + 如果Umbraco沒有打開,您可能需要允許彈出式視窗。 + 已經在新視窗中打開 + 重啟 + 訪問 + 歡迎 + + + 留下 + 放棄變更 + 您有未存檔的變更 + 您確定要離開本頁? - 您有未存檔的變更 + + + 完成 + 刪除 %0% 個項目 + 刪除 %0% 個項目 + 刪除 %1% 個中的 %0% 個項目 + 刪除 %1% 個中的 %0% 個項目 + 已發佈 %0% 個項目 + 已發佈 %0% 個項目 + 已發佈 %1% 個中的 %0% 個項目 + 已發佈 %1% 個中的 %0% 個項目 + 取消發佈 %0% 個項目 + 取消發佈 %0% 個項目 + 取消發佈 %1 個中的 %0% 個項目 + 取消發佈 %1 個中的 %0% 個項目 + 移動 %0% 個項目 + 移動 %0% 個項目 + 移動 %1 個中的 %0% 個項目 + 移動 %1 個中的 %0% 個項目 + 複製 %0% 個項目 + 複製 %0% 個項目 + 複製 %1 個中的 %0% 個項目 + 複製 %1 個中的 %0% 個項目 + + + 錨點名稱 + 管理主機名稱 + 關閉窗口 + 您確定要刪除嗎 + 您確定要禁用嗎 + 按一下此框確定刪除%0%項 + 您確定嗎? + 您確定嗎? + 剪切 + 編輯字典項 + 編輯語言 + 插入本地連結 + 插入字元 + 插入圖片標題 + 插入圖片 + 插入連結 + 插入巨集 + 插入表格 + 最近編輯 + 連結 + 內部連結: + 本地連結請用“#”號開頭 + 在新視窗中打開? + 巨集設置 + 本巨集沒有包含您可以編輯的屬性 + 粘貼 + 編輯許可權 + 正在清空回收站,請不要關閉窗口。 + 回收站已清空 + 從回收站刪除的項目將不可恢復 + regexlib.com的網站服務目前出現些狀況,而我們無能為力。我們對此不便感到十分抱歉。]]> + 查找規則運算式來驗證輸入,如: 'email、'zip-code'、'url'。 + 移除巨集 + 必填項目 + 網站已重建索引 + 網站緩存已刷新,所有已發佈的內容更新生效。 + 網站緩存將會刷新,所有已發佈的內容將會更新。 + 表格列數 + 表格行數 + 設定預留位置代碼 以便您要在子範本中插入內容到本範本時,填入此代碼到 <asp:content /> 裡面。]]> + 選擇預留位置代碼 於此清單中。您只能選擇目前父範本中的代碼。]]> + 點擊圖片查看完整大小 + 拾取項 + 查看緩存項 + 新增資料夾... + 與原本相關 + 最友善的社群 + 頁面連結 + 打開此連結文檔至新視窗或標籤頁 + 打開此連結文檔至全新視窗 + 打開此連結文檔在原本視窗中 + 媒體連結 + 選擇媒體 + 選擇圖示 + 選擇項目 + 選擇連結 + 選擇巨集 + 選擇內容 + 選擇會員 + 選擇會員群組 + 沒有找到任何圖示 + 本巨集沒有需要參數 + 外部登入提供者 + 例外細節 + 詳細記錄 + 內部例外 + 連結您的 + 取消連結您的 + 帳戶 + 選擇編輯器 + + + %0%' 編輯不同語言版本,
        您可以在左方選單「語言」中增添新的語言 + ]]>
        + 語言名稱 + + + 輸入您的使用者名稱 + 輸入您的密碼 + 確認您的密碼 + 命名此 %0%... + 輸入一個名稱 + 標籤... + 輸入一段描述... + 搜尋請輸入... + 過濾請輸入... + 增加標籤(每個標籤後請按輸入鍵)... + 輸入您的電子郵件 + + + 允許放置於根節點 + 只有勾選「允許放置於根節點」的內容種類可以放在內容樹或媒體樹的最頂端 + 允許子項節點類型 + 文檔種類集合 + 創建 + 刪除選項卡 + 描述 + 新建選項卡 + 選項卡 + 縮略圖 + 允許清單檢視 + 允許內容項目顯示成可以排列及搜尋的清單,子項目不會被顯示 + 目前清單檢視 + 作用中的清單檢視資料類別 + 新增自訂清單檢視 + 移除自訂清單檢視 + + + 添加預設值 + 資料庫資料類型 + 資料類型唯一標識 + 渲染控制項 + 按鈕 + 允許高級設置 + 允許快顯功能表 + 插入圖片預設最大 + 關聯的樣式表 + 顯示標籤 + 寬和高 + + + 資料已保存,但是發佈前您需要修正一些錯誤: + 當前成員提供程式不支援修改密碼(EnablePasswordRetrieval的值應該為true) + %0% 已存在 + 發現錯誤: + 發現錯誤: + 密碼最少%0%位元,且至少包含%1%位元非字母數位記號 + %0% 必須是整數 + %1% 中的 %0% 欄位是必填項 + %0% 是必填項 + %1% 中的 %0% 格式不正確 + %0% 格式不正確 + + + 收到伺服器傳來的錯誤 + 該檔案類型已被管理員禁用 + 注意,儘管配置中允許CodeMirror,但是它在IE上不夠穩定,所以無法在IE運行。 + 請為新的屬性類型填寫名稱和別名! + 許可權有問題,訪問指定文檔或資料夾失敗! + 讀取片段視圖腳本錯誤(檔案:%0%) + 讀取使用者控制項 %0% 錯誤 + 讀取使用者控制項 %0% 錯誤(組件:%0%,類別:%1%) + 讀取巨集引擎腳本錯誤(檔案:%0%) + 分析XSLT檔案錯誤:%0% + 讀取XSLT檔案錯誤:%0% + 請輸入標題 + 請選擇類型 + 圖片尺寸大於原始尺寸不會提高圖片品質,您確定要把圖片尺寸變大嗎? + python腳本錯誤 + python腳本未保存,因為包含錯誤。 + 預設打開頁面不存在,請聯繫管理員 + 請先選擇內容,再設置樣式。 + 沒有可用的樣式 + 請把游標放在您要合併的兩個儲存格中的左邊儲存格 + 非合併儲存格不能分離。 + XSLT源碼出錯 + XSLT未保存,因為包含錯誤。 + 這是此屬性所使用的資料類別設定錯誤,請檢查資料類別 + + + 關於 + 操作 + 操作 + 添加 + 別名 + 所有 + 您確定嗎? + 回去 + 邊框 + + 取消 + 儲存格邊距 + 選擇 + 關閉 + 關閉窗口 + 備註 + 確認 + 強制屬性 + 繼續 + 複製 + 創建 + 資料庫 + 時間 + 默認 + 刪除 + 已刪除 + 正在刪除… + 設計 + 規格 + + 下載 + 編輯 + 已編輯 + 元素 + 郵箱 + 錯誤 + 查找文檔 + + 幫助 + 圖示 + 導入 + 內邊距 + 插入 + 安裝 + 不合格 + 對齊 + 語言 + 佈局 + 載入中 + 鎖定 + 登入 + 退出 + 登出 + 巨集 + 必要 + 移動 + 更多 + 名稱 + 新的 + 下一步 + + 屬於 + 確定 + 打開 + + 密碼 + 路徑 + 預留位置代碼 + 請稍候… + 上一步 + 屬性 + 接收資料郵箱 + 回收站 + 保持狀態中 + 重命名 + 更新 + 必要 + 重試 + 許可權 + 搜索 + 伺服器 + 顯示 + 在發送時預覽 + 大小 + 排序 + 送出 + 類型 + 輸入內容開始搜尋… + + 更新 + 更新 + 上傳 + 連結位址 + 用戶 + 用戶名 + + 查看 + 歡迎… + + + 資料夾 + 搜尋結果 + 重新排列 + 我已經完成排列 + 預覽 + 更改密碼 + + 清單檢視 + 存檔中... + 目前 + 內嵌 + 選取的 + + + + + + + + + + + 增加標籤頁 + 增加屬性 + 增加編輯器 + 增加範本 + 增加子節點 + 增加子項目 + 編輯資料類別 + 瀏覽區塊 + 捷徑 + 顯示捷徑 + 開關清單檢視 + 開關是否允許為根項目 + + + 背景色 + 粗體 + 前景色 + 字體 + 文本 + + + 頁面 + + + 無法連接到資料庫。 + 無法保存web.config檔,請手工修改。 + 發現資料庫 + 資料庫配置 + 安裝 按鈕來安裝Umbraco資料庫 %0% + ]]> + 下一步繼續。]]> + 沒有找到資料庫!請確認檔案"web.config"中的字串"connection string"是否正確。

        +

        請編輯檔案"web.config" (例如使用Visual Studio或您喜歡的編輯器),移動到檔案底部,並在名稱為"UmbracoDbDSN"的字串中設定資料庫連結資訊,並存檔。

        +

        + 點選重試按鈕當上述步驟完成。
        + + 在此查詢更多編輯web.config的資訊。

        ]]>
        + + 若需要時,請聯繫您的網路公司。如果您在本地機器或伺服器安裝的話,您也許需要聯絡系統管理者。]]> + + 點選升級按鈕來升級Umbraco資料庫 %0%

        +

        + 請別擔心 - 不會刪除任何資料而且馬上就會繼續運作! +

        + ]]>
        + 點選下一步繼續。]]> + 下一步繼續設定精靈。]]> + 預設使用者的密碼必須更改!]]> + 預設使用者已經被暫停或沒有Umbraco的使用權!

        不需更多的操作步驟。點選下一步繼續。]]> + 安裝後預設使用者的密碼已經成功修改!

        不需更多的操作步驟。點選下一步繼續。]]> + 密碼已更改 + + Umbraco新增一預設使用者,名稱為('admin'),密碼為('default')。修改此密碼是十分重要的事情。

        +

        + 這個步驟會檢查預設使用者的密碼並在需要時建議修改。 +

        + ]]>
        + 作為入門者,從視頻教程開始吧! + 點擊下一步 (或在Web.config中自行修改UmbracoConfigurationStatus),意味著您接受上述授權合約。 + 安裝失敗。 + 受影響的檔和資料夾 + 此處查看更多資訊 + 您需要對以下檔和資料夾授於ASP.NET用戶修改許可權 + 您的權限設定幾近完美!

        + 您可以正常執行Umbraco沒有任何問題,只差您將沒有辦法安裝那些建議需要全部許可權的插件。]]>
        + 如何解決 + 點擊閱讀文字版 + 影片教學來瞭解如何設定Umbraco的資料夾權限或閱讀文字版本。]]> + 您的權限可能有點小問題! +

        + 您可以正常執行Umbraco沒有任何問題,然而您將無法新增資料夾或安裝那些可以讓Umbraco發揮全力的插件。]]>
        + 您的權限設定尚未未完成! +

        + 您需要更新權限設定才能執行Umbraco。]]>
        + 您的權限設定完美無瑕!

        + 您已經準備好執行Umbraco和安裝插件!]]>
        + 解決資料夾問題 + 點此查看ASP.NET和創建資料夾的問題解決方案 + 設置資料夾許可權 + + 我要從頭開始 + 學習該怎麼做) + 您晚點仍可以選擇安裝Runway,請至開發者區域選擇安裝。 + ]]> + 您剛剛安裝了一個乾淨的系統,要繼續嗎? + “Runway”已安裝 + + 這是我們的模組推薦清單,選取您想要安裝的項目,或者至 查詢完整清單。 + ]]> + 僅推薦高級用戶使用 + 給我一個簡單的網站 + + "Runway"是一個提供基本檔案類別和範本的簡單網站。安裝程式會自動幫您設定Runway, + 但你仍可輕易編輯,擴充或移除它。它並非必要項目而且您可以在沒它的情況下完美執行Umbraco。然而, + Runway提供一個輕鬆簡便但基於寶貴經驗的平台讓您可以更快開始。 + 如果您安裝Runway,您還可以選擇名為「Runway模組」的基本區塊來加強Runway頁面。 +

        + + 內含於Runway: 首頁,準備開始頁面,模組安裝頁面。
        + 可選模組: 上方瀏覽列,網站地圖,聯絡,藝廊。 +
        + ]]>
        + “Runway”是什麼? + 步驟 1/5:接受授權合約 + 步驟 2/5:資料庫配置 + 步驟 3/5:文件許可權驗證 + 步驟 4/5:系統安全性 + 步驟 5/5:一切就緒,可以開始使用系統。 + 感謝選擇我們的產品 + 參觀您的新網站 +您剛安裝好Runway,何不瞧瞧它的模樣。]]> + 更多的幫忙與資訊 +從我們獲獎的社群得到幫助,瀏覽文件,或觀看免費影片來瞭解如何輕鬆架設網站,如何使用插件,和瞭解Umbraco項目名稱的快速上手指引。]]> + 系統 %0% 安裝完畢 + /web.config 檔案並且更新AppSetting中的字串UmbracoConfigurationStatus 內容為 '%0%'。]]> + 快速開始指引。
        如果您是Umbraco的新成員, +您可以在其中找到相當多的資源。]]>
        + 啟動Umbraco +想要管理您的網站時,只需開啟Umbraco後台便可增加內容,更新範本和樣式表,或增添新功能。]]> + 無法連接到資料庫。 + 系統版本 3 + 系統版本 4 + 觀看 +
        + 點選"下一步"來啟動精靈。]]>
        + + + 語言代碼 + 語言名稱 + + + 使用者在空閒狀態下將會自動登出 + 已更新,繼續工作。 + + + 超級星期天快樂 + 瘋狂星期一快樂 + 熱鬧星期二快樂 + 美妙星期三快樂 + 悅耳星期四快樂 + 時髦星期五快樂 + 喵喵星期六快樂 + 下方登入 + 登入使用 + 連線時間過了 + © 2001 - %0%
        Umbraco.com

        ]]>
        + 忘記密碼? + 一封內有重設密碼連結的電子郵件已經寄出給您 + 一封內有重設密碼連結的電子郵件已經寄到此信箱 + 回到登入畫面 + 請輸入新密碼 + 您的密碼已經更新 + 您點選的連結是無效或過期的 + Umbraco:重設密碼 + 您登入到後台的使用者名稱是:%0%

        點選這裡來重設您的密碼或將此連結複製/貼上到您的瀏覽器:

        %1%

        ]]>
        + + + 儀錶板 + 區域 + 內容 + + + 選擇上面的頁面… + %0% 被複製到 %1% + 將 %0% 複製到 + %0% 已被移動到 %1% + 將 %0% 移動到 + 作為內容的根結點,點“確定”。 + 尚未選擇節點,請選擇一個節點點擊“確定”。 + 類型不符不允許選擇 + 該項不能移到其子項 + 當前節點不能建在根節點下 + 您在子項的許可權不夠,不允許該操作。 + 複本和原本建立關聯 + + + 為 %0% 編寫通知 + + 哈嘍 %0%

        + +

        這是一封自動產生的信件來通知您 %1% 工作 + 已經在頁面 %2% 上由使用者 %3% 執行完成 +

        + +

        +

        更新摘要:

        + + %6% +
        +

        + + + +

        祝您有美好的一天!

        + Umbraco機器人 謹上 +

        ]]>
        + 在 %2%,[%0%] 關於 %1% 的通告已執行。 + 通知 + + + + 按鈕並點選該檔案。Umbraco擴展包通常有「.zip」的副檔名。 + ]]> + 作者 + 演示 + 文檔 + 中繼資料 + 名稱 + 擴展包不含任何項 +
        + 您可以點選下方「移除擴展包」來安全地移除此項目。]]>
        + 無可用更新 + 選項 + 說明 + 程式庫 + 確認卸載 + 已卸載 + 擴展包卸載成功 + 卸載 + + 注意: 任何文檔,媒體或需要這些項目才能運作的物件將會停止運作,並可能使得系統不穩定, + 請小心移除。若有疑慮,請聯絡擴展包作者。]]> + 從程式庫下載更新 + 更新擴展包 + 更新說明 + 擴展包有可用的更新,您可以從程式庫網站更新。 + 版本 + 版本歷史 + 訪問擴展包網站 + 擴展包已安裝 + 這個擴展包無法安裝,它需要Umbraco至少是版本 %0% + 移除中... + 下載中... + 匯入中... + 安裝中... + 重新啟動中,請稍後... + 都好了,您的瀏覽器將重新整理,請稍待... + + + 帶格式粘貼(不推薦) + 您所粘貼的文本含有特殊字元或格式,Umbraco將清除以適應網頁。 + 無格式粘貼 + 粘貼並移除格式(推薦) + + + 基於角色的保護 + 請使用Umbraco的會員群組。]]> + 使用基於角色的授權需要首先建立會員組。 + 錯誤頁 + 當用戶登錄後訪問沒有許可權的頁時顯示該頁 + 選擇限制訪問此頁的方式 + %0% 現在處於受保護狀態 + %0% 的保護被取消 + 登錄頁 + 選擇公開的登錄入口 + 取消保護 + 選擇一個包含登錄表單和提示資訊的頁 + 選擇訪問該頁的角色類型 + 為此頁設置帳號和密碼 + 單用戶保護 + 如果您只希望提供一個用戶名和密碼就能訪問 + + + + + + + + 包含未發佈的子項 + 正在發佈,請稍候… + %0% 中的 %1% 頁面已發佈… + %0% 已發佈 + %0% 及其子項已發佈 + 發佈 %0% 及其子項 + 發佈按鈕來將%0%的內容設定為公開。

        + 您可以同時發佈本頁以及其子項目若您點選下面的包含子頁。 + ]]>
        + + + 您尚未設定任何許可顏色 + + + 輸入外部連結 + 選擇內部連結 + 標題 + 連結 + 新視窗 + 輸入新標題 + 輸入連結 + + + 重設 + + + 當前版本 + 紅色 文字將不會顯示於所選版本,而綠色表示增加部分。]]> + 文檔已回滾 + 這顯示所選版本的HTML格式,如果您想要比較兩版本的差異,請使用比較檢視 + 回滾至 + 選擇版本 + 查看 + + + 編輯腳本 + + + Concierge + 內容 + Courier + 開發 + 設定精靈 + 媒體 + 會員 + 消息 + 設置 + 統計 + 翻譯 + 用戶 + 說明 + 表單 + 統計 + + + 移至 + 說明主題為 + 影片主題為 + 最好的Umbraco影片教學 + + + 預設範本 + 字典鍵 + 要導入文檔類型,請點擊“流覽”按鈕,再點擊“導入”,然後在您電腦上查找 ".udt"檔導入(下一頁中需要您再次確認) + 新建選項卡標題 + 節點類型 + 類型 + 樣式表 + 腳本 + 樣式表屬性 + 選項卡 + 選項卡標題 + 選項卡 + 主控文件類型啟動 + 該文檔類型使用 + 作為主控文件類型. 主控文件類型的標籤只能在主控文件類型裡修改。 + 沒有欄位設置在該標籤頁 + 主文檔類別 + 新增對應範本 + 增加圖示 + + + 排列順序 + 增添時間 + 排序完成。 + 上下拖拽項目或按一下列頭進行排序 +
        排序中請不要關閉視窗。]]>
        + + + 驗證 + 驗證錯誤一定要修正才能儲存項目 + 失敗 + 使用者權限不足,無法完成操作 + 已取消 + 操作被協力廠商外掛程式取消 + 發佈被協力廠商外掛程式取消 + 屬性類型已存在 + 屬性類型已創建 + 資料類別:%1%]]> + 屬性類型已刪除 + 內容類別型已保存 + 選項卡已創建 + 選項卡已刪除 + id為%0%的選項卡已刪除 + 樣式表未保存 + 樣式表已保存 + 樣式表保存,無錯誤。 + 資料類型已保存 + 字典項已保存 + 因為上級頁面未發佈導致發佈失敗! + 內容已發佈 + 公眾可見 + 內容已保存 + 請發佈以使更改生效 + 提交審核 + 更改已提交審核 + 媒體已保存 + 媒體已保存 + 會員已保存 + 樣式表屬性已保存 + 樣式表已保存 + 範本已保存 + 保存使用者出錯(請查看日誌) + 用戶已保存 + 用戶類型已保存 + 檔未保存 + 檔無法保存,請檢查許可權。 + 檔保存 + 檔保存,無錯誤。 + 語言已保存 + 媒體類別已儲存 + 會員類別已儲存 + Python腳本未保存 + Python腳本因為錯誤未能保存 + Python已保存 + Python腳本無錯誤 + 範本未保存 + 範本別名相同 + 範本已保存 + 範本保存,無錯誤。 + XSLT未保存 + XSLT有錯誤 + XSLT無法保存,請檢查許可權。 + XSLT已保存 + XSLT無錯誤 + 內容已取消發佈 + 片段視圖已保存 + 片段視圖保存,無錯誤。 + 片段視圖未保存 + 片段視圖因為錯誤未能保存 + 腳本視圖已儲存 + 腳本視圖已儲存,沒有任何錯誤! + 腳本視圖未儲存 + 儲存檔案時發生錯誤 + 儲存檔案時發生錯誤 + + + 使用CSS語法,如:h1、.redHeader、.blueTex。 + 編輯樣式表 + 編輯樣式屬性 + 編輯器中的樣式屬性名 + 預覽 + 樣式 + + + 編輯範本 + 插入內容區 + 插入內容預留位置 + 插入字典項 + 插入巨集 + 插入頁欄位 + 母版 + 範本標籤快速指南 + 範本 + + + 選擇內容類別 + 選擇排列方式 + 新增一行 + 新增內容 + 放棄內容 + 設定已儲存 + 此處不允許有內容 + 此處允許有內容 + 點選來內嵌 + 點選來插入圖片 + 圖片標題... + 在此填寫... + 網格排列方式 + 排列是指網格編輯器的整體工作區域,通常您只需要一種或兩種排列方式 + 增加網格排列方式 + 藉由設定列寬以及增加新的區域來調整排列方式 + 行設定 + 行是預先水平排列的格子 + 增加行設定 + 藉由設定小格寬度和增添小格來調整此行 + + 網格排列方式的列總數 + 設定 + 調整設定編輯器可以改變的項目 + 樣式 + 調整樣式編輯器可以改變的項目 + 當JSON格式正確時設定才可以儲存 + 允許所有編輯器 + 允許所有行設定 + 定為預設 + 選擇額外 + 選擇預設 + 已增加 + + + 組合 + 您沒有增加任何選項卡 + 增加新的選項卡 + 增加另外的選項卡 + 繼承的表格 + 增加屬性 + 必要標籤 + 允許清單檢視 + 允許內容項目顯示成可以排列及搜尋的清單,子項目不會被顯示 + 允許的範本 + 選擇哪些範本編輯器可以使用於此類別的內容 + 允許為根項目 + 允許編輯器新增此類別的內容為根項目 + 是的 - 允許此類別內容為根項目 + 允許子節點種類 + 允許某些特定種類能夠成為此種類內容的子項目 + 選擇子節點 + 從已存在的文檔類別中繼承選項卡以及屬性。新選項卡將被新增至目前文檔種類或合併至已存在同名的選項卡中。 + 此內容種類已經用於集合中,因此不能重複添加本身。 + 沒有可用於集合的內容種類。 + 可用的編輯器 + 重複使用 + 編輯器設定 + 設定 + 是,刪除 + 已移至下層 + 已複製至下層 + 選擇要移動的資料夾 + 選擇要複製的資料夾 + 至下方樹狀結構 + 所有文檔種類 + 所有文檔 + 所有媒體項目 + 使用此文檔種類的將被永久刪除,請確認您也想要將它們刪除。 + 使用此媒體種類的將被永久刪除,請確認您也想要將它們刪除。 + 使用此會員種類的將被永久刪除,請確認您也想要將它們刪除。 + 以及所有使用此種類的文件項目 + 以及所有使用此種類的媒體項目 + 以及所有使用此種類的會員項目 + 使用此編輯器將會套用新設定 + 會員可以編輯 + 顯示於會員資料 + + + 替代欄位 + 替代文本 + 大小寫 + 編碼 + 選取欄位 + 轉換分行符號 + 將換行符號取代成為HTML標籤 &lt;br&gt; + 自訂欄位 + 是,僅日期 + 格式化時間 + HTML編碼 + 將替換HTML中的特殊字元 + 將在欄位值後插入 + 將在欄位值前插入 + 小寫 + + 欄位後插入 + 欄位前插入 + 遞迴 + 移除段落符號 + 將會在字串首尾移除任何 &lt;P&gt; 符號 + 標準欄位 + 大寫 + URL編碼 + 將格式化URL中的特殊字元 + 當上面欄位值為空時使用 + 該欄位僅在主欄位為空時使用 + 是,含時間,分隔符號為: + + + 標記為您的任務 + 指派給您。請按「翻譯詳情」或頁面名稱觀看包含回應的詳細檢視畫面。 + 您也可以將此頁面下載成為XML格式檔案,請按「下載XML」按鈕。
        + 若想要關閉翻譯任務,請至細節頁面點選「結束」按鈕。 + ]]>
        + 關閉任務 + 翻譯詳情 + 將翻譯任務下載為XML + 下載 XML + 下載 XML DTD + 欄位 + 包含子頁 + + [%0%]翻譯任務:%1% + 沒有翻譯員,請創建翻譯員角色的用戶。 + 您創建的任務 + 由您創建的頁面。要瀏覽包含回應的詳細檢視畫面, + 點選「詳情」或頁面名稱。您可以下載此頁面成為XML格式檔案,請點選「下載XML」連結。 + 若要關閉翻譯任務,請至詳情檢視並點選「關閉」按鈕。 + ]]> + 頁面'%0%'已經發送給翻譯 + 請選擇本內容應該被翻譯成的語言 + 發送頁面'%0%'以便翻譯 + 分配者 + 任務開啟 + 總字數 + 翻譯到 + 翻譯完成。 + 您可以流覽剛翻譯的頁面,如果原始頁存在,您將得到兩者的比較。 + 翻譯失敗,XML可能損壞了。 + 翻譯選項 + 翻譯員 + 上傳翻譯的xml + + + 緩存流覽 + 回收站 + 創建擴展包 + 資料類型 + 字典 + 已安裝的擴展包 + 安裝皮膚 + 安裝新手套件 + 語言 + 安裝本地擴展包 + 巨集 + 媒體類型 + 會員 + 會員組 + 角色 + 會員類型 + 文檔類型 + 相關類型 + 擴展包 + 擴展包 + Python文件 + 從線上程式庫安裝 + 安裝Runway + Runway模組 + Scripting文件 + 腳本 + 樣式表 + 範本 + XSLT文件 + 統計 + + + 有可用更新 + %0%已就緒,點擊這裡下載 + 無到伺服器的連接 + 檢查更新失敗 + + + 管理員 + 分類欄位 + 更改密碼 + 更改密碼 + 確認新密碼 + 要改變密碼,請在框中輸入新密碼,然後按一下“更改密碼”。 + 內容頻道 + 描述欄位 + 禁用用戶 + 文檔類型 + 編輯 + 排除欄位 + 語言 + 登錄 + 默認打開媒體項 + 區域 + 禁用後臺管理介面 + 舊的密碼 + 密碼 + 重設密碼 + 您的密碼已更改! + 重輸密碼 + 輸入新密碼 + 新密碼不能為空! + 當前密碼 + 密碼錯誤 + 新密碼和重輸入的密碼不一致,請重試! + 重輸的密碼和原密碼不一致! + 替換子項許可權設置 + 您正在修改存取權限的頁面: + 選擇要修改許可權的頁 + 搜索子物件 + 預設打開內容項 + 用戶名 + 用戶許可權 + 用戶類型 + 用戶類型 + 撰稿人 + 翻譯者 + 改變 + 您的個人檔案 + 您的歷程記錄 + 連線到期於 + + + 驗證 + 以電子郵件驗證 + 以數字驗證 + 以網址驗證 + ...或輸入自訂驗證 + 必要欄位 + + + + 數值已設為推薦值:%0% + 在設定檔 %3% 中XPath %2% 的數值設為 %1% 。 + 在設定檔 %3% 中XPath %2% 的預期值設為 %1% ,但卻是 %0%。 + 在設定檔 %3% 中XPath %2% 的值為非預期值 %0%。 + + 自訂錯誤設定為 %0% + 自訂錯誤設定為 %0。建議在上線前改為 %1%。 + 自訂錯誤成功設定為 %0% + 巨集錯誤設為 %0% + 巨集錯誤設為 %0%,如此一來,當巨集有任何錯誤時會阻止某些或全部頁面正常載入。改正會將此設定 %1%。 + 巨集錯誤已設為 %0% + + 嘗試略過IIS自訂錯誤目前設為 %0%,而且您使用的IIS版本為 %1%。 + 嘗試略過IIS自訂錯誤目前設為 %0%,然而在您使用的IIS版本為 %2% 時,建議設定是 %1%。 + 嘗試略過IIS自訂錯誤已成功設為 %0%。 + + 檔案不存在:%0%。 + '%1%'中無法找到'%0%'。]]> + 有錯誤產生,請參閱下列錯誤的紀錄:%0%。 + 成員 - 所有XML:%0%,總共:%1%,不合格:%2% + 媒體 - 所有XML:%0%,總共發佈:%1%,不合格:%2% + 內容 - 所有XML:%0%,總共發佈:%1%,不合格:%2% + 憑證驗證錯誤:%0% + 網址探查錯誤:%0% - '%1%' + 您目前使用HTTPS瀏覽本站:%0% + 在您的web.config檔案中,appSetting的umbracoUseSSL是設為false。當您開始使用HTTPS時,應將其改為 true。 + 在您的web.config檔案中,appSetting的umbracoUseSSL是設為 %0%,您的cookies %0% 標成安全。 + 無法在您的web.config檔案中,更新appSetting的umbracoUseSSL設定,錯誤訊息:%0% + + 開啟HTTPS + 在web.config檔案中,將appSetting的umbracoUseSSL設true。 + 在您的web.config檔案中,appSetting的umbracoUseSSL已設為 true,您的cookies 將被標成安全。 + 修正 + 無法修正比較種類檢查為'ShouldNotEqual'。 + 用提供的數值無法修正比較種類檢查為'ShouldEqual'。 + 沒有提供要修正檢查的數值。 + 偵錯編輯模式關閉。 + 偵錯編輯模式目前已開啟。上線前建議將其關閉。 + 偵錯編輯模式已成功關閉。 + 詳細記錄模式已關閉。 + 詳細記錄模式目前已開啟。上線前建議將其關閉。 + 詳細記錄模式已成功關閉。 + 所有資料夾已有正確權限設定。 + + %0%。]]> + %0%。如果無須寫入,不需採取行動。]]> + 所有檔案已有正確權限設定。 + + %0%。]]> + %0%。如果無須寫入,不需採取行動。]]> + X-Frame-Options 設定能控制網站是否可以被其他人IFRAMEd已找到。]]> + X-Frame-Options 設定能控制網站是否可以被其他人IFRAMEd沒有找到。]]> + 調整設定的標頭 + 在 web.config 的 httpProtocol/customHeaders 區域增加設定來防止本站被別的網站IFRAMEd。 + 在 web.config 的 httpProtocol/customHeaders 區域已經增加設定來防止本站被別的網站IFRAMEd。 + 無法更新web.config檔案,錯誤:%0% + + %0%。]]> + 在標頭中沒有找到揭露網站技術的資訊。 + 在 Web.config 檔案中,找不到 system.net/mailsettings。 + 在 Web.config 檔案中的 system.net/mailsettings,沒有設定 host 。 + SMTP設定正確,而且服務正常運作。 + SMTP伺服器 %0% : %1% 無法連接。請確認在Web.config 檔案中 system.net/mailsettings 設定正確。 + %0%。]]> + %0%。]]> + + + 停止網址追蹤器 + 啟動網址追蹤器 + 原本網址 + 轉址成 + 沒有任何轉址 + 當發佈後的頁面改名或移動時,會自動轉址至新網頁。 + 移除 + 您確定要移除從 %0% 到 %1% 的轉址嗎? + 轉址已移除。 + 移除轉址錯誤。 + + 您確定要停止轉址追蹤器? + 轉址追蹤器已停止。 + 停止轉址追蹤器錯誤,更多資訊請參閱您的紀錄檔。 + 轉址追蹤器已開啟。 + 啟動轉址追蹤器錯誤,更多資訊請參閱您的紀錄檔。 + +
        \ No newline at end of file diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/da.xml b/src/Umbraco.Web.UI/umbraco/config/lang/da.xml index 4fe1120eee..bed45d7cb7 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/da.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/da.xml @@ -1202,9 +1202,10 @@ Mange hilsner fra Umbraco robotten Medlemstype Dokumenttyper Relationstyper - Pakker Pakker + Partial Views + Partial View Makro Filer Python Installer fra "repository" Installer Runway diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/de.xml b/src/Umbraco.Web.UI/umbraco/config/lang/de.xml index 776a23183b..70dc22b439 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/de.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/de.xml @@ -859,7 +859,7 @@ Wenn Sie sich für Runway entscheiden, können Sie optional Blöcke nutzen, die Element hinzufügen Zeilenlayout auswählen - Einfach auf <i class="icon icon-add blue"></i> klicken, um das erste Element anzulegen + Element mit <i class="icon icon-add blue"></i> hinzufügen Drop content Klicken, um Inhalt einzubetten Klicken, um Abbildung einzufügen diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/en.xml b/src/Umbraco.Web.UI/umbraco/config/lang/en.xml index 84543767b2..734f550357 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/en.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/en.xml @@ -1437,6 +1437,8 @@ To manage your website, simply open the Umbraco back office and start adding con Relation Types Packages Packages + Partial Views + Partial View Macro Files Python Files Install from repository Install Runway @@ -1447,8 +1449,6 @@ To manage your website, simply open the Umbraco back office and start adding con Templates XSLT Files Analytics - Partial Views - Partial View Macro Files New update ready diff --git a/src/Umbraco.Web.UI/umbraco/config/lang/fr.xml b/src/Umbraco.Web.UI/umbraco/config/lang/fr.xml index 0064697d95..093c1a0af5 100644 --- a/src/Umbraco.Web.UI/umbraco/config/lang/fr.xml +++ b/src/Umbraco.Web.UI/umbraco/config/lang/fr.xml @@ -28,6 +28,9 @@ Rafraîchir Republier le site tout entier Récupérer + Spécifiez les permissions pour la page %0% + Choisissez où déplacer + dans l'arborescence ci-dessous Permissions Version antérieure Envoyer pour publication @@ -45,16 +48,16 @@ Noeud invalide. Domaine invalide. Domaine déjà assigné. - Domaine Langue + Domaine Nouveau domaine '%0%' créé Domaine '%0%' supprimé Domaine '%0%' déjà assigné + Domaine '%0%' mis à jour + Editer les domaines actuels
        Les domaines contenant un chemin d'un niveau sont autorisés, ex : "example.com/en". Pour autant, cela devrait être évité. Utilisez plutôt la gestion des noms d'hôte.]]>
        - Domaine '%0%' mis à jour - Editer les domaines actuels Hériter Culture ou hériter de la culture des noeuds parents. S'appliquera aussi
        @@ -85,8 +88,8 @@ Liste numérique Insérer une macro Insérer une image - Retourner à la liste Editer les relations + Retourner à la liste Sauver Sauver et publier Sauver et envoyer pour approbation @@ -97,7 +100,8 @@ Afficher les styles Insérer un tableau Générer les modèles - Sauver et générer les modèles + Défaire + Refaire Pour changer le type de document du contenu séléctionné, faites d'abord un choix dans la liste des types valides à cet endroit. @@ -173,14 +177,15 @@ Cible Ceci se traduit par l'heure suivante sur le serveur : Qu'est-ce que cela signifie?]]> - + Ajouter un autre champ texte + Enlever ce champ texte + Cliquez pour télécharger Faites glisser vos fichier ici... Lien vers le média ou cliquez ici pour choisir un fichier Les seuls types de fichiers autorisés sont - Impossible de télécharger ce fichier, il n'a pas un type de fichier autorisé. La taille maximum de fichier est @@ -196,6 +201,13 @@ Type de document sans modèle Nouveau répertoire Nouveau type de données + Nouveau fichier javascript + Nouvelle vue partielle vide + Nouvelle macro pour vue partielle + Nouvelle vue partielle à partir d'un snippet + Nouvelle macro pour vue partielle vide + Nouvelle macro pour vue partielle à partir d'un snippet + Nouvelle macro pour vue partielle (sans macro) Parcourir votre site @@ -289,10 +301,12 @@ Voir l'élément de cache Créer un répertoire... Lier à l'original + Inclure les descendants La communauté la plus amicale Lier à la page Ouvre le document lié dans une nouvelle fenêtre ou un nouvel onglet Lier à un media + Lier à un fichier Sélectionner le media Sélectionner l'icône Sélectionner l'élément @@ -301,7 +315,9 @@ Sélectionner le contenu Sélectionner le membre Sélectionner le groupe de membres + Aucune icone n'a été trouvée Il n'y a pas de paramètres pour cette macro + Il n'y a pas de macro disponible à insérer Fournisseurs externes d'identification Détails de l'exception Trace d'exécution @@ -310,12 +326,19 @@ Enlevez votre compte Sélectionner un éditeur + Selectionner un snippet %0%' ci-dessous.
        Vous pouvez ajouter d'autres langues depuis le menu ci-dessous "Langues". ]]>
        Nom de Culture + Modifiez la clé de l'élément de dictionaire. + + + Votre nom d'utilisateur @@ -331,7 +354,6 @@ Entrez votre email Votre nom d'utilisateur est généralement votre adresse email - Autoriser à la racine Seuls les Types de Contenu qui ont ceci coché peuvent être créés au niveau racine des arborescences de contenu et de media @@ -362,6 +384,13 @@ CSS associées Afficher le libellé Largeur et hauteur + Tous les types de propriétés & les données de propriétés + utilisant ce type de données seront supprimés définitivement, veuillez confirmer que vous voulez également les supprimer + Oui, supprimer + et tous les types de propriétés & les données de propriétés utilisant ce type de données + Sélectionnez le répertoire où déplacer + dans l'arborescence ci-dessous + a été déplacé sous Vos données ont été sauvegardées, mais avant de pouvoir publier votre page, il y a des erreurs que vous devez corriger : @@ -420,6 +449,7 @@ Fermer la fenêtre Commenter Confirmer + Conserver Conserver les proportions Continuer Copier @@ -431,6 +461,7 @@ Supprimé Suppression... Design + Dictionnaire Dimensions Bas Télécharger @@ -440,6 +471,7 @@ Email Erreur Trouver + Premier Hauteur Aide Icône @@ -449,8 +481,8 @@ Installer Non valide Justifier - Libellé Langue + Dernier Mise en page En cours de chargement Bloqué @@ -477,8 +509,8 @@ Propriétés Email de réception des données de formulaire Corbeille - Votre corbeille est vide Restant + Enlever Renommer Renouveller Requis @@ -486,6 +518,7 @@ Permissions Rechercher Désolé, nous ne pouvons pas trouver ce que vous recherchez + Aucun élément n'a été ajouté Serveur Montrer Afficher la page à l'envoi @@ -519,6 +552,7 @@ Intégrer sélectionné + Noir Vert @@ -527,6 +561,7 @@ Bleu Rouge + Ajouter un onglet Ajouter une propriété @@ -544,7 +579,18 @@ Passer à la vue en liste Basculer vers l'autorisation comme racine + + Commenter/Décommenter les lignes + Supprimer la ligne + Copier les lignes vers le haut + Copier les lignes vers le bas + Déplacer les lignes vers le haut + Déplacer les lignes vers le bas + + Général + Editeur + Couleur de fond Gras @@ -552,6 +598,7 @@ Police Texte + Page @@ -580,17 +627,21 @@ N'ayez pas d'inquiétude : aucun contenu ne sera supprimé et tout continuera à fonctionner parfaitement par après !

        ]]>
        - - Appuyez sur Suivant pour - poursuivre. ]]> - + Appuyez sur Suivant pour + poursuivre. ]]> Suivant pour poursuivre la configuration]]> Le mot de passe par défaut doit être modifié !]]> L'utilisateur par défaut a été désactivé ou n'a pas accès à Umbraco!

        Aucune autre action n'est requise. Cliquez sur Suivant pour poursuivre.]]> Le mot de passe par défaut a été modifié avec succès depuis l'installation!

        Aucune autre action n'est requise. Cliquez sur Suivant pour poursuivre.]]> Le mot de passe a été modifié ! - - ('admin') et le mot de passe ('default'). Il est important que ce mot de passe soit modifié en quelque-chose de sécurisé et unique. + + Umbraco crée un utilisateur par défaut avec le login ('admin') et le mot de passe ('default'). Il est important que ce mot de passe soit + modifié en quelque-chose de sécurisé et unique. +

        +

        + Cette étape va vérifier le mot de passe utilisateur par défaut et suggèrera de le modifier si nécessaire. +

        ]]>
        Pour bien commencer, regardez nos vidéos d'introduction En cliquant sur le bouton "Suivant" (ou en modifiant umbracoConfigurationStatus dans le fichier web.config), vous acceptez la licence de ce logiciel telle que spécifiée dans le champ ci-dessous. Veuillez noter que cette distribution Umbraco consiste en deux licences différentes, la licence open source MIT pour le framework et la licence Umbraco freeware qui couvre l'UI. @@ -619,8 +670,7 @@ Il stocke également des données temporaires (i.e : cache) pour améliorer les performances de votre site. ]]> Je veux démarrer "from scratch" - - Apprenez comment) Vous pouvez toujours choisir d'installer Runway plus tard. Pour cela, allez dans la section "Développeur" et sélectionnez "Packages". @@ -633,8 +683,7 @@ ]]> Recommandé uniquement pour les utilisateurs expérimentés Je veux commencer avec un site simple - - "Runway" est un site simple qui fournit des types de documents et des modèles de base. L'installateur peut mettre en place Runway automatiquement pour vous, mais vous pouvez facilement l'éditer, l'enrichir, ou le supprimer par la suite. Il n'est pas nécessaire, et vous pouvez parfaitement vous en passer pour utiliser Umbraco. Cela étant dit, @@ -738,8 +787,7 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à Avec les salutations du Robot Umbraco ]]> - - Hello %0%

        + Hello %0%

        Ceci est un email automatique pour vous informer que la tâche '%1%' a été executée sur la page '%2%' @@ -774,6 +822,39 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à Choisissez un package sur votre ordinateur en cliquant sur le bouton Parcourir
        et localisez le package. Les packages Umbraco ont généralement une extension ".umb" ou ".zip". ]]> + Déposez pour uploader + ou cliquez ici pour choisir les fichiers + Uploader un package + Installez un package local en le sélectionnant sur votre ordinateur. Installez uniquement des packages de sources fiables que vous connaissez + Uploader un autre package + Annuler et uploader un autre package + Licence + J'accepte + les conditions d'utilisation + Installer le package + Terminer + Packages installés + Vous n'avez aucun package installé + 'Packages' en haut à droite de votre écran]]> + Chercher des packages + Résultats pour + Nous n'avons rien pu trouver pour + Veuillez essayer de chercher un autre package ou naviguez à travers les catégories + Populaires + Nouvelles releases + a + points de karma + Information + Propriétaire + Contributeurs + Créé + Version actuelle + version .NET + Téléchargements + Coups de coeur + Compatibilité + Ce package est compatible avec les versions suivantes de Umbraco, selon les rapports des membres de la communauté. Une compatibilité complète ne peut pas être garantie pour les versions rapportées sous 100% + Sources externes Auteur Démo Documentation @@ -808,6 +889,8 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à Installation... Redémarrage, veuillez patienter... Terminé, votre navigateur va être rafraîchi, veuillez patienter... + Veuillez cliquer sur terminer pour compléter l'installation et recharger la page. + Package en cours de chargement... Coller en conservant le formatage (non recommandé) @@ -875,6 +958,10 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à Réinitialiser + Définir le recadrage + Donnez un alias au recadrage ainsi que sa largeur et sa hauteur par défaut + Sauvegarder le recadrage + Ajouter un nouveau recadrage Version actuelle @@ -1015,17 +1102,113 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à Prévisualiser Styles + Editer le modèle + + Sections Insérer une zone de contenu Insérer un placeholder de zone de contenu - Insérer un élément de dictionnaire - Insérer une Macro - Insérer un champ de la page Umbraco + + Insérer + Choisissez l'élément à insérer dans votre modèle + + Elément de dictionnaire + Un élément de dictionnaire est un espace pour un morceau de texte traduisible, ce qui facilite la création de designs pour des sites web multilangues. + + Macro + + Une Macro est un composant configurable, ce qui est génial pour les parties réutilisables de votre + design où vous devez pouvoir fournir des paramètres, + comme les galeries, les formulaires et les listes. + + + Valeur + Affiche la valeur d'un des champs de la page en cours, avec des options pour modifier la valeur ou spécifier des valeurs alternatives. + + Vue partielle + + Une vue partielle est un fichier modèle séparé qui peut être à l'intérieur d'un aute modèle, + c'est génial pour réutiliser du markup ou pour séparer des modèles complexes en plusieurs fichiers. + + Modèle de base - Guide rapide concernant les tags des modèles Umbraco + Pas de modèle de base + Pas de modèle + + Afficher un modèle enfant + + @RenderBody(). + ]]> + + + + Définir une section nommée + + @section { ... }. Celle-ci peut être affichée dans une région + spécifique du parent de ce modèle, en utilisant @RenderSection. + ]]> + + + Afficher une section nommée + + @RenderSection(name). + Ceci affiche une région d'un modèle enfant qui est entourée d'une définition @section [name]{ ... } correspondante. + ]]> + + + Nom de la section + La section est obligatoire + + Si obligatoire, le modèle enfant doit contenir une définition @section, sinon une erreur est affichée. + + + + Générateur de requêtes + Générer une requête + éléments trouvés, en + + Je veux + tout le contenu + le contenu du type "%0%" + à partir de + mon site web + + et + + est + n'est pas + avant + avant (incluant la date sélectionnée) + après + après (incluant la date sélectionnée) + égal + n'est pas égal + contient + ne contient pas + supérieur à + supérieur ou égal à + inférieur à + inférieur ou égal à + + Id + Nom + Date de Création + Date de Dernière Modification + + trier par + ascendant + descendant + Modèle + + Choisissez le type de contenu Choisissez une mise en page @@ -1057,7 +1240,6 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à Paramètres Configurez les paramètres qui peuvent être modifiés par les éditeurs - Styles Configurez les effets de style qui peuvent être modifiés par les éditeurs @@ -1070,8 +1252,9 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à Choisir le défaut ont été ajoutés - - + + + Compositions Vous n'avez pas ajouté d'onglet Ajouter un nouvel onglet @@ -1085,6 +1268,7 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à Modèles autorisés Sélectionnez les modèles que les éditeurs sont autorisés à utiliser pour du contenu de ce type. + Autorisé comme racine Autorisez les éditeurs à créer du contenu de ce type à la racine de l'arborescence de contenu. Oui - autoriser du contenu de ce type à la racine @@ -1093,6 +1277,7 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à Autorisez la création de contenu des types spécifiés sous le contenu de ce type-ci Choisissez les noeuds enfants + Hériter des onglets et propriétés d'un type de document existant. De nouveaux onglets seront ajoutés au type de document actuel, ou fusionnés s'il existe un onglet avec un nom sililaire. Ce type de contenu est utilisé dans une composition, et ne peut donc pas être lui-même un composé. Il n'y a pas de type de contenu disponible à utiliser dans une composition. @@ -1127,39 +1312,43 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à Le membre peut éditer Afficher dans le profil du membre - l'onglet n'a pas d'ordonnancement - - - - Création des modèles - ceci peut prendre un certain temps, ne vous inquiétez pas - Les modèles ont été générés - Les modèles n'ont pas pu être générés - La génération des modèles a échoué, veuillez consulter les erreurs dans le log Umbraco + + Ajouter un champ de rechange + Champ de rechange + Ajouter une valeur par défaut + Valeur par défaut Champ alternatif Texte alternatif Casse Encodage Choisir un champ Convertir les sauts de ligne + Oui, convertir les sauts de ligne Remplace les sauts de ligne avec des balises &lt;br&gt; Champs particuliers Oui, la date seulement + Format et encodage Formater comme une date + Formate la valeur comme une date, ou une date avec l'heure, en fonction de la culture active Encoder en HTML Remplacera les caractères spéciaux par leur équivalent HTML. Sera inséré après la valeur du champ Sera inséré avant la valeur du champ Minuscules + Modifier le résultat Aucun + Example de résultat Insérer après le champ Insérer avant le champ Récursif - Supprimer les balises de paragraphes + Oui, rendre récursif + Supprimer les balises de paragraphe + Oui, supprimer les balises de paragraphe Supprimera toute balise &lt;P&gt; au début et à la fin du texte + Séparateur Champs standards Majuscules Encode pour URL @@ -1248,6 +1437,8 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à Modèles Fichiers XSLT Analytique + Vues partielles + Fichiers Macro pour les vues partielles Nouvelle mise à jour disponible @@ -1307,6 +1498,14 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à Valider comme Url ...ou introduisez une validation spécifique Champ obligatoire + Introduisez une expression régulière + Vous devez ajouter au moins + Vous ne pouvez avoir que + éléments + éléments sélectionnés + Date non valide + Pas un nombre + Email non valide