localisation

This commit is contained in:
2017-09-24 17:22:25 +02:00
parent c028ec7036
commit 2eddfde6ce
8 changed files with 146 additions and 14 deletions

View File

@ -0,0 +1,58 @@
using System;
namespace Yavsc.Attributes.Validation
{
public class YaValidationAttribute : System.ComponentModel.DataAnnotations.ValidationAttribute
{
public YaValidationAttribute() : base(()=> Startup.GlobalLocalizer["validationError"])
{
}
public override string FormatErrorMessage(string name)
{
return Startup.GlobalLocalizer[name];
}
}
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)]
public class YaRequiredAttribute : YaValidationAttribute
{
/// <summary>
/// Gets or sets a flag indicating whether the attribute should allow empty strings.
/// </summary>
public bool AllowEmptyStrings { get; set; }
public YaRequiredAttribute (string msg) : base()
{
ErrorMessage = msg;
}
public YaRequiredAttribute ()
{
this.ErrorMessage = Startup.GlobalLocalizer["RequiredField"];
}
public override bool IsValid(object value) {
if (value == null) {
return false;
}
// only check string length if empty strings are not allowed
var stringValue = value as string;
if (stringValue != null && !AllowEmptyStrings) {
return stringValue.Trim().Length != 0;
}
return true;
}
}
public class YaRegularExpression : System.ComponentModel.DataAnnotations.RegularExpressionAttribute {
public YaRegularExpression(string pattern): base (pattern)
{
this.ErrorMessage = pattern;
}
public override string FormatErrorMessage(string name)
{
return Startup.GlobalLocalizer[name];
}
}
}

View File

@ -626,7 +626,7 @@ namespace Yavsc.Controllers
{
foreach (var error in result.Errors)
{
ModelState.AddModelError(string.Empty, error.Description);
ModelState.AddModelError(string.Empty, _localizer[ error.Code ]);
}
}

View File

@ -341,4 +341,10 @@ contact a performer</value></data>
<data name="Longueur de cheveux"><value>Hair Length</value></data>
<data name="Français"><value>French</value></data>
<data name="Anglais"><value>English</value></data>
<data name="RequiredField"><value>This field is required.</value></data>
<data name="PasswordTooShort"><value>Passwords must be at least {0} characters.</value></data>
<data name="PasswordRequiresNonLetterAndDigit"><value>Passwords must have at least one non letter and non digit character.</value></data>
<data name="PasswordRequiresDigit"><value>Passwords must have at least one digit ('0'-'9').</value></data>
<data name="PasswordRequiresUpper"><value>Passwords must have at least one uppercase ('A'-'Z').</value></data>
</root>

View File

@ -437,4 +437,13 @@
<data name="UnsetActivity"><value>Supprimer mon profil professionel</value></data>
<data name="Français"><value>Français</value></data>
<data name="Anglais"><value>Anglais</value></data>
<data name="invalidUserName"><value>Nom d'utilisateur invalide.
Les valides sont: le souligné '_', le titret '-', de 'a' à 'z', de 'A' à 'Z', de 0 à 9, l'espace et le point.</value></data>
<data name="RequiredField"><value>Ce champ est obligatoire.</value></data>
<data name="validationError"><value>Champ invalide ...</value></data>
<data name="PasswordTooShort"><value>Le Mot de passe doit contenir au moins 6 caractères.</value></data>
<data name="PasswordRequiresNonLetterAndDigit"><value>Mot de passe doit contenir au moins a caractère spécial (ni un chiffre, ni une lettre).</value></data>
<data name="PasswordRequiresDigit"><value>Les mots de passe doivent contenir au moins un chiffre ('0' à '9').</value></data>
<data name="PasswordRequiresUpper"><value>Les mots de passe doivent contenir au moins une lettre majuscule ('A' à 'Z').</value></data>
</root>

View File

@ -1,24 +1,32 @@
using System.ComponentModel.DataAnnotations;
using Yavsc.Attributes.Validation;
namespace Yavsc.ViewModels.Account
{
public class RegisterViewModel
{
[Required][Display(Name = "Nom d'utilisateur")]
// ErrorMessage = "",
[Display(Name = "Nom d'utilisateur")]
[StringLength(102)]
[YaRegularExpression(@"[a-zA-Z0-9 ._-]+",
ErrorMessage = "Caratères autorisés: lettres, chiffres, espace point tiret et souligné.")]
public string UserName { get; set; }
[Required]
[EmailAddress]
[YaRequired("Ce champ est requis.")]
// [EmailAddress]
[Display(Name = "Email")]
public string Email { get; set; }
[Required]
[StringLength(100, ErrorMessage = "Le {0} doit être long d'au moins {2} caractères.", MinimumLength = 6)]
[DataType(DataType.Password, ErrorMessage="Les mots de passe doivent contenir au moins un caractère spécial, qui ne soit ni une lettre ni un chiffre.")]
[YaRequired(ErrorMessage="Spécifiez un mot de passe.")]
// [StringLength(100, ErrorMessage = "Le {0} doit être long d'au moins {1} caractères.", MinimumLength = 6)]
[DataType(DataType.Password,
ErrorMessage = "Les mots de passe doivent contenir au moins un caractère spécial, qui ne soit ni une lettre ni un chiffre.")]
[Display(Name = "Mot de passe")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirmer le mot de passe")]
[Compare("Password", ErrorMessage = "Le mot de passe et sa confirmation ne sont pas les mêmes.")]
public string ConfirmPassword { get; set; }

View File

@ -17,14 +17,14 @@
<div class="form-group">
<label asp-for="UserName" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="UserName" class="form-control" placeholder="Your Name" required/>
<input asp-for="UserName" class="form-control" placeholder="Your Name" />
<span asp-validation-for="UserName" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<label asp-for="Email" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="Email" class="form-control" placeholder="Your@@email" required/>
<input asp-for="Email" class="form-control" placeholder="Your@@email" />
<span asp-validation-for="Email" class="text-danger"></span>
</div>
</div>

View File

@ -0,0 +1,54 @@
@model RegisterViewModel
@{
ViewData["Title"] = @SR["Register"];
}
@section header{
<script src="~/lib/jquery-validation/jquery.validate.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>
}
<h2>@ViewData["Title"].</h2>
<form asp-controller="Account" asp-action="Register" data-toggle="validator" method="post" class="form-horizontal" role="form">
<h4>@SR["Create a new account"].</h4>
<hr />
<div asp-validation-summary="ValidationSummary.All" class="text-danger"></div>
<div class="form-group">
<label asp-for="UserName" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="UserName" class="form-control" placeholder="Votre nom"/>
<span asp-validation-for="UserName" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<label asp-for="Email" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="Email" class="form-control" placeholder="votre@@email" />
<span asp-validation-for="Email" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<label asp-for="Password" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="Password" class="form-control" />
<span asp-validation-for="Password" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<label asp-for="ConfirmPassword" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="ConfirmPassword" class="form-control" />
<span asp-validation-for="ConfirmPassword" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<button type="submit" class="btn btn-default">@SR["Register"]</button>
</div>
</div>
</form>
@section Scripts {
@{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); }
}

View File

@ -100,8 +100,6 @@ h6 {
</ul>
</li>
</ul>
@await Html.PartialAsync("_LoginPartial")
</div>
</div>
@ -112,8 +110,7 @@ h6 {
<h2 markdown="@n.title"></h2>
<a class="close" data-dismiss="alert" aria-label="close" onclick="notifClick(@n.Id)">@((n.click_action==null)?SR["Fermer"]:SR[n.click_action])</a>
<markdown>@n.body</markdown>
</div>
}
</div>}
}
@RenderSection("subbanner", required: false)
<main class="container body-content" role="main">