Add missing translations for login and other client forms (#1153)

This commit is contained in:
Leendert de Borst
2025-08-28 12:29:34 +02:00
committed by Leendert de Borst
parent 19406cf58d
commit ef72abceb4
7 changed files with 72 additions and 8 deletions

View File

@@ -0,0 +1,44 @@
//-----------------------------------------------------------------------
// <copyright file="LoginFormModel.cs" company="lanedirt">
// Copyright (c) lanedirt. All rights reserved.
// Licensed under the AGPLv3 license. See LICENSE.md file in the project root for full license information.
// </copyright>
//-----------------------------------------------------------------------
namespace AliasVault.Client.Auth.Models;
using System.ComponentModel.DataAnnotations;
using AliasVault.Client.Resources;
using AliasVault.Shared.Models.WebApi.Auth;
/// <summary>
/// Login form model with localized validation.
/// </summary>
public class LoginFormModel : LoginModel
{
/// <summary>
/// Gets or sets the username.
/// </summary>
[Required(ErrorMessageResourceType = typeof(ValidationMessages), ErrorMessageResourceName = nameof(ValidationMessages.UsernameRequired))]
public new string Username { get; set; } = null!;
/// <summary>
/// Gets or sets the password.
/// </summary>
[Required(ErrorMessageResourceType = typeof(ValidationMessages), ErrorMessageResourceName = nameof(ValidationMessages.PasswordRequired))]
public new string Password { get; set; } = null!;
/// <summary>
/// Converts the form model to the base model.
/// </summary>
/// <returns>The base LoginModel.</returns>
public LoginModel ToBaseModel()
{
return new LoginModel
{
Username = Username,
Password = Password,
RememberMe = RememberMe,
};
}
}

View File

@@ -20,20 +20,20 @@ public class RegisterFormModel : RegisterModel
/// <summary>
/// Gets or sets the username.
/// </summary>
[Required]
[Required(ErrorMessageResourceType = typeof(ValidationMessages), ErrorMessageResourceName = nameof(ValidationMessages.UsernameRequired))]
public new string Username { get; set; } = null!;
/// <summary>
/// Gets or sets the password.
/// </summary>
[Required]
[Required(ErrorMessageResourceType = typeof(ValidationMessages), ErrorMessageResourceName = nameof(ValidationMessages.PasswordRequired))]
[MinLength(8, ErrorMessageResourceType = typeof(ValidationMessages), ErrorMessageResourceName = nameof(ValidationMessages.PasswordMinLengthGeneric))]
public new string Password { get; set; } = null!;
/// <summary>
/// Gets or sets the password confirmation.
/// </summary>
[Required]
[Required(ErrorMessageResourceType = typeof(ValidationMessages), ErrorMessageResourceName = nameof(ValidationMessages.PasswordRequired))]
[Compare("Password", ErrorMessageResourceType = typeof(ValidationMessages), ErrorMessageResourceName = nameof(ValidationMessages.PasswordsDoNotMatchGeneric))]
public new string PasswordConfirm { get; set; } = null!;

View File

@@ -6,6 +6,7 @@
@using System.Text.Json
@using AliasVault.Shared.Models.WebApi.Auth
@using AliasVault.Client.Auth.Components
@using AliasVault.Client.Auth.Models
@using AliasVault.Client.Utilities
@using AliasVault.Cryptography.Client
@using SecureRemotePassword
@@ -118,7 +119,7 @@ else
}
@code {
private readonly LoginModel _loginModel = new();
private readonly LoginFormModel _loginModel = new();
private readonly LoginModel2Fa _loginModel2Fa = new();
private readonly LoginModelRecoveryCode _loginModelRecoveryCode = new();
private FullScreenLoadingIndicator _loadingIndicator = new();

View File

@@ -15,6 +15,7 @@ using System.Text.Json;
using System.Text.Json.Serialization;
using AliasClientDb;
using AliasVault.Client.Main.Models.FormValidation;
using AliasVault.Client.Resources;
/// <summary>
/// Credential edit model.
@@ -39,7 +40,7 @@ public sealed class CredentialEdit
/// <summary>
/// Gets or sets the name of the service.
/// </summary>
[Required]
[Required(ErrorMessageResourceType = typeof(ValidationMessages), ErrorMessageResourceName = nameof(ValidationMessages.ServiceNameRequired))]
[Display(Name = "Service Name")]
public string ServiceName { get; set; } = string.Empty;

View File

@@ -19,20 +19,20 @@ public class PasswordChangeFormModel : PasswordChangeModel
/// <summary>
/// Gets or sets the current password.
/// </summary>
[Required]
[Required(ErrorMessageResourceType = typeof(ValidationMessages), ErrorMessageResourceName = nameof(ValidationMessages.PasswordRequired))]
public new string CurrentPassword { get; set; } = null!;
/// <summary>
/// Gets or sets the new password.
/// </summary>
[Required]
[Required(ErrorMessageResourceType = typeof(ValidationMessages), ErrorMessageResourceName = nameof(ValidationMessages.PasswordRequired))]
[MinLength(10, ErrorMessageResourceType = typeof(ValidationMessages), ErrorMessageResourceName = nameof(ValidationMessages.PasswordMinLength))]
public new string NewPassword { get; set; } = null!;
/// <summary>
/// Gets or sets the password confirmation.
/// </summary>
[Required]
[Required(ErrorMessageResourceType = typeof(ValidationMessages), ErrorMessageResourceName = nameof(ValidationMessages.PasswordRequired))]
[Compare("NewPassword", ErrorMessageResourceType = typeof(ValidationMessages), ErrorMessageResourceName = nameof(ValidationMessages.PasswordsDoNotMatch))]
public new string NewPasswordConfirm { get; set; } = null!;

View File

@@ -60,6 +60,16 @@ public static class ValidationMessages
/// </summary>
public static string MustAcceptTerms => GetResourceValue("MustAcceptTerms");
/// <summary>
/// Gets the error message when service name is required.
/// </summary>
public static string ServiceNameRequired => GetResourceValue("ServiceNameRequired");
/// <summary>
/// Gets the generic error message when a field is required.
/// </summary>
public static string FieldRequired => GetResourceValue("FieldRequired");
/// <summary>
/// Gets the resource value for the specified key.
/// </summary>

View File

@@ -90,6 +90,14 @@
<value>Secret key is required</value>
<comment>Error message when secret key is required</comment>
</data>
<data name="ServiceNameRequired" xml:space="preserve">
<value>Service name is required</value>
<comment>Error message when service name is required</comment>
</data>
<data name="FieldRequired" xml:space="preserve">
<value>This field is required</value>
<comment>Generic error message when a field is required</comment>
</data>
<!-- Terms and conditions -->
<data name="MustAcceptTerms" xml:space="preserve">