From 45a958902c48139ae7b58f00dbe64fe28a8f16db Mon Sep 17 00:00:00 2001 From: Renaud Paquay Date: Wed, 24 Nov 2010 10:17:38 -0800 Subject: [PATCH 01/70] Make command line stack trace more readable Work Items: 16861 --HG-- branch : dev --- src/Orchard/Commands/CommandHostAgent.cs | 48 +++++++++++++++++------- 1 file changed, 35 insertions(+), 13 deletions(-) diff --git a/src/Orchard/Commands/CommandHostAgent.cs b/src/Orchard/Commands/CommandHostAgent.cs index c2a279406..46e7e4254 100644 --- a/src/Orchard/Commands/CommandHostAgent.cs +++ b/src/Orchard/Commands/CommandHostAgent.cs @@ -95,11 +95,11 @@ namespace Orchard.Commands { } catch (OrchardCommandHostRetryException e) { // Special "Retry" return code for our host - output.WriteLine("{0} (Retrying...)", e.Message); + output.WriteLine(T("{0} (Retrying...)", e.Message)); return CommandReturnCodes.Retry; } catch (Exception e) { - OutputException(output, e); + OutputException(output, T("Error executing command \"{0}\"", string.Join(" ", args)), e); return CommandReturnCodes.Fail; } } @@ -111,11 +111,11 @@ namespace Orchard.Commands { } catch (OrchardCommandHostRetryException e) { // Special "Retry" return code for our host - output.WriteLine("{0} (Retrying...)", e.Message); + output.WriteLine(T("{0} (Retrying...)", e.Message)); return CommandReturnCodes.Retry; } catch (Exception e) { - OutputException(output, e); + OutputException(output, T("Error starting up Orchard command line host"), e); return CommandReturnCodes.Fail; } } @@ -129,20 +129,42 @@ namespace Orchard.Commands { return CommandReturnCodes.Ok; } catch (Exception e) { - OutputException(output, e); + OutputException(output, T("Error shutting down Orchard command line host"), e); return CommandReturnCodes.Fail; } } - private void OutputException(TextWriter output, Exception e) { - for (int i = 0; e != null; e = e.InnerException, i++) { - if (i > 0) { - output.WriteLine("---- Inner Exception -----------------------------------------------------------------------"); - } - output.WriteLine("Error: {0}", e.Message); - output.WriteLine(" Exception Type: {0}", e.GetType().FullName); - output.WriteLine("{0}", e.StackTrace); + private void OutputException(TextWriter output, LocalizedString title, Exception exception) { + // Display header + output.WriteLine(); + output.WriteLine(T("{0}", title)); + output.WriteLine(T("--------------------------------------------------------------------------------")); + + // Push exceptions in a stack so we display from inner most to outer most + var errors = new Stack(); + for (var scan = exception; scan != null; scan = scan.InnerException) { + errors.Push(scan); } + + // Display inner most exception details + exception = errors.Peek(); + output.WriteLine(T("{0}", exception.Message)); + output.WriteLine(); + output.WriteLine(T("Exception Details: {0}: {1}", exception.GetType().FullName, exception.Message)); + output.WriteLine(); + output.WriteLine(T("Stack Trace:")); + output.WriteLine(); + + // Display exceptions from inner most to outer most + foreach(var error in errors) { + output.WriteLine(T("[{0}: {1}]", error.GetType().Name, error.Message)); + output.WriteLine(T("{0}", error.StackTrace)); + output.WriteLine(); + } + + // Display footer + output.WriteLine("--------------------------------------------------------------------------------"); + output.WriteLine(); } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")] From 3681b30e2b8148a0f058d103a0b2054b70ca89d4 Mon Sep 17 00:00:00 2001 From: Renaud Paquay Date: Wed, 24 Nov 2010 10:21:26 -0800 Subject: [PATCH 02/70] Fixing up whitespaces --HG-- branch : dev --- Orchard.proj | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/Orchard.proj b/Orchard.proj index 27c19a333..338995199 100644 --- a/Orchard.proj +++ b/Orchard.proj @@ -63,7 +63,7 @@ - + @@ -123,7 +123,7 @@ - + @@ -134,8 +134,8 @@ - - + + @@ -195,11 +195,11 @@ - + - + @@ -232,7 +232,7 @@ $(StageFolder)\**\Modules\Orchard.MultiTenancy\**; $(StageFolder)\**\Modules\Orchard.Search\**; " /> - + @@ -321,12 +321,12 @@ - + - + @@ -338,10 +338,10 @@ ReplacementText="${1}${2}:${3}$(Version)" IgnoreCase="True"/> - + Date: Wed, 24 Nov 2010 11:52:15 -0800 Subject: [PATCH 03/70] Validate modules/themes project files during build We check for a few things: - MVC2/3 tooling guid - "None Include" elements (these often happen for .cshtml files) - Output Path not set to "bin\" - FxCop ruleset not set to Orchard ruleset (disabled for now) Work Items: 16821 --HG-- branch : dev --- Orchard.proj | 18 +- .../MSBuild.Orchard.Tasks.csproj | 1 + .../ValidateExtensionProjectFiles.cs | 179 ++++++++++++++++++ 3 files changed, 196 insertions(+), 2 deletions(-) create mode 100644 src/Tools/MSBuild.Orchard.Tasks/ValidateExtensionProjectFiles.cs diff --git a/Orchard.proj b/Orchard.proj index 338995199..19c5d5f56 100644 --- a/Orchard.proj +++ b/Orchard.proj @@ -120,10 +120,12 @@ + - + + @@ -322,7 +324,19 @@ - + + + + + + + + + + + + + diff --git a/src/Tools/MSBuild.Orchard.Tasks/MSBuild.Orchard.Tasks.csproj b/src/Tools/MSBuild.Orchard.Tasks/MSBuild.Orchard.Tasks.csproj index 073f221a7..09c62de6e 100644 --- a/src/Tools/MSBuild.Orchard.Tasks/MSBuild.Orchard.Tasks.csproj +++ b/src/Tools/MSBuild.Orchard.Tasks/MSBuild.Orchard.Tasks.csproj @@ -66,6 +66,7 @@ + diff --git a/src/Tools/MSBuild.Orchard.Tasks/ValidateExtensionProjectFiles.cs b/src/Tools/MSBuild.Orchard.Tasks/ValidateExtensionProjectFiles.cs new file mode 100644 index 000000000..07456659e --- /dev/null +++ b/src/Tools/MSBuild.Orchard.Tasks/ValidateExtensionProjectFiles.cs @@ -0,0 +1,179 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Xml; +using System.Xml.Linq; +using Microsoft.Build.Framework; +using Microsoft.Build.Utilities; + +namespace MSBuild.Orchard.Tasks { + /// + /// Validate various aspect of a set of Module/Theme project files + /// + public class ValidateExtensionProjectFiles : Task { + public ITaskItem[] Files { get; set; } + + public override bool Execute() { + bool result = true; + + foreach (var item in Files) { + try { + ValidateFile(item); + } + catch (Exception e) { + Log.LogError("Error validating project file \"{0}\"", item); + Log.LogErrorFromException(e); + result = false; + } + } + return result; + } + + private void ValidateFile(ITaskItem item) { + Log.LogMessage("Validating \"{0}\"", item); + + var errors = new Validator(item).Validate(); + + if (errors.Any()) { + foreach (var error in errors) { + Log.LogError("", "", "", error.FileName, error.LineNumber, error.ColumnNumber, 0, 0, "{0}", error.Message); + } + } + else { + Log.LogMessage("Project file \"{0}\" is valid", item); + } + } + + public class Validator { + private const string Xmlns = "http://schemas.microsoft.com/developer/msbuild/2003"; + private static readonly XName Project = XName.Get("Project", Xmlns); + private static readonly XName PropertyGroup = XName.Get("PropertyGroup", Xmlns); + private static readonly XName ItemGroup = XName.Get("ItemGroup", Xmlns); + private static readonly XName ProjectTypeGuids = XName.Get("ProjectTypeGuids", Xmlns); + private static readonly XName OutputPath = XName.Get("OutputPath", Xmlns); + private static readonly XName None = XName.Get("None", Xmlns); + private static readonly XName Content = XName.Get("Content", Xmlns); + private static readonly XName Include = XName.Get("Include"); // No XmlNs: this is an attribute + private static readonly XName CodeAnalysisRuleSet = XName.Get("CodeAnalysisRuleSet", Xmlns); + + private static readonly Guid[] MvcGuids = new Guid[] { + new Guid("{F85E285D-A4E0-4152-9332-AB1D724D3325}") /* MVC2 */, + new Guid("{E53F8FEA-EAE0-44A6-8774-FFD645390401}") /* MVC3 */ + }; + + private readonly ITaskItem _item; + private readonly List _validationErrors = new List(); + + public Validator(ITaskItem item) { + _item = item; + } + + public IEnumerable Validate() { + XDocument document = XDocument.Load(_item.ItemSpec, LoadOptions.SetLineInfo); + CheckProjectType(document); + CheckOutputPath(document); + //CheckCodeAnalysisRuleSet(document); + CheckContentFiles(document); + return _validationErrors; + } + + private void AddValidationError(XElement element, string message) { + var error = new Error { + Message = message, + XElement = element, + FileName = _item.ItemSpec, + LineNumber = (element as IXmlLineInfo).LineNumber, + ColumnNumber = (element as IXmlLineInfo).LinePosition, + }; + _validationErrors.Add(error); + } + + private void CheckContentFiles(XDocument document) { + var elements = document + .Elements(Project) + .Elements(ItemGroup) + .Elements(None); + + foreach (var element in elements) { + var include = (element.Attribute(Include) == null ? null : element.Attribute(Include).Value); + bool isValid = string.IsNullOrEmpty(include); + if (!isValid) { + string message = string.Format( + "\"{0}\" element name for include \"{1}\" should be \"{2}\".", + element.Name.LocalName, include, Content.LocalName); + AddValidationError(element, message); + } + } + } + + private void CheckCodeAnalysisRuleSet(XDocument document) { + const string orchardbasiccorrectnessRuleset = "OrchardBasicCorrectness.ruleset"; + + var elements = document + .Elements(Project) + .Elements(PropertyGroup) + .Elements(CodeAnalysisRuleSet); + + foreach (var element in elements) { + var filename = Path.GetFileName(element.Value); + bool isValid = StringComparer.OrdinalIgnoreCase.Equals(filename, orchardbasiccorrectnessRuleset); + if (!isValid) { + string message = string.Format( + "\"{0}\" element should be \"{1}\" instead of \"{2}\".", + element.Name.LocalName, orchardbasiccorrectnessRuleset, element.Value); + AddValidationError(element, message); + } + } + } + + private void CheckOutputPath(XDocument document) { + var elements = document + .Elements(Project) + .Elements(PropertyGroup) + .Elements(OutputPath); + + foreach (var element in elements) { + bool isValid = + StringComparer.OrdinalIgnoreCase.Equals(element.Value, "bin") || + StringComparer.OrdinalIgnoreCase.Equals(element.Value, "bin\\"); + + if (!isValid) { + string message = string.Format( + "\"{0}\" element should be \"bin\\\" instead of \"{1}\".", + element.Name.LocalName, element.Value); + AddValidationError(element, message); + } + } + } + + private void CheckProjectType(XDocument document) { + var elements = document + .Elements(Project) + .Elements(PropertyGroup) + .Elements(ProjectTypeGuids); + foreach (var element in elements) { + var guids = element.Value.Split(new char[] { ';' }).Select(g => Guid.Parse(g)); + + foreach (var guid in guids) { + if (MvcGuids.Contains(guid)) { + string message = string.Format( + "\"{0}\" element contains an MVC tooling Guid. " + + " This prevents the project from loading in Visual Studio if MVC tooling is not installed.", + ProjectTypeGuids.LocalName); + AddValidationError(element, message); + } + } + } + } + + public class Error { + public string Message { get; set; } + public XElement XElement { get; set; } + public string FileName { get; set; } + public int LineNumber { get; set; } + public int ColumnNumber { get; set; } + } + } + } +} From 26dcce0116a47865f854657cdfb9f042d509ec7d Mon Sep 17 00:00:00 2001 From: Renaud Paquay Date: Wed, 24 Nov 2010 11:56:47 -0800 Subject: [PATCH 04/70] Fix errors detected by project validation task --HG-- branch : dev --- .../Modules/Orchard.Messaging/Orchard.Messaging.csproj | 2 +- src/Orchard.Web/Modules/Orchard.Tags/Orchard.Tags.csproj | 2 +- src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj | 4 ++-- src/Orchard.Web/Themes/Themes.csproj | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Messaging/Orchard.Messaging.csproj b/src/Orchard.Web/Modules/Orchard.Messaging/Orchard.Messaging.csproj index 0b9df346b..fc9cf20a7 100644 --- a/src/Orchard.Web/Modules/Orchard.Messaging/Orchard.Messaging.csproj +++ b/src/Orchard.Web/Modules/Orchard.Messaging/Orchard.Messaging.csproj @@ -26,7 +26,7 @@ pdbonly true - bin\Release\ + bin\ TRACE prompt 4 diff --git a/src/Orchard.Web/Modules/Orchard.Tags/Orchard.Tags.csproj b/src/Orchard.Web/Modules/Orchard.Tags/Orchard.Tags.csproj index e019d6461..f2a81d580 100644 --- a/src/Orchard.Web/Modules/Orchard.Tags/Orchard.Tags.csproj +++ b/src/Orchard.Web/Modules/Orchard.Tags/Orchard.Tags.csproj @@ -105,7 +105,7 @@ Designer - + diff --git a/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj b/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj index 9c04cbea1..8099ad4df 100644 --- a/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj +++ b/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj @@ -120,8 +120,8 @@ - - + + diff --git a/src/Orchard.Web/Themes/Themes.csproj b/src/Orchard.Web/Themes/Themes.csproj index 0a4f3c192..edd3c2d09 100644 --- a/src/Orchard.Web/Themes/Themes.csproj +++ b/src/Orchard.Web/Themes/Themes.csproj @@ -66,9 +66,9 @@ - + Designer - + From 9143df72fdf259259d84c5567b4369070a5c971c Mon Sep 17 00:00:00 2001 From: Andre Rodrigues Date: Wed, 24 Nov 2010 13:44:17 -0800 Subject: [PATCH 05/70] #16847: Moving readonly fields outside of form post. --HG-- branch : dev --- .../Views/Admin/EditMedia.cshtml | 90 ++++++++----------- 1 file changed, 38 insertions(+), 52 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/EditMedia.cshtml b/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/EditMedia.cshtml index 311ccac8d..c99882e08 100644 --- a/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/EditMedia.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/EditMedia.cshtml @@ -13,62 +13,48 @@ new {name = navigation.FolderName, mediaPath = navigation.FolderPath}) > } @T("Edit Media")

- - + +
- @using (Html.BeginFormAntiForgeryPost()) { - @Html.ValidationSummary() -
-
- -
-
- @* todo: make these real (including markup) *@ -
- @* *@ - - - - -
-
- - - @T("Copy this html to add this image to your site.") -
- +
+
+ +
+ + @* todo: make these real (including markup) *@ +
+ @* *@ + + + + +
+ +
+ + + @T("Copy this html to add this image to your site.") +
+ + @using (Html.BeginFormAntiForgeryPost()) { + @Html.ValidationSummary() +
- - -
+ + +
- - - - -
-
-
+ + + + +
+ + +
-
- @* -
-

@T("Preview")

-
-
    - @// todo: make these real (including markup) -
  • -
  • -
  • -
  • - - ", ResolveUrl("~/Media/" + Model.RelativePath + "/" + Model.Name), 500, 375)" /> - @T("Copy this html to add this image to your site.")

    -
  • -
-
- *@ - } + } + \ No newline at end of file From b77e52244bfc118c0d5e8a32778c962744a80171 Mon Sep 17 00:00:00 2001 From: Andre Rodrigues Date: Wed, 24 Nov 2010 13:45:49 -0800 Subject: [PATCH 06/70] Moving permissions to initial validations. Removing if/else for form post and using annotation instead. --HG-- branch : dev --- .../Controllers/AdminController.cs | 114 +++++++++++------- 1 file changed, 68 insertions(+), 46 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Media/Controllers/AdminController.cs b/src/Orchard.Web/Modules/Orchard.Media/Controllers/AdminController.cs index f5b2fe736..45eeea110 100644 --- a/src/Orchard.Web/Modules/Orchard.Media/Controllers/AdminController.cs +++ b/src/Orchard.Web/Modules/Orchard.Media/Controllers/AdminController.cs @@ -3,15 +3,12 @@ using System.Collections.Generic; using System.IO; using System.Web; using System.Web.Mvc; -using JetBrains.Annotations; -using Orchard.ContentManagement; +using Orchard.Core.Contents.Controllers; using Orchard.Localization; using Orchard.Media.Models; using Orchard.Media.Services; using Orchard.Media.ViewModels; -using Orchard.Settings; using Orchard.UI.Notify; -using Orchard.Utility.Extensions; namespace Orchard.Media.Controllers { [ValidateInput(false)] @@ -56,11 +53,13 @@ namespace Orchard.Media.Controllers { [HttpPost] public ActionResult Create() { + if (!Services.Authorizer.Authorize(Permissions.ManageMediaFiles, T("Couldn't create media folder"))) + return new HttpUnauthorizedResult(); + var viewModel = new MediaFolderCreateViewModel(); try { UpdateModel(viewModel); - if (!Services.Authorizer.Authorize(Permissions.ManageMediaFiles, T("Couldn't create media folder"))) - return new HttpUnauthorizedResult(); + _mediaService.CreateFolder(viewModel.MediaPath, viewModel.Name); return RedirectToAction("Index"); } @@ -109,24 +108,16 @@ namespace Orchard.Media.Controllers { return View(model); } - [HttpPost] - public ActionResult EditProperties() { + [HttpPost, ActionName("EditProperties")] + [FormValueRequired("submit.Delete")] + public ActionResult EditPropertiesDeletePOST() { var viewModel = new MediaFolderEditPropertiesViewModel(); try { UpdateModel(viewModel); - //TODO: There may be better ways to do this. - // Delete - if (!String.IsNullOrEmpty(HttpContext.Request.Form["submit.Delete"])) { - if (!Services.Authorizer.Authorize(Permissions.ManageMediaFiles, T("Couldn't delete media folder"))) - return new HttpUnauthorizedResult(); - _mediaService.DeleteFolder(viewModel.MediaPath); - } - // Save - else { - if (!Services.Authorizer.Authorize(Permissions.ManageMediaFiles, T("Couldn't rename media folder"))) - return new HttpUnauthorizedResult(); - _mediaService.RenameFolder(viewModel.MediaPath, viewModel.Name); - } + + if (!Services.Authorizer.Authorize(Permissions.ManageMediaFiles, T("Couldn't delete media folder"))) + return new HttpUnauthorizedResult(); + _mediaService.DeleteFolder(viewModel.MediaPath); return RedirectToAction("Index"); } @@ -136,6 +127,25 @@ namespace Orchard.Media.Controllers { } } + [HttpPost, ActionName("EditProperties")] + [FormValueRequired("submit.Save")] + public ActionResult EditProperties() { + if (!Services.Authorizer.Authorize(Permissions.ManageMediaFiles, T("Couldn't rename media folder"))) + return new HttpUnauthorizedResult(); + + var viewModel = new MediaFolderEditPropertiesViewModel(); + try { + UpdateModel(viewModel); + + _mediaService.RenameFolder(viewModel.MediaPath, viewModel.Name); + + return RedirectToAction("Index"); + } catch (Exception exception) { + Services.Notifier.Error(T("Modifying Folder Properties failed: {0}", exception.Message)); + return View(viewModel); + } + } + public ActionResult Add(string folderName, string mediaPath) { var model = new MediaItemAddViewModel { FolderName = folderName, MediaPath = mediaPath }; return View(model); @@ -143,11 +153,12 @@ namespace Orchard.Media.Controllers { [HttpPost] public ActionResult Add() { + if (!Services.Authorizer.Authorize(Permissions.UploadMediaFiles, T("Couldn't upload media file"))) + return new HttpUnauthorizedResult(); + var viewModel = new MediaItemAddViewModel(); try { UpdateModel(viewModel); - if (!Services.Authorizer.Authorize(Permissions.UploadMediaFiles, T("Couldn't upload media file"))) - return new HttpUnauthorizedResult(); if(String.IsNullOrWhiteSpace(Request.Files[0].FileName)) { ModelState.AddModelError("File", T("Select a file to upload").ToString()); @@ -180,11 +191,12 @@ namespace Orchard.Media.Controllers { [HttpPost] public ContentResult AddFromClient() { + if (!Services.Authorizer.Authorize(Permissions.UploadMediaFiles)) + return Content(string.Format("", T("ERROR: You don't have permission to upload media files"))); + var viewModel = new MediaItemAddViewModel(); try { UpdateModel(viewModel); - if (!Services.Authorizer.Authorize(Permissions.UploadMediaFiles)) - return Content(string.Format("", T("ERROR: You don't have permission to upload media files"))); if (Request.Files.Count < 1 || Request.Files[0].ContentLength == 0) return Content(string.Format("", T("HEY: You didn't give me a file to upload"))); @@ -220,32 +232,42 @@ namespace Orchard.Media.Controllers { return View(model); } - [HttpPost] - public ActionResult EditMedia(FormCollection input) { + [HttpPost, ActionName("EditMedia")] + [FormValueRequired("submit.Delete")] + public ActionResult EditMediaDeletePOST(FormCollection input) { + if (!Services.Authorizer.Authorize(Permissions.ManageMediaFiles, T("Couldn't delete media file"))) + return new HttpUnauthorizedResult(); + var viewModel = new MediaItemEditViewModel(); try { UpdateModel(viewModel); - if (!Services.Authorizer.Authorize(Permissions.ManageMediaFiles, T("Couldn't modify media file"))) - return new HttpUnauthorizedResult(); - // Delete - if (!String.IsNullOrEmpty(HttpContext.Request.Form["submit.Delete"])) { - if (!Services.Authorizer.Authorize(Permissions.ManageMediaFiles, T("Couldn't delete media file"))) - return new HttpUnauthorizedResult(); - _mediaService.DeleteFile(viewModel.Name, viewModel.MediaPath); - return RedirectToAction("Edit", new { name = viewModel.FolderName, mediaPath = viewModel.MediaPath }); - } - // Save and Rename + + _mediaService.DeleteFile(viewModel.Name, viewModel.MediaPath); + return RedirectToAction("Edit", new { name = viewModel.FolderName, mediaPath = viewModel.MediaPath }); + } catch (Exception exception) { + Services.Notifier.Error(T("Removing media file failed: {0}", exception.Message)); + return View(viewModel); + } + } + + [HttpPost, ActionName("EditMedia")] + [FormValueRequired("submit.Save")] + public ActionResult EditMedia(FormCollection input) { + if (!Services.Authorizer.Authorize(Permissions.ManageMediaFiles, T("Couldn't modify media file"))) + return new HttpUnauthorizedResult(); + + var viewModel = new MediaItemEditViewModel(); + try { + UpdateModel(viewModel); + string viewModelName = viewModel.Name; + + // Rename if (!String.Equals(viewModel.Name, input["NewName"], StringComparison.OrdinalIgnoreCase)) { _mediaService.RenameFile(viewModel.Name, input["NewName"], viewModel.MediaPath); - return RedirectToAction("EditMedia", new { name = input["NewName"], - caption = viewModel.Caption, - lastUpdated = viewModel.LastUpdated, - size = viewModel.Size, - folderName = viewModel.FolderName, - mediaPath = viewModel.MediaPath }); + viewModelName = input["NewName"]; } - // Save - return RedirectToAction("EditMedia", new { name = viewModel.Name, + + return RedirectToAction("EditMedia", new { name = viewModelName, caption = viewModel.Caption, lastUpdated = viewModel.LastUpdated, size = viewModel.Size, @@ -258,4 +280,4 @@ namespace Orchard.Media.Controllers { } } } -} +} \ No newline at end of file From 26524253782d271f8d6e597f3b1f10e598511e26 Mon Sep 17 00:00:00 2001 From: Andre Rodrigues Date: Wed, 24 Nov 2010 14:10:33 -0800 Subject: [PATCH 07/70] #16864 Making invalid rename to fail. --HG-- branch : dev --- .../Modules/Orchard.Media/Controllers/AdminController.cs | 5 +++-- .../Modules/Orchard.Media/Services/MediaService.cs | 6 ++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Media/Controllers/AdminController.cs b/src/Orchard.Web/Modules/Orchard.Media/Controllers/AdminController.cs index 45eeea110..ba6b08c0d 100644 --- a/src/Orchard.Web/Modules/Orchard.Media/Controllers/AdminController.cs +++ b/src/Orchard.Web/Modules/Orchard.Media/Controllers/AdminController.cs @@ -111,12 +111,13 @@ namespace Orchard.Media.Controllers { [HttpPost, ActionName("EditProperties")] [FormValueRequired("submit.Delete")] public ActionResult EditPropertiesDeletePOST() { + if (!Services.Authorizer.Authorize(Permissions.ManageMediaFiles, T("Couldn't delete media folder"))) + return new HttpUnauthorizedResult(); + var viewModel = new MediaFolderEditPropertiesViewModel(); try { UpdateModel(viewModel); - if (!Services.Authorizer.Authorize(Permissions.ManageMediaFiles, T("Couldn't delete media folder"))) - return new HttpUnauthorizedResult(); _mediaService.DeleteFolder(viewModel.MediaPath); return RedirectToAction("Index"); diff --git a/src/Orchard.Web/Modules/Orchard.Media/Services/MediaService.cs b/src/Orchard.Web/Modules/Orchard.Media/Services/MediaService.cs index e990545bb..459264f0e 100644 --- a/src/Orchard.Web/Modules/Orchard.Media/Services/MediaService.cs +++ b/src/Orchard.Web/Modules/Orchard.Media/Services/MediaService.cs @@ -83,9 +83,11 @@ namespace Orchard.Media.Services { } public void RenameFile(string name, string newName, string folderName) { - if (FileAllowed(newName, false)) { - _storageProvider.RenameFile(_storageProvider.Combine(folderName, name), _storageProvider.Combine(folderName, newName)); + if (!FileAllowed(newName, false)) { + throw new ArgumentException("New file name " + newName + " not allowed."); } + + _storageProvider.RenameFile(_storageProvider.Combine(folderName, name), _storageProvider.Combine(folderName, newName)); } public string UploadMediaFile(string folderName, HttpPostedFileBase postedFile) { From 81018a76d254fd475ef4d84ddadac80461b57527 Mon Sep 17 00:00:00 2001 From: Renaud Paquay Date: Wed, 24 Nov 2010 14:28:15 -0800 Subject: [PATCH 08/70] Orchard.exe commands should be case-insensitive Make commands and switch case insensitive. Also change the property value code to use "System.Convert" instead of hand-coded convertion code. Work Items: 16590 --HG-- branch : dev --- .../Commands/DefaultOrchardCommandHandler.cs | 69 +++++++++---------- .../Commands/OrchardSwitchesAttribute.cs | 18 +++-- 2 files changed, 41 insertions(+), 46 deletions(-) diff --git a/src/Orchard/Commands/DefaultOrchardCommandHandler.cs b/src/Orchard/Commands/DefaultOrchardCommandHandler.cs index bd323ea95..df74cfa06 100644 --- a/src/Orchard/Commands/DefaultOrchardCommandHandler.cs +++ b/src/Orchard/Commands/DefaultOrchardCommandHandler.cs @@ -13,54 +13,50 @@ namespace Orchard.Commands { public Localizer T { get; set; } public CommandContext Context { get; set; } - #region Implementation of ICommandHandler - public void Execute(CommandContext context) { SetSwitchValues(context); Invoke(context); } - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", MessageId = "System.Int32.TryParse(System.String,System.Int32@)")] - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", MessageId = "System.Boolean.TryParse(System.String,System.Boolean@)")] private void SetSwitchValues(CommandContext context) { if (context.Switches != null && context.Switches.Any()) { foreach (var commandSwitch in context.Switches) { - PropertyInfo propertyInfo = GetType().GetProperty(commandSwitch.Key); - if (propertyInfo == null) { - throw new InvalidOperationException(T("Switch \"{0}\" was not found", commandSwitch.Key).Text); - } - if (propertyInfo.GetCustomAttributes(typeof(OrchardSwitchAttribute), false).Length == 0) { - throw new InvalidOperationException(T("A property \"{0}\" exists but is not decorated with \"{1}\"", commandSwitch.Key, typeof(OrchardSwitchAttribute).Name).Text); - } - if (propertyInfo.PropertyType.IsAssignableFrom(typeof(bool))) { - bool boolValue; - // todo: might be better to throw here if TryParse returns false instead of silently using 'false', to catch types (e.g. 'ture') - Boolean.TryParse(commandSwitch.Value, out boolValue); - propertyInfo.SetValue(this, boolValue, null); - } - else if (propertyInfo.PropertyType.IsAssignableFrom(typeof(int))) { - int intValue; - // todo: might be better to throw here if TryParse returns false instead of silently using 0 value - Int32.TryParse(commandSwitch.Value, out intValue); - propertyInfo.SetValue(this, intValue, null); - } - else if (propertyInfo.PropertyType.IsAssignableFrom(typeof(string))) { - propertyInfo.SetValue(this, commandSwitch.Value, null); - } - else { - throw new InvalidOperationException(T("No property named \"{0}\" found of type bool, int or string.", commandSwitch).Text); - } + SetSwitchValue(commandSwitch); } } } + private void SetSwitchValue(KeyValuePair commandSwitch) { + // Find the property + PropertyInfo propertyInfo = GetType().GetProperty(commandSwitch.Key, BindingFlags.Instance | BindingFlags.Public | BindingFlags.IgnoreCase); + if (propertyInfo == null) { + throw new ArgumentException(T("Switch \"{0}\" was not found", commandSwitch.Key).Text); + } + if (propertyInfo.GetCustomAttributes(typeof(OrchardSwitchAttribute), false).Length == 0) { + throw new ArgumentException(T("A property \"{0}\" exists but is not decorated with \"{1}\"", commandSwitch.Key, typeof(OrchardSwitchAttribute).Name).Text); + } + + // Set the value + try { + object value = Convert.ChangeType(commandSwitch.Value, propertyInfo.PropertyType); + propertyInfo.SetValue(this, value, null/*index*/); + } + catch(Exception e) { + string message = T("Error converting value \"{0}\" to \"{1}\" for switch \"{2}\"", + LocalizedString.TextOrDefault(commandSwitch.Value, T("(empty)")), + propertyInfo.PropertyType.FullName, + commandSwitch.Key).Text; + throw new ArgumentException(message, e); + } + } + private void Invoke(CommandContext context) { CheckMethodForSwitches(context.CommandDescriptor.MethodInfo, context.Switches); var arguments = (context.Arguments ?? Enumerable.Empty()).ToArray(); object[] invokeParameters = GetInvokeParametersForMethod(context.CommandDescriptor.MethodInfo, arguments); if (invokeParameters == null) { - throw new InvalidOperationException(T("Command arguments \"{0}\" don't match command definition", string.Join(" ", arguments)).ToString()); + throw new ArgumentException(T("Command arguments \"{0}\" don't match command definition", string.Join(" ", arguments)).ToString()); } this.Context = context; @@ -76,7 +72,8 @@ namespace Orchard.Commands { bool methodHasParams = false; if (methodParameters.Length == 0) { - if (args.Count == 0) return invokeParameters.ToArray(); + if (args.Count == 0) + return invokeParameters.ToArray(); return null; } @@ -103,17 +100,17 @@ namespace Orchard.Commands { private void CheckMethodForSwitches(MethodInfo methodInfo, IDictionary switches) { if (switches == null || switches.Count == 0) return; - var supportedSwitches = new List(); + + var supportedSwitches = new HashSet(StringComparer.OrdinalIgnoreCase); foreach (OrchardSwitchesAttribute switchesAttribute in methodInfo.GetCustomAttributes(typeof(OrchardSwitchesAttribute), false)) { - supportedSwitches.AddRange(switchesAttribute.SwitchName); + supportedSwitches.UnionWith(switchesAttribute.Switches); } + foreach (var commandSwitch in switches.Keys) { if (!supportedSwitches.Contains(commandSwitch)) { - throw new InvalidOperationException(T("Method \"{0}\" does not support switch \"{1}\".", methodInfo.Name, commandSwitch).ToString()); + throw new ArgumentException(T("Method \"{0}\" does not support switch \"{1}\".", methodInfo.Name, commandSwitch).ToString()); } } } - - #endregion } } diff --git a/src/Orchard/Commands/OrchardSwitchesAttribute.cs b/src/Orchard/Commands/OrchardSwitchesAttribute.cs index b83bb06f5..9c0eda27a 100644 --- a/src/Orchard/Commands/OrchardSwitchesAttribute.cs +++ b/src/Orchard/Commands/OrchardSwitchesAttribute.cs @@ -1,22 +1,20 @@ using System; using System.Collections.Generic; +using System.Linq; namespace Orchard.Commands { [AttributeUsage(AttributeTargets.Method)] public class OrchardSwitchesAttribute : Attribute { - private readonly IEnumerable _switches; + private readonly string _switches; public OrchardSwitchesAttribute(string switches) { - List switchList = new List(); - foreach (var s in switches.Split(',')) { - switchList.Add(s.Trim()); + _switches = switches; + } + + public IEnumerable Switches { + get { + return (_switches ?? "").Trim().Split(',').Select(s => s.Trim()); } - _switches = switchList; } - - public IEnumerable SwitchName { - get { return _switches; } - } - } } From fd4c58d4b40081a2314491a485c0b696bc32211e Mon Sep 17 00:00:00 2001 From: Andre Rodrigues Date: Wed, 24 Nov 2010 15:19:14 -0800 Subject: [PATCH 09/70] Initializing localizer Adding information notifications Adding localization invocations where necessary Replacing tabs for spaces in views --HG-- branch : dev --- .../Modules/Orchard.Media/AdminMenu.cs | 6 ++++- .../Controllers/AdminController.cs | 18 +++++++++++-- .../Orchard.Media/Helpers/MediaHelpers.cs | 2 +- .../Orchard.Media/Models/MediaSettingsPart.cs | 1 - .../Models/MediaSettingsPartRecord.cs | 3 +-- .../Orchard.Media/Services/MediaService.cs | 9 ++++--- .../Orchard.Media/Views/Admin/Add.cshtml | 6 ++--- .../Orchard.Media/Views/Admin/Create.cshtml | 16 +++++------ .../Views/Admin/EditMedia.cshtml | 2 +- .../Views/Admin/EditProperties.cshtml | 7 +++-- .../Media/FileSystemStorageProvider.cs | 27 +++++++++++-------- 11 files changed, 59 insertions(+), 38 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Media/AdminMenu.cs b/src/Orchard.Web/Modules/Orchard.Media/AdminMenu.cs index 3b8f4f804..38a9ac151 100644 --- a/src/Orchard.Web/Modules/Orchard.Media/AdminMenu.cs +++ b/src/Orchard.Web/Modules/Orchard.Media/AdminMenu.cs @@ -5,6 +5,10 @@ namespace Orchard.Media { public class AdminMenu : INavigationProvider { public Localizer T { get; set; } + public AdminMenu() { + T = NullLocalizer.Instance; + } + public string MenuName { get { return "admin"; } } public void GetNavigation(NavigationBuilder builder) { @@ -13,4 +17,4 @@ namespace Orchard.Media { .Permission(Permissions.ManageMediaFiles))); } } -} +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Media/Controllers/AdminController.cs b/src/Orchard.Web/Modules/Orchard.Media/Controllers/AdminController.cs index ba6b08c0d..a8c7552b2 100644 --- a/src/Orchard.Web/Modules/Orchard.Media/Controllers/AdminController.cs +++ b/src/Orchard.Web/Modules/Orchard.Media/Controllers/AdminController.cs @@ -18,6 +18,8 @@ namespace Orchard.Media.Controllers { public AdminController(IOrchardServices services, IMediaService mediaService) { Services = services; _mediaService = mediaService; + + T = NullLocalizer.Instance; } public IOrchardServices Services { get; set;} @@ -61,6 +63,8 @@ namespace Orchard.Media.Controllers { UpdateModel(viewModel); _mediaService.CreateFolder(viewModel.MediaPath, viewModel.Name); + + Services.Notifier.Information(T("Media folder created")); return RedirectToAction("Index"); } catch (Exception exception) { @@ -86,6 +90,8 @@ namespace Orchard.Media.Controllers { if (!Services.Authorizer.Authorize(Permissions.ManageMediaFiles, T("Couldn't delete media file"))) return new HttpUnauthorizedResult(); _mediaService.DeleteFile(fileName, folderName); + + Services.Notifier.Information(T("Media file deleted")); } else if (key.StartsWith("Checkbox.Folder.") && input[key] == "true") { string folderName = key.Substring("Checkbox.Folder.".Length); @@ -93,6 +99,8 @@ namespace Orchard.Media.Controllers { if (!Services.Authorizer.Authorize(Permissions.ManageMediaFiles, T("Couldn't delete media folder"))) return new HttpUnauthorizedResult(); _mediaService.DeleteFolder(folderPath); + + Services.Notifier.Information(T("Media folder deleted")); } } return RedirectToAction("Index"); @@ -120,10 +128,11 @@ namespace Orchard.Media.Controllers { _mediaService.DeleteFolder(viewModel.MediaPath); + Services.Notifier.Information(T("Media folder deleted")); return RedirectToAction("Index"); } catch (Exception exception) { - Services.Notifier.Error(T("Modifying Folder Properties failed: {0}", exception.Message)); + Services.Notifier.Error(T("Deleting media folder failed: {0}", exception.Message)); return View(viewModel); } } @@ -140,9 +149,10 @@ namespace Orchard.Media.Controllers { _mediaService.RenameFolder(viewModel.MediaPath, viewModel.Name); + Services.Notifier.Information(T("Media folder properties modified")); return RedirectToAction("Index"); } catch (Exception exception) { - Services.Notifier.Error(T("Modifying Folder Properties failed: {0}", exception.Message)); + Services.Notifier.Error(T("Modifying media folder properties failed: {0}", exception.Message)); return View(viewModel); } } @@ -182,6 +192,7 @@ namespace Orchard.Media.Controllers { _mediaService.UploadMediaFile(viewModel.MediaPath, file); } + Services.Notifier.Information(T("Media file(s) uploaded")); return RedirectToAction("Edit", new { name = viewModel.FolderName, mediaPath = viewModel.MediaPath }); } catch (Exception exception) { @@ -244,6 +255,8 @@ namespace Orchard.Media.Controllers { UpdateModel(viewModel); _mediaService.DeleteFile(viewModel.Name, viewModel.MediaPath); + + Services.Notifier.Information(T("Media deleted")); return RedirectToAction("Edit", new { name = viewModel.FolderName, mediaPath = viewModel.MediaPath }); } catch (Exception exception) { Services.Notifier.Error(T("Removing media file failed: {0}", exception.Message)); @@ -268,6 +281,7 @@ namespace Orchard.Media.Controllers { viewModelName = input["NewName"]; } + Services.Notifier.Information(T("Media information updated")); return RedirectToAction("EditMedia", new { name = viewModelName, caption = viewModel.Caption, lastUpdated = viewModel.LastUpdated, diff --git a/src/Orchard.Web/Modules/Orchard.Media/Helpers/MediaHelpers.cs b/src/Orchard.Web/Modules/Orchard.Media/Helpers/MediaHelpers.cs index f9cadb0b7..d66cfab42 100644 --- a/src/Orchard.Web/Modules/Orchard.Media/Helpers/MediaHelpers.cs +++ b/src/Orchard.Web/Modules/Orchard.Media/Helpers/MediaHelpers.cs @@ -25,4 +25,4 @@ namespace Orchard.Media.Helpers { return navigations; } } -} +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Media/Models/MediaSettingsPart.cs b/src/Orchard.Web/Modules/Orchard.Media/Models/MediaSettingsPart.cs index 39228bf9c..f4123e9b6 100644 --- a/src/Orchard.Web/Modules/Orchard.Media/Models/MediaSettingsPart.cs +++ b/src/Orchard.Web/Modules/Orchard.Media/Models/MediaSettingsPart.cs @@ -1,5 +1,4 @@ using Orchard.ContentManagement; -using System; namespace Orchard.Media.Models { public class MediaSettingsPart : ContentPart { diff --git a/src/Orchard.Web/Modules/Orchard.Media/Models/MediaSettingsPartRecord.cs b/src/Orchard.Web/Modules/Orchard.Media/Models/MediaSettingsPartRecord.cs index 758732576..8260d9c47 100644 --- a/src/Orchard.Web/Modules/Orchard.Media/Models/MediaSettingsPartRecord.cs +++ b/src/Orchard.Web/Modules/Orchard.Media/Models/MediaSettingsPartRecord.cs @@ -1,6 +1,5 @@ -using System.Net.Mail; -using Orchard.ContentManagement.Records; using System.ComponentModel.DataAnnotations; +using Orchard.ContentManagement.Records; namespace Orchard.Media.Models { public class MediaSettingsPartRecord : ContentPartRecord { diff --git a/src/Orchard.Web/Modules/Orchard.Media/Services/MediaService.cs b/src/Orchard.Web/Modules/Orchard.Media/Services/MediaService.cs index 459264f0e..2a5087227 100644 --- a/src/Orchard.Web/Modules/Orchard.Media/Services/MediaService.cs +++ b/src/Orchard.Web/Modules/Orchard.Media/Services/MediaService.cs @@ -6,7 +6,7 @@ using ICSharpCode.SharpZipLib.Zip; using JetBrains.Annotations; using Orchard.ContentManagement; using Orchard.FileSystems.Media; -using Orchard.Logging; +using Orchard.Localization; using Orchard.Media.Models; namespace Orchard.Media.Services { @@ -18,10 +18,11 @@ namespace Orchard.Media.Services { public MediaService(IStorageProvider storageProvider, IOrchardServices orchardServices) { _storageProvider = storageProvider; _orchardServices = orchardServices; - Logger = NullLogger.Instance; + + T = NullLocalizer.Instance; } - public ILogger Logger { get; set; } + public Localizer T { get; set; } public string GetPublicUrl(string path) { return _storageProvider.GetPublicUrl(path); @@ -84,7 +85,7 @@ namespace Orchard.Media.Services { public void RenameFile(string name, string newName, string folderName) { if (!FileAllowed(newName, false)) { - throw new ArgumentException("New file name " + newName + " not allowed."); + throw new ArgumentException(T("New file name {0} not allowed", newName).ToString()); } _storageProvider.RenameFile(_storageProvider.Combine(folderName, name), _storageProvider.Combine(folderName, newName)); diff --git a/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/Add.cshtml b/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/Add.cshtml index 81ecc38c4..fa2482645 100644 --- a/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/Add.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/Add.cshtml @@ -17,12 +17,12 @@
- @T("After your files have been uploaded, you can edit the titles and descriptions.") + @T("After your files have been uploaded, you can edit the titles and descriptions.")
- @Html.AntiForgeryTokenOrchard() -
+ @Html.AntiForgeryTokenOrchard() + } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/Create.cshtml b/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/Create.cshtml index 3267dbdec..e743a0723 100644 --- a/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/Create.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/Create.cshtml @@ -6,20 +6,20 @@

@Html.TitleForPage(T("Add a Folder").ToString())

- + @using (Html.BeginFormAntiForgeryPost()) { @Html.ValidationSummary()
- - + +
-
+
} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/EditMedia.cshtml b/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/EditMedia.cshtml index c99882e08..4cb9c1686 100644 --- a/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/EditMedia.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/EditMedia.cshtml @@ -24,7 +24,7 @@ @* todo: make these real (including markup) *@
@* *@ - + diff --git a/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/EditProperties.cshtml b/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/EditProperties.cshtml index 47fcf198a..ae06bbcaa 100644 --- a/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/EditProperties.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Media/Views/Admin/EditProperties.cshtml @@ -9,7 +9,6 @@ @foreach (FolderNavigation navigation in MediaHelpers.GetFolderNavigationHierarchy(Model.MediaPath)) { @Html.ActionLink(navigation.FolderName, "Edit", new {name = navigation.FolderName, mediaPath = navigation.FolderPath}) > - } @T("Folder Properties")

@@ -18,10 +17,10 @@ @Html.ValidationSummary()
- - + +
-
+
diff --git a/src/Orchard/FileSystems/Media/FileSystemStorageProvider.cs b/src/Orchard/FileSystems/Media/FileSystemStorageProvider.cs index 5d7a16f48..26472144b 100644 --- a/src/Orchard/FileSystems/Media/FileSystemStorageProvider.cs +++ b/src/Orchard/FileSystems/Media/FileSystemStorageProvider.cs @@ -5,6 +5,7 @@ using System.IO; using System.Linq; using System.Web.Hosting; using Orchard.Environment.Configuration; +using Orchard.Localization; namespace Orchard.FileSystems.Media { public class FileSystemStorageProvider : IStorageProvider { @@ -28,8 +29,12 @@ namespace Orchard.FileSystems.Media { appPath = '/' + appPath; _publicPath = appPath + "Media/" + settings.Name + "/"; + + T = NullLocalizer.Instance; } + public Localizer T { get; set; } + string Map(string path) { return string.IsNullOrEmpty(path) ? _storagePath : Path.Combine(_storagePath, path); } @@ -51,14 +56,14 @@ namespace Orchard.FileSystems.Media { public IStorageFile GetFile(string path) { if (!File.Exists(Map(path))) { - throw new ArgumentException("File " + path + " does not exist"); + throw new ArgumentException(T("File {0} does not exist", path).ToString()); } return new FileSystemStorageFile(Fix(path), new FileInfo(Map(path))); } public IEnumerable ListFiles(string path) { if (!Directory.Exists(Map(path))) { - throw new ArgumentException("Directory " + path + " does not exist"); + throw new ArgumentException(T("Directory {0} does not exist", path).ToString()); } return new DirectoryInfo(Map(path)) @@ -74,7 +79,7 @@ namespace Orchard.FileSystems.Media { Directory.CreateDirectory(Map(path)); } catch (Exception ex) { - throw new ArgumentException(string.Format("The folder could not be created at path: {0}. {1}", path, ex)); + throw new ArgumentException(T("The folder could not be created at path: {0}. {1}", path, ex).ToString()); } } @@ -91,7 +96,7 @@ namespace Orchard.FileSystems.Media { public void CreateFolder(string path) { if (Directory.Exists(Map(path))) { - throw new ArgumentException("Directory " + path + " already exists"); + throw new ArgumentException(T("Directory {0} already exists", path).ToString()); } Directory.CreateDirectory(Map(path)); @@ -99,7 +104,7 @@ namespace Orchard.FileSystems.Media { public void DeleteFolder(string path) { if (!Directory.Exists(Map(path))) { - throw new ArgumentException("Directory " + path + " does not exist"); + throw new ArgumentException(T("Directory {0} does not exist", path).ToString()); } Directory.Delete(Map(path), true); @@ -107,11 +112,11 @@ namespace Orchard.FileSystems.Media { public void RenameFolder(string path, string newPath) { if (!Directory.Exists(Map(path))) { - throw new ArgumentException("Directory " + path + "does not exist"); + throw new ArgumentException(T("Directory {0} does not exist", path).ToString()); } if (Directory.Exists(Map(newPath))) { - throw new ArgumentException("Directory " + newPath + " already exists"); + throw new ArgumentException(T("Directory {0} already exists", newPath).ToString()); } Directory.Move(Map(path), Map(newPath)); @@ -119,7 +124,7 @@ namespace Orchard.FileSystems.Media { public IStorageFile CreateFile(string path) { if (File.Exists(Map(path))) { - throw new ArgumentException("File " + path + " already exists"); + throw new ArgumentException(T("File {0} already exists", path).ToString()); } var fileInfo = new FileInfo(Map(path)); @@ -130,7 +135,7 @@ namespace Orchard.FileSystems.Media { public void DeleteFile(string path) { if (!File.Exists(Map(path))) { - throw new ArgumentException("File " + path + " does not exist"); + throw new ArgumentException(T("File {0} does not exist", path).ToString()); } File.Delete(Map(path)); @@ -138,11 +143,11 @@ namespace Orchard.FileSystems.Media { public void RenameFile(string path, string newPath) { if (!File.Exists(Map(path))) { - throw new ArgumentException("File " + path + " does not exist"); + throw new ArgumentException(T("File {0} does not exist", path).ToString()); } if (File.Exists(Map(newPath))) { - throw new ArgumentException("File " + newPath + " already exists"); + throw new ArgumentException(T("File {0} already exists", newPath).ToString()); } File.Move(Map(path), Map(newPath)); From 67a45f1c09993dc959571687c862e9394f177b1c Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Wed, 24 Nov 2010 15:24:11 -0800 Subject: [PATCH 10/70] Validating content type names, and displaying technical names Work Item: 16471 --HG-- branch : dev --- src/Orchard.Specs/ContentTypes.feature | 84 ++++++ src/Orchard.Specs/ContentTypes.feature.cs | 276 ++++++++++++++++++ src/Orchard.Specs/Orchard.Specs.csproj | 9 + .../Controllers/AdminController.cs | 23 +- .../Services/ContentDefinitionService.cs | 33 ++- .../Services/IContentDefinitionService.cs | 4 +- .../ViewModels/CreateTypeViewModel.cs | 1 + .../Views/Admin/Create.cshtml | 32 +- .../Views/Admin/Edit.cshtml | 2 +- 9 files changed, 446 insertions(+), 18 deletions(-) create mode 100644 src/Orchard.Specs/ContentTypes.feature create mode 100644 src/Orchard.Specs/ContentTypes.feature.cs diff --git a/src/Orchard.Specs/ContentTypes.feature b/src/Orchard.Specs/ContentTypes.feature new file mode 100644 index 000000000..cb994d201 --- /dev/null +++ b/src/Orchard.Specs/ContentTypes.feature @@ -0,0 +1,84 @@ +Feature: Content Types + In order to add new types to my site + As an adminitrator + I want to create create content types + +Scenario: I can create a new content type + Given I have installed Orchard + And I have installed "Orchard.ContentTypes" + When I go to "Admin/ContentTypes" + Then I should see "]*>.*?Create new type" + When I go to "Admin/ContentTypes/Create" + And I fill in + | name | value | + | DisplayName | Event | + | Name | Event | + And I hit "Create" + And I go to "Admin/ContentTypes/" + Then I should see "Event" + +Scenario: I can't create a content type with an already existing name + Given I have installed Orchard + And I have installed "Orchard.ContentTypes" + When I go to "Admin/ContentTypes/Create" + And I fill in + | name | value | + | DisplayName | Event | + | Name | Event | + And I hit "Create" + And I go to "Admin/ContentTypes/" + Then I should see "Event" + When I go to "Admin/ContentTypes/Create" + And I fill in + | name | value | + | DisplayName | Event | + | Name | Event-2 | + And I hit "Create" + Then I should see "]*>.*?New Content Type.*?" + And I should see "validation-summary-errors" + +Scenario: I can't create a content type with an already existing technical name + Given I have installed Orchard + And I have installed "Orchard.ContentTypes" + When I go to "Admin/ContentTypes/Create" + And I fill in + | name | value | + | DisplayName | Dinner | + | Name | Dinner | + And I hit "Create" + And I go to "Admin/ContentTypes/" + Then I should see "Dinner" + When I go to "Admin/ContentTypes/Create" + And I fill in + | name | value | + | DisplayName | Dinner2 | + | Name | Dinner | + And I hit "Create" + Then I should see "]*>.*?New Content Type.*?" + And I should see "validation-summary-errors" + +Scenario: I can't rename a content type with an already existing name + Given I have installed Orchard + And I have installed "Orchard.ContentTypes" + When I go to "Admin/ContentTypes/Create" + And I fill in + | name | value | + | DisplayName | Dinner | + | Name | Dinner | + And I hit "Create" + And I go to "Admin/ContentTypes/" + Then I should see "Dinner" + When I go to "Admin/ContentTypes/Create" + And I fill in + | name | value | + | DisplayName | Event | + | Name | Event | + And I hit "Create" + And I go to "Admin/ContentTypes/" + Then I should see "Event" + When I go to "Admin/ContentTypes/Edit/Dinner" + And I fill in + | name | value | + | DisplayName | Event | + And I hit "Save" + Then I should see "validation-summary-errors" diff --git a/src/Orchard.Specs/ContentTypes.feature.cs b/src/Orchard.Specs/ContentTypes.feature.cs new file mode 100644 index 000000000..1d5dc2ee1 --- /dev/null +++ b/src/Orchard.Specs/ContentTypes.feature.cs @@ -0,0 +1,276 @@ +// ------------------------------------------------------------------------------ +// +// This code was generated by SpecFlow (http://www.specflow.org/). +// SpecFlow Version:1.3.0.0 +// Runtime Version:4.0.30319.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +// ------------------------------------------------------------------------------ +#region Designer generated code +namespace Orchard.Specs +{ + using TechTalk.SpecFlow; + + + [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "1.3.0.0")] + [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [NUnit.Framework.TestFixtureAttribute()] + [NUnit.Framework.DescriptionAttribute("Content Types")] + public partial class ContentTypesFeature + { + + private static TechTalk.SpecFlow.ITestRunner testRunner; + +#line 1 "ContentTypes.feature" +#line hidden + + [NUnit.Framework.TestFixtureSetUpAttribute()] + public virtual void FeatureSetup() + { + testRunner = TechTalk.SpecFlow.TestRunnerManager.GetTestRunner(); + TechTalk.SpecFlow.FeatureInfo featureInfo = new TechTalk.SpecFlow.FeatureInfo(new System.Globalization.CultureInfo("en-US"), "Content Types", "In order to add new types to my site\r\nAs an adminitrator\r\nI want to create create" + + " content types", ((string[])(null))); + testRunner.OnFeatureStart(featureInfo); + } + + [NUnit.Framework.TestFixtureTearDownAttribute()] + public virtual void FeatureTearDown() + { + testRunner.OnFeatureEnd(); + testRunner = null; + } + + public virtual void ScenarioSetup(TechTalk.SpecFlow.ScenarioInfo scenarioInfo) + { + testRunner.OnScenarioStart(scenarioInfo); + } + + [NUnit.Framework.TearDownAttribute()] + public virtual void ScenarioTearDown() + { + testRunner.OnScenarioEnd(); + } + + [NUnit.Framework.TestAttribute()] + [NUnit.Framework.DescriptionAttribute("I can create a new content type")] + public virtual void ICanCreateANewContentType() + { + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("I can create a new content type", ((string[])(null))); +#line 6 +this.ScenarioSetup(scenarioInfo); +#line 7 +testRunner.Given("I have installed Orchard"); +#line 8 +testRunner.And("I have installed \"Orchard.ContentTypes\""); +#line 9 +testRunner.When("I go to \"Admin/ContentTypes\""); +#line 10 +testRunner.Then("I should see \"]*>.*?Create new type\""); +#line 11 +testRunner.When("I go to \"Admin/ContentTypes/Create\""); +#line hidden + TechTalk.SpecFlow.Table table1 = new TechTalk.SpecFlow.Table(new string[] { + "name", + "value"}); + table1.AddRow(new string[] { + "DisplayName", + "Event"}); + table1.AddRow(new string[] { + "Name", + "Event"}); +#line 12 +testRunner.And("I fill in", ((string)(null)), table1); +#line 16 +testRunner.And("I hit \"Create\""); +#line 17 +testRunner.And("I go to \"Admin/ContentTypes/\""); +#line 18 +testRunner.Then("I should see \"Event\""); +#line hidden + testRunner.CollectScenarioErrors(); + } + + [NUnit.Framework.TestAttribute()] + [NUnit.Framework.DescriptionAttribute("I can\'t create a content type with an already existing name")] + public virtual void ICanTCreateAContentTypeWithAnAlreadyExistingName() + { + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("I can\'t create a content type with an already existing name", ((string[])(null))); +#line 20 +this.ScenarioSetup(scenarioInfo); +#line 21 +testRunner.Given("I have installed Orchard"); +#line 22 +testRunner.And("I have installed \"Orchard.ContentTypes\""); +#line 23 +testRunner.When("I go to \"Admin/ContentTypes/Create\""); +#line hidden + TechTalk.SpecFlow.Table table2 = new TechTalk.SpecFlow.Table(new string[] { + "name", + "value"}); + table2.AddRow(new string[] { + "DisplayName", + "Event"}); + table2.AddRow(new string[] { + "Name", + "Event"}); +#line 24 +testRunner.And("I fill in", ((string)(null)), table2); +#line 28 +testRunner.And("I hit \"Create\""); +#line 29 +testRunner.And("I go to \"Admin/ContentTypes/\""); +#line 30 +testRunner.Then("I should see \"Event\""); +#line 31 +testRunner.When("I go to \"Admin/ContentTypes/Create\""); +#line hidden + TechTalk.SpecFlow.Table table3 = new TechTalk.SpecFlow.Table(new string[] { + "name", + "value"}); + table3.AddRow(new string[] { + "DisplayName", + "Event"}); + table3.AddRow(new string[] { + "Name", + "Event-2"}); +#line 32 +testRunner.And("I fill in", ((string)(null)), table3); +#line 36 +testRunner.And("I hit \"Create\""); +#line 37 +testRunner.Then("I should see \"]*>.*?New Content Type.*?\""); +#line 38 +testRunner.And("I should see \"validation-summary-errors\""); +#line hidden + testRunner.CollectScenarioErrors(); + } + + [NUnit.Framework.TestAttribute()] + [NUnit.Framework.DescriptionAttribute("I can\'t create a content type with an already existing technical name")] + public virtual void ICanTCreateAContentTypeWithAnAlreadyExistingTechnicalName() + { + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("I can\'t create a content type with an already existing technical name", ((string[])(null))); +#line 40 +this.ScenarioSetup(scenarioInfo); +#line 41 +testRunner.Given("I have installed Orchard"); +#line 42 +testRunner.And("I have installed \"Orchard.ContentTypes\""); +#line 43 +testRunner.When("I go to \"Admin/ContentTypes/Create\""); +#line hidden + TechTalk.SpecFlow.Table table4 = new TechTalk.SpecFlow.Table(new string[] { + "name", + "value"}); + table4.AddRow(new string[] { + "DisplayName", + "Dinner"}); + table4.AddRow(new string[] { + "Name", + "Dinner"}); +#line 44 +testRunner.And("I fill in", ((string)(null)), table4); +#line 48 +testRunner.And("I hit \"Create\""); +#line 49 +testRunner.And("I go to \"Admin/ContentTypes/\""); +#line 50 +testRunner.Then("I should see \"Dinner\""); +#line 51 +testRunner.When("I go to \"Admin/ContentTypes/Create\""); +#line hidden + TechTalk.SpecFlow.Table table5 = new TechTalk.SpecFlow.Table(new string[] { + "name", + "value"}); + table5.AddRow(new string[] { + "DisplayName", + "Dinner2"}); + table5.AddRow(new string[] { + "Name", + "Dinner"}); +#line 52 +testRunner.And("I fill in", ((string)(null)), table5); +#line 56 +testRunner.And("I hit \"Create\""); +#line 57 +testRunner.Then("I should see \"]*>.*?New Content Type.*?\""); +#line 58 +testRunner.And("I should see \"validation-summary-errors\""); +#line hidden + testRunner.CollectScenarioErrors(); + } + + [NUnit.Framework.TestAttribute()] + [NUnit.Framework.DescriptionAttribute("I can\'t rename a content type with an already existing name")] + public virtual void ICanTRenameAContentTypeWithAnAlreadyExistingName() + { + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("I can\'t rename a content type with an already existing name", ((string[])(null))); +#line 60 +this.ScenarioSetup(scenarioInfo); +#line 61 +testRunner.Given("I have installed Orchard"); +#line 62 +testRunner.And("I have installed \"Orchard.ContentTypes\""); +#line 63 +testRunner.When("I go to \"Admin/ContentTypes/Create\""); +#line hidden + TechTalk.SpecFlow.Table table6 = new TechTalk.SpecFlow.Table(new string[] { + "name", + "value"}); + table6.AddRow(new string[] { + "DisplayName", + "Dinner"}); + table6.AddRow(new string[] { + "Name", + "Dinner"}); +#line 64 +testRunner.And("I fill in", ((string)(null)), table6); +#line 68 +testRunner.And("I hit \"Create\""); +#line 69 +testRunner.And("I go to \"Admin/ContentTypes/\""); +#line 70 +testRunner.Then("I should see \"Dinner\""); +#line 71 +testRunner.When("I go to \"Admin/ContentTypes/Create\""); +#line hidden + TechTalk.SpecFlow.Table table7 = new TechTalk.SpecFlow.Table(new string[] { + "name", + "value"}); + table7.AddRow(new string[] { + "DisplayName", + "Event"}); + table7.AddRow(new string[] { + "Name", + "Event"}); +#line 72 +testRunner.And("I fill in", ((string)(null)), table7); +#line 76 +testRunner.And("I hit \"Create\""); +#line 77 +testRunner.And("I go to \"Admin/ContentTypes/\""); +#line 78 +testRunner.Then("I should see \"Event\""); +#line 79 +testRunner.When("I go to \"Admin/ContentTypes/Edit/Dinner\""); +#line hidden + TechTalk.SpecFlow.Table table8 = new TechTalk.SpecFlow.Table(new string[] { + "name", + "value"}); + table8.AddRow(new string[] { + "DisplayName", + "Event"}); +#line 80 +testRunner.And("I fill in", ((string)(null)), table8); +#line 83 +testRunner.And("I hit \"Save\""); +#line 84 +testRunner.Then("I should see \"validation-summary-errors\""); +#line hidden + testRunner.CollectScenarioErrors(); + } + } +} +#endregion diff --git a/src/Orchard.Specs/Orchard.Specs.csproj b/src/Orchard.Specs/Orchard.Specs.csproj index 748a34584..ef1f40764 100644 --- a/src/Orchard.Specs/Orchard.Specs.csproj +++ b/src/Orchard.Specs/Orchard.Specs.csproj @@ -142,6 +142,11 @@ True True + + ContentTypes.feature + True + True + SiteCompilation.feature @@ -228,6 +233,10 @@ SpecFlowSingleFileGenerator ContentRights.feature.cs + + SpecFlowSingleFileGenerator + ContentTypes.feature.cs + SpecFlowSingleFileGenerator SiteCompilation.feature.cs diff --git a/src/Orchard.Web/Modules/Orchard.ContentTypes/Controllers/AdminController.cs b/src/Orchard.Web/Modules/Orchard.ContentTypes/Controllers/AdminController.cs index f4d408d2e..61cc18316 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentTypes/Controllers/AdminController.cs +++ b/src/Orchard.Web/Modules/Orchard.ContentTypes/Controllers/AdminController.cs @@ -47,8 +47,12 @@ namespace Orchard.ContentTypes.Controllers { if(String.IsNullOrWhiteSpace(viewModel.DisplayName)) { ModelState.AddModelError("DisplayName", T("The Content Type name can't be empty.").ToString()); } + + if ( _contentDefinitionService.GetTypes().Any(t => String.Equals(t.Name.Trim(), viewModel.Name.Trim(), StringComparison.OrdinalIgnoreCase)) ) { + ModelState.AddModelError("Name", T("A type with the same technical name already exists.").ToString()); + } - if(_contentDefinitionService.GetTypes().Any(t => t.DisplayName == viewModel.DisplayName)) { + if ( _contentDefinitionService.GetTypes().Any(t => String.Equals(t.DisplayName.Trim(), viewModel.DisplayName.Trim(), StringComparison.OrdinalIgnoreCase)) ) { ModelState.AddModelError("DisplayName", T("A type with the same name already exists.").ToString()); } @@ -57,13 +61,19 @@ namespace Orchard.ContentTypes.Controllers { return View(viewModel); } - var typeViewModel = _contentDefinitionService.AddType(viewModel); + var contentTypeDefinition = _contentDefinitionService.AddType(viewModel.Name, viewModel.DisplayName); + var typeViewModel = new EditTypeViewModel(contentTypeDefinition); + Services.Notifier.Information(T("The \"{0}\" content type has been created.", typeViewModel.DisplayName)); return RedirectToAction("Edit", new { id = typeViewModel.Name }); } + public ActionResult ContentTypeName(string displayName) { + return Json(_contentDefinitionService.GenerateName(displayName)); + } + public ActionResult Edit(string id) { if (!Services.Authorizer.Authorize(Permissions.CreateContentTypes, T("Not allowed to edit a content type."))) return new HttpUnauthorizedResult(); @@ -90,9 +100,18 @@ namespace Orchard.ContentTypes.Controllers { TryUpdateModel(edited); typeViewModel.DisplayName = edited.DisplayName; + if ( String.IsNullOrWhiteSpace(typeViewModel.DisplayName) ) { + ModelState.AddModelError("DisplayName", T("The Content Type name can't be empty.").ToString()); + } + + if ( _contentDefinitionService.GetTypes().Any(t => String.Equals(t.DisplayName.Trim(), typeViewModel.DisplayName.Trim(), StringComparison.OrdinalIgnoreCase) && !String.Equals(t.Name, id)) ) { + ModelState.AddModelError("DisplayName", T("A type with the same name already exists.").ToString()); + } + if (!ModelState.IsValid) return View(typeViewModel); + _contentDefinitionService.AlterType(typeViewModel, this); if (!ModelState.IsValid) { diff --git a/src/Orchard.Web/Modules/Orchard.ContentTypes/Services/ContentDefinitionService.cs b/src/Orchard.Web/Modules/Orchard.ContentTypes/Services/ContentDefinitionService.cs index 9c3d936af..de42386e3 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentTypes/Services/ContentDefinitionService.cs +++ b/src/Orchard.Web/Modules/Orchard.ContentTypes/Services/ContentDefinitionService.cs @@ -65,18 +65,24 @@ namespace Orchard.ContentTypes.Services { return viewModel; } - public EditTypeViewModel AddType(CreateTypeViewModel typeViewModel) { - var name = GenerateName(typeViewModel.DisplayName); + public ContentTypeDefinition AddType(string name, string displayName) { + if(String.IsNullOrWhiteSpace(displayName)) { + throw new ArgumentException("displayName"); + } - while (_contentDefinitionManager.GetTypeDefinition(name) != null) + if(String.IsNullOrWhiteSpace(name)) { + name = GenerateName(displayName); + } + + while ( _contentDefinitionManager.GetTypeDefinition(name) != null ) name = VersionName(name); - var contentTypeDefinition = new ContentTypeDefinition(name, typeViewModel.DisplayName); + var contentTypeDefinition = new ContentTypeDefinition(name, displayName); _contentDefinitionManager.StoreTypeDefinition(contentTypeDefinition); _contentDefinitionManager.AlterTypeDefinition(name, cfg => cfg.Creatable().Draftable()); - return new EditTypeViewModel(contentTypeDefinition); + return contentTypeDefinition; } public void AlterType(EditTypeViewModel typeViewModel, IUpdateModel updateModel) { @@ -210,20 +216,21 @@ namespace Orchard.ContentTypes.Services { } //gratuitously stolen from the RoutableService - private static string GenerateName(string displayName) { - if (string.IsNullOrWhiteSpace(displayName)) - return ""; + public string GenerateName(string name) { + if ( string.IsNullOrWhiteSpace(name) ) + return String.Empty; - var name = displayName; - //todo: might need to be made more restrictive depending on how name is used (like as an XML node name, for instance) - var dissallowed = new Regex(@"[/:?#\[\]@!$&'()*+,;=\s]+"); + var dissallowed = new Regex(@"[/:?#\[\]@!$&'()*+,;=\s\""<>]+"); - name = dissallowed.Replace(name, "-"); - name = name.Trim('-'); + name = dissallowed.Replace(name, String.Empty); + name = name.Trim(); if (name.Length > 128) name = name.Substring(0, 128); + while ( _contentDefinitionManager.GetTypeDefinition(name) != null ) + name = VersionName(name); + return name; } diff --git a/src/Orchard.Web/Modules/Orchard.ContentTypes/Services/IContentDefinitionService.cs b/src/Orchard.Web/Modules/Orchard.ContentTypes/Services/IContentDefinitionService.cs index 70c59e4a7..44fc6b8ae 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentTypes/Services/IContentDefinitionService.cs +++ b/src/Orchard.Web/Modules/Orchard.ContentTypes/Services/IContentDefinitionService.cs @@ -1,17 +1,19 @@ using System.Collections.Generic; using Orchard.ContentManagement; using Orchard.ContentManagement.MetaData; +using Orchard.ContentManagement.MetaData.Models; using Orchard.ContentTypes.ViewModels; namespace Orchard.ContentTypes.Services { public interface IContentDefinitionService : IDependency { IEnumerable GetTypes(); EditTypeViewModel GetType(string name); - EditTypeViewModel AddType(CreateTypeViewModel typeViewModel); + ContentTypeDefinition AddType(string name, string displayName); void AlterType(EditTypeViewModel typeViewModel, IUpdateModel updater); void RemoveType(string name); void AddPartToType(string partName, string typeName); void RemovePartFromType(string partName, string typeName); + string GenerateName(string displayName); IEnumerable GetParts(); EditPartViewModel GetPart(string name); diff --git a/src/Orchard.Web/Modules/Orchard.ContentTypes/ViewModels/CreateTypeViewModel.cs b/src/Orchard.Web/Modules/Orchard.ContentTypes/ViewModels/CreateTypeViewModel.cs index 29a57e6e6..a53768699 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentTypes/ViewModels/CreateTypeViewModel.cs +++ b/src/Orchard.Web/Modules/Orchard.ContentTypes/ViewModels/CreateTypeViewModel.cs @@ -1,5 +1,6 @@ namespace Orchard.ContentTypes.ViewModels { public class CreateTypeViewModel { public string DisplayName { get; set; } + public string Name { get; set; } } } diff --git a/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/Admin/Create.cshtml b/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/Admin/Create.cshtml index fe3758232..847f21fa9 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/Admin/Create.cshtml +++ b/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/Admin/Create.cshtml @@ -1,10 +1,40 @@ @model Orchard.ContentTypes.ViewModels.CreateTypeViewModel +

@Html.TitleForPage(T("New Content Type").ToString())

@using (Html.BeginFormAntiForgeryPost()) { @Html.ValidationSummary()
@Html.TextBoxFor(m => m.DisplayName, new {@class = "textMedium", autofocus = "autofocus"}) + + @Html.TextBoxFor(m => m.Name, new {@class = "text"})
-
} \ No newline at end of file +
} + +@using(Script.Foot()){ + +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/Admin/Edit.cshtml b/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/Admin/Edit.cshtml index 22520e69c..7e50efb4b 100644 --- a/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/Admin/Edit.cshtml +++ b/src/Orchard.Web/Modules/Orchard.ContentTypes/Views/Admin/Edit.cshtml @@ -12,7 +12,7 @@ @Html.ValidationSummary()
- @Html.TextBoxFor(m => m.DisplayName, new { @class = "textMedium" }) + @Html.TextBoxFor(m => m.DisplayName, new { @class = "textMedium" }) @T("Technical name: {0}", Model.Name) @* todo: if we continue to go down the midrodata route, some helpers would be nice *@ @* has unintended consequences (renamging the type) - changing the name creates a new type of that name *@ From b84a4f74e8b3dc981c8e8d8f01686b8cc5773dc9 Mon Sep 17 00:00:00 2001 From: Andre Rodrigues Date: Wed, 24 Nov 2010 15:50:01 -0800 Subject: [PATCH 11/70] Fixing a few more unlocalized exceptions. --HG-- branch : dev --- .../Modules/Orchard.Roles/Services/RoleService.cs | 4 ++-- src/Orchard/FileSystems/Media/FileSystemStorageProvider.cs | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Roles/Services/RoleService.cs b/src/Orchard.Web/Modules/Orchard.Roles/Services/RoleService.cs index 051150e49..9e6815a38 100644 --- a/src/Orchard.Web/Modules/Orchard.Roles/Services/RoleService.cs +++ b/src/Orchard.Web/Modules/Orchard.Roles/Services/RoleService.cs @@ -84,7 +84,7 @@ namespace Orchard.Roles.Services { } } } - throw new ArgumentException("Permission " + permissionName + " was not found in any of the installed modules."); + throw new ArgumentException(T("Permission {0} was not found in any of the installed modules.", permissionName).ToString()); } private string GetPermissionDescription(string permissionName) { @@ -95,7 +95,7 @@ namespace Orchard.Roles.Services { } } } - throw new ArgumentException("Permission " + permissionName + " was not found in any of the installed modules."); + throw new ArgumentException(T("Permission {0} was not found in any of the installed modules.", permissionName).ToString()); } public void DeleteRole(int id) { diff --git a/src/Orchard/FileSystems/Media/FileSystemStorageProvider.cs b/src/Orchard/FileSystems/Media/FileSystemStorageProvider.cs index 26472144b..19e024a59 100644 --- a/src/Orchard/FileSystems/Media/FileSystemStorageProvider.cs +++ b/src/Orchard/FileSystems/Media/FileSystemStorageProvider.cs @@ -208,8 +208,12 @@ namespace Orchard.FileSystems.Media { public FileSystemStorageFolder(string path, DirectoryInfo directoryInfo) { _path = path; _directoryInfo = directoryInfo; + + T = NullLocalizer.Instance; } + public Localizer T { get; set; } + #region Implementation of IStorageFolder public string GetPath() { @@ -232,7 +236,7 @@ namespace Orchard.FileSystems.Media { if (_directoryInfo.Parent != null) { return new FileSystemStorageFolder(Path.GetDirectoryName(_path), _directoryInfo.Parent); } - throw new ArgumentException("Directory " + _directoryInfo.Name + " does not have a parent directory"); + throw new ArgumentException(T("Directory {0} does not have a parent directory", _directoryInfo.Name).ToString()); } #endregion From de0a0724920d741a7c3e259a2eca43203f620853 Mon Sep 17 00:00:00 2001 From: Renaud Paquay Date: Wed, 24 Nov 2010 15:58:48 -0800 Subject: [PATCH 12/70] Fix unit tests --HG-- branch : dev --- src/Orchard/Commands/DefaultOrchardCommandHandler.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Orchard/Commands/DefaultOrchardCommandHandler.cs b/src/Orchard/Commands/DefaultOrchardCommandHandler.cs index df74cfa06..c91762cf7 100644 --- a/src/Orchard/Commands/DefaultOrchardCommandHandler.cs +++ b/src/Orchard/Commands/DefaultOrchardCommandHandler.cs @@ -30,10 +30,10 @@ namespace Orchard.Commands { // Find the property PropertyInfo propertyInfo = GetType().GetProperty(commandSwitch.Key, BindingFlags.Instance | BindingFlags.Public | BindingFlags.IgnoreCase); if (propertyInfo == null) { - throw new ArgumentException(T("Switch \"{0}\" was not found", commandSwitch.Key).Text); + throw new InvalidOperationException(T("Switch \"{0}\" was not found", commandSwitch.Key).Text); } if (propertyInfo.GetCustomAttributes(typeof(OrchardSwitchAttribute), false).Length == 0) { - throw new ArgumentException(T("A property \"{0}\" exists but is not decorated with \"{1}\"", commandSwitch.Key, typeof(OrchardSwitchAttribute).Name).Text); + throw new InvalidOperationException(T("A property \"{0}\" exists but is not decorated with \"{1}\"", commandSwitch.Key, typeof(OrchardSwitchAttribute).Name).Text); } // Set the value @@ -46,7 +46,7 @@ namespace Orchard.Commands { LocalizedString.TextOrDefault(commandSwitch.Value, T("(empty)")), propertyInfo.PropertyType.FullName, commandSwitch.Key).Text; - throw new ArgumentException(message, e); + throw new InvalidOperationException(message, e); } } @@ -56,7 +56,7 @@ namespace Orchard.Commands { var arguments = (context.Arguments ?? Enumerable.Empty()).ToArray(); object[] invokeParameters = GetInvokeParametersForMethod(context.CommandDescriptor.MethodInfo, arguments); if (invokeParameters == null) { - throw new ArgumentException(T("Command arguments \"{0}\" don't match command definition", string.Join(" ", arguments)).ToString()); + throw new InvalidOperationException(T("Command arguments \"{0}\" don't match command definition", string.Join(" ", arguments)).ToString()); } this.Context = context; @@ -108,7 +108,7 @@ namespace Orchard.Commands { foreach (var commandSwitch in switches.Keys) { if (!supportedSwitches.Contains(commandSwitch)) { - throw new ArgumentException(T("Method \"{0}\" does not support switch \"{1}\".", methodInfo.Name, commandSwitch).ToString()); + throw new InvalidOperationException(T("Method \"{0}\" does not support switch \"{1}\".", methodInfo.Name, commandSwitch).ToString()); } } } From c8fbbbe53e4188b559cd851c812191b77268ca26 Mon Sep 17 00:00:00 2001 From: Renaud Paquay Date: Wed, 24 Nov 2010 16:03:08 -0800 Subject: [PATCH 13/70] Adding Unit Test to very case insensitive behavior --HG-- branch : dev --- src/Orchard.Tests/Commands/CommandHandlerTests.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/Orchard.Tests/Commands/CommandHandlerTests.cs b/src/Orchard.Tests/Commands/CommandHandlerTests.cs index 8e994dd8b..053ff2040 100644 --- a/src/Orchard.Tests/Commands/CommandHandlerTests.cs +++ b/src/Orchard.Tests/Commands/CommandHandlerTests.cs @@ -75,6 +75,14 @@ namespace Orchard.Tests.Commands { Assert.That(commandContext.CommandDescriptor.HelpText, Is.EqualTo(string.Empty)); } + [Test] + public void TestCaseInsensitiveForCommand() { + var commandContext = CreateCommandContext("BAZ", new Dictionary { { "VERBOSE", "true" } }); + _handler.Execute(commandContext); + Assert.That(commandContext.Output.ToString(), Is.EqualTo("Command Baz Called : This was a test")); + } + + [Test] public void TestBooleanSwitchForCommand() { var commandContext = CreateCommandContext("Baz", new Dictionary {{"Verbose", "true"}}); From d94666aac039f3c9118f8ddb21dc4289d1f43fe1 Mon Sep 17 00:00:00 2001 From: Andre Rodrigues Date: Wed, 24 Nov 2010 16:10:08 -0800 Subject: [PATCH 14/70] Replace tabs for spaces in views, css and cs files. --HG-- branch : dev --- .../Views/Parts/Common.Body.Summary.cshtml | 4 +- .../Core/Contents/Views/Admin/Create.cshtml | 2 +- .../Core/Contents/Views/Admin/Edit.cshtml | 10 +- .../Core/Reports/Views/Admin/Display.cshtml | 34 +- .../Core/Reports/Views/Admin/Index.cshtml | 34 +- .../Parts/Routable.RoutePart.cshtml | 30 +- .../Core/Shapes/Views/Document.cshtml | 2 +- src/Orchard.Web/Core/Shapes/Views/Menu.cshtml | 2 +- .../Parts/Blogs.BlogArchives.cshtml | 2 +- .../Parts/Blogs.RecentBlogPosts.cshtml | 2 +- .../Views/Admin/Details.cshtml | 40 +-- .../Orchard.Comments/Views/Admin/Edit.cshtml | 2 +- .../Orchard.Comments/Views/Admin/Index.cshtml | 40 +-- .../Views/Parts/Comments.cshtml | 10 +- .../Views/Admin/Edit.cshtml | 2 +- .../Views/Admin/EditPart.cshtml | 2 +- .../Views/Commands/Execute.cshtml | 10 +- .../Views/DumpShapeTable.cshtml | 14 +- .../Views/ShapeTable/ShapeTable.cshtml | 18 +- .../Views/ThinBorder.cshtml | 6 +- .../DefaultIndexingUpdater.cs | 2 +- .../Orchard.Indexing/Settings/EditorEvents.cs | 2 +- .../Orchard.Indexing/Views/Admin/Index.cshtml | 3 +- .../Views/Admin/Add.cshtml | 8 +- .../ActionsForDisabled.cshtml | 4 +- .../DisplayTemplates/ActionsForRunning.cshtml | 4 +- .../Views/Admin/Edit.cshtml | 12 +- .../Views/Admin/Index.cshtml | 4 +- .../Controllers/GalleryController.cs | 3 +- .../Views/Gallery/AddSource.cshtml | 4 +- .../Views/Gallery/Modules.cshtml | 1 - .../Views/Gallery/Sources.cshtml | 28 +- .../Orchard.Roles/Views/Admin/Create.cshtml | 6 +- .../Orchard.Roles/Views/Admin/Edit.cshtml | 84 ++--- .../Orchard.Tags/Views/Admin/Edit.cshtml | 22 +- .../Orchard.Tags/Views/Admin/Index.cshtml | 14 +- .../Orchard.Tags/Views/Home/Search.cshtml | 8 +- .../Views/Parts/Tags.ShowTags.cshtml | 14 +- .../Styles/orchard-themes-admin.css | 10 +- .../Orchard.Themes/Views/Admin/Index.cshtml | 92 +++--- .../Orchard.Themes/Views/Admin/Install.cshtml | 4 +- .../Orchard.Themes/Views/ThemePreview.cshtml | 22 +- .../Controllers/AccountController.cs | 2 +- .../Services/MembershipService.cs | 5 +- .../Styles/orchard-widgets-admin.css | 28 +- .../Orchard.jQuery/Styles/ui.timepickr.css | 10 +- .../TinyMce/Views/Body-Html.Editor.cshtml | 2 +- .../Themes/SafeMode/Styles/ie6.css | 16 +- .../Themes/SafeMode/Styles/site.css | 112 +++---- .../Themes/SafeMode/Views/Document.cshtml | 4 +- .../Themes/TheAdmin/Styles/ie6.css | 28 +- .../Themes/TheAdmin/Styles/site.css | 302 +++++++++--------- .../Themes/TheAdmin/Views/Layout.cshtml | 2 +- .../Themes/TheAdmin/Views/Menu.cshtml | 6 +- .../Themes/TheThemeMachine/Styles/Site.css | 216 ++++++------- src/Orchard/Mvc/Html/ContainerExtensions.cs | 2 - src/Orchard/Mvc/ViewPage.cs | 2 +- src/Orchard/UI/Resources/ResourceManager.cs | 1 - 58 files changed, 676 insertions(+), 679 deletions(-) diff --git a/src/Orchard.Web/Core/Common/Views/Parts/Common.Body.Summary.cshtml b/src/Orchard.Web/Core/Common/Views/Parts/Common.Body.Summary.cshtml index 874a5fb9c..df01f3a7e 100644 --- a/src/Orchard.Web/Core/Common/Views/Parts/Common.Body.Summary.cshtml +++ b/src/Orchard.Web/Core/Common/Views/Parts/Common.Body.Summary.cshtml @@ -2,8 +2,8 @@ also, doing this here, inline, until we have a pluggable processing model (both in and out) also, ...this is ugly *@ @{ - Orchard.ContentManagement.ContentItem contentItem = Model.ContentPart.ContentItem; - string bodyHtml = Model.Html.ToString(); + Orchard.ContentManagement.ContentItem contentItem = Model.ContentPart.ContentItem; + string bodyHtml = Model.Html.ToString(); var body = new HtmlString(Html.Excerpt(bodyHtml, 200).ToString().Replace(Environment.NewLine, "

" + Environment.NewLine + "

")); }

@body @Html.ItemDisplayLink(T("more").ToString(), contentItem)

\ No newline at end of file diff --git a/src/Orchard.Web/Core/Contents/Views/Admin/Create.cshtml b/src/Orchard.Web/Core/Contents/Views/Admin/Create.cshtml index 8eecd5e1c..1af6b9171 100644 --- a/src/Orchard.Web/Core/Contents/Views/Admin/Create.cshtml +++ b/src/Orchard.Web/Core/Contents/Views/Admin/Create.cshtml @@ -1,6 +1,6 @@ @{ var typeDisplayName = Model.ContentItem.TypeDefinition.DisplayName; - var pageTitle = T("Create {0}", typeDisplayName); + var pageTitle = T("Create {0}", typeDisplayName); }

@Html.TitleForPage((string)pageTitle.Text)

@using (Html.BeginFormAntiForgeryPost()) { diff --git a/src/Orchard.Web/Core/Contents/Views/Admin/Edit.cshtml b/src/Orchard.Web/Core/Contents/Views/Admin/Edit.cshtml index 8f298bbb4..7cd4e1a3d 100644 --- a/src/Orchard.Web/Core/Contents/Views/Admin/Edit.cshtml +++ b/src/Orchard.Web/Core/Contents/Views/Admin/Edit.cshtml @@ -1,9 +1,9 @@ @{ - var typeDisplayName = Model.ContentItem.TypeDefinition.DisplayName; - var pageTitle = T("Edit Content"); - if (!string.IsNullOrWhiteSpace(typeDisplayName)) { - pageTitle = T("Edit {0}", typeDisplayName); - } + var typeDisplayName = Model.ContentItem.TypeDefinition.DisplayName; + var pageTitle = T("Edit Content"); + if (!string.IsNullOrWhiteSpace(typeDisplayName)) { + pageTitle = T("Edit {0}", typeDisplayName); + } }

@Html.TitleForPage(pageTitle)

@using (Html.BeginFormAntiForgeryPost()) { diff --git a/src/Orchard.Web/Core/Reports/Views/Admin/Display.cshtml b/src/Orchard.Web/Core/Reports/Views/Admin/Display.cshtml index d41f9bda4..e946f9ae8 100644 --- a/src/Orchard.Web/Core/Reports/Views/Admin/Display.cshtml +++ b/src/Orchard.Web/Core/Reports/Views/Admin/Display.cshtml @@ -2,23 +2,23 @@ @using Orchard.Core.Reports.ViewModels;

@Html.TitleForPage(T("Display Report").ToString())

@using(Html.BeginFormAntiForgeryPost()) { - @Html.ValidationSummary() -
- - - - - - - - - - - - - - - + @Html.ValidationSummary() +
+
@T("Type")@T("Message")@T("Date")
+ + + + + + + + + + + + + + @foreach (var reportEntry in Model.Report.Entries) { - + }
@T("Type")@T("Message")@T("Date")
diff --git a/src/Orchard.Web/Core/Reports/Views/Admin/Index.cshtml b/src/Orchard.Web/Core/Reports/Views/Admin/Index.cshtml index 90249bf4d..714d94c49 100644 --- a/src/Orchard.Web/Core/Reports/Views/Admin/Index.cshtml +++ b/src/Orchard.Web/Core/Reports/Views/Admin/Index.cshtml @@ -2,23 +2,23 @@ @using Orchard.Core.Reports.ViewModels;

@Html.TitleForPage(T("Manage Reports").ToString())

@using(Html.BeginFormAntiForgeryPost()) { - @Html.ValidationSummary() -
- - - - - - - - - - - - - - - + @Html.ValidationSummary() +
+
@T("Name")@T("Title")@T("Date")
+ + + + + + + + + + + + + + @foreach (var report in Model.Reports) { + + + + } +
@T("Name")@T("Title")@T("Date")
diff --git a/src/Orchard.Web/Core/Routable/Views/EditorTemplates/Parts/Routable.RoutePart.cshtml b/src/Orchard.Web/Core/Routable/Views/EditorTemplates/Parts/Routable.RoutePart.cshtml index 483135db2..4e34d34f1 100644 --- a/src/Orchard.Web/Core/Routable/Views/EditorTemplates/Parts/Routable.RoutePart.cshtml +++ b/src/Orchard.Web/Core/Routable/Views/EditorTemplates/Parts/Routable.RoutePart.cshtml @@ -17,21 +17,21 @@ @using(Script.Foot()){ } \ No newline at end of file diff --git a/src/Orchard.Web/Core/Shapes/Views/Document.cshtml b/src/Orchard.Web/Core/Shapes/Views/Document.cshtml index 9b7bf9617..2323d0ed0 100644 --- a/src/Orchard.Web/Core/Shapes/Views/Document.cshtml +++ b/src/Orchard.Web/Core/Shapes/Views/Document.cshtml @@ -1,7 +1,7 @@ @using Orchard.Mvc.Html; @using Orchard.UI.Resources; @{ - RegisterLink(new LinkEntry {Type = "image/x-icon", Rel = "shortcut icon", Href = Url.Content("~/modules/orchard.themes/Content/orchard.ico")}); + RegisterLink(new LinkEntry {Type = "image/x-icon", Rel = "shortcut icon", Href = Url.Content("~/modules/orchard.themes/Content/orchard.ico")}); //todo: (heskew) get conditions (as in conditional comments) hooked up for script tags too Script.Include("html5.js").AtLocation(ResourceLocation.Head); diff --git a/src/Orchard.Web/Core/Shapes/Views/Menu.cshtml b/src/Orchard.Web/Core/Shapes/Views/Menu.cshtml index b483973cd..d711f4b34 100644 --- a/src/Orchard.Web/Core/Shapes/Views/Menu.cshtml +++ b/src/Orchard.Web/Core/Shapes/Views/Menu.cshtml @@ -1,6 +1,6 @@ @{ // Model is Model.Menu from the layout (Layout.Menu) - var tag = Tag(Model, "ul"); + var tag = Tag(Model, "ul"); } @permission.Description + @if (Model.CurrentPermissions.Contains(permission.Name)) { + + } else { + + } + + @if (Model.EffectivePermissions.Contains(permission.Name)) { + + } else { + + } +
+
+ }
@if (Model.Name != "Administrator") { } -
+ } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Tags/Views/Admin/Edit.cshtml b/src/Orchard.Web/Modules/Orchard.Tags/Views/Admin/Edit.cshtml index 1bcbe8588..b89d93b0c 100644 --- a/src/Orchard.Web/Modules/Orchard.Tags/Views/Admin/Edit.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Tags/Views/Admin/Edit.cshtml @@ -6,7 +6,7 @@ @using (Html.BeginFormAntiForgeryPost()) { @Html.ValidationSummary()
- @Html.HiddenFor(m=>m.Id) + @Html.HiddenFor(m=>m.Id) @Html.LabelFor(m => m.TagName, T("Tag Name")) @Html.TextBoxFor(m=>m.TagName, new { @class = "text" })
@@ -21,16 +21,16 @@ } else { - - - - - - - - - - + + + + + + + + + + @foreach (IContent content in View.ContentItems) { diff --git a/src/Orchard.Web/Modules/Orchard.Tags/Views/Admin/Index.cshtml b/src/Orchard.Web/Modules/Orchard.Tags/Views/Admin/Index.cshtml index deb569a1c..e22a4a6b6 100644 --- a/src/Orchard.Web/Modules/Orchard.Tags/Views/Admin/Index.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Tags/Views/Admin/Index.cshtml @@ -12,7 +12,7 @@ @Display.EditorTemplate(TemplateName: "Parts/CreateTag", Model: View.CreateTag != null ? View.CreateTag : new TagsAdminCreateViewModel()) @using(Html.BeginFormAntiForgeryPost()) { -
+
- - - + + + - @{var tagIndex = 0;} - @foreach (var tagEntry in Model.Tags) { + @{var tagIndex = 0;} + @foreach (var tagEntry in Model.Tags) { tagIndex = tagIndex + 1; - } + }
@T("Content Type")@T("Name")
@T("Content Type")@T("Name")
@content.ContentItem.ContentType.CamelFriendly()
 ↓@*todo: (heskew) something more appropriate for "this applies to the bulk actions*@@T("Name") ↓@*todo: (heskew) something more appropriate for "this applies to the bulk actions*@@T("Name")
@@ -48,7 +48,7 @@
} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Tags/Views/Home/Search.cshtml b/src/Orchard.Web/Modules/Orchard.Tags/Views/Home/Search.cshtml index cc4c6ee26..5f12fa237 100644 --- a/src/Orchard.Web/Modules/Orchard.Tags/Views/Home/Search.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Tags/Views/Home/Search.cshtml @@ -1,10 +1,10 @@ @model Orchard.Tags.ViewModels.TagsSearchViewModel @{ - Html.AddTitleParts(T("Tags").ToString()); - Html.AddTitleParts(T("Contents tagged with {0}", Model.TagName).ToString()); - Model.List.Classes.Add("tagged-posts"); - Model.List.Classes.Add("content-items"); + Html.AddTitleParts(T("Tags").ToString()); + Html.AddTitleParts(T("Contents tagged with {0}", Model.TagName).ToString()); + Model.List.Classes.Add("tagged-posts"); + Model.List.Classes.Add("content-items"); }

@T("Contents tagged with {0}", Model.TagName)

diff --git a/src/Orchard.Web/Modules/Orchard.Tags/Views/Parts/Tags.ShowTags.cshtml b/src/Orchard.Web/Modules/Orchard.Tags/Views/Parts/Tags.ShowTags.cshtml index 58e5dfab6..1f0892ff1 100644 --- a/src/Orchard.Web/Modules/Orchard.Tags/Views/Parts/Tags.ShowTags.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Tags/Views/Parts/Tags.ShowTags.cshtml @@ -1,11 +1,11 @@ @{ - var tagsHtml = new List(); - foreach(var t in Model.Tags) { - if (tagsHtml.Any()) { - tagsHtml.Add(new HtmlString(", ")); - } - tagsHtml.Add(Html.ActionLink((string)t.TagName, "Search", "Home", new { area = "Orchard.Tags", tagName = (string)t.TagName }, new { })); - } + var tagsHtml = new List(); + foreach(var t in Model.Tags) { + if (tagsHtml.Any()) { + tagsHtml.Add(new HtmlString(", ")); + } + tagsHtml.Add(Html.ActionLink((string)t.TagName, "Search", "Home", new { area = "Orchard.Tags", tagName = (string)t.TagName }, new { })); + } } @if (tagsHtml.Any()) { diff --git a/src/Orchard.Web/Modules/Orchard.Themes/Styles/orchard-themes-admin.css b/src/Orchard.Web/Modules/Orchard.Themes/Styles/orchard-themes-admin.css index ef12b4820..2e4199200 100644 --- a/src/Orchard.Web/Modules/Orchard.Themes/Styles/orchard-themes-admin.css +++ b/src/Orchard.Web/Modules/Orchard.Themes/Styles/orchard-themes-admin.css @@ -14,19 +14,19 @@ overflow:hidden; } .templates img, .themePreviewImage { - border:1px solid #e8e8e8; + border:1px solid #e8e8e8; height:200px; margin:.27em 0 .93em 0; display:block; } .previewImage { - border:1px solid #525e50; - height:50%; - width:50%; + border:1px solid #525e50; + height:50%; + width:50%; } .themes #main h2 { margin:1em 0 0 0; } .themePreviewImage { - height:300px; + height:300px; } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Themes/Views/Admin/Index.cshtml b/src/Orchard.Web/Modules/Orchard.Themes/Views/Admin/Index.cshtml index 73fc7c115..d7588f591 100644 --- a/src/Orchard.Web/Modules/Orchard.Themes/Views/Admin/Index.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Themes/Views/Admin/Index.cshtml @@ -2,63 +2,63 @@ @{ Style.Require("ThemesAdmin"); }

@Html.TitleForPage(T("Manage Themes").ToString())

@if (Model.CurrentTheme == null) { -

- @T("There is no current theme in the application. The built-in theme will be used.")
- @Html.ActionLink(T("Install a new Theme").ToString(), "Install") -

+

+ @T("There is no current theme in the application. The built-in theme will be used.")
+ @Html.ActionLink(T("Install a new Theme").ToString(), "Install") +

} else { -

@T("Current Theme") - @Model.CurrentTheme.Name

+

@T("Current Theme") - @Model.CurrentTheme.Name

- @Html.Image(Href(Html.ThemePath(Model.CurrentTheme, "/Theme.png")), Html.Encode(Model.CurrentTheme.Name), new { @class = "themePreviewImage" }) -
@T("By") @Model.CurrentTheme.Author
+ @Html.Image(Href(Html.ThemePath(Model.CurrentTheme, "/Theme.png")), Html.Encode(Model.CurrentTheme.Name), new { @class = "themePreviewImage" }) +
@T("By") @Model.CurrentTheme.Author
-

- @T("Version:") @Model.CurrentTheme.Version
- @Model.CurrentTheme.Description
- @Model.CurrentTheme.WebSite -

+

+ @T("Version:") @Model.CurrentTheme.Version
+ @Model.CurrentTheme.Description
+ @Model.CurrentTheme.WebSite +

- @Html.ActionLink(T("Install a new Theme").ToString(), "Install", null, new { @class = "button primaryAction" }) + @Html.ActionLink(T("Install a new Theme").ToString(), "Install", null, new { @class = "button primaryAction" }) }

@T("Available Themes")

    - @foreach (var theme in Model.Themes) { - if (Model.CurrentTheme == null || theme.Id != Model.CurrentTheme.Id) { -
  • -
    -

    @theme.Name

    - @Html.Image(Href(theme.ThemePath("/Theme.png")), Html.Encode(theme.Name), null) - @using (Html.BeginFormAntiForgeryPost(Url.Action(theme.Enabled ? "Disable" : "Enable"), FormMethod.Post, new { @class = "inline" })) { - @Html.Hidden("themeName", theme.Id) - - } - @using (Html.BeginFormAntiForgeryPost(Url.Action("Activate"), FormMethod.Post, new { @class = "inline" })) { - @Html.Hidden("themeName", theme.Id) - - } - @using (Html.BeginFormAntiForgeryPost(Url.Action("Preview"), FormMethod.Post, new { @class = "inline" })) { - @Html.Hidden("themeName", theme.Id) - - } -
    @T("By") @theme.Descriptor.Author
    -

    - @T("Version:") @theme.Descriptor.Version
    - @theme.Descriptor.Description
    - @theme.Descriptor.WebSite -

    + @foreach (var theme in Model.Themes) { + if (Model.CurrentTheme == null || theme.Id != Model.CurrentTheme.Id) { +
  • +
    +

    @theme.Name

    + @Html.Image(Href(theme.ThemePath("/Theme.png")), Html.Encode(theme.Name), null) + @using (Html.BeginFormAntiForgeryPost(Url.Action(theme.Enabled ? "Disable" : "Enable"), FormMethod.Post, new { @class = "inline" })) { + @Html.Hidden("themeName", theme.Id) + + } + @using (Html.BeginFormAntiForgeryPost(Url.Action("Activate"), FormMethod.Post, new { @class = "inline" })) { + @Html.Hidden("themeName", theme.Id) + + } + @using (Html.BeginFormAntiForgeryPost(Url.Action("Preview"), FormMethod.Post, new { @class = "inline" })) { + @Html.Hidden("themeName", theme.Id) + + } +
    @T("By") @theme.Descriptor.Author
    +

    + @T("Version:") @theme.Descriptor.Version
    + @theme.Descriptor.Description
    + @theme.Descriptor.WebSite +

    @if(theme.NeedsUpdate){ - using (Html.BeginFormAntiForgeryPost(Url.Action("Update"), FormMethod.Post, new { @class = "inline link" })) { + using (Html.BeginFormAntiForgeryPost(Url.Action("Update"), FormMethod.Post, new { @class = "inline link" })) { @Html.Hidden("themeName", theme.Id)
    } } - @using (Html.BeginFormAntiForgeryPost(Url.Action("Uninstall"), FormMethod.Post, new { @class = "inline link" })) { - @Html.Hidden("themeName", theme.Id) - - } -
    -
  • - } - } + @using (Html.BeginFormAntiForgeryPost(Url.Action("Uninstall"), FormMethod.Post, new { @class = "inline link" })) { + @Html.Hidden("themeName", theme.Id) + + } + + + } + }
\ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Themes/Views/Admin/Install.cshtml b/src/Orchard.Web/Modules/Orchard.Themes/Views/Admin/Install.cshtml index 038ea80e9..d83b0a2ce 100644 --- a/src/Orchard.Web/Modules/Orchard.Themes/Views/Admin/Install.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Themes/Views/Admin/Install.cshtml @@ -5,6 +5,6 @@
- @Html.AntiForgeryTokenOrchard() - + @Html.AntiForgeryTokenOrchard() + } diff --git a/src/Orchard.Web/Modules/Orchard.Themes/Views/ThemePreview.cshtml b/src/Orchard.Web/Modules/Orchard.Themes/Views/ThemePreview.cshtml index e925a15a3..5c984921e 100644 --- a/src/Orchard.Web/Modules/Orchard.Themes/Views/ThemePreview.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Themes/Views/ThemePreview.cshtml @@ -1,5 +1,5 @@ @{ - var themes = (IEnumerable)Model.Themes; + var themes = (IEnumerable)Model.Themes; }
- @using(Html.BeginFormAntiForgeryPost(Url.Action("Preview", new{Controller="Admin", Area="Orchard.Themes"}), FormMethod.Post, new { @class = "inline" })) { -
- @T("You are previewing: ") - @Html.DropDownList("ThemeName", themes, new {onChange = "this.form.submit();"}) - @Html.Hidden("ReturnUrl", Context.Request.RawUrl) - - - -
- } + @using(Html.BeginFormAntiForgeryPost(Url.Action("Preview", new{Controller="Admin", Area="Orchard.Themes"}), FormMethod.Post, new { @class = "inline" })) { +
+ @T("You are previewing: ") + @Html.DropDownList("ThemeName", themes, new {onChange = "this.form.submit();"}) + @Html.Hidden("ReturnUrl", Context.Request.RawUrl) + + + +
+ }
diff --git a/src/Orchard.Web/Modules/Orchard.Users/Controllers/AccountController.cs b/src/Orchard.Web/Modules/Orchard.Users/Controllers/AccountController.cs index e3c9ad8ca..bfab4c451 100644 --- a/src/Orchard.Web/Modules/Orchard.Users/Controllers/AccountController.cs +++ b/src/Orchard.Web/Modules/Orchard.Users/Controllers/AccountController.cs @@ -211,7 +211,7 @@ namespace Orchard.Users.Controllers { protected override void OnActionExecuting(ActionExecutingContext filterContext) { if (filterContext.HttpContext.User.Identity is WindowsIdentity) { - throw new InvalidOperationException("Windows authentication is not supported."); + throw new InvalidOperationException(T("Windows authentication is not supported.").ToString()); } } diff --git a/src/Orchard.Web/Modules/Orchard.Users/Services/MembershipService.cs b/src/Orchard.Web/Modules/Orchard.Users/Services/MembershipService.cs index 264f5ce7d..124751cf7 100644 --- a/src/Orchard.Web/Modules/Orchard.Users/Services/MembershipService.cs +++ b/src/Orchard.Web/Modules/Orchard.Users/Services/MembershipService.cs @@ -6,6 +6,7 @@ using System.Text; using System.Web.Security; using System.Xml.Linq; using JetBrains.Annotations; +using Orchard.Localization; using Orchard.Logging; using Orchard.ContentManagement; using Orchard.Security; @@ -27,9 +28,11 @@ namespace Orchard.Users.Services { _messageManager = messageManager; _userEventHandlers = userEventHandlers; Logger = NullLogger.Instance; + T = NullLocalizer.Instance; } public ILogger Logger { get; set; } + public Localizer T { get; set; } public MembershipSettings GetSettings() { var settings = new MembershipSettings(); @@ -179,7 +182,7 @@ namespace Orchard.Users.Services { SetPasswordEncrypted(partRecord, password); break; default: - throw new ApplicationException("Unexpected password format value"); + throw new ApplicationException(T("Unexpected password format value").ToString()); } } diff --git a/src/Orchard.Web/Modules/Orchard.Widgets/Styles/orchard-widgets-admin.css b/src/Orchard.Web/Modules/Orchard.Widgets/Styles/orchard-widgets-admin.css index 14438b614..c26226f70 100644 --- a/src/Orchard.Web/Modules/Orchard.Widgets/Styles/orchard-widgets-admin.css +++ b/src/Orchard.Web/Modules/Orchard.Widgets/Styles/orchard-widgets-admin.css @@ -47,18 +47,18 @@ h4.widgets-layer-header { } .widgets-layerZones .widgets-zone { - background:#f5f5f5; - border: 1px solid #f1f1f1; - padding: 1em 2em 1em 2em; - margin: 0 0 .6em 0; + background:#f5f5f5; + border: 1px solid #f1f1f1; + padding: 1em 2em 1em 2em; + margin: 0 0 .6em 0; } .widgets-layerZones .widgets-zoneWidget { margin: .6em; padding: 1em 2em 1em 3em; - background:#ffffff; - border: 1px solid #f1f1f1; - vertical-align: middle; + background:#ffffff; + border: 1px solid #f1f1f1; + vertical-align: middle; } .widgets-availableLayers fieldset @@ -79,8 +79,8 @@ h4.widgets-layer-header { } .widgets-layers ul { - background: #f5f5f5; - border: 1px solid #f1f1f1; + background: #f5f5f5; + border: 1px solid #f1f1f1; } .widgets-layers ul li @@ -90,17 +90,17 @@ h4.widgets-layer-header { } .widgets-layers .widgets-currentLayer { - background: #c3d9ff; + background: #c3d9ff; } .widgets-layers .widgets-currentLayer a { - color: #333; - font-weight: 600; + color: #333; + font-weight: 600; } .widgets-layerZones ul li ul { - margin: 0; - padding: 0; + margin: 0; + padding: 0; } .new-layer { diff --git a/src/Orchard.Web/Modules/Orchard.jQuery/Styles/ui.timepickr.css b/src/Orchard.Web/Modules/Orchard.jQuery/Styles/ui.timepickr.css index dfc7edfb7..cf010f8b2 100644 --- a/src/Orchard.Web/Modules/Orchard.jQuery/Styles/ui.timepickr.css +++ b/src/Orchard.Web/Modules/Orchard.jQuery/Styles/ui.timepickr.css @@ -1,14 +1,14 @@ .ui-timepickr { - display:none; + display:none; position:absolute; - padding:2px 2px 2px 0; + padding:2px 2px 2px 0; } .ui-timepickr-row { padding:0; - float:right; - clear:both; - overflow:hidden; + float:right; + clear:both; + overflow:hidden; margin:2px 0; display:none; position:relative; diff --git a/src/Orchard.Web/Modules/TinyMce/Views/Body-Html.Editor.cshtml b/src/Orchard.Web/Modules/TinyMce/Views/Body-Html.Editor.cshtml index 0664d8e94..c4522e7e0 100644 --- a/src/Orchard.Web/Modules/TinyMce/Views/Body-Html.Editor.cshtml +++ b/src/Orchard.Web/Modules/TinyMce/Views/Body-Html.Editor.cshtml @@ -1,5 +1,5 @@ @{ - Script.Require("TinyMce"); + Script.Require("TinyMce"); } @using(Script.Foot()) { diff --git a/src/Orchard.Web/Themes/TheAdmin/Styles/ie6.css b/src/Orchard.Web/Themes/TheAdmin/Styles/ie6.css index b2c2d30b9..9df334948 100644 --- a/src/Orchard.Web/Themes/TheAdmin/Styles/ie6.css +++ b/src/Orchard.Web/Themes/TheAdmin/Styles/ie6.css @@ -1,18 +1,18 @@ body{ - background:#fcfcfc; + background:#fcfcfc; } #branding { - height:50px; - margin:0 0 0 20px; - background:transparent url(images/orchardLogo.gif) no-repeat scroll 0 0; + height:50px; + margin:0 0 0 20px; + background:transparent url(images/orchardLogo.gif) no-repeat scroll 0 0; } #branding h1 { - padding:8px 0 0 38px; + padding:8px 0 0 38px; } #content { - overflow:auto; - padding:1.4em; + overflow:auto; + padding:1.4em; } /* Navigation @@ -20,26 +20,26 @@ #navigation ul li { border:0; - margin:0 0 0 4px; + margin:0 0 0 4px; } #navigation li h3 a { - color:#333; - padding:6px 4px 8px 0px; + color:#333; + padding:6px 4px 8px 0px; } /* Forms ----------------------------------------------------------*/ legend { - color:#333; + color:#333; } #AdminPassword, .text-box { - border:1px solid #DDDEDF; - padding:4px; - width:98%; + border:1px solid #DDDEDF; + padding:4px; + width:98%; } .manage diff --git a/src/Orchard.Web/Themes/TheAdmin/Styles/site.css b/src/Orchard.Web/Themes/TheAdmin/Styles/site.css index 5b1ba68a1..c6ee3b82c 100644 --- a/src/Orchard.Web/Themes/TheAdmin/Styles/site.css +++ b/src/Orchard.Web/Themes/TheAdmin/Styles/site.css @@ -29,15 +29,15 @@ small, strike, strong, sub, sup, tt, var, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, button, submit { - margin: 0; - padding: 0; - border: 0; - outline: 0; - font-weight: inherit; - font-style: inherit; - font-size: 100%; - font-family: inherit; - vertical-align: baseline; + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-weight: inherit; + font-style: inherit; + font-size: 100%; + font-family: inherit; + vertical-align: baseline; } /* Remember focus styles! */ @@ -64,11 +64,11 @@ header, footer, aside, nav, article { display: block; } .group:after { - content: "."; - display: block; - height: 0; - clear: both; - visibility: hidden; + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; } @@ -78,31 +78,31 @@ header, footer, aside, nav, article { display: block; } /* Default font settings. The font-size 81.3% sets the base font to 13px -Pixels EMs Percent Points +Pixels EMs Percent Points 1px 0.077em 7.7% 1pt 2px 0.154em 15.4% 2pt 3px 0.231em 23.1% 3pt 4px 0.308em 30.8% 3pt 5px 0.385em 38.5% 4pt -6px 0.462em 46.2% 5pt -7px 0.538em 53.8% 5pt -8px 0.615em 61.5% 6pt -9px 0.692em 69.2% 7pt -10px 0.769em 76.9% 8pt -11px 0.846em 84.6% 8pt -12px 0.923em 92.3% 9pt -13px 1em 100% 10pt -14px 1.077em 107.7% 11pt -15px 1.154em 115.4% 11pt -16px 1.231em 123.1% 12pt -17px 1.308em 130.8% 13pt -18px 1.385em 138.5% 14pt -19px 1.462em 146.2% 14pt -20px 1.538em 153.8% 15pt -21px 1.615em 161.5% 16pt -22px 1.692em 169.2% 17pt -23px 1.769em 176.9% 17pt -24px 1.846em 184.6% 18pt +6px 0.462em 46.2% 5pt +7px 0.538em 53.8% 5pt +8px 0.615em 61.5% 6pt +9px 0.692em 69.2% 7pt +10px 0.769em 76.9% 8pt +11px 0.846em 84.6% 8pt +12px 0.923em 92.3% 9pt +13px 1em 100% 10pt +14px 1.077em 107.7% 11pt +15px 1.154em 115.4% 11pt +16px 1.231em 123.1% 12pt +17px 1.308em 130.8% 13pt +18px 1.385em 138.5% 14pt +19px 1.462em 146.2% 14pt +20px 1.538em 153.8% 15pt +21px 1.615em 161.5% 16pt +22px 1.692em 169.2% 17pt +23px 1.769em 176.9% 17pt +24px 1.846em 184.6% 18pt */ html { @@ -225,8 +225,8 @@ form.link button:hover { /* Header - Branding and Login ***************************************************************/ #header { - background:#2d2f25 url(images/backgroundHeader.gif) no-repeat bottom right; - height:50px; + background:#2d2f25 url(images/backgroundHeader.gif) no-repeat bottom right; + height:50px; } #header #app { float:left; @@ -234,29 +234,29 @@ form.link button:hover { padding:.4em 0; } #header #app a { - background:url(images/orchardLogo.gif) no-repeat; - display:block; - height:60px; - margin:-11px 0 0 14px; - text-indent:-9999px; - width:40px; + background:url(images/orchardLogo.gif) no-repeat; + display:block; + height:60px; + margin:-11px 0 0 14px; + text-indent:-9999px; + width:40px; } #site { font-size:1.385em; /*18px*/ } #site a, #site a:visited, #site a:active { - color:#fff; - float:left; - line-height:2.6em; - position:relative; + color:#fff; + float:left; + line-height:2.6em; + position:relative; } #login { - color:#fff; - display:block; - float:right; - margin:14px 20px 0 0; - white-space:nowrap; + color:#fff; + display:block; + float:right; + margin:14px 20px 0 0; + white-space:nowrap; } #login a, #login a:link, #login a:visited { @@ -276,7 +276,7 @@ form.link button:hover { width:0; } #menu .menu-admin li { - margin:5px 0 17px 4px; + margin:5px 0 17px 4px; } #menu .menu-admin ul li { border:0; @@ -286,19 +286,19 @@ form.link button:hover { padding:0 0 0 8px; } #menu .menu-admin li h3 a, #menu .menu-admin li h3 span { - line-height:1.2em; + line-height:1.2em; } #menu .menu-admin ul a, #menu .menu-admin ul a:link, #menu .menu-admin ul a:visited { - color:#2d2f25; - display:block; - line-height:1.2em; - padding:.4em 0 .4em 12px; - text-decoration:none; + color:#2d2f25; + display:block; + line-height:1.2em; + padding:.4em 0 .4em 12px; + text-decoration:none; } #menu .menu-admin ul a:hover, #menu .menu-admin ul a:active, #menu .menu-admin ul a:focus { - background:#f5f5f5; - color: #000; - text-decoration:underline; + background:#f5f5f5; + color: #000; + text-decoration:underline; } #menu .menu-admin li.section-dashboard h3 { padding:.4em 0 0 .4em; @@ -393,7 +393,7 @@ form.link button:hover { /* Confirmations, Messages and the like ***************************************************************/ .message, .validation-summary-errors { - margin:10px 0 4px 0; + margin:10px 0 4px 0; padding:4px; } messages div.message { @@ -401,7 +401,7 @@ messages div.message { } span.message { display:block; - margin:4px 0 4px 4px; + margin:4px 0 4px 4px; } .messages a { font-weight:bold; @@ -409,30 +409,30 @@ span.message { /* todo: (heskew) what else (other inputs) needs this? */ .critical.message, .validation-summary-errors, .input-validation-error.text-box, .input-validation-error.text { - border:1px solid #990808; + border:1px solid #990808; } .critical.message, .validation-summary-errors { - background:#e68585; /* red */ - color:#fff; + background:#e68585; /* red */ + color:#fff; } .message-Information { background:#e6f1c9; /* green */ - border:1px solid #cfe493; - color:#062232; + border:1px solid #cfe493; + color:#062232; } .message-Warning { - background:#fdf5bc; /* yellow */ - border:1px solid #ffea9b; + background:#fdf5bc; /* yellow */ + border:1px solid #ffea9b; } .message-Error { - background:#e68585; /* green */ - border:1px solid #990808; - color:#fff; + background:#e68585; /* green */ + border:1px solid #990808; + color:#fff; }.debug.message { background:#eee; - border:1px dashed #D2D6C6; - color:#7a7a7a; - margin:20px 0 14px 0; + border:1px dashed #D2D6C6; + color:#7a7a7a; + margin:20px 0 14px 0; } .debug.message:before { content:"DEBUG » "; @@ -470,7 +470,7 @@ label.bulk-order { text-transform:lowercase; } label span { - font-weight:normal; + font-weight:normal; } label input { vertical-align:text-top; @@ -496,7 +496,7 @@ select { padding:1px; } select:focus, textarea:focus, input.text:focus, input.text-box:focus { - border-color:#666d51; + border-color:#666d51; } input.check-box { margin-left:0; @@ -546,12 +546,12 @@ form.link button { button.primaryAction, .button.primaryAction, .button.primaryAction:link, .button.primaryAction:visited { background:#4687ad; border:1px solid #405f71; - color:#fff; + color:#fff; /*CSS3 properties*/ - filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, startColorstr='#4687AD', endColorstr='#366581'); - background: -webkit-gradient(linear, left top, left bottom, from(#4687AD), to(#366581)); - background:-moz-linear-gradient(top , #4687AD, #366581); + filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, startColorstr='#4687AD', endColorstr='#366581'); + background: -webkit-gradient(linear, left top, left bottom, from(#4687AD), to(#366581)); + background:-moz-linear-gradient(top , #4687AD, #366581); } button.remove, .remove.button, .remove.button:link, .remove.button:visited { background-color:#DECCCA; @@ -574,48 +574,48 @@ button.remove:focus::-moz-focus-inner, .remove.button:focus::-moz-focus-inner { } input[type="submit"], input[type="reset"], input[type="button"], button, submit, .button, .button:link, .button:visited { - color:#333; - background:#F5F5F5; - border:1px solid #999; - cursor:pointer; - padding: 0 12px 2px 12px; - text-align:center; - - /*CSS3 properties*/ - filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, startColorstr='#f5f5f5', endColorstr='#cbcbcb'); - background: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#cbcbcb)); - background: -moz-linear-gradient(top, #f5f5f5, #cbcbcb); - box-shadow: inset 0px 0px 1px rgba(255, 255, 255, 1.0), 1px 1px 1px rgba(102, 102, 102, 0.3); - -webkit-box-shadow: inset 0px 0px 1px rgba(255, 255, 255, 1.0), 1px 1px 1px rgba(102, 102, 102, 0.3); - -moz-box-shadow: inset 0px 0px 1px rgba(255, 255, 255, 1.0), 1px 1px 1px rgba(102, 102, 102, 0.3); - border-radius: 3px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; + color:#333; + background:#F5F5F5; + border:1px solid #999; + cursor:pointer; + padding: 0 12px 2px 12px; + text-align:center; + + /*CSS3 properties*/ + filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, startColorstr='#f5f5f5', endColorstr='#cbcbcb'); + background: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#cbcbcb)); + background: -moz-linear-gradient(top, #f5f5f5, #cbcbcb); + box-shadow: inset 0px 0px 1px rgba(255, 255, 255, 1.0), 1px 1px 1px rgba(102, 102, 102, 0.3); + -webkit-box-shadow: inset 0px 0px 1px rgba(255, 255, 255, 1.0), 1px 1px 1px rgba(102, 102, 102, 0.3); + -moz-box-shadow: inset 0px 0px 1px rgba(255, 255, 255, 1.0), 1px 1px 1px rgba(102, 102, 102, 0.3); + border-radius: 3px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; } input[type="submit"]:hover,input[type="reset"]:hover, input[type="button"]:hover, button:hover, .button:hover, .button.primaryAction:hover { - text-decoration:none; - background: #ffac40; - color:#fff; - border:1px solid #bb8b2d; - - /*CSS3 properties*/ - filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, startColorstr='#ffac40', endColorstr='#f9760d'); - background: -webkit-gradient(linear, 0 0, 0 100%, from(#ffac40), to(#f9760d)); - background: -moz-linear-gradient(top, #ffac40, #f9760d); + text-decoration:none; + background: #ffac40; + color:#fff; + border:1px solid #bb8b2d; + + /*CSS3 properties*/ + filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, startColorstr='#ffac40', endColorstr='#f9760d'); + background: -webkit-gradient(linear, 0 0, 0 100%, from(#ffac40), to(#f9760d)); + background: -moz-linear-gradient(top, #ffac40, #f9760d); } input[type="submit"]:active, input[type="reset"]:active, input[type="button"]:active, button:active, .buton:active, .button.primaryAction:active { - text-decoration:none; - background: #62a9e2; - color:#fff; - border:1px solid #bb772d; + text-decoration:none; + background: #62a9e2; + color:#fff; + border:1px solid #bb772d; - /*CSS3 properties*/ - filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, startColorstr='#fece3b', endColorstr='#fe6001'); - background: -webkit-gradient(linear, 0 0, 0 100%, from(#fece3b), to(#fe6001)); - background: -moz-linear-gradient(top, #fece3b, #fe6001); - box-shadow: inset 0px 0px 1px rgba(254, 225, 109, 1.0), 1px 1px 1px rgba(102, 102, 102, 0.3); - -moz-box-shadow: inset 0px 0px 1px rgba(254, 225, 109, 1.0), 1px 1px 1px rgba(102, 102, 102, 0.3); - -webkit-box-shadow: inset 1px 1px 1px rgba(254, 225, 109, 0.6), 1px 1px 1px rgba(102, 102, 102, 0.1); + /*CSS3 properties*/ + filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, startColorstr='#fece3b', endColorstr='#fe6001'); + background: -webkit-gradient(linear, 0 0, 0 100%, from(#fece3b), to(#fe6001)); + background: -moz-linear-gradient(top, #fece3b, #fe6001); + box-shadow: inset 0px 0px 1px rgba(254, 225, 109, 1.0), 1px 1px 1px rgba(102, 102, 102, 0.3); + -moz-box-shadow: inset 0px 0px 1px rgba(254, 225, 109, 1.0), 1px 1px 1px rgba(102, 102, 102, 0.3); + -webkit-box-shadow: inset 1px 1px 1px rgba(254, 225, 109, 0.6), 1px 1px 1px rgba(102, 102, 102, 0.1); } input[type="submit"]:focus::-moz-focus-inner, button:focus::-moz-focus-inner, .button:focus::-moz-focus-inner { border: 1px dotted transparent; @@ -683,36 +683,36 @@ input[type="submit"]:focus::-moz-focus-inner, button:focus::-moz-focus-inner, .b ----------------------------------------------------------*/ table.items { margin:0 0 1.4em 0; - background:#fff; - border:1px solid #eaeaea; - border-bottom:none; - border-collapse:separate; - border-spacing:0; - width:100%; + background:#fff; + border:1px solid #eaeaea; + border-bottom:none; + border-collapse:separate; + border-spacing:0; + width:100%; } table.items caption { - padding:8px 0; - text-indent:0; + padding:8px 0; + text-indent:0; } table.items col { - border-spacing:0; - display:table-column; + border-spacing:0; + display:table-column; } table.items colgroup { - border-spacing:0; - display:table-column-group; + border-spacing:0; + display:table-column-group; } table.items tbody { - border-spacing:0; - vertical-align:middle; + border-spacing:0; + vertical-align:middle; } table.items thead, table.items th { - background:#f5f5f5; - font-weight:700; - overflow:hidden; - text-align:left; - white-space:nowrap; + background:#f5f5f5; + font-weight:700; + overflow:hidden; + text-align:left; + white-space:nowrap; } /* todo: (heskew) hook back up */ table.items tr.hover { @@ -721,11 +721,11 @@ table.items tr.hover { table.items tr.critical {background:#e68585; border:inherit;} table.items tr.warning {background:#fdf5bc; border:inherit;} table.items th, table.items td { - border-bottom:1px solid #eaeaea; - border-spacing:0px; - display:table-cell; - padding:8px 12px; - vertical-align:middle; + border-bottom:1px solid #eaeaea; + border-spacing:0px; + display:table-cell; + padding:8px 12px; + vertical-align:middle; } /* Content item lists @@ -829,7 +829,7 @@ table.items th, table.items td { border-style:dashed; margin-left:0; margin-right:2em; - width:350px; + width:350px; } .permalink input.text:focus { background:#FFF; @@ -858,12 +858,12 @@ table.items th, table.items td { padding:6px; /*CSS3 properties*/ - filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, startColorstr='#f7f7f7', endColorstr='#f5f5f5'); - background: -webkit-gradient(linear, 0 0, 0 100%, from(#f7f7f7), to(#f5f5f5)); - background: -moz-linear-gradient(top, #f7f7f7, #f5f5f5); - border-radius: 3px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; + filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, startColorstr='#f7f7f7', endColorstr='#f5f5f5'); + background: -webkit-gradient(linear, 0 0, 0 100%, from(#f7f7f7), to(#f5f5f5)); + background: -moz-linear-gradient(top, #f7f7f7, #f5f5f5); + border-radius: 3px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; } .edit-item-sidebar fieldset { @@ -911,7 +911,7 @@ fieldset.publish-later-datetime input { } /* todo: needed? */ .clearBoth { - clear:both; + clear:both; } .placeholderd { color:#ccc; diff --git a/src/Orchard.Web/Themes/TheAdmin/Views/Layout.cshtml b/src/Orchard.Web/Themes/TheAdmin/Views/Layout.cshtml index d4afca4ed..cab73e6c7 100644 --- a/src/Orchard.Web/Themes/TheAdmin/Views/Layout.cshtml +++ b/src/Orchard.Web/Themes/TheAdmin/Views/Layout.cshtml @@ -7,7 +7,7 @@ @{ Style.Include("site.css"); - Script.Require("jQuery"); + Script.Require("jQuery"); Script.Require("ShapesBase"); Script.Include("admin.js"); RegisterLink(new LinkEntry { Condition = "lte IE 8", Rel = "stylesheet", Type = "text/css", Href = Url.Content("../Styles/ie.css") }.AddAttribute("media", "screen, projection")); diff --git a/src/Orchard.Web/Themes/TheAdmin/Views/Menu.cshtml b/src/Orchard.Web/Themes/TheAdmin/Views/Menu.cshtml index 715be0e3b..12ddff3ab 100644 --- a/src/Orchard.Web/Themes/TheAdmin/Views/Menu.cshtml +++ b/src/Orchard.Web/Themes/TheAdmin/Views/Menu.cshtml @@ -1,7 +1,7 @@ @using System.Web.Routing; @using Orchard.Utility.Extensions; @{ - Script.Require("jQuery"); + Script.Require("jQuery"); Script.Include("admin.js"); IEnumerable firstLevelMenuItems = Model; @@ -9,7 +9,7 @@ var tag = Tag(Model, "ul"); } @tag.StartElement - @foreach(var firstLevelMenuItem in Model) { + @foreach(var firstLevelMenuItem in Model) { IEnumerable secondLevelMenuItems = firstLevelMenuItem; string sectionHeaderText = firstLevelMenuItem.Text; @@ -33,7 +33,7 @@

@sectionHeaderMarkup

if (secondLevelMenuItems.Count() > 1) {
@content.ContentItem.ContentType.CamelFriendly()@Html.ItemDisplayLink(content.ContentItem)@Html.ItemEditLink(content.ContentItem)
From 85bf6158fc25e96108edb7a0072ed22dff4db120 Mon Sep 17 00:00:00 2001 From: Renaud Paquay Date: Thu, 25 Nov 2010 18:30:15 -0800 Subject: [PATCH 28/70] Make TagRecord class safer to use --HG-- branch : dev --- src/Orchard.Web/Modules/Orchard.Tags/Models/TagRecord.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Orchard.Web/Modules/Orchard.Tags/Models/TagRecord.cs b/src/Orchard.Web/Modules/Orchard.Tags/Models/TagRecord.cs index 08f8699fc..e5dbe9fe9 100644 --- a/src/Orchard.Web/Modules/Orchard.Tags/Models/TagRecord.cs +++ b/src/Orchard.Web/Modules/Orchard.Tags/Models/TagRecord.cs @@ -2,6 +2,9 @@ namespace Orchard.Tags.Models { public class TagRecord { + public TagRecord() { + ContentTags = new List(); + } public virtual int Id { get; set; } public virtual string TagName { get; set; } public virtual IList ContentTags { get; set; } From b532569eb4817ba70ba716233f87360bd6c43939 Mon Sep 17 00:00:00 2001 From: Nathan Heskew Date: Thu, 25 Nov 2010 22:04:12 -0800 Subject: [PATCH 29/70] Unblocking the use of Html.RenderAction and Html.Action in Orchard views --HG-- branch : dev --- src/Orchard/Mvc/Html/ContainerExtensions.cs | 7 +--- src/Orchard/WorkContextExtensions.cs | 41 ++++++++++++++++----- 2 files changed, 33 insertions(+), 15 deletions(-) diff --git a/src/Orchard/Mvc/Html/ContainerExtensions.cs b/src/Orchard/Mvc/Html/ContainerExtensions.cs index 0e104904d..035947e99 100644 --- a/src/Orchard/Mvc/Html/ContainerExtensions.cs +++ b/src/Orchard/Mvc/Html/ContainerExtensions.cs @@ -9,13 +9,10 @@ namespace Orchard.Mvc.Html { /// /// himself public static TService Resolve(this HtmlHelper html) { - var workContextAccessor = html.ViewContext.RouteData.DataTokens["IWorkContextAccessor"] as IWorkContextAccessor; - if (workContextAccessor == null) - throw new ApplicationException("Unable to resolve"); + var workContext = html.ViewContext.RequestContext.GetWorkContext(); - var workContext = workContextAccessor.GetContext(html.ViewContext.HttpContext); if (workContext == null) - throw new ApplicationException("Unable to resolve"); + return default(TService); return workContext.Resolve(); } diff --git a/src/Orchard/WorkContextExtensions.cs b/src/Orchard/WorkContextExtensions.cs index 3b4956805..1c1b6d690 100644 --- a/src/Orchard/WorkContextExtensions.cs +++ b/src/Orchard/WorkContextExtensions.cs @@ -10,27 +10,48 @@ namespace Orchard { } public static WorkContext GetWorkContext(this RequestContext requestContext) { - if (requestContext == null) { + if (requestContext == null) return null; - } var routeData = requestContext.RouteData; - object value; - if (routeData == null || - routeData.DataTokens == null || - !routeData.DataTokens.TryGetValue("IWorkContextAccessor", out value) || - !(value is IWorkContextAccessor)) { + if (routeData == null || routeData.DataTokens == null) return null; + + object workContextValue; + if (!routeData.DataTokens.TryGetValue("IWorkContextAccessor", out workContextValue)) { + workContextValue = FindWorkContextInParent(routeData); } - var workContextAccessor = (IWorkContextAccessor)value; + if (!(workContextValue is IWorkContextAccessor)) + return null; + + var workContextAccessor = (IWorkContextAccessor)workContextValue; return workContextAccessor.GetContext(requestContext.HttpContext); } - public static WorkContext GetWorkContext(this ControllerContext controllerContext) { - if (controllerContext == null) { + private static object FindWorkContextInParent(RouteData routeData) { + object parentViewContextValue; + if (!routeData.DataTokens.TryGetValue("ParentActionViewContext", out parentViewContextValue) + || !(parentViewContextValue is ViewContext)) { return null; } + + var parentRouteData = ((ViewContext)parentViewContextValue).RouteData; + if (parentRouteData == null || parentRouteData.DataTokens == null) + return null; + + object workContextValue; + if (!parentRouteData.DataTokens.TryGetValue("IWorkContextAccessor", out workContextValue)) { + workContextValue = FindWorkContextInParent(parentRouteData); + } + + return workContextValue; + } + + public static WorkContext GetWorkContext(this ControllerContext controllerContext) { + if (controllerContext == null) + return null; + return WorkContextExtensions.GetWorkContext(controllerContext.RequestContext); } From 79fbacf0b683772aaa0a9cdc19dcf1318bd6a755 Mon Sep 17 00:00:00 2001 From: Nathan Heskew Date: Thu, 25 Nov 2010 22:10:07 -0800 Subject: [PATCH 30/70] Updating the RoutableHomePageProvider to use the relevant display action for the given content item. This lets unique display actions, like Blog/Item, do their own thing. In the case of the blog, its posts are once again showing up on the home page. The routing problem (where the home page'd item still is seen as having its own path) still needs to be fixed so the item on the home page can't be hit at different URLs (and so something like paging works on the home page) work item: 16720 --HG-- branch : dev --- src/Orchard.Web/Core/Feeds/Services/FeedFilter.cs | 4 ++++ .../Core/Routable/Handlers/RoutePartHandler.cs | 11 +++++++++-- .../Routable/Services/RoutableHomePageProvider.cs | 13 +++++++++---- .../Core/Routable/Views/Routable.HomePage.cshtml | 5 ++++- .../Orchard.Blogs/Handlers/BlogPartHandler.cs | 7 +++++++ src/Orchard/UI/Navigation/MenuFilter.cs | 4 ++++ src/Orchard/UI/Resources/ResourceFilter.cs | 5 ++++- 7 files changed, 41 insertions(+), 8 deletions(-) diff --git a/src/Orchard.Web/Core/Feeds/Services/FeedFilter.cs b/src/Orchard.Web/Core/Feeds/Services/FeedFilter.cs index 5af31c66c..0fc6f9621 100644 --- a/src/Orchard.Web/Core/Feeds/Services/FeedFilter.cs +++ b/src/Orchard.Web/Core/Feeds/Services/FeedFilter.cs @@ -21,6 +21,10 @@ namespace Orchard.Core.Feeds.Services { dynamic Shape { get; set; } public void OnResultExecuting(ResultExecutingContext filterContext) { + // should only run on a full view rendering result + if (!(filterContext.Result is ViewResult)) + return; + var layout = _workContextAccessor.GetContext(filterContext).Layout; var feed = Shape.Feed() .FeedManager(_feedManager); diff --git a/src/Orchard.Web/Core/Routable/Handlers/RoutePartHandler.cs b/src/Orchard.Web/Core/Routable/Handlers/RoutePartHandler.cs index 7e7ba858b..6e70fa72d 100644 --- a/src/Orchard.Web/Core/Routable/Handlers/RoutePartHandler.cs +++ b/src/Orchard.Web/Core/Routable/Handlers/RoutePartHandler.cs @@ -72,8 +72,15 @@ namespace Orchard.Core.Routable.Handlers { public class RoutePartHandlerBase : ContentHandlerBase { public override void GetContentItemMetadata(GetContentItemMetadataContext context) { var routable = context.ContentItem.As(); - if (routable != null) { - context.Metadata.DisplayText = routable.Title; + + if (routable == null) + return; + + context.Metadata.DisplayText = routable.Title; + + // set the display route values if it hasn't been set or only has been set by the Contents module. + // allows other modules to set their own display. probably not common enough to warrant some priority implemntation + if (context.Metadata.DisplayRouteValues == null || context.Metadata.DisplayRouteValues["Area"] as string == "Contents") { context.Metadata.DisplayRouteValues = new RouteValueDictionary { {"Area", "Routable"}, {"Controller", "Item"}, diff --git a/src/Orchard.Web/Core/Routable/Services/RoutableHomePageProvider.cs b/src/Orchard.Web/Core/Routable/Services/RoutableHomePageProvider.cs index 18bd86f49..bf43531b5 100644 --- a/src/Orchard.Web/Core/Routable/Services/RoutableHomePageProvider.cs +++ b/src/Orchard.Web/Core/Routable/Services/RoutableHomePageProvider.cs @@ -10,13 +10,16 @@ namespace Orchard.Core.Routable.Services { [UsedImplicitly] public class RoutableHomePageProvider : IHomePageProvider { private readonly IContentManager _contentManager; + private readonly IWorkContextAccessor _workContextAccessor; public const string Name = "RoutableHomePageProvider"; public RoutableHomePageProvider( IOrchardServices services, IContentManager contentManager, - IShapeFactory shapeFactory) { + IShapeFactory shapeFactory, + IWorkContextAccessor workContextAccessor) { _contentManager = contentManager; + _workContextAccessor = workContextAccessor; Services = services; T = NullLocalizer.Instance; Shape = shapeFactory; @@ -39,11 +42,13 @@ namespace Orchard.Core.Routable.Services { if (contentItem == null || !contentItem.Is()) return new HttpNotFoundResult(); - var model = _contentManager.BuildDisplay(contentItem); + // get the display metadata for the home page item + var displayRouteValues = _contentManager.GetItemMetadata(contentItem).DisplayRouteValues; - return new ViewResult { + var model = Shape.ViewModel(RouteValues: displayRouteValues); + return new PartialViewResult { ViewName = "Routable.HomePage", - ViewData = new ViewDataDictionary(model) + ViewData = new ViewDataDictionary(model) }; } } diff --git a/src/Orchard.Web/Core/Routable/Views/Routable.HomePage.cshtml b/src/Orchard.Web/Core/Routable/Views/Routable.HomePage.cshtml index 631e9eb0f..594797276 100644 --- a/src/Orchard.Web/Core/Routable/Views/Routable.HomePage.cshtml +++ b/src/Orchard.Web/Core/Routable/Views/Routable.HomePage.cshtml @@ -1 +1,4 @@ -@Display(Model) \ No newline at end of file +@{ + RouteValueDictionary routeValues = Model.RouteValues; + Html.RenderAction(routeValues["action"] as string, routeValues["controller"] as string, routeValues); +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Handlers/BlogPartHandler.cs b/src/Orchard.Web/Modules/Orchard.Blogs/Handlers/BlogPartHandler.cs index 23c9b6693..afbb78849 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Handlers/BlogPartHandler.cs +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Handlers/BlogPartHandler.cs @@ -3,6 +3,7 @@ using JetBrains.Annotations; using Orchard.Blogs.Models; using Orchard.ContentManagement; using Orchard.ContentManagement.Handlers; +using Orchard.Core.Routable.Models; using Orchard.Data; namespace Orchard.Blogs.Handlers { @@ -23,6 +24,12 @@ namespace Orchard.Blogs.Handlers { if (blog == null) return; + context.Metadata.DisplayRouteValues = new RouteValueDictionary { + {"Area", "Orchard.Blogs"}, + {"Controller", "Blog"}, + {"Action", "Item"}, + {"blogSlug", blog.As().Slug} + }; context.Metadata.CreateRouteValues = new RouteValueDictionary { {"Area", "Orchard.Blogs"}, {"Controller", "BlogAdmin"}, diff --git a/src/Orchard/UI/Navigation/MenuFilter.cs b/src/Orchard/UI/Navigation/MenuFilter.cs index 6e2a80875..4027305c1 100644 --- a/src/Orchard/UI/Navigation/MenuFilter.cs +++ b/src/Orchard/UI/Navigation/MenuFilter.cs @@ -21,6 +21,10 @@ namespace Orchard.UI.Navigation { } public void OnResultExecuting(ResultExecutingContext filterContext) { + // should only run on a full view rendering result + if (!(filterContext.Result is ViewResult)) + return; + var workContext = _workContextAccessor.GetContext(filterContext); var menuName = "main"; diff --git a/src/Orchard/UI/Resources/ResourceFilter.cs b/src/Orchard/UI/Resources/ResourceFilter.cs index 72148a1b2..990184f1b 100644 --- a/src/Orchard/UI/Resources/ResourceFilter.cs +++ b/src/Orchard/UI/Resources/ResourceFilter.cs @@ -1,4 +1,3 @@ -using System; using System.Web.Mvc; using Orchard.DisplayManagement; using Orchard.Mvc.Filters; @@ -20,6 +19,10 @@ namespace Orchard.UI.Resources { public void OnResultExecuting(ResultExecutingContext filterContext) { + // should only run on a full view rendering result + if (!(filterContext.Result is ViewResult)) + return; + var ctx = _workContextAccessor.GetContext(); var head = ctx.Layout.Head; var tail = ctx.Layout.Tail; From 463a215107c36913dc6843b176f4c2f87f1e7f29 Mon Sep 17 00:00:00 2001 From: Renaud Paquay Date: Fri, 26 Nov 2010 14:14:06 -0800 Subject: [PATCH 31/70] Remove unused files --HG-- branch : dev --- .../Localization/en-US/orchard.core.po | 2315 ------- .../App_Data/Localization/fr/orchard.core.po | 5789 ----------------- src/Orchard.Web/Core/Orchard.Core.csproj | 6 +- 3 files changed, 3 insertions(+), 8107 deletions(-) delete mode 100644 src/Orchard.Web/Core/App_Data/Localization/en-US/orchard.core.po delete mode 100644 src/Orchard.Web/Core/App_Data/Localization/fr/orchard.core.po diff --git a/src/Orchard.Web/Core/App_Data/Localization/en-US/orchard.core.po b/src/Orchard.Web/Core/App_Data/Localization/en-US/orchard.core.po deleted file mode 100644 index 6292d7d71..000000000 --- a/src/Orchard.Web/Core/App_Data/Localization/en-US/orchard.core.po +++ /dev/null @@ -1,2315 +0,0 @@ -#: ~/Core/Common/Drivers/RoutableDriver.cs -#| msgid : "Please do not use any of the following characters in your slugs: \"/\", \":\", \"?\", \"#\", \"[\", \"]\", \"@\", \"!\", \"$\", \"&\", \"'\", \"(\", \")\", \"*\", \"+\", \",\", \";\", \"=\". No spaces are allowed (please use dashes or underscores instead)." -msgid "Please do not use any of the following characters in your slugs: \"/\", \":\", \"?\", \"#\", \"[\", \"]\", \"@\", \"!\", \"$\", \"&\", \"'\", \"(\", \")\", \"*\", \"+\", \",\", \";\", \"=\". No spaces are allowed (please use dashes or underscores instead)." -msgstr "Please do not use any of the following characters in your slugs: \"/\", \":\", \"?\", \"#\", \"[\", \"]\", \"@\", \"!\", \"$\", \"&\", \"'\", \"(\", \")\", \"*\", \"+\", \",\", \";\", \"=\". No spaces are allowed (please use dashes or underscores instead)." - -#: ~/Core/Common/Drivers/RoutableDriver.cs -#| msgid : "Slugs in conflict. \"{0}\" is already set for a previously created {2} so now it has the slug \"{1}\"" -msgid "Slugs in conflict. \"{0}\" is already set for a previously created {2} so now it has the slug \"{1}\"" -msgstr "Slugs in conflict. \"{0}\" is already set for a previously created {2} so now it has the slug \"{1}\"" - -#: ~/Core/Common/Handlers/CommonAspectHandler.cs -#| msgid : "Invalid user name" -msgid "Invalid user name" -msgstr "Invalid user name" - -#: ~/Core/Common/Views/DisplayTemplates/Parts/Common.Body.Summary.ascx -#| msgid : "[more]" -msgid "[more]" -msgstr "[more]" - -#: ~/Core/Dashboard/Views/Admin/Index.ascx -#| msgid : "Welcome to Orchard" -msgid "Welcome to Orchard" -msgstr "Welcome to Orchard" - -#: ~/Core/Dashboard/Views/Admin/Index.ascx -#| msgid : "The Orchard Team" -msgid "The Orchard Team" -msgstr "The Orchard Team" - -#: ~/Core/Dashboard/Views/Admin/Index.ascx -#| msgid : "This is the place where you can manage your web site, its appearance and its contents. Please take a moment to explore the different menu items on the left of the screen to familiarize yourself with the features of the application. For example, try to change the theme through the “Manage Themes” menu entry. You can also create new pages and manage existing ones through the “Manage Pages” menu entry or create blogs through “Manage Blogs”." -msgid "This is the place where you can manage your web site, its appearance and its contents. Please take a moment to explore the different menu items on the left of the screen to familiarize yourself with the features of the application. For example, try to change the theme through the “Manage Themes” menu entry. You can also create new pages and manage existing ones through the “Manage Pages” menu entry or create blogs through “Manage Blogs”." -msgstr "This is the place where you can manage your web site, its appearance and its contents. Please take a moment to explore the different menu items on the left of the screen to familiarize yourself with the features of the application. For example, try to change the theme through the “Manage Themes” menu entry. You can also create new pages and manage existing ones through the “Manage Pages” menu entry or create blogs through “Manage Blogs”." - -#: ~/Core/Dashboard/Views/Admin/Index.ascx -#| msgid : "Have fun!" -msgid "Have fun!" -msgstr "Have fun!" - -#: ~/Core/Navigation/Controllers/AdminController.cs -#| msgid : "Not allowed to manage the main menu" -msgid "Not allowed to manage the main menu" -msgstr "Not allowed to manage the main menu" - -#: ~/Core/Navigation/Controllers/AdminController.cs -#| msgid : "Couldn't manage the main menu" -msgid "Couldn't manage the main menu" -msgstr "Couldn't manage the main menu" - -#: ~/Core/Navigation/Controllers/AdminController.cs -#| msgid : "Couldn't manage the main menu" -msgid "Couldn't manage the main menu" -msgstr "Couldn't manage the main menu" - -#: ~/Core/Navigation/Controllers/AdminController.cs -#| msgid : "Couldn't manage the main menu" -msgid "Couldn't manage the main menu" -msgstr "Couldn't manage the main menu" - -#: ~/Core/Navigation/Drivers/MenuPartDriver.cs -#| msgid : "The MenuText field is required" -msgid "The MenuText field is required" -msgstr "The MenuText field is required" - -#: ~/Core/Navigation/Views/Admin/Index.ascx -#| msgid : "Manage Main Menu" -msgid "Manage Main Menu" -msgstr "Manage Main Menu" - -#: ~/Core/Settings/Controllers/AdminController.cs -#| msgid : "Not authorized to manage settings" -msgid "Not authorized to manage settings" -msgstr "Not authorized to manage settings" - -#: ~/Core/Settings/Controllers/AdminController.cs -#| msgid : "Not authorized to manage settings" -msgid "Not authorized to manage settings" -msgstr "Not authorized to manage settings" - -#: ~/Core/Settings/Controllers/AdminController.cs -#| msgid : "Settings updated" -msgid "Settings updated" -msgstr "Settings updated" - -#: ~/Core/Settings/Descriptor/ShellDescriptorManager.cs -#| msgid : "Invalid serial number for shell descriptor" -msgid "Invalid serial number for shell descriptor" -msgstr "Invalid serial number for shell descriptor" - -#: ~/Core/Settings/Views/Admin/Index.ascx -#| msgid : "Manage Settings" -msgid "Manage Settings" -msgstr "Manage Settings" - -#: ~/Modules/Orchard.Blogs/Controllers/BlogAdminController.cs -#| msgid : "Not allowed to create blogs" -msgid "Not allowed to create blogs" -msgstr "Not allowed to create blogs" - -#: ~/Modules/Orchard.Blogs/Controllers/BlogAdminController.cs -#| msgid : "Couldn't create blog" -msgid "Couldn't create blog" -msgstr "Couldn't create blog" - -#: ~/Modules/Orchard.Blogs/Controllers/BlogAdminController.cs -#| msgid : "Not allowed to edit blog" -msgid "Not allowed to edit blog" -msgstr "Not allowed to edit blog" - -#: ~/Modules/Orchard.Blogs/Controllers/BlogAdminController.cs -#| msgid : "Couldn't edit blog" -msgid "Couldn't edit blog" -msgstr "Couldn't edit blog" - -#: ~/Modules/Orchard.Blogs/Controllers/BlogAdminController.cs -#| msgid : "Blog information updated" -msgid "Blog information updated" -msgstr "Blog information updated" - -#: ~/Modules/Orchard.Blogs/Controllers/BlogAdminController.cs -#| msgid : "Couldn't delete blog" -msgid "Couldn't delete blog" -msgstr "Couldn't delete blog" - -#: ~/Modules/Orchard.Blogs/Controllers/BlogAdminController.cs -#| msgid : "Blog was successfully deleted" -msgid "Blog was successfully deleted" -msgstr "Blog was successfully deleted" - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid : "Not allowed to create blog post" -msgid "Not allowed to create blog post" -msgstr "Not allowed to create blog post" - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid : "Couldn't create blog post" -msgid "Couldn't create blog post" -msgstr "Couldn't create blog post" - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid : "Blog post has been published" -msgid "Blog post has been published" -msgstr "Blog post has been published" - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid : "Blog post has been scheduled for publishing" -msgid "Blog post has been scheduled for publishing" -msgstr "Blog post has been scheduled for publishing" - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid : "Blog post draft has been saved" -msgid "Blog post draft has been saved" -msgstr "Blog post draft has been saved" - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid : "Couldn't edit blog post" -msgid "Couldn't edit blog post" -msgstr "Couldn't edit blog post" - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid : "Couldn't edit blog post" -msgid "Couldn't edit blog post" -msgstr "Couldn't edit blog post" - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid : "Blog post has been published" -msgid "Blog post has been published" -msgstr "Blog post has been published" - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid : "Blog post has been scheduled for publishing" -msgid "Blog post has been scheduled for publishing" -msgstr "Blog post has been scheduled for publishing" - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid : "Blog post draft has been saved" -msgid "Blog post draft has been saved" -msgstr "Blog post draft has been saved" - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid : "There is no draft to discard." -msgid "There is no draft to discard." -msgstr "There is no draft to discard." - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid : "Couldn't discard blog post draft" -msgid "Couldn't discard blog post draft" -msgstr "Couldn't discard blog post draft" - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid : "Can not discard draft on unpublished blog post." -msgid "Can not discard draft on unpublished blog post." -msgstr "Can not discard draft on unpublished blog post." - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid : "Blog post draft version discarded" -msgid "Blog post draft version discarded" -msgstr "Blog post draft version discarded" - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid : "Couldn't delete blog post" -msgid "Couldn't delete blog post" -msgstr "Couldn't delete blog post" - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid : "Blog post was successfully deleted" -msgid "Blog post was successfully deleted" -msgstr "Blog post was successfully deleted" - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid : "Couldn't publish blog post" -msgid "Couldn't publish blog post" -msgstr "Couldn't publish blog post" - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid : "Blog post successfully published." -msgid "Blog post successfully published." -msgstr "Blog post successfully published." - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid : "Couldn't unpublish blog post" -msgid "Couldn't unpublish blog post" -msgstr "Couldn't unpublish blog post" - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid : "Blog post successfully unpublished." -msgid "Blog post successfully unpublished." -msgstr "Blog post successfully unpublished." - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostController.cs -#| msgid : "Couldn't view blog post" -msgid "Couldn't view blog post" -msgstr "Couldn't view blog post" - -#: ~/Modules/Orchard.Blogs/Views/BlogAdmin/Create.ascx -#| msgid : "Add Blog" -msgid "Add Blog" -msgstr "Add Blog" - -#: ~/Modules/Orchard.Blogs/Views/BlogAdmin/Edit.ascx -#| msgid : "Edit Blog" -msgid "Edit Blog" -msgstr "Edit Blog" - -#: ~/Modules/Orchard.Blogs/Views/BlogAdmin/Item.ascx -#| msgid : "Manage Blog" -msgid "Manage Blog" -msgstr "Manage Blog" - -#: ~/Modules/Orchard.Blogs/Views/BlogAdmin/List.ascx -#| msgid : "Manage Blogs" -msgid "Manage Blogs" -msgstr "Manage Blogs" - -#: ~/Modules/Orchard.Blogs/Views/BlogAdmin/List.ascx -#| msgid : "There are no blogs for you to see. Want to add one?" -msgid "There are no blogs for you to see. Want to add one?" -msgstr "There are no blogs for you to see. Want to add one?" - -#: ~/Modules/Orchard.Blogs/Views/BlogPost/ListByArchive.ascx -#| msgid : "Archives" -msgid "Archives" -msgstr "Archives" - -#: ~/Modules/Orchard.Blogs/Views/BlogPost/ListByArchive.ascx -#| msgid : "Archives" -msgid "Archives" -msgstr "Archives" - -#: ~/Modules/Orchard.Blogs/Views/BlogPostAdmin/Create.ascx -#| msgid : "Add Post" -msgid "Add Post" -msgstr "Add Post" - -#: ~/Modules/Orchard.Blogs/Views/BlogPostAdmin/Edit.ascx -#| msgid : "Edit Post" -msgid "Edit Post" -msgstr "Edit Post" - -#: ~/Modules/Orchard.Blogs/Views/EditorTemplates/Items/Blogs.BlogPost.ascx -#| msgid : "Discard Draft" -msgid "Discard Draft" -msgstr "Discard Draft" - -#: ~/Modules/Orchard.Comments/AdminMenu.cs -#| msgid : "Comments" -msgid "Comments" -msgstr "Comments" - -#: ~/Modules/Orchard.Comments/AdminMenu.cs -#| msgid : "Manage Comments" -msgid "Manage Comments" -msgstr "Manage Comments" - -#: ~/Modules/Orchard.Comments/Controllers/AdminController.cs -#| msgid : "Listing comments failed: " -msgid "Listing comments failed: " -msgstr "Listing comments failed: " - -#: ~/Modules/Orchard.Comments/Controllers/AdminController.cs -#| msgid : "Couldn't moderate comment" -msgid "Couldn't moderate comment" -msgstr "Couldn't moderate comment" - -#: ~/Modules/Orchard.Comments/Controllers/AdminController.cs -#| msgid : "Couldn't moderate comment" -msgid "Couldn't moderate comment" -msgstr "Couldn't moderate comment" - -#: ~/Modules/Orchard.Comments/Controllers/AdminController.cs -#| msgid : "Couldn't moderate comment" -msgid "Couldn't moderate comment" -msgstr "Couldn't moderate comment" - -#: ~/Modules/Orchard.Comments/Controllers/AdminController.cs -#| msgid : "Couldn't delete comment" -msgid "Couldn't delete comment" -msgstr "Couldn't delete comment" - -#: ~/Modules/Orchard.Comments/Controllers/AdminController.cs -#| msgid : "Editing comments failed: " -msgid "Editing comments failed: " -msgstr "Editing comments failed: " - -#: ~/Modules/Orchard.Comments/Controllers/AdminController.cs -#| msgid : "Listing comments failed: " -msgid "Listing comments failed: " -msgstr "Listing comments failed: " - -#: ~/Modules/Orchard.Comments/Controllers/AdminController.cs -#| msgid : "Couldn't moderate comment" -msgid "Couldn't moderate comment" -msgstr "Couldn't moderate comment" - -#: ~/Modules/Orchard.Comments/Controllers/AdminController.cs -#| msgid : "Couldn't moderate comment" -msgid "Couldn't moderate comment" -msgstr "Couldn't moderate comment" - -#: ~/Modules/Orchard.Comments/Controllers/AdminController.cs -#| msgid : "Couldn't moderate comment" -msgid "Couldn't moderate comment" -msgstr "Couldn't moderate comment" - -#: ~/Modules/Orchard.Comments/Controllers/AdminController.cs -#| msgid : "Couldn't delete comment" -msgid "Couldn't delete comment" -msgstr "Couldn't delete comment" - -#: ~/Modules/Orchard.Comments/Controllers/AdminController.cs -#| msgid : "Editing comments failed: " -msgid "Editing comments failed: " -msgstr "Editing comments failed: " - -#: ~/Modules/Orchard.Comments/Controllers/AdminController.cs -#| msgid : "Couldn't close comments" -msgid "Couldn't close comments" -msgstr "Couldn't close comments" - -#: ~/Modules/Orchard.Comments/Controllers/AdminController.cs -#| msgid : "Closing Comments failed: " -msgid "Closing Comments failed: " -msgstr "Closing Comments failed: " - -#: ~/Modules/Orchard.Comments/Controllers/AdminController.cs -#| msgid : "Couldn't enable comments" -msgid "Couldn't enable comments" -msgstr "Couldn't enable comments" - -#: ~/Modules/Orchard.Comments/Controllers/AdminController.cs -#| msgid : "Enabling Comments failed: " -msgid "Enabling Comments failed: " -msgstr "Enabling Comments failed: " - -#: ~/Modules/Orchard.Comments/Controllers/AdminController.cs -#| msgid : "Editing comment failed: " -msgid "Editing comment failed: " -msgstr "Editing comment failed: " - -#: ~/Modules/Orchard.Comments/Controllers/AdminController.cs -#| msgid : "Couldn't edit comment" -msgid "Couldn't edit comment" -msgstr "Couldn't edit comment" - -#: ~/Modules/Orchard.Comments/Controllers/AdminController.cs -#| msgid : "Editing Comment failed: " -msgid "Editing Comment failed: " -msgstr "Editing Comment failed: " - -#: ~/Modules/Orchard.Comments/Controllers/AdminController.cs -#| msgid : "Couldn't delete comment" -msgid "Couldn't delete comment" -msgstr "Couldn't delete comment" - -#: ~/Modules/Orchard.Comments/Controllers/AdminController.cs -#| msgid : "Deleting comment failed: " -msgid "Deleting comment failed: " -msgstr "Deleting comment failed: " - -#: ~/Modules/Orchard.Comments/Controllers/CommentController.cs -#| msgid : "Couldn't add comment" -msgid "Couldn't add comment" -msgstr "Couldn't add comment" - -#: ~/Modules/Orchard.Comments/Controllers/CommentController.cs -#| msgid : "Your comment will appear after the site administrator approves it." -msgid "Your comment will appear after the site administrator approves it." -msgstr "Your comment will appear after the site administrator approves it." - -#: ~/Modules/Orchard.Comments/Controllers/CommentController.cs -#| msgid : "Creating Comment failed: " -msgid "Creating Comment failed: " -msgstr "Creating Comment failed: " - -#: ~/Modules/Orchard.Comments/Extensions/HtmlHelperExtensions.cs -#| msgid : "0 comments" -msgid "0 comments" -msgstr "0 comments" - -#: ~/Modules/Orchard.Comments/Extensions/HtmlHelperExtensions.cs -#| msgid : "({0} pending)" -msgid "({0} pending)" -msgstr "({0} pending)" - -#: ~/Modules/Orchard.Comments/Feeds/CommentFeedItemBuilder.cs -#| msgid : "Comment on {0} by {1}" -msgid "Comment on {0} by {1}" -msgstr "Comment on {0} by {1}" - -#: ~/Modules/Orchard.Comments/Services/CommentValidator.cs -#| msgid : "Please configure your Akismet key for spam protection" -msgid "Please configure your Akismet key for spam protection" -msgstr "Please configure your Akismet key for spam protection" - -#: ~/Modules/Orchard.Comments/Views/Admin/Details.aspx -#| msgid : "Comments for {0}" -msgid "Comments for {0}" -msgstr "Comments for {0}" - -#: ~/Modules/Orchard.Comments/Views/Admin/Edit.aspx -#| msgid : "Edit Comment" -msgid "Edit Comment" -msgstr "Edit Comment" - -#: ~/Modules/Orchard.Comments/Views/Admin/Index.aspx -#| msgid : "Manage Comments" -msgid "Manage Comments" -msgstr "Manage Comments" - -#: ~/Modules/Orchard.Comments/Views/DisplayTemplates/Parts/Comments.HasComments.ascx -#| msgid : "log on" -msgid "log on" -msgstr "log on" - -#: ~/Modules/Orchard.Comments/Views/DisplayTemplates/Parts/Comments.HasComments.ascx -#| msgid : "Add a Comment" -msgid "Add a Comment" -msgstr "Add a Comment" - -#: ~/Themes/Contoso/Views/DisplayTemplates/Parts/Comments.HasComments.ascx -#| msgid : "You must {0} to comment." -msgid "You must {0} to comment." -msgstr "You must {0} to comment." - -#: ~/Themes/Corporate/Views/DisplayTemplates/Parts/Comments.HasComments.ascx -#| msgid : "Comments have been disabled for this content." -msgid "Comments have been disabled for this content." -msgstr "Comments have been disabled for this content." - -#: ~/Modules/Orchard.Comments/Views/DisplayTemplates/Parts/Comments.HasComments.ascx -#| msgid : "Hi, {0}!" -msgid "Hi, {0}!" -msgstr "Hi, {0}!" - -#: ~/Modules/Orchard.Comments/Views/DisplayTemplates/Parts/Comments.HasComments.ascx -#| msgid : "Comment" -msgid "Comment" -msgstr "Comment" - -#: ~/Modules/Orchard.Comments/Views/DisplayTemplates/Parts/Comments.HasComments.ascx -#| msgid : "Submit Comment" -msgid "Submit Comment" -msgstr "Submit Comment" - -#: ~/Modules/Orchard.Comments/Views/EditorTemplates/Parts/Comments.HasComments.ascx -#| msgid : "Comments are shown. Existing comments are displayed." -msgid "Comments are shown. Existing comments are displayed." -msgstr "Comments are shown. Existing comments are displayed." - -#: ~/Modules/Orchard.Comments/Views/EditorTemplates/Parts/Comments.HasComments.ascx -#| msgid : "Allow new comments" -msgid "Allow new comments" -msgstr "Allow new comments" - -#: ~/Modules/Orchard.Comments/Views/EditorTemplates/Parts/Comments.HasComments.ascx -#| msgid : "Enable to show the comment form. Disabling still allows the existing comments to be shown but does not allow the conversation to continue." -msgid "Enable to show the comment form. Disabling still allows the existing comments to be shown but does not allow the conversation to continue." -msgstr "Enable to show the comment form. Disabling still allows the existing comments to be shown but does not allow the conversation to continue." - -#: ~/Modules/Orchard.Experimental/Controllers/HomeController.cs -#| msgid : "Notifier works without BaseViewModel" -msgid "Notifier works without BaseViewModel" -msgstr "Notifier works without BaseViewModel" - -#: ~/Modules/Orchard.Experimental/Views/Content/Details.aspx -#| msgid : "{0} Content Type" -msgid "{0} Content Type" -msgstr "{0} Content Type" - -#: ~/Modules/Orchard.Experimental/Views/Content/Details.aspx -#| msgid : "Content" -msgid "Content" -msgstr "Content" - -#: ~/Modules/Orchard.Experimental/Views/Content/Details.aspx -#| msgid : "view" -msgid "view" -msgstr "view" - -#: ~/Modules/Orchard.Experimental/Views/Content/Details.aspx -#| msgid : "edit" -msgid "edit" -msgstr "edit" - -#: ~/Modules/Orchard.Experimental/Views/Content/Details.aspx -#| msgid : "{0} #{1} v{2}" -msgid "{0} #{1} v{2}" -msgstr "{0} #{1} v{2}" - -#: ~/Modules/Orchard.Experimental/Views/Content/Index.aspx -#| msgid : "Content" -msgid "Content" -msgstr "Content" - -#: ~/Modules/Orchard.Experimental/Views/Content/Index.aspx -#| msgid : "{0}: {1}" -msgid "{0}: {1}" -msgstr "{0}: {1}" - -#: ~/Modules/Orchard.Experimental/Views/Content/Index.aspx -#| msgid : "view" -msgid "view" -msgstr "view" - -#: ~/Modules/Orchard.Experimental/Views/Content/Index.aspx -#| msgid : "edit" -msgid "edit" -msgstr "edit" - -#: ~/Modules/Orchard.Experimental/Views/DisplayTemplates/Parts/Experimental.ShowDebugLink.ascx -#| msgid : "{0} #{1} v{2}" -msgid "{0} #{1} v{2}" -msgstr "{0} #{1} v{2}" - -#: ~/Modules/Orchard.Experimental/Views/EditorTemplates/Parts/Experimental.ShowDebugLink.ascx -#| msgid : "{0} #{1} v{2}" -msgid "{0} #{1} v{2}" -msgstr "{0} #{1} v{2}" - -#: ~/Modules/Orchard.Experimental/Views/Home/Index.aspx -#| msgid : "Dev Tools" -msgid "Dev Tools" -msgstr "Dev Tools" - -#: ~/Modules/Orchard.Experimental/Views/Home/Index.aspx -#| msgid : "Contents" -msgid "Contents" -msgstr "Contents" - -#: ~/Modules/Orchard.Experimental/Views/Home/Index.aspx -#| msgid : "Test Unauthorized Request" -msgid "Test Unauthorized Request" -msgstr "Test Unauthorized Request" - -#: ~/Modules/Orchard.Media/Controllers/AdminController.cs -#| msgid : "Couldn't create media folder" -msgid "Couldn't create media folder" -msgstr "Couldn't create media folder" - -#: ~/Modules/Orchard.Media/Controllers/AdminController.cs -#| msgid : "Couldn't delete media file" -msgid "Couldn't delete media file" -msgstr "Couldn't delete media file" - -#: ~/Modules/Orchard.Media/Controllers/AdminController.cs -#| msgid : "Couldn't delete media folder" -msgid "Couldn't delete media folder" -msgstr "Couldn't delete media folder" - -#: ~/Modules/Orchard.Media/Controllers/AdminController.cs -#| msgid : "Couldn't delete media folder" -msgid "Couldn't delete media folder" -msgstr "Couldn't delete media folder" - -#: ~/Modules/Orchard.Media/Controllers/AdminController.cs -#| msgid : "Couldn't rename media folder" -msgid "Couldn't rename media folder" -msgstr "Couldn't rename media folder" - -#: ~/Modules/Orchard.Media/Controllers/AdminController.cs -#| msgid : "Couldn't upload media file" -msgid "Couldn't upload media file" -msgstr "Couldn't upload media file" - -#: ~/Modules/Orchard.Media/Controllers/AdminController.cs -#| msgid : "Select a file to upload" -msgid "Select a file to upload" -msgstr "Select a file to upload" - -#: ~/Modules/Orchard.Media/Controllers/AdminController.cs -#| msgid : "ERROR: You don't have permission to upload media files" -msgid "ERROR: You don't have permission to upload media files" -msgstr "ERROR: You don't have permission to upload media files" - -#: ~/Modules/Orchard.Media/Controllers/AdminController.cs -#| msgid : "HEY: You didn't give me a file to upload" -msgid "HEY: You didn't give me a file to upload" -msgstr "HEY: You didn't give me a file to upload" - -#: ~/Modules/Orchard.Media/Controllers/AdminController.cs -#| msgid : "ERROR: Uploading media file failed: {0}" -msgid "ERROR: Uploading media file failed: {0}" -msgstr "ERROR: Uploading media file failed: {0}" - -#: ~/Modules/Orchard.Media/Controllers/AdminController.cs -#| msgid : "Couldn't modify media file" -msgid "Couldn't modify media file" -msgstr "Couldn't modify media file" - -#: ~/Modules/Orchard.Media/Controllers/AdminController.cs -#| msgid : "Couldn't delete media file" -msgid "Couldn't delete media file" -msgstr "Couldn't delete media file" - -#: ~/Modules/Orchard.Media/Views/Admin/Add.aspx -#| msgid : "Add Media" -msgid "Add Media" -msgstr "Add Media" - -#: ~/Modules/Orchard.Media/Views/Admin/Add.aspx -#| msgid : "Media Folders" -msgid "Media Folders" -msgstr "Media Folders" - -#: ~/Modules/Orchard.Media/Views/Admin/Add.aspx -#| msgid : "File Path - multiple files must be in a zipped folder" -msgid "File Path - multiple files must be in a zipped folder" -msgstr "File Path - multiple files must be in a zipped folder" - -#: ~/Modules/Orchard.Media/Views/Admin/Create.aspx -#| msgid : "Add a Folder" -msgid "Add a Folder" -msgstr "Add a Folder" - -#: ~/Modules/Orchard.Media/Views/Admin/Create.aspx -#| msgid : "Media Folders" -msgid "Media Folders" -msgstr "Media Folders" - -#: ~/Modules/Orchard.Media/Views/Admin/Edit.aspx -#| msgid : "Manage Folder" -msgid "Manage Folder" -msgstr "Manage Folder" - -#: ~/Modules/Orchard.Media/Views/Admin/Edit.aspx -#| msgid : "Folder Properties" -msgid "Folder Properties" -msgstr "Folder Properties" - -#: ~/Modules/Orchard.Media/Views/Admin/Edit.aspx -#| msgid : "Media Folders" -msgid "Media Folders" -msgstr "Media Folders" - -#: ~/Modules/Orchard.Media/Views/Admin/Edit.aspx -#| msgid : "Folder Properties" -msgid "Folder Properties" -msgstr "Folder Properties" - -#: ~/Modules/Orchard.Media/Views/Admin/Edit.aspx -#| msgid : "Add media" -msgid "Add media" -msgstr "Add media" - -#: ~/Modules/Orchard.Media/Views/Admin/Edit.aspx -#| msgid : "Add a folder" -msgid "Add a folder" -msgstr "Add a folder" - -#: ~/Modules/Orchard.Media/Views/Admin/Edit.aspx -#| msgid : "Add media" -msgid "Add media" -msgstr "Add media" - -#: ~/Modules/Orchard.Media/Views/Admin/Edit.aspx -#| msgid : "Add a folder" -msgid "Add a folder" -msgstr "Add a folder" - -#: ~/Modules/Orchard.Media/Views/Admin/EditMedia.aspx -#| msgid : "Edit Media - {0}" -msgid "Edit Media - {0}" -msgstr "Edit Media - {0}" - -#: ~/Modules/Orchard.Media/Views/Admin/EditMedia.aspx -#| msgid : "Media Folders" -msgid "Media Folders" -msgstr "Media Folders" - -#: ~/Modules/Orchard.Media/Views/Admin/EditMedia.aspx -#| msgid : "Dimensions: 500 x 375 pixels" -msgid "Dimensions: 500 x 375 pixels" -msgstr "Dimensions: 500 x 375 pixels" - -#: ~/Modules/Orchard.Media/Views/Admin/EditMedia.aspx -#| msgid : "Size: {0}" -msgid "Size: {0}" -msgstr "Size: {0}" - -#: ~/Modules/Orchard.Media/Views/Admin/EditMedia.aspx -#| msgid : "Added on: {0} by Orchard User" -msgid "Added on: {0} by Orchard User" -msgstr "Added on: {0} by Orchard User" - -#: ~/Modules/Orchard.Media/Views/Admin/EditMedia.aspx -#| msgid : "Dimensions: 500 x 375 pixels" -msgid "Dimensions: 500 x 375 pixels" -msgstr "Dimensions: 500 x 375 pixels" - -#: ~/Modules/Orchard.Media/Views/Admin/EditMedia.aspx -#| msgid : "Size: {0}" -msgid "Size: {0}" -msgstr "Size: {0}" - -#: ~/Modules/Orchard.Media/Views/Admin/EditMedia.aspx -#| msgid : "Added on: {0} by Orchard User" -msgid "Added on: {0} by Orchard User" -msgstr "Added on: {0} by Orchard User" - -#: ~/Modules/Orchard.Media/Views/Admin/EditProperties.aspx -#| msgid : "Folder Properties" -msgid "Folder Properties" -msgstr "Folder Properties" - -#: ~/Modules/Orchard.Media/Views/Admin/EditProperties.aspx -#| msgid : "Media Folders" -msgid "Media Folders" -msgstr "Media Folders" - -#: ~/Modules/Orchard.Media/Views/Admin/Index.aspx -#| msgid : "Manage Media Folders" -msgid "Manage Media Folders" -msgstr "Manage Media Folders" - -#: ~/Modules/Orchard.Media/Views/Admin/Index.aspx -#| msgid : "Add a folder" -msgid "Add a folder" -msgstr "Add a folder" - -#: ~/Modules/Orchard.Media/Views/Admin/Index.aspx -#| msgid : "Add a folder" -msgid "Add a folder" -msgstr "Add a folder" - -#: ~/Modules/Orchard.MetaData/Controllers/MetaDataController.cs -#| msgid : "Not allowed to manage MetaData" -msgid "Not allowed to manage MetaData" -msgstr "Not allowed to manage MetaData" - -#: ~/Modules/Orchard.MetaData/Controllers/MetaDataController.cs -#| msgid : "Not allowed to manage MetaData" -msgid "Not allowed to manage MetaData" -msgstr "Not allowed to manage MetaData" - -#: ~/Modules/Orchard.Modules/Commands/FeatureCommand.cs -#| msgid : "Enabled" -msgid "Enabled" -msgstr "Enabled" - -#: ~/Modules/Orchard.Modules/Commands/FeatureCommand.cs -#| msgid : "Disabled" -msgid "Disabled" -msgstr "Disabled" - -#: ~/Modules/Orchard.Modules/Commands/FeatureCommand.cs -#| msgid : "List of available features" -msgid "List of available features" -msgstr "List of available features" - -#: ~/Modules/Orchard.Modules/Commands/FeatureCommand.cs -#| msgid : "--------------------------" -msgid "--------------------------" -msgstr "--------------------------" - -#: ~/Modules/Orchard.Modules/Commands/FeatureCommand.cs -#| msgid : " {0}" -msgid " {0}" -msgstr " {0}" - -#: ~/Modules/Orchard.Modules/Commands/FeatureCommand.cs -#| msgid : "Enabled" -msgid "Enabled" -msgstr "Enabled" - -#: ~/Modules/Orchard.Modules/Commands/FeatureCommand.cs -#| msgid : "Disabled" -msgid "Disabled" -msgstr "Disabled" - -#: ~/Modules/Orchard.Modules/Controllers/AdminController.cs -#| msgid : "Not allowed to manage modules" -msgid "Not allowed to manage modules" -msgstr "Not allowed to manage modules" - -#: ~/Modules/Orchard.Modules/Controllers/AdminController.cs -#| msgid : "Couldn't upload module package." -msgid "Couldn't upload module package." -msgstr "Couldn't upload module package." - -#: ~/Modules/Orchard.Modules/Controllers/AdminController.cs -#| msgid : "Select a file to upload." -msgid "Select a file to upload." -msgstr "Select a file to upload." - -#: ~/Modules/Orchard.Modules/Controllers/AdminController.cs -#| msgid : "Uploading module package failed: {0}" -msgid "Uploading module package failed: {0}" -msgstr "Uploading module package failed: {0}" - -#: ~/Modules/Orchard.Modules/Controllers/AdminController.cs -#| msgid : "Not allowed to manage features" -msgid "Not allowed to manage features" -msgstr "Not allowed to manage features" - -#: ~/Modules/Orchard.Modules/Controllers/AdminController.cs -#| msgid : "Not allowed to manage features" -msgid "Not allowed to manage features" -msgstr "Not allowed to manage features" - -#: ~/Modules/Orchard.Modules/Controllers/AdminController.cs -#| msgid : "Not allowed to manage features" -msgid "Not allowed to manage features" -msgstr "Not allowed to manage features" - -#: ~/Modules/Orchard.Modules/Services/ModuleService.cs -#| msgid : "{0} was enabled" -msgid "{0} was enabled" -msgstr "{0} was enabled" - -#: ~/Modules/Orchard.Modules/Services/ModuleService.cs -#| msgid : "{0} was disabled" -msgid "{0} was disabled" -msgstr "{0} was disabled" - -#: ~/Modules/Orchard.Modules/Views/Admin/Add.ascx -#| msgid : "Install a Module" -msgid "Install a Module" -msgstr "Install a Module" - -#: ~/Modules/Orchard.Modules/Views/Admin/Add.ascx -#| msgid : "Module Package" -msgid "Module Package" -msgstr "Module Package" - -#: ~/Modules/Orchard.Modules/Views/Admin/Add.ascx -#| msgid : "Install" -msgid "Install" -msgstr "Install" - -#: ~/Modules/Orchard.Modules/Views/Admin/Features.ascx -#| msgid : "Manage Features" -msgid "Manage Features" -msgstr "Manage Features" - -#: ~/Modules/Orchard.Modules/Views/Admin/Features.ascx -#| msgid : "Uncategorized" -msgid "Uncategorized" -msgstr "Uncategorized" - -#: ~/Modules/Orchard.Modules/Views/Admin/Features.ascx -#| msgid : "{0} is {1}" -msgid "{0} is {1}" -msgstr "{0} is {1}" - -#: ~/Modules/Orchard.Modules/Views/Admin/Index.ascx -#| msgid : "Installed Modules" -msgid "Installed Modules" -msgstr "Installed Modules" - -#: ~/Modules/Orchard.Modules/Views/Admin/Index.ascx -#| msgid : "Install a module" -msgid "Install a module" -msgstr "Install a module" - -#: ~/Modules/Orchard.Modules/Views/Admin/Index.ascx -#| msgid : "Version: {0}" -msgid "Version: {0}" -msgstr "Version: {0}" - -#: ~/Modules/Orchard.Modules/Views/Admin/Index.ascx -#| msgid : "1.0" -msgid "1.0" -msgstr "1.0" - -#: ~/Modules/Orchard.Modules/Views/Admin/Index.ascx -#| msgid : "Author: {0}" -msgid "Author: {0}" -msgstr "Author: {0}" - -#: ~/Modules/Orchard.Modules/Views/Admin/Index.ascx -#| msgid : "Website: {0}" -msgid "Website: {0}" -msgstr "Website: {0}" - -#: ~/Modules/Orchard.Modules/Views/Admin/Index.ascx -#| msgid : "http://orchardproject.net" -msgid "http://orchardproject.net" -msgstr "http://orchardproject.net" - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid : "List of tenants" -msgid "List of tenants" -msgstr "List of tenants" - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid : "---------------------------" -msgid "---------------------------" -msgstr "---------------------------" - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid : "Name: " -msgid "Name: " -msgstr "Name: " - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid : "Provider: " -msgid "Provider: " -msgstr "Provider: " - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid : "ConnectionString: " -msgid "ConnectionString: " -msgstr "ConnectionString: " - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid : "Data Table Prefix: " -msgid "Data Table Prefix: " -msgstr "Data Table Prefix: " - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid : "Request Url Host: " -msgid "Request Url Host: " -msgstr "Request Url Host: " - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid : "Request Url Prefix: " -msgid "Request Url Prefix: " -msgstr "Request Url Prefix: " - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid : "State: " -msgid "State: " -msgstr "State: " - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid : "---------------------------" -msgid "---------------------------" -msgstr "---------------------------" - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid : "Creating tenant" -msgid "Creating tenant" -msgstr "Creating tenant" - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid : "Tenant: " -msgid "Tenant: " -msgstr "Tenant: " - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid : " was not found" -msgid " was not found" -msgstr " was not found" - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid : "Tenant Settings:" -msgid "Tenant Settings:" -msgstr "Tenant Settings:" - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid : "---------------------------" -msgid "---------------------------" -msgstr "---------------------------" - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid : "Name: " -msgid "Name: " -msgstr "Name: " - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid : "Provider: " -msgid "Provider: " -msgstr "Provider: " - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid : "ConnectionString: " -msgid "ConnectionString: " -msgstr "ConnectionString: " - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid : "Data Table Prefix: " -msgid "Data Table Prefix: " -msgstr "Data Table Prefix: " - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid : "Request Url Host: " -msgid "Request Url Host: " -msgstr "Request Url Host: " - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid : "Request Url Prefix: " -msgid "Request Url Prefix: " -msgstr "Request Url Prefix: " - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid : "State: " -msgid "State: " -msgstr "State: " - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid : "---------------------------" -msgid "---------------------------" -msgstr "---------------------------" - -#: ~/Modules/Orchard.MultiTenancy/Controllers/AdminController.cs -#| msgid : "Cannot create tenant" -msgid "Cannot create tenant" -msgstr "Cannot create tenant" - -#: ~/Modules/Orchard.MultiTenancy/Controllers/AdminController.cs -#| msgid : "Couldn't create tenant" -msgid "Couldn't create tenant" -msgstr "Couldn't create tenant" - -#: ~/Modules/Orchard.MultiTenancy/Controllers/AdminController.cs -#| msgid : "Creating Tenant failed: " -msgid "Creating Tenant failed: " -msgstr "Creating Tenant failed: " - -#: ~/Modules/Orchard.MultiTenancy/Controllers/AdminController.cs -#| msgid : "Cannot edit tenant" -msgid "Cannot edit tenant" -msgstr "Cannot edit tenant" - -#: ~/Modules/Orchard.MultiTenancy/Controllers/AdminController.cs -#| msgid : "Couldn't edit tenant" -msgid "Couldn't edit tenant" -msgstr "Couldn't edit tenant" - -#: ~/Modules/Orchard.MultiTenancy/Controllers/AdminController.cs -#| msgid : "Failed to edit tenant: " -msgid "Failed to edit tenant: " -msgstr "Failed to edit tenant: " - -#: ~/Modules/Orchard.MultiTenancy/Controllers/AdminController.cs -#| msgid : "Couldn't disable tenant" -msgid "Couldn't disable tenant" -msgstr "Couldn't disable tenant" - -#: ~/Modules/Orchard.MultiTenancy/Controllers/AdminController.cs -#| msgid : "Couldn't enable tenant" -msgid "Couldn't enable tenant" -msgstr "Couldn't enable tenant" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Add.ascx -#| msgid : "Add New Tenant" -msgid "Add New Tenant" -msgstr "Add New Tenant" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Edit.ascx -#| msgid : "Edit Tenant" -msgid "Edit Tenant" -msgstr "Edit Tenant" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Index.ascx -#| msgid : "List of Site's Tenants" -msgid "List of Site's Tenants" -msgstr "List of Site's Tenants" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Index.ascx -#| msgid : "Add a Tenant" -msgid "Add a Tenant" -msgstr "Add a Tenant" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Index.ascx -#| msgid : "Edit" -msgid "Edit" -msgstr "Edit" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Index.ascx -#| msgid : "Remove" -msgid "Remove" -msgstr "Remove" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/DisplayTemplates/ActionsForInvalid.ascx -#| msgid : "Make Valid*" -msgid "Make Valid*" -msgstr "Make Valid*" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/DisplayTemplates/ActionsForUninitialized.ascx -#| msgid : "Set Up" -msgid "Set Up" -msgstr "Set Up" - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid : "Couldn't publish page" -msgid "Couldn't publish page" -msgstr "Couldn't publish page" - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid : "Couldn't unpublish page" -msgid "Couldn't unpublish page" -msgstr "Couldn't unpublish page" - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid : "Couldn't delete page" -msgid "Couldn't delete page" -msgstr "Couldn't delete page" - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid : "Not allowed to create a page" -msgid "Not allowed to create a page" -msgstr "Not allowed to create a page" - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid : "Couldn't create page" -msgid "Couldn't create page" -msgstr "Couldn't create page" - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid : "Page has been published" -msgid "Page has been published" -msgstr "Page has been published" - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid : "Page has been scheduled for publishing" -msgid "Page has been scheduled for publishing" -msgstr "Page has been scheduled for publishing" - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid : "Page draft has been saved" -msgid "Page draft has been saved" -msgstr "Page draft has been saved" - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid : "Couldn't edit page" -msgid "Couldn't edit page" -msgstr "Couldn't edit page" - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid : "Couldn't edit page" -msgid "Couldn't edit page" -msgstr "Couldn't edit page" - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid : "Page has been published" -msgid "Page has been published" -msgstr "Page has been published" - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid : "Page has been scheduled for publishing" -msgid "Page has been scheduled for publishing" -msgstr "Page has been scheduled for publishing" - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid : "Page draft has been saved" -msgid "Page draft has been saved" -msgstr "Page draft has been saved" - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid : "There is no draft to discard." -msgid "There is no draft to discard." -msgstr "There is no draft to discard." - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid : "Couldn't discard page draft" -msgid "Couldn't discard page draft" -msgstr "Couldn't discard page draft" - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid : "Can not discard draft on unpublished page." -msgid "Can not discard draft on unpublished page." -msgstr "Can not discard draft on unpublished page." - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid : "Page draft version discarded" -msgid "Page draft version discarded" -msgstr "Page draft version discarded" - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid : "Couldn't publish page" -msgid "Couldn't publish page" -msgstr "Couldn't publish page" - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid : "Page successfully published." -msgid "Page successfully published." -msgstr "Page successfully published." - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid : "Couldn't unpublish page" -msgid "Couldn't unpublish page" -msgstr "Couldn't unpublish page" - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid : "Page successfully unpublished." -msgid "Page successfully unpublished." -msgstr "Page successfully unpublished." - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid : "Couldn't delete page" -msgid "Couldn't delete page" -msgstr "Couldn't delete page" - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid : "Page successfully deleted" -msgid "Page successfully deleted" -msgstr "Page successfully deleted" - -#: ~/Modules/Orchard.Pages/Controllers/PageController.cs -#| msgid : "Couldn't view page" -msgid "Couldn't view page" -msgstr "Couldn't view page" - -#: ~/Modules/Orchard.Pages/Views/Admin/Create.ascx -#| msgid : "Add Page" -msgid "Add Page" -msgstr "Add Page" - -#: ~/Modules/Orchard.Pages/Views/Admin/Edit.ascx -#| msgid : "Edit Page" -msgid "Edit Page" -msgstr "Edit Page" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid : "Manage Pages" -msgid "Manage Pages" -msgstr "Manage Pages" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid : "Add a page" -msgid "Add a page" -msgstr "Add a page" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid : "Add a page" -msgid "Add a page" -msgstr "Add a page" - -#: ~/Modules/Orchard.Pages/Views/DisplayTemplates/Items/Pages.Page.Summary.ascx -#| msgid : "Item" -msgid "Item" -msgstr "Item" - -#: ~/Modules/Orchard.Pages/Views/DisplayTemplates/Parts/Pages.Page.Metadata.ascx -#| msgid : "nobody(?)" -msgid "nobody(?)" -msgstr "nobody(?)" - -#: ~/Modules/Orchard.Pages/Views/EditorTemplates/Items/Pages.Page.ascx -#| msgid : "Discard Draft" -msgid "Discard Draft" -msgstr "Discard Draft" - -#: ~/Modules/Orchard.Roles/Controllers/AdminController.cs -#| msgid : "Not authorized to manage roles" -msgid "Not authorized to manage roles" -msgstr "Not authorized to manage roles" - -#: ~/Modules/Orchard.Roles/Controllers/AdminController.cs -#| msgid : "Not authorized to manage roles" -msgid "Not authorized to manage roles" -msgstr "Not authorized to manage roles" - -#: ~/Modules/Orchard.Roles/Controllers/AdminController.cs -#| msgid : "Not authorized to manage roles" -msgid "Not authorized to manage roles" -msgstr "Not authorized to manage roles" - -#: ~/Modules/Orchard.Roles/Controllers/AdminController.cs -#| msgid : "Not authorized to manage roles" -msgid "Not authorized to manage roles" -msgstr "Not authorized to manage roles" - -#: ~/Modules/Orchard.Roles/Controllers/AdminController.cs -#| msgid : "Not authorized to manage roles" -msgid "Not authorized to manage roles" -msgstr "Not authorized to manage roles" - -#: ~/Modules/Orchard.Roles/Controllers/AdminController.cs -#| msgid : "Not authorized to manage roles" -msgid "Not authorized to manage roles" -msgstr "Not authorized to manage roles" - -#: ~/Modules/Orchard.Roles/Views/Admin/Create.aspx -#| msgid : "Add Role" -msgid "Add Role" -msgstr "Add Role" - -#: ~/Modules/Orchard.Roles/Views/Admin/Edit.aspx -#| msgid : "Edit Role" -msgid "Edit Role" -msgstr "Edit Role" - -#: ~/Modules/Orchard.Roles/Views/Admin/Index.aspx -#| msgid : "Manage Roles" -msgid "Manage Roles" -msgstr "Manage Roles" - -#: ~/Modules/Orchard.Roles/Views/Admin/Index.aspx -#| msgid : "Add a role" -msgid "Add a role" -msgstr "Add a role" - -#: ~/Modules/Orchard.Roles/Views/Admin/Index.aspx -#| msgid : "Edit" -msgid "Edit" -msgstr "Edit" - -#: ~/Modules/Orchard.Sandbox/Controllers/PageController.cs -#| msgid : "Anonymous users can not create pages" -msgid "Anonymous users can not create pages" -msgstr "Anonymous users can not create pages" - -#: ~/Modules/Orchard.Sandbox/Controllers/PageController.cs -#| msgid : "Anonymous users can not create pages" -msgid "Anonymous users can not create pages" -msgstr "Anonymous users can not create pages" - -#: ~/Modules/Orchard.Sandbox/Controllers/PageController.cs -#| msgid : "Anonymous users can not edit pages" -msgid "Anonymous users can not edit pages" -msgstr "Anonymous users can not edit pages" - -#: ~/Modules/Orchard.Sandbox/Views/DisplayTemplates/Items/Sandbox.Page.ascx -#| msgid : "Edit this page" -msgid "Edit this page" -msgstr "Edit this page" - -#: ~/Modules/Orchard.Sandbox/Views/DisplayTemplates/Items/Sandbox.Page.ascx -#| msgid : "Return to list" -msgid "Return to list" -msgstr "Return to list" - -#: ~/Modules/Orchard.Sandbox/Views/Page/Create.aspx -#| msgid : "Create Page" -msgid "Create Page" -msgstr "Create Page" - -#: ~/Modules/Orchard.Sandbox/Views/Page/Edit.aspx -#| msgid : "Edit Page" -msgid "Edit Page" -msgstr "Edit Page" - -#: ~/Modules/Orchard.Sandbox/Views/Page/Index.aspx -#| msgid : "Sandbox Pages" -msgid "Sandbox Pages" -msgstr "Sandbox Pages" - -#: ~/Modules/Orchard.Sandbox/Views/Page/Index.aspx -#| msgid : "Add new page" -msgid "Add new page" -msgstr "Add new page" - -#: ~/Modules/Orchard.Setup/Commands/SetupCommand.cs -#| msgid : "Site \"{0}\" sucessfully setup to run data provider \"{1}\" (with table prefix \"{2}\")." -msgid "Site \"{0}\" sucessfully setup to run data provider \"{1}\" (with table prefix \"{2}\")." -msgstr "Site \"{0}\" sucessfully setup to run data provider \"{1}\" (with table prefix \"{2}\")." - -#: ~/Modules/Orchard.Setup/Controllers/SetupController.cs -#| msgid : "Setup failed:" -msgid "Setup failed:" -msgstr "Setup failed:" - -#: ~/Modules/Orchard.Setup/Services/SetupService.cs -#| msgid : "Home" -msgid "Home" -msgstr "Home" - -#: ~/Modules/Orchard.Setup/Services/SetupService.cs -#| msgid : "Home" -msgid "Home" -msgstr "Home" - -#: ~/Modules/Orchard.Tags/Controllers/AdminController.cs -#| msgid : "Listing tags failed: " -msgid "Listing tags failed: " -msgstr "Listing tags failed: " - -#: ~/Modules/Orchard.Tags/Controllers/AdminController.cs -#| msgid : "Couldn't delete tag" -msgid "Couldn't delete tag" -msgstr "Couldn't delete tag" - -#: ~/Modules/Orchard.Tags/Controllers/AdminController.cs -#| msgid : "Editing tags failed: " -msgid "Editing tags failed: " -msgstr "Editing tags failed: " - -#: ~/Modules/Orchard.Tags/Controllers/AdminController.cs -#| msgid : "Couldn't create tag" -msgid "Couldn't create tag" -msgstr "Couldn't create tag" - -#: ~/Modules/Orchard.Tags/Controllers/AdminController.cs -#| msgid : "Creating tag failed: " -msgid "Creating tag failed: " -msgstr "Creating tag failed: " - -#: ~/Modules/Orchard.Tags/Controllers/AdminController.cs -#| msgid : "Retrieving tag information failed: " -msgid "Retrieving tag information failed: " -msgstr "Retrieving tag information failed: " - -#: ~/Modules/Orchard.Tags/Controllers/AdminController.cs -#| msgid : "Couldn't edit tag" -msgid "Couldn't edit tag" -msgstr "Couldn't edit tag" - -#: ~/Modules/Orchard.Tags/Controllers/AdminController.cs -#| msgid : "Editing tag failed: " -msgid "Editing tag failed: " -msgstr "Editing tag failed: " - -#: ~/Modules/Orchard.Tags/Controllers/AdminController.cs -#| msgid : "Retrieving tagged items failed: " -msgid "Retrieving tagged items failed: " -msgstr "Retrieving tagged items failed: " - -#: ~/Modules/Orchard.Tags/Controllers/HomeController.cs -#| msgid : "Listing tags failed: " -msgid "Listing tags failed: " -msgstr "Listing tags failed: " - -#: ~/Modules/Orchard.Tags/Controllers/HomeController.cs -#| msgid : "Couldn't create tag" -msgid "Couldn't create tag" -msgstr "Couldn't create tag" - -#: ~/Modules/Orchard.Tags/Controllers/HomeController.cs -#| msgid : "Editing tags failed: " -msgid "Editing tags failed: " -msgstr "Editing tags failed: " - -#: ~/Modules/Orchard.Tags/Controllers/HomeController.cs -#| msgid : "Couldn't create tag" -msgid "Couldn't create tag" -msgstr "Couldn't create tag" - -#: ~/Modules/Orchard.Tags/Controllers/HomeController.cs -#| msgid : "Updating tags failed: " -msgid "Updating tags failed: " -msgstr "Updating tags failed: " - -#: ~/Modules/Orchard.Tags/Controllers/HomeController.cs -#| msgid : "Retrieving tagged items failed: " -msgid "Retrieving tagged items failed: " -msgstr "Retrieving tagged items failed: " - -#: ~/Modules/Orchard.Tags/Services/TagService.cs -#| msgid : "Couldn't rename tag: name was empty" -msgid "Couldn't rename tag: name was empty" -msgstr "Couldn't rename tag: name was empty" - -#: ~/Modules/Orchard.Tags/Views/Admin/Create.aspx -#| msgid : "Add a Tag" -msgid "Add a Tag" -msgstr "Add a Tag" - -#: ~/Modules/Orchard.Tags/Views/Admin/Edit.aspx -#| msgid : "Edit a Tag" -msgid "Edit a Tag" -msgstr "Edit a Tag" - -#: ~/Modules/Orchard.Tags/Views/Admin/Index.aspx -#| msgid : "Manage Tags" -msgid "Manage Tags" -msgstr "Manage Tags" - -#: ~/Modules/Orchard.Tags/Views/Admin/Index.aspx -#| msgid : "Add a tag" -msgid "Add a tag" -msgstr "Add a tag" - -#: ~/Modules/Orchard.Tags/Views/Admin/Index.aspx -#| msgid : "Edit" -msgid "Edit" -msgstr "Edit" - -#: ~/Modules/Orchard.Tags/Views/Admin/Index.aspx -#| msgid : "Add a tag" -msgid "Add a tag" -msgstr "Add a tag" - -#: ~/Modules/Orchard.Tags/Views/Admin/Search.aspx -#| msgid : "List of contents tagged with {0}" -msgid "List of contents tagged with {0}" -msgstr "List of contents tagged with {0}" - -#: ~/Modules/Orchard.Tags/Views/Home/Index.ascx -#| msgid : "Tags" -msgid "Tags" -msgstr "Tags" - -#: ~/Modules/Orchard.Tags/Views/Home/Search.ascx -#| msgid : "Tags" -msgid "Tags" -msgstr "Tags" - -#: ~/Modules/Orchard.Tags/Views/Home/Search.ascx -#| msgid : "Contents tagged with {0}" -msgid "Contents tagged with {0}" -msgstr "Contents tagged with {0}" - -#: ~/Modules/Orchard.Tags/Views/Home/Search.ascx -#| msgid : "Contents tagged with {0}" -msgid "Contents tagged with {0}" -msgstr "Contents tagged with {0}" - -#: ~/Modules/Orchard.Themes/Controllers/AdminController.cs -#| msgid : "Listing themes failed: " -msgid "Listing themes failed: " -msgstr "Listing themes failed: " - -#: ~/Modules/Orchard.Themes/Controllers/AdminController.cs -#| msgid : "Couldn't preview the current theme" -msgid "Couldn't preview the current theme" -msgstr "Couldn't preview the current theme" - -#: ~/Modules/Orchard.Themes/Controllers/AdminController.cs -#| msgid : "Previewing theme failed: " -msgid "Previewing theme failed: " -msgstr "Previewing theme failed: " - -#: ~/Modules/Orchard.Themes/Controllers/AdminController.cs -#| msgid : "Couldn't preview the current theme" -msgid "Couldn't preview the current theme" -msgstr "Couldn't preview the current theme" - -#: ~/Modules/Orchard.Themes/Controllers/AdminController.cs -#| msgid : "Previewing theme failed: " -msgid "Previewing theme failed: " -msgstr "Previewing theme failed: " - -#: ~/Modules/Orchard.Themes/Controllers/AdminController.cs -#| msgid : "Couldn't preview the current theme" -msgid "Couldn't preview the current theme" -msgstr "Couldn't preview the current theme" - -#: ~/Modules/Orchard.Themes/Controllers/AdminController.cs -#| msgid : "Previewing theme failed: " -msgid "Previewing theme failed: " -msgstr "Previewing theme failed: " - -#: ~/Modules/Orchard.Themes/Controllers/AdminController.cs -#| msgid : "Couldn't set the current theme" -msgid "Couldn't set the current theme" -msgstr "Couldn't set the current theme" - -#: ~/Modules/Orchard.Themes/Controllers/AdminController.cs -#| msgid : "Activating theme failed: " -msgid "Activating theme failed: " -msgstr "Activating theme failed: " - -#: ~/Modules/Orchard.Themes/Controllers/AdminController.cs -#| msgid : "Couldn't install theme" -msgid "Couldn't install theme" -msgstr "Couldn't install theme" - -#: ~/Modules/Orchard.Themes/Controllers/AdminController.cs -#| msgid : "Installing theme failed: " -msgid "Installing theme failed: " -msgstr "Installing theme failed: " - -#: ~/Modules/Orchard.Themes/Controllers/AdminController.cs -#| msgid : "Couldn't uninstall theme" -msgid "Couldn't uninstall theme" -msgstr "Couldn't uninstall theme" - -#: ~/Modules/Orchard.Themes/Controllers/AdminController.cs -#| msgid : "Uninstalling theme failed: " -msgid "Uninstalling theme failed: " -msgstr "Uninstalling theme failed: " - -#: ~/Modules/Orchard.Themes/Services/ThemeZoneManagerEvents.cs -#| msgid : "etc. (ZonesAny)" -msgid "etc. (ZonesAny)" -msgstr "etc. (ZonesAny)" - -#: ~/Modules/Orchard.Themes/Services/ThemeZoneManagerEvents.cs -#| msgid : "" -msgid "" -msgstr "" - -#: ~/Modules/Orchard.Themes/Services/ThemeZoneManagerEvents.cs -#| msgid : "" -msgid "" -msgstr "" - -#: ~/Modules/Orchard.Themes/Services/ThemeZoneManagerEvents.cs -#| msgid : "" -msgid "" -msgstr "" - -#: ~/Modules/Orchard.Themes/Services/ThemeZoneManagerEvents.cs -#| msgid : "" -msgid "" -msgstr "" - -#: ~/Modules/Orchard.Themes/Services/ThemeZoneManagerEvents.cs -#| msgid : "" -msgid "" -msgstr "" - -#: ~/Modules/Orchard.Themes/Services/ThemeZoneManagerEvents.cs -#| msgid : "" -msgid "" -msgstr "" - -#: ~/Modules/Orchard.Themes/Services/ThemeZoneManagerEvents.cs -#| msgid : "etc. (ZonesAny)" -msgid "etc. (ZonesAny)" -msgstr "etc. (ZonesAny)" - -#: ~/Modules/Orchard.Themes/Views/NotFound.ascx -#| msgid : "Not found" -msgid "Not found" -msgstr "Not found" - -#: ~/Modules/Orchard.Themes/Views/User.ascx -#| msgid : "Welcome, {0}!" -msgid "Welcome, {0}!" -msgstr "Welcome, {0}!" - -#: ~/Modules/Orchard.Themes/Views/User.ascx -#| msgid : "Log Off" -msgid "Log Off" -msgstr "Log Off" - -#: ~/Modules/Orchard.Themes/Views/User.ascx -#| msgid : "Log On" -msgid "Log On" -msgstr "Log On" - -#: ~/Modules/Orchard.Themes/Views/Admin/Index.aspx -#| msgid : "Manage Themes" -msgid "Manage Themes" -msgstr "Manage Themes" - -#: ~/Modules/Orchard.Themes/Views/Admin/Index.aspx -#| msgid : "Install a new Theme" -msgid "Install a new Theme" -msgstr "Install a new Theme" - -#: ~/Modules/Orchard.Themes/Views/Admin/Index.aspx -#| msgid : "Install a new Theme" -msgid "Install a new Theme" -msgstr "Install a new Theme" - -#: ~/Modules/Orchard.Themes/Views/Admin/Install.aspx -#| msgid : "Install Theme" -msgid "Install Theme" -msgstr "Install Theme" - -#: ~/Modules/Orchard.Themes/Views/Admin/ThemePreview.ascx -#| msgid : "You are previewing: " -msgid "You are previewing: " -msgstr "You are previewing: " - -#: ~/Modules/Orchard.Users/Controllers/AccountController.cs -#| msgid : "The current password is incorrect or the new password is invalid." -msgid "The current password is incorrect or the new password is invalid." -msgstr "The current password is incorrect or the new password is invalid." - -#: ~/Modules/Orchard.Users/Controllers/AccountController.cs -#| msgid : "The current password is incorrect or the new password is invalid." -msgid "The current password is incorrect or the new password is invalid." -msgstr "The current password is incorrect or the new password is invalid." - -#: ~/Modules/Orchard.Users/Controllers/AccountController.cs -#| msgid : "You must specify a current password." -msgid "You must specify a current password." -msgstr "You must specify a current password." - -#: ~/Modules/Orchard.Users/Controllers/AccountController.cs -#| msgid : "You must specify a new password of {0} or more characters." -msgid "You must specify a new password of {0} or more characters." -msgstr "You must specify a new password of {0} or more characters." - -#: ~/Modules/Orchard.Users/Controllers/AccountController.cs -#| msgid : "The new password and confirmation password do not match." -msgid "The new password and confirmation password do not match." -msgstr "The new password and confirmation password do not match." - -#: ~/Modules/Orchard.Users/Controllers/AccountController.cs -#| msgid : "You must specify a username or e-mail." -msgid "You must specify a username or e-mail." -msgstr "You must specify a username or e-mail." - -#: ~/Modules/Orchard.Users/Controllers/AccountController.cs -#| msgid : "You must specify a password." -msgid "You must specify a password." -msgstr "You must specify a password." - -#: ~/Modules/Orchard.Users/Controllers/AccountController.cs -#| msgid : "The username or e-mail or password provided is incorrect." -msgid "The username or e-mail or password provided is incorrect." -msgstr "The username or e-mail or password provided is incorrect." - -#: ~/Modules/Orchard.Users/Controllers/AccountController.cs -#| msgid : "You must specify a username." -msgid "You must specify a username." -msgstr "You must specify a username." - -#: ~/Modules/Orchard.Users/Controllers/AccountController.cs -#| msgid : "You must specify an email address." -msgid "You must specify an email address." -msgstr "You must specify an email address." - -#: ~/Modules/Orchard.Users/Controllers/AccountController.cs -#| msgid : "You must specify a password of {0} or more characters." -msgid "You must specify a password of {0} or more characters." -msgstr "You must specify a password of {0} or more characters." - -#: ~/Modules/Orchard.Users/Controllers/AccountController.cs -#| msgid : "The new password and confirmation password do not match." -msgid "The new password and confirmation password do not match." -msgstr "The new password and confirmation password do not match." - -#: ~/Modules/Orchard.Users/Controllers/AdminController.cs -#| msgid : "Not authorized to list users" -msgid "Not authorized to list users" -msgstr "Not authorized to list users" - -#: ~/Modules/Orchard.Users/Controllers/AdminController.cs -#| msgid : "Not authorized to manage users" -msgid "Not authorized to manage users" -msgstr "Not authorized to manage users" - -#: ~/Modules/Orchard.Users/Controllers/AdminController.cs -#| msgid : "Not authorized to manage users" -msgid "Not authorized to manage users" -msgstr "Not authorized to manage users" - -#: ~/Modules/Orchard.Users/Controllers/AdminController.cs -#| msgid : "Password confirmation must match" -msgid "Password confirmation must match" -msgstr "Password confirmation must match" - -#: ~/Modules/Orchard.Users/Controllers/AdminController.cs -#| msgid : "Not authorized to manage users" -msgid "Not authorized to manage users" -msgstr "Not authorized to manage users" - -#: ~/Modules/Orchard.Users/Controllers/AdminController.cs -#| msgid : "Not authorized to manage users" -msgid "Not authorized to manage users" -msgstr "Not authorized to manage users" - -#: ~/Modules/Orchard.Users/Controllers/AdminController.cs -#| msgid : "User information updated" -msgid "User information updated" -msgstr "User information updated" - -#: ~/Modules/Orchard.Users/Controllers/AdminController.cs -#| msgid : "Not authorized to manage users" -msgid "Not authorized to manage users" -msgstr "Not authorized to manage users" - -#: ~/Modules/Orchard.Users/Controllers/AdminController.cs -#| msgid : "User deleted" -msgid "User deleted" -msgstr "User deleted" - -#: ~/Modules/Orchard.Users/Views/Account/AccessDenied.ascx -#| msgid : "Access Denied" -msgid "Access Denied" -msgstr "Access Denied" - -#: ~/Modules/Orchard.Users/Views/Account/AccessDenied.ascx -#| msgid : "You do not have permission to complete your request." -msgid "You do not have permission to complete your request." -msgstr "You do not have permission to complete your request." - -#: ~/Modules/Orchard.Users/Views/Account/ChangePassword.ascx -#| msgid : "Change Password" -msgid "Change Password" -msgstr "Change Password" - -#: ~/Modules/Orchard.Users/Views/Account/ChangePassword.ascx -#| msgid : "Use the form below to change your password." -msgid "Use the form below to change your password." -msgstr "Use the form below to change your password." - -#: ~/Modules/Orchard.Users/Views/Account/ChangePassword.ascx -#| msgid : "New passwords are required to be a minimum of {0} characters in length." -msgid "New passwords are required to be a minimum of {0} characters in length." -msgstr "New passwords are required to be a minimum of {0} characters in length." - -#: ~/Modules/Orchard.Users/Views/Account/ChangePassword.ascx -#| msgid : "Current password:" -msgid "Current password:" -msgstr "Current password:" - -#: ~/Modules/Orchard.Users/Views/Account/ChangePassword.ascx -#| msgid : "New password:" -msgid "New password:" -msgstr "New password:" - -#: ~/Modules/Orchard.Users/Views/Account/ChangePassword.ascx -#| msgid : "Confirm new password:" -msgid "Confirm new password:" -msgstr "Confirm new password:" - -#: ~/Modules/Orchard.Users/Views/Account/ChangePassword.ascx -#| msgid : "Password change was unsuccessful. Please correct the errors and try again." -msgid "Password change was unsuccessful. Please correct the errors and try again." -msgstr "Password change was unsuccessful. Please correct the errors and try again." - -#: ~/Modules/Orchard.Users/Views/Account/ChangePasswordSuccess.ascx -#| msgid : "Change Password" -msgid "Change Password" -msgstr "Change Password" - -#: ~/Modules/Orchard.Users/Views/Account/ChangePasswordSuccess.ascx -#| msgid : "Your password has been changed successfully." -msgid "Your password has been changed successfully." -msgstr "Your password has been changed successfully." - -#: ~/Modules/Orchard.Users/Views/Account/LogOn.ascx -#| msgid : "Login was unsuccessful. Please correct the errors and try again." -msgid "Login was unsuccessful. Please correct the errors and try again." -msgstr "Login was unsuccessful. Please correct the errors and try again." - -#: ~/Modules/Orchard.Users/Views/Account/LogOn.ascx -#| msgid : "Please enter your username and password." -msgid "Please enter your username and password." -msgstr "Please enter your username and password." - -#: ~/Modules/Orchard.Users/Views/Account/LogOn.ascx -#| msgid : "Register" -msgid "Register" -msgstr "Register" - -#: ~/Modules/Orchard.Users/Views/Account/LogOn.ascx -#| msgid : " if you don't have an account." -msgid " if you don't have an account." -msgstr " if you don't have an account." - -#: ~/Modules/Orchard.Users/Views/Account/LogOn.ascx -#| msgid : "Account Information" -msgid "Account Information" -msgstr "Account Information" - -#: ~/Modules/Orchard.Users/Views/Account/LogOn.ascx -#| msgid : "Username or Email:" -msgid "Username or Email:" -msgstr "Username or Email:" - -#: ~/Modules/Orchard.Users/Views/Account/LogOn.ascx -#| msgid : "Password:" -msgid "Password:" -msgstr "Password:" - -#: ~/Modules/Orchard.Users/Views/Account/LogOn.ascx -#| msgid : "Remember me?" -msgid "Remember me?" -msgstr "Remember me?" - -#: ~/Modules/Orchard.Users/Views/Account/Register.ascx -#| msgid : "Create a New Account" -msgid "Create a New Account" -msgstr "Create a New Account" - -#: ~/Modules/Orchard.Users/Views/Account/Register.ascx -#| msgid : "Use the form below to create a new account." -msgid "Use the form below to create a new account." -msgstr "Use the form below to create a new account." - -#: ~/Modules/Orchard.Users/Views/Account/Register.ascx -#| msgid : "Passwords are required to be a minimum of {0} characters in length." -msgid "Passwords are required to be a minimum of {0} characters in length." -msgstr "Passwords are required to be a minimum of {0} characters in length." - -#: ~/Modules/Orchard.Users/Views/Account/Register.ascx -#| msgid : "Username:" -msgid "Username:" -msgstr "Username:" - -#: ~/Modules/Orchard.Users/Views/Account/Register.ascx -#| msgid : "Email:" -msgid "Email:" -msgstr "Email: - -#: ~/Modules/Orchard.Users/Views/Account/Register.ascx -#| msgid : "Confirm password:" -msgid "Confirm password:" -msgstr "Confirm password:" - -#: ~/Modules/Orchard.Users/Views/Account/Register.ascx -#| msgid : "Account creation was unsuccessful. Please correct the errors and try again." -msgid "Account creation was unsuccessful. Please correct the errors and try again." -msgstr "Account creation was unsuccessful. Please correct the errors and try again." - -#: ~/Modules/Orchard.Users/Views/Admin/Create.aspx -#| msgid : "Add User" -msgid "Add User" -msgstr "Add User" - -#: ~/Modules/Orchard.Users/Views/Admin/Edit.aspx -#| msgid : "Edit User" -msgid "Edit User" -msgstr "Edit User" - -#: ~/Modules/Orchard.Users/Views/Admin/Index.aspx -#| msgid : "Manage Users" -msgid "Manage Users" -msgstr "Manage Users" - -#: ~/Modules/Orchard.Users/Views/Admin/Index.aspx -#| msgid : "Add a new user" -msgid "Add a new user" -msgstr "Add a new user" - -#: ~/Modules/Orchard.Users/Views/Admin/Index.aspx -#| msgid : "Edit" -msgid "Edit" -msgstr "Edit" - -#: ~/Modules/Orchard.Users/Views/Admin/Index.aspx -#| msgid : "Remove" -msgid "Remove" -msgstr "Remove" - -#: ~/Modules/Orchard.Widgets/Views/Admin/Index.cshtml -#| msgid : "Manage Layers" -msgid "Manage Layers" -msgstr "Manage Layers" - -#: ~/Modules/Orchard.Widgets/Views/Admin/Index.cshtml -#| msgid : "Add a new layer" -msgid "Add a new layer" -msgstr "Add a new layer" - -#: ~/Modules/Orchard.Widgets/AdminMenu.cs -#| msgid : "Manage Widgets" -msgid "Manage Widgets" -msgstr "Manage Widgets" - -#: ~/Modules/Orchard.Widgets/AdminMenu.cs -#| msgid : "Widgets" -msgid "Widgets" -msgstr "Widgets" - -#: ~/Themes/Classic/Views/DisplayTemplates/Parts/Pages.Page.Metadata.ascx -#| msgid : "nobody(?)" -msgid "nobody(?)" -msgstr "nobody(?)" - -#: ~/Themes/ClassicDark/Views/DisplayTemplates/Parts/Pages.Page.Metadata.ascx -#| msgid : "nobody(?)" -msgid "nobody(?)" -msgstr "nobody(?)" - -#: ~/Themes/Contoso/Views/LogOn.ascx -#| msgid : "Login was unsuccessful. Please correct the errors and try again." -msgid "Login was unsuccessful. Please correct the errors and try again." -msgstr "Login was unsuccessful. Please correct the errors and try again." - -#: ~/Themes/Contoso/Views/LogOn.ascx -#| msgid : "Please enter your username and password." -msgid "Please enter your username and password." -msgstr "Please enter your username and password." - -#: ~/Themes/Contoso/Views/LogOn.ascx -#| msgid : "Register" -msgid "Register" -msgstr "Register" - -#: ~/Themes/Contoso/Views/LogOn.ascx -#| msgid : " if you don't have an account." -msgid " if you don't have an account." -msgstr " if you don't have an account." - -#: ~/Themes/Contoso/Views/LogOn.ascx -#| msgid : "Account Information" -msgid "Account Information" -msgstr "Account Information" - -#: ~/Themes/Contoso/Views/LogOn.ascx -#| msgid : "Username or Email:" -msgid "Username or Email:" -msgstr "Username or Email:" - -#: ~/Themes/Contoso/Views/LogOn.ascx -#| msgid : "Password:" -msgid "Password:" -msgstr "Password:" - -#: ~/Themes/Contoso/Views/LogOn.ascx -#| msgid : "Remember me?" -msgid "Remember me?" -msgstr "Remember me?" - -#: ~/Themes/Contoso/Views/User.ascx -#| msgid : "Log Off" -msgid "Log Off" -msgstr "Log Off" - -#: ~/Themes/Contoso/Views/User.ascx -#| msgid : "Login" -msgid "Login" -msgstr "Login" - -#: ~/Themes/Contoso/Views/DisplayTemplates/Items/Blogs.BlogPost.ListByArchive.ascx -#| msgid : "Archives" -msgid "Archives" -msgstr "Archives" - -#: ~/Themes/Contoso/Views/DisplayTemplates/Items/Blogs.BlogPost.ListByArchive.ascx -#| msgid : "Archives" -msgid "Archives" -msgstr "Archives" - -#: ~/Themes/Contoso/Views/DisplayTemplates/Parts/Comments.HasComments.ascx -#| msgid : "log on" -msgid "log on" -msgstr "log on" - -#: ~/Themes/Contoso/Views/DisplayTemplates/Parts/Comments.HasComments.ascx -#| msgid : "Add a Comment" -msgid "Add a Comment" -msgstr "Add a Comment" - -#: ~/Themes/Contoso/Views/DisplayTemplates/Parts/Comments.HasComments.ascx -#| msgid : "You must {0} to comment." -msgid "You must {0} to comment." -msgstr "You must {0} to comment." - -#: ~/Themes/Corporate/Views/DisplayTemplates/Parts/Comments.HasComments.ascx -#| msgid : "Comments have been disabled for this content." -msgid "Comments have been disabled for this content." -msgstr "Comments have been disabled for this content." - -#: ~/Themes/Contoso/Views/DisplayTemplates/Parts/Comments.HasComments.ascx -#| msgid : "Hi, {0}!" -msgid "Hi, {0}!" -msgstr "Hi, {0}!" - -#: ~/Themes/Contoso/Views/DisplayTemplates/Parts/Pages.Page.Metadata.ascx -#| msgid : "nobody(?)" -msgid "nobody(?)" -msgstr "nobody(?)" - -#: ~/Themes/Corporate/Views/LogOn.ascx -#| msgid : "Login was unsuccessful. Please correct the errors and try again." -msgid "Login was unsuccessful. Please correct the errors and try again." -msgstr "Login was unsuccessful. Please correct the errors and try again." - -#: ~/Themes/Corporate/Views/LogOn.ascx -#| msgid : "Please enter your username and password." -msgid "Please enter your username and password." -msgstr "Please enter your username and password." - -#: ~/Themes/Corporate/Views/LogOn.ascx -#| msgid : "Register" -msgid "Register" -msgstr "Register" - -#: ~/Themes/Corporate/Views/LogOn.ascx -#| msgid : " if you don't have an account." -msgid " if you don't have an account." -msgstr " if you don't have an account." - -#: ~/Themes/Corporate/Views/LogOn.ascx -#| msgid : "Account Information" -msgid "Account Information" -msgstr "Account Information" - -#: ~/Themes/Corporate/Views/LogOn.ascx -#| msgid : "Username or Email:" -msgid "Username or Email:" -msgstr "Username or Email:" - -#: ~/Themes/Corporate/Views/LogOn.ascx -#| msgid : "Password:" -msgid "Password:" -msgstr "Password:" - -#: ~/Themes/Corporate/Views/LogOn.ascx -#| msgid : "Remember me?" -msgid "Remember me?" -msgstr "Remember me?" - -#: ~/Themes/Corporate/Views/User.ascx -#| msgid : "Log Off" -msgid "Log Off" -msgstr "Log Off" - -#: ~/Themes/Corporate/Views/User.ascx -#| msgid : "Login" -msgid "Login" -msgstr "Login" - -#: ~/Themes/Corporate/Views/DisplayTemplates/Items/Blogs.BlogPost.ListByArchive.ascx -#| msgid : "Archives" -msgid "Archives" -msgstr "Archives" - -#: ~/Themes/Corporate/Views/DisplayTemplates/Items/Blogs.BlogPost.ListByArchive.ascx -#| msgid : "Archives" -msgid "Archives" -msgstr "Archives" - -#: ~/Themes/Corporate/Views/DisplayTemplates/Parts/Comments.HasComments.ascx -#| msgid : "log on" -msgid "log on" -msgstr "log on" - -#: ~/Themes/Corporate/Views/DisplayTemplates/Parts/Comments.HasComments.ascx -#| msgid : "Hi, {0}!" -msgid "Hi, {0}!" -msgstr "Hi, {0}!" - -#: ~/Themes/Corporate/Views/DisplayTemplates/Parts/Comments.HasComments.ascx -#| msgid : "Add a Comment" -msgid "Add a Comment" -msgstr "Add a Comment" - -#: ~/Themes/Corporate/Views/DisplayTemplates/Parts/Comments.HasComments.ascx -#| msgid : "You must {0} to comment." -msgid "You must {0} to comment." -msgstr "You must {0} to comment." - -#: ~/Themes/Corporate/Views/DisplayTemplates/Parts/Comments.HasComments.ascx -#| msgid : "Comments have been disabled for this content." -msgid "Comments have been disabled for this content." -msgstr "Comments have been disabled for this content." - -#: ~/Themes/Corporate/Views/DisplayTemplates/Parts/Pages.Page.Metadata.ascx -#| msgid : "nobody(?)" -msgid "nobody(?)" -msgstr "nobody(?)" - -#: ~/Themes/Green/Views/DisplayTemplates/Parts/Pages.Page.Metadata.ascx -#| msgid : "nobody(?)" -msgid "nobody(?)" -msgstr "nobody(?)" - -#: ~/Themes/TheAdmin/Views/Header.ascx -#| msgid : "Project Orchard" -msgid "Project Orchard" -msgstr "Project Orchard" - -#: ~/Themes/TheAdmin/Views/Header.ascx -#| msgid : "Your Site" -msgid "Your Site" -msgstr "Your Site" - -#: ~/Themes/TheAdmin/Views/User.ascx -#| msgid : "Logout" -msgid "Logout" -msgstr "Logout" - -#: ~/Themes/TheAdmin/Views/User.ascx -#| msgid : "User:" -msgid "User:" -msgstr "User:" - -#: ~/Commands/DefaultOrchardCommandHandler.cs -#| msgid : "Switch was not found: " -msgid "Switch was not found: " -msgstr "Switch was not found: " - -#: ~/Commands/DefaultOrchardCommandHandler.cs -#| msgid : "A property of this name exists but is not decorated with the OrchardSwitch attribute: " -msgid "A property of this name exists but is not decorated with the OrchardSwitch attribute: " -msgstr "A property of this name exists but is not decorated with the OrchardSwitch attribute: " - -#: ~/Commands/DefaultOrchardCommandHandler.cs -#| msgid : "No property named {0} found of type bool, int or string." -msgid "No property named {0} found of type bool, int or string." -msgstr "No property named {0} found of type bool, int or string." - -#: ~/Commands/DefaultOrchardCommandHandler.cs -#| msgid : "Command arguments don't match" -msgid "Command arguments don't match" -msgstr "Command arguments don't match" - -#: ~/Commands/DefaultOrchardCommandHandler.cs -#| msgid : "Method {0} does not support switch {1}." -msgid "Method {0} does not support switch {1}." -msgstr "Method {0} does not support switch {1}." - -#: ~/Commands/Builtin/HelpCommand.cs -#| msgid : "List of available commands:" -msgid "List of available commands:" -msgstr "List of available commands:" - -#: ~/Commands/Builtin/HelpCommand.cs -#| msgid : "---------------------------" -msgid "---------------------------" -msgstr "---------------------------" - -#: ~/Commands/Builtin/HelpCommand.cs -#| msgid : "Command {0} doesn't exist" -msgid "Command {0} doesn't exist" -msgstr "Command {0} doesn't exist" - -#: ~/Environment/Configuration/ShellSettingsManager.cs -#| msgid : "There are no settings to save." -msgid "There are no settings to save." -msgstr "There are no settings to save." - -#: ~/Environment/Configuration/ShellSettingsManager.cs -#| msgid : "Settings \"Name\" is not set." -msgid "Settings \"Name\" is not set." -msgstr "Settings \"Name\" is not set." - -#: ~/Environment/Extensions/ExtensionManager.cs -#| msgid : "Feature {0} was not found in any of the installed extensions" -msgid "Feature {0} was not found in any of the installed extensions" -msgstr "Feature {0} was not found in any of the installed extensions" - -#: ~/Environment/Extensions/ExtensionManager.cs -#| msgid : "Extension " -msgid "Extension " -msgstr "Extension " - -#: ~/Environment/Extensions/ExtensionManager.cs -#| msgid : " is not active" -msgid " is not active" -msgstr " is not active" - -#: ~/Environment/Extensions/ExtensionManager.cs -#| msgid : "extensionType was null or empty" -msgid "extensionType was null or empty" -msgstr "extensionType was null or empty" - -#: ~/Environment/Extensions/ExtensionManager.cs -#| msgid : "extensionType was not recognized" -msgid "extensionType was not recognized" -msgstr "extensionType was not recognized" - -#: ~/Environment/Extensions/ExtensionManager.cs -#| msgid : "extensionType was null or empty" -msgid "extensionType was null or empty" -msgstr "extensionType was null or empty" - -#: ~/Environment/Extensions/ExtensionManager.cs -#| msgid : "extensionType was not recognized" -msgid "extensionType was not recognized" -msgstr "extensionType was not recognized" - -#: ~/Environment/Extensions/ExtensionManager.cs -#| msgid : "extension was not found" -msgid "extension was not found" -msgstr "extension was not found" - -#: ~/Events/DefaultOrchardEventBus.cs -#| msgid : " is not formatted correctly" -msgid " is not formatted correctly" -msgstr " is not formatted correctly" - -#: ~/Security/Authorizer.cs -#| msgid : "{0}. Anonymous users do not have {1} permission." -msgid "{0}. Anonymous users do not have {1} permission." -msgstr "{0}. Anonymous users do not have {1} permission." - -#: ~/Security/Authorizer.cs -#| msgid : "{0}. Current user, {2}, does not have {1} permission." -msgid "{0}. Current user, {2}, does not have {1} permission." -msgstr "{0}. Current user, {2}, does not have {1} permission." - -#: ~/UI/Admin/AdminFilter.cs -#| msgid : "Can't access the admin" -msgid "Can't access the admin" -msgstr "Can't access the admin" - -#: ~/UI/Resources/ResourceManager.cs -#| msgid : "Style fileName was not given." -msgid "Style fileName was not given." -msgstr "Style fileName was not given." - -#: ~/UI/Resources/ResourceManager.cs -#| msgid : "Head script fileName was not given." -msgid "Head script fileName was not given." -msgstr "Head script fileName was not given." - -#: ~/UI/Resources/ResourceManager.cs -#| msgid : "Foot script fileName was not given." -msgid "Foot script fileName was not given." -msgstr "Foot script fileName was not given." - -#: ~/Environment/Configuration/AzureShellSettingsManager.cs -#| msgid : "There are no settings to save." -msgid "There are no settings to save." -msgstr "There are no settings to save." - -#: ~/Environment/Configuration/AzureShellSettingsManager.cs -#| msgid : "Settings \"Name\" is not set." -msgid "Settings \"Name\" is not set." -msgstr "Settings \"Name\" is not set." - diff --git a/src/Orchard.Web/Core/App_Data/Localization/fr/orchard.core.po b/src/Orchard.Web/Core/App_Data/Localization/fr/orchard.core.po deleted file mode 100644 index d64890cf3..000000000 --- a/src/Orchard.Web/Core/App_Data/Localization/fr/orchard.core.po +++ /dev/null @@ -1,5789 +0,0 @@ -# Orchard resource strings - fr-FR - français (France) -# Copyright (c) 2010 CodePlex Foundation -# All rights reserved -# This file is distributed under the BSD license - -#: ~/Core/Common/Drivers/CommonPartDriver.cs -#| msgid "Invalid user name" -msgid "Invalid user name" -msgstr "Nom d'utilisateur invalide" - -#: ~/Core/Common/Drivers/CommonPartDriver.cs -#| msgid "Invalid container" -msgid "Invalid container" -msgstr "Conteneur invalide" - -#: ~/Core/Common/Extensions/HtmlHelperExtensions.cs -#| msgid "Draft" -msgid "Draft" -msgstr "Brouillon" - -#: ~/Core/Common/Extensions/HtmlHelperExtensions.cs -#| msgid "as a Draft" -msgid "as a Draft" -msgstr "en tant que brouillon" - -#: ~/Core/Common/Handlers/CommonPartHandler.cs -#| msgid "Invalid user name" -msgid "Invalid user name" -msgstr "Nom d'utilisateur invalide" - -#: ~/Core/Common/Settings/LocationSettingsEditorEvents.cs -#| msgid "Location in a \"Detail\" screen" -msgid "Location in a \"Detail\" screen" -msgstr "Position dans un écran de détails" - -#: ~/Core/Common/Settings/LocationSettingsEditorEvents.cs -#| msgid "Location in a \"Editor\" screen" -msgid "Location in a \"Editor\" screen" -msgstr "Position dans un écran d'édition" - -#: ~/Core/Common/Settings/LocationSettingsEditorEvents.cs -#| msgid "Location in a \"Summary\" screen (Front-end)" -msgid "Location in a \"Summary\" screen (Front-end)" -msgstr "Position dans un écran de résumé" - -#: ~/Core/Common/Settings/LocationSettingsEditorEvents.cs -#| msgid "Location in a \"Summary\" screen (Admin)" -msgid "Location in a \"Summary\" screen (Admin)" -msgstr "Position dans un écran de résumé (administration)" - -#: ~/Core/Common/Views/DefinitionTemplates/BodyPartSettings.ascx -#| msgid "Default flavor" -msgid "Default flavor" -msgstr "Format par défaut" - -#: ~/Core/Common/Views/DefinitionTemplates/BodyTypePartSettings.ascx -#| msgid "Flavor" -msgid "Flavor" -msgstr "Format" - -#: ~/Core/Common/Views/DefinitionTemplates/LocationSettings.ascx -#| msgid "{0}" -msgid "{0}" -msgstr "{0}" - -#: ~/Core/Common/Views/DefinitionTemplates/LocationSettings.ascx -#| msgid "Zone name (e.g. body, primary)" -msgid "Zone name (e.g. body, primary)" -msgstr "Zone (par exemple body ou primary)" - -#: ~/Core/Common/Views/DefinitionTemplates/LocationSettings.ascx -#| msgid "Position in zone (e.g. 1, 1.0, 2.5.1)" -msgid "Position in zone (e.g. 1, 1.0, 2.5.1)" -msgstr "Position dans la zone (par exemple 1, 1.0 ou 2.5.1)" - -#: ~/Core/Common/Views/DisplayTemplates/Parts/Common.Body.Manage.ascx -#| msgid "Edit" -msgid "Edit" -msgstr "Modifier" - -#: ~/Core/Common/Views/DisplayTemplates/Parts/Common.Body.Summary.ascx -#| msgid "[more]" -msgid "[more]" -msgstr "[En voir plus]" - -#: ~/Core/Common/Views/DisplayTemplates/Parts/Common.Metadata.ascx -#| msgid "Published by {0} {1}" -msgid "Published by {0} {1}" -msgstr "Publié par {0} {1}" - -#: ~/Core/Common/Views/DisplayTemplates/Parts/Common.Metadata.SummaryAdmin.ascx -#| msgid "Last modified: {0}" -msgid "Last modified: {0}" -msgstr "Dernière modification: {0}" - -#: ~/Core/Common/Views/DisplayTemplates/Parts/Common.Metadata.SummaryAdmin.ascx -#| msgid "By {0}" -msgid "By {0}" -msgstr "Par {0}" - -#: ~/Core/Common/Views/EditorTemplates/Parts/Common.Body.ascx -#| msgid "Body" -msgid "Body" -msgstr "Ventre" - -#: ~/Core/Contents/AdminMenu.cs -#| msgid "Content" -msgid "Content" -msgstr "Contenu" - -#: ~/Core/Contents/AdminMenu.cs -#| msgid "Manage Content" -msgid "Manage Content" -msgstr "Gérer le contenu" - -#: ~/Core/Contents/AdminMenu.cs -#| msgid "Create {0}" -msgid "Create {0}" -msgstr "Créer {0}" - -#: ~/Core/Contents/Controllers/AdminController.cs -#| msgid "Couldn't publish selected content." -msgid "Couldn't publish selected content." -msgstr "Impossible de publier le contenu sélectionné." - -#: ~/Core/Contents/Controllers/AdminController.cs -#| msgid "Content successfully published." -msgid "Content successfully published." -msgstr "Contenu publié avec succès." - -#: ~/Core/Contents/Controllers/AdminController.cs -#| msgid "Couldn't unpublish selected content." -msgid "Couldn't unpublish selected content." -msgstr "Le contenu sélectionné n'a pas pu être dépublié." - -#: ~/Core/Contents/Controllers/AdminController.cs -#| msgid "Content successfully unpublished." -msgid "Content successfully unpublished." -msgstr "Contenu dépublié avec succès." - -#: ~/Core/Contents/Controllers/AdminController.cs -#| msgid "Couldn't remove selected content." -msgid "Couldn't remove selected content." -msgstr "Le contenu sélectionné n'a pas pu être enlevé." - -#: ~/Core/Contents/Controllers/AdminController.cs -#| msgid "Content successfully removed." -msgid "Content successfully removed." -msgstr "Contenu enlevé avec succès." - -#: ~/Core/Contents/Controllers/AdminController.cs -#| msgid "Created content item" -msgid "Created content item" -msgstr "Contenus créés" - -#: ~/Core/Contents/Controllers/AdminController.cs -#| msgid "Cannot create content" -msgid "Cannot create content" -msgstr "Impossible de créer le contenu." - -#: ~/Core/Contents/Controllers/AdminController.cs -#| msgid "Couldn't create content" -msgid "Couldn't create content" -msgstr "Impossible de créer le contenu." - -#: ~/Core/Contents/Controllers/AdminController.cs -#| msgid "Couldn't publish content" -msgid "Couldn't publish content" -msgstr "Le contenu n'a pas pu être publié" - -#: ~/Core/Contents/Controllers/AdminController.cs -#| msgid "{0} successfully published." -msgid "{0} successfully published." -msgstr "{0} publié avec succès." - -#: ~/Core/Contents/Controllers/AdminController.cs -#| msgid "Couldn't unpublish content" -msgid "Couldn't unpublish content" -msgstr "Le contenu n'a pas pu être dépublié." - -#: ~/Core/Contents/Controllers/AdminController.cs -#| msgid "{0} successfully unpublished." -msgid "{0} successfully unpublished." -msgstr "{0} dépublié avec succès." - -#: ~/Core/Contents/Controllers/AdminController.cs -#| msgid "Your content has been created." -msgid "Your content has been created." -msgstr "Votre contenu a été créé avec succès." - -#: ~/Core/Contents/Controllers/AdminController.cs -#| msgid "Your {0} has been created." -msgid "Your {0} has been created." -msgstr "Votre {0} a été créé avec succès." - -#: ~/Core/Contents/Controllers/AdminController.cs -#| msgid "Cannot edit content" -msgid "Cannot edit content" -msgstr "Impossible de modifier le contenu." - -#: ~/Core/Contents/Controllers/AdminController.cs -#| msgid "Couldn't edit content" -msgid "Couldn't edit content" -msgstr "Impossible de modifier le contenu." - -#: ~/Core/Contents/Controllers/AdminController.cs -#| msgid "Your content has been saved." -msgid "Your content has been saved." -msgstr "Votre contenu a été enregistré." - -#: ~/Core/Contents/Controllers/AdminController.cs -#| msgid "Your {0} has been saved." -msgid "Your {0} has been saved." -msgstr "Votre {0} a été enregistré(e)." - -#: ~/Core/Contents/Controllers/AdminController.cs -#| msgid "Couldn't remove content" -msgid "Couldn't remove content" -msgstr "Impossible d'enlever le contenu." - -#: ~/Core/Contents/Controllers/AdminController.cs -#| msgid "That content has been removed." -msgid "That content has been removed." -msgstr "La contenu a été enlevé." - -#: ~/Core/Contents/Controllers/AdminController.cs -#| msgid "That {0} has been removed." -msgid "That {0} has been removed." -msgstr "Ce(tte) {0} a été enlevé(e)." - -#: ~/Core/Contents/Controllers/AdminController.cs -#| msgid "That content has been published." -msgid "That content has been published." -msgstr "Ce contenu a été publié." - -#: ~/Core/Contents/Controllers/AdminController.cs -#| msgid "That {0} has been published." -msgid "That {0} has been published." -msgstr "Ce(tte) {0} a été publié(e)." - -#: ~/Core/Contents/Controllers/AdminController.cs -#| msgid "That content has been unpublished." -msgid "That content has been unpublished." -msgstr "Ce contenu a été dépublié." - -#: ~/Core/Contents/Controllers/AdminController.cs -#| msgid "That {0} has been unpublished." -msgid "That {0} has been unpublished." -msgstr "Ce(tte) {0} a été dépublié(e)." - -#: ~/Core/Contents/Views/Admin/CreatableTypeList.ascx -#| msgid "Create New Content" -msgid "Create New Content" -msgstr "Créer de nouveaux contenus" - -#: ~/Core/Contents/Views/Admin/Create.ascx -#| msgid "Create Content" -msgid "Create Content" -msgstr "Créer du contenu" - -#: ~/Core/Contents/Views/Admin/Create.ascx -#| msgid "Create {0}" -msgid "Create {0}" -msgstr "Créer {0}" - -#: ~/Core/Contents/Views/Admin/Edit.ascx -#| msgid "Edit Content" -msgid "Edit Content" -msgstr "Modifier du contenu" - -#: ~/Core/Contents/Views/Admin/Edit.ascx -#| msgid "Edit {0}" -msgid "Edit {0}" -msgstr "Modifier {0}" - -#: ~/Core/Contents/Views/Admin/List.ascx -#| msgid "Manage Content" -msgid "Manage Content" -msgstr "Gérer le contenu" - -#: ~/Core/Contents/Views/Admin/List.ascx -#| msgid "Manage {0} Content" -msgid "Manage {0} Content" -msgstr "Gérer le contenu {0}" - -#: ~/Core/Contents/Views/Admin/List.ascx -#| msgid "Add new {0} content" -msgid "Add new {0} content" -msgstr "Ajouter du nouveau contenu {0}" - -#: ~/Core/Contents/Views/Admin/List.ascx -#| msgid "Add new content" -msgid "Add new content" -msgstr "Ajouter du nouveau contenu" - -#: ~/Core/Contents/Views/Admin/List.ascx -#| msgid "Actions:" -msgid "Actions:" -msgstr "Actions:" - -#: ~/Core/Contents/Views/Admin/List.ascx -#| msgid "Create New {0}" -msgid "Create New {0}" -msgstr "Créer {0}" - -#: ~/Core/Contents/Views/Admin/List.ascx -#| msgid "Create New Content" -msgid "Create New Content" -msgstr "Créer un nouveau contenu" - -#: ~/Core/Contents/Views/Admin/List.ascx -#| msgid "Actions:" -msgid "Actions:" -msgstr "Actions:" - -#: ~/Core/Contents/Views/Admin/List.ascx -#| msgid "Choose action..." -msgid "Choose action..." -msgstr "Choisissez une action..." - -#: ~/Core/Contents/Views/Admin/List.ascx -#| msgid "Publish Now" -msgid "Publish Now" -msgstr "Publier maintenant" - -#: ~/Core/Contents/Views/Admin/List.ascx -#| msgid "Unpublish" -msgid "Unpublish" -msgstr "Dépublier" - -#: ~/Core/Contents/Views/Admin/List.ascx -#| msgid "Remove" -msgid "Remove" -msgstr "Enlever" - -#: ~/Core/Contents/Views/Admin/List.ascx -#| msgid "Apply" -msgid "Apply" -msgstr "Appliquer" - -#: ~/Core/Contents/Views/Admin/List.ascx -#| msgid "Show" -msgid "Show" -msgstr "Montrer" - -#: ~/Core/Contents/Views/Admin/List.ascx -#| msgid "any (show all)" -msgid "any (show all)" -msgstr "Tous" - -#: ~/Core/Contents/Views/Admin/List.ascx -#| msgid "Ordered by" -msgid "Ordered by" -msgstr "Trié par" - -#: ~/Core/Contents/Views/Admin/List.ascx -#| msgid "recently created" -msgid "recently created" -msgstr "date de création" - -#: ~/Core/Contents/Views/Admin/List.ascx -#| msgid "recently modified" -msgid "recently modified" -msgstr "date de modification" - -#: ~/Core/Contents/Views/Admin/List.ascx -#| msgid "Date Published" -msgid "Date Published" -msgstr "Date de publication" - -#: ~/Core/Contents/Views/DisplayTemplates/Items/Contents.Item.SummaryAdmin.ascx -#| msgid "Edit" -msgid "Edit" -msgstr "Modifier" - -#: ~/Core/Contents/Views/DisplayTemplates/Items/Contents.Item.SummaryAdmin.ascx -#| msgid " | " -msgid " | " -msgstr " | " - -#: ~/Core/Contents/Views/DisplayTemplates/Items/Contents.Item.SummaryAdmin.ascx -#| msgid "Remove" -msgid "Remove" -msgstr "Enlever" - -#: ~/Core/Contents/Views/DisplayTemplates/Parts/Contents.Publish.SummaryAdmin.ascx -#| msgid "View" -msgid "View" -msgstr "Voir" - -#: ~/Core/Contents/Views/DisplayTemplates/Parts/Contents.Publish.SummaryAdmin.ascx -#| msgid " | " -msgid " | " -msgstr " | " - -#: ~/Core/Contents/Views/DisplayTemplates/Parts/Contents.Publish.SummaryAdmin.ascx -#| msgid "Publish Draft" -msgid "Publish Draft" -msgstr "Publier un brouillon" - -#: ~/Core/Contents/Views/DisplayTemplates/Parts/Contents.Publish.SummaryAdmin.ascx -#| msgid "Unpublish" -msgid "Unpublish" -msgstr "Dépublier" - -#: ~/Core/Contents/Views/DisplayTemplates/Parts/Contents.Publish.SummaryAdmin.ascx -#| msgid "Publish" -msgid "Publish" -msgstr "Publier" - -#: ~/Core/Contents/Views/EditorTemplates/Items/Contents.Item.ascx -#| msgid "Save" -msgid "Save" -msgstr "Enregistrer" - -#: ~/Core/ContentsLocation/Settings/LocationSettingsEditorEvents.cs -#| msgid "Default location (i.e. fallback if no specific override)" -msgid "Default location (i.e. fallback if no specific override)" -msgstr "Emplacement par défaut" - -#: ~/Core/ContentsLocation/Settings/LocationSettingsEditorEvents.cs -#| msgid "\"Detail\" display location" -msgid "\"Detail\" display location" -msgstr "Emplacement 'Detail'" - -#: ~/Core/ContentsLocation/Settings/LocationSettingsEditorEvents.cs -#| msgid "\"Editor\" display location" -msgid "\"Editor\" display location" -msgstr "Emplacement 'Editor'" - -#: ~/Core/ContentsLocation/Settings/LocationSettingsEditorEvents.cs -#| msgid "\"Summary\" (front-end) display location" -msgid "\"Summary\" (front-end) display location" -msgstr "Emplacement 'Summary' (public)" - -#: ~/Core/ContentsLocation/Settings/LocationSettingsEditorEvents.cs -#| msgid "\"Summary\" (admin) display location" -msgid "\"Summary\" (admin) display location" -msgstr "Emplacement 'Summary' (admin)" - -#: ~/Core/ContentsLocation/Views/DefinitionTemplates/LocationSettings.ascx -#| msgid "{0}" -msgid "{0}" -msgstr "{0}" - -#: ~/Core/ContentsLocation/Views/DefinitionTemplates/LocationSettings.ascx -#| msgid "Zone name (e.g. body, primary)" -msgid "Zone name (e.g. body, primary)" -msgstr "Nom de zone (par exemple body, primary)" - -#: ~/Core/ContentsLocation/Views/DefinitionTemplates/LocationSettings.ascx -#| msgid " - default: {0}" -msgid " - default: {0}" -msgstr " - défaut: {0}" - -#: ~/Core/ContentsLocation/Views/DefinitionTemplates/LocationSettings.ascx -#| msgid "Position in zone (e.g. 1, 1.0, 2.5.1)" -msgid "Position in zone (e.g. 1, 1.0, 2.5.1)" -msgstr "Position dans la zone (par exemple 1, 1.0, 2.5.1)" - -#: ~/Core/Dashboard/AdminMenu.cs -#| msgid "Orchard" -msgid "Orchard" -msgstr "Orchard" - -#: ~/Core/Dashboard/AdminMenu.cs -#| msgid "Dashboard" -msgid "Dashboard" -msgstr "Tableau de bord" - -#: ~/Core/Dashboard/Views/Admin/Index.ascx -#| msgid "Welcome to Orchard" -msgid "Welcome to Orchard" -msgstr "Bienvenue dans Orchard" - -#: ~/Core/Dashboard/Views/Admin/Index.ascx -#| msgid "This is the place where you can manage your web site, its appearance and its contents. Please take a moment to explore the different menu items on the left of the screen to familiarize yourself with the features of the application. For example, try to change the theme through the "Manage Themes" menu entry. You can also create new pages and manage existing ones through the "Manage Pages" menu entry or create blogs through "Manage Blogs"." -msgid "This is the place where you can manage your web site, its appearance and its contents. Please take a moment to explore the different menu items on the left of the screen to familiarize yourself with the features of the application. For example, try to change the theme through the "Manage Themes" menu entry. You can also create new pages and manage existing ones through the "Manage Pages" menu entry or create blogs through "Manage Blogs"." -msgstr "Ceci est l'endroit où vous pouvez gérer votre site, son apparence et son contenu. Veuillez passer un instant à explorer le menu à gauche de l'écran pour vous familiariser avec les différents aspects de l'application. Par exemple, vous pouvez changer le thème en utilisant "Gérer les thèmes". Vous pouvez également créer de nouvelles pages et gérer les pages existantes via "Gérer les pages" ou bien créer de nouveaux blogs via "Gérer les blogs"." - -#: ~/Core/Dashboard/Views/Admin/Index.ascx -#| msgid "This is the place where you can manage your web site, its appearance and its contents. Please take a moment to explore the different menu items on the left of the screen to familiarize yourself with the features of the application. For example, try to change the theme through the “Manage Themes” menu entry. You can also create new pages and manage existing ones through the “Manage Pages” menu entry or create blogs through “Manage Blogs”." -msgid "This is the place where you can manage your web site, its appearance and its contents. Please take a moment to explore the different menu items on the left of the screen to familiarize yourself with the features of the application. For example, try to change the theme through the “Manage Themes” menu entry. You can also create new pages and manage existing ones through the “Manage Pages” menu entry or create blogs through “Manage Blogs”." -msgstr "Ceci est l'endroit où vous pouvez gérer votre site, son apparence et son contenu. Veuillez passer un instant à explorer le menu à gauche de l'écran pour vous familiariser avec les différents aspects de l'application. Par exemple, vous pouvez changer le thème en utilisant "Gérer les thèmes". Vous pouvez également créer de nouvelles pages et gérer les pages existantes via "Gérer les pages" ou bien créer de nouveaux blogs via "Gérer les blogs"." - -#: ~/Core/Dashboard/Views/Admin/Index.ascx -#| msgid "Have fun!" -msgid "Have fun!" -msgstr "Amusez-vous bien!" - -#: ~/Core/Dashboard/Views/Admin/Index.ascx -#| msgid "The Orchard Team" -msgid "The Orchard Team" -msgstr "L'équipe Orchard" - -#: ~/Core/Localization/Controllers/AdminController.cs -#| msgid "Created content item translation." -msgid "Created content item translation." -msgstr "Traduction de contenu créée." - -#: ~/Core/Localization/Views/CultureSelection.ascx -#| msgid "This is the {0} variation of {1}." -msgid "This is the {0} variation of {1}." -msgstr "Ceci est la traduction {0} de {1}." - -#: ~/Core/Localization/Views/CultureSelection.ascx -#| msgid "Content Localization" -msgid "Content Localization" -msgstr "Localisation de contenu" - -#: ~/Core/Localization/Views/Admin/Translate.ascx -#| msgid "Translate Content" -msgid "Translate Content" -msgstr "Traduire du contenu" - -#: ~/Core/Localization/Views/DisplayTemplates/Parts/Localization.ContentTranslations.ascx -#| msgid "Translations:" -msgid "Translations:" -msgstr "Traductions:" - -#: ~/Core/Localization/Views/DisplayTemplates/Parts/Localization.ContentTranslations.SummaryAdmin.ascx -#| msgid "Translations:" -msgid "Translations:" -msgstr "Traductions:" - -#: ~/Core/Localization/Views/DisplayTemplates/Parts/Localization.ContentTranslations.SummaryAdmin.ascx -#| msgid "+ New translation" -msgid "+ New translation" -msgstr "+ Nouvelle traduction" - -#: ~/Core/Localization/Views/EditorTemplates/Parts/Localization.Translation.ascx -#| msgid "Content Localization" -msgid "Content Localization" -msgstr "Localisation du contenu" - -#: ~/Core/Localization/Views/EditorTemplates/Parts/Localization.Translation.ascx -#| msgid "This is the {0} variation of {1}." -msgid "This is the {0} variation of {1}." -msgstr "Ceci est la traduction {0} de {1}." - -#: ~/Core/Localization/Views/EditorTemplates/Parts/Localization.Translation.ascx -#| msgid "Other translations:" -msgid "Other translations:" -msgstr "Autres traductions:" - -#: ~/Core/Localization/Views/EditorTemplates/Parts/Localization.Translation.ascx -#| msgid "Translations:" -msgid "Translations:" -msgstr "Traductions:" - -#: ~/Core/Navigation/AdminMenu.cs -#| msgid "Navigation" -msgid "Navigation" -msgstr "Navigation" - -#: ~/Core/Navigation/AdminMenu.cs -#| msgid "Main Menu" -msgid "Main Menu" -msgstr "Menu principal" - -#: ~/Core/Navigation/Controllers/AdminController.cs -#| msgid "Not allowed to manage the main menu" -msgid "Not allowed to manage the main menu" -msgstr "Non autorisé à gérer le menu principal" - -#: ~/Core/Navigation/Controllers/AdminController.cs -#| msgid "Couldn't manage the main menu" -msgid "Couldn't manage the main menu" -msgstr "Le menu principal n'a pas pu être modifié." - -#: ~/Core/Navigation/Drivers/MenuPartDriver.cs -#| msgid "The MenuText field is required" -msgid "The MenuText field is required" -msgstr "Le champ MenuText est requis" - -#: ~/Core/Navigation/Views/Admin/Index.ascx -#| msgid "Manage Main Menu" -msgid "Manage Main Menu" -msgstr "Gérer le menu principal" - -#: ~/Core/Navigation/Views/Admin/Index.ascx -#| msgid "Text" -msgid "Text" -msgstr "Texte" - -#: ~/Core/Navigation/Views/Admin/Index.ascx -#| msgid "Position" -msgid "Position" -msgstr "Position" - -#: ~/Core/Navigation/Views/Admin/Index.ascx -#| msgid "Url" -msgid "Url" -msgstr "Url" - -#: ~/Core/Navigation/Views/Admin/Index.ascx -#| msgid "Remove" -msgid "Remove" -msgstr "Enlever" - -#: ~/Core/Navigation/Views/Admin/Index.ascx -#| msgid "Update All" -msgid "Update All" -msgstr "Tout mettre à jour" - -#: ~/Core/Navigation/Views/Admin/Index.ascx -#| msgid "Add New Item" -msgid "Add New Item" -msgstr "Ajouter un contenu" - -#: ~/Core/Navigation/Views/Admin/Index.ascx -#| msgid "Add" -msgid "Add" -msgstr "Ajouter" - -#: ~/Core/Navigation/Views/EditorTemplates/Parts/Navigation.EditMenuPart.ascx -#| msgid "Show on main menu" -msgid "Show on main menu" -msgstr "Afficher dans le menu principal" - -#: ~/Core/Navigation/Views/EditorTemplates/Parts/Navigation.EditMenuPart.ascx -#| msgid "Menu text" -msgid "Menu text" -msgstr "Texte du menu" - -#: ~/Core/PublishLater/Drivers/PublishLaterPartDriver.cs -#| msgid "{0} has been published!" -msgid "{0} has been published!" -msgstr "{0} a été publié." - -#: ~/Core/PublishLater/Drivers/PublishLaterPartDriver.cs -#| msgid "{0} has been scheduled for publishing!" -msgid "{0} has been scheduled for publishing!" -msgstr "La publication future de {0} a été planifiée." - -#: ~/Core/PublishLater/Drivers/PublishLaterPartDriver.cs -#| msgid "{0} draft has been saved!" -msgid "{0} draft has been saved!" -msgstr "Le brouillon de {0} a été sauvé." - -#: ~/Core/PublishLater/Views/DisplayTemplates/Parts/PublishLater.Metadata.SummaryAdmin.ascx -#| msgid "Online" -msgid "Online" -msgstr "En ligne" - -#: ~/Core/PublishLater/Views/DisplayTemplates/Parts/PublishLater.Metadata.SummaryAdmin.ascx -#| msgid "The page is currently online" -msgid "The page is currently online" -msgstr "La page est actuellement en ligne" - -#: ~/Core/PublishLater/Views/DisplayTemplates/Parts/PublishLater.Metadata.SummaryAdmin.ascx -#| msgid "Published" -msgid "Published" -msgstr "Publié" - -#: ~/Core/PublishLater/Views/DisplayTemplates/Parts/PublishLater.Metadata.SummaryAdmin.ascx -#| msgid "Offline" -msgid "Offline" -msgstr "Hors ligne" - -#: ~/Core/PublishLater/Views/DisplayTemplates/Parts/PublishLater.Metadata.SummaryAdmin.ascx -#| msgid "The page is currently offline" -msgid "The page is currently offline" -msgstr "La page est actuellement hors ligne" - -#: ~/Core/PublishLater/Views/DisplayTemplates/Parts/PublishLater.Metadata.SummaryAdmin.ascx -#| msgid "Not Published" -msgid "Not Published" -msgstr "Non publié" - -#: ~/Core/PublishLater/Views/DisplayTemplates/Parts/PublishLater.Metadata.SummaryAdmin.ascx -#| msgid "Draft" -msgid "Draft" -msgstr "Brouillon" - -#: ~/Core/PublishLater/Views/DisplayTemplates/Parts/PublishLater.Metadata.SummaryAdmin.ascx -#| msgid "The page has a draft" -msgid "The page has a draft" -msgstr "La page a un brouillon" - -#: ~/Core/PublishLater/Views/DisplayTemplates/Parts/PublishLater.Metadata.SummaryAdmin.ascx -#| msgid "No Draft" -msgid "No Draft" -msgstr "Pas de brouillon" - -#: ~/Core/PublishLater/Views/DisplayTemplates/Parts/PublishLater.Metadata.SummaryAdmin.ascx -#| msgid "Published: {0}" -msgid "Published: {0}" -msgstr "Publié: {0}" - -#: ~/Core/PublishLater/Views/DisplayTemplates/Parts/PublishLater.Metadata.SummaryAdmin.ascx -#| msgid "Scheduled" -msgid "Scheduled" -msgstr "Planifié" - -#: ~/Core/PublishLater/Views/DisplayTemplates/Parts/PublishLater.Metadata.SummaryAdmin.ascx -#| msgid "The page is scheduled for publishing" -msgid "The page is scheduled for publishing" -msgstr "La publication de la page est planifiée" - -#: ~/Core/PublishLater/Views/DisplayTemplates/Parts/PublishLater.Metadata.SummaryAdmin.ascx -#| msgid "M/d/yyyy h:mm tt" -msgid "M/d/yyyy h:mm tt" -msgstr "d/M/yyyy h:mm tt" - -#: ~/Core/PublishLater/Views/EditorTemplates/Parts/PublishLater.ascx -#| msgid "Publish Settings" -msgid "Publish Settings" -msgstr "Paramètres de publication" - -#: ~/Core/PublishLater/Views/EditorTemplates/Parts/PublishLater.ascx -#| msgid "Save Draft" -msgid "Save Draft" -msgstr "Sauvegarder un brouillon" - -#: ~/Core/PublishLater/Views/EditorTemplates/Parts/PublishLater.ascx -#| msgid "Publish Now" -msgid "Publish Now" -msgstr "Publier immédiatement" - -#: ~/Core/PublishLater/Views/EditorTemplates/Parts/PublishLater.ascx -#| msgid "Publish Later" -msgid "Publish Later" -msgstr "Publier plus tard" - -#: ~/Core/PublishLater/Views/EditorTemplates/Parts/PublishLater.ascx -#| msgid "Date" -msgid "Date" -msgstr "Date" - -#: ~/Core/PublishLater/Views/EditorTemplates/Parts/PublishLater.ascx -#| msgid "Time" -msgid "Time" -msgstr "Heure" - -#: ~/Core/Reports/AdminMenu.cs -#| msgid "Site Configuration" -msgid "Site Configuration" -msgstr "Configuration du site" - -#: ~/Core/Reports/AdminMenu.cs -#| msgid "Reports" -msgid "Reports" -msgstr "Rapports" - -#: ~/Core/Reports/Views/Admin/Display.aspx -#| msgid "Display Report" -msgid "Display Report" -msgstr "Affichage du rapport" - -#: ~/Core/Reports/Views/Admin/Display.aspx -#| msgid "This is a table of the reports in your application" -msgid "This is a table of the reports in your application" -msgstr "Ceci est la liste des rapports disponibles dans l'application" - -#: ~/Core/Reports/Views/Admin/Display.aspx -#| msgid "Type" -msgid "Type" -msgstr "Type" - -#: ~/Core/Reports/Views/Admin/Display.aspx -#| msgid "Message" -msgid "Message" -msgstr "Message" - -#: ~/Core/Reports/Views/Admin/Display.aspx -#| msgid "Date" -msgid "Date" -msgstr "Date" - -#: ~/Core/Reports/Views/Admin/Index.aspx -#| msgid "Manage Reports" -msgid "Manage Reports" -msgstr "Gérer les rapports" - -#: ~/Core/Reports/Views/Admin/Index.aspx -#| msgid "This is a table of the reports in your application" -msgid "This is a table of the reports in your application" -msgstr "Ceci est la liste des rapports disponibles dans l'application." - -#: ~/Core/Reports/Views/Admin/Index.aspx -#| msgid "Name" -msgid "Name" -msgstr "Nom" - -#: ~/Core/Reports/Views/Admin/Index.aspx -#| msgid "Title" -msgid "Title" -msgstr "Titre" - -#: ~/Core/Reports/Views/Admin/Index.aspx -#| msgid "Date" -msgid "Date" -msgstr "Date" - -#: ~/Core/Routable/Drivers/RoutePartDriver.cs -#| msgid "Please do not use any of the following characters in your slugs: \"/\", \":\", \"?\", \"#\", \"[\", \"]\", \"@\", \"!\", \"$\", \"&\", \"'\", \"(\", \")\", \"*\", \"+\", \",\", \";\", \"=\". No spaces are allowed (please use dashes or underscores instead)." -msgid "Please do not use any of the following characters in your slugs: \"/\", \":\", \"?\", \"#\", \"[\", \"]\", \"@\", \"!\", \"$\", \"&\", \"'\", \"(\", \")\", \"*\", \"+\", \",\", \";\", \"=\". No spaces are allowed (please use dashes or underscores instead)." -msgstr "Merci de ne pas utiliser les caractères suivants dans vos alias: '/', ':', '?', '#', '[', ']', '@', '!', '$', '&', ''', '(', ')', '*', '+', ',', ';', '='. Les espaces ne sont pas autorisés (merci d'utiliser des tirets à la place)." - -#: ~/Core/Routable/Drivers/RoutePartDriver.cs -#| msgid "Slugs in conflict. \"{0}\" is already set for a previously created {2} so now it has the slug \"{1}\"" -msgid "Slugs in conflict. \"{0}\" is already set for a previously created {2} so now it has the slug \"{1}\"" -msgstr "Alias en conflit. '{0}' est déjà utilisé par un(e) {2} créé(e) précédemment. Le contenu a été sauvé avec l'alias '{1}'." - -#: ~/Core/Routable/Views/EditorTemplates/Parts/Routable.RoutePart.ascx -#| msgid "Permalink" -msgid "Permalink" -msgstr "Permalink" - -#: ~/Core/Routable/Views/EditorTemplates/Parts/Routable.RoutePart.ascx -#| msgid "Set as home page" -msgid "Set as home page" -msgstr "Utiliser comme page d'accueil" - -#: ~/Core/Settings/AdminMenu.cs -#| msgid "Site Configuration" -msgid "Site Configuration" -msgstr "Configuration du site" - -#: ~/Core/Settings/AdminMenu.cs -#| msgid "Settings" -msgid "Settings" -msgstr "Configuration" - -#: ~/Core/Settings/Controllers/AdminController.cs -#| msgid "Not authorized to manage settings" -msgid "Not authorized to manage settings" -msgstr "Non autorisé à gérer la configuration" - -#: ~/Core/Settings/Controllers/AdminController.cs -#| msgid "Settings updated" -msgid "Settings updated" -msgstr "Configuration mise à jour" - -#: ~/Core/Settings/Descriptor/ShellDescriptorManager.cs -#| msgid "Invalid serial number for shell descriptor" -msgid "Invalid serial number for shell descriptor" -msgstr "Numéro de série de shell descriptor invalide" - -#: ~/Core/Settings/Views/Admin/Culture.ascx -#| msgid "Cultures" -msgid "Cultures" -msgstr "Cultures" - -#: ~/Core/Settings/Views/Admin/Culture.ascx -#| msgid "Manage Settings" -msgid "Manage Settings" -msgstr "Configurer" - -#: ~/Core/Settings/Views/Admin/Culture.ascx -#| msgid " > " -msgid " > " -msgstr " > " - -#: ~/Core/Settings/Views/Admin/Culture.ascx -#| msgid "Supported Cultures" -msgid "Supported Cultures" -msgstr "Cultures supportées" - -#: ~/Core/Settings/Views/Admin/Culture.ascx -#| msgid "Available Cultures" -msgid "Available Cultures" -msgstr "Cultures disponibles" - -#: ~/Core/Settings/Views/Admin/Culture.ascx -#| msgid "Add a culture..." -msgid "Add a culture..." -msgstr "Ajouter une culture..." - -#: ~/Core/Settings/Views/Admin/Culture.ascx -#| msgid "Add" -msgid "Add" -msgstr "Ajouter" - -#: ~/Core/Settings/Views/Admin/Culture.ascx -#| msgid "Cultures this site supports" -msgid "Cultures this site supports" -msgstr "Cultures supportées par ce site" - -#: ~/Core/Settings/Views/Admin/Index.ascx -#| msgid "Manage Settings" -msgid "Manage Settings" -msgstr "Configurer" - -#: ~/Core/Settings/Views/Admin/Index.ascx -#| msgid "Global Settings" -msgid "Global Settings" -msgstr "Configuration globale" - -#: ~/Core/Settings/Views/Admin/Index.ascx -#| msgid "Site name" -msgid "Site name" -msgstr "Nom du site" - -#: ~/Core/Settings/Views/Admin/Index.ascx -#| msgid "Default Site Culture" -msgid "Default Site Culture" -msgstr "Culture du site par défaut" - -#: ~/Core/Settings/Views/Admin/Index.ascx -#| msgid "Add or remove supported cultures for the site." -msgid "Add or remove supported cultures for the site." -msgstr "Ajouter ou retirer des cultures supportées par le site." - -#: ~/Core/Settings/Views/Admin/Index.ascx -#| msgid "Page title separator" -msgid "Page title separator" -msgstr "Séparateur de titre de page" - -#: ~/Core/Settings/Views/Admin/Index.ascx -#| msgid "Super user" -msgid "Super user" -msgstr "Super utilisateur" - -#: ~/Core/Settings/Views/Admin/Index.ascx -#| msgid "Save" -msgid "Save" -msgstr "Enregistrer" - -#: ~/Core/Settings/Views/DisplayTemplates/RemovableCulture.ascx -#| msgid "Delete" -msgid "Delete" -msgstr "Supprimer" - -#: ~/Modules/Orchard.Packaging/AdminMenu.cs -#| msgid "Gallery" -msgid "Gallery" -msgstr "Galerie" - -#: ~/Modules/Orchard.Packaging/AdminMenu.cs -#| msgid "Browse Gallery" -msgid "Browse Gallery" -msgstr "Consulter la galerie" - -#: ~/Modules/Orchard.Packaging/AdminMenu.cs -#| msgid "Gallery Feeds" -msgid "Gallery Feeds" -msgstr "Flux de galerie" - -#: ~/Modules/Orchard.Packaging/Commands/GalleryCommands.cs -#| msgid "Missing or incorrect User" -msgid "Missing or incorrect User" -msgstr "Utilisateur manquant ou incorrect." - -#: ~/Modules/Orchard.Packaging/Commands/GalleryCommands.cs -#| msgid "Missing or incorrect Password" -msgid "Missing or incorrect Password" -msgstr "Mot de passe manquant ou incorrect." - -#: ~/Modules/Orchard.Packaging/Commands/GalleryCommands.cs -#| msgid "Success" -msgid "Success" -msgstr "Succès" - -#: ~/Modules/Orchard.Packaging/Commands/PackagingCommands.cs -#| msgid "Module \"{0}\" does not exist in this Orchard installation." -msgid "Module \"{0}\" does not exist in this Orchard installation." -msgstr "Le module '{0}' n'existe pas dans cette installation d'Orchard." - -#: ~/Modules/Orchard.Packaging/Commands/PackagingCommands.cs -#| msgid "Package \"{0}\" successfully created" -msgid "Package \"{0}\" successfully created" -msgstr "Le paquetage '{0}' a été créé avec succès." - -#: ~/Modules/Orchard.Packaging/Commands/PackagingCommands.cs -#| msgid "File \"{0}\" does not exist." -msgid "File \"{0}\" does not exist." -msgstr "Le fichier '{0}' n'existe pas." - -#: ~/Modules/Orchard.Packaging/Commands/PackagingCommands.cs -#| msgid "Package \"{0}\" successfully installed at \"{1}\"" -msgid "Package \"{0}\" successfully installed at \"{1}\"" -msgstr "Le paquetage '{0}' a été installé avec succès dans '{1}'." - -#: ~/Modules/Orchard.Packaging/Controllers/GalleryController.cs -#| msgid "List of available modules and themes is updated." -msgid "List of available modules and themes is updated." -msgstr "La liste des modules et thèmes disponibles est mise à jour." - -#: ~/Modules/Orchard.Packaging/Controllers/GalleryController.cs -#| msgid "May only push directly to one of the configured sources." -msgid "May only push directly to one of the configured sources." -msgstr "Il n'est possible de pousser que vers une des sources configurées." - -#: ~/Modules/Orchard.Packaging/Controllers/GalleryController.cs -#| msgid "Harvested {0} and published onto {1}" -msgid "Harvested {0} and published onto {1}" -msgstr "{0} récolté et publié vers {1}" - -#: ~/Modules/Orchard.Packaging/Controllers/GalleryController.cs -#| msgid "Installed module" -msgid "Installed module" -msgstr "Module installé" - -#: ~/Modules/Orchard.Packaging/Controllers/GalleryController.cs -#| msgid "The feed has been removed successfully." -msgid "The feed has been removed successfully." -msgstr "Le flux a été enlevé avec succès." - -#: ~/Modules/Orchard.Packaging/Controllers/GalleryController.cs -#| msgid "The Url is not valid" -msgid "The Url is not valid" -msgstr "L'Url n'est pas valide." - -#: ~/Modules/Orchard.Packaging/Controllers/GalleryController.cs -#| msgid "Url is required" -msgid "Url is required" -msgstr "L'Url doit être spécifiée." - -#: ~/Modules/Orchard.Packaging/Controllers/GalleryController.cs -#| msgid "The feed has no title." -msgid "The feed has no title." -msgstr "Le flux n'a pas de titre." - -#: ~/Modules/Orchard.Packaging/Controllers/GalleryController.cs -#| msgid "The url of the feed or its content is not valid." -msgid "The url of the feed or its content is not valid." -msgstr "L'Url du flux ou son contenu n'est pas valide." - -#: ~/Modules/Orchard.Packaging/Controllers/GalleryController.cs -#| msgid "The feed has been added successfully." -msgid "The feed has been added successfully." -msgstr "Le flux a été ajouté avec succès." - -#: ~/Modules/Orchard.Packaging/Controllers/GalleryController.cs -#| msgid "Adding feed failed: {0}" -msgid "Adding feed failed: {0}" -msgstr "L'ajout du flux a échoué: {0}" - -#: ~/Modules/Orchard.Packaging/Services/PackageExpander.cs -#| msgid "Unknown extension type \"{0}\"" -msgid "Unknown extension type \"{0}\"" -msgstr "Type d'extension inconnu: {0}" - -#: ~/Modules/Orchard.Packaging/Views/Gallery/_Subnav.ascx -#| msgid "Browse Repository Packages" -msgid "Browse Repository Packages" -msgstr "Consulter les catalogues de paquetages" - -#: ~/Modules/Orchard.Packaging/Views/Gallery/_Subnav.ascx -#| msgid "Harvest Local Packages" -msgid "Harvest Local Packages" -msgstr "Récolter les paquetages locaux" - -#: ~/Modules/Orchard.Packaging/Views/Gallery/_Subnav.ascx -#| msgid "Edit Repository Sources" -msgid "Edit Repository Sources" -msgstr "Modifier les catalogues de paquetages" - -#: ~/Modules/Orchard.Packaging/Views/Gallery/AddSource.ascx -#| msgid "Add a Feed" -msgid "Add a Feed" -msgstr "Ajouter un flux" - -#: ~/Modules/Orchard.Packaging/Views/Gallery/AddSource.ascx -#| msgid "Add Feed" -msgid "Add Feed" -msgstr "Ajouter un flux" - -#: ~/Modules/Orchard.Packaging/Views/Gallery/AddSource.ascx -#| msgid "Feed Url" -msgid "Feed Url" -msgstr "Url du flux" - -#: ~/Modules/Orchard.Packaging/Views/Gallery/Harvest.ascx -#| msgid "Packaging" -msgid "Packaging" -msgstr "Emballage" - -#: ~/Modules/Orchard.Packaging/Views/Gallery/Harvest.ascx -#| msgid "Harvest Packages" -msgid "Harvest Packages" -msgstr "Récolter des paquetages" - -#: ~/Modules/Orchard.Packaging/Views/Gallery/Harvest.ascx -#| msgid "Package creation was unsuccessful. Please correct the errors and try again." -msgid "Package creation was unsuccessful. Please correct the errors and try again." -msgstr "La création de paquetage a échoué. Veuillez corriger les erreurs et réessayer." - -#: ~/Modules/Orchard.Packaging/Views/Gallery/Harvest.ascx -#| msgid "Download" -msgid "Download" -msgstr "Télécharger" - -#: ~/Modules/Orchard.Packaging/Views/Gallery/Harvest.ascx -#| msgid "Push to {0}" -msgid "Push to {0}" -msgstr "Pousser vers {0}" - -#: ~/Modules/Orchard.Packaging/Views/Gallery/Harvest.ascx -#| msgid "Harvest" -msgid "Harvest" -msgstr "Récolter" - -#: ~/Modules/Orchard.Packaging/Views/Gallery/Modules.ascx -#| msgid "Packaging" -msgid "Packaging" -msgstr "Emballage" - -#: ~/Modules/Orchard.Packaging/Views/Gallery/Modules.ascx -#| msgid "Browse Packages" -msgid "Browse Packages" -msgstr "Consulter les paquetages" - -#: ~/Modules/Orchard.Packaging/Views/Gallery/Modules.ascx -#| msgid "Browse Gallery" -msgid "Browse Gallery" -msgstr "Consulter la galerie" - -#: ~/Modules/Orchard.Packaging/Views/Gallery/Modules.ascx -#| msgid "Refresh" -msgid "Refresh" -msgstr "Actualiser" - -#: ~/Modules/Orchard.Packaging/Views/Gallery/Modules.ascx -#| msgid "Feed:" -msgid "Feed:" -msgstr "Flux:" - -#: ~/Modules/Orchard.Packaging/Views/Gallery/Modules.ascx -#| msgid "Any (show all feeds)" -msgid "Any (show all feeds)" -msgstr "Tous" - -#: ~/Modules/Orchard.Packaging/Views/Gallery/Modules.ascx -#| msgid "Apply" -msgid "Apply" -msgstr "Appliquer" - -#: ~/Modules/Orchard.Packaging/Views/Gallery/Modules.ascx -#| msgid "Version: {0}" -msgid "Version: {0}" -msgstr "Version: {0}" - -#: ~/Modules/Orchard.Packaging/Views/Gallery/Modules.ascx -#| msgid "(No title)" -msgid "(No title)" -msgstr "(pas de titre)" - -#: ~/Modules/Orchard.Packaging/Views/Gallery/Modules.ascx -#| msgid "(No description" -msgid "(No description" -msgstr "(pas de description" - -#: ~/Modules/Orchard.Packaging/Views/Gallery/Modules.ascx -#| msgid "Last Updated: {0}" -msgid "Last Updated: {0}" -msgstr "Mis à jour le: {0}" - -#: ~/Modules/Orchard.Packaging/Views/Gallery/Modules.ascx -#| msgid "Author: {0}" -msgid "Author: {0}" -msgstr "Auteur: {0}" - -#: ~/Modules/Orchard.Packaging/Views/Gallery/Modules.ascx -#| msgid "Unknown" -msgid "Unknown" -msgstr "Inconnu" - -#: ~/Modules/Orchard.Packaging/Views/Gallery/Modules.ascx -#| msgid "Install" -msgid "Install" -msgstr "Installer" - -#: ~/Modules/Orchard.Packaging/Views/Gallery/Modules.ascx -#| msgid " | " -msgid " | " -msgstr " | " - -#: ~/Modules/Orchard.Packaging/Views/Gallery/Modules.ascx -#| msgid "Download" -msgid "Download" -msgstr "Télécharger" - -#: ~/Modules/Orchard.Packaging/Views/Gallery/Sources.ascx -#| msgid "Gallery Feeds" -msgid "Gallery Feeds" -msgstr "Flux de galerie" - -#: ~/Modules/Orchard.Packaging/Views/Gallery/Sources.ascx -#| msgid "Add Feed" -msgid "Add Feed" -msgstr "Ajouter un flux" - -#: ~/Modules/Orchard.Packaging/Views/Gallery/Sources.ascx -#| msgid "This is a table of the gallery feeds in your application" -msgid "This is a table of the gallery feeds in your application" -msgstr "Ceci est la liste des flux de galerie de l'application." - -#: ~/Modules/Orchard.Packaging/Views/Gallery/Sources.ascx -#| msgid "Title" -msgid "Title" -msgstr "Titre" - -#: ~/Modules/Orchard.Packaging/Views/Gallery/Sources.ascx -#| msgid "Url" -msgid "Url" -msgstr "Url" - -#: ~/Modules/Orchard.Packaging/Views/Gallery/Sources.ascx -#| msgid "Remove" -msgid "Remove" -msgstr "Enlever" - -#: ~/Modules/Orchard.Packaging/Views/Gallery/Sources.ascx -#| msgid "Packaging" -msgid "Packaging" -msgstr "Emballage" - -#: ~/Modules/Orchard.Packaging/Views/Gallery/Sources.ascx -#| msgid "Edit Sources" -msgid "Edit Sources" -msgstr "Modifier les sources" - -#: ~/Modules/Futures.Widgets/Controllers/AdminController.cs -#| msgid "Designer notes not found." -msgid "Designer notes not found." -msgstr "Notes de design introuvables." - -#: ~/Modules/Futures.Widgets/Views/Admin/Edit.ascx -#| msgid "Edit Widget" -msgid "Edit Widget" -msgstr "Modifier le gadget" - -#: ~/Modules/Lucene/Models/LuceneDocumentIndex.cs -#| msgid "Unexpected index type" -msgid "Unexpected index type" -msgstr "Type d'index inattendu" - -#: ~/Modules/Orchard.Blogs/AdminMenu.cs -#| msgid "Blogs" -msgid "Blogs" -msgstr "Blogs" - -#: ~/Modules/Orchard.Blogs/AdminMenu.cs -#| msgid "Manage Blogs" -msgid "Manage Blogs" -msgstr "Gérer les blogs" - -#: ~/Modules/Orchard.Blogs/AdminMenu.cs -#| msgid "Manage Blog" -msgid "Manage Blog" -msgstr "Gérer le blog" - -#: ~/Modules/Orchard.Blogs/AdminMenu.cs -#| msgid "Create New Blog" -msgid "Create New Blog" -msgstr "Créer un blog" - -#: ~/Modules/Orchard.Blogs/AdminMenu.cs -#| msgid "Create New Post" -msgid "Create New Post" -msgstr "Créer un billet" - -#: ~/Modules/Orchard.Blogs/Commands/BlogCommands.cs -#| msgid "An error occured while loading the file: " -msgid "An error occured while loading the file: " -msgstr "Une erreur s'est produite durant le chargement du fichier: " - -#: ~/Modules/Orchard.Blogs/Controllers/BlogAdminController.cs -#| msgid "Not allowed to create blogs" -msgid "Not allowed to create blogs" -msgstr "Non autorisé à créer un blog." - -#: ~/Modules/Orchard.Blogs/Controllers/BlogAdminController.cs -#| msgid "Couldn't create blog" -msgid "Couldn't create blog" -msgstr "Le blog n'a pas pu être créé." - -#: ~/Modules/Orchard.Blogs/Controllers/BlogAdminController.cs -#| msgid "Not allowed to edit blog" -msgid "Not allowed to edit blog" -msgstr "Non autorisé à modifier le blog." - -#: ~/Modules/Orchard.Blogs/Controllers/BlogAdminController.cs -#| msgid "Couldn't edit blog" -msgid "Couldn't edit blog" -msgstr "La blog n'a pas pu être modifié." - -#: ~/Modules/Orchard.Blogs/Controllers/BlogAdminController.cs -#| msgid "Blog information updated" -msgid "Blog information updated" -msgstr "Les informations du blog ont été mises à jour." - -#: ~/Modules/Orchard.Blogs/Controllers/BlogAdminController.cs -#| msgid "Couldn't delete blog" -msgid "Couldn't delete blog" -msgstr "Le blog n'a pas pu être effacé." - -#: ~/Modules/Orchard.Blogs/Controllers/BlogAdminController.cs -#| msgid "Blog was successfully deleted" -msgid "Blog was successfully deleted" -msgstr "Le blog a été effacé." - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid "Not allowed to create blog post" -msgid "Not allowed to create blog post" -msgstr "Non autorisé à créer un billet." - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid "Couldn't create blog post" -msgid "Couldn't create blog post" -msgstr "Le billet n'a pas pu être créé." - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid "Your {0} has been created." -msgid "Your {0} has been created." -msgstr "Votre {0} a été créé(e)." - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid "Couldn't edit blog post" -msgid "Couldn't edit blog post" -msgstr "Le billet n'a pas pu être modifié." - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid "Your {0} has been saved." -msgid "Your {0} has been saved." -msgstr "Votre {0} a été sauvé(e)." - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid "There is no draft to discard." -msgid "There is no draft to discard." -msgstr "Aucun brouillon n'existe." - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid "Couldn't discard blog post draft" -msgid "Couldn't discard blog post draft" -msgstr "Le brouillon n'a pas pu être effacé." - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid "Can not discard draft on unpublished blog post." -msgid "Can not discard draft on unpublished blog post." -msgstr "Le brouillon de ce billet non publié n'a pas pu être effacé." - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid "Blog post draft version discarded" -msgid "Blog post draft version discarded" -msgstr "Le brouillon du billet a été effacé." - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid "Couldn't delete blog post" -msgid "Couldn't delete blog post" -msgstr "Le billet n'a pas pu être effacé." - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid "Blog post was successfully deleted" -msgid "Blog post was successfully deleted" -msgstr "Le billet a été effacé." - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid "Couldn't publish blog post" -msgid "Couldn't publish blog post" -msgstr "Le billet n'a pas pu être publié." - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid "Blog post successfully published." -msgid "Blog post successfully published." -msgstr "Le billet a été publié." - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid "Couldn't unpublish blog post" -msgid "Couldn't unpublish blog post" -msgstr "Le billet n'a pas pu être dépublié." - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostAdminController.cs -#| msgid "Blog post successfully unpublished." -msgid "Blog post successfully unpublished." -msgstr "Le billet a été dépublié." - -#: ~/Modules/Orchard.Blogs/Controllers/BlogPostController.cs -#| msgid "Couldn't view blog post" -msgid "Couldn't view blog post" -msgstr "Le billet ne peut être visualisé." - -#: ~/Modules/Orchard.Blogs/Views/Archives.ascx -#| msgid "Archives" -msgid "Archives" -msgstr "Archives" - -#: ~/Modules/Orchard.Blogs/Views/Archives.ascx -#| msgid "None found" -msgid "None found" -msgstr "Aucune archive" - -#: ~/Modules/Orchard.Blogs/Views/Blog/List.ascx -#| msgid "No blogs found." -msgid "No blogs found." -msgstr "Aucun blog n'a été trouvé" - -#: ~/Modules/Orchard.Blogs/Views/BlogAdmin/Create.ascx -#| msgid "Add Blog" -msgid "Add Blog" -msgstr "Ajouter un blog" - -#: ~/Modules/Orchard.Blogs/Views/BlogAdmin/Create.ascx -#| msgid "Set as home page" -msgid "Set as home page" -msgstr "Utiliser comme page d'accueil" - -#: ~/Modules/Orchard.Blogs/Views/BlogAdmin/Create.ascx -#| msgid "Add" -msgid "Add" -msgstr "Ajouter" - -#: ~/Modules/Orchard.Blogs/Views/BlogAdmin/Create.ascx -#| msgid "Create New Blog" -msgid "Create New Blog" -msgstr "Créer un blog" - -#: ~/Modules/Orchard.Blogs/Views/BlogAdmin/Edit.ascx -#| msgid "Blog Properties" -msgid "Blog Properties" -msgstr "Propriétés du blog" - -#: ~/Modules/Orchard.Blogs/Views/BlogAdmin/Edit.ascx -#| msgid "Edit Blog" -msgid "Edit Blog" -msgstr "Modifier le blog" - -#: ~/Modules/Orchard.Blogs/Views/BlogAdmin/Edit.ascx -#| msgid "Set as home page" -msgid "Set as home page" -msgstr "Utiliser comme page d'accueil" - -#: ~/Modules/Orchard.Blogs/Views/BlogAdmin/Edit.ascx -#| msgid "Save" -msgid "Save" -msgstr "Enregistrer" - -#: ~/Modules/Orchard.Blogs/Views/BlogAdmin/Item.ascx -#| msgid "Manage Blog" -msgid "Manage Blog" -msgstr "Gérer le blog" - -#: ~/Modules/Orchard.Blogs/Views/BlogAdmin/List.ascx -#| msgid "Manage Blogs" -msgid "Manage Blogs" -msgstr "Gérer les blogs" - -#: ~/Modules/Orchard.Blogs/Views/BlogAdmin/List.ascx -#| msgid "Possible text about setting up and managing a blog goes here." -msgid "Possible text about setting up and managing a blog goes here." -msgstr "Possible text about setting up and managing a blog goes here." - -#: ~/Modules/Orchard.Blogs/Views/BlogAdmin/List.ascx -#| msgid "New Blog" -msgid "New Blog" -msgstr "Nouveau blog" - -#: ~/Modules/Orchard.Blogs/Views/BlogAdmin/List.ascx -#| msgid "There are no blogs for you to see. Want to add one?" -msgid "There are no blogs for you to see. Want to add one?" -msgstr "Il n'y a pas encore de blog. Désirez-vous en créer un?" - -#: ~/Modules/Orchard.Blogs/Views/BlogPost/ListByArchive.ascx -#| msgid "Archives" -msgid "Archives" -msgstr "Archives" - -#: ~/Modules/Orchard.Blogs/Views/BlogPostAdmin/Create.ascx -#| msgid "Create New Blog Post" -msgid "Create New Blog Post" -msgstr "Écrire un billet" - -#: ~/Modules/Orchard.Blogs/Views/BlogPostAdmin/Edit.ascx -#| msgid "Edit Blog Post" -msgid "Edit Blog Post" -msgstr "Modifier un billet" - -#: ~/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.Blog.DetailAdmin.ascx -#| msgid "Filter:" -msgid "Filter:" -msgstr "Filtre:" - -#: ~/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.Blog.DetailAdmin.ascx -#| msgid "Apply" -msgid "Apply" -msgstr "Appliquer" - -#: ~/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.Blog.DetailAdmin.ascx -#| msgid "New Post" -msgid "New Post" -msgstr "Nouveau billet" - -#: ~/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.Blog.SummaryAdmin.ascx -#| msgid "View" -msgid "View" -msgstr "Voir" - -#: ~/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.Blog.SummaryAdmin.ascx -#| msgid " | " -msgid " | " -msgstr " | " - -#: ~/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.Blog.SummaryAdmin.ascx -#| msgid "List Posts" -msgid "List Posts" -msgstr "Liste des billets" - -#: ~/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.Blog.SummaryAdmin.ascx -#| msgid "New Post" -msgid "New Post" -msgstr "Nouveau billet" - -#: ~/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.Blog.SummaryAdmin.ascx -#| msgid "Edit" -msgid "Edit" -msgstr "Modifier" - -#: ~/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.Blog.SummaryAdmin.ascx -#| msgid "Remove" -msgid "Remove" -msgstr "Enlever" - -#: ~/Modules/Orchard.Blogs/Views/DisplayTemplates/Parts/Blogs.Blog.Manage.ascx -#| msgid "Blog Properties" -msgid "Blog Properties" -msgstr "Propriétés du blog" - -#: ~/Modules/Orchard.Blogs/Views/DisplayTemplates/Parts/Blogs.BlogPost.List.ascx -#| msgid "There are no posts for this blog." -msgid "There are no posts for this blog." -msgstr "Ce blog n'a pas de billet." - -#: ~/Modules/Orchard.Blogs/Views/DisplayTemplates/Parts/Blogs.BlogPost.List.DetailAdmin.ascx -#| msgid "There are no posts for this blog." -msgid "There are no posts for this blog." -msgstr "Ce blog n'a pas de billet." - -#: ~/Modules/Orchard.Blogs/Views/DisplayTemplates/Parts/Blogs.BlogPost.List.DetailAdmin.ascx -#| msgid "Actions:" -msgid "Actions:" -msgstr "Actions:" - -#: ~/Modules/Orchard.Blogs/Views/DisplayTemplates/Parts/Blogs.BlogPost.List.DetailAdmin.ascx -#| msgid "Choose action..." -msgid "Choose action..." -msgstr "Choisissez une action..." - -#: ~/Modules/Orchard.Blogs/Views/DisplayTemplates/Parts/Blogs.BlogPost.List.DetailAdmin.ascx -#| msgid "Publish Now" -msgid "Publish Now" -msgstr "Publier immédiatement" - -#: ~/Modules/Orchard.Blogs/Views/DisplayTemplates/Parts/Blogs.BlogPost.List.DetailAdmin.ascx -#| msgid "Unpublish" -msgid "Unpublish" -msgstr "Dépublier" - -#: ~/Modules/Orchard.Blogs/Views/DisplayTemplates/Parts/Blogs.BlogPost.List.DetailAdmin.ascx -#| msgid "Remove" -msgid "Remove" -msgstr "Enlever" - -#: ~/Modules/Orchard.Blogs/Views/DisplayTemplates/Parts/Blogs.BlogPost.List.DetailAdmin.ascx -#| msgid "Apply" -msgid "Apply" -msgstr "Appliquer" - -#: ~/Modules/Orchard.Blogs/Views/EditorTemplates/Items/Blogs.Blog.ascx -#| msgid "Add" -msgid "Add" -msgstr "Ajouter" - -#: ~/Modules/Orchard.Blogs/Views/EditorTemplates/Items/Blogs.BlogPost.ascx -#| msgid "Save" -msgid "Save" -msgstr "Enregistrer" - -#: ~/Modules/Orchard.Blogs/Views/EditorTemplates/Items/Blogs.BlogPost.ascx -#| msgid "Discard Draft" -msgid "Discard Draft" -msgstr "Effacer le brouillon" - -#: ~/Modules/Orchard.Comments/AdminMenu.cs -#| msgid "Comments" -msgid "Comments" -msgstr "Commentaires" - -#: ~/Modules/Orchard.Comments/AdminMenu.cs -#| msgid "Manage Comments" -msgid "Manage Comments" -msgstr "Gérer les commentaires" - -#: ~/Modules/Orchard.Comments/Controllers/AdminController.cs -#| msgid "Listing comments failed: " -msgid "Listing comments failed: " -msgstr "L'énumération des commentaires a échoué: " - -#: ~/Modules/Orchard.Comments/Controllers/AdminController.cs -#| msgid "Couldn't moderate comment" -msgid "Couldn't moderate comment" -msgstr "Le commentaire n'a pas pu être modéré." - -#: ~/Modules/Orchard.Comments/Controllers/AdminController.cs -#| msgid "Couldn't delete comment" -msgid "Couldn't delete comment" -msgstr "Le commentaire n'a pas pu être effacé." - -#: ~/Modules/Orchard.Comments/Controllers/AdminController.cs -#| msgid "Editing comments failed: " -msgid "Editing comments failed: " -msgstr "La modification des commentaires a échoué: " - -#: ~/Modules/Orchard.Comments/Controllers/AdminController.cs -#| msgid "Couldn't close comments" -msgid "Couldn't close comments" -msgstr "Les commentaires n'ont pas pu être fermés." - -#: ~/Modules/Orchard.Comments/Controllers/AdminController.cs -#| msgid "Closing Comments failed: " -msgid "Closing Comments failed: " -msgstr "La fermeture des commentaires a échoué: " - -#: ~/Modules/Orchard.Comments/Controllers/AdminController.cs -#| msgid "Couldn't enable comments" -msgid "Couldn't enable comments" -msgstr "Les commentaires n'ont pas pu être activés." - -#: ~/Modules/Orchard.Comments/Controllers/AdminController.cs -#| msgid "Enabling Comments failed: " -msgid "Enabling Comments failed: " -msgstr "L'activation des commentaires a échoué: " - -#: ~/Modules/Orchard.Comments/Controllers/AdminController.cs -#| msgid "Editing comment failed: " -msgid "Editing comment failed: " -msgstr "La modification du commentaire a échoué: " - -#: ~/Modules/Orchard.Comments/Controllers/AdminController.cs -#| msgid "Couldn't edit comment" -msgid "Couldn't edit comment" -msgstr "Le commentaire n'a pas pu être modifié" - -#: ~/Modules/Orchard.Comments/Controllers/AdminController.cs -#| msgid "Editing Comment failed: " -msgid "Editing Comment failed: " -msgstr "La modification du commentaire a échoué: " - -#: ~/Modules/Orchard.Comments/Controllers/AdminController.cs -#| msgid "Deleting comment failed: " -msgid "Deleting comment failed: " -msgstr "L'effacement du commentaire a échoué: " - -#: ~/Modules/Orchard.Comments/Controllers/CommentController.cs -#| msgid "Couldn't add comment" -msgid "Couldn't add comment" -msgstr "Le commentaire n'a pas pu être ajouté." - -#: ~/Modules/Orchard.Comments/Controllers/CommentController.cs -#| msgid "You must provide a Name in order to comment" -msgid "You must provide a Name in order to comment" -msgstr "Merci de donner votre nom afin de pouvoir commenter" - -#: ~/Modules/Orchard.Comments/Controllers/CommentController.cs -#| msgid "Your comment will appear after the site administrator approves it." -msgid "Your comment will appear after the site administrator approves it." -msgstr "Votre commentaire apparaitra sur le site dès que l'administrateur du site l'aura approuvé." - -#: ~/Modules/Orchard.Comments/Controllers/CommentController.cs -#| msgid "Creating Comment failed: " -msgid "Creating Comment failed: " -msgstr "La création du commentaire a échoué: " - -#: ~/Modules/Orchard.Comments/Extensions/HtmlHelperExtensions.cs -#| msgid "({0} pending)" -msgid "({0} pending)" -msgstr "({0} en attente)" - -#: ~/Modules/Orchard.Comments/Feeds/CommentFeedItemBuilder.cs -#| msgid "Comment on {0} by {1}" -msgid "Comment on {0} by {1}" -msgstr "Commentaire de {1} sur {0}" - -#: ~/Modules/Orchard.Comments/Services/CommentValidator.cs -#| msgid "Please configure your Akismet key for spam protection" -msgid "Please configure your Akismet key for spam protection" -msgstr "Veuillez configurer votre clé Akismet pour activer la protection contre le spam." - -#: ~/Modules/Orchard.Comments/Views/Admin/Details.aspx -#| msgid "Comments for {0}" -msgid "Comments for {0}" -msgstr "Commentaires sur {0}" - -#: ~/Modules/Orchard.Comments/Views/Admin/Details.aspx -#| msgid "Enable Comments" -msgid "Enable Comments" -msgstr "Autoriser les commentaires" - -#: ~/Modules/Orchard.Comments/Views/Admin/Details.aspx -#| msgid "Close Comments" -msgid "Close Comments" -msgstr "Fermer les commentaires" - -#: ~/Modules/Orchard.Comments/Views/Admin/Details.aspx -#| msgid "Actions:" -msgid "Actions:" -msgstr "Actions:" - -#: ~/Modules/Orchard.Comments/Views/Admin/Details.aspx -#| msgid "Choose action..." -msgid "Choose action..." -msgstr "Choisissez une action..." - -#: ~/Modules/Orchard.Comments/Views/Admin/Details.aspx -#| msgid "Approve" -msgid "Approve" -msgstr "Approuver" - -#: ~/Modules/Orchard.Comments/Views/Admin/Details.aspx -#| msgid "Pend" -msgid "Pend" -msgstr "Désapprouver" - -#: ~/Modules/Orchard.Comments/Views/Admin/Details.aspx -#| msgid "Mark as Spam" -msgid "Mark as Spam" -msgstr "Marquer comme Spam" - -#: ~/Modules/Orchard.Comments/Views/Admin/Details.aspx -#| msgid "Remove" -msgid "Remove" -msgstr "Enlever" - -#: ~/Modules/Orchard.Comments/Views/Admin/Details.aspx -#| msgid "Apply" -msgid "Apply" -msgstr "Appliquer" - -#: ~/Modules/Orchard.Comments/Views/Admin/Details.aspx -#| msgid "Filter:" -msgid "Filter:" -msgstr "Filtre:" - -#: ~/Modules/Orchard.Comments/Views/Admin/Details.aspx -#| msgid "All Comments" -msgid "All Comments" -msgstr "Tous les commentaires" - -#: ~/Modules/Orchard.Comments/Views/Admin/Details.aspx -#| msgid "Approved Comments" -msgid "Approved Comments" -msgstr "Commentaires approuvés" - -#: ~/Modules/Orchard.Comments/Views/Admin/Details.aspx -#| msgid "Pending Comments" -msgid "Pending Comments" -msgstr "Commentaires en attente de modération" - -#: ~/Modules/Orchard.Comments/Views/Admin/Details.aspx -#| msgid "Spam" -msgid "Spam" -msgstr "Spam" - -#: ~/Modules/Orchard.Comments/Views/Admin/Details.aspx -#| msgid "This is a table of the comments for the content item" -msgid "This is a table of the comments for the content item" -msgstr "Ceci est une liste des commentaires" - -#: ~/Modules/Orchard.Comments/Views/Admin/Details.aspx -#| msgid "Status" -msgid "Status" -msgstr "Statut" - -#: ~/Modules/Orchard.Comments/Views/Admin/Details.aspx -#| msgid "Author" -msgid "Author" -msgstr "Auteur" - -#: ~/Modules/Orchard.Comments/Views/Admin/Details.aspx -#| msgid "Comment" -msgid "Comment" -msgstr "Commentaire" - -#: ~/Modules/Orchard.Comments/Views/Admin/Details.aspx -#| msgid "Date" -msgid "Date" -msgstr "Date" - -#: ~/Modules/Orchard.Comments/Views/Admin/Details.aspx -#| msgid "Pending" -msgid "Pending" -msgstr "En attente de modération" - -#: ~/Modules/Orchard.Comments/Views/Admin/Details.aspx -#| msgid "Approved" -msgid "Approved" -msgstr "Approuvé" - -#: ~/Modules/Orchard.Comments/Views/Admin/Details.aspx -#| msgid " ..." -msgid " ..." -msgstr " ..." - -#: ~/Modules/Orchard.Comments/Views/Admin/Details.aspx -#| msgid "Edit Comment" -msgid "Edit Comment" -msgstr "Modifier le commentaire" - -#: ~/Modules/Orchard.Comments/Views/Admin/Details.aspx -#| msgid "Remove Comment" -msgid "Remove Comment" -msgstr "Enlever le commentaire" - -#: ~/Modules/Orchard.Comments/Views/Admin/Edit.aspx -#| msgid "Edit Comment" -msgid "Edit Comment" -msgstr "Modifier le commentaire" - -#: ~/Modules/Orchard.Comments/Views/Admin/Edit.aspx -#| msgid "Name" -msgid "Name" -msgstr "Nom" - -#: ~/Modules/Orchard.Comments/Views/Admin/Edit.aspx -#| msgid "Email" -msgid "Email" -msgstr "Email" - -#: ~/Modules/Orchard.Comments/Views/Admin/Edit.aspx -#| msgid "Url" -msgid "Url" -msgstr "Url" - -#: ~/Modules/Orchard.Comments/Views/Admin/Edit.aspx -#| msgid "Body" -msgid "Body" -msgstr "Ventre" - -#: ~/Modules/Orchard.Comments/Views/Admin/Edit.aspx -#| msgid "Pending" -msgid "Pending" -msgstr "En attente de modération" - -#: ~/Modules/Orchard.Comments/Views/Admin/Edit.aspx -#| msgid "Approved" -msgid "Approved" -msgstr "Approuvé" - -#: ~/Modules/Orchard.Comments/Views/Admin/Edit.aspx -#| msgid "Mark as spam" -msgid "Mark as spam" -msgstr "Marquer comme Spam" - -#: ~/Modules/Orchard.Comments/Views/Admin/Edit.aspx -#| msgid "Save" -msgid "Save" -msgstr "Enregistrer" - -#: ~/Modules/Orchard.Comments/Views/Admin/Index.aspx -#| msgid "Manage Comments" -msgid "Manage Comments" -msgstr "Gérer les commentaires" - -#: ~/Modules/Orchard.Comments/Views/Admin/Index.aspx -#| msgid "Actions:" -msgid "Actions:" -msgstr "Actions:" - -#: ~/Modules/Orchard.Comments/Views/Admin/Index.aspx -#| msgid "Choose action..." -msgid "Choose action..." -msgstr "Choisissez une action..." - -#: ~/Modules/Orchard.Comments/Views/Admin/Index.aspx -#| msgid "Approve" -msgid "Approve" -msgstr "Approuver" - -#: ~/Modules/Orchard.Comments/Views/Admin/Index.aspx -#| msgid "Pend" -msgid "Pend" -msgstr "Désapprouver" - -#: ~/Modules/Orchard.Comments/Views/Admin/Index.aspx -#| msgid "Mark as Spam" -msgid "Mark as Spam" -msgstr "Marquer comme Spam" - -#: ~/Modules/Orchard.Comments/Views/Admin/Index.aspx -#| msgid "Remove" -msgid "Remove" -msgstr "Enlever" - -#: ~/Modules/Orchard.Comments/Views/Admin/Index.aspx -#| msgid "Apply" -msgid "Apply" -msgstr "Appliquer" - -#: ~/Modules/Orchard.Comments/Views/Admin/Index.aspx -#| msgid "Filter:" -msgid "Filter:" -msgstr "Filtre" - -#: ~/Modules/Orchard.Comments/Views/Admin/Index.aspx -#| msgid "All Comments" -msgid "All Comments" -msgstr "Tous les commentaires" - -#: ~/Modules/Orchard.Comments/Views/Admin/Index.aspx -#| msgid "Approved Comments" -msgid "Approved Comments" -msgstr "Commentaires approuvés" - -#: ~/Modules/Orchard.Comments/Views/Admin/Index.aspx -#| msgid "Pending Comments" -msgid "Pending Comments" -msgstr "Commentaires en attente de modération" - -#: ~/Modules/Orchard.Comments/Views/Admin/Index.aspx -#| msgid "Spam" -msgid "Spam" -msgstr "Spam" - -#: ~/Modules/Orchard.Comments/Views/Admin/Index.aspx -#| msgid "This is a table of the comments in your application" -msgid "This is a table of the comments in your application" -msgstr "Ceci est une liste des commentaires" - -#: ~/Modules/Orchard.Comments/Views/Admin/Index.aspx -#| msgid "Status" -msgid "Status" -msgstr "Statut" - -#: ~/Modules/Orchard.Comments/Views/Admin/Index.aspx -#| msgid "Author" -msgid "Author" -msgstr "Auteur" - -#: ~/Modules/Orchard.Comments/Views/Admin/Index.aspx -#| msgid "Comment" -msgid "Comment" -msgstr "Commentaire" - -#: ~/Modules/Orchard.Comments/Views/Admin/Index.aspx -#| msgid "Date" -msgid "Date" -msgstr "Date" - -#: ~/Modules/Orchard.Comments/Views/Admin/Index.aspx -#| msgid "Commented On" -msgid "Commented On" -msgstr "Commenté le" - -#: ~/Modules/Orchard.Comments/Views/Admin/Index.aspx -#| msgid "Pending" -msgid "Pending" -msgstr "En attente de modération" - -#: ~/Modules/Orchard.Comments/Views/Admin/Index.aspx -#| msgid "Approved" -msgid "Approved" -msgstr "Approuvé" - -#: ~/Modules/Orchard.Comments/Views/Admin/Index.aspx -#| msgid " ..." -msgid " ..." -msgstr " ..." - -#: ~/Modules/Orchard.Comments/Views/Admin/Index.aspx -#| msgid "Edit" -msgid "Edit" -msgstr "Modifier" - -#: ~/Modules/Orchard.Comments/Views/Admin/Index.aspx -#| msgid "Remove Comment" -msgid "Remove Comment" -msgstr "Enlever le commentaire" - -#: ~/Modules/Orchard.Comments/Views/DisplayTemplates/Parts/Comments.Comments.ascx -#| msgid "Comments have been disabled for this content." -msgid "Comments have been disabled for this content." -msgstr "Les commentaires ont été désactivés pour ce contenu." - -#: ~/Modules/Orchard.Comments/Views/DisplayTemplates/Parts/Comments.Comments.ascx -#| msgid "Add a Comment" -msgid "Add a Comment" -msgstr "Ajouter un commentaire" - -#: ~/Modules/Orchard.Comments/Views/DisplayTemplates/Parts/Comments.Comments.ascx -#| msgid "log on" -msgid "log on" -msgstr "S'authentifier" - -#: ~/Modules/Orchard.Comments/Views/DisplayTemplates/Parts/Comments.Comments.ascx -#| msgid "Name" -msgid "Name" -msgstr "Nom" - -#: ~/Modules/Orchard.Comments/Views/DisplayTemplates/Parts/Comments.Comments.ascx -#| msgid "Email" -msgid "Email" -msgstr "Email" - -#: ~/Modules/Orchard.Comments/Views/DisplayTemplates/Parts/Comments.Comments.ascx -#| msgid "Url" -msgid "Url" -msgstr "Url" - -#: ~/Modules/Orchard.Comments/Views/DisplayTemplates/Parts/Comments.Comments.ascx -#| msgid "Hi, {0}!" -msgid "Hi, {0}!" -msgstr "Bonjour {0}!" - -#: ~/Modules/Orchard.Comments/Views/DisplayTemplates/Parts/Comments.Comments.ascx -#| msgid "Comment" -msgid "Comment" -msgstr "Commentaire" - -#: ~/Modules/Orchard.Comments/Views/DisplayTemplates/Parts/Comments.Comments.ascx -#| msgid "Submit Comment" -msgid "Submit Comment" -msgstr "Envoyer le commentaire" - -#: ~/Modules/Orchard.Comments/Views/DisplayTemplates/Parts/Comments.Comments.ascx -#| msgid "Comments" -msgid "Comments" -msgstr "Commentaires" - -#: ~/Modules/Orchard.Comments/Views/DisplayTemplates/Parts/Comments.Comments.ascx -#| msgid "Comments are shown. Existing comments are displayed." -msgid "Comments are shown. Existing comments are displayed." -msgstr "Les commentaires sont visibles. Les commentaires existants sont affichés." - -#: ~/Modules/Orchard.Comments/Views/DisplayTemplates/Parts/Comments.Comments.ascx -#| msgid "Allow new comments" -msgid "Allow new comments" -msgstr "Permettre les nouveaux commentaires" - -#: ~/Modules/Orchard.Comments/Views/DisplayTemplates/Parts/Comments.Comments.ascx -#| msgid "Enable to show the comment form. Disabling still allows the existing comments to be shown but does not allow the conversation to continue." -msgid "Enable to show the comment form. Disabling still allows the existing comments to be shown but does not allow the conversation to continue." -msgstr "Permettre l'affichage du formulaire de commentaire. Désactiver ceci permet aux commentaires existants d'être affichés mais ne permet pas à la conversation de se prolonger." - -#: ~/Modules/Orchard.Comments/Views/EditorTemplates/Parts/Comments.Comments.ascx -#| msgid "Comments" -msgid "Comments" -msgstr "Commentaires" - -#: ~/Modules/Orchard.Comments/Views/EditorTemplates/Parts/Comments.Comments.ascx -#| msgid "Comments are shown. Existing comments are displayed." -msgid "Comments are shown. Existing comments are displayed." -msgstr "Les commentaires existants sont affichés." - -#: ~/Modules/Orchard.Comments/Views/EditorTemplates/Parts/Comments.Comments.ascx -#| msgid "Allow new comments" -msgid "Allow new comments" -msgstr "Autoriser les nouveaux commentaires" - -#: ~/Modules/Orchard.Comments/Views/EditorTemplates/Parts/Comments.Comments.ascx -#| msgid "Enable to show the comment form. Disabling still allows the existing comments to be shown but does not allow the conversation to continue." -msgid "Enable to show the comment form. Disabling still allows the existing comments to be shown but does not allow the conversation to continue." -msgstr "Afficher le formulaire d'entrée des commentaires. Désactiver ne supprime pas l'affichage des commentaires existants mais empêche la poursuite de la conversation." - -#: ~/Modules/Orchard.Comments/Views/EditorTemplates/Parts/Comments.SiteSettings.ascx -#| msgid "Comments" -msgid "Comments" -msgstr "Commentaires" - -#: ~/Modules/Orchard.Comments/Views/EditorTemplates/Parts/Comments.SiteSettings.ascx -#| msgid "Comments must be approved before they appear" -msgid "Comments must be approved before they appear" -msgstr "Les commentaires doivent être approuvés afin d'apparaître" - -#: ~/Modules/Orchard.Comments/Views/EditorTemplates/Parts/Comments.SiteSettings.ascx -#| msgid "Enable spam protection" -msgid "Enable spam protection" -msgstr "Activer la protection contre le Spam" - -#: ~/Modules/Orchard.Comments/Views/EditorTemplates/Parts/Comments.SiteSettings.ascx -#| msgid "Akismet key" -msgid "Akismet key" -msgstr "Clé Akismet" - -#: ~/Modules/Orchard.Comments/Views/EditorTemplates/Parts/Comments.SiteSettings.ascx -#| msgid "Akismet endpoint URL" -msgid "Akismet endpoint URL" -msgstr "URL du service Akismet" - -#: ~/Modules/Orchard.Comments/Views/EditorTemplates/Parts/Comments.SiteSettings.ascx -#| msgid "Blog URL" -msgid "Blog URL" -msgstr "URL du blog" - -#: ~/Modules/Orchard.ContentTypes/AdminMenu.cs -#| msgid "Content" -msgid "Content" -msgstr "Contenu" - -#: ~/Modules/Orchard.ContentTypes/AdminMenu.cs -#| msgid "Manage Content Types" -msgid "Manage Content Types" -msgstr "Gérer les types de contenu" - -#: ~/Modules/Orchard.ContentTypes/Controllers/AdminController.cs -#| msgid "Not allowed to create a content type." -msgid "Not allowed to create a content type." -msgstr "Non autorisé à créer un type de contenu." - -#: ~/Modules/Orchard.ContentTypes/Controllers/AdminController.cs -#| msgid "The Content Type name can't be empty." -msgid "The Content Type name can't be empty." -msgstr "Le nom du type de contenu ne peut pas être vide." - -#: ~/Modules/Orchard.ContentTypes/Controllers/AdminController.cs -#| msgid "A type with the same name already exists." -msgid "A type with the same name already exists." -msgstr "Un type du même nom existe déjà." - -#: ~/Modules/Orchard.ContentTypes/Controllers/AdminController.cs -#| msgid "The \"{0}\" content type has been created." -msgid "The \"{0}\" content type has been created." -msgstr "Le type de contenu \"{0}\" a été créé." - -#: ~/Modules/Orchard.ContentTypes/Controllers/AdminController.cs -#| msgid "Not allowed to edit a content type." -msgid "Not allowed to edit a content type." -msgstr "Non autorisé à créer un type de contenu." - -#: ~/Modules/Orchard.ContentTypes/Controllers/AdminController.cs -#| msgid "\"{0}\" settings have been saved." -msgid "\"{0}\" settings have been saved." -msgstr "La configuration de \"{0}\" a été enregistrée." - -#: ~/Modules/Orchard.ContentTypes/Controllers/AdminController.cs -#| msgid "The \"{0}\" part has been added." -msgid "The \"{0}\" part has been added." -msgstr "La pièce \"{0}\" a été ajoutée." - -#: ~/Modules/Orchard.ContentTypes/Controllers/AdminController.cs -#| msgid "The \"{0}\" part has been removed." -msgid "The \"{0}\" part has been removed." -msgstr "La pièce \"{0}\" a été enlevée." - -#: ~/Modules/Orchard.ContentTypes/Controllers/AdminController.cs -#| msgid "Not allowed to create a content part." -msgid "Not allowed to create a content part." -msgstr "Non autorisé à créer une pièce de contenu." - -#: ~/Modules/Orchard.ContentTypes/Controllers/AdminController.cs -#| msgid "The \"{0}\" content part has been created." -msgid "The \"{0}\" content part has been created." -msgstr "La pièce de contenu \"{0}\" a été créée." - -#: ~/Modules/Orchard.ContentTypes/Controllers/AdminController.cs -#| msgid "Not allowed to edit a content part." -msgid "Not allowed to edit a content part." -msgstr "Non autorisé à modifier une pièce de contenu." - -#: ~/Modules/Orchard.ContentTypes/Controllers/AdminController.cs -#| msgid "The \"{0}\" field has been added." -msgid "The \"{0}\" field has been added." -msgstr "Le champ \"{0}\" a été ajouté." - -#: ~/Modules/Orchard.ContentTypes/Controllers/AdminController.cs -#| msgid "The \"{0}\" field has been removed." -msgid "The \"{0}\" field has been removed." -msgstr "Le champ \"{0}\" a été enlevé." - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/AddFieldTo.ascx -#| msgid "Add New Field To \"{0}\"" -msgid "Add New Field To \"{0}\"" -msgstr "Ajouter un nouveau champ à '{0}'" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/AddFieldTo.ascx -#| msgid "Display Name" -msgid "Display Name" -msgstr "Nom pour affichage" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/AddFieldTo.ascx -#| msgid "Field Type" -msgid "Field Type" -msgstr "Type de champ" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/AddFieldTo.ascx -#| msgid "Save" -msgid "Save" -msgstr "Enregistrer" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/AddPartsTo.ascx -#| msgid "Add parts to \"{0}\"" -msgid "Add parts to \"{0}\"" -msgstr "Ajouter des pièces à '{0}'" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/AddPartsTo.ascx -#| msgid "Save" -msgid "Save" -msgstr "Enregistrer" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/Create.ascx -#| msgid "New Content Type" -msgid "New Content Type" -msgstr "Nouveau type de contenu" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/Create.ascx -#| msgid "Display Name" -msgid "Display Name" -msgstr "Nom pour affichage" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/Create.ascx -#| msgid "Create" -msgid "Create" -msgstr "Créer" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/CreatePart.ascx -#| msgid "New Content Part" -msgid "New Content Part" -msgstr "Nouvelle pièce de contenu" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/CreatePart.ascx -#| msgid "Name" -msgid "Name" -msgstr "Nom" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/CreatePart.ascx -#| msgid "Create" -msgid "Create" -msgstr "Créer" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/Edit.ascx -#| msgid "Edit Content Type" -msgid "Edit Content Type" -msgstr "Modifier le type de contenu" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/Edit.ascx -#| msgid "Content Types" -msgid "Content Types" -msgstr "Types de contenu" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/Edit.ascx -#| msgid " > " -msgid " > " -msgstr " > " - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/Edit.ascx -#| msgid "Display Name" -msgid "Display Name" -msgstr "Nom pour affichage" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/Edit.ascx -#| msgid "Fields" -msgid "Fields" -msgstr "Champs" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/Edit.ascx -#| msgid "Add" -msgid "Add" -msgstr "Ajouter" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/Edit.ascx -#| msgid "Parts" -msgid "Parts" -msgstr "Pièces" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/Edit.ascx -#| msgid "Save" -msgid "Save" -msgstr "Enregistrer" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/EditPart.ascx -#| msgid "Edit Part" -msgid "Edit Part" -msgstr "Modifier la pièce" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/EditPart.ascx -#| msgid "Content Types" -msgid "Content Types" -msgstr "Types de contenu" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/EditPart.ascx -#| msgid " > " -msgid " > " -msgstr " > " - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/EditPart.ascx -#| msgid "Content Parts" -msgid "Content Parts" -msgstr "Pièces de contenu" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/EditPart.ascx -#| msgid "Name" -msgid "Name" -msgstr "Nom" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/EditPart.ascx -#| msgid "Fields" -msgid "Fields" -msgstr "Champs" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/EditPart.ascx -#| msgid "Add" -msgid "Add" -msgstr "Ajouter" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/EditPart.ascx -#| msgid "Save" -msgid "Save" -msgstr "Enregistrer" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/List.ascx -#| msgid "Manage Content Types" -msgid "Manage Content Types" -msgstr "Gérer les types de contenu" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/List.ascx -#| msgid "Create new type" -msgid "Create new type" -msgstr "Créer un nouveau type" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/List.ascx -#| msgid "Content Parts" -msgid "Content Parts" -msgstr "Pièces de contenu" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/ListParts.ascx -#| msgid "Content Parts" -msgid "Content Parts" -msgstr "Pièces de contenu" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/ListParts.ascx -#| msgid "Content Types" -msgid "Content Types" -msgstr "Types de contenu" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/ListParts.ascx -#| msgid " > " -msgid " > " -msgstr " > " - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/ListParts.ascx -#| msgid "Create new part" -msgid "Create new part" -msgstr "Créer une nouvelle pièce" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/RemoveFieldFrom.ascx -#| msgid "Remove the \"{0}\" part from \"{1}\"" -msgid "Remove the \"{0}\" part from \"{1}\"" -msgstr "Enlever la pièce '{0}' de '{1}'" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/RemoveFieldFrom.ascx -#| msgid "Looks like you couldn't use the fancy way to remove the field. Try hitting the button below to force the issue." -msgid "Looks like you couldn't use the fancy way to remove the field. Try hitting the button below to force the issue." -msgstr "Il semblerait qu'il ait été impossible d'enlever le champ de façon évoluée. Veuillez essayer de cliquer sur le bouton ci-dessous pour forcer l'opération." - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/RemoveFieldFrom.ascx -#| msgid "Remove" -msgid "Remove" -msgstr "Enlever" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/RemovePartFrom.ascx -#| msgid "Remove the \"{0}\" part from \"{1}\"" -msgid "Remove the \"{0}\" part from \"{1}\"" -msgstr "Enlever la pièce '{0}' de '{1}'" - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/RemovePartFrom.ascx -#| msgid "Looks like you couldn't use the fancy way to remove the part. Try hitting the button below to force the issue." -msgid "Looks like you couldn't use the fancy way to remove the part. Try hitting the button below to force the issue." -msgstr "Il semblerait qu'il ait été impossible d'enlever la pièce de façon évoluée. Veuillez essayer de cliquer sur le bouton ci-dessous pour forcer l'opération." - -#: ~/Modules/Orchard.ContentTypes/Views/Admin/RemovePartFrom.ascx -#| msgid "Remove" -msgid "Remove" -msgstr "Enlever" - -#: ~/Modules/Orchard.ContentTypes/Views/DisplayTemplates/EditPartViewModel.ascx -#| msgid "Edit" -msgid "Edit" -msgstr "Modifier" - -#: ~/Modules/Orchard.ContentTypes/Views/DisplayTemplates/EditTypeViewModel.ascx -#| msgid "Create New {0}" -msgid "Create New {0}" -msgstr "Créer {0}" - -#: ~/Modules/Orchard.ContentTypes/Views/DisplayTemplates/EditTypeViewModel.ascx -#| msgid "List Items" -msgid "List Items" -msgstr "Enumérer les contenus" - -#: ~/Modules/Orchard.ContentTypes/Views/DisplayTemplates/EditTypeViewModel.ascx -#| msgid " | " -msgid " | " -msgstr " | " - -#: ~/Modules/Orchard.ContentTypes/Views/DisplayTemplates/EditTypeViewModel.ascx -#| msgid "Edit" -msgid "Edit" -msgstr "Modifier" - -#: ~/Modules/Orchard.ContentTypes/Views/DisplayTemplates/Settings.ascx -#| msgid "Global Settings" -msgid "Global Settings" -msgstr "Paramètres globaux" - -#: ~/Modules/Orchard.ContentTypes/Views/EditorTemplates/ContentTypePart.ascx -#| msgid "Remove" -msgid "Remove" -msgstr "Enlever" - -#: ~/Modules/Orchard.ContentTypes/Views/EditorTemplates/Field.ascx -#| msgid "Remove" -msgid "Remove" -msgstr "Enlever" - -#: ~/Modules/Orchard.ContentTypes/Views/EditorTemplates/TypePart.ascx -#| msgid "Remove" -msgid "Remove" -msgstr "Enlever" - -#: ~/Modules/Orchard.ContentTypes/Views/EditorTemplates/TypePart.ascx -#| msgid "{0} Settings:" -msgid "{0} Settings:" -msgstr "Configuration {0}:" - -#: ~/Modules/Orchard.DevTools/AdminMenu.cs -#| msgid "Site Configuration" -msgid "Site Configuration" -msgstr "Configuration du site" - -#: ~/Modules/Orchard.DevTools/AdminMenu.cs -#| msgid "Developer Tools" -msgid "Developer Tools" -msgstr "Outils de développement" - -#: ~/Modules/Orchard.DevTools/Commands/ScaffoldingCommands.cs -#| msgid "Creating Data Migration for {0}" -msgid "Creating Data Migration for {0}" -msgstr "Création de la migration de données pour {0} en cours" - -#: ~/Modules/Orchard.DevTools/Commands/ScaffoldingCommands.cs -#| msgid "Data migration already exists in target Module {0}." -msgid "Data migration already exists in target Module {0}." -msgstr "La migration de données existe déjà dans le module {0}." - -#: ~/Modules/Orchard.DevTools/Commands/ScaffoldingCommands.cs -#| msgid "Data migration created successfully in Module {0}" -msgid "Data migration created successfully in Module {0}" -msgstr "Migration de données créée avec succès dans le module {0}" - -#: ~/Modules/Orchard.DevTools/Commands/ScaffoldingCommands.cs -#| msgid "Creating data migration failed: target Feature {0} could not be found." -msgid "Creating data migration failed: target Feature {0} could not be found." -msgstr "La création de la migration de données a échoué: la fonctionnalité {0} n'a pas pu être trouvée." - -#: ~/Modules/Orchard.DevTools/Commands/ScaffoldingCommands.cs -#| msgid "Creating Module {0}" -msgid "Creating Module {0}" -msgstr "Création du module {0}" - -#: ~/Modules/Orchard.DevTools/Commands/ScaffoldingCommands.cs -#| msgid "Creating Module {0} failed: a module of the same name already exists" -msgid "Creating Module {0} failed: a module of the same name already exists" -msgstr "La création du module {0} a échoué: un module du même nom existe déjà." - -#: ~/Modules/Orchard.DevTools/Commands/ScaffoldingCommands.cs -#| msgid "Module {0} created successfully" -msgid "Module {0} created successfully" -msgstr "Module {0} créé avec succès" - -#: ~/Modules/Orchard.DevTools/Commands/ScaffoldingCommands.cs -#| msgid "Creating Controller {0} in Module {1}" -msgid "Creating Controller {0} in Module {1}" -msgstr "Création du contrôleur {0} dans le module {1}" - -#: ~/Modules/Orchard.DevTools/Commands/ScaffoldingCommands.cs -#| msgid "Controller {0} already exists in target Module {1}." -msgid "Controller {0} already exists in target Module {1}." -msgstr "Le contrôleur {0} existe déjà dans le module {1}." - -#: ~/Modules/Orchard.DevTools/Commands/ScaffoldingCommands.cs -#| msgid "Controller {0} created successfully in Module {1}" -msgid "Controller {0} created successfully in Module {1}" -msgstr "Contrôleur {0} créé avec succès dans le module {1}" - -#: ~/Modules/Orchard.DevTools/Commands/ScaffoldingCommands.cs -#| msgid "Creating Controller {0} failed: target Module {1} could not be found." -msgid "Creating Controller {0} failed: target Module {1} could not be found." -msgstr "La création du contrôleur {0} a échoué: le module {1} n'a pas pu être trouvé." - -#: ~/Modules/Orchard.DevTools/Commands/ScaffoldingCommands.cs -#| msgid "Warning: Solution file could not be found at {0}" -msgid "Warning: Solution file could not be found at {0}" -msgstr "Avertissement: le fichier de solution n'a pas pu être trouvé dans {0}" - -#: ~/Modules/Orchard.DevTools/Controllers/DatabaseUpdateController.cs -#| msgid "Database updated successfuly" -msgid "Database updated successfuly" -msgstr "Base de données mise à jour avec succès" - -#: ~/Modules/Orchard.DevTools/Controllers/DatabaseUpdateController.cs -#| msgid "An error occured while updating the database: {0}" -msgid "An error occured while updating the database: {0}" -msgstr "Une erreur s'est produite pendant la mise à jour de la base de données: {0}" - -#: ~/Modules/Orchard.DevTools/Controllers/HomeController.cs -#| msgid "Simulated error goes here." -msgid "Simulated error goes here." -msgstr "Simulated error goes here." - -#: ~/Modules/Orchard.DevTools/Controllers/HomeController.cs -#| msgid "Notifier works without BaseViewModel" -msgid "Notifier works without BaseViewModel" -msgstr "Notifier fonctionne sans BaseViewModel" - -#: ~/Modules/Orchard.DevTools/Views/Commands/Execute.ascx -#| msgid "Command line" -msgid "Command line" -msgstr "Ligne de commande" - -#: ~/Modules/Orchard.DevTools/Views/Content/Details.aspx -#| msgid "{0} Content Type" -msgid "{0} Content Type" -msgstr "{0} type de contenu" - -#: ~/Modules/Orchard.DevTools/Views/Content/Details.aspx -#| msgid "Content" -msgid "Content" -msgstr "Contenu" - -#: ~/Modules/Orchard.DevTools/Views/Content/Details.aspx -#| msgid "Content Item" -msgid "Content Item" -msgstr "Contenu" - -#: ~/Modules/Orchard.DevTools/Views/Content/Details.aspx -#| msgid "Id:" -msgid "Id:" -msgstr "Id:" - -#: ~/Modules/Orchard.DevTools/Views/Content/Details.aspx -#| msgid "Version:" -msgid "Version:" -msgstr "Version:" - -#: ~/Modules/Orchard.DevTools/Views/Content/Details.aspx -#| msgid "ContentType:" -msgid "ContentType:" -msgstr "ContentType:" - -#: ~/Modules/Orchard.DevTools/Views/Content/Details.aspx -#| msgid "DisplayText:" -msgid "DisplayText:" -msgstr "DisplayText:" - -#: ~/Modules/Orchard.DevTools/Views/Content/Details.aspx -#| msgid "Links:" -msgid "Links:" -msgstr "Links:" - -#: ~/Modules/Orchard.DevTools/Views/Content/Details.aspx -#| msgid "view" -msgid "view" -msgstr "voir" - -#: ~/Modules/Orchard.DevTools/Views/Content/Details.aspx -#| msgid "edit" -msgid "edit" -msgstr "modifier" - -#: ~/Modules/Orchard.DevTools/Views/Content/Details.aspx -#| msgid "Content Item Parts" -msgid "Content Item Parts" -msgstr "Pièces de contenu" - -#: ~/Modules/Orchard.DevTools/Views/Content/Details.aspx -#| msgid "{0} #{1} v{2}" -msgid "{0} #{1} v{2}" -msgstr "{0} #{1} v{2}" - -#: ~/Modules/Orchard.DevTools/Views/Content/Index.aspx -#| msgid "Content" -msgid "Content" -msgstr "Contenu" - -#: ~/Modules/Orchard.DevTools/Views/Content/Index.aspx -#| msgid "Content Types" -msgid "Content Types" -msgstr "Types de contenu" - -#: ~/Modules/Orchard.DevTools/Views/Content/Index.aspx -#| msgid "Content Items" -msgid "Content Items" -msgstr "Contenus" - -#: ~/Modules/Orchard.DevTools/Views/Content/Index.aspx -#| msgid "{0}: {1}" -msgid "{0}: {1}" -msgstr "{0}: {1}" - -#: ~/Modules/Orchard.DevTools/Views/Content/Index.aspx -#| msgid "view" -msgid "view" -msgstr "voir" - -#: ~/Modules/Orchard.DevTools/Views/Content/Index.aspx -#| msgid "edit" -msgid "edit" -msgstr "modifier" - -#: ~/Modules/Orchard.DevTools/Views/DatabaseUpdate/Index.aspx -#| msgid "Data Migration" -msgid "Data Migration" -msgstr "Migration de données" - -#: ~/Modules/Orchard.DevTools/Views/DatabaseUpdate/Index.aspx -#| msgid "Update Database" -msgid "Update Database" -msgstr "Mise à jour de la base de données" - -#: ~/Modules/Orchard.DevTools/Views/DefinitionTemplates/DevToolsSettings.ascx -#| msgid "Show debug links" -msgid "Show debug links" -msgstr "Montrer les liens de déboguage" - -#: ~/Modules/Orchard.DevTools/Views/DisplayTemplates/Parts/DevTools.ShowDebugLink.ascx -#| msgid "{0} #{1} v{2}" -msgid "{0} #{1} v{2}" -msgstr "{0} #{1} v{2}" - -#: ~/Modules/Orchard.DevTools/Views/EditorTemplates/Parts/DevTools.ShowDebugLink.ascx -#| msgid "{0} #{1} v{2}" -msgid "{0} #{1} v{2}" -msgstr "{0} #{1} v{2}" - -#: ~/Modules/Orchard.DevTools/Views/Home/Index.aspx -#| msgid "Dev Tools" -msgid "Dev Tools" -msgstr "Outils de développement" - -#: ~/Modules/Orchard.DevTools/Views/Home/Index.aspx -#| msgid "Contents" -msgid "Contents" -msgstr "Contenus" - -#: ~/Modules/Orchard.DevTools/Views/Home/Index.aspx -#| msgid "Metadata" -msgid "Metadata" -msgstr "Meta-données" - -#: ~/Modules/Orchard.DevTools/Views/Home/Index.aspx -#| msgid "Test Unauthorized Request" -msgid "Test Unauthorized Request" -msgstr "Test de requête non autorisée" - -#: ~/Modules/Orchard.DevTools/Views/Home/Index.aspx -#| msgid "Database Update" -msgid "Database Update" -msgstr "Mise à jour de la base de données" - -#: ~/Modules/Orchard.DevTools/Views/Metadata/Index.aspx -#| msgid "Merge Changes" -msgid "Merge Changes" -msgstr "Fusionner les changements" - -#: ~/Modules/Orchard.Indexing/AdminMenu.cs -#| msgid "Site Configuration" -msgid "Site Configuration" -msgstr "Configuration du site" - -#: ~/Modules/Orchard.Indexing/AdminMenu.cs -#| msgid "Search Index" -msgid "Search Index" -msgstr "Index de recherche" - -#: ~/Modules/Orchard.Indexing/Controllers/AdminController.cs -#| msgid "There is no search index to manage for this site." -msgid "There is no search index to manage for this site." -msgstr "Il n'y a aucun index de recherche à gérer pour ce site." - -#: ~/Modules/Orchard.Indexing/Controllers/AdminController.cs -#| msgid "Not allowed to manage the search index." -msgid "Not allowed to manage the search index." -msgstr "Non autorisé à gérer l'index de recherche." - -#: ~/Modules/Orchard.Indexing/Services/IndexService.cs -#| msgid "There is no search index to rebuild." -msgid "There is no search index to rebuild." -msgstr "Il n'y a aucun index de recherche à reconstruire." - -#: ~/Modules/Orchard.Indexing/Services/IndexService.cs -#| msgid "The search index has been rebuilt." -msgid "The search index has been rebuilt." -msgstr "L'index de recherche a été reconstruit." - -#: ~/Modules/Orchard.Indexing/Services/IndexService.cs -#| msgid "The search index has been updated." -msgid "The search index has been updated." -msgstr "L'index de recherche a été mis à jour." - -#: ~/Modules/Orchard.Indexing/Services/IndexServiceNotificationProvider.cs -#| msgid "You need to enable an index implementation module like Lucene." -msgid "You need to enable an index implementation module like Lucene." -msgstr "Vous devez activer un module implémentant un index de recherche, comme par exemple Lucene." - -#: ~/Modules/Orchard.Indexing/Views/Admin/Index.ascx -#| msgid "Search Index Management" -msgid "Search Index Management" -msgstr "Gestion de l'index de recherche" - -#: ~/Modules/Orchard.Indexing/Views/Admin/Index.ascx -#| msgid "There is currently no search index" -msgid "There is currently no search index" -msgstr "Il n'y actuellement pas d'index de recherche." - -#: ~/Modules/Orchard.Indexing/Views/Admin/Index.ascx -#| msgid "The search index has not been built yet." -msgid "The search index has not been built yet." -msgstr "L'index de recherche n'a pas encore été construit" - -#: ~/Modules/Orchard.Indexing/Views/Admin/Index.ascx -#| msgid "The search index does not contain any document." -msgid "The search index does not contain any document." -msgstr "L'index de recherche ne contient aucun document." - -#: ~/Modules/Orchard.Indexing/Views/Admin/Index.ascx -#| msgid "The search index contains {0} document(s)." -msgid "The search index contains {0} document(s)." -msgstr "L'index de recherche contient {0} document(s)." - -#: ~/Modules/Orchard.Indexing/Views/Admin/Index.ascx -#| msgid "The search index contains the following fields: {0}." -msgid "The search index contains the following fields: {0}." -msgstr "L'index de recherche contient les champs suivants: {0}." - -#: ~/Modules/Orchard.Indexing/Views/Admin/Index.ascx -#| msgid "The search index does not contain any field." -msgid "The search index does not contain any field." -msgstr "L'index de recherche ne contient aucun champ." - -#: ~/Modules/Orchard.Indexing/Views/Admin/Index.ascx -#| msgid ", " -msgid ", " -msgstr ", " - -#: ~/Modules/Orchard.Indexing/Views/Admin/Index.ascx -#| msgid "The search index was last updated {0}." -msgid "The search index was last updated {0}." -msgstr "L'index de recherche a été mis à jour {0}." - -#: ~/Modules/Orchard.Indexing/Views/Admin/Index.ascx -#| msgid "Update the search index now: " -msgid "Update the search index now: " -msgstr "Mettre à jour l'index de recherche maintenant: " - -#: ~/Modules/Orchard.Indexing/Views/Admin/Index.ascx -#| msgid "Update the search index." -msgid "Update the search index." -msgstr "Mettre à jour l'index de recherche." - -#: ~/Modules/Orchard.Indexing/Views/Admin/Index.ascx -#| msgid "Update" -msgid "Update" -msgstr "Mettre à jour" - -#: ~/Modules/Orchard.Indexing/Views/Admin/Index.ascx -#| msgid "Rebuild the search index for a fresh start." -msgid "Rebuild the search index for a fresh start." -msgstr "Reconstruire l'index de recherche." - -#: ~/Modules/Orchard.Indexing/Views/Admin/Index.ascx -#| msgid "Rebuild the search index." -msgid "Rebuild the search index." -msgstr "Reconstruire l'index de recherche." - -#: ~/Modules/Orchard.Indexing/Views/Admin/Index.ascx -#| msgid "Rebuild" -msgid "Rebuild" -msgstr "Reconstruire" - -#: ~/Modules/Orchard.Indexing/Views/DefinitionTemplates/FieldIndexing.ascx -#| msgid "Include in the index" -msgid "Include in the index" -msgstr "Inclure dans l'index" - -#: ~/Modules/Orchard.Indexing/Views/DefinitionTemplates/TypeIndexing.ascx -#| msgid "Index this content type for search" -msgid "Index this content type for search" -msgstr "Indexer ce type de contenu pour la recherche" - -#: ~/Modules/Orchard.Media/AdminMenu.cs -#| msgid "Media" -msgid "Media" -msgstr "Media" - -#: ~/Modules/Orchard.Media/AdminMenu.cs -#| msgid "Manage Media" -msgid "Manage Media" -msgstr "Gérer les media" - -#: ~/Modules/Orchard.Media/Controllers/AdminController.cs -#| msgid "Deleting Folder failed: {0}" -msgid "Deleting Folder failed: {0}" -msgstr "L'effacement de dossier a échoué: {0}" - -#: ~/Modules/Orchard.Media/Controllers/AdminController.cs -#| msgid "Couldn't create media folder" -msgid "Couldn't create media folder" -msgstr "Le dossier de media n'a pas pu être créé." - -#: ~/Modules/Orchard.Media/Controllers/AdminController.cs -#| msgid "Creating Folder failed: {0}" -msgid "Creating Folder failed: {0}" -msgstr "La création du dossier a échoué: {0}" - -#: ~/Modules/Orchard.Media/Controllers/AdminController.cs -#| msgid "Couldn't delete media file" -msgid "Couldn't delete media file" -msgstr "Le fichier de media n'a pas pu être effacé." - -#: ~/Modules/Orchard.Media/Controllers/AdminController.cs -#| msgid "Couldn't delete media folder" -msgid "Couldn't delete media folder" -msgstr "Le dossier de media n'a pas pu être effacé." - -#: ~/Modules/Orchard.Media/Controllers/AdminController.cs -#| msgid "Deleting failed: {0}" -msgid "Deleting failed: {0}" -msgstr "L'effacement a échoué: {0}" - -#: ~/Modules/Orchard.Media/Controllers/AdminController.cs -#| msgid "Couldn't rename media folder" -msgid "Couldn't rename media folder" -msgstr "Le dossier de media n'a pas pu être renommé." - -#: ~/Modules/Orchard.Media/Controllers/AdminController.cs -#| msgid "Modifying Folder Properties failed: {0}" -msgid "Modifying Folder Properties failed: {0}" -msgstr "La modification des propriétés du dossier a échoué: {0}" - -#: ~/Modules/Orchard.Media/Controllers/AdminController.cs -#| msgid "Couldn't upload media file" -msgid "Couldn't upload media file" -msgstr "Le fichier de media n'a pas pu être téléchargé." - -#: ~/Modules/Orchard.Media/Controllers/AdminController.cs -#| msgid "Select a file to upload" -msgid "Select a file to upload" -msgstr "Choisissez un fichier à télécharger." - -#: ~/Modules/Orchard.Media/Controllers/AdminController.cs -#| msgid "Uploading media file failed: {0}" -msgid "Uploading media file failed: {0}" -msgstr "Le téléchargement du fichier de media a échoué: {0}" - -#: ~/Modules/Orchard.Media/Controllers/AdminController.cs -#| msgid "ERROR: You don't have permission to upload media files" -msgid "ERROR: You don't have permission to upload media files" -msgstr "Erreur: vous n'êtes pas autorisé à télécharger des fichiers de media." - -#: ~/Modules/Orchard.Media/Controllers/AdminController.cs -#| msgid "HEY: You didn't give me a file to upload" -msgid "HEY: You didn't give me a file to upload" -msgstr "Vous ne m'avez pas fourni de fichier à télécharger." - -#: ~/Modules/Orchard.Media/Controllers/AdminController.cs -#| msgid "ERROR: Uploading media file failed: {0}" -msgid "ERROR: Uploading media file failed: {0}" -msgstr "Erreur: le téléchargement du fichier de media a échoué: {0}" - -#: ~/Modules/Orchard.Media/Controllers/AdminController.cs -#| msgid "Couldn't modify media file" -msgid "Couldn't modify media file" -msgstr "La modification du fichier de media a échoué." - -#: ~/Modules/Orchard.Media/Controllers/AdminController.cs -#| msgid "Editing media file failed: {0}" -msgid "Editing media file failed: {0}" -msgstr "La modification du fichier de media a échoué: {0}" - -#: ~/Modules/Orchard.Media/Views/Admin/Add.aspx -#| msgid "Add Media" -msgid "Add Media" -msgstr "Ajouter un fichier de media" - -#: ~/Modules/Orchard.Media/Views/Admin/Add.aspx -#| msgid "Media Folders" -msgid "Media Folders" -msgstr "Dossiers de media" - -#: ~/Modules/Orchard.Media/Views/Admin/Add.aspx -#| msgid "File Path - multiple files must be in a zipped folder" -msgid "File Path - multiple files must be in a zipped folder" -msgstr "Chemin du fichier - vous pouvez télécharger plusieurs fichiers à la fois en les zippant." - -#: ~/Modules/Orchard.Media/Views/Admin/Add.aspx -#| msgid "Browse" -msgid "Browse" -msgstr "Parcourir" - -#: ~/Modules/Orchard.Media/Views/Admin/Add.aspx -#| msgid "After your files have been uploaded, you can edit the titles and descriptions." -msgid "After your files have been uploaded, you can edit the titles and descriptions." -msgstr "Après que vos fichiers ont été téléchargés, vous pouvez en éditer les titres et descriptions." - -#: ~/Modules/Orchard.Media/Views/Admin/Add.aspx -#| msgid "Upload" -msgid "Upload" -msgstr "Télécharger" - -#: ~/Modules/Orchard.Media/Views/Admin/Create.aspx -#| msgid "Add a Folder" -msgid "Add a Folder" -msgstr "Ajouter un dossier" - -#: ~/Modules/Orchard.Media/Views/Admin/Create.aspx -#| msgid "Media Folders" -msgid "Media Folders" -msgstr "Dossiers de media" - -#: ~/Modules/Orchard.Media/Views/Admin/Create.aspx -#| msgid "Folder Name" -msgid "Folder Name" -msgstr "Nom de dossier" - -#: ~/Modules/Orchard.Media/Views/Admin/Create.aspx -#| msgid "Save" -msgid "Save" -msgstr "Enregistrer" - -#: ~/Modules/Orchard.Media/Views/Admin/Edit.aspx -#| msgid "Manage Folder" -msgid "Manage Folder" -msgstr "Gérer le dossier" - -#: ~/Modules/Orchard.Media/Views/Admin/Edit.aspx -#| msgid "Folder Properties" -msgid "Folder Properties" -msgstr "Propriétés du dossier" - -#: ~/Modules/Orchard.Media/Views/Admin/Edit.aspx -#| msgid "Media Folders" -msgid "Media Folders" -msgstr "Dossiers de media" - -#: ~/Modules/Orchard.Media/Views/Admin/Edit.aspx -#| msgid "Actions:" -msgid "Actions:" -msgstr "Actions:" - -#: ~/Modules/Orchard.Media/Views/Admin/Edit.aspx -#| msgid "Remove" -msgid "Remove" -msgstr "Enlever" - -#: ~/Modules/Orchard.Media/Views/Admin/Edit.aspx -#| msgid "Apply" -msgid "Apply" -msgstr "Appliquer" - -#: ~/Modules/Orchard.Media/Views/Admin/Edit.aspx -#| msgid "Add media" -msgid "Add media" -msgstr "Ajouter un fichier media" - -#: ~/Modules/Orchard.Media/Views/Admin/Edit.aspx -#| msgid "Add a folder" -msgid "Add a folder" -msgstr "Ajouter un dossier" - -#: ~/Modules/Orchard.Media/Views/Admin/Edit.aspx -#| msgid "This is a table of the pages currently available for use in your application." -msgid "This is a table of the pages currently available for use in your application." -msgstr "Ceci est une liste des pages actuellement disponibles dans votre application." - -#: ~/Modules/Orchard.Media/Views/Admin/Edit.aspx -#| msgid "Name" -msgid "Name" -msgstr "Nom" - -#: ~/Modules/Orchard.Media/Views/Admin/Edit.aspx -#| msgid "Author" -msgid "Author" -msgstr "Auteur" - -#: ~/Modules/Orchard.Media/Views/Admin/Edit.aspx -#| msgid "Last Updated" -msgid "Last Updated" -msgstr "Mis à jour le" - -#: ~/Modules/Orchard.Media/Views/Admin/Edit.aspx -#| msgid "Type" -msgid "Type" -msgstr "Type" - -#: ~/Modules/Orchard.Media/Views/Admin/Edit.aspx -#| msgid "Size" -msgid "Size" -msgstr "Taille" - -#: ~/Modules/Orchard.Media/Views/Admin/Edit.aspx -#| msgid "Checkbox.File.{0}" -msgid "Checkbox.File.{0}" -msgstr "Checkbox.File.{0}" - -#: ~/Modules/Orchard.Media/Views/Admin/Edit.aspx -#| msgid "Orchard User" -msgid "Orchard User" -msgstr "Utilisateur Orchard" - -#: ~/Modules/Orchard.Media/Views/Admin/Edit.aspx -#| msgid "Checkbox.Folder.{0}" -msgid "Checkbox.Folder.{0}" -msgstr "Checkbox.Folder.{0}" - -#: ~/Modules/Orchard.Media/Views/Admin/Edit.aspx -#| msgid "Folder" -msgid "Folder" -msgstr "Dossier" - -#: ~/Modules/Orchard.Media/Views/Admin/EditMedia.aspx -#| msgid "Edit Media - {0}" -msgid "Edit Media - {0}" -msgstr "Modifier Media - {0}" - -#: ~/Modules/Orchard.Media/Views/Admin/EditMedia.aspx -#| msgid "Media Folders" -msgid "Media Folders" -msgstr "Dossiers de media" - -#: ~/Modules/Orchard.Media/Views/Admin/EditMedia.aspx -#| msgid "Edit Media" -msgid "Edit Media" -msgstr "Modifier media" - -#: ~/Modules/Orchard.Media/Views/Admin/EditMedia.aspx -#| msgid "Dimensions: 500 x 375 pixels" -msgid "Dimensions: 500 x 375 pixels" -msgstr "Dimensions: 500 x 375 pixels" - -#: ~/Modules/Orchard.Media/Views/Admin/EditMedia.aspx -#| msgid "Size: {0}" -msgid "Size: {0}" -msgstr "Taille: {0}" - -#: ~/Modules/Orchard.Media/Views/Admin/EditMedia.aspx -#| msgid "Added on: {0} by Orchard User" -msgid "Added on: {0} by Orchard User" -msgstr "Ajouté le: {0} par Orchard User" - -#: ~/Modules/Orchard.Media/Views/Admin/EditMedia.aspx -#| msgid "Embed:" -msgid "Embed:" -msgstr "Incorporer:" - -#: ~/Modules/Orchard.Media/Views/Admin/EditMedia.aspx -#| msgid "Copy this html to add this image to your site." -msgid "Copy this html to add this image to your site." -msgstr "Copiez ce fragment d'HTML pour ajouter cette image à votre site." - -#: ~/Modules/Orchard.Media/Views/Admin/EditMedia.aspx -#| msgid "Name" -msgid "Name" -msgstr "Nom" - -#: ~/Modules/Orchard.Media/Views/Admin/EditMedia.aspx -#| msgid "Caption" -msgid "Caption" -msgstr "Légende" - -#: ~/Modules/Orchard.Media/Views/Admin/EditMedia.aspx -#| msgid "This will be used for the image alt tag." -msgid "This will be used for the image alt tag." -msgstr "Ceci sera utilisé dans l'attribut alt du tag image." - -#: ~/Modules/Orchard.Media/Views/Admin/EditMedia.aspx -#| msgid "Save" -msgid "Save" -msgstr "Enregistrer" - -#: ~/Modules/Orchard.Media/Views/Admin/EditMedia.aspx -#| msgid "Remove" -msgid "Remove" -msgstr "Enlever" - -#: ~/Modules/Orchard.Media/Views/Admin/EditMedia.aspx -#| msgid "Preview" -msgid "Preview" -msgstr "Aperçu" - -#: ~/Modules/Orchard.Media/Views/Admin/EditProperties.aspx -#| msgid "Folder Properties" -msgid "Folder Properties" -msgstr "Propriétés du dossier" - -#: ~/Modules/Orchard.Media/Views/Admin/EditProperties.aspx -#| msgid "Media Folders" -msgid "Media Folders" -msgstr "Dossiers de media" - -#: ~/Modules/Orchard.Media/Views/Admin/EditProperties.aspx -#| msgid "Folder Name:" -msgid "Folder Name:" -msgstr "Nom du dossier:" - -#: ~/Modules/Orchard.Media/Views/Admin/EditProperties.aspx -#| msgid "Save" -msgid "Save" -msgstr "Enregistrer" - -#: ~/Modules/Orchard.Media/Views/Admin/EditProperties.aspx -#| msgid "Remove" -msgid "Remove" -msgstr "Enlever" - -#: ~/Modules/Orchard.Media/Views/Admin/Index.aspx -#| msgid "Manage Media Folders" -msgid "Manage Media Folders" -msgstr "Gérer les dossiers de media" - -#: ~/Modules/Orchard.Media/Views/Admin/Index.aspx -#| msgid "Actions:" -msgid "Actions:" -msgstr "Actions:" - -#: ~/Modules/Orchard.Media/Views/Admin/Index.aspx -#| msgid "Remove" -msgid "Remove" -msgstr "Enlever" - -#: ~/Modules/Orchard.Media/Views/Admin/Index.aspx -#| msgid "Apply" -msgid "Apply" -msgstr "Appliquer" - -#: ~/Modules/Orchard.Media/Views/Admin/Index.aspx -#| msgid "Add a folder" -msgid "Add a folder" -msgstr "Ajouter un dossier" - -#: ~/Modules/Orchard.Media/Views/Admin/Index.aspx -#| msgid "This is a table of the media folders currently available for use in your application." -msgid "This is a table of the media folders currently available for use in your application." -msgstr "Ceci est une liste des dossiers de media actuellement disponibles dans votre application." - -#: ~/Modules/Orchard.Media/Views/Admin/Index.aspx -#| msgid "Name" -msgid "Name" -msgstr "Nom" - -#: ~/Modules/Orchard.Media/Views/Admin/Index.aspx -#| msgid "Author" -msgid "Author" -msgstr "Auteur" - -#: ~/Modules/Orchard.Media/Views/Admin/Index.aspx -#| msgid "Last Updated" -msgid "Last Updated" -msgstr "Mis à jour le" - -#: ~/Modules/Orchard.Media/Views/Admin/Index.aspx -#| msgid "Type" -msgid "Type" -msgstr "Type" - -#: ~/Modules/Orchard.Media/Views/Admin/Index.aspx -#| msgid "Size" -msgid "Size" -msgstr "Taille" - -#: ~/Modules/Orchard.Media/Views/Admin/Index.aspx -#| msgid "Checkbox.{0}" -msgid "Checkbox.{0}" -msgstr "Checkbox.{0}" - -#: ~/Modules/Orchard.Media/Views/Admin/Index.aspx -#| msgid "Folder" -msgid "Folder" -msgstr "Dossier" - -#: ~/Modules/Orchard.Media/Views/Admin/Index.aspx -#| msgid "Orchard User" -msgid "Orchard User" -msgstr "Utilisateur Orchard" - -#: ~/Modules/Orchard.Media/Views/EditorTemplates/Parts/Media.SiteSettings.ascx -#| msgid "Media" -msgid "Media" -msgstr "Media" - -#: ~/Modules/Orchard.Modules/AdminMenu.cs -#| msgid "Site Configuration" -msgid "Site Configuration" -msgstr "Configuration du site" - -#: ~/Modules/Orchard.Modules/AdminMenu.cs -#| msgid "Features" -msgid "Features" -msgstr "Fonctionnalités" - -#: ~/Modules/Orchard.Modules/AdminMenu.cs -#| msgid "Modules" -msgid "Modules" -msgstr "Modules" - -#: ~/Modules/Orchard.Modules/Commands/FeatureCommands.cs -#| msgid "Enabled" -msgid "Enabled" -msgstr "Activé" - -#: ~/Modules/Orchard.Modules/Commands/FeatureCommands.cs -#| msgid "Disabled" -msgid "Disabled" -msgstr "Désactivé" - -#: ~/Modules/Orchard.Modules/Commands/FeatureCommands.cs -#| msgid "List of available features" -msgid "List of available features" -msgstr "Liste des fonctionnalités disponibles" - -#: ~/Modules/Orchard.Modules/Commands/FeatureCommands.cs -#| msgid "--------------------------" -msgid "--------------------------" -msgstr "--------------------------" - -#: ~/Modules/Orchard.Modules/Commands/FeatureCommands.cs -#| msgid "General" -msgid "General" -msgstr "Général" - -#: ~/Modules/Orchard.Modules/Commands/FeatureCommands.cs -#| msgid " Name: {0}" -msgid " Name: {0}" -msgstr " Nom: {0}" - -#: ~/Modules/Orchard.Modules/Commands/FeatureCommands.cs -#| msgid "" -msgid "" -msgstr "" - -#: ~/Modules/Orchard.Modules/Commands/FeatureCommands.cs -#| msgid "Could not find feature {0}" -msgid "Could not find feature {0}" -msgstr "Impossible de trouver la fonctionnalité {0}." - -#: ~/Modules/Orchard.Modules/Commands/PackagingCommands.cs -#| msgid "Module \"{0}\" does not exist in this Orchard installation." -msgid "Module \"{0}\" does not exist in this Orchard installation." -msgstr "Le module '{0}' n'existe pas dans cette installation d'Orchard." - -#: ~/Modules/Orchard.Modules/Commands/PackagingCommands.cs -#| msgid "Package \"{0}\" successfully created" -msgid "Package \"{0}\" successfully created" -msgstr "Le package '{0}' a été créé avec succès." - -#: ~/Modules/Orchard.Modules/Commands/PackagingCommands.cs -#| msgid "File \"{0}\" does not exist." -msgid "File \"{0}\" does not exist." -msgstr "Le fichier '{0}' n'existe pas." - -#: ~/Modules/Orchard.Modules/Commands/PackagingCommands.cs -#| msgid "Package \"{0}\" successfully installed at \"{1}\"" -msgid "Package \"{0}\" successfully installed at \"{1}\"" -msgstr "Le paquetage '{0}' a été installé avec succès dans '{1}'." - -#: ~/Modules/Orchard.Modules/Controllers/AdminController.cs -#| msgid "Not allowed to manage modules" -msgid "Not allowed to manage modules" -msgstr "Non autorisé à gérer les modules." - -#: ~/Modules/Orchard.Modules/Controllers/AdminController.cs -#| msgid "Couldn't upload module package." -msgid "Couldn't upload module package." -msgstr "Le paquetage du module n'a pas pu être téléchargé." - -#: ~/Modules/Orchard.Modules/Controllers/AdminController.cs -#| msgid "Select a file to upload." -msgid "Select a file to upload." -msgstr "Choisissez un fichier à télécharger." - -#: ~/Modules/Orchard.Modules/Controllers/AdminController.cs -#| msgid "Installed package \"{0}\", version {1} of type \"{2}\" at location \"{3}\"" -msgid "Installed package \"{0}\", version {1} of type \"{2}\" at location \"{3}\"" -msgstr "Le paquetage '{0}' version {1} de type '{2}' a été installé dans '{3}'." - -#: ~/Modules/Orchard.Modules/Controllers/AdminController.cs -#| msgid "Uploading module package failed: {0}" -msgid "Uploading module package failed: {0}" -msgstr "Le téléchargement du paquetage du module a échoué: {0}" - -#: ~/Modules/Orchard.Modules/Controllers/AdminController.cs -#| msgid "Not allowed to manage features" -msgid "Not allowed to manage features" -msgstr "Non autorisé à gérer les fonctionnalités." - -#: ~/Modules/Orchard.Modules/Controllers/AdminController.cs -#| msgid "The feature {0} was updated succesfuly" -msgid "The feature {0} was updated succesfuly" -msgstr "La fonctionnalité {0} a été mise à jour avec succès." - -#: ~/Modules/Orchard.Modules/Controllers/AdminController.cs -#| msgid "An error occured while updating the feature {0}: {1}" -msgid "An error occured while updating the feature {0}: {1}" -msgstr "Une erreur s'est produite pendant la mise à jour de la fonctionnalité {0}: {1}" - -#: ~/Modules/Orchard.Modules/Services/ModuleService.cs -#| msgid "{0} was enabled" -msgid "{0} was enabled" -msgstr "{0} a été activé." - -#: ~/Modules/Orchard.Modules/Services/ModuleService.cs -#| msgid "{0} was disabled" -msgid "{0} was disabled" -msgstr "{0} a été désactivé." - -#: ~/Modules/Orchard.Modules/Views/Admin/Add.ascx -#| msgid "Install a Module" -msgid "Install a Module" -msgstr "Installer un module" - -#: ~/Modules/Orchard.Modules/Views/Admin/Add.ascx -#| msgid "Module Package" -msgid "Module Package" -msgstr "Paquetage de module" - -#: ~/Modules/Orchard.Modules/Views/Admin/Add.ascx -#| msgid "Install" -msgid "Install" -msgstr "Installer" - -#: ~/Modules/Orchard.Modules/Views/Admin/Features.ascx -#| msgid "Manage Features" -msgid "Manage Features" -msgstr "Gérer les fonctionnalités" - -#: ~/Modules/Orchard.Modules/Views/Admin/Features.ascx -#| msgid "Uncategorized" -msgid "Uncategorized" -msgstr "Non classé" - -#: ~/Modules/Orchard.Modules/Views/Admin/Features.ascx -#| msgid "{0} is {1}" -msgid "{0} is {1}" -msgstr "{0} est {1}" - -#: ~/Modules/Orchard.Modules/Views/Admin/Features.ascx -#| msgid "Depends on:" -msgid "Depends on:" -msgstr "Dépend de:" - -#: ~/Modules/Orchard.Modules/Views/Admin/Features.ascx -#| msgid "Disable" -msgid "Disable" -msgstr "Désactiver" - -#: ~/Modules/Orchard.Modules/Views/Admin/Features.ascx -#| msgid "Enable" -msgid "Enable" -msgstr "Activer" - -#: ~/Modules/Orchard.Modules/Views/Admin/Features.ascx -#| msgid "Update" -msgid "Update" -msgstr "Mettre à jour" - -#: ~/Modules/Orchard.Modules/Views/Admin/Index.ascx -#| msgid "Installed Modules" -msgid "Installed Modules" -msgstr "Modules installés" - -#: ~/Modules/Orchard.Modules/Views/Admin/Index.ascx -#| msgid "Install a module" -msgid "Install a module" -msgstr "Installer un module" - -#: ~/Modules/Orchard.Modules/Views/Admin/Index.ascx -#| msgid "Version: {0}" -msgid "Version: {0}" -msgstr "Version: {0}" - -#: ~/Modules/Orchard.Modules/Views/Admin/Index.ascx -#| msgid "1.0" -msgid "1.0" -msgstr "1.0" - -#: ~/Modules/Orchard.Modules/Views/Admin/Index.ascx -#| msgid "Author: {0}" -msgid "Author: {0}" -msgstr "Auteur: {0}" - -#: ~/Modules/Orchard.Modules/Views/Admin/Index.ascx -#| msgid "Website: {0}" -msgid "Website: {0}" -msgstr "Site Web: {0}" - -#: ~/Modules/Orchard.MultiTenancy/AdminMenu.cs -#| msgid "Tenants" -msgid "Tenants" -msgstr "Appartements" - -#: ~/Modules/Orchard.MultiTenancy/AdminMenu.cs -#| msgid "Manage Tenants" -msgid "Manage Tenants" -msgstr "Gérer les appartements" - -#: ~/Modules/Orchard.MultiTenancy/AdminMenu.cs -#| msgid "Add New Tenant" -msgid "Add New Tenant" -msgstr "Ajouter un appartement" - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid "List of tenants" -msgid "List of tenants" -msgstr "Liste des appartements" - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid "---------------------------" -msgid "---------------------------" -msgstr "---------------------------" - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid "Name: " -msgid "Name: " -msgstr "Nom: " - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid "Provider: " -msgid "Provider: " -msgstr "Fournisseur: " - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid "ConnectionString: " -msgid "ConnectionString: " -msgstr "Chaîne de connexion: " - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid "Data Table Prefix: " -msgid "Data Table Prefix: " -msgstr "Préfixe des tables de données: " - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid "Request Url Host: " -msgid "Request Url Host: " -msgstr "Hôte des URL de requête: " - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid "Request Url Prefix: " -msgid "Request Url Prefix: " -msgstr "Préfixe des URL de requête: " - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid "State: " -msgid "State: " -msgstr "État: " - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid "Creating tenant" -msgid "Creating tenant" -msgstr "Appartement en cours de création" - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid "Tenant: " -msgid "Tenant: " -msgstr "Appartement: " - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid " was not found" -msgid " was not found" -msgstr " non trouvé" - -#: ~/Modules/Orchard.MultiTenancy/Commands/TenantCommand.cs -#| msgid "Tenant Settings:" -msgid "Tenant Settings:" -msgstr "Configuration de l'appartement:" - -#: ~/Modules/Orchard.MultiTenancy/Controllers/AdminController.cs -#| msgid "Cannot create tenant" -msgid "Cannot create tenant" -msgstr "L'appartement ne peut pas être créé." - -#: ~/Modules/Orchard.MultiTenancy/Controllers/AdminController.cs -#| msgid "Couldn't create tenant" -msgid "Couldn't create tenant" -msgstr "L'appartement n'a pas pu être créé." - -#: ~/Modules/Orchard.MultiTenancy/Controllers/AdminController.cs -#| msgid "Creating Tenant failed: {0}" -msgid "Creating Tenant failed: {0}" -msgstr "La création de l'appartement a échoué: {0}" - -#: ~/Modules/Orchard.MultiTenancy/Controllers/AdminController.cs -#| msgid "Cannot edit tenant" -msgid "Cannot edit tenant" -msgstr "L'appartement ne peut pas être modifié." - -#: ~/Modules/Orchard.MultiTenancy/Controllers/AdminController.cs -#| msgid "Couldn't edit tenant" -msgid "Couldn't edit tenant" -msgstr "L'appartement n'a pas pu être modifié." - -#: ~/Modules/Orchard.MultiTenancy/Controllers/AdminController.cs -#| msgid "Failed to edit tenant: {0} " -msgid "Failed to edit tenant: {0} " -msgstr "Échec de la modification de l'appartement: {0}" - -#: ~/Modules/Orchard.MultiTenancy/Controllers/AdminController.cs -#| msgid "Couldn't disable tenant" -msgid "Couldn't disable tenant" -msgstr "L'appartement n'a pas pu être désactivé." - -#: ~/Modules/Orchard.MultiTenancy/Controllers/AdminController.cs -#| msgid "Couldn't enable tenant" -msgid "Couldn't enable tenant" -msgstr "L'appartement n'a pas pu être activé." - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Add.ascx -#| msgid "Add New Tenant" -msgid "Add New Tenant" -msgstr "Ajouter un appartement" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Add.ascx -#| msgid "Name" -msgid "Name" -msgstr "Nom" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Add.ascx -#| msgid "Host" -msgid "Host" -msgstr "Hôte" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Add.ascx -#| msgid "Example: If host is 'orchardproject.net', the tenant site URL is 'http://orchardproject.net/'" -msgid "Example: If host is 'orchardproject.net', the tenant site URL is 'http://orchardproject.net/'" -msgstr "Exemple: si l'hôte est 'orchardproject.net', l'URL de l'appartement est 'http://orchardproject.net/'." - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Add.ascx -#| msgid "Database Setup" -msgid "Database Setup" -msgstr "Configuration de la base de données" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Add.ascx -#| msgid "Allow the tenant to set up the database" -msgid "Allow the tenant to set up the database" -msgstr "Permettre au locataire de l'appartement de configurer la base de données" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Add.ascx -#| msgid "Use built-in data storage (SQL Server Compact)" -msgid "Use built-in data storage (SQL Server Compact)" -msgstr "Utiliser l'option de stockage par défaut (SQL Server Compact)" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Add.ascx -#| msgid "Use an existing SQL Server (or SQL Express) database" -msgid "Use an existing SQL Server (or SQL Express) database" -msgstr "Utiliser une base de données SQL Server (ou SQL Express) existante" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Add.ascx -#| msgid "Connection string" -msgid "Connection string" -msgstr "Chaîne de connexion" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Add.ascx -#| msgid "Example:" -msgid "Example:" -msgstr "Exemple:" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Add.ascx -#| msgid "Data Source=sqlServerName;Initial Catalog=dbName;Persist Security Info=True;User ID=userName;Password=password" -msgid "Data Source=sqlServerName;Initial Catalog=dbName;Persist Security Info=True;User ID=userName;Password=password" -msgstr "Data Source=sqlServerName;Initial Catalog=dbName;Persist Security Info=True;User ID=userName;Password=password" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Add.ascx -#| msgid "Database Table Prefix" -msgid "Database Table Prefix" -msgstr "Préfixe de table de base de données" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Add.ascx -#| msgid "Save" -msgid "Save" -msgstr "Enregistrer" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Edit.ascx -#| msgid "Edit Tenant" -msgid "Edit Tenant" -msgstr "Modifier un appartement" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Edit.ascx -#| msgid "Host" -msgid "Host" -msgstr "Hôte" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Edit.ascx -#| msgid "Example: If host is \"orchardproject.net\", the tenant site URL is \"http://orchardproject.net/\"" -msgid "Example: If host is \"orchardproject.net\", the tenant site URL is \"http://orchardproject.net/\"" -msgstr "Exemple: si l'hôte est 'orchardproject.net', l'URL de l'appartement est 'http://orchardproject.net/'." - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Edit.ascx -#| msgid "Database Setup" -msgid "Database Setup" -msgstr "Configuration de la base de données" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Edit.ascx -#| msgid "Warning: If you don't know what you're doing you *will* (likely) send this tenant into a downward spiral of irrecoverable disrepair. Have a nice day." -msgid "Warning: If you don't know what you're doing you *will* (likely) send this tenant into a downward spiral of irrecoverable disrepair. Have a nice day." -msgstr "Avertissement: si vous ne comprenez pas ce que vous êtes en train de faire, vous allez (probablement) envoyer le locataire de cet appartement dans une spirale d'irréversible désespoir. Bonne journée!" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Edit.ascx -#| msgid "Allow the tenant to set up the database" -msgid "Allow the tenant to set up the database" -msgstr "Autoriser le locataire à configurer la base de données de l'appartement" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Edit.ascx -#| msgid "Use built-in data storage (SQL Server Compact)" -msgid "Use built-in data storage (SQL Server Compact)" -msgstr "Utiliser l'option de stockage par défaut (SQL Server Compact)" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Edit.ascx -#| msgid "Use an existing SQL Server (or SQL Express) database" -msgid "Use an existing SQL Server (or SQL Express) database" -msgstr "Utiliser une base de données SQL Server (ou SQL Express) existante" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Edit.ascx -#| msgid "Connection string" -msgid "Connection string" -msgstr "Chaîne de connexion" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Edit.ascx -#| msgid "Example:" -msgid "Example:" -msgstr "Exemple:" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Edit.ascx -#| msgid "Data Source=sqlServerName;Initial Catalog=dbName;Persist Security Info=True;User ID=userName;Password=password" -msgid "Data Source=sqlServerName;Initial Catalog=dbName;Persist Security Info=True;User ID=userName;Password=password" -msgstr "Data Source=sqlServerName;Initial Catalog=dbName;Persist Security Info=True;User ID=userName;Password=password" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Edit.ascx -#| msgid "Database Table Prefix" -msgid "Database Table Prefix" -msgstr "Préfixe de table de base de données" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Edit.ascx -#| msgid "Save" -msgid "Save" -msgstr "Enregistrer" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Index.ascx -#| msgid "List of Site's Tenants" -msgid "List of Site's Tenants" -msgstr "Liste des appartements du site" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Index.ascx -#| msgid "Add a Tenant" -msgid "Add a Tenant" -msgstr "Ajouter un appartement" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Index.ascx -#| msgid " | " -msgid " | " -msgstr " | " - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Index.ascx -#| msgid "Edit" -msgid "Edit" -msgstr "Modifier" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/Index.ascx -#| msgid "Remove" -msgid "Remove" -msgstr "Supprimer" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/DisplayTemplates/ActionsForDisabled.ascx -#| msgid "Resume" -msgid "Resume" -msgstr "Reprendre" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/DisplayTemplates/ActionsForInvalid.ascx -#| msgid "Make Valid*" -msgid "Make Valid*" -msgstr "Valider*" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/DisplayTemplates/ActionsForRunning.ascx -#| msgid "Suspend" -msgid "Suspend" -msgstr "Suspendre" - -#: ~/Modules/Orchard.MultiTenancy/Views/Admin/DisplayTemplates/ActionsForUninitialized.ascx -#| msgid "Set Up" -msgid "Set Up" -msgstr "Installer" - -#: ~/Modules/Orchard.Pages/AdminMenu.cs -#| msgid "Pages" -msgid "Pages" -msgstr "Pages" - -#: ~/Modules/Orchard.Pages/AdminMenu.cs -#| msgid "Manage Pages" -msgid "Manage Pages" -msgstr "Gérer les pages" - -#: ~/Modules/Orchard.Pages/AdminMenu.cs -#| msgid "Create New Page" -msgid "Create New Page" -msgstr "Créer une page" - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid "Couldn't publish page" -msgid "Couldn't publish page" -msgstr "La page n'a pas pu être publiée." - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid "Couldn't unpublish page" -msgid "Couldn't unpublish page" -msgstr "La page n'a pas pu être dépubliée." - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid "Couldn't delete page" -msgid "Couldn't delete page" -msgstr "La page n'a pas pu être effacée." - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid "Not allowed to create a page" -msgid "Not allowed to create a page" -msgstr "Non autorisé à créer une page" - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid "Couldn't create page" -msgid "Couldn't create page" -msgstr "La page n'a pas pu être créée." - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid "Couldn't edit page" -msgid "Couldn't edit page" -msgstr "La page n'a pas pu être modifiée." - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid "There is no draft to discard." -msgid "There is no draft to discard." -msgstr "Il n'y a pas de brouillon à supprimer." - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid "Couldn't discard page draft" -msgid "Couldn't discard page draft" -msgstr "Le brouillon n'a pas pu être supprimé." - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid "Can not discard draft on unpublished page." -msgid "Can not discard draft on unpublished page." -msgstr "Le brouillon d'une page non publiée ne peut pas être supprimé." - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid "Page draft version discarded" -msgid "Page draft version discarded" -msgstr "Le brouillon de la page a été supprimé." - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid "Page successfully published." -msgid "Page successfully published." -msgstr "La page a été publiée." - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid "Page successfully unpublished." -msgid "Page successfully unpublished." -msgstr "La page a été dépubliée." - -#: ~/Modules/Orchard.Pages/Controllers/AdminController.cs -#| msgid "Page successfully deleted" -msgid "Page successfully deleted" -msgstr "La page a été effacée." - -#: ~/Modules/Orchard.Pages/Controllers/PageController.cs -#| msgid "Couldn't view page" -msgid "Couldn't view page" -msgstr "La page ne peut être visualisée." - -#: ~/Modules/Orchard.Pages/Views/Admin/Create.ascx -#| msgid "Add Page" -msgid "Add Page" -msgstr "Ajouter une page" - -#: ~/Modules/Orchard.Pages/Views/Admin/Create.ascx -#| msgid "Set as home page" -msgid "Set as home page" -msgstr "Utiliser comme page d'accueil" - -#: ~/Modules/Orchard.Pages/Views/Admin/Edit.ascx -#| msgid "Edit Page" -msgid "Edit Page" -msgstr "Modifier une page" - -#: ~/Modules/Orchard.Pages/Views/Admin/Edit.ascx -#| msgid "Set as home page" -msgid "Set as home page" -msgstr "Utiliser comme page d'accueil" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "Manage Pages" -msgid "Manage Pages" -msgstr "Gérer les pages" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "Possible text about setting up a page goes here." -msgid "Possible text about setting up a page goes here." -msgstr "Possible text about setting up a page goes here." - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "Add a page" -msgid "Add a page" -msgstr "Ajouter une page" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "Actions:" -msgid "Actions:" -msgstr "Actions:" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "Choose action..." -msgid "Choose action..." -msgstr "Choisissez une action..." - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "Publish Now" -msgid "Publish Now" -msgstr "Publier maintenant" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "Unpublish" -msgid "Unpublish" -msgstr "Dépublier" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "Remove" -msgid "Remove" -msgstr "Enlever" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "Apply" -msgid "Apply" -msgstr "Appliquer" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "Filter:" -msgid "Filter:" -msgstr "Filtre:" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "All Pages" -msgid "All Pages" -msgstr "Toutes les pages" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "Published Pages" -msgid "Published Pages" -msgstr "Pages publiées" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "Offline Pages" -msgid "Offline Pages" -msgstr "Pages hors ligne" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "Online" -msgid "Online" -msgstr "En ligne" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "The page is currently online" -msgid "The page is currently online" -msgstr "La page est actuellement en ligne" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "Published" -msgid "Published" -msgstr "Publiée" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "Offline" -msgid "Offline" -msgstr "Hors ligne" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "The page is currently offline" -msgid "The page is currently offline" -msgstr "La page est actuellement hors ligne" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "Not Published" -msgid "Not Published" -msgstr "Non publiée" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "Draft" -msgid "Draft" -msgstr "Brouillon" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "The page has a draft" -msgid "The page has a draft" -msgstr "La page a un brouillon" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "No Draft" -msgid "No Draft" -msgstr "Pas de brouillon" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "Scheduled" -msgid "Scheduled" -msgstr "Mise en ligne planifiée" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "The page is scheduled for publishing" -msgid "The page is scheduled for publishing" -msgstr "La mise en ligne de la page est planifiée" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "M/d/yyyy h:mm tt" -msgid "M/d/yyyy h:mm tt" -msgstr "d/M/yyyy h:mm tt" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "Published: {0}" -msgid "Published: {0}" -msgstr "Publiée: {0}" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "Last modified: {0}" -msgid "Last modified: {0}" -msgstr "Mise à jour: {0}" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "By {0}" -msgid "By {0}" -msgstr "Par {0}" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "View Page" -msgid "View Page" -msgstr "Voir la page" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid " | " -msgid " | " -msgstr " | " - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "Publish Draft" -msgid "Publish Draft" -msgstr "Publier le brouillon" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "Unpublish Page" -msgid "Unpublish Page" -msgstr "Dépublier la page" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "Publish Page" -msgid "Publish Page" -msgstr "Publier la page" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "Publish" -msgid "Publish" -msgstr "Publier" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "Edit" -msgid "Edit" -msgstr "Modifier" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "Edit Page" -msgid "Edit Page" -msgstr "Modifier la page" - -#: ~/Modules/Orchard.Pages/Views/Admin/List.aspx -#| msgid "Remove Page" -msgid "Remove Page" -msgstr "Enlever la page" - -#: ~/Modules/Orchard.Pages/Views/DisplayTemplates/Items/Pages.Page.SummaryAdmin.ascx -#| msgid "View Page" -msgid "View Page" -msgstr "Voir la page" - -#: ~/Modules/Orchard.Pages/Views/DisplayTemplates/Items/Pages.Page.SummaryAdmin.ascx -#| msgid " | " -msgid " | " -msgstr " | " - -#: ~/Modules/Orchard.Pages/Views/DisplayTemplates/Items/Pages.Page.SummaryAdmin.ascx -#| msgid "Publish Draft" -msgid "Publish Draft" -msgstr "Publier le brouillon" - -#: ~/Modules/Orchard.Pages/Views/DisplayTemplates/Items/Pages.Page.SummaryAdmin.ascx -#| msgid "Unpublish Page" -msgid "Unpublish Page" -msgstr "Dépublier la page" - -#: ~/Modules/Orchard.Pages/Views/DisplayTemplates/Items/Pages.Page.SummaryAdmin.ascx -#| msgid "Unpublish" -msgid "Unpublish" -msgstr "Dépublier" - -#: ~/Modules/Orchard.Pages/Views/DisplayTemplates/Items/Pages.Page.SummaryAdmin.ascx -#| msgid "Publish Page" -msgid "Publish Page" -msgstr "Publier la page" - -#: ~/Modules/Orchard.Pages/Views/DisplayTemplates/Items/Pages.Page.SummaryAdmin.ascx -#| msgid "Publish" -msgid "Publish" -msgstr "Publier" - -#: ~/Modules/Orchard.Pages/Views/DisplayTemplates/Items/Pages.Page.SummaryAdmin.ascx -#| msgid "Edit" -msgid "Edit" -msgstr "Modifier" - -#: ~/Modules/Orchard.Pages/Views/DisplayTemplates/Items/Pages.Page.SummaryAdmin.ascx -#| msgid "Edit Page" -msgid "Edit Page" -msgstr "Modifier la page" - -#: ~/Modules/Orchard.Pages/Views/DisplayTemplates/Items/Pages.Page.SummaryAdmin.ascx -#| msgid "Remove Page" -msgid "Remove Page" -msgstr "Enlever la page" - -#: ~/Modules/Orchard.Pages/Views/DisplayTemplates/Items/Pages.Page.SummaryAdmin.ascx -#| msgid "Remove" -msgid "Remove" -msgstr "Enlever" - -#: ~/Modules/Orchard.Pages/Views/EditorTemplates/Items/Pages.Page.ascx -#| msgid "Save" -msgid "Save" -msgstr "Enregistrer" - -#: ~/Modules/Orchard.Pages/Views/EditorTemplates/Items/Pages.Page.ascx -#| msgid "Discard Draft" -msgid "Discard Draft" -msgstr "Supprimer le brouillon" - -#: ~/Modules/Orchard.Roles/AdminMenu.cs -#| msgid "Users" -msgid "Users" -msgstr "Utilisateurs" - -#: ~/Modules/Orchard.Roles/AdminMenu.cs -#| msgid "Manage Roles" -msgid "Manage Roles" -msgstr "Gérer les rôles" - -#: ~/Modules/Orchard.Roles/Controllers/AdminController.cs -#| msgid "Not authorized to manage roles" -msgid "Not authorized to manage roles" -msgstr "Non autorisé à gérer les rôles" - -#: ~/Modules/Orchard.Roles/Controllers/AdminController.cs -#| msgid "Deleting Role failed: {0}" -msgid "Deleting Role failed: {0}" -msgstr "L'effacement du rôle a échoué: {0}" - -#: ~/Modules/Orchard.Roles/Controllers/AdminController.cs -#| msgid "Creating Role failed: {0}" -msgid "Creating Role failed: {0}" -msgstr "La création du rôle a échoué: {0}" - -#: ~/Modules/Orchard.Roles/Controllers/AdminController.cs -#| msgid "Editing Role failed: {0}" -msgid "Editing Role failed: {0}" -msgstr "La modification du rôle a échoué: {0}" - -#: ~/Modules/Orchard.Roles/Drivers/UserRolesPartDriver.cs -#| msgid "Adding role {0} to user {1}" -msgid "Adding role {0} to user {1}" -msgstr "Ajout du rôle {0} à l'utilisateur {1}" - -#: ~/Modules/Orchard.Roles/Drivers/UserRolesPartDriver.cs -#| msgid "Removing role {0} from user {1}" -msgid "Removing role {0} from user {1}" -msgstr "Effacement du rôle {0} de l'utilisateur {1}" - -#: ~/Modules/Orchard.Roles/Services/RolesBasedAuthorizationService.cs -#| msgid "A security exception occurred in the content management system." -msgid "A security exception occurred in the content management system." -msgstr "Une erreur de sécurité s'est produite dans le systeme de gestion de contenu." - -#: ~/Modules/Orchard.Roles/Views/Admin/Create.aspx -#| msgid "Add Role" -msgid "Add Role" -msgstr "Ajouter un rôle" - -#: ~/Modules/Orchard.Roles/Views/Admin/Create.aspx -#| msgid "Information" -msgid "Information" -msgstr "Information" - -#: ~/Modules/Orchard.Roles/Views/Admin/Create.aspx -#| msgid "Role Name:" -msgid "Role Name:" -msgstr "Nom du rôle" - -#: ~/Modules/Orchard.Roles/Views/Admin/Create.aspx -#| msgid "Permissions" -msgid "Permissions" -msgstr "Permissions" - -#: ~/Modules/Orchard.Roles/Views/Admin/Create.aspx -#| msgid "{0} Module" -msgid "{0} Module" -msgstr "Module {0}" - -#: ~/Modules/Orchard.Roles/Views/Admin/Create.aspx -#| msgid "Permission" -msgid "Permission" -msgstr "Permission" - -#: ~/Modules/Orchard.Roles/Views/Admin/Create.aspx -#| msgid "Allow" -msgid "Allow" -msgstr "Autoriser" - -#: ~/Modules/Orchard.Roles/Views/Admin/Create.aspx -#| msgid "Checkbox.{0}" -msgid "Checkbox.{0}" -msgstr "Checkbox.{0}" - -#: ~/Modules/Orchard.Roles/Views/Admin/Create.aspx -#| msgid "Save" -msgid "Save" -msgstr "Enregistrer" - -#: ~/Modules/Orchard.Roles/Views/Admin/Edit.aspx -#| msgid "Edit Role" -msgid "Edit Role" -msgstr "Modifier un rôle" - -#: ~/Modules/Orchard.Roles/Views/Admin/Edit.aspx -#| msgid "Information" -msgid "Information" -msgstr "Information" - -#: ~/Modules/Orchard.Roles/Views/Admin/Edit.aspx -#| msgid "Role Name:" -msgid "Role Name:" -msgstr "Nom du rôle:" - -#: ~/Modules/Orchard.Roles/Views/Admin/Edit.aspx -#| msgid "Permissions" -msgid "Permissions" -msgstr "Permissions" - -#: ~/Modules/Orchard.Roles/Views/Admin/Edit.aspx -#| msgid "{0} Feature" -msgid "{0} Feature" -msgstr "Fonctionnalité {0}" - -#: ~/Modules/Orchard.Roles/Views/Admin/Edit.aspx -#| msgid "Permission" -msgid "Permission" -msgstr "Permission" - -#: ~/Modules/Orchard.Roles/Views/Admin/Edit.aspx -#| msgid "Allow" -msgid "Allow" -msgstr "Autoriser" - -#: ~/Modules/Orchard.Roles/Views/Admin/Edit.aspx -#| msgid "Effective" -msgid "Effective" -msgstr "Effective" - -#: ~/Modules/Orchard.Roles/Views/Admin/Edit.aspx -#| msgid "Checkbox.{0}" -msgid "Checkbox.{0}" -msgstr "Checkbox.{0}" - -#: ~/Modules/Orchard.Roles/Views/Admin/Edit.aspx -#| msgid "Effective.{0}" -msgid "Effective.{0}" -msgstr "Effective.{0}" - -#: ~/Modules/Orchard.Roles/Views/Admin/Edit.aspx -#| msgid "Save" -msgid "Save" -msgstr "Enregistrer" - -#: ~/Modules/Orchard.Roles/Views/Admin/Edit.aspx -#| msgid "Remove" -msgid "Remove" -msgstr "Enlever" - -#: ~/Modules/Orchard.Roles/Views/Admin/Index.aspx -#| msgid "Manage Roles" -msgid "Manage Roles" -msgstr "Gérer les rôles" - -#: ~/Modules/Orchard.Roles/Views/Admin/Index.aspx -#| msgid "Actions:" -msgid "Actions:" -msgstr "Actions:" - -#: ~/Modules/Orchard.Roles/Views/Admin/Index.aspx -#| msgid "Remove" -msgid "Remove" -msgstr "Enlever" - -#: ~/Modules/Orchard.Roles/Views/Admin/Index.aspx -#| msgid "Apply" -msgid "Apply" -msgstr "Appliquer" - -#: ~/Modules/Orchard.Roles/Views/Admin/Index.aspx -#| msgid "Add a role" -msgid "Add a role" -msgstr "Ajouter un rôle" - -#: ~/Modules/Orchard.Roles/Views/Admin/Index.aspx -#| msgid "This is a table of the roles currently available for use in your application." -msgid "This is a table of the roles currently available for use in your application." -msgstr "Ceci est une liste des rôles actuellement disponibles dans votre application." - -#: ~/Modules/Orchard.Roles/Views/Admin/Index.aspx -#| msgid "Name" -msgid "Name" -msgstr "Nom" - -#: ~/Modules/Orchard.Roles/Views/Admin/Index.aspx -#| msgid "Edit" -msgid "Edit" -msgstr "Modifier" - -#: ~/Modules/Orchard.Roles/Views/EditorTemplates/Parts/Roles.UserRoles.ascx -#| msgid "Roles" -msgid "Roles" -msgstr "Rôles" - -#: ~/Modules/Orchard.Roles/Views/EditorTemplates/Parts/Roles.UserRoles.ascx -#| msgid "There are no roles." -msgid "There are no roles." -msgstr "Il n'existe pas de rôles." - -#: ~/Modules/Orchard.Sandbox/Controllers/PageController.cs -#| msgid "Anonymous users can not create pages" -msgid "Anonymous users can not create pages" -msgstr "Les utilisateurs anonymes ne peuvent pas créer des pages." - -#: ~/Modules/Orchard.Sandbox/Controllers/PageController.cs -#| msgid "Anonymous users can not edit pages" -msgid "Anonymous users can not edit pages" -msgstr "Les utilisateurs anonymes ne peuvent pas modifier des pages." - -#: ~/Modules/Orchard.Sandbox/Views/DisplayTemplates/Items/Sandbox.Page.ascx -#| msgid "Edit this page" -msgid "Edit this page" -msgstr "Modifier cette page" - -#: ~/Modules/Orchard.Sandbox/Views/DisplayTemplates/Items/Sandbox.Page.ascx -#| msgid "Return to list" -msgid "Return to list" -msgstr "Retourner à la liste" - -#: ~/Modules/Orchard.Sandbox/Views/EditorTemplates/Parts/Sandbox.SiteSettings.ascx -#| msgid "Anyone can create and edit pages" -msgid "Anyone can create and edit pages" -msgstr "Tout le monde peut créer et modifier des pages" - -#: ~/Modules/Orchard.Sandbox/Views/Page/Create.aspx -#| msgid "Create Page" -msgid "Create Page" -msgstr "Créer une page" - -#: ~/Modules/Orchard.Sandbox/Views/Page/Create.aspx -#| msgid "Add" -msgid "Add" -msgstr "Ajouter" - -#: ~/Modules/Orchard.Sandbox/Views/Page/Edit.aspx -#| msgid "Edit Page" -msgid "Edit Page" -msgstr "Modifier une page" - -#: ~/Modules/Orchard.Sandbox/Views/Page/Edit.aspx -#| msgid "Save" -msgid "Save" -msgstr "Enregistrer" - -#: ~/Modules/Orchard.Sandbox/Views/Page/Index.aspx -#| msgid "Sandbox Pages" -msgid "Sandbox Pages" -msgstr "Pages du bac à sable" - -#: ~/Modules/Orchard.Sandbox/Views/Page/Index.aspx -#| msgid "Add new page" -msgid "Add new page" -msgstr "Ajouter une page" - -#: ~/Modules/Orchard.Search/Views/SearchForm.ascx -#| msgid "Search" -msgid "Search" -msgstr "Chercher" - -#: ~/Modules/Orchard.Search/Views/EditorTemplates/Parts/Search.SiteSettings.ascx -#| msgid "Search" -msgid "Search" -msgstr "Recherche" - -#: ~/Modules/Orchard.Search/Views/EditorTemplates/Parts/Search.SiteSettings.ascx -#| msgid "Search results must be filtered with current culture" -msgid "Search results must be filtered with current culture" -msgstr "Les résultats de recherche doivent être filtrés par la culture en cours." - -#: ~/Modules/Orchard.Search/Views/EditorTemplates/Parts/Search.SiteSettings.ascx -#| msgid "Searched fields" -msgid "Searched fields" -msgstr "Champs de recherche" - -#: ~/Modules/Orchard.Search/Views/Search/Index.ascx -#| msgid "Search" -msgid "Search" -msgstr "Recherche" - -#: ~/Modules/Orchard.Setup/Commands/SetupCommand.cs -#| msgid "Site \"{0}\" sucessfully setup to run data provider \"{1}\" (with table prefix \"{2}\")." -msgid "Site \"{0}\" sucessfully setup to run data provider \"{1}\" (with table prefix \"{2}\")." -msgstr "Le site \"{0}\" a été installé avec succès au-dessus du fournisseur de données \"{1}\" (avec le préfixe \"{2}\")." - -#: ~/Modules/Orchard.Setup/Controllers/SetupController.cs -#| msgid "Password confirmation must match" -msgid "Password confirmation must match" -msgstr "La confirmation du mot de passe doit être identique au mot de passe." - -#: ~/Modules/Orchard.Setup/Controllers/SetupController.cs -#| msgid "Setup failed:" -msgid "Setup failed:" -msgstr "L'installation a échoué:" - -#: ~/Modules/Orchard.Setup/Services/SetupService.cs -#| msgid "Home" -msgid "Home" -msgstr "Accueil" - -#: ~/Modules/Orchard.Setup/Views/Setup/Index.ascx -#| msgid "Get Started" -msgid "Get Started" -msgstr "Pour commencer" - -#: ~/Modules/Orchard.Setup/Views/Setup/Index.ascx -#| msgid "Please answer a few questions to configure your site." -msgid "Please answer a few questions to configure your site." -msgstr "Merci de bien vouloir répondre à quelques questions afin que nous puissions configurer votre site." - -#: ~/Modules/Orchard.Setup/Views/Setup/Index.ascx -#| msgid "What is the name of your site?" -msgid "What is the name of your site?" -msgstr "Quel est le nom de votre site?" - -#: ~/Modules/Orchard.Setup/Views/Setup/Index.ascx -#| msgid "Choose a user name:" -msgid "Choose a user name:" -msgstr "Choisissez un nom d'utilisateur:" - -#: ~/Modules/Orchard.Setup/Views/Setup/Index.ascx -#| msgid "Choose a password:" -msgid "Choose a password:" -msgstr "Choisissez un mot de passe:" - -#: ~/Modules/Orchard.Setup/Views/Setup/Index.ascx -#| msgid "Confirm the password:" -msgid "Confirm the password:" -msgstr "Veuillez confirmer ce mot de passe:" - -#: ~/Modules/Orchard.Setup/Views/Setup/Index.ascx -#| msgid "How would you like to store your data?" -msgid "How would you like to store your data?" -msgstr "Comment souhaitez-vous stocker vos données?" - -#: ~/Modules/Orchard.Setup/Views/Setup/Index.ascx -#| msgid "Use built-in data storage (SQL Server Compact)" -msgid "Use built-in data storage (SQL Server Compact)" -msgstr "Utiliser l'option de stockage par défaut (SQL Server Compact)" - -#: ~/Modules/Orchard.Setup/Views/Setup/Index.ascx -#| msgid "Use an existing SQL Server (or SQL Express) database" -msgid "Use an existing SQL Server (or SQL Express) database" -msgstr "Utiliser une base de données SQL Server (ou SQL Express) existante" - -#: ~/Modules/Orchard.Setup/Views/Setup/Index.ascx -#| msgid "Connection string" -msgid "Connection string" -msgstr "Chaîne de connexion" - -#: ~/Modules/Orchard.Setup/Views/Setup/Index.ascx -#| msgid "Example:" -msgid "Example:" -msgstr "Exemple:" - -#: ~/Modules/Orchard.Setup/Views/Setup/Index.ascx -#| msgid "Data Source=sqlServerName;Initial Catalog=dbName;Persist Security Info=True;User ID=userName;Password=password" -msgid "Data Source=sqlServerName;Initial Catalog=dbName;Persist Security Info=True;User ID=userName;Password=password" -msgstr "Data Source=sqlServerName;Initial Catalog=dbName;Persist Security Info=True;User ID=userName;Password=password" - -#: ~/Modules/Orchard.Setup/Views/Setup/Index.ascx -#| msgid "Database Table Prefix" -msgid "Database Table Prefix" -msgstr "Préfixe de tables de base de données" - -#: ~/Modules/Orchard.Setup/Views/Setup/Index.ascx -#| msgid "Finish Setup" -msgid "Finish Setup" -msgstr "Terminer l'installation" - -#: ~/Modules/Orchard.Tags/AdminMenu.cs -#| msgid "Tags" -msgid "Tags" -msgstr "Étiquettes" - -#: ~/Modules/Orchard.Tags/AdminMenu.cs -#| msgid "Manage Tags" -msgid "Manage Tags" -msgstr "Gérer les étiquettes" - -#: ~/Modules/Orchard.Tags/Controllers/AdminController.cs -#| msgid "Listing tags failed: " -msgid "Listing tags failed: " -msgstr "L'énumération des étiquettes a échoué: " - -#: ~/Modules/Orchard.Tags/Controllers/AdminController.cs -#| msgid "Couldn't delete tag" -msgid "Couldn't delete tag" -msgstr "L'étiquette n'a pas pu être effacée." - -#: ~/Modules/Orchard.Tags/Controllers/AdminController.cs -#| msgid "Editing tags failed: " -msgid "Editing tags failed: " -msgstr "La modification des étiquettes a échoué: " - -#: ~/Modules/Orchard.Tags/Controllers/AdminController.cs -#| msgid "Couldn't create tag" -msgid "Couldn't create tag" -msgstr "L'étiquette n'a pas pu être créée." - -#: ~/Modules/Orchard.Tags/Controllers/AdminController.cs -#| msgid "The tag {0} already exists" -msgid "The tag {0} already exists" -msgstr "L'étiquette {0} existe déjà." - -#: ~/Modules/Orchard.Tags/Controllers/AdminController.cs -#| msgid "Creating tag failed: " -msgid "Creating tag failed: " -msgstr "La création de l'étiquette a échoué: " - -#: ~/Modules/Orchard.Tags/Controllers/AdminController.cs -#| msgid "Retrieving tag information failed: " -msgid "Retrieving tag information failed: " -msgstr "L'accès aux informations de l'étiquette a échoué: " - -#: ~/Modules/Orchard.Tags/Controllers/AdminController.cs -#| msgid "Couldn't edit tag" -msgid "Couldn't edit tag" -msgstr "L'étiquette n'a pas pu être modifiée." - -#: ~/Modules/Orchard.Tags/Controllers/AdminController.cs -#| msgid "Editing tag failed: " -msgid "Editing tag failed: " -msgstr "La modification de l'étiquette a échoué." - -#: ~/Modules/Orchard.Tags/Controllers/AdminController.cs -#| msgid "Retrieving tagged items failed: " -msgid "Retrieving tagged items failed: " -msgstr "L'accès aux articles étiquetés a échoué: " - -#: ~/Modules/Orchard.Tags/Controllers/HomeController.cs -#| msgid "Listing tags failed: " -msgid "Listing tags failed: " -msgstr "L'énumération des étiquettes a échoué: " - -#: ~/Modules/Orchard.Tags/Controllers/HomeController.cs -#| msgid "Couldn't create tag" -msgid "Couldn't create tag" -msgstr "L'étiquette n'a pas pu être créée." - -#: ~/Modules/Orchard.Tags/Controllers/HomeController.cs -#| msgid "Editing tags failed: " -msgid "Editing tags failed: " -msgstr "La modification des étiquettes a échoué: " - -#: ~/Modules/Orchard.Tags/Controllers/HomeController.cs -#| msgid "Updating tags failed: " -msgid "Updating tags failed: " -msgstr "La modification des étiquettes a échoué: " - -#: ~/Modules/Orchard.Tags/Controllers/HomeController.cs -#| msgid "Retrieving tagged items failed: " -msgid "Retrieving tagged items failed: " -msgstr "L'accès aux articles étiquetés a échoué: " - -#: ~/Modules/Orchard.Tags/Services/TagService.cs -#| msgid "Couldn't rename tag: name was empty" -msgid "Couldn't rename tag: name was empty" -msgstr "L'étiquette n'a pas pu être renommée: le nom était vide." - -#: ~/Modules/Orchard.Tags/Views/Admin/Create.aspx -#| msgid "Add a Tag" -msgid "Add a Tag" -msgstr "Ajouter une étiquette" - -#: ~/Modules/Orchard.Tags/Views/Admin/Create.aspx -#| msgid "Name:" -msgid "Name:" -msgstr "Nom:" - -#: ~/Modules/Orchard.Tags/Views/Admin/Create.aspx -#| msgid "Save" -msgid "Save" -msgstr "Enregistrer" - -#: ~/Modules/Orchard.Tags/Views/Admin/Edit.aspx -#| msgid "Edit a Tag" -msgid "Edit a Tag" -msgstr "Modifier une étiquette" - -#: ~/Modules/Orchard.Tags/Views/Admin/Edit.aspx -#| msgid "Name:" -msgid "Name:" -msgstr "Nom:" - -#: ~/Modules/Orchard.Tags/Views/Admin/Edit.aspx -#| msgid "Save" -msgid "Save" -msgstr "Enregistrer" - -#: ~/Modules/Orchard.Tags/Views/Admin/Index.aspx -#| msgid "Manage Tags" -msgid "Manage Tags" -msgstr "Gérer les étiquettes" - -#: ~/Modules/Orchard.Tags/Views/Admin/Index.aspx -#| msgid "Actions:" -msgid "Actions:" -msgstr "Actions:" - -#: ~/Modules/Orchard.Tags/Views/Admin/Index.aspx -#| msgid "Choose action..." -msgid "Choose action..." -msgstr "Choisissez une action..." - -#: ~/Modules/Orchard.Tags/Views/Admin/Index.aspx -#| msgid "Remove" -msgid "Remove" -msgstr "Enlever" - -#: ~/Modules/Orchard.Tags/Views/Admin/Index.aspx -#| msgid "Apply" -msgid "Apply" -msgstr "Appliquer" - -#: ~/Modules/Orchard.Tags/Views/Admin/Index.aspx -#| msgid "Add a tag" -msgid "Add a tag" -msgstr "Ajouter une étiquette" - -#: ~/Modules/Orchard.Tags/Views/Admin/Index.aspx -#| msgid "This is a table of the tags in your application" -msgid "This is a table of the tags in your application" -msgstr "Ceci est une liste des étiquettes de votre application." - -#: ~/Modules/Orchard.Tags/Views/Admin/Index.aspx -#| msgid "Name" -msgid "Name" -msgstr "Nom" - -#: ~/Modules/Orchard.Tags/Views/Admin/Index.aspx -#| msgid "Edit" -msgid "Edit" -msgstr "Modifier" - -#: ~/Modules/Orchard.Tags/Views/Admin/Search.aspx -#| msgid "List of contents tagged with {0}" -msgid "List of contents tagged with {0}" -msgstr "Liste des articles étiquetés avec {0}" - -#: ~/Modules/Orchard.Tags/Views/Admin/Search.aspx -#| msgid "Name" -msgid "Name" -msgstr "Nom" - -#: ~/Modules/Orchard.Tags/Views/Admin/Search.aspx -#| msgid "Link to the content item" -msgid "Link to the content item" -msgstr "Lien vers le contenu" - -#: ~/Modules/Orchard.Tags/Views/DisplayTemplates/Parts/Tags.ShowTags.ascx -#| msgid "Tags:" -msgid "Tags:" -msgstr "Étiquettes:" - -#: ~/Modules/Orchard.Tags/Views/Home/Index.ascx -#| msgid "Tags" -msgid "Tags" -msgstr "Étiquettes" - -#: ~/Modules/Orchard.Tags/Views/Home/Search.ascx -#| msgid "Tags" -msgid "Tags" -msgstr "Étiquettes" - -#: ~/Modules/Orchard.Tags/Views/Home/Search.ascx -#| msgid "Contents tagged with {0}" -msgid "Contents tagged with {0}" -msgstr "Articles étiquetés avec {0}" - -#: ~/Modules/Orchard.Tags/Views/Home/Search.ascx -#| msgid "Contents tagged with {0}" -msgid "Contents tagged with {0}" -msgstr "Articles étiquetés avec {0}" - -#: ~/Modules/Orchard.Themes/AdminMenu.cs -#| msgid "Site Design" -msgid "Site Design" -msgstr "Design du site" - -#: ~/Modules/Orchard.Themes/AdminMenu.cs -#| msgid "Themes" -msgid "Themes" -msgstr "Thèmes" - -#: ~/Modules/Orchard.Themes/Controllers/AdminController.cs -#| msgid "Listing themes failed: " -msgid "Listing themes failed: " -msgstr "L'énumération des thèmes a échoué: " - -#: ~/Modules/Orchard.Themes/Controllers/AdminController.cs -#| msgid "Couldn't preview the current theme" -msgid "Couldn't preview the current theme" -msgstr "L'aperçu du thème courant n'a pas pu être créé." - -#: ~/Modules/Orchard.Themes/Controllers/AdminController.cs -#| msgid "Previewing theme failed: " -msgid "Previewing theme failed: " -msgstr "L'aperçu du thème a échoué: " - -#: ~/Modules/Orchard.Themes/Controllers/AdminController.cs -#| msgid "Couldn't set the current theme" -msgid "Couldn't set the current theme" -msgstr "Le thème en cours n'a pas pu être défini." - -#: ~/Modules/Orchard.Themes/Controllers/AdminController.cs -#| msgid "Activating theme failed: " -msgid "Activating theme failed: " -msgstr "L'activation du thème a échoué: " - -#: ~/Modules/Orchard.Themes/Controllers/AdminController.cs -#| msgid "Couldn't install theme" -msgid "Couldn't install theme" -msgstr "Le thème n'a pas pu être installé." - -#: ~/Modules/Orchard.Themes/Controllers/AdminController.cs -#| msgid "Installing theme failed: " -msgid "Installing theme failed: " -msgstr "L'installation du thème a échoué: " - -#: ~/Modules/Orchard.Themes/Controllers/AdminController.cs -#| msgid "Couldn't uninstall theme" -msgid "Couldn't uninstall theme" -msgstr "Le thème n'a pas pu être désinstallé." - -#: ~/Modules/Orchard.Themes/Controllers/AdminController.cs -#| msgid "Uninstalling theme failed: " -msgid "Uninstalling theme failed: " -msgstr "La désinstallation du thème a échoué: " - -#: ~/Modules/Orchard.Themes/Services/ThemeZoneManagerEvents.cs -#| msgid "etc. (ZonesAny)" -msgid "etc. (ZonesAny)" -msgstr "etc. (ZonesAny)" - -#: ~/Modules/Orchard.Themes/Services/ThemeZoneManagerEvents.cs -#| msgid "" -msgid "" -msgstr "" - -#: ~/Modules/Orchard.Themes/Services/ThemeZoneManagerEvents.cs -#| msgid "" -msgid "" -msgstr "" - -#: ~/Modules/Orchard.Themes/Views/NotFound.ascx -#| msgid "Not found" -msgid "Not found" -msgstr "Non trouvé" - -#: ~/Modules/Orchard.Themes/Views/NotFound.ascx -#| msgid "The page you are looking for does not exist." -msgid "The page you are looking for does not exist." -msgstr "La page que vous avez demandée n'existe pas." - -#: ~/Modules/Orchard.Themes/Views/User.ascx -#| msgid "Welcome, {0}!" -msgid "Welcome, {0}!" -msgstr "Bienvenue {0}!" - -#: ~/Modules/Orchard.Themes/Views/User.ascx -#| msgid "Log Off" -msgid "Log Off" -msgstr "Déconnexion" - -#: ~/Modules/Orchard.Themes/Views/User.ascx -#| msgid "Log On" -msgid "Log On" -msgstr "Connexion" - -#: ~/Modules/Orchard.Themes/Views/Admin/Index.aspx -#| msgid "Manage Themes" -msgid "Manage Themes" -msgstr "Gérer les thèmes" - -#: ~/Modules/Orchard.Themes/Views/Admin/Index.aspx -#| msgid "There is no current theme in the application. The built-in theme will be used." -msgid "There is no current theme in the application. The built-in theme will be used." -msgstr "Il n'y a actuellement pas de thème dans votre application. Le thème intégré va être utilisé." - -#: ~/Modules/Orchard.Themes/Views/Admin/Index.aspx -#| msgid "Install a new Theme" -msgid "Install a new Theme" -msgstr "Installer un thème" - -#: ~/Modules/Orchard.Themes/Views/Admin/Index.aspx -#| msgid "Current Theme" -msgid "Current Theme" -msgstr "Thème actuel" - -#: ~/Modules/Orchard.Themes/Views/Admin/Index.aspx -#| msgid "By" -msgid "By" -msgstr "Par" - -#: ~/Modules/Orchard.Themes/Views/Admin/Index.aspx -#| msgid "Version:" -msgid "Version:" -msgstr "Version:" - -#: ~/Modules/Orchard.Themes/Views/Admin/Index.aspx -#| msgid "Available Themes" -msgid "Available Themes" -msgstr "Thèmes disponibles" - -#: ~/Modules/Orchard.Themes/Views/Admin/Index.aspx -#| msgid "Activate" -msgid "Activate" -msgstr "Activer" - -#: ~/Modules/Orchard.Themes/Views/Admin/Index.aspx -#| msgid "Preview" -msgid "Preview" -msgstr "Aperçu" - -#: ~/Modules/Orchard.Themes/Views/Admin/Index.aspx -#| msgid "Uninstall" -msgid "Uninstall" -msgstr "Désinstaller" - -#: ~/Modules/Orchard.Themes/Views/Admin/Install.aspx -#| msgid "Install Theme" -msgid "Install Theme" -msgstr "Installer un thème" - -#: ~/Modules/Orchard.Themes/Views/Admin/Install.aspx -#| msgid "File Path to the zip file:" -msgid "File Path to the zip file:" -msgstr "Chemin vers le fichier zip:" - -#: ~/Modules/Orchard.Themes/Views/Admin/Install.aspx -#| msgid "Browse" -msgid "Browse" -msgstr "Parcourir" - -#: ~/Modules/Orchard.Themes/Views/Admin/Install.aspx -#| msgid "Install" -msgid "Install" -msgstr "Installer" - -#: ~/Modules/Orchard.Themes/Views/Admin/ThemePreview.ascx -#| msgid "You are previewing: " -msgid "You are previewing: " -msgstr "Vous regardez un aperçu de: " - -#: ~/Modules/Orchard.Themes/Views/Admin/ThemePreview.ascx -#| msgid "Preview" -msgid "Preview" -msgstr "Aperçu" - -#: ~/Modules/Orchard.Themes/Views/Admin/ThemePreview.ascx -#| msgid "Apply" -msgid "Apply" -msgstr "Appliquer" - -#: ~/Modules/Orchard.Themes/Views/Admin/ThemePreview.ascx -#| msgid "Apply this theme" -msgid "Apply this theme" -msgstr "Appliquer ce thème" - -#: ~/Modules/Orchard.Themes/Views/Admin/ThemePreview.ascx -#| msgid "Cancel" -msgid "Cancel" -msgstr "Annuler" - -#: ~/Modules/Orchard.Users/AdminMenu.cs -#| msgid "Users" -msgid "Users" -msgstr "Utilisateurs" - -#: ~/Modules/Orchard.Users/AdminMenu.cs -#| msgid "Manage Users" -msgid "Manage Users" -msgstr "Gérer les utilisateurs" - -#: ~/Modules/Orchard.Users/Controllers/AccountController.cs -#| msgid "The current password is incorrect or the new password is invalid." -msgid "The current password is incorrect or the new password is invalid." -msgstr "Le mot de passe courant est incorrect ou le nouveau mot de passe est invalide." - -#: ~/Modules/Orchard.Users/Controllers/AccountController.cs -#| msgid "You must specify a current password." -msgid "You must specify a current password." -msgstr "Vous devez spécifier le mot de passe courant." - -#: ~/Modules/Orchard.Users/Controllers/AccountController.cs -#| msgid "You must specify a new password of {0} or more characters." -msgid "You must specify a new password of {0} or more characters." -msgstr "Votre nouveau mot de passe doit comporter au moins {0} caractères." - -#: ~/Modules/Orchard.Users/Controllers/AccountController.cs -#| msgid "The new password and confirmation password do not match." -msgid "The new password and confirmation password do not match." -msgstr "Le nouvau mot de passe et sa confirmation ne coincident pas." - -#: ~/Modules/Orchard.Users/Controllers/AccountController.cs -#| msgid "You must specify a username or e-mail." -msgid "You must specify a username or e-mail." -msgstr "Vous devez spécifier un nom d'utilisateur ou une adresse e-mail." - -#: ~/Modules/Orchard.Users/Controllers/AccountController.cs -#| msgid "You must specify a password." -msgid "You must specify a password." -msgstr "Vous devez spécifier un mot de passe." - -#: ~/Modules/Orchard.Users/Controllers/AccountController.cs -#| msgid "The username or e-mail or password provided is incorrect." -msgid "The username or e-mail or password provided is incorrect." -msgstr "Le nom d'utilisateur ou l'adresse e-mail est incorrect." - -#: ~/Modules/Orchard.Users/Controllers/AccountController.cs -#| msgid "You must specify a username." -msgid "You must specify a username." -msgstr "Vous devez spécifier un nom d'utilisateur." - -#: ~/Modules/Orchard.Users/Controllers/AccountController.cs -#| msgid "You must specify an email address." -msgid "You must specify an email address." -msgstr "Vous devez spécifier une adresse e-mail." - -#: ~/Modules/Orchard.Users/Controllers/AccountController.cs -#| msgid "You must specify a password of {0} or more characters." -msgid "You must specify a password of {0} or more characters." -msgstr "Votre mot de passe doit comporter au moins {0} caractères." - -#: ~/Modules/Orchard.Users/Controllers/AdminController.cs -#| msgid "Not authorized to list users" -msgid "Not authorized to list users" -msgstr "Non autorisé à voir la liste des utilisateurs" - -#: ~/Modules/Orchard.Users/Controllers/AdminController.cs -#| msgid "Not authorized to manage users" -msgid "Not authorized to manage users" -msgstr "Non autorisé à gérer les utilisateurs" - -#: ~/Modules/Orchard.Users/Controllers/AdminController.cs -#| msgid "Password confirmation must match" -msgid "Password confirmation must match" -msgstr "La confirmation du mot de passe doit être identique au mot de passe." - -#: ~/Modules/Orchard.Users/Controllers/AdminController.cs -#| msgid "User information updated" -msgid "User information updated" -msgstr "Les informations sur l'utilisateur ont été mises à jour." - -#: ~/Modules/Orchard.Users/Controllers/AdminController.cs -#| msgid "User deleted" -msgid "User deleted" -msgstr "Utilisateur effacé" - -#: ~/Modules/Orchard.Users/Views/Account/AccessDenied.ascx -#| msgid "Access Denied" -msgid "Access Denied" -msgstr "Accès refusé" - -#: ~/Modules/Orchard.Users/Views/Account/AccessDenied.ascx -#| msgid "You do not have permission to complete your request." -msgid "You do not have permission to complete your request." -msgstr "Vous n'avez pas la permission d'exécuter cette requête." - -#: ~/Modules/Orchard.Users/Views/Account/ChangePassword.ascx -#| msgid "Change Password" -msgid "Change Password" -msgstr "Changer le mot de passe" - -#: ~/Modules/Orchard.Users/Views/Account/ChangePassword.ascx -#| msgid "Use the form below to change your password." -msgid "Use the form below to change your password." -msgstr "Veuillez utiliser le formulaire ci-dessous pour mettre à jour votre mot de passe." - -#: ~/Modules/Orchard.Users/Views/Account/ChangePassword.ascx -#| msgid "Password change was unsuccessful. Please correct the errors and try again." -msgid "Password change was unsuccessful. Please correct the errors and try again." -msgstr "Le changement de mot de passe a échoué. Veuillez corriger les erreurs et réessayer." - -#: ~/Modules/Orchard.Users/Views/Account/ChangePassword.ascx -#| msgid "Account Information" -msgid "Account Information" -msgstr "Informations du compte" - -#: ~/Modules/Orchard.Users/Views/Account/ChangePassword.ascx -#| msgid "Current password:" -msgid "Current password:" -msgstr "Mot de passe actuel:" - -#: ~/Modules/Orchard.Users/Views/Account/ChangePassword.ascx -#| msgid "New password:" -msgid "New password:" -msgstr "Nouveau mot de passe:" - -#: ~/Modules/Orchard.Users/Views/Account/ChangePassword.ascx -#| msgid "Confirm new password:" -msgid "Confirm new password:" -msgstr "Veuillez confirmer votre nouveau mot de passe:" - -#: ~/Modules/Orchard.Users/Views/Account/ChangePasswordSuccess.ascx -#| msgid "Change Password" -msgid "Change Password" -msgstr "Changer le mot de passe" - -#: ~/Modules/Orchard.Users/Views/Account/ChangePasswordSuccess.ascx -#| msgid "Your password has been changed successfully." -msgid "Your password has been changed successfully." -msgstr "Botre mot de passe a été changé avec succès." - -#: ~/Modules/Orchard.Users/Views/Account/LogOn.ascx -#| msgid "Please enter your username and password." -msgid "Please enter your username and password." -msgstr "Veuillez saisir votre nom d'utilisateur et votre mot de passe." - -#: ~/Modules/Orchard.Users/Views/Account/LogOn.ascx -#| msgid " if you don't have an account." -msgid " if you don't have an account." -msgstr " si vous ne disposez pas d'un compte." - -#: ~/Modules/Orchard.Users/Views/Account/LogOn.ascx -#| msgid "Login was unsuccessful. Please correct the errors and try again." -msgid "Login was unsuccessful. Please correct the errors and try again." -msgstr "La connexion a échoué. Veuillez corriger les erreurs et réessayer." - -#: ~/Modules/Orchard.Users/Views/Account/LogOn.ascx -#| msgid "Account Information" -msgid "Account Information" -msgstr "Informations du compte" - -#: ~/Modules/Orchard.Users/Views/Account/LogOn.ascx -#| msgid "Username or Email:" -msgid "Username or Email:" -msgstr "Nom d'utilisateur ou e-mail:" - -#: ~/Modules/Orchard.Users/Views/Account/LogOn.ascx -#| msgid "Password:" -msgid "Password:" -msgstr "Mot de passe:" - -#: ~/Modules/Orchard.Users/Views/Account/LogOn.ascx -#| msgid "Remember me?" -msgid "Remember me?" -msgstr "Se souvenir de moi?" - -#: ~/Modules/Orchard.Users/Views/Account/LogOn.ascx -#| msgid "Log On" -msgid "Log On" -msgstr "Connexion" - -#: ~/Modules/Orchard.Users/Views/Account/Register.ascx -#| msgid "Create a New Account" -msgid "Create a New Account" -msgstr "Créer un nouveau compte utilisateur" - -#: ~/Modules/Orchard.Users/Views/Account/Register.ascx -#| msgid "Use the form below to create a new account." -msgid "Use the form below to create a new account." -msgstr "Veuillez utiliser le formulaire ci-dessous pour créer un nouveau compte utilisateur." - -#: ~/Modules/Orchard.Users/Views/Account/Register.ascx -#| msgid "Account creation was unsuccessful. Please correct the errors and try again." -msgid "Account creation was unsuccessful. Please correct the errors and try again." -msgstr "La création du compte a échoué. Veuillez corriger les erreurs et réessayer." - -#: ~/Modules/Orchard.Users/Views/Account/Register.ascx -#| msgid "Account Information" -msgid "Account Information" -msgstr "Informations du compte" - -#: ~/Modules/Orchard.Users/Views/Account/Register.ascx -#| msgid "Username:" -msgid "Username:" -msgstr "Nom d'utilisateur:" - -#: ~/Modules/Orchard.Users/Views/Account/Register.ascx -#| msgid "Email:" -msgid "Email:" -msgstr "E-mail:" - -#: ~/Modules/Orchard.Users/Views/Account/Register.ascx -#| msgid "Password:" -msgid "Password:" -msgstr "Mot de passe:" - -#: ~/Modules/Orchard.Users/Views/Account/Register.ascx -#| msgid "Confirm password:" -msgid "Confirm password:" -msgstr "Confirmation du mot de passe:" - -#: ~/Modules/Orchard.Users/Views/Account/Register.ascx -#| msgid "Register" -msgid "Register" -msgstr "S'inscrire" - -#: ~/Modules/Orchard.Users/Views/Admin/Create.aspx -#| msgid "Add User" -msgid "Add User" -msgstr "Ajouter un utilisateur" - -#: ~/Modules/Orchard.Users/Views/Admin/Create.aspx -#| msgid "Add" -msgid "Add" -msgstr "Ajouter" - -#: ~/Modules/Orchard.Users/Views/Admin/Edit.aspx -#| msgid "Edit User" -msgid "Edit User" -msgstr "Modifier un utilisateur" - -#: ~/Modules/Orchard.Users/Views/Admin/Edit.aspx -#| msgid "Save" -msgid "Save" -msgstr "Enregistrer" - -#: ~/Modules/Orchard.Users/Views/Admin/Index.aspx -#| msgid "Manage Users" -msgid "Manage Users" -msgstr "Gérer les utilisateurs" - -#: ~/Modules/Orchard.Users/Views/Admin/Index.aspx -#| msgid "Add a new user" -msgid "Add a new user" -msgstr "Ajouter un utilisateur" - -#: ~/Modules/Orchard.Users/Views/Admin/Index.aspx -#| msgid "Name" -msgid "Name" -msgstr "Nom" - -#: ~/Modules/Orchard.Users/Views/Admin/Index.aspx -#| msgid "Email" -msgid "Email" -msgstr "E-mail" - -#: ~/Modules/Orchard.Users/Views/Admin/Index.aspx -#| msgid "Edit" -msgid "Edit" -msgstr "Modifier" - -#: ~/Modules/Orchard.Users/Views/Admin/Index.aspx -#| msgid "Remove" -msgid "Remove" -msgstr "Supprimer" - -#: ~/Themes/Classic/Views/DisplayTemplates/Items/Blogs.BlogPost.ascx -#| msgid "Posted by {0} {1}" -msgid "Posted by {0} {1}" -msgstr "Posté par {0} {1}" - -#: ~/Themes/Classic/Views/DisplayTemplates/Items/Blogs.BlogPost.ascx -#| msgid "Edit" -msgid "Edit" -msgstr "Modifier" - -#: ~/Themes/Classic/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx -#| msgid "Posted by {0} {1}" -msgid "Posted by {0} {1}" -msgstr "Posté par {0} {1}" - -#: ~/Themes/Classic/Views/DisplayTemplates/Parts/Common.Metadata.ascx -#| msgid "nobody(?)" -msgid "nobody(?)" -msgstr "personne(?)" - -#: ~/Themes/ClassicDark/Views/DisplayTemplates/Items/Blogs.BlogPost.ascx -#| msgid "Posted by {0} {1}" -msgid "Posted by {0} {1}" -msgstr "Posté par {0} {1}" - -#: ~/Themes/ClassicDark/Views/DisplayTemplates/Items/Blogs.BlogPost.ascx -#| msgid "Edit" -msgid "Edit" -msgstr "Modifier" - -#: ~/Themes/ClassicDark/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx -#| msgid "Posted by {0} {1}" -msgid "Posted by {0} {1}" -msgstr "Posté par {0} {1}" - -#: ~/Themes/ClassicDark/Views/DisplayTemplates/Parts/Common.Metadata.ascx -#| msgid "nobody(?)" -msgid "nobody(?)" -msgstr "personne(?)" - -#: ~/Themes/Contoso/Views/LogOn.ascx -#| msgid "Please enter your username and password." -msgid "Please enter your username and password." -msgstr "Veuillez saisir votre nom d'utilisateur et votre mot de passe." - -#: ~/Themes/Contoso/Views/LogOn.ascx -#| msgid " if you don't have an account." -msgid " if you don't have an account." -msgstr " si vous n'avez pas de compte." - -#: ~/Themes/Contoso/Views/LogOn.ascx -#| msgid "Login was unsuccessful. Please correct the errors and try again." -msgid "Login was unsuccessful. Please correct the errors and try again." -msgstr "La connexion a échoué. Veuillez corriger les erreurs et réessayer." - -#: ~/Themes/Contoso/Views/LogOn.ascx -#| msgid "Account Information" -msgid "Account Information" -msgstr "Informations du compte" - -#: ~/Themes/Contoso/Views/LogOn.ascx -#| msgid "Username:" -msgid "Username:" -msgstr "Nom d'utilisateur:" - -#: ~/Themes/Contoso/Views/LogOn.ascx -#| msgid "Password:" -msgid "Password:" -msgstr "Mot de passe:" - -#: ~/Themes/Contoso/Views/LogOn.ascx -#| msgid "Remember me?" -msgid "Remember me?" -msgstr "Se souvenir de moi?" - -#: ~/Themes/Contoso/Views/LogOn.ascx -#| msgid "Log On" -msgid "Log On" -msgstr "Connexion" - -#: ~/Themes/Contoso/Views/User.ascx -#| msgid "Welcome" -msgid "Welcome" -msgstr "Bienvenue" - -#: ~/Themes/Contoso/Views/User.ascx -#| msgid "Log Off" -msgid "Log Off" -msgstr "Déconnexion" - -#: ~/Themes/Contoso/Views/User.ascx -#| msgid "Log on" -msgid "Log on" -msgstr "Connexion" - -#: ~/Themes/Contoso/Views/DisplayTemplates/Items/Blogs.BlogPost.ListByArchive.ascx -#| msgid "Archives" -msgid "Archives" -msgstr "Archives" - -#: ~/Themes/Contoso/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx -#| msgid " | Posted by {0} {1}" -msgid " | Posted by {0} {1}" -msgstr " | Posté par {0} {1}" - -#: ~/Themes/Contoso/Views/DisplayTemplates/Parts/Comments.Comments.ascx -#| msgid "Comments have been disabled for this content." -msgid "Comments have been disabled for this content." -msgstr "Les commentaires ont été désactivés pour ce contenu." - -#: ~/Themes/Contoso/Views/DisplayTemplates/Parts/Comments.Comments.ascx -#| msgid "Add a Comment" -msgid "Add a Comment" -msgstr "Ajouter un commentaire" - -#: ~/Themes/Contoso/Views/DisplayTemplates/Parts/Comments.Comments.ascx -#| msgid "log on" -msgid "log on" -msgstr "Connexion" - -#: ~/Themes/Contoso/Views/DisplayTemplates/Parts/Comments.Comments.ascx -#| msgid "Name" -msgid "Name" -msgstr "Nom" - -#: ~/Themes/Contoso/Views/DisplayTemplates/Parts/Comments.Comments.ascx -#| msgid "Email" -msgid "Email" -msgstr "E-mail" - -#: ~/Themes/Contoso/Views/DisplayTemplates/Parts/Comments.Comments.ascx -#| msgid "Url" -msgid "Url" -msgstr "Url" - -#: ~/Themes/Contoso/Views/DisplayTemplates/Parts/Comments.Comments.ascx -#| msgid "Hi, {0}!" -msgid "Hi, {0}!" -msgstr "Bonjour {0}!" - -#: ~/Themes/Contoso/Views/DisplayTemplates/Parts/Comments.Comments.ascx -#| msgid "Comment" -msgid "Comment" -msgstr "Commentaire" - -#: ~/Themes/Contoso/Views/DisplayTemplates/Parts/Comments.Comments.ascx -#| msgid "Leave a comment {0}!" -msgid "Leave a comment {0}!" -msgstr "Laissez-nous un commentaire, {0}!" - -#: ~/Themes/Contoso/Views/DisplayTemplates/Parts/Comments.Comments.ascx -#| msgid "Submit Comment" -msgid "Submit Comment" -msgstr "Envoyer le commentaire" - -#: ~/Themes/Contoso/Views/DisplayTemplates/Parts/Common.Metadata.ascx -#| msgid "nobody(?)" -msgid "nobody(?)" -msgstr "personne(?)" - -#: ~/Themes/Contoso/Views/DisplayTemplates/Parts/Tags.ShowTags.ascx -#| msgid "Tags:" -msgid "Tags:" -msgstr "Étiquettes:" - -#: ~/Themes/Contoso/Views/Orchard.Search/Search/Index.ascx -#| msgid "Search" -msgid "Search" -msgstr "Rechercher" - -#: ~/Themes/Corporate/Views/LogOn.ascx -#| msgid "Please enter your username and password." -msgid "Please enter your username and password." -msgstr "Veuillez saisir votre nom d'utilisateur et votre mote de passe." - -#: ~/Themes/Corporate/Views/LogOn.ascx -#| msgid " if you don't have an account." -msgid " if you don't have an account." -msgstr " si vous n'avez pas de compte." - -#: ~/Themes/Corporate/Views/LogOn.ascx -#| msgid "Login was unsuccessful. Please correct the errors and try again." -msgid "Login was unsuccessful. Please correct the errors and try again." -msgstr "La connexion a échoué. Veuillez corriger les erreurs et réessayer." - -#: ~/Themes/Corporate/Views/LogOn.ascx -#| msgid "Account Information" -msgid "Account Information" -msgstr "Informations du compte" - -#: ~/Themes/Corporate/Views/LogOn.ascx -#| msgid "Username:" -msgid "Username:" -msgstr "Nom d'utilisateur:" - -#: ~/Themes/Corporate/Views/LogOn.ascx -#| msgid "Password:" -msgid "Password:" -msgstr "Mot de passe:" - -#: ~/Themes/Corporate/Views/LogOn.ascx -#| msgid "Remember me?" -msgid "Remember me?" -msgstr "Se souvenir de moi?" - -#: ~/Themes/Corporate/Views/LogOn.ascx -#| msgid "Log On" -msgid "Log On" -msgstr "Connexion" - -#: ~/Themes/Corporate/Views/User.ascx -#| msgid "Welcome" -msgid "Welcome" -msgstr "Bienvenue" - -#: ~/Themes/Corporate/Views/User.ascx -#| msgid "Log Off" -msgid "Log Off" -msgstr "Déconnexion" - -#: ~/Themes/Corporate/Views/User.ascx -#| msgid "Login" -msgid "Login" -msgstr "Connexion" - -#: ~/Themes/Corporate/Views/DisplayTemplates/Items/Blogs.BlogPost.ListByArchive.ascx -#| msgid "Archives" -msgid "Archives" -msgstr "Archives" - -#: ~/Themes/Corporate/Views/DisplayTemplates/Parts/Comments.Comments.ascx -#| msgid "Comments have been disabled for this content." -msgid "Comments have been disabled for this content." -msgstr "Les commentaires ont été désactivés pour ce contenu." - -#: ~/Themes/Corporate/Views/DisplayTemplates/Parts/Comments.Comments.ascx -#| msgid "Add a Comment" -msgid "Add a Comment" -msgstr "Ajouter un commentaire" - -#: ~/Themes/Corporate/Views/DisplayTemplates/Parts/Comments.Comments.ascx -#| msgid "log on" -msgid "log on" -msgstr "Connexion" - -#: ~/Themes/Corporate/Views/DisplayTemplates/Parts/Comments.Comments.ascx -#| msgid "Name" -msgid "Name" -msgstr "Nom" - -#: ~/Themes/Corporate/Views/DisplayTemplates/Parts/Comments.Comments.ascx -#| msgid "Email" -msgid "Email" -msgstr "E-mail" - -#: ~/Themes/Corporate/Views/DisplayTemplates/Parts/Comments.Comments.ascx -#| msgid "Url" -msgid "Url" -msgstr "Url" - -#: ~/Themes/Corporate/Views/DisplayTemplates/Parts/Comments.Comments.ascx -#| msgid "Hi, {0}!" -msgid "Hi, {0}!" -msgstr "Bonjour {0}!" - -#: ~/Themes/Corporate/Views/DisplayTemplates/Parts/Comments.Comments.ascx -#| msgid "Comment" -msgid "Comment" -msgstr "Commentaire" - -#: ~/Themes/Corporate/Views/DisplayTemplates/Parts/Comments.Comments.ascx -#| msgid "Submit Comment" -msgid "Submit Comment" -msgstr "Envoyer le commentaire" - -#: ~/Themes/Corporate/Views/DisplayTemplates/Parts/Common.Metadata.ascx -#| msgid "nobody(?)" -msgid "nobody(?)" -msgstr "personne(?)" - -#: ~/Themes/Green/Views/DisplayTemplates/Parts/Common.Metadata.ascx -#| msgid "nobody(?)" -msgid "nobody(?)" -msgstr "personne(?)" - -#: ~/Themes/Green/Views/Orchard.Search/Search/Index.ascx -#| msgid "Search" -msgid "Search" -msgstr "Rechercher" - -#: ~/Themes/Corporate/Views/DisplayTemplates/Parts/Tags.ShowTags.ascx -#| msgid "Tags:" -msgid "Tags:" -msgstr "Étiquettes:" - -#: ~/Themes/Green/Views/Archives.ascx -#| msgid "Archives" -msgid "Archives" -msgstr "Archives" - -#: ~/Themes/Green/Views/Archives.ascx -#| msgid "None found" -msgid "None found" -msgstr "Aucune archive" - -#: ~/Themes/Green/Views/DisplayTemplates/Parts/Blogs.BlogPost.Metadata.ascx -#| msgid "Posted by {0} {1}" -msgid "Posted by {0} {1}" -msgstr "Posté par {0} {1}" - -#: ~/Themes/Green/Views/DisplayTemplates/Parts/Pages.Page.Metadata.ascx -#| msgid "nobody(?)" -msgid "nobody(?)" -msgstr "personne(?)" - -#: ~/Themes/TheAdmin/Views/Header.ascx -#| msgid "Project Orchard" -msgid "Project Orchard" -msgstr "Projet Orchard" - -#: ~/Themes/TheAdmin/Views/Header.ascx -#| msgid "Your Site" -msgid "Your Site" -msgstr "Votre site" - -#: ~/Themes/TheAdmin/Views/Layout.ascx -#| msgid "Skip to navigation" -msgid "Skip to navigation" -msgstr "Sauter vers la navigation" - -#: ~/Themes/TheAdmin/Views/User.ascx -#| msgid "User:" -msgid "User:" -msgstr "Utilisateur:" - -#: ~/Themes/TheAdmin/Views/User.ascx -#| msgid "Logout" -msgid "Logout" -msgstr "Déconnexion" - -#: ~/Commands/CommandHostAgent.cs -#| msgid "Tenant {0} does not exist" -msgid "Tenant {0} does not exist" -msgstr "L'appartement {0} n'existe pas." - -#: ~/Commands/CommandHostEnvironment.cs -#| msgid "A change of configuration requires the session to be restarted." -msgid "A change of configuration requires the session to be restarted." -msgstr "Un changement dans la configuration nécessite un redémarrage de la session." - -#: ~/Commands/DefaultCommandManager.cs -#| msgid "Multiple commands found matching arguments \"{0}\". Commands available: {1}." -msgid "Multiple commands found matching arguments \"{0}\". Commands available: {1}." -msgstr "De multiples commandes pouvant répondre aux arguments \"{0}\" ont été trouvées. Les commandes disponibles sont: {1}." - -#: ~/Commands/DefaultCommandManager.cs -#| msgid "No command found matching arguments \"{0}\". Commands available: {1}." -msgid "No command found matching arguments \"{0}\". Commands available: {1}." -msgstr "Aucune commande pouvant répondre aux arguments \"{0}\" n'a été trouvée. Les commandes disponibles sont: {1}." - -#: ~/Commands/DefaultOrchardCommandHandler.cs -#| msgid "Switch \"{0}\" was not found" -msgid "Switch \"{0}\" was not found" -msgstr "Le switch '{0}' n'a pas été trouvé." - -#: ~/Commands/DefaultOrchardCommandHandler.cs -#| msgid "A property \"{0}\" exists but is not decorated with \"{1}\"" -msgid "A property \"{0}\" exists but is not decorated with \"{1}\"" -msgstr "Il existe une propriété '{0}' mais elle n'est pas décorée avec l'attribut '{1}'." - -#: ~/Commands/DefaultOrchardCommandHandler.cs -#| msgid "No property named \"{0}\" found of type bool, int or string." -msgid "No property named \"{0}\" found of type bool, int or string." -msgstr "Aucune propriété '{0}' de type bool, int ou string n'a été trouvée." - -#: ~/Commands/DefaultOrchardCommandHandler.cs -#| msgid "Command arguments don't match" -msgid "Command arguments don't match" -msgstr "Les arguments de la commande ne coincident pas." - -#: ~/Commands/DefaultOrchardCommandHandler.cs -#| msgid "Method \"{0}\" does not support switch \"{1}\"." -msgid "Method \"{0}\" does not support switch \"{1}\"." -msgstr "La méthode '{0}' ne supporte pas le switch '{1}'." - -#: ~/Commands/Builtin/HelpCommand.cs -#| msgid "List of available commands:" -msgid "List of available commands:" -msgstr "Liste des commandes disponibles:" - -#: ~/Commands/Builtin/HelpCommand.cs -#| msgid "---------------------------" -msgid "---------------------------" -msgstr "--------------------------------" - -#: ~/Commands/Builtin/HelpCommand.cs -#| msgid "Command {0} doesn't exist" -msgid "Command {0} doesn't exist" -msgstr "La commande {0} n'existe pas." - -#: ~/Data/Migration/Commands/DataMigrationCommands.cs -#| msgid "An error occured while upgrading the database: " -msgid "An error occured while upgrading the database: " -msgstr "Une erreur s'est produite pendant la mise à niveau de la base de données: " - -#: ~/Data/Migration/Commands/DataMigrationCommands.cs -#| msgid "An error occured while updating the database: " -msgid "An error occured while updating the database: " -msgstr "Une erreur s'est produite pendant la mise à jour de la base de données: " - -#: ~/Data/Migration/Commands/DataMigrationCommands.cs -#| msgid "An error occured while creating the tables: " -msgid "An error occured while creating the tables: " -msgstr "Une erreur s'est produite durant la création des tables: " - -#: ~/Environment/Configuration/ShellSettingsManager.cs -#| msgid "There are no settings to save." -msgid "There are no settings to save." -msgstr "Il n'y a aucune configuration à sauver." - -#: ~/Environment/Configuration/ShellSettingsManager.cs -#| msgid "Settings \"Name\" is not set." -msgid "Settings \"Name\" is not set." -msgstr "Le paramètre de configuration \"Name\" n'est pas valorisé." - -#: ~/Environment/Extensions/ExtensionManager.cs -#| msgid "Feature {0} was not found in any of the installed extensions" -msgid "Feature {0} was not found in any of the installed extensions" -msgstr "La fonctionnalité {0} n'a été trouvée dans aucune extension." - -#: ~/Environment/Extensions/ExtensionManager.cs -#| msgid "Extension {0} is not active" -msgid "Extension {0} is not active" -msgstr "L'extension {0} n'est pas active." - -#: ~/Environment/Extensions/ExtensionManager.cs -#| msgid "extensionType was null or empty" -msgid "extensionType was null or empty" -msgstr "extensionType était nul ou vide." - -#: ~/Environment/Extensions/ExtensionManager.cs -#| msgid "extensionType was not recognized" -msgid "extensionType was not recognized" -msgstr "extensionType non reconnu." - -#: ~/Environment/Extensions/ExtensionManager.cs -#| msgid "extension was not found" -msgid "extension was not found" -msgstr "extension non trouvée." - -#: ~/Environment/Extensions/Compilers/DefaultExtensionCompiler.cs -#| msgid "Error compiling module \"{0}\" from file \"{1}\"" -msgid "Error compiling module \"{0}\" from file \"{1}\"" -msgstr "Erreur de compilation du module \"{0}\" dans le fichier \"{1}\"." - -#: ~/Events/DefaultOrchardEventBus.cs -#| msgid " is not formatted correctly" -msgid " is not formatted correctly" -msgstr " n'est pas correctement composé." - -#: ~/FileSystems/AppData/AppDataFolder.cs -#| msgid "Unable to make room for file \"{0}\" in \"App_Data\" folder: too many conflicts." -msgid "Unable to make room for file \"{0}\" in \"App_Data\" folder: too many conflicts." -msgstr "Impossible de faire de la place pour le fichier \"{0}\" dans le dossier \"App_Data\": trop de conflits." - -#: ~/Localization/Commands/CultureCommands.cs -#| msgid "Listing Cultures:" -msgid "Listing Cultures:" -msgstr "Énumération des cultures:" - -#: ~/Localization/Commands/CultureCommands.cs -#| msgid "Site Culture is {0}" -msgid "Site Culture is {0}" -msgstr "La culture du site est {0}." - -#: ~/Localization/Commands/CultureCommands.cs -#| msgid "Setting site culture to {0}" -msgid "Setting site culture to {0}" -msgstr "Modification de la culture du site vers {0}." - -#: ~/Localization/Commands/CultureCommands.cs -#| msgid "Supplied culture name {0} is not valid." -msgid "Supplied culture name {0} is not valid." -msgstr "La culture {0} spécifiée n'est pas valide." - -#: ~/Localization/Commands/CultureCommands.cs -#| msgid "Site culture set to {0} successfully" -msgid "Site culture set to {0} successfully" -msgstr "Culture du site fixée à {0}." - -#: ~/Mvc/Html/HtmlHelperExtensions.cs -#| msgid "'on' MMM d yyyy 'at' h:mm tt" -msgid "'on' MMM d yyyy 'at' h:mm tt" -msgstr "'le' d MMM yyyy 'à' h:mm tt" - -#: ~/Mvc/Html/HtmlHelperExtensions.cs -#| msgid "a moment ago" -msgid "a moment ago" -msgstr "il y a un instant" - -#: ~/Packaging/PackageExpander.cs -#| msgid "Unknown extension type \"{0}\"" -msgid "Unknown extension type \"{0}\"" -msgstr "Le type d'extension \"{0}\" est inconnu." - -#: ~/Security/Authorizer.cs -#| msgid "{0}. Anonymous users do not have {1} permission." -msgid "{0}. Anonymous users do not have {1} permission." -msgstr "{0}. Les utilisateurs anonymes n'ont pas la permission {1}." - -#: ~/Security/Authorizer.cs -#| msgid "{0}. Current user, {2}, does not have {1} permission." -msgid "{0}. Current user, {2}, does not have {1} permission." -msgstr "{0}. L'utilisateur en cours, {2}, n'a pas la permission {1}." - -#: ~/UI/Admin/AdminFilter.cs -#| msgid "Can't access the admin" -msgid "Can't access the admin" -msgstr "L'interface d'administration est inaccessible." - -#: ~/UI/Resources/ResourceManager.cs -#| msgid "Style fileName was not given." -msgid "Style fileName was not given." -msgstr "Le nom de fichier de feuille de style n'est pas spécifié." - -#: ~/UI/Resources/ResourceManager.cs -#| msgid "Head script fileName was not given." -msgid "Head script fileName was not given." -msgstr "Le nom de fichier de script d'en-tête n'est pas spécifié." - -#: ~/UI/Resources/ResourceManager.cs -#| msgid "Foot script fileName was not given." -msgid "Foot script fileName was not given." -msgstr "Le nom de fichier de script de bas de page n'est pas spécifié." - -#: ~/Environment/Configuration/AzureShellSettingsManager.cs -#| msgid "There are no settings to save." -msgid "There are no settings to save." -msgstr "Il n'y a pas de paramètre de configuration à sauver." - -#: ~/Environment/Configuration/AzureShellSettingsManager.cs -#| msgid "Settings \"Name\" is not set." -msgid "Settings \"Name\" is not set." -msgstr "Le paramètre de configuration \"Name\" n'est pas spécifié." - -#: ~/Themes/Classic/Views/DisplayTemplates/Items/Blogs.Blog.Summary.ascx -#| msgid "1 post" -msgid "1 post" -msgstr "1 billet" - -#: ~/Themes/Classic/Views/DisplayTemplates/Items/Blogs.Blog.Summary.ascx -#| msgid "{0} posts" -msgid "{0} posts" -msgstr "{0} billets" - -#: ~/Themes/ClassicDark/Views/DisplayTemplates/Items/Blogs.Blog.Summary.ascx -#| msgid "1 post" -msgid "1 post" -msgstr "1 billet" - -#: ~/Themes/ClassicDark/Views/DisplayTemplates/Items/Blogs.Blog.Summary.ascx -#| msgid "{0} posts" -msgid "{0} posts" -msgstr "{0} billets" - -#: ~/Themes/Green/Views/DisplayTemplates/Items/Blogs.Blog.Summary.ascx -#| msgid "1 post" -msgid "1 post" -msgstr "1 billet" - -#: ~/Themes/Green/Views/DisplayTemplates/Items/Blogs.Blog.Summary.ascx -#| msgid "{0} posts" -msgid "{0} posts" -msgstr "{0} billets" - -#: ~/Themes/Contoso/Views/DisplayTemplates/Parts/Comments.HasComments.ascx -#| msgid "1 Comment" -msgid "1 Comment" -msgstr "1 commentaire" - -#: ~/Themes/Contoso/Views/DisplayTemplates/Parts/Comments.HasComments.ascx -#| msgid "{0} Comments" -msgid "{0} Comments" -msgstr "{0} commentaires" - -#: ~/Themes/Corporate/Views/DisplayTemplates/Parts/Comments.HasComments.ascx -#| msgid "1 Comment" -msgid "1 Comment" -msgstr "1 commentaire" - -#: ~/Themes/Corporate/Views/DisplayTemplates/Parts/Comments.HasComments.ascx -#| msgid "{0} Comments" -msgid "{0} Comments" -msgstr "{0} commentaires" - -#: ~/Mvc/Html/HtmlHelperExtensions.cs -#| msgid "1 day ago" -msgid "1 day ago" -msgstr "il y a un jour" - -#: ~/Mvc/Html/HtmlHelperExtensions.cs -#| msgid "{0} days ago" -msgid "{0} days ago" -msgstr "il y a {0} jours" - -#: ~/Mvc/Html/HtmlHelperExtensions.cs -#| msgid "1 hour ago" -msgid "1 hour ago" -msgstr "il y a une heure" - -#: ~/Mvc/Html/HtmlHelperExtensions.cs -#| msgid "{0} hours ago" -msgid "{0} hours ago" -msgstr "il y a {0} heures" - -#: ~/Mvc/Html/HtmlHelperExtensions.cs -#| msgid "1 minute ago" -msgid "1 minute ago" -msgstr "il y a une minute" - -#: ~/Mvc/Html/HtmlHelperExtensions.cs -#| msgid "{0} minutes ago" -msgid "{0} minutes ago" -msgstr "il y a {0} minutes" - -#: ~/Mvc/Html/HtmlHelperExtensions.cs -#| msgid "1 second ago" -msgid "1 second ago" -msgstr "il y a une seconde" - -#: ~/Mvc/Html/HtmlHelperExtensions.cs -#| msgid "{0} seconds ago" -msgid "{0} seconds ago" -msgstr "il y a {0} secondes" - -#: ~/Modules/Orchard.Blogs/Views/BlogAdmin/List.ascx -#| msgid "1 post" -msgid "1 post" -msgstr "1 billet" - -#: ~/Modules/Orchard.Blogs/Views/BlogAdmin/List.ascx -#| msgid "{0} posts" -msgid "{0} posts" -msgstr "{0} billets" - -#: ~/Modules/Orchard.Blogs/Views/BlogAdmin/List.ascx -#| msgid "1 draft" -msgid "1 draft" -msgstr "1 brouillon" - -#: ~/Modules/Orchard.Blogs/Views/BlogAdmin/List.ascx -#| msgid "{0} drafts" -msgid "{0} drafts" -msgstr "{0} brouillons" - -#: ~/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.Blog.Summary.ascx -#| msgid "1 post" -msgid "1 post" -msgstr "1 billet" - -#: ~/Modules/Orchard.Blogs/Views/DisplayTemplates/Items/Blogs.Blog.Summary.ascx -#| msgid "{0} posts" -msgid "{0} posts" -msgstr "{0} billets" - -#: ~/Modules/Orchard.Comments/Extensions/HtmlHelperExtensions.cs -#| msgid "1 comment" -msgid "1 comment" -msgstr "1 commentaire" - -#: ~/Modules/Orchard.Comments/Extensions/HtmlHelperExtensions.cs -#| msgid "{0} comments" -msgid "{0} comments" -msgstr "{0} commentaires" - -#: ~/Modules/Orchard.Comments/Views/DisplayTemplates/Parts/Comments.Count.ascx -#| msgid "1 Comment" -msgid "1 Comment" -msgstr "1 commentaire" - -#: ~/Modules/Orchard.Comments/Views/DisplayTemplates/Parts/Comments.Count.ascx -#| msgid "{0} Comments" -msgid "{0} Comments" -msgstr "{0} commentaires" - -#: ~/Modules/Orchard.Comments/Views/DisplayTemplates/Parts/Comments.HasComments.ascx -#| msgid "1 Comment" -msgid "1 Comment" -msgstr "1 commentaire" - -#: ~/Modules/Orchard.Comments/Views/DisplayTemplates/Parts/Comments.HasComments.ascx -#| msgid "{0} Comments" -msgid "{0} Comments" -msgstr "{0} commentaires" - -#: ~/Modules/Orchard.Search/Views/Search/Index.ascx -#| msgid "the one result" -msgid "the one result" -msgstr "le seul résultat" - -#: ~/Modules/Orchard.Search/Views/Search/Index.ascx -#| msgid "zero results" -msgid "zero results" -msgstr "aucun résultat" - -#: ~/Modules/Orchard.Search/Views/Search/Index.ascx -#| msgid "{1} - {2} of {0} results" -msgid "{1} - {2} of {0} results" -msgstr "résultats {1} - {2} parmi {0} trouvés" - -#: ~/Modules/Orchard.Themes/DesignerNotes/ZoneManagerEvents.cs -#| msgid "Edit" -msgid "Edit" -msgstr "Modifier" diff --git a/src/Orchard.Web/Core/Orchard.Core.csproj b/src/Orchard.Web/Core/Orchard.Core.csproj index 4efebae2b..4be7b7e50 100644 --- a/src/Orchard.Web/Core/Orchard.Core.csproj +++ b/src/Orchard.Web/Core/Orchard.Core.csproj @@ -315,10 +315,10 @@ - - - + + + From 4a4ff6049a06e63f6050c145f00c04042d77b3fa Mon Sep 17 00:00:00 2001 From: Renaud Paquay Date: Fri, 26 Nov 2010 14:15:19 -0800 Subject: [PATCH 32/70] Add Microsoft.Web.Infrastructure to ~/bin This is necessary for deployment, as System.Web.Mvc loads this assembly at startup (before Orchard extension manager has the opportunity to copy the assembly to ~/App_Data/Dependencies --HG-- branch : dev --- src/Orchard.Web/Orchard.Web.csproj | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/Orchard.Web/Orchard.Web.csproj b/src/Orchard.Web/Orchard.Web.csproj index dfda58e62..7af3dfcab 100644 --- a/src/Orchard.Web/Orchard.Web.csproj +++ b/src/Orchard.Web/Orchard.Web.csproj @@ -28,6 +28,8 @@ prompt 4 ..\OrchardBasicCorrectness.ruleset + AllFilesInProjectFolder + false pdbonly @@ -51,6 +53,10 @@ False ..\..\lib\autofac\Autofac.Integration.Web.Mvc.dll + + False + ..\..\lib\aspnetmvc\Microsoft.Web.Infrastructure.dll + False ..\..\lib\fluentnhibernate\NHibernate.ByteCode.Castle.dll From b2eb5e2f668feed206163ebdb8d8c489a568bcf2 Mon Sep 17 00:00:00 2001 From: Nathan Heskew Date: Fri, 26 Nov 2010 14:46:37 -0800 Subject: [PATCH 33/70] Fixing how the default home page is configured during setup --HG-- branch : dev --- .../Modules/Orchard.Setup/Services/SetupService.cs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs b/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs index fe5d7a55c..55f72c3dc 100644 --- a/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs +++ b/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs @@ -246,13 +246,13 @@ namespace Orchard.Setup.Services { layerInitializer.CreateDefaultLayers(); // add a layer for the homepage - var homepageLayer = contentManager.Create("Layer"); + var homepageLayer = contentManager.Create("Layer", VersionOptions.Draft); homepageLayer.As().Name = "TheHomepage"; homepageLayer.As().LayerRule = "url \"~/\""; contentManager.Publish(homepageLayer); // and three more for the tripel...really need this elsewhere... - var tripelFirst = contentManager.Create("HtmlWidget"); + var tripelFirst = contentManager.Create("HtmlWidget", VersionOptions.Draft); tripelFirst.As().LayerPart = homepageLayer.As(); tripelFirst.As().Title = T("First Leader Aside").Text; tripelFirst.As().Zone = "TripelFirst"; @@ -260,7 +260,7 @@ namespace Orchard.Setup.Services { tripelFirst.As().Text = "

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur a nibh ut tortor dapibus vestibulum. Aliquam vel sem nibh. Suspendisse vel condimentum tellus.

"; contentManager.Publish(tripelFirst); - var tripelSecond = contentManager.Create("HtmlWidget"); + var tripelSecond = contentManager.Create("HtmlWidget", VersionOptions.Draft); tripelSecond.As().LayerPart = homepageLayer.As(); tripelSecond.As().Title = T("Second Leader Aside").Text; tripelSecond.As().Zone = "TripelSecond"; @@ -268,7 +268,7 @@ namespace Orchard.Setup.Services { tripelSecond.As().Text = "

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur a nibh ut tortor dapibus vestibulum. Aliquam vel sem nibh. Suspendisse vel condimentum tellus.

"; contentManager.Publish(tripelSecond); - var tripelThird = contentManager.Create("HtmlWidget"); + var tripelThird = contentManager.Create("HtmlWidget", VersionOptions.Draft); tripelThird.As().LayerPart = homepageLayer.As(); tripelThird.As().Title = T("Third Leader Aside").Text; tripelThird.As().Zone = "TripelThird"; @@ -278,8 +278,10 @@ namespace Orchard.Setup.Services { } // create a welcome page that's promoted to the home page - var page = contentManager.Create("Page"); + var page = contentManager.Create("Page", VersionOptions.Draft); page.As().Title = T("Welcome to Orchard!").Text; + page.As().Path = ""; + page.As().Slug = ""; page.As().Text = string.Format(CultureInfo.CurrentCulture, "

You’ve successfully setup your Orchard Site and this is the homepage of your new site. Here are a few things you can look at to get familiar with the application. Once you feel confident you don’t need this anymore, you can remove this by going into editing mode and replacing it with whatever you want.

First things first - You’ll probably want to manage your settings and configure Orchard to your liking. After that, you can head over to manage themes to change or install new themes and really make it your own. Once you’re happy with a look and feel, it’s time for some content. You can start creating new custom content types or start with some built-in ones by adding a page, creating a blog or managing your menus.

Finally, Orchard has been designed to be extended. It comes with a few built-in modules such as pages and blogs or themes. If you’re looking to add additional functionality, you can do so by creating your own module or installing a new one that someone has made. Modules are created by other users of Orchard just like you so if you feel up to it, please consider participating. XOXO – The Orchard Team

", page.Id); contentManager.Publish(page); From 4631207f51dad7da18ed473529f29377d7da9266 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Ros?= Date: Fri, 26 Nov 2010 17:02:22 -0800 Subject: [PATCH 34/70] Adding UI to change password - new Lost Password link in LogOng view - sends a reset link by mail Work Item: 16341 --HG-- branch : dev --- .../Controllers/AccountController.cs | 83 +++++++------- .../Controllers/AdminController.cs | 4 +- .../Handlers/ModerationMessageAlteration.cs | 7 +- .../Orchard.Users/Models/MessageTypes.cs | 1 + .../Orchard.Users/Orchard.Users.csproj | 3 + .../Orchard.Users/Services/IUserService.cs | 10 ++ .../Services/MembershipService.cs | 53 +-------- .../Orchard.Users/Services/UserService.cs | 101 +++++++++++++++++- .../Views/Account/ChangePassword.cshtml | 5 - .../Orchard.Users/Views/Account/LogOn.cshtml | 8 +- .../Views/Account/LostPassword.cshtml | 15 +++ src/Orchard/Security/IMembershipService.cs | 3 - 12 files changed, 191 insertions(+), 102 deletions(-) create mode 100644 src/Orchard.Web/Modules/Orchard.Users/Views/Account/LostPassword.cshtml diff --git a/src/Orchard.Web/Modules/Orchard.Users/Controllers/AccountController.cs b/src/Orchard.Web/Modules/Orchard.Users/Controllers/AccountController.cs index bfab4c451..4c199a891 100644 --- a/src/Orchard.Web/Modules/Orchard.Users/Controllers/AccountController.cs +++ b/src/Orchard.Web/Modules/Orchard.Users/Controllers/AccountController.cs @@ -12,6 +12,7 @@ using Orchard.Users.Services; using Orchard.Users.ViewModels; using Orchard.ContentManagement; using Orchard.Users.Models; +using Orchard.UI.Notify; namespace Orchard.Users.Controllers { [HandleError, Themed] @@ -119,8 +120,8 @@ namespace Orchard.Users.Controllers { if (user != null) { if ( user.As().EmailStatus == UserStatus.Pending ) { - string challengeToken = _membershipService.GetEncryptedChallengeToken(user.As()); - _membershipService.SendChallengeEmail(user.As(), Url.AbsoluteAction(() => Url.Action("ChallengeEmail", "Account", new { Area = "Orchard.Users", token = challengeToken }))); + string challengeToken = _userService.GetNonce(user.As()); + _userService.SendChallengeEmail(user.As(), Url.AbsoluteAction(() => Url.Action("ChallengeEmail", "Account", new { Area = "Orchard.Users", token = challengeToken }))); return RedirectToAction("ChallengeEmailSent"); } @@ -141,6 +142,36 @@ namespace Orchard.Users.Controllers { return Register(); } + public ActionResult LostPassword() { + return View(); + } + + [HttpPost] + public ActionResult LostPassword(string username) { + + if(String.IsNullOrWhiteSpace(username)){ + _orchardServices.Notifier.Error(T("Invalid username or E-mail")); + return View(); + } + + _userService.SendLostPasswordEmail(username, nonce => Url.AbsoluteAction(() => Url.Action("ValidateLostPassword", "Account", new { Area = "Orchard.Users", nonce = nonce }))); + + _orchardServices.Notifier.Information(T("Check your e-mail for the confirmation link.")); + + return RedirectToAction("LogOn"); + } + + public ActionResult ValidateLostPassword(string nonce) { + IUser user; + if (null != (user = _userService.ValidateLostPassword(nonce))) { + _authenticationService.SignIn(user, false); + return RedirectToAction("ChangePassword"); + } + else { + return new RedirectResult("~/"); + } + } + [Authorize] public ActionResult ChangePassword() { ViewData["PasswordLength"] = MinPasswordLength; @@ -150,32 +181,23 @@ namespace Orchard.Users.Controllers { [Authorize] [HttpPost] - [SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", - Justification = "Exceptions result in password not being changed.")] public ActionResult ChangePassword(string currentPassword, string newPassword, string confirmPassword) { ViewData["PasswordLength"] = MinPasswordLength; - if (!ValidateChangePassword(currentPassword, newPassword, confirmPassword)) { + if (newPassword == null || newPassword.Length < MinPasswordLength) { + ModelState.AddModelError("newPassword", T("You must specify a new password of {0} or more characters.", MinPasswordLength)); + } + + if (!String.Equals(newPassword, confirmPassword, StringComparison.Ordinal)) { + ModelState.AddModelError("_FORM", T("The new password and confirmation password do not match.")); + } + + if (!ModelState.IsValid) { return View(); } - try { - var validated = _membershipService.ValidateUser(User.Identity.Name, currentPassword); - - if (validated != null) { - _membershipService.SetPassword(validated, newPassword); - return RedirectToAction("ChangePasswordSuccess"); - } - else { - ModelState.AddModelError("_FORM", - T("The current password is incorrect or the new password is invalid.")); - return ChangePassword(); - } - } - catch { - ModelState.AddModelError("_FORM", T("The current password is incorrect or the new password is invalid.")); - return ChangePassword(); - } + _membershipService.SetPassword(_orchardServices.WorkContext.CurrentUser, newPassword); + return RedirectToAction("ChangePasswordSuccess"); } public ActionResult RegistrationPending() { @@ -199,7 +221,7 @@ namespace Orchard.Users.Controllers { } public ActionResult ChallengeEmail(string token) { - var user = _membershipService.ValidateChallengeToken(token); + var user = _userService.ValidateChallenge(token); if ( user != null ) { _authenticationService.SignIn(user, false /* createPersistentCookie */); @@ -217,21 +239,6 @@ namespace Orchard.Users.Controllers { #region Validation Methods - private bool ValidateChangePassword(string currentPassword, string newPassword, string confirmPassword) { - if (String.IsNullOrEmpty(currentPassword)) { - ModelState.AddModelError("currentPassword", T("You must specify a current password.")); - } - if (newPassword == null || newPassword.Length < MinPasswordLength) { - ModelState.AddModelError("newPassword", T("You must specify a new password of {0} or more characters.", MinPasswordLength)); - } - - if (!String.Equals(newPassword, confirmPassword, StringComparison.Ordinal)) { - ModelState.AddModelError("_FORM", T("The new password and confirmation password do not match.")); - } - - return ModelState.IsValid; - } - private IUser ValidateLogOn(string userNameOrEmail, string password) { bool validate = true; diff --git a/src/Orchard.Web/Modules/Orchard.Users/Controllers/AdminController.cs b/src/Orchard.Web/Modules/Orchard.Users/Controllers/AdminController.cs index 324e41672..96f8d3c05 100644 --- a/src/Orchard.Web/Modules/Orchard.Users/Controllers/AdminController.cs +++ b/src/Orchard.Web/Modules/Orchard.Users/Controllers/AdminController.cs @@ -197,8 +197,8 @@ namespace Orchard.Users.Controllers { var user = Services.ContentManager.Get(id); if ( user != null ) { - string challengeToken = _membershipService.GetEncryptedChallengeToken(user.As()); - _membershipService.SendChallengeEmail(user.As(), Url.AbsoluteAction(() => Url.Action("ChallengeEmail", "Account", new {Area = "Orchard.Users", token = challengeToken}))); + string challengeToken = _userService.GetNonce(user.As()); + _userService.SendChallengeEmail(user.As(), Url.AbsoluteAction(() => Url.Action("ChallengeEmail", "Account", new {Area = "Orchard.Users", token = challengeToken}))); } Services.Notifier.Information(T("Challenge email sent")); diff --git a/src/Orchard.Web/Modules/Orchard.Users/Handlers/ModerationMessageAlteration.cs b/src/Orchard.Web/Modules/Orchard.Users/Handlers/ModerationMessageAlteration.cs index 596a80ca6..932e4eacf 100644 --- a/src/Orchard.Web/Modules/Orchard.Users/Handlers/ModerationMessageAlteration.cs +++ b/src/Orchard.Web/Modules/Orchard.Users/Handlers/ModerationMessageAlteration.cs @@ -29,11 +29,16 @@ namespace Orchard.Users.Handlers { context.MailMessage.Body = T("The following user account needs to be moderated: {0}", recipient.UserName).Text; } - if ( context.Type == MessageTypes.Validation ) { + if (context.Type == MessageTypes.Validation) { context.MailMessage.Subject = T("User account validation").Text; context.MailMessage.Body = T("Dear {0}, please click here to validate you email address.", recipient.UserName, context.Properties["ChallengeUrl"]).Text; } + if (context.Type == MessageTypes.LostPassword) { + context.MailMessage.Subject = T("Lost password").Text; + context.MailMessage.Body = T("Dear {0}, please click here to change your password.", recipient.UserName, context.Properties["LostPasswordUrl"]).Text; + } + } public void Sent(MessageContext context) { diff --git a/src/Orchard.Web/Modules/Orchard.Users/Models/MessageTypes.cs b/src/Orchard.Web/Modules/Orchard.Users/Models/MessageTypes.cs index e63e44887..ee78118ba 100644 --- a/src/Orchard.Web/Modules/Orchard.Users/Models/MessageTypes.cs +++ b/src/Orchard.Web/Modules/Orchard.Users/Models/MessageTypes.cs @@ -7,6 +7,7 @@ namespace Orchard.Users.Models { public static class MessageTypes { public const string Moderation = "ORCHARD_USERS_MODERATION"; public const string Validation = "ORCHARD_USERS_VALIDATION"; + public const string LostPassword = "ORCHARD_USERS_RESETPASSWORD"; } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj b/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj index 8099ad4df..73a4fa092 100644 --- a/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj +++ b/src/Orchard.Web/Modules/Orchard.Users/Orchard.Users.csproj @@ -123,6 +123,9 @@
+ + + + + + + + + + + False + True + 47866 + / + + + False + True + http://orchard.codeplex.com + False + + + + + \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Properties/AssemblyInfo.cs b/src/Orchard.Web/Modules/Orchard.Scripting/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..59fc2ae50 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.InteropServices; +using System.Security; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Orchard.Scripting")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyProduct("Orchard.Scripting")] +[assembly: AssemblyCopyright("Copyright © Outercurve Foundation 2010")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("c3411c26-8f40-4126-85d9-ea38da650dcf")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("0.8.0")] +[assembly: AssemblyFileVersion("0.8.0")] +[assembly: SecurityTransparent] \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/ScriptingManager.cs b/src/Orchard.Web/Modules/Orchard.Scripting/ScriptingManager.cs similarity index 74% rename from src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/ScriptingManager.cs rename to src/Orchard.Web/Modules/Orchard.Scripting/ScriptingManager.cs index c97d4f67a..2ff114bd0 100644 --- a/src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/ScriptingManager.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/ScriptingManager.cs @@ -3,20 +3,29 @@ using System.Collections.Generic; using System.Linq; using Orchard.Caching; using Orchard.Localization; -using Orchard.Widgets.Services; -using Orchard.Widgets.SimpleScripting.Ast; +using Orchard.Scripting.SimpleScripting.Ast; using Orchard.Widgets.SimpleScripting.Compiler; namespace Orchard.Widgets.SimpleScripting { + public class GlobalMethodContext { + public string FunctionName { get; set; } + public IList Arguments { get; set; } + public object Result { get; set; } + } + + public interface IGlobalMethodProvider { + object Process(GlobalMethodContext context); + } + public interface IScriptingEngine : IDependency { bool Matches(string expression); } public class ScriptingEngine : IScriptingEngine { - private readonly IEnumerable _ruleProviders; + private readonly IEnumerable _ruleProviders; private readonly ICacheManager _cacheManager; - public ScriptingEngine(IEnumerable ruleProviders, ICacheManager cacheManager) { + public ScriptingEngine(IEnumerable ruleProviders, ICacheManager cacheManager) { _ruleProviders = ruleProviders; _cacheManager = cacheManager; T = NullLocalizer.Instance; @@ -60,7 +69,7 @@ namespace Orchard.Widgets.SimpleScripting { } private object Evaluate(string name, IEnumerable args) { - var ruleContext = new RuleContext { FunctionName = name, Arguments = args.ToArray() }; + var ruleContext = new GlobalMethodContext() { FunctionName = name, Arguments = args.ToArray() }; foreach (var ruleProvider in _ruleProviders) { ruleProvider.Process(ruleContext); diff --git a/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj b/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj index 3bb2827c3..2e85988db 100644 --- a/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj +++ b/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj @@ -75,23 +75,6 @@ - - - - - - - - - - - - - - - - - @@ -121,6 +104,10 @@ {2AD6973D-C7BB-416E-89FE-EEE34664E05F} Orchard.Scripting.Dlr + + {99002B65-86F7-415E-BF4A-381AA8AB9CCC} + Orchard.Scripting + diff --git a/src/Orchard.sln b/src/Orchard.sln index a324ef33a..e693992d6 100644 --- a/src/Orchard.sln +++ b/src/Orchard.sln @@ -100,6 +100,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orchard.Localization", "Orc EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orchard.Scripting.Dlr", "Orchard.Web\Modules\Orchard.Scripting.Dlr\Orchard.Scripting.Dlr.csproj", "{2AD6973D-C7BB-416E-89FE-EEE34664E05F}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orchard.Scripting", "Orchard.Web\Modules\Orchard.Scripting\Orchard.Scripting.csproj", "{99002B65-86F7-415E-BF4A-381AA8AB9CCC}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution CodeCoverage|Any CPU = CodeCoverage|Any CPU @@ -536,6 +538,16 @@ Global {2AD6973D-C7BB-416E-89FE-EEE34664E05F}.FxCop|Any CPU.Build.0 = Release|Any CPU {2AD6973D-C7BB-416E-89FE-EEE34664E05F}.Release|Any CPU.ActiveCfg = Release|Any CPU {2AD6973D-C7BB-416E-89FE-EEE34664E05F}.Release|Any CPU.Build.0 = Release|Any CPU + {99002B65-86F7-415E-BF4A-381AA8AB9CCC}.CodeCoverage|Any CPU.ActiveCfg = Release|Any CPU + {99002B65-86F7-415E-BF4A-381AA8AB9CCC}.CodeCoverage|Any CPU.Build.0 = Release|Any CPU + {99002B65-86F7-415E-BF4A-381AA8AB9CCC}.Coverage|Any CPU.ActiveCfg = Release|Any CPU + {99002B65-86F7-415E-BF4A-381AA8AB9CCC}.Coverage|Any CPU.Build.0 = Release|Any CPU + {99002B65-86F7-415E-BF4A-381AA8AB9CCC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {99002B65-86F7-415E-BF4A-381AA8AB9CCC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {99002B65-86F7-415E-BF4A-381AA8AB9CCC}.FxCop|Any CPU.ActiveCfg = Release|Any CPU + {99002B65-86F7-415E-BF4A-381AA8AB9CCC}.FxCop|Any CPU.Build.0 = Release|Any CPU + {99002B65-86F7-415E-BF4A-381AA8AB9CCC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {99002B65-86F7-415E-BF4A-381AA8AB9CCC}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -570,6 +582,7 @@ Global {085948FF-0E9B-4A9A-B564-F8B8B4BDDDBC} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5} {FBC8B571-ED50-49D8-8D9D-64AB7454A0D6} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5} {2AD6973D-C7BB-416E-89FE-EEE34664E05F} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5} + {99002B65-86F7-415E-BF4A-381AA8AB9CCC} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5} {ABC826D4-2FA1-4F2F-87DE-E6095F653810} = {74E681ED-FECC-4034-B9BD-01B0BB1BDECA} {F112851D-B023-4746-B6B1-8D2E5AD8F7AA} = {74E681ED-FECC-4034-B9BD-01B0BB1BDECA} {6CB3EB30-F725-45C0-9742-42599BA8E8D2} = {74E681ED-FECC-4034-B9BD-01B0BB1BDECA} From 14dd1c754f5cb72705c3f61c039acc2084ebb7d8 Mon Sep 17 00:00:00 2001 From: Renaud Paquay Date: Sun, 28 Nov 2010 11:01:34 -0800 Subject: [PATCH 54/70] Rename namespaces to match file locations --HG-- branch : dev --- src/Orchard.Tests.Modules/Scripting/EvaluatorTests.cs | 2 +- src/Orchard.Tests.Modules/Scripting/ParserTests.cs | 5 ++--- .../Scripting/SimpleScriptingTests.cs | 2 +- src/Orchard.Tests.Modules/Scripting/TokenizerTests.cs | 2 +- .../Modules/Orchard.Scripting/Ast/AbstractSyntaxTree.cs | 3 +-- src/Orchard.Web/Modules/Orchard.Scripting/Ast/AstNode.cs | 2 +- .../Modules/Orchard.Scripting/Ast/AstVisitor.cs | 2 +- .../Modules/Orchard.Scripting/Ast/BinaryAstNode.cs | 7 +++---- .../Modules/Orchard.Scripting/Ast/ConstantAstNode.cs | 4 ++-- .../Modules/Orchard.Scripting/Ast/ErrorAstNode.cs | 4 ++-- .../Modules/Orchard.Scripting/Ast/IAstNodeWithToken.cs | 4 ++-- .../Modules/Orchard.Scripting/Ast/MethodCallAstNode.cs | 4 ++-- .../Modules/Orchard.Scripting/Ast/UnaryAstNode.cs | 4 ++-- .../Modules/Orchard.Scripting/Compiler/Interpreter.cs | 5 ++--- .../Orchard.Scripting/Compiler/InterpreterVisitor.cs | 4 ++-- .../Modules/Orchard.Scripting/Compiler/Lexer.cs | 2 +- .../Modules/Orchard.Scripting/Compiler/Parser.cs | 8 +++----- .../Modules/Orchard.Scripting/Compiler/Token.cs | 2 +- .../Modules/Orchard.Scripting/Compiler/TokenKind.cs | 2 +- .../Modules/Orchard.Scripting/Compiler/Tokenizer.cs | 2 +- .../Modules/Orchard.Scripting/ScriptingManager.cs | 6 +++--- 21 files changed, 35 insertions(+), 41 deletions(-) diff --git a/src/Orchard.Tests.Modules/Scripting/EvaluatorTests.cs b/src/Orchard.Tests.Modules/Scripting/EvaluatorTests.cs index ba2c2bf82..ba8f11835 100644 --- a/src/Orchard.Tests.Modules/Scripting/EvaluatorTests.cs +++ b/src/Orchard.Tests.Modules/Scripting/EvaluatorTests.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.Linq; using NUnit.Framework; -using Orchard.Widgets.SimpleScripting.Compiler; +using Orchard.Scripting.Compiler; namespace Orchard.Tests.Modules.Scripting { [TestFixture] diff --git a/src/Orchard.Tests.Modules/Scripting/ParserTests.cs b/src/Orchard.Tests.Modules/Scripting/ParserTests.cs index 2444481aa..0397bec99 100644 --- a/src/Orchard.Tests.Modules/Scripting/ParserTests.cs +++ b/src/Orchard.Tests.Modules/Scripting/ParserTests.cs @@ -1,9 +1,8 @@ using System; using System.Diagnostics; using NUnit.Framework; -using Orchard.Scripting.SimpleScripting.Ast; -using Orchard.Widgets.SimpleScripting.Ast; -using Orchard.Widgets.SimpleScripting.Compiler; +using Orchard.Scripting.Ast; +using Orchard.Scripting.Compiler; namespace Orchard.Tests.Modules.Scripting { [TestFixture] diff --git a/src/Orchard.Tests.Modules/Scripting/SimpleScriptingTests.cs b/src/Orchard.Tests.Modules/Scripting/SimpleScriptingTests.cs index a93eaeb3f..6167ecdc5 100644 --- a/src/Orchard.Tests.Modules/Scripting/SimpleScriptingTests.cs +++ b/src/Orchard.Tests.Modules/Scripting/SimpleScriptingTests.cs @@ -1,8 +1,8 @@ using System.Linq; using NUnit.Framework; +using Orchard.Scripting; using Orchard.Tests.Stubs; using Orchard.Widgets.Services; -using Orchard.Widgets.SimpleScripting; namespace Orchard.Tests.Modules.Scripting { [TestFixture] diff --git a/src/Orchard.Tests.Modules/Scripting/TokenizerTests.cs b/src/Orchard.Tests.Modules/Scripting/TokenizerTests.cs index 48a72f996..38f74a903 100644 --- a/src/Orchard.Tests.Modules/Scripting/TokenizerTests.cs +++ b/src/Orchard.Tests.Modules/Scripting/TokenizerTests.cs @@ -1,5 +1,5 @@ using NUnit.Framework; -using Orchard.Widgets.SimpleScripting.Compiler; +using Orchard.Scripting.Compiler; namespace Orchard.Tests.Modules.Scripting { [TestFixture] diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Ast/AbstractSyntaxTree.cs b/src/Orchard.Web/Modules/Orchard.Scripting/Ast/AbstractSyntaxTree.cs index 9ad771174..4ae52fef0 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/Ast/AbstractSyntaxTree.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Ast/AbstractSyntaxTree.cs @@ -1,7 +1,6 @@ using System.Collections.Generic; -using Orchard.Widgets.SimpleScripting.Ast; -namespace Orchard.Scripting.SimpleScripting.Ast { +namespace Orchard.Scripting.Ast { public class AbstractSyntaxTree { public AstNode Root { get; set; } diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Ast/AstNode.cs b/src/Orchard.Web/Modules/Orchard.Scripting/Ast/AstNode.cs index 6cc22b983..d5f22dc53 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/Ast/AstNode.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Ast/AstNode.cs @@ -2,7 +2,7 @@ using System.Linq; using System.Text; -namespace Orchard.Widgets.SimpleScripting.Ast { +namespace Orchard.Scripting.Ast { public abstract class AstNode { public virtual IEnumerable Children { get { diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Ast/AstVisitor.cs b/src/Orchard.Web/Modules/Orchard.Scripting/Ast/AstVisitor.cs index 6999d25f2..0ae94024b 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/Ast/AstVisitor.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Ast/AstVisitor.cs @@ -1,6 +1,6 @@ using System.Linq; -namespace Orchard.Widgets.SimpleScripting.Ast { +namespace Orchard.Scripting.Ast { public class AstVisitor { public virtual object Visit(AstNode node) { return node.Accept(this); diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Ast/BinaryAstNode.cs b/src/Orchard.Web/Modules/Orchard.Scripting/Ast/BinaryAstNode.cs index 88ee38098..1764fc60c 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/Ast/BinaryAstNode.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Ast/BinaryAstNode.cs @@ -1,8 +1,7 @@ -using System; -using System.Collections.Generic; -using Orchard.Widgets.SimpleScripting.Compiler; +using System.Collections.Generic; +using Orchard.Scripting.Compiler; -namespace Orchard.Widgets.SimpleScripting.Ast { +namespace Orchard.Scripting.Ast { public class BinaryAstNode : AstNode, IAstNodeWithToken { private readonly AstNode _left; private readonly Token _token; diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Ast/ConstantAstNode.cs b/src/Orchard.Web/Modules/Orchard.Scripting/Ast/ConstantAstNode.cs index 3afd3ee91..040dc39de 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/Ast/ConstantAstNode.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Ast/ConstantAstNode.cs @@ -1,6 +1,6 @@ -using Orchard.Widgets.SimpleScripting.Compiler; +using Orchard.Scripting.Compiler; -namespace Orchard.Widgets.SimpleScripting.Ast { +namespace Orchard.Scripting.Ast { public class ConstantAstNode : AstNode, IAstNodeWithToken { private readonly Token _token; diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Ast/ErrorAstNode.cs b/src/Orchard.Web/Modules/Orchard.Scripting/Ast/ErrorAstNode.cs index c7aa6b455..801c152f8 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/Ast/ErrorAstNode.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Ast/ErrorAstNode.cs @@ -1,7 +1,7 @@ using System; -using Orchard.Widgets.SimpleScripting.Compiler; +using Orchard.Scripting.Compiler; -namespace Orchard.Widgets.SimpleScripting.Ast { +namespace Orchard.Scripting.Ast { public class ErrorAstNode : AstNode, IAstNodeWithToken { private readonly Token _token; private readonly string _message; diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Ast/IAstNodeWithToken.cs b/src/Orchard.Web/Modules/Orchard.Scripting/Ast/IAstNodeWithToken.cs index 6321d1f5d..d1f005adc 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/Ast/IAstNodeWithToken.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Ast/IAstNodeWithToken.cs @@ -1,6 +1,6 @@ -using Orchard.Widgets.SimpleScripting.Compiler; +using Orchard.Scripting.Compiler; -namespace Orchard.Widgets.SimpleScripting.Ast { +namespace Orchard.Scripting.Ast { public interface IAstNodeWithToken { Token Token { get; } } diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Ast/MethodCallAstNode.cs b/src/Orchard.Web/Modules/Orchard.Scripting/Ast/MethodCallAstNode.cs index 52b98f763..e04ce4e13 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/Ast/MethodCallAstNode.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Ast/MethodCallAstNode.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; -using Orchard.Widgets.SimpleScripting.Compiler; +using Orchard.Scripting.Compiler; -namespace Orchard.Widgets.SimpleScripting.Ast { +namespace Orchard.Scripting.Ast { public class MethodCallAstNode : AstNode, IAstNodeWithToken { private readonly Token _token; private readonly IList _arguments; diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Ast/UnaryAstNode.cs b/src/Orchard.Web/Modules/Orchard.Scripting/Ast/UnaryAstNode.cs index 7f9f4b756..d26449df7 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/Ast/UnaryAstNode.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Ast/UnaryAstNode.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; -using Orchard.Widgets.SimpleScripting.Compiler; +using Orchard.Scripting.Compiler; -namespace Orchard.Widgets.SimpleScripting.Ast { +namespace Orchard.Scripting.Ast { public class UnaryAstNode : AstNode, IAstNodeWithToken { private readonly AstNode _operand; private readonly Token _token; diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Interpreter.cs b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Interpreter.cs index 2a461b2e9..54a05aa8c 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Interpreter.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Interpreter.cs @@ -1,9 +1,8 @@ using System; using System.Collections.Generic; -using Orchard.Scripting.SimpleScripting.Ast; -using Orchard.Widgets.SimpleScripting.Ast; +using Orchard.Scripting.Ast; -namespace Orchard.Widgets.SimpleScripting.Compiler { +namespace Orchard.Scripting.Compiler { public class Interpreter { public EvaluationResult Evalutate(EvaluationContext context) { return new InterpreterVisitor(context).Evaluate(); diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/InterpreterVisitor.cs b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/InterpreterVisitor.cs index 9805d6d5a..760f38e7a 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/InterpreterVisitor.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/InterpreterVisitor.cs @@ -1,8 +1,8 @@ using System; using System.Linq; -using Orchard.Widgets.SimpleScripting.Ast; +using Orchard.Scripting.Ast; -namespace Orchard.Widgets.SimpleScripting.Compiler { +namespace Orchard.Scripting.Compiler { public class InterpreterVisitor : AstVisitor { private readonly EvaluationContext _context; diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Lexer.cs b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Lexer.cs index 6f70710ca..18a5cc13d 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Lexer.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Lexer.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; -namespace Orchard.Widgets.SimpleScripting.Compiler { +namespace Orchard.Scripting.Compiler { public class Lexer { private readonly Tokenizer _tokenizer; private readonly List _tokens= new List(); diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Parser.cs b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Parser.cs index 63b93eda6..9812ab752 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Parser.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Parser.cs @@ -1,9 +1,7 @@ -using System; -using System.Collections.Generic; -using Orchard.Scripting.SimpleScripting.Ast; -using Orchard.Widgets.SimpleScripting.Ast; +using System.Collections.Generic; +using Orchard.Scripting.Ast; -namespace Orchard.Widgets.SimpleScripting.Compiler { +namespace Orchard.Scripting.Compiler { public class Parser { private readonly string _expression; private readonly Lexer _lexer; diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Token.cs b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Token.cs index 7514ece05..e813d9be8 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Token.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Token.cs @@ -1,6 +1,6 @@ using System; -namespace Orchard.Widgets.SimpleScripting.Compiler { +namespace Orchard.Scripting.Compiler { public class Token { public TokenKind Kind { get; set; } public int Position { get; set; } diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/TokenKind.cs b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/TokenKind.cs index dd6f8245e..a7b5e2dcc 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/TokenKind.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/TokenKind.cs @@ -1,4 +1,4 @@ -namespace Orchard.Widgets.SimpleScripting.Compiler { +namespace Orchard.Scripting.Compiler { public enum TokenKind { Eof, OpenParen, diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Tokenizer.cs b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Tokenizer.cs index 94b5952eb..4ff5d3c09 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Tokenizer.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Tokenizer.cs @@ -1,7 +1,7 @@ using System; using System.Text; -namespace Orchard.Widgets.SimpleScripting.Compiler { +namespace Orchard.Scripting.Compiler { public class Tokenizer { private readonly string _expression; private readonly StringBuilder _stringBuilder; diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/ScriptingManager.cs b/src/Orchard.Web/Modules/Orchard.Scripting/ScriptingManager.cs index 2ff114bd0..ab2d8dda1 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/ScriptingManager.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/ScriptingManager.cs @@ -3,10 +3,10 @@ using System.Collections.Generic; using System.Linq; using Orchard.Caching; using Orchard.Localization; -using Orchard.Scripting.SimpleScripting.Ast; -using Orchard.Widgets.SimpleScripting.Compiler; +using Orchard.Scripting.Ast; +using Orchard.Scripting.Compiler; -namespace Orchard.Widgets.SimpleScripting { +namespace Orchard.Scripting { public class GlobalMethodContext { public string FunctionName { get; set; } public IList Arguments { get; set; } From f96abb981a8562f566340d394ef05cb74484bf81 Mon Sep 17 00:00:00 2001 From: Renaud Paquay Date: Sun, 28 Nov 2010 12:03:11 -0800 Subject: [PATCH 55/70] Replace dlr scripting implementation with the new lightweight engine DLR scripting engine still available in new Orchard.Scripting.Dlr module --HG-- branch : dev rename : src/Orchard.Web/Modules/Orchard.Scripting/ScriptingManager.cs => src/Orchard.Web/Modules/Orchard.Scripting/ScriptExpressionEvaluator.cs --- .../Scripting/SimpleScriptingTests.cs | 18 ++-- .../Modules/Orchard.Scripting.Dlr/Module.txt | 3 +- .../Orchard.Scripting.Dlr.csproj | 5 ++ .../Services/RubyScriptExpressionEvaluator.cs | 71 ++++++++++++++++ .../IGlobalMethodProvider.cs | 13 +++ .../IScriptExpressionEvaluator.cs | 4 +- .../Modules/Orchard.Scripting/Module.txt | 9 +- .../Orchard.Scripting.csproj | 3 +- ...anager.cs => ScriptExpressionEvaluator.cs} | 50 ++++------- .../Orchard.Widgets/Orchard.Widgets.csproj | 8 -- .../Orchard.Widgets/RuleEngine/RuleManager.cs | 82 ++++++++----------- 11 files changed, 159 insertions(+), 107 deletions(-) create mode 100644 src/Orchard.Web/Modules/Orchard.Scripting.Dlr/Services/RubyScriptExpressionEvaluator.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Scripting/IGlobalMethodProvider.cs rename src/Orchard.Web/Modules/Orchard.Scripting/{ScriptingManager.cs => ScriptExpressionEvaluator.cs} (50%) diff --git a/src/Orchard.Tests.Modules/Scripting/SimpleScriptingTests.cs b/src/Orchard.Tests.Modules/Scripting/SimpleScriptingTests.cs index 6167ecdc5..0c5ea4cb0 100644 --- a/src/Orchard.Tests.Modules/Scripting/SimpleScriptingTests.cs +++ b/src/Orchard.Tests.Modules/Scripting/SimpleScriptingTests.cs @@ -2,30 +2,24 @@ using NUnit.Framework; using Orchard.Scripting; using Orchard.Tests.Stubs; -using Orchard.Widgets.Services; namespace Orchard.Tests.Modules.Scripting { [TestFixture] public class SimpleScriptingTests { [Test] public void EngineThrowsSyntaxErrors() { - var engine = new ScriptingEngine(Enumerable.Empty(), new StubCacheManager()); - Assert.That(() => engine.Matches("true+"), Throws.Exception); - } - [Test] - public void EngineThrowsEvalErrors() { - var engine = new ScriptingEngine(Enumerable.Empty(), new StubCacheManager()); - Assert.That(() => engine.Matches("1 + 1"), Throws.Exception); + var engine = new ScriptExpressionEvaluator(new StubCacheManager()); + Assert.That(() => engine.Evaluate("true+", Enumerable.Empty()), Throws.Exception); } [Test] public void EngineUnderstandsPrimitiveValues() { - var engine = new ScriptingEngine(Enumerable.Empty(), new StubCacheManager()); - Assert.That(engine.Matches("true"), Is.True); + var engine = new ScriptExpressionEvaluator(new StubCacheManager()); + Assert.That(engine.Evaluate("true", Enumerable.Empty()), Is.True); } [Test] public void EngineUnderstandsPrimitiveValues2() { - var engine = new ScriptingEngine(Enumerable.Empty(), new StubCacheManager()); - Assert.That(engine.Matches("true and true"), Is.True); + var engine = new ScriptExpressionEvaluator(new StubCacheManager()); + Assert.That(engine.Evaluate("true and true", Enumerable.Empty()), Is.True); } } } diff --git a/src/Orchard.Web/Modules/Orchard.Scripting.Dlr/Module.txt b/src/Orchard.Web/Modules/Orchard.Scripting.Dlr/Module.txt index 6377fe9e4..de048976b 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting.Dlr/Module.txt +++ b/src/Orchard.Web/Modules/Orchard.Scripting.Dlr/Module.txt @@ -7,5 +7,6 @@ OrchardVersion: 0.8.0 Description: The DLR scripting module enables the possibility to execute scripts using the DLR. Features: Orchard.Scripting.Dlr: - Description: DLR Scripting support. + Description: DLR scripting support. + Dependencies: Orchard.Scripting Category: Scripting \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Scripting.Dlr/Orchard.Scripting.Dlr.csproj b/src/Orchard.Web/Modules/Orchard.Scripting.Dlr/Orchard.Scripting.Dlr.csproj index 171d5a3d6..be1030a80 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting.Dlr/Orchard.Scripting.Dlr.csproj +++ b/src/Orchard.Web/Modules/Orchard.Scripting.Dlr/Orchard.Scripting.Dlr.csproj @@ -62,6 +62,7 @@ + @@ -73,6 +74,10 @@ Orchard.Framework True + + {99002B65-86F7-415E-BF4A-381AA8AB9CCC} + Orchard.Scripting + diff --git a/src/Orchard.Web/Modules/Orchard.Scripting.Dlr/Services/RubyScriptExpressionEvaluator.cs b/src/Orchard.Web/Modules/Orchard.Scripting.Dlr/Services/RubyScriptExpressionEvaluator.cs new file mode 100644 index 000000000..85c6a717e --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Scripting.Dlr/Services/RubyScriptExpressionEvaluator.cs @@ -0,0 +1,71 @@ +using System.Collections.Generic; +using System.Linq; +using Microsoft.Scripting.Hosting; +using Orchard.Caching; + +namespace Orchard.Scripting.Dlr.Services { + public class RubyScriptExpressionEvaluator : IScriptExpressionEvaluator { + private readonly IScriptingManager _scriptingManager; + private readonly ICacheManager _cacheManager; + + public RubyScriptExpressionEvaluator(IScriptingManager scriptingManager, ICacheManager cacheManager) { + _scriptingManager = scriptingManager; + _cacheManager = cacheManager; + } + + public object Evaluate(string expression, IEnumerable providers) { + object execContextType = _cacheManager.Get("---", ctx => (object)_scriptingManager.ExecuteExpression(@" +class ExecBlock + def initialize(callbacks) + @callbacks = callbacks + end + def method_missing(name, *args, &block) + @callbacks.send(name, args, &block); + end +end +class ExecContext + class << self + def alloc(thing) + instance_eval 'self.new {' + thing + '}' + end + end + def initialize(&block) + @block = block + end + def evaluate(callbacks) + ExecBlock.new(callbacks).instance_eval(&@block) + end +end +ExecContext + ")); + var ops = _cacheManager.Get("----", ctx => (ObjectOperations)_scriptingManager.ExecuteOperation(x => x)); + object execContext = _cacheManager.Get(expression, ctx => (object)ops.InvokeMember(execContextType, "alloc", expression)); + dynamic result = ops.InvokeMember(execContext, "evaluate", new CallbackApi(this, providers)); + return result; + } + + public class CallbackApi { + private readonly RubyScriptExpressionEvaluator _ruleManager; + private readonly IEnumerable _providers; + + public CallbackApi(RubyScriptExpressionEvaluator ruleManager, IEnumerable providers) { + _ruleManager = ruleManager; + _providers = providers; + } + + public object send(string name, IList args) { + return _ruleManager.Evaluate(_providers, name, args); + } + } + + private object Evaluate(IEnumerable providers, string name, IList args) { + GlobalMethodContext ruleContext = new GlobalMethodContext { FunctionName = name, Arguments = args.ToArray() }; + + foreach (var ruleProvider in providers) { + ruleProvider.Process(ruleContext); + } + + return ruleContext.Result; + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/IGlobalMethodProvider.cs b/src/Orchard.Web/Modules/Orchard.Scripting/IGlobalMethodProvider.cs new file mode 100644 index 000000000..73b214ba7 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Scripting/IGlobalMethodProvider.cs @@ -0,0 +1,13 @@ +using System.Collections.Generic; + +namespace Orchard.Scripting { + public interface IGlobalMethodProvider { + void Process(GlobalMethodContext context); + } + + public class GlobalMethodContext { + public string FunctionName { get; set; } + public IList Arguments { get; set; } + public object Result { get; set; } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/IScriptExpressionEvaluator.cs b/src/Orchard.Web/Modules/Orchard.Scripting/IScriptExpressionEvaluator.cs index d89e3f654..e2f780863 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/IScriptExpressionEvaluator.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/IScriptExpressionEvaluator.cs @@ -1,5 +1,7 @@ - +using System.Collections.Generic; + namespace Orchard.Scripting { public interface IScriptExpressionEvaluator : ISingletonDependency { + object Evaluate(string expression, IEnumerable providers); } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Module.txt b/src/Orchard.Web/Modules/Orchard.Scripting/Module.txt index bbd65ad49..14bf4da83 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/Module.txt +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Module.txt @@ -6,6 +6,11 @@ Version: 0.8.0 OrchardVersion: 0.8.0 Description: The scripting module enables the possibility to execute scripts using a simple custom scripting language. Features: - Orchard.Scripting.: - Description: Simple scripting support. + Orchard.Scripting: + Description: Scripting support. + Category: Scripting + Orchard.Scripting.Lightweight: + Name: Lightweight scripting + Description: Custom lightweight and simple scripting language. + Dependencies: Orchard.Scripting Category: Scripting \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Orchard.Scripting.csproj b/src/Orchard.Web/Modules/Orchard.Scripting/Orchard.Scripting.csproj index 330f12637..266f7ac92 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/Orchard.Scripting.csproj +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Orchard.Scripting.csproj @@ -54,6 +54,7 @@ + @@ -63,7 +64,7 @@ - + diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/ScriptingManager.cs b/src/Orchard.Web/Modules/Orchard.Scripting/ScriptExpressionEvaluator.cs similarity index 50% rename from src/Orchard.Web/Modules/Orchard.Scripting/ScriptingManager.cs rename to src/Orchard.Web/Modules/Orchard.Scripting/ScriptExpressionEvaluator.cs index ab2d8dda1..a7e4a615b 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/ScriptingManager.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/ScriptExpressionEvaluator.cs @@ -2,38 +2,24 @@ using System.Collections.Generic; using System.Linq; using Orchard.Caching; +using Orchard.Environment.Extensions; using Orchard.Localization; using Orchard.Scripting.Ast; using Orchard.Scripting.Compiler; namespace Orchard.Scripting { - public class GlobalMethodContext { - public string FunctionName { get; set; } - public IList Arguments { get; set; } - public object Result { get; set; } - } - - public interface IGlobalMethodProvider { - object Process(GlobalMethodContext context); - } - - public interface IScriptingEngine : IDependency { - bool Matches(string expression); - } - - public class ScriptingEngine : IScriptingEngine { - private readonly IEnumerable _ruleProviders; + [OrchardFeature("Orchard.Scripting.Lightweight")] + public class ScriptExpressionEvaluator : IScriptExpressionEvaluator { private readonly ICacheManager _cacheManager; - public ScriptingEngine(IEnumerable ruleProviders, ICacheManager cacheManager) { - _ruleProviders = ruleProviders; + public ScriptExpressionEvaluator(ICacheManager cacheManager) { _cacheManager = cacheManager; T = NullLocalizer.Instance; } public Localizer T { get; set; } - public bool Matches(string expression) { + public object Evaluate(string expression, IEnumerable providers) { var expr = _cacheManager.Get(expression, ctx => { var ast = ParseExpression(expression); return new { Tree = ast, Errors = ast.GetErrors().ToList() }; @@ -44,38 +30,38 @@ namespace Orchard.Scripting { throw new OrchardException(T("Syntax error: {0}", expr.Errors.First().Message)); } - var result = EvaluateExpression(expr.Tree); + var result = EvaluateExpression(expr.Tree, providers); if (result.IsError) { throw new ApplicationException(result.Error.Message); } - if (!result.IsBool) { - throw new OrchardException(T("Expression is not a boolean value")); - } - - return result.BoolValue; + return result.Value; } private AbstractSyntaxTree ParseExpression(string expression) { return new Parser(expression).Parse(); } - private EvaluationResult EvaluateExpression(AbstractSyntaxTree tree) { + private EvaluationResult EvaluateExpression(AbstractSyntaxTree tree, IEnumerable providers) { var context = new EvaluationContext { Tree = tree, - MethodInvocationCallback = (m, args) => Evaluate(m, args) + MethodInvocationCallback = (m, args) => Evaluate(providers, m, args) }; return new Interpreter().Evalutate(context); } - private object Evaluate(string name, IEnumerable args) { - var ruleContext = new GlobalMethodContext() { FunctionName = name, Arguments = args.ToArray() }; + private object Evaluate(IEnumerable globalMethodProviders, string name, IEnumerable args) { + var globalMethodContext = new GlobalMethodContext { + FunctionName = name, + Arguments = args.ToArray(), + Result = null + }; - foreach (var ruleProvider in _ruleProviders) { - ruleProvider.Process(ruleContext); + foreach (var globalMethodProvider in globalMethodProviders) { + globalMethodProvider.Process(globalMethodContext); } - return ruleContext.Result; + return globalMethodContext.Result; } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj b/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj index 2e85988db..cbc367726 100644 --- a/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj +++ b/src/Orchard.Web/Modules/Orchard.Widgets/Orchard.Widgets.csproj @@ -35,10 +35,6 @@ - - False - ..\..\..\..\lib\dlr\Microsoft.Scripting.dll - @@ -100,10 +96,6 @@ Orchard.Framework True - - {2AD6973D-C7BB-416E-89FE-EEE34664E05F} - Orchard.Scripting.Dlr - {99002B65-86F7-415E-BF4A-381AA8AB9CCC} Orchard.Scripting diff --git a/src/Orchard.Web/Modules/Orchard.Widgets/RuleEngine/RuleManager.cs b/src/Orchard.Web/Modules/Orchard.Widgets/RuleEngine/RuleManager.cs index 25e6b7343..c605ae932 100644 --- a/src/Orchard.Web/Modules/Orchard.Widgets/RuleEngine/RuleManager.cs +++ b/src/Orchard.Web/Modules/Orchard.Widgets/RuleEngine/RuleManager.cs @@ -1,73 +1,55 @@ using System.Collections.Generic; using System.Linq; -using Orchard.Scripting.Dlr.Services; +using Orchard.Localization; +using Orchard.Scripting; using Orchard.Widgets.Services; -using Microsoft.Scripting.Hosting; -using Orchard.Caching; namespace Orchard.Widgets.RuleEngine { public class RuleManager : IRuleManager { private readonly IEnumerable _ruleProviders; - private readonly IScriptingManager _scriptingManager; - private readonly ICacheManager _cacheManager; + private readonly IEnumerable _evaluators; - public RuleManager(IEnumerable ruleProviders, IScriptingManager scriptingManager, ICacheManager cacheManager) { + public RuleManager(IEnumerable ruleProviders, IEnumerable evaluators) { _ruleProviders = ruleProviders; - _scriptingManager = scriptingManager; - _cacheManager = cacheManager; + _evaluators = evaluators; + T = NullLocalizer.Instance; } + public Localizer T { get; set; } + public bool Matches(string expression) { - object execContextType = _cacheManager.Get("---", ctx => (object)_scriptingManager.ExecuteExpression(@" -class ExecBlock - def initialize(callbacks) - @callbacks = callbacks - end - def method_missing(name, *args, &block) - @callbacks.send(name, args, &block); - end -end -class ExecContext - class << self - def alloc(thing) - instance_eval 'self.new {' + thing + '}' - end - end - def initialize(&block) - @block = block - end - def evaluate(callbacks) - ExecBlock.new(callbacks).instance_eval(&@block) - end -end -ExecContext - ")); - var ops = _cacheManager.Get("----", ctx => (ObjectOperations)_scriptingManager.ExecuteOperation(x => x)); - object execContext = _cacheManager.Get(expression, ctx => (object)ops.InvokeMember(execContextType, "alloc", expression)); - dynamic result = ops.InvokeMember(execContext, "evaluate", new CallbackApi(this)); - return result; + var evaluator = _evaluators.FirstOrDefault(); + if (evaluator == null) { + throw new OrchardException(T("There are currently not scripting engine enabled")); + } + + var result = evaluator.Evaluate(expression, new List { new GlobalMethodProvider(this) }); + if (!(result is bool)) { + throw new OrchardException(T("Expression is not a boolean value")); + } + return (bool)result; } - public class CallbackApi { + private class GlobalMethodProvider : IGlobalMethodProvider { private readonly RuleManager _ruleManager; - public CallbackApi(RuleManager ruleManager) { + public GlobalMethodProvider(RuleManager ruleManager) { _ruleManager = ruleManager; } - public object send(string name, IList args) { - return _ruleManager.Evaluate(name, args); + public void Process(GlobalMethodContext context) { + var ruleContext = new RuleContext { + FunctionName = context.FunctionName, + Arguments = context.Arguments.ToArray(), + Result = context.Result + }; + + foreach(var ruleProvider in _ruleManager._ruleProviders) { + ruleProvider.Process(ruleContext); + } + + context.Result = ruleContext.Result; } } - - private object Evaluate(string name, IList args) { - RuleContext ruleContext = new RuleContext { FunctionName = name, Arguments = args.ToArray() }; - - foreach (var ruleProvider in _ruleProviders) { - ruleProvider.Process(ruleContext); - } - - return ruleContext.Result; - } } } \ No newline at end of file From 69951673af0ca9838328d3dd0e1d962f3b8fdfd5 Mon Sep 17 00:00:00 2001 From: Renaud Paquay Date: Sun, 28 Nov 2010 12:09:11 -0800 Subject: [PATCH 56/70] Add Orchard.Scripting.Lightweight as a default feature --HG-- branch : dev --- src/Orchard.Profile/profiling-setup-commands.txt | 2 +- src/Orchard.Specs/Bindings/OrchardSiteFactory.cs | 2 +- src/Orchard.Specs/Setup.feature | 2 +- src/Orchard.Specs/Setup.feature.cs | 5 +++-- .../Modules/Orchard.Setup/Services/SetupService.cs | 1 + 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/Orchard.Profile/profiling-setup-commands.txt b/src/Orchard.Profile/profiling-setup-commands.txt index 3af9e0db0..5f23eb33a 100644 --- a/src/Orchard.Profile/profiling-setup-commands.txt +++ b/src/Orchard.Profile/profiling-setup-commands.txt @@ -1 +1 @@ -setup /SiteName:Profiling /AdminUsername:admin /AdminPassword:profiling-secret /DatabaseProvider:SqlCe /EnabledFeatures:Profiling,Orchard.Framework,Routable,Common,Dashboard,Feeds,Orchard.PublishLater,HomePage,Contents,Navigation,Reports,Scheduling,Indexing,Settings,Localization,XmlRpc,Orchard.Users,Orchard.Roles,TinyMce,Orchard.Themes,Orchard.MultiTenancy,Orchard.Blogs,Orchard.Comments,Orchard.Modules,Orchard.Scripting,Orchard.Widgets,Orchard.Media,Orchard.Tags,Orchard.Experimental +setup /SiteName:Profiling /AdminUsername:admin /AdminPassword:profiling-secret /DatabaseProvider:SqlCe /EnabledFeatures:Profiling,Orchard.Framework,Routable,Common,Dashboard,Feeds,Orchard.PublishLater,HomePage,Contents,Navigation,Reports,Scheduling,Indexing,Settings,Localization,XmlRpc,Orchard.Users,Orchard.Roles,TinyMce,Orchard.Themes,Orchard.MultiTenancy,Orchard.Blogs,Orchard.Comments,Orchard.Modules,Orchard.Scripting,Orchard.Scripting.Lightweight,Orchard.Widgets,Orchard.Media,Orchard.Tags,Orchard.Experimental diff --git a/src/Orchard.Specs/Bindings/OrchardSiteFactory.cs b/src/Orchard.Specs/Bindings/OrchardSiteFactory.cs index a28c02932..b9184dc43 100644 --- a/src/Orchard.Specs/Bindings/OrchardSiteFactory.cs +++ b/src/Orchard.Specs/Bindings/OrchardSiteFactory.cs @@ -13,7 +13,7 @@ namespace Orchard.Specs.Bindings { var webApp = Binding(); webApp.GivenIHaveACleanSiteWith(TableData( - new { extension = "module", names = "Orchard.Setup, Orchard.Pages, Orchard.Blogs, Orchard.Messaging, Orchard.Modules, Orchard.Packaging, Orchard.PublishLater, Orchard.Themes, Orchard.Scripting, Orchard.Widgets, Orchard.Users, Orchard.Roles, Orchard.Comments, Orchard.jQuery, Orchard.Tags, TinyMce" }, + new { extension = "module", names = "Orchard.Setup, Orchard.Pages, Orchard.Blogs, Orchard.Messaging, Orchard.Modules, Orchard.Packaging, Orchard.PublishLater, Orchard.Themes, Orchard.Scripting, Orchard.Scripting.Lightweight, Orchard.Widgets, Orchard.Users, Orchard.Roles, Orchard.Comments, Orchard.jQuery, Orchard.Tags, TinyMce" }, new { extension = "core", names = "Common, Dashboard, Feeds, HomePage, Navigation, Contents, Routable, Scheduling, Settings, Shapes, XmlRpc" }, new { extension = "theme", names = "SafeMode, TheAdmin, TheThemeMachine" })); diff --git a/src/Orchard.Specs/Setup.feature b/src/Orchard.Specs/Setup.feature index 0ca7bad8d..ba36b9e0e 100644 --- a/src/Orchard.Specs/Setup.feature +++ b/src/Orchard.Specs/Setup.feature @@ -39,7 +39,7 @@ Scenario: Some of the initial form values are required Scenario: Calling setup on a brand new install Given I have a clean site with | extension | names | - | module | Orchard.Setup, Orchard.Pages, Orchard.Users, Orchard.Roles, Orchard.Messaging, Orchard.Scripting, Orchard.Comments, Orchard.PublishLater, Orchard.Themes, Orchard.Modules, Orchard.Widgets, Orchard.jQuery, TinyMce | + | module | Orchard.Setup, Orchard.Pages, Orchard.Users, Orchard.Roles, Orchard.Messaging, Orchard.Scripting, Orchard.Scripting.Lightweight, Orchard.Comments, Orchard.PublishLater, Orchard.Themes, Orchard.Modules, Orchard.Widgets, Orchard.jQuery, TinyMce | | core | Common, Contents, Dashboard, Feeds, HomePage, Navigation, Routable, Scheduling, Settings, Shapes, XmlRpc | | theme | SafeMode, TheThemeMachine | And I am on "/Setup" diff --git a/src/Orchard.Specs/Setup.feature.cs b/src/Orchard.Specs/Setup.feature.cs index a1efb7e04..b4e35383d 100644 --- a/src/Orchard.Specs/Setup.feature.cs +++ b/src/Orchard.Specs/Setup.feature.cs @@ -177,8 +177,9 @@ this.ScenarioSetup(scenarioInfo); table4.AddRow(new string[] { "module", "Orchard.Setup, Orchard.Pages, Orchard.Users, Orchard.Roles, Orchard.Messaging, Or" + - "chard.Scripting, Orchard.Comments, Orchard.PublishLater, Orchard.Themes, Orchard" + - ".Modules, Orchard.Widgets, Orchard.jQuery, TinyMce"}); + "chard.Scripting, Orchard.Scripting.Lightweight, Orchard.Comments, Orchard.Publis" + + "hLater, Orchard.Themes, Orchard.Modules, Orchard.Widgets, Orchard.jQuery, TinyMc" + + "e"}); table4.AddRow(new string[] { "core", "Common, Contents, Dashboard, Feeds, HomePage, Navigation, Routable, Scheduling, S" + diff --git a/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs b/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs index 55f72c3dc..7c6e55376 100644 --- a/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs +++ b/src/Orchard.Web/Modules/Orchard.Setup/Services/SetupService.cs @@ -99,6 +99,7 @@ namespace Orchard.Setup.Services { "Orchard.Themes", "Orchard.Users", "Orchard.Scripting", + "Orchard.Scripting.Lightweight", "Orchard.Widgets", "TinyMce", From 31f4062b60e6e54627f668f0e50d95527dd2157a Mon Sep 17 00:00:00 2001 From: Renaud Paquay Date: Sun, 28 Nov 2010 12:11:16 -0800 Subject: [PATCH 57/70] Update packaging to exclude Orchard.Scripting.Dlr --HG-- branch : dev --- Orchard.proj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Orchard.proj b/Orchard.proj index 818ff5b21..a68d2afa3 100644 --- a/Orchard.proj +++ b/Orchard.proj @@ -233,6 +233,7 @@ $(StageFolder)\**\Modules\Orchard.Indexing\**; $(StageFolder)\**\Modules\Orchard.Migrations\**; $(StageFolder)\**\Modules\Orchard.MultiTenancy\**; + $(StageFolder)\**\Modules\Orchard.Scripting.Dlr\**; $(StageFolder)\**\Modules\Orchard.Search\**; " /> @@ -322,6 +323,7 @@ + From a59d1fa97ef8f6f627515b308997b9e8f2042d61 Mon Sep 17 00:00:00 2001 From: Renaud Paquay Date: Sun, 28 Nov 2010 13:28:03 -0800 Subject: [PATCH 58/70] Fix bug with ignoring whitespaces at end of expression --HG-- branch : dev --- .../Scripting/ParserTests.cs | 8 ++ .../Orchard.Scripting/Compiler/Tokenizer.cs | 87 ++++++++++--------- 2 files changed, 52 insertions(+), 43 deletions(-) diff --git a/src/Orchard.Tests.Modules/Scripting/ParserTests.cs b/src/Orchard.Tests.Modules/Scripting/ParserTests.cs index 0397bec99..ff12f8c93 100644 --- a/src/Orchard.Tests.Modules/Scripting/ParserTests.cs +++ b/src/Orchard.Tests.Modules/Scripting/ParserTests.cs @@ -15,6 +15,14 @@ namespace Orchard.Tests.Modules.Scripting { }); } + [Test] + public void ParserShouldIgnoreWhitespaces() { + var tree = new Parser(" true \n ").Parse(); + CheckTree(tree, new object[] { + "const", true, + }); + } + [Test] public void ParserShouldUnderstandBinaryExpressions() { var tree = new Parser("true+true").Parse(); diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Tokenizer.cs b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Tokenizer.cs index 4ff5d3c09..a4107d831 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Tokenizer.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Tokenizer.cs @@ -14,52 +14,53 @@ namespace Orchard.Scripting.Compiler { } public Token NextToken() { - if (Eof()) - return CreateToken(TokenKind.Eof); + while (true) { + if (Eof()) + return CreateToken(TokenKind.Eof); - LexAgain: - _startTokenIndex = _index; - char ch = Character(); - switch (ch) { - case '(': - NextCharacter(); - return CreateToken(TokenKind.OpenParen); - case ')': - NextCharacter(); - return CreateToken(TokenKind.CloseParen); - case ',': - NextCharacter(); - return CreateToken(TokenKind.Comma); - case '+': - NextCharacter(); - return CreateToken(TokenKind.Plus); - case '-': - NextCharacter(); - return CreateToken(TokenKind.Minus); - case '*': - NextCharacter(); - return CreateToken(TokenKind.Mul); - case '/': - NextCharacter(); - return CreateToken(TokenKind.Div); - case '"': - return LexStringLiteral(); - case '\'': - return LexSingleQuotedStringLiteral(); - } + _startTokenIndex = _index; + char ch = Character(); + switch (ch) { + case '(': + NextCharacter(); + return CreateToken(TokenKind.OpenParen); + case ')': + NextCharacter(); + return CreateToken(TokenKind.CloseParen); + case ',': + NextCharacter(); + return CreateToken(TokenKind.Comma); + case '+': + NextCharacter(); + return CreateToken(TokenKind.Plus); + case '-': + NextCharacter(); + return CreateToken(TokenKind.Minus); + case '*': + NextCharacter(); + return CreateToken(TokenKind.Mul); + case '/': + NextCharacter(); + return CreateToken(TokenKind.Div); + case '"': + return LexStringLiteral(); + case '\'': + return LexSingleQuotedStringLiteral(); + } - if (IsDigitCharacter(ch)) { - return LexInteger(); - } - else if (IsIdentifierCharacter(ch)) { - return LexIdentifierOrKeyword(); - } - else if (IsWhitespaceCharacter(ch)) { - NextCharacter(); - goto LexAgain; - } + if (IsDigitCharacter(ch)) { + return LexInteger(); + } + else if (IsIdentifierCharacter(ch)) { + return LexIdentifierOrKeyword(); + } + else if (IsWhitespaceCharacter(ch)) { + NextCharacter(); + continue; + } - return CreateToken(TokenKind.Invalid, "Unrecognized character"); + return CreateToken(TokenKind.Invalid, "Unrecognized character"); + } } private Token LexIdentifierOrKeyword() { From b97d9bd22765ea5a4add123af65fc27464d4c7b2 Mon Sep 17 00:00:00 2001 From: Renaud Paquay Date: Sun, 28 Nov 2010 15:13:53 -0800 Subject: [PATCH 59/70] Replace enumerators --HG-- branch : dev --- .../Modules/Orchard.Scripting/Ast/BinaryAstNode.cs | 3 +-- src/Orchard.Web/Modules/Orchard.Scripting/Ast/UnaryAstNode.cs | 4 +++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Ast/BinaryAstNode.cs b/src/Orchard.Web/Modules/Orchard.Scripting/Ast/BinaryAstNode.cs index 1764fc60c..6066fcbee 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/Ast/BinaryAstNode.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Ast/BinaryAstNode.cs @@ -27,8 +27,7 @@ namespace Orchard.Scripting.Ast { public override IEnumerable Children { get { - yield return _left; - yield return _right; + return new List(2) { _left, _right }; } } diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Ast/UnaryAstNode.cs b/src/Orchard.Web/Modules/Orchard.Scripting/Ast/UnaryAstNode.cs index d26449df7..bec5a5f7e 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/Ast/UnaryAstNode.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Ast/UnaryAstNode.cs @@ -16,7 +16,9 @@ namespace Orchard.Scripting.Ast { public AstNode Operand { get { return _operand; } } public override IEnumerable Children { - get { yield return _operand; } + get { + return new List(1) { _operand }; + } } public override object Accept(AstVisitor visitor) { From 2d5b2bb20c37e15cefa706bdf47005ac7cff6524 Mon Sep 17 00:00:00 2001 From: Renaud Paquay Date: Sun, 28 Nov 2010 15:53:31 -0800 Subject: [PATCH 60/70] Fix unit tests --HG-- branch : dev --- src/Orchard.Tests.Modules/Widgets/WidgetsTests.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Orchard.Tests.Modules/Widgets/WidgetsTests.cs b/src/Orchard.Tests.Modules/Widgets/WidgetsTests.cs index 4a016d8fa..4b34a09df 100644 --- a/src/Orchard.Tests.Modules/Widgets/WidgetsTests.cs +++ b/src/Orchard.Tests.Modules/Widgets/WidgetsTests.cs @@ -1,7 +1,7 @@ using System; using Autofac; using NUnit.Framework; -using Orchard.Scripting.Dlr.Services; +using Orchard.Scripting; using Orchard.Caching; using Orchard.Tests.Stubs; using Orchard.Widgets.RuleEngine; @@ -16,8 +16,7 @@ namespace Orchard.Tests.Modules.Widgets { [SetUp] public void Init() { var builder = new ContainerBuilder(); - builder.RegisterType().As(); - builder.RegisterType().As(); + builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); From ffe6c880384cf01a4e92f35ba06fb2f2a7d77b4f Mon Sep 17 00:00:00 2001 From: Renaud Paquay Date: Sun, 28 Nov 2010 16:18:00 -0800 Subject: [PATCH 61/70] Implement tokenization of relational operators --HG-- branch : dev --- .../Scripting/TokenizerTests.cs | 6 +++ .../Orchard.Scripting/Compiler/Token.cs | 5 +- .../Orchard.Scripting/Compiler/TokenKind.cs | 12 ++++- .../Orchard.Scripting/Compiler/Tokenizer.cs | 48 +++++++++++++++++++ 4 files changed, 68 insertions(+), 3 deletions(-) diff --git a/src/Orchard.Tests.Modules/Scripting/TokenizerTests.cs b/src/Orchard.Tests.Modules/Scripting/TokenizerTests.cs index 38f74a903..406dbfe2c 100644 --- a/src/Orchard.Tests.Modules/Scripting/TokenizerTests.cs +++ b/src/Orchard.Tests.Modules/Scripting/TokenizerTests.cs @@ -61,6 +61,12 @@ namespace Orchard.Tests.Modules.Scripting { CheckTokenSequence("1+2*3", TokenKind.Integer, TokenKind.Plus, TokenKind.Integer, TokenKind.Mul, TokenKind.Integer); } + [Test] + public void LexerShouldProcesSequenceOfTokens3() { + CheckTokenSequence("= == < <= > >= ! !=", TokenKind.Equal, TokenKind.EqualEqual, + TokenKind.LessThan, TokenKind.LessThanEqual, + TokenKind.GreaterThan, TokenKind.GreaterThanEqual, TokenKind.NotSign, TokenKind.NotEqual); + } private void CheckTokenSequence(string expression, params TokenKind[] tokenKinds) { var lexer = new Tokenizer(expression); diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Token.cs b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Token.cs index e813d9be8..6fed5987f 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Token.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Token.cs @@ -7,7 +7,10 @@ namespace Orchard.Scripting.Compiler { public object Value { get; set; } public override string ToString() { - return String.Format("{0} ({1}) at position {2}", Kind, Value ?? "", Position); + if (Value == null) + return String.Format("Token {0} at position {1}", Kind, Position); + else + return String.Format("Token {0} ({1}) at position {2}", Kind, Value, Position); } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/TokenKind.cs b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/TokenKind.cs index a7b5e2dcc..4d29abf63 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/TokenKind.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/TokenKind.cs @@ -1,10 +1,12 @@ namespace Orchard.Scripting.Compiler { public enum TokenKind { + Invalid, Eof, OpenParen, CloseParen, StringLiteral, SingleQuotedStringLiteral, + Identifier, Integer, Comma, Plus, @@ -13,10 +15,16 @@ Div, True, False, - Identifier, And, Or, Not, - Invalid + Equal, + EqualEqual, + NotSign, + NotEqual, + LessThan, + LessThanEqual, + GreaterThan, + GreaterThanEqual } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Tokenizer.cs b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Tokenizer.cs index a4107d831..338d11aed 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Tokenizer.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Tokenizer.cs @@ -46,6 +46,14 @@ namespace Orchard.Scripting.Compiler { return LexStringLiteral(); case '\'': return LexSingleQuotedStringLiteral(); + case '!': + return LexNotSign(); + case '=': + return LexEqual(); + case '<': + return LexLessThan(); + case '>': + return LexGreaterThan(); } if (IsDigitCharacter(ch)) { @@ -63,6 +71,46 @@ namespace Orchard.Scripting.Compiler { } } + private Token LexNotSign() { + NextCharacter(); + char ch = Character(); + if (ch == '=') { + NextCharacter(); + return CreateToken(TokenKind.NotEqual); + } + return CreateToken(TokenKind.NotSign); + } + + private Token LexGreaterThan() { + NextCharacter(); + char ch = Character(); + if (ch == '=') { + NextCharacter(); + return CreateToken(TokenKind.GreaterThanEqual); + } + return CreateToken(TokenKind.GreaterThan); + } + + private Token LexLessThan() { + NextCharacter(); + char ch = Character(); + if (ch == '=') { + NextCharacter(); + return CreateToken(TokenKind.LessThanEqual); + } + return CreateToken(TokenKind.LessThan); + } + + private Token LexEqual() { + NextCharacter(); + char ch = Character(); + if (ch == '=') { + NextCharacter(); + return CreateToken(TokenKind.EqualEqual); + } + return CreateToken(TokenKind.Equal); + } + private Token LexIdentifierOrKeyword() { _stringBuilder.Clear(); From ea049d28d07082e8ba47644da151835ea3272683 Mon Sep 17 00:00:00 2001 From: Renaud Paquay Date: Sun, 28 Nov 2010 16:59:45 -0800 Subject: [PATCH 62/70] Implement parsing of relational operators --HG-- branch : dev --- .../Scripting/ParserTests.cs | 96 +++++++++++++++++++ .../Orchard.Scripting/Ast/UnaryAstNode.cs | 2 +- .../Orchard.Scripting/Compiler/Parser.cs | 57 ++++++----- 3 files changed, 131 insertions(+), 24 deletions(-) diff --git a/src/Orchard.Tests.Modules/Scripting/ParserTests.cs b/src/Orchard.Tests.Modules/Scripting/ParserTests.cs index ff12f8c93..60b5c228c 100644 --- a/src/Orchard.Tests.Modules/Scripting/ParserTests.cs +++ b/src/Orchard.Tests.Modules/Scripting/ParserTests.cs @@ -110,6 +110,100 @@ namespace Orchard.Tests.Modules.Scripting { }); } + [Test] + public void ParserShouldUnderstandRelationalOperators() { + var tree = new Parser("true == true").Parse(); + CheckTree(tree, new object[] { + "binop", TokenKind.EqualEqual, + "const", true, + "const", true, + }); + } + + [Test] + public void ParserShouldUnderstandRelationalOperators2() { + var tree = new Parser("1 != 2").Parse(); + CheckTree(tree, new object[] { + "binop", TokenKind.NotEqual, + "const", 1, + "const", 2, + }); + } + + [Test] + public void ParserShouldUnderstandRelationalOperators3() { + var tree = new Parser("1 < 2").Parse(); + CheckTree(tree, new object[] { + "binop", TokenKind.LessThan, + "const", 1, + "const", 2, + }); + } + + [Test] + public void ParserShouldUnderstandRelationalOperators4() { + var tree = new Parser("1 <= 2").Parse(); + CheckTree(tree, new object[] { + "binop", TokenKind.LessThanEqual, + "const", 1, + "const", 2, + }); + } + + [Test] + public void ParserShouldUnderstandRelationalOperators5() { + var tree = new Parser("1 > 2").Parse(); + CheckTree(tree, new object[] { + "binop", TokenKind.GreaterThan, + "const", 1, + "const", 2, + }); + } + + [Test] + public void ParserShouldUnderstandRelationalOperators6() { + var tree = new Parser("1 >= 2").Parse(); + CheckTree(tree, new object[] { + "binop", TokenKind.GreaterThanEqual, + "const", 1, + "const", 2, + }); + } + + [Test] + public void ParserShouldUnderstandRelationalOperatorPrecedence() { + var tree = new Parser("1 < 2 or 2 > 3 and !false").Parse(); + CheckTree(tree, new object[] { + "binop", TokenKind.Or, + "binop", TokenKind.LessThan, + "const", 1, + "const", 2, + "binop", TokenKind.And, + "binop", TokenKind.GreaterThan, + "const", 2, + "const", 3, + "unop", TokenKind.NotSign, + "const", false, + }); + } + + [Test] + public void ParserShouldUnderstandRelationalOperatorPrecedence2() { + var tree = new Parser("1 < 2 and 2 > 3 or !false").Parse(); + CheckTree(tree, new object[] { + "binop", TokenKind.And, + "binop", TokenKind.LessThan, + "const", 1, + "const", 2, + "binop", TokenKind.Or, + "binop", TokenKind.GreaterThan, + "const", 2, + "const", 3, + "unop", TokenKind.NotSign, + "const", false, + }); + } + [Test] public void ParserShouldUnderstandParenthesis() { var tree = new Parser("1*(2+3)").Parse(); @@ -177,6 +271,8 @@ namespace Orchard.Tests.Modules.Scripting { case "error": type = typeof(ErrorAstNode); break; + default: + throw new InvalidOperationException(string.Format("Test error: unrecognized expression type abbreviation '{0}'", exprName)); } Trace.WriteLine(string.Format("{0}: {1}{2} (Current: {3})", indent, new string(' ', indent * 2), type.Name, astNode)); diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Ast/UnaryAstNode.cs b/src/Orchard.Web/Modules/Orchard.Scripting/Ast/UnaryAstNode.cs index bec5a5f7e..bcac1deae 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/Ast/UnaryAstNode.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Ast/UnaryAstNode.cs @@ -6,7 +6,7 @@ namespace Orchard.Scripting.Ast { private readonly AstNode _operand; private readonly Token _token; - public UnaryAstNode(AstNode operand, Token token) { + public UnaryAstNode(Token token, AstNode operand) { _operand = operand; _token = token; } diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Parser.cs b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Parser.cs index 9812ab752..d29524161 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Parser.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Parser.cs @@ -22,28 +22,11 @@ namespace Orchard.Scripting.Compiler { } private AstNode ParseKeywordLogicalExpression() { - return ParseKeywordOrExpression(); - } - - private AstNode ParseKeywordOrExpression() { - var expr = ParseKeywordAndExpression(); - - var token = IsMatch(TokenKind.Or); - if (token != null) { - var right = ParseKeywordOrExpression(); - - expr = new BinaryAstNode(expr, token, right); - } - - return expr; - } - - private AstNode ParseKeywordAndExpression() { var expr = ParseKeywordNotExpression(); - var token = IsMatch(TokenKind.And); + var token = IsMatch(TokenKind.Or, TokenKind.And); if (token != null) { - var right = ParseKeywordAndExpression(); + var right = ParseKeywordLogicalExpression(); expr = new BinaryAstNode(expr, token, right); } @@ -56,15 +39,37 @@ namespace Orchard.Scripting.Compiler { if (token != null) { var expr = ParseKeywordNotExpression(); - return new UnaryAstNode(expr, token); + return new UnaryAstNode(token, expr); } - return ParseRelationalExpression(); + return ParseEqualityExpression(); + } + + private AstNode ParseEqualityExpression() { + var expr = ParseRelationalExpression(); + + var token = IsMatch(TokenKind.EqualEqual, TokenKind.NotEqual); + if (token != null) { + var right = ParseEqualityExpression(); + + expr = new BinaryAstNode(expr, token, right); + } + + return expr; } private AstNode ParseRelationalExpression() { var expr = ParseAdditiveExpression(); - //TODO + + var token = + IsMatch(TokenKind.LessThan, TokenKind.LessThanEqual) ?? + IsMatch(TokenKind.GreaterThan, TokenKind.GreaterThanEqual); + if (token != null) { + var right = ParseRelationalExpression(); + + expr = new BinaryAstNode(expr, token, right); + } + return expr; } @@ -95,7 +100,13 @@ namespace Orchard.Scripting.Compiler { } private AstNode ParseUnaryExpression() { - //TODO + var token = IsMatch(TokenKind.NotSign); + if (token != null) { + var expr = ParseUnaryExpression(); + + return new UnaryAstNode(token, expr); + } + return ParsePrimaryExpression(); } From e2adccc598dbc8da8b3ed69ad595708cbc3033c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Ros?= Date: Sun, 28 Nov 2010 18:34:13 -0800 Subject: [PATCH 63/70] Refactoring users challenge emails - Adding unit tests - Creating a stub for email messages - Adding tenant's name to nonces in order to prevent cross-tenants substitution --HG-- branch : dev --- .../Orchard.Tests.Modules.csproj | 2 + .../Controllers/AccountControllerTests.cs | 292 ++++++++++++++++++ .../Users/Services/UserServiceTests.cs | 145 +++++++++ .../Messaging/MessagingChannelStub.cs | 28 ++ .../Orchard.Framework.Tests.csproj | 1 + .../Controllers/AccountController.cs | 3 +- .../Controllers/AdminController.cs | 3 +- .../Orchard.Users/Services/IUserService.cs | 5 +- .../Services/MembershipService.cs | 1 - .../Orchard.Users/Services/UserService.cs | 30 +- .../Services/DefaultMessageManager.cs | 1 + 11 files changed, 493 insertions(+), 18 deletions(-) create mode 100644 src/Orchard.Tests.Modules/Users/Controllers/AccountControllerTests.cs create mode 100644 src/Orchard.Tests.Modules/Users/Services/UserServiceTests.cs create mode 100644 src/Orchard.Tests/Messaging/MessagingChannelStub.cs diff --git a/src/Orchard.Tests.Modules/Orchard.Tests.Modules.csproj b/src/Orchard.Tests.Modules/Orchard.Tests.Modules.csproj index 04182d1a9..ae3cb3f3a 100644 --- a/src/Orchard.Tests.Modules/Orchard.Tests.Modules.csproj +++ b/src/Orchard.Tests.Modules/Orchard.Tests.Modules.csproj @@ -148,6 +148,8 @@ + + diff --git a/src/Orchard.Tests.Modules/Users/Controllers/AccountControllerTests.cs b/src/Orchard.Tests.Modules/Users/Controllers/AccountControllerTests.cs new file mode 100644 index 000000000..010b3dcf7 --- /dev/null +++ b/src/Orchard.Tests.Modules/Users/Controllers/AccountControllerTests.cs @@ -0,0 +1,292 @@ +using System; +using System.Collections.Generic; +using System.Web; +using System.Web.Mvc; +using System.Web.Routing; +using System.Xml.Linq; +using Autofac; +using Moq; +using NUnit.Framework; +using Orchard.Caching; +using Orchard.ContentManagement.MetaData; +using Orchard.ContentManagement.MetaData.Models; +using Orchard.ContentManagement.MetaData.Services; +using Orchard.Core.Settings.Metadata; +using Orchard.Data; +using Orchard.DisplayManagement; +using Orchard.DisplayManagement.Descriptors; +using Orchard.DisplayManagement.Implementation; +using Orchard.Environment; +using Orchard.ContentManagement; +using Orchard.ContentManagement.Handlers; +using Orchard.ContentManagement.Records; +using Orchard.Environment.Extensions; +using Orchard.Localization; +using Orchard.Messaging.Events; +using Orchard.Messaging.Services; +using Orchard.Security; +using Orchard.Security.Permissions; +using Orchard.Tests.Stubs; +using Orchard.UI.Notify; +using Orchard.Users.Controllers; +using Orchard.Users.Handlers; +using Orchard.Users.Models; +using Orchard.Users.Services; +using Orchard.Users.ViewModels; +using Orchard.Settings; +using Orchard.Core.Settings.Services; +using Orchard.Tests.Messaging; +using Orchard.Environment.Configuration; +using Orchard.Core.Settings.Models; +using Orchard.Core.Settings.Handlers; +using Orchard.Messaging.Models; +using System.Collections.Specialized; + +namespace Orchard.Tests.Modules.Users.Controllers { + [TestFixture] + public class AccountControllerTests : DatabaseEnabledTestsBase { + private AccountController _controller; + private Mock _authorizer; + private Mock _workContext; + private MessagingChannelStub _channel; + + public override void Register(ContainerBuilder builder) { + builder.RegisterType().SingleInstance(); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType(typeof(SettingsFormatter)) + .As(typeof(IMapper)) + .As(typeof(IMapper)); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType().As().InstancePerDependency(); + builder.RegisterType().As(); + builder.RegisterInstance(_channel = new MessagingChannelStub()).As(); + builder.RegisterInstance(new Mock().Object); + builder.RegisterInstance(new Mock().Object); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterInstance(new Mock().Object); + builder.RegisterInstance(new Mock().Object); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterInstance(new ShellSettings { Name = "Alpha", RequestUrlHost = "wiki.example.com", RequestUrlPrefix = "~/foo" }); + + _authorizer = new Mock(); + builder.RegisterInstance(_authorizer.Object); + + _authorizer.Setup(x => x.Authorize(It.IsAny(), It.IsAny())).Returns(true); + + _workContext = new Mock(); + _workContext.Setup(w => w.GetState(It.Is(s => s == "CurrentSite"))).Returns(() => { return _container.Resolve().GetSiteSettings(); }); + + var _workContextAccessor = new Mock(); + _workContextAccessor.Setup(w => w.GetContext()).Returns(_workContext.Object); + builder.RegisterInstance(_workContextAccessor.Object).As(); + + } + + protected override IEnumerable DatabaseTypes { + get { + return new[] { typeof(UserPartRecord), + typeof(SiteSettingsPartRecord), + typeof(RegistrationSettingsPartRecord), + typeof(ContentTypeRecord), + typeof(ContentItemRecord), + typeof(ContentItemVersionRecord), + }; + } + } + + public override void Init() { + base.Init(); + + var manager = _container.Resolve(); + + var superUser = manager.New("User"); + superUser.Record = new UserPartRecord { UserName = "admin", NormalizedUserName = "admin", Email = "admin@orcharproject.com" }; + manager.Create(superUser.ContentItem); + + _controller = _container.Resolve(); + + var mockHttpContext = new Mock(); + _controller.ControllerContext = new ControllerContext( + mockHttpContext.Object, + new RouteData( + new Route("foo", new MvcRouteHandler()), + new MvcRouteHandler()), + _controller); + } + + [Test] + public void UsersShouldNotBeAbleToRegisterIfNotAllowed() { + + // enable user registration + _container.Resolve().GetContext().CurrentSite.As().UsersCanRegister = false; + _session.Flush(); + + var result = _controller.Register(); + Assert.That(result, Is.TypeOf()); + + result = _controller.Register("bar", "bar@baz.com", "66554321", "66554321"); + Assert.That(result, Is.TypeOf()); + } + + [Test] + public void UsersShouldBeAbleToRegisterIfAllowed() { + + // disable user registration + _container.Resolve().GetContext().CurrentSite.As().UsersCanRegister = true; + _session.Flush(); + + var result = _controller.Register(); + Assert.That(result, Is.TypeOf()); + } + + [Test] + public void RegisteredUserShouldBeRedirectedToHomePage() { + + var registrationSettings = _container.Resolve().GetContext().CurrentSite.As(); + registrationSettings.UsersCanRegister = true; + registrationSettings.UsersAreModerated = false; + registrationSettings.UsersMustValidateEmail = false; + + _session.Flush(); + + var result = _controller.Register("bar", "bar@baz.com", "66554321", "66554321"); + + Assert.That(result, Is.TypeOf()); + Assert.That(((RedirectResult)result).Url, Is.EqualTo("~/")); + } + + + [Test] + public void RegisteredUserShouldBeModerated() { + + var registrationSettings = _container.Resolve().GetContext().CurrentSite.As(); + registrationSettings.UsersCanRegister = true; + registrationSettings.UsersAreModerated = true; + + _session.Flush(); + + var result = _controller.Register("bar", "bar@baz.com", "66554321", "66554321"); + + Assert.That(result, Is.TypeOf()); + Assert.That(((RedirectToRouteResult)result).RouteValues["action"], Is.EqualTo("RegistrationPending")); + Assert.That(_channel.Messages.Count, Is.EqualTo(0)); + } + + [Test] + public void SuperAdminShouldReceiveAMessageOnUserRegistration() { + + var registrationSettings = _container.Resolve().GetContext().CurrentSite.As(); + registrationSettings.UsersCanRegister = true; + registrationSettings.UsersAreModerated = true; + registrationSettings.NotifyModeration = true; + + _container.Resolve().GetContext().CurrentSite.As().SuperUser = "admin"; + _session.Flush(); + + var result = _controller.Register("bar", "bar@baz.com", "66554321", "66554321"); + _session.Flush(); + + var user = _container.Resolve().GetUser("bar"); + + Assert.That(result, Is.TypeOf()); + Assert.That(((RedirectToRouteResult)result).RouteValues["action"], Is.EqualTo("RegistrationPending")); + Assert.That(_channel.Messages.Count, Is.EqualTo(1)); + Assert.That(user, Is.Not.Null); + Assert.That(user.UserName, Is.EqualTo("bar")); + Assert.That(user.As(), Is.Not.Null); + Assert.That(user.As().EmailStatus, Is.EqualTo(UserStatus.Approved)); + Assert.That(user.As().RegistrationStatus, Is.EqualTo(UserStatus.Pending)); + } + + [Test] + public void InvalidLostPasswordRequestShouldNotResultInAnError() { + var registrationSettings = _container.Resolve().GetContext().CurrentSite.As(); + registrationSettings.UsersCanRegister = true; + _session.Flush(); + + _controller.Register("bar", "bar@baz.com", "66554321", "66554321"); + + _controller.Url = new UrlHelper(new RequestContext(new HttpContextStub(), new RouteData())); + + var result = _controller.LostPassword("foo"); + + Assert.That(result, Is.TypeOf()); + Assert.That(((RedirectToRouteResult)result).RouteValues["action"], Is.EqualTo("LogOn")); + Assert.That(_channel.Messages.Count, Is.EqualTo(0)); + } + + [Test] + public void ResetPasswordLinkShouldBeSent() { + var registrationSettings = _container.Resolve().GetContext().CurrentSite.As(); + registrationSettings.UsersCanRegister = true; + _session.Flush(); + + _controller.Register("bar", "bar@baz.com", "66554321", "66554321"); + _session.Flush(); + + _controller.Url = new UrlHelper(new RequestContext(new HttpContextStub(), new RouteData())); + var result = _controller.LostPassword("bar"); + Assert.That(result, Is.TypeOf()); + + Assert.That(((RedirectToRouteResult)result).RouteValues["action"], Is.EqualTo("LogOn")); + Assert.That(_channel.Messages.Count, Is.EqualTo(1)); + } + + [Test] + [Ignore("To be implemented")] + public void ChallengeEmailShouldUnlockAccount() { + } + + [Test] + [Ignore("To be implemented")] + public void LostPasswordEmailShouldAuthenticateUser() { + } + + class HttpContextStub : HttpContextBase { + public override HttpRequestBase Request { + get { return new HttpRequestStub(); } + } + + public override IHttpHandler Handler { get; set; } + } + + class HttpRequestStub : HttpRequestBase { + public override bool IsAuthenticated { + get { return false; } + } + + public override NameValueCollection Form { + get { + return new NameValueCollection(); + } + } + + public override Uri Url { + get { + return new Uri("http://orchardproject.net"); + } + } + + public override NameValueCollection Headers { + get { + var nv = new NameValueCollection(); + nv["Host"] = "orchardproject.net"; + return nv; + } + } + } + + } +} diff --git a/src/Orchard.Tests.Modules/Users/Services/UserServiceTests.cs b/src/Orchard.Tests.Modules/Users/Services/UserServiceTests.cs new file mode 100644 index 000000000..efa354cc8 --- /dev/null +++ b/src/Orchard.Tests.Modules/Users/Services/UserServiceTests.cs @@ -0,0 +1,145 @@ +using System; +using System.Web.Security; +using System.Xml.Linq; +using Autofac; +using Moq; +using NHibernate; +using NUnit.Framework; +using Orchard.ContentManagement.MetaData; +using Orchard.ContentManagement.MetaData.Models; +using Orchard.ContentManagement.MetaData.Services; +using Orchard.Core.Settings.Metadata; +using Orchard.Data; +using Orchard.ContentManagement; +using Orchard.ContentManagement.Handlers; +using Orchard.ContentManagement.Records; +using Orchard.DisplayManagement; +using Orchard.DisplayManagement.Descriptors; +using Orchard.DisplayManagement.Implementation; +using Orchard.Environment; +using Orchard.Environment.Extensions; +using Orchard.Messaging.Events; +using Orchard.Messaging.Services; +using Orchard.Security; +using Orchard.Tests.Stubs; +using Orchard.Tests.Utility; +using Orchard.Users.Handlers; +using Orchard.Users.Models; +using Orchard.Users.Services; +using Orchard.Services; +using Orchard.Environment.Configuration; +using Orchard.Tests.Messaging; + +namespace Orchard.Tests.Modules.Users.Services { + [TestFixture] + public class UserServiceTests { + private IMembershipService _membershipService; + private IUserService _userService; + private IClock _clock; + private MessagingChannelStub _channel; + private ISessionFactory _sessionFactory; + private ISession _session; + private IContainer _container; + + + public class TestSessionLocator : ISessionLocator { + private readonly ISession _session; + + public TestSessionLocator(ISession session) { + _session = session; + } + + public ISession For(Type entityType) { + return _session; + } + } + + [TestFixtureSetUp] + public void InitFixture() { + var databaseFileName = System.IO.Path.GetTempFileName(); + _sessionFactory = DataUtility.CreateSessionFactory( + databaseFileName, + typeof(UserPartRecord), + typeof(ContentItemVersionRecord), + typeof(ContentItemRecord), + typeof(ContentTypeRecord)); + } + + [TestFixtureTearDown] + public void TermFixture() { + + } + + [SetUp] + public void Init() { + var builder = new ContainerBuilder(); + //builder.RegisterModule(new ImplicitCollectionSupportModule()); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterInstance(_clock = new StubClock()).As(); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType(typeof(SettingsFormatter)) + .As(typeof(IMapper)) + .As(typeof(IMapper)); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterAutoMocking(MockBehavior.Loose); + builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>)); + builder.RegisterInstance(new Mock().Object); + builder.RegisterType().As(); + builder.RegisterInstance(_channel = new MessagingChannelStub()).As(); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterInstance(new ShellSettings { Name = "Alpha", RequestUrlHost = "wiki.example.com", RequestUrlPrefix = "~/foo" }); + + _session = _sessionFactory.OpenSession(); + builder.RegisterInstance(new TestSessionLocator(_session)).As(); + _container = builder.Build(); + _membershipService = _container.Resolve(); + _userService = _container.Resolve(); + } + + [Test] + public void NonceShouldBeDecryptable() { + var user = _membershipService.CreateUser(new CreateUserParams("foo", "66554321", "foo@bar.com", "", "", true)); + var nonce = _userService.CreateNonce(user, new TimeSpan(1, 0, 0)); + + Assert.That(nonce, Is.Not.Empty); + + string username; + DateTime validateByUtc; + + var result = _userService.DecryptNonce(nonce, out username, out validateByUtc); + + Assert.That(result, Is.True); + Assert.That(username, Is.EqualTo("foo")); + Assert.That(validateByUtc, Is.GreaterThan(_clock.UtcNow)); + } + + [Test] + public void NonceShouldNotBeUsedOnAnotherTenant() { + var user = _membershipService.CreateUser(new CreateUserParams("foo", "66554321", "foo@bar.com", "", "", true)); + var nonce = _userService.CreateNonce(user, new TimeSpan(1, 0, 0)); + + Assert.That(nonce, Is.Not.Empty); + + string username; + DateTime validateByUtc; + + _container.Resolve().Name = "Beta"; + + var result = _userService.DecryptNonce(nonce, out username, out validateByUtc); + + Assert.That(result, Is.False); + Assert.That(username, Is.EqualTo("foo")); + Assert.That(validateByUtc, Is.GreaterThan(_clock.UtcNow)); + } + + } +} diff --git a/src/Orchard.Tests/Messaging/MessagingChannelStub.cs b/src/Orchard.Tests/Messaging/MessagingChannelStub.cs new file mode 100644 index 000000000..cbde7b4aa --- /dev/null +++ b/src/Orchard.Tests/Messaging/MessagingChannelStub.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Orchard.Messaging.Services; +using Orchard.Messaging.Models; + +namespace Orchard.Tests.Messaging { + public class MessagingChannelStub : IMessagingChannel { + public List Messages { get; private set; } + + public MessagingChannelStub() { + Messages = new List(); + } + + #region IMessagingChannel Members + + public void SendMessage(MessageContext message) { + Messages.Add(message); + } + + public IEnumerable GetAvailableServices() { + yield return "email"; + } + + #endregion + } +} diff --git a/src/Orchard.Tests/Orchard.Framework.Tests.csproj b/src/Orchard.Tests/Orchard.Framework.Tests.csproj index 208366c7d..5815c2241 100644 --- a/src/Orchard.Tests/Orchard.Framework.Tests.csproj +++ b/src/Orchard.Tests/Orchard.Framework.Tests.csproj @@ -239,6 +239,7 @@ + diff --git a/src/Orchard.Web/Modules/Orchard.Users/Controllers/AccountController.cs b/src/Orchard.Web/Modules/Orchard.Users/Controllers/AccountController.cs index 4c199a891..3251b9105 100644 --- a/src/Orchard.Web/Modules/Orchard.Users/Controllers/AccountController.cs +++ b/src/Orchard.Web/Modules/Orchard.Users/Controllers/AccountController.cs @@ -120,8 +120,7 @@ namespace Orchard.Users.Controllers { if (user != null) { if ( user.As().EmailStatus == UserStatus.Pending ) { - string challengeToken = _userService.GetNonce(user.As()); - _userService.SendChallengeEmail(user.As(), Url.AbsoluteAction(() => Url.Action("ChallengeEmail", "Account", new { Area = "Orchard.Users", token = challengeToken }))); + _userService.SendChallengeEmail(user.As(), nonce => Url.AbsoluteAction(() => Url.Action("ChallengeEmail", "Account", new { Area = "Orchard.Users", nonce = nonce }))); return RedirectToAction("ChallengeEmailSent"); } diff --git a/src/Orchard.Web/Modules/Orchard.Users/Controllers/AdminController.cs b/src/Orchard.Web/Modules/Orchard.Users/Controllers/AdminController.cs index 96f8d3c05..bdc1f9adc 100644 --- a/src/Orchard.Web/Modules/Orchard.Users/Controllers/AdminController.cs +++ b/src/Orchard.Web/Modules/Orchard.Users/Controllers/AdminController.cs @@ -197,8 +197,7 @@ namespace Orchard.Users.Controllers { var user = Services.ContentManager.Get(id); if ( user != null ) { - string challengeToken = _userService.GetNonce(user.As()); - _userService.SendChallengeEmail(user.As(), Url.AbsoluteAction(() => Url.Action("ChallengeEmail", "Account", new {Area = "Orchard.Users", token = challengeToken}))); + _userService.SendChallengeEmail(user.As(), nonce => Url.AbsoluteAction(() => Url.Action("ChallengeEmail", "Account", new {Area = "Orchard.Users", nonce = nonce}))); } Services.Notifier.Information(T("Challenge email sent")); diff --git a/src/Orchard.Web/Modules/Orchard.Users/Services/IUserService.cs b/src/Orchard.Web/Modules/Orchard.Users/Services/IUserService.cs index d6ba66ff4..acd7a211f 100644 --- a/src/Orchard.Web/Modules/Orchard.Users/Services/IUserService.cs +++ b/src/Orchard.Web/Modules/Orchard.Users/Services/IUserService.cs @@ -5,12 +5,13 @@ namespace Orchard.Users.Services { string VerifyUserUnicity(string userName, string email); string VerifyUserUnicity(int id, string userName, string email); - void SendChallengeEmail(IUser user, string url); + void SendChallengeEmail(IUser user, Func createUrl); IUser ValidateChallenge(string challengeToken); bool SendLostPasswordEmail(string usernameOrEmail, Func createUrl); IUser ValidateLostPassword(string nonce); - string GetNonce(IUser user); + string CreateNonce(IUser user, TimeSpan delay); + bool DecryptNonce(string challengeToken, out string username, out DateTime validateByUtc); } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Users/Services/MembershipService.cs b/src/Orchard.Web/Modules/Orchard.Users/Services/MembershipService.cs index 7b1593207..13fe5349a 100644 --- a/src/Orchard.Web/Modules/Orchard.Users/Services/MembershipService.cs +++ b/src/Orchard.Web/Modules/Orchard.Users/Services/MembershipService.cs @@ -19,7 +19,6 @@ using Orchard.Services; namespace Orchard.Users.Services { [UsedImplicitly] public class MembershipService : IMembershipService { - private static readonly TimeSpan DelayToValidate = new TimeSpan(7, 0, 0, 0); // one week to validate email private readonly IOrchardServices _orchardServices; private readonly IMessageManager _messageManager; private readonly IEnumerable _userEventHandlers; diff --git a/src/Orchard.Web/Modules/Orchard.Users/Services/UserService.cs b/src/Orchard.Web/Modules/Orchard.Users/Services/UserService.cs index f0e2a6c22..ae4951d35 100644 --- a/src/Orchard.Web/Modules/Orchard.Users/Services/UserService.cs +++ b/src/Orchard.Web/Modules/Orchard.Users/Services/UserService.cs @@ -12,22 +12,26 @@ using System.Globalization; using System.Text; using System.Web.Security; using Orchard.Messaging.Services; +using Orchard.Environment.Configuration; namespace Orchard.Users.Services { [UsedImplicitly] public class UserService : IUserService { private static readonly TimeSpan DelayToValidate = new TimeSpan(7, 0, 0, 0); // one week to validate email + private static readonly TimeSpan DelayToResetPassword = new TimeSpan(1, 0, 0, 0); // 24 hours to validate email private readonly IContentManager _contentManager; private readonly IMembershipService _membershipService; private readonly IClock _clock; private readonly IMessageManager _messageManager; + private readonly ShellSettings _shellSettings; - public UserService(IContentManager contentManager, IMembershipService membershipService, IClock clock, IMessageManager messageManager) { + public UserService(IContentManager contentManager, IMembershipService membershipService, IClock clock, IMessageManager messageManager, ShellSettings shellSettings) { _contentManager = contentManager; _membershipService = membershipService; _clock = clock; _messageManager = messageManager; + _shellSettings = shellSettings; Logger = NullLogger.Instance; } @@ -63,23 +67,25 @@ namespace Orchard.Users.Services { return null; } - public string GetNonce(IUser user) { - var challengeToken = new XElement("Token", new XAttribute("username", user.UserName), new XAttribute("validate-by-utc", _clock.UtcNow.Add(DelayToValidate).ToString(CultureInfo.InvariantCulture))).ToString(); - var data = Encoding.UTF8.GetBytes(challengeToken); + public string CreateNonce(IUser user, TimeSpan delay) { + // the tenant's name is added to the token to prevent cross-tenant requests + var challengeToken = new XElement("n", new XAttribute("s", _shellSettings.Name), new XAttribute("un", user.UserName), new XAttribute("utc", _clock.UtcNow.ToUniversalTime().Add(delay).ToString(CultureInfo.InvariantCulture))).ToString(); + var data = Encoding.Unicode.GetBytes(challengeToken); return MachineKey.Encode(data, MachineKeyProtection.All); } - private bool DecryptNonce(string challengeToken, out string username, out DateTime validateByUtc) { + public bool DecryptNonce(string challengeToken, out string username, out DateTime validateByUtc) { username = null; validateByUtc = _clock.UtcNow; try { var data = MachineKey.Decode(challengeToken, MachineKeyProtection.All); - var xml = Encoding.UTF8.GetString(data); + var xml = Encoding.Unicode.GetString(data); var element = XElement.Parse(xml); - username = element.Attribute("username").Value; - validateByUtc = DateTime.Parse(element.Attribute("validate-by-utc").Value, CultureInfo.InvariantCulture); - return true; + var tenant = element.Attribute("s").Value; + username = element.Attribute("un").Value; + validateByUtc = DateTime.Parse(element.Attribute("utc").Value, CultureInfo.InvariantCulture); + return String.Equals(_shellSettings.Name, tenant, StringComparison.Ordinal) && _clock.UtcNow <= validateByUtc; } catch { return false; @@ -107,7 +113,9 @@ namespace Orchard.Users.Services { return user; } - public void SendChallengeEmail(IUser user, string url) { + public void SendChallengeEmail(IUser user, Func createUrl) { + string nonce = CreateNonce(user, DelayToValidate); + string url = createUrl(nonce); _messageManager.Send(user.ContentItem.Record, MessageTypes.Validation, "email", new Dictionary { { "ChallengeUrl", url } }); } @@ -116,7 +124,7 @@ namespace Orchard.Users.Services { var user = _contentManager.Query().Where(u => u.NormalizedUserName == lowerName || u.Email == lowerName).List().FirstOrDefault(); if (user != null) { - string nonce = GetNonce(user); + string nonce = CreateNonce(user, DelayToResetPassword); string url = createUrl(nonce); _messageManager.Send(user.ContentItem.Record, MessageTypes.LostPassword, "email", new Dictionary { { "LostPasswordUrl", url } }); diff --git a/src/Orchard/Messaging/Services/DefaultMessageManager.cs b/src/Orchard/Messaging/Services/DefaultMessageManager.cs index 9b21acaed..3f315d67d 100644 --- a/src/Orchard/Messaging/Services/DefaultMessageManager.cs +++ b/src/Orchard/Messaging/Services/DefaultMessageManager.cs @@ -18,6 +18,7 @@ namespace Orchard.Messaging.Services { IEnumerable channels) { _messageEventHandler = messageEventHandler; _channels = channels; + Logger = NullLogger.Instance; } public void Send(ContentItemRecord recipient, string type, string service, Dictionary properties = null) { From 32730f03094d14ed41573db9dfb411b0bcb4a0e7 Mon Sep 17 00:00:00 2001 From: Renaud Paquay Date: Sun, 28 Nov 2010 18:40:54 -0800 Subject: [PATCH 64/70] Implement evaluation of operators: <, <=, >, >=, ==, != and ! --HG-- branch : dev --- .../Scripting/EvaluatorTests.cs | 56 ++++++++++ .../Compiler/EvaluationResult.cs | 50 +++++++++ .../Orchard.Scripting/Compiler/Interpreter.cs | 43 -------- .../Compiler/InterpreterVisitor.cs | 51 +++++++-- .../Compiler/PrimitiveType.cs | 100 ++++++++++++++++++ .../Orchard.Scripting.csproj | 2 + .../ScriptExpressionEvaluator.cs | 2 +- 7 files changed, 251 insertions(+), 53 deletions(-) create mode 100644 src/Orchard.Web/Modules/Orchard.Scripting/Compiler/EvaluationResult.cs create mode 100644 src/Orchard.Web/Modules/Orchard.Scripting/Compiler/PrimitiveType.cs diff --git a/src/Orchard.Tests.Modules/Scripting/EvaluatorTests.cs b/src/Orchard.Tests.Modules/Scripting/EvaluatorTests.cs index ba8f11835..4f84c496c 100644 --- a/src/Orchard.Tests.Modules/Scripting/EvaluatorTests.cs +++ b/src/Orchard.Tests.Modules/Scripting/EvaluatorTests.cs @@ -35,6 +35,62 @@ namespace Orchard.Tests.Modules.Scripting { Assert.That(result.Value, Is.EqualTo(4)); } + [Test] + public void EvaluateRelationalOperators() { + var result = EvaluateSimpleExpression("1 < 2"); + Assert.That(result.IsError, Is.False); + Assert.That(result.Value, Is.EqualTo(true)); + } + + [Test] + public void EvaluateRelationalOperators2() { + var result = EvaluateSimpleExpression("2 <= 2"); + Assert.That(result.IsError, Is.False); + Assert.That(result.Value, Is.EqualTo(true)); + } + + [Test] + public void EvaluateRelationalOperators3() { + var result = EvaluateSimpleExpression("1 < 2 or 2 > 3 and !false"); + Assert.That(result.IsError, Is.False); + Assert.That(result.Value, Is.EqualTo(true)); + } + + [Test] + public void EvaluateRelationalOperators4() { + var result = EvaluateSimpleExpression("1 > 2 or 2 > 3 and !false"); + Assert.That(result.IsError, Is.False); + Assert.That(result.Value, Is.EqualTo(false)); + } + + [Test] + public void EvaluateRelationalOperators5() { + var result = EvaluateSimpleExpression("1 > 2 or 4 > 3 and !false"); + Assert.That(result.IsError, Is.False); + Assert.That(result.Value, Is.EqualTo(true)); + } + + [Test] + public void EvaluateRelationalOperators6() { + var result = EvaluateSimpleExpression("!false"); + Assert.That(result.IsError, Is.False); + Assert.That(result.Value, Is.EqualTo(true)); + } + + [Test] + public void EvaluateEqualityOperators() { + var result = EvaluateSimpleExpression("1 == 2"); + Assert.That(result.IsError, Is.False); + Assert.That(result.Value, Is.EqualTo(false)); + } + + [Test] + public void EvaluateEqualityOperators2() { + var result = EvaluateSimpleExpression("1 != 2"); + Assert.That(result.IsError, Is.False); + Assert.That(result.Value, Is.EqualTo(true)); + } + [Test] public void EvaluateSimpleMethodCall() { var result = EvaluateSimpleExpression("print 1 + 2 * 3 - 6 / 2", diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/EvaluationResult.cs b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/EvaluationResult.cs new file mode 100644 index 000000000..af0b82c64 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/EvaluationResult.cs @@ -0,0 +1,50 @@ +using System; + +namespace Orchard.Scripting.Compiler { + public class EvaluationResult { + private readonly object _value; + + public EvaluationResult(object value) { + _value = value; + } + + public static EvaluationResult Result(object value) { + if (value is EvaluationResult) + throw new InvalidOperationException("Internal error: value cannot be an evaluation result."); + return new EvaluationResult(value); + } + + public static EvaluationResult Error(string message) { + return new EvaluationResult(new Error { Message = message }); + } + + public object Value { get { return _value; } } + + public bool IsError { get { return Value is Error; } } + public bool IsNil { get { return IsNull; } } + public bool IsNull { get { return Value == null; } } + public bool IsBool { get { return Value is bool; } } + public bool IsInt32 { get { return Value is int; } } + public bool IsString { get { return Value is string; } } + + public Error ErrorValue { get { return (Error)Value; } } + public bool BoolValue { get { return (bool)Value; } } + public int Int32Value { get { return (int)Value; } } + public string StringValue { get { return (string)Value; } } + + public override string ToString() { + if (IsNull) + return ""; + + return Value.ToString(); + } + } + + public class Error { + public string Message { get; set; } + + public override string ToString() { + return string.Format("Error: {0}", Message); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Interpreter.cs b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Interpreter.cs index 54a05aa8c..9b7efadb0 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Interpreter.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Interpreter.cs @@ -13,47 +13,4 @@ namespace Orchard.Scripting.Compiler { public AbstractSyntaxTree Tree { get; set; } public Func, object> MethodInvocationCallback { get; set; } } - - public class EvaluationResult { - private readonly object _value; - - public EvaluationResult(object value) { - _value = value; - } - - public object Value { get { return _value; } } - - public bool IsError { get { return Value is Error; } } - public bool IsNil { get { return Value is Nil; } } - public bool IsNull { get { return Value == null; } } - public bool IsBool { get { return Value is bool; } } - public bool IsInt32 { get { return Value is int; } } - public bool IsString { get { return Value is string; } } - - public Error Error { get { return (Error)Value; } } - public bool BoolValue { get { return (bool)Value; } } - public int Int32Value { get { return (int)Value; } } - public string StringValue { get { return (string)Value; } } - - public override string ToString() { - if (IsNull) - return ""; - - return Value.ToString(); - } - } - - public class Error { - public string Message { get; set; } - - public override string ToString() { - return string.Format("Error: {0}", Message); - } - } - - public class Nil { - public override string ToString() { - return "nil"; - } - } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/InterpreterVisitor.cs b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/InterpreterVisitor.cs index 760f38e7a..a297541aa 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/InterpreterVisitor.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/InterpreterVisitor.cs @@ -27,11 +27,17 @@ namespace Orchard.Scripting.Compiler { if (operandValue.IsError) return operandValue; - var operandBoolValue = ConvertToBool(operandValue); - if (operandBoolValue.IsError) - return operandBoolValue; + switch (node.Operator.Kind) { + case TokenKind.Not: + case TokenKind.NotSign: + var operandBoolValue = ConvertToBool(operandValue); + if (operandBoolValue.IsError) + return operandBoolValue; - return Result(!operandBoolValue.BoolValue); + return Result(!operandBoolValue.BoolValue); + default: + throw new InvalidOperationException(string.Format("Internal error: unary operator '{0}' is not supported.", node.Token.Kind)); + } } public override object VisitBinary(BinaryAstNode node) { @@ -56,8 +62,21 @@ namespace Orchard.Scripting.Compiler { return EvaluateLogical(left, right, (a, b) => Result(a.BoolValue && b.BoolValue)); case TokenKind.Or: return EvaluateLogical(left, right, (a, b) => Result(a.BoolValue || b.BoolValue)); + case TokenKind.EqualEqual: + return EvaluateEquality(left, right, v => v); + case TokenKind.NotEqual: + return EvaluateEquality(left, right, v => !v); + case TokenKind.LessThan: + return EvaluateComparison(left, right, v => v < 0); + case TokenKind.LessThanEqual: + return EvaluateComparison(left, right, v => v <= 0); + case TokenKind.GreaterThan: + return EvaluateComparison(left, right, v => v > 0); + case TokenKind.GreaterThanEqual: + return EvaluateComparison(left, right, v => v >= 0); + default: - throw new InvalidOperationException(string.Format("Internal error: binary expression {0} is not supported.", node.Token)); + throw new InvalidOperationException(string.Format("Internal error: binary operator '{0}' is not supported.", node.Token.Kind)); } } @@ -73,6 +92,22 @@ namespace Orchard.Scripting.Compiler { return Error(node.Message); } + private EvaluationResult EvaluateEquality(EvaluationResult left, EvaluationResult right, Func operation) { + var type = PrimitiveType.InstanceFor(left.Value); + var result = type.EqualityOperator(left, right); + if (result.IsBool) + return Result(operation(result.BoolValue)); + return result; + } + + private EvaluationResult EvaluateComparison(EvaluationResult left, EvaluationResult right, Func operation) { + var type = PrimitiveType.InstanceFor(left.Value); + var result = type.ComparisonOperator(left, right); + if (result.IsInt32) + return Result(operation(result.Int32Value)); + return result; + } + private static EvaluationResult EvaluateArithmetic(EvaluationResult left, EvaluationResult right, Func operation) { //TODO: Proper type conversion @@ -117,13 +152,11 @@ namespace Orchard.Scripting.Compiler { } private static EvaluationResult Result(object value) { - if (value is EvaluationResult) - throw new InvalidOperationException("Internal error: value cannot be an evaluation result."); - return new EvaluationResult(value); + return EvaluationResult.Result(value); } private static EvaluationResult Error(string message) { - return new EvaluationResult(new Error { Message = message }); + return EvaluationResult.Error(message); } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/PrimitiveType.cs b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/PrimitiveType.cs new file mode 100644 index 000000000..cff704695 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/PrimitiveType.cs @@ -0,0 +1,100 @@ +using System; + +namespace Orchard.Scripting.Compiler { + public abstract class PrimitiveType { + public static PrimitiveType InstanceFor(object value) { + if (value == null) + return NilPrimitiveType.Instance; + if (value is bool) + return BooleanPrimitiveType.Instance; + if (value is int) + return IntegerPrimitiveType.Instance; + if (value is string) + return StringPrimitiveType.Instance; + throw new InvalidOperationException(string.Format("Scripting engine internal error: no primitive type for value '{0}'", value)); + } + + public abstract EvaluationResult EqualityOperator(EvaluationResult value, EvaluationResult other); + public abstract EvaluationResult ComparisonOperator(EvaluationResult value, EvaluationResult other); + + protected EvaluationResult Result(object value) { + return EvaluationResult.Result(value); + } + + protected EvaluationResult Error(string message) { + return EvaluationResult.Error(message); + } + } + + public class BooleanPrimitiveType : PrimitiveType { + private static BooleanPrimitiveType _instance; + + public static BooleanPrimitiveType Instance { + get { return _instance ?? (_instance = new BooleanPrimitiveType()); } + } + + public override EvaluationResult EqualityOperator(EvaluationResult value, EvaluationResult other) { + if (value.IsBool && other.IsBool) + return Result(value.BoolValue == other.BoolValue); + return Error("Boolean values can only be compared to other boolean values"); + } + + public override EvaluationResult ComparisonOperator(EvaluationResult value, EvaluationResult other) { + return Error("Boolean values can only be compared to other boolean values"); + } + } + + public class IntegerPrimitiveType : PrimitiveType { + private static IntegerPrimitiveType _instance; + + public static IntegerPrimitiveType Instance { + get { return _instance ?? (_instance = new IntegerPrimitiveType()); } + } + + public override EvaluationResult EqualityOperator(EvaluationResult value, EvaluationResult other) { + if (value.IsInt32 && other.IsInt32) + return Result(value.Int32Value == other.Int32Value); + return Error("Integer values can only be compared to other integer values"); + } + + public override EvaluationResult ComparisonOperator(EvaluationResult value, EvaluationResult other) { + if (value.IsInt32 && other.IsInt32) + return Result(value.Int32Value.CompareTo(other.Int32Value)); + return Error("Integer values can only be compared to other integer values"); + } + } + + public class StringPrimitiveType : PrimitiveType { + private static StringPrimitiveType _instance; + + public static StringPrimitiveType Instance { + get { return _instance ?? (_instance = new StringPrimitiveType()); } + } + + public override EvaluationResult EqualityOperator(EvaluationResult value, EvaluationResult other) { + if (value.IsString && other.IsString) + return Result(value.StringValue == other.StringValue); + return Result(false); + } + + public override EvaluationResult ComparisonOperator(EvaluationResult value, EvaluationResult other) { + return Error("String values can not be compared"); + } + } + + public class NilPrimitiveType : PrimitiveType { + private static NilPrimitiveType _instance; + + public static NilPrimitiveType Instance { + get { return _instance ?? (_instance = new NilPrimitiveType()); } + } + + public override EvaluationResult EqualityOperator(EvaluationResult value, EvaluationResult other) { + return Result(value.IsNull && other.IsNull); + } + + public override EvaluationResult ComparisonOperator(EvaluationResult value, EvaluationResult other) { + return Error("'null' values can not be compared"); + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Orchard.Scripting.csproj b/src/Orchard.Web/Modules/Orchard.Scripting/Orchard.Scripting.csproj index 266f7ac92..64cd6740f 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/Orchard.Scripting.csproj +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Orchard.Scripting.csproj @@ -54,6 +54,8 @@ + + diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/ScriptExpressionEvaluator.cs b/src/Orchard.Web/Modules/Orchard.Scripting/ScriptExpressionEvaluator.cs index a7e4a615b..b6ebf4635 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/ScriptExpressionEvaluator.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/ScriptExpressionEvaluator.cs @@ -32,7 +32,7 @@ namespace Orchard.Scripting { var result = EvaluateExpression(expr.Tree, providers); if (result.IsError) { - throw new ApplicationException(result.Error.Message); + throw new ApplicationException(result.ErrorValue.Message); } return result.Value; From 2afa0fff41c37ebcb926839bed4fd8f72247e22d Mon Sep 17 00:00:00 2001 From: Renaud Paquay Date: Sun, 28 Nov 2010 18:48:24 -0800 Subject: [PATCH 65/70] Implement support for "null" (and "nil") literals --HG-- branch : dev --- src/Orchard.Tests.Modules/Scripting/ParserTests.cs | 10 ++++++++++ src/Orchard.Tests.Modules/Scripting/TokenizerTests.cs | 2 ++ .../Modules/Orchard.Scripting/Compiler/Parser.cs | 1 + .../Orchard.Scripting/Compiler/PrimitiveType.cs | 10 +++++----- .../Modules/Orchard.Scripting/Compiler/TokenKind.cs | 3 ++- .../Modules/Orchard.Scripting/Compiler/Tokenizer.cs | 3 +++ 6 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/Orchard.Tests.Modules/Scripting/ParserTests.cs b/src/Orchard.Tests.Modules/Scripting/ParserTests.cs index 60b5c228c..d4ecfc481 100644 --- a/src/Orchard.Tests.Modules/Scripting/ParserTests.cs +++ b/src/Orchard.Tests.Modules/Scripting/ParserTests.cs @@ -170,6 +170,16 @@ namespace Orchard.Tests.Modules.Scripting { }); } + [Test] + public void ParserShouldUnderstandRelationalOperators7() { + var tree = new Parser("null == null").Parse(); + CheckTree(tree, new object[] { + "binop", TokenKind.EqualEqual, + "const", null, + "const", null, + }); + } + [Test] public void ParserShouldUnderstandRelationalOperatorPrecedence() { var tree = new Parser("1 < 2 or 2 > 3 and !false").Parse(); diff --git a/src/Orchard.Tests.Modules/Scripting/TokenizerTests.cs b/src/Orchard.Tests.Modules/Scripting/TokenizerTests.cs index 406dbfe2c..ecde68e38 100644 --- a/src/Orchard.Tests.Modules/Scripting/TokenizerTests.cs +++ b/src/Orchard.Tests.Modules/Scripting/TokenizerTests.cs @@ -35,6 +35,8 @@ namespace Orchard.Tests.Modules.Scripting { public void LexerShouldProcessReservedWords() { TestReservedWord("true", true, TokenKind.True); TestReservedWord("false", false, TokenKind.False); + TestReservedWord("nil", null, TokenKind.NullLiteral); + TestReservedWord("null", null, TokenKind.NullLiteral); TestReservedWord("not", null, TokenKind.Not); TestReservedWord("and", null, TokenKind.And); TestReservedWord("or", null, TokenKind.Or); diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Parser.cs b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Parser.cs index d29524161..e1157ee45 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Parser.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Parser.cs @@ -113,6 +113,7 @@ namespace Orchard.Scripting.Compiler { private AstNode ParsePrimaryExpression() { var token = _lexer.Token(); switch (_lexer.Token().Kind) { + case TokenKind.NullLiteral: case TokenKind.True: case TokenKind.False: case TokenKind.SingleQuotedStringLiteral: diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/PrimitiveType.cs b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/PrimitiveType.cs index cff704695..8681a86a6 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/PrimitiveType.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/PrimitiveType.cs @@ -4,7 +4,7 @@ namespace Orchard.Scripting.Compiler { public abstract class PrimitiveType { public static PrimitiveType InstanceFor(object value) { if (value == null) - return NilPrimitiveType.Instance; + return NullPrimitiveType.Instance; if (value is bool) return BooleanPrimitiveType.Instance; if (value is int) @@ -82,11 +82,11 @@ namespace Orchard.Scripting.Compiler { } } - public class NilPrimitiveType : PrimitiveType { - private static NilPrimitiveType _instance; + public class NullPrimitiveType : PrimitiveType { + private static NullPrimitiveType _instance; - public static NilPrimitiveType Instance { - get { return _instance ?? (_instance = new NilPrimitiveType()); } + public static NullPrimitiveType Instance { + get { return _instance ?? (_instance = new NullPrimitiveType()); } } public override EvaluationResult EqualityOperator(EvaluationResult value, EvaluationResult other) { diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/TokenKind.cs b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/TokenKind.cs index 4d29abf63..be7e38a63 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/TokenKind.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/TokenKind.cs @@ -25,6 +25,7 @@ LessThan, LessThanEqual, GreaterThan, - GreaterThanEqual + GreaterThanEqual, + NullLiteral } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Tokenizer.cs b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Tokenizer.cs index 338d11aed..070d17136 100644 --- a/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Tokenizer.cs +++ b/src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Tokenizer.cs @@ -155,6 +155,9 @@ namespace Orchard.Scripting.Compiler { return CreateToken(TokenKind.And, null); case "not": return CreateToken(TokenKind.Not, null); + case "null": + case "nil": + return CreateToken(TokenKind.NullLiteral, null); default: return CreateToken(TokenKind.Identifier, identifier); } From 18d30ffeb0e1e6912f72f09117e9bbd59b089f9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Ros?= Date: Sun, 28 Nov 2010 19:02:25 -0800 Subject: [PATCH 66/70] Fixing unit test --HG-- branch : dev --- .../Users/Controllers/AdminControllerTests.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Orchard.Tests.Modules/Users/Controllers/AdminControllerTests.cs b/src/Orchard.Tests.Modules/Users/Controllers/AdminControllerTests.cs index 93440ef52..6f6d395cb 100644 --- a/src/Orchard.Tests.Modules/Users/Controllers/AdminControllerTests.cs +++ b/src/Orchard.Tests.Modules/Users/Controllers/AdminControllerTests.cs @@ -35,6 +35,7 @@ using Orchard.Users.Services; using Orchard.Users.ViewModels; using Orchard.Settings; using Orchard.Core.Settings.Services; +using Orchard.Environment.Configuration; namespace Orchard.Tests.Modules.Users.Controllers { [TestFixture] @@ -68,6 +69,7 @@ namespace Orchard.Tests.Modules.Users.Controllers { builder.RegisterInstance(new Mock().Object); builder.RegisterType().As(); builder.RegisterType().As(); + builder.RegisterInstance(new ShellSettings { Name = "Alpha", RequestUrlHost = "wiki.example.com", RequestUrlPrefix = "~/foo" }); _authorizer = new Mock(); builder.RegisterInstance(_authorizer.Object); From a1c8765fa09bf32936e60567dc3e1340c638735a Mon Sep 17 00:00:00 2001 From: Nathan Heskew Date: Mon, 29 Nov 2010 10:21:54 -0800 Subject: [PATCH 67/70] Making the Resolve HtmlHelper extension method throw once again if a WorkContext isn't found in the request --HG-- branch : dev --- src/Orchard/Mvc/Html/ContainerExtensions.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Orchard/Mvc/Html/ContainerExtensions.cs b/src/Orchard/Mvc/Html/ContainerExtensions.cs index 035947e99..480478bb0 100644 --- a/src/Orchard/Mvc/Html/ContainerExtensions.cs +++ b/src/Orchard/Mvc/Html/ContainerExtensions.cs @@ -2,6 +2,7 @@ using System; using System.Web.Mvc; namespace Orchard.Mvc.Html { + public interface IFoo{} public static class ContainerExtensions { /// /// This method performed by Erik Weisz. @@ -12,7 +13,7 @@ namespace Orchard.Mvc.Html { var workContext = html.ViewContext.RequestContext.GetWorkContext(); if (workContext == null) - return default(TService); + throw new ApplicationException(string.Format(@"The WorkContext cannot be found for the request. Unable to resolve '{0}'.", typeof(TService))); return workContext.Resolve(); } From 3827c90f415efe65ff8e717df3e7d87b83d82861 Mon Sep 17 00:00:00 2001 From: Nathan Heskew Date: Mon, 29 Nov 2010 10:24:28 -0800 Subject: [PATCH 68/70] Changing how the versioned compliment to the CommonPart is welded to the content type in question so as to not have potentially odd problems with an ActivatingFilter applied CommonPart --HG-- branch : dev --- src/Orchard.Web/Core/Common/Handlers/CommonPartHandler.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Orchard.Web/Core/Common/Handlers/CommonPartHandler.cs b/src/Orchard.Web/Core/Common/Handlers/CommonPartHandler.cs index 9ef052cb7..c012a3ddb 100644 --- a/src/Orchard.Web/Core/Common/Handlers/CommonPartHandler.cs +++ b/src/Orchard.Web/Core/Common/Handlers/CommonPartHandler.cs @@ -35,8 +35,6 @@ namespace Orchard.Core.Common.Handlers { Filters.Add(StorageFilter.For(commonRepository)); Filters.Add(StorageFilter.For(commonVersionRepository)); - Filters.Add(new ActivatingFilter>(ContentTypeWithACommonPart)); - OnInitializing(PropertySetHandlers); OnInitializing(AssignCreatingOwner); OnInitializing(AssignCreatingDates); @@ -61,6 +59,11 @@ namespace Orchard.Core.Common.Handlers { public Localizer T { get; set; } + protected override void Activating(ActivatingContentContext context) { + if (ContentTypeWithACommonPart(context.ContentType)) + context.Builder.Weld>(); + } + bool ContentTypeWithACommonPart(string typeName) { //Note: What about content type handlers which activate "CommonPart" in code? var contentTypeDefinition = _contentDefinitionManager.GetTypeDefinition(typeName); From 5b01b310796a9266793768f30a3b85bc298f1d67 Mon Sep 17 00:00:00 2001 From: Renaud Paquay Date: Mon, 29 Nov 2010 10:29:06 -0800 Subject: [PATCH 69/70] Fix SpecFlow tests --HG-- branch : dev --- src/Orchard.Specs/Bindings/OrchardSiteFactory.cs | 2 +- src/Orchard.Specs/Setup.feature | 2 +- src/Orchard.Specs/Setup.feature.cs | 5 ++--- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/Orchard.Specs/Bindings/OrchardSiteFactory.cs b/src/Orchard.Specs/Bindings/OrchardSiteFactory.cs index b9184dc43..a28c02932 100644 --- a/src/Orchard.Specs/Bindings/OrchardSiteFactory.cs +++ b/src/Orchard.Specs/Bindings/OrchardSiteFactory.cs @@ -13,7 +13,7 @@ namespace Orchard.Specs.Bindings { var webApp = Binding(); webApp.GivenIHaveACleanSiteWith(TableData( - new { extension = "module", names = "Orchard.Setup, Orchard.Pages, Orchard.Blogs, Orchard.Messaging, Orchard.Modules, Orchard.Packaging, Orchard.PublishLater, Orchard.Themes, Orchard.Scripting, Orchard.Scripting.Lightweight, Orchard.Widgets, Orchard.Users, Orchard.Roles, Orchard.Comments, Orchard.jQuery, Orchard.Tags, TinyMce" }, + new { extension = "module", names = "Orchard.Setup, Orchard.Pages, Orchard.Blogs, Orchard.Messaging, Orchard.Modules, Orchard.Packaging, Orchard.PublishLater, Orchard.Themes, Orchard.Scripting, Orchard.Widgets, Orchard.Users, Orchard.Roles, Orchard.Comments, Orchard.jQuery, Orchard.Tags, TinyMce" }, new { extension = "core", names = "Common, Dashboard, Feeds, HomePage, Navigation, Contents, Routable, Scheduling, Settings, Shapes, XmlRpc" }, new { extension = "theme", names = "SafeMode, TheAdmin, TheThemeMachine" })); diff --git a/src/Orchard.Specs/Setup.feature b/src/Orchard.Specs/Setup.feature index ba36b9e0e..0ca7bad8d 100644 --- a/src/Orchard.Specs/Setup.feature +++ b/src/Orchard.Specs/Setup.feature @@ -39,7 +39,7 @@ Scenario: Some of the initial form values are required Scenario: Calling setup on a brand new install Given I have a clean site with | extension | names | - | module | Orchard.Setup, Orchard.Pages, Orchard.Users, Orchard.Roles, Orchard.Messaging, Orchard.Scripting, Orchard.Scripting.Lightweight, Orchard.Comments, Orchard.PublishLater, Orchard.Themes, Orchard.Modules, Orchard.Widgets, Orchard.jQuery, TinyMce | + | module | Orchard.Setup, Orchard.Pages, Orchard.Users, Orchard.Roles, Orchard.Messaging, Orchard.Scripting, Orchard.Comments, Orchard.PublishLater, Orchard.Themes, Orchard.Modules, Orchard.Widgets, Orchard.jQuery, TinyMce | | core | Common, Contents, Dashboard, Feeds, HomePage, Navigation, Routable, Scheduling, Settings, Shapes, XmlRpc | | theme | SafeMode, TheThemeMachine | And I am on "/Setup" diff --git a/src/Orchard.Specs/Setup.feature.cs b/src/Orchard.Specs/Setup.feature.cs index b4e35383d..a1efb7e04 100644 --- a/src/Orchard.Specs/Setup.feature.cs +++ b/src/Orchard.Specs/Setup.feature.cs @@ -177,9 +177,8 @@ this.ScenarioSetup(scenarioInfo); table4.AddRow(new string[] { "module", "Orchard.Setup, Orchard.Pages, Orchard.Users, Orchard.Roles, Orchard.Messaging, Or" + - "chard.Scripting, Orchard.Scripting.Lightweight, Orchard.Comments, Orchard.Publis" + - "hLater, Orchard.Themes, Orchard.Modules, Orchard.Widgets, Orchard.jQuery, TinyMc" + - "e"}); + "chard.Scripting, Orchard.Comments, Orchard.PublishLater, Orchard.Themes, Orchard" + + ".Modules, Orchard.Widgets, Orchard.jQuery, TinyMce"}); table4.AddRow(new string[] { "core", "Common, Contents, Dashboard, Feeds, HomePage, Navigation, Routable, Scheduling, S" + From 08990e5ae18013b95ebf364b1acc46de3380477b Mon Sep 17 00:00:00 2001 From: Jonathan Wall Date: Mon, 29 Nov 2010 11:46:09 -0800 Subject: [PATCH 70/70] Updated header font sizes in the theme machine. --HG-- branch : dev --- src/Orchard.Web/Themes/TheThemeMachine/Styles/Site.css | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Orchard.Web/Themes/TheThemeMachine/Styles/Site.css b/src/Orchard.Web/Themes/TheThemeMachine/Styles/Site.css index fc59d7d89..e51a40030 100644 --- a/src/Orchard.Web/Themes/TheThemeMachine/Styles/Site.css +++ b/src/Orchard.Web/Themes/TheThemeMachine/Styles/Site.css @@ -120,10 +120,10 @@ body { /* Headings */ h1,h2,h3,h4,h5,h6 { font-weight: normal; margin:.6em 0;} -h1 { font-size: 1.231em; } -h2 { font-size: 1.154em; } -h3 { font-size: 1.077em; } -h4 { font-size: 1em; } +h1 { font-size: 1.308em; } +h2 { font-size: 1.231em; } +h3 { font-size: 1.154em; } +h4 { font-size: 1.077em; } h5 { font-size: 1em; } h6 { font-size: 1em; }