You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自定义ASP.NET Identity的错误提示字符串为西班牙语?

如何将ASP.NET Identity的错误提示替换为西班牙语

没问题,要把ASP.NET Identity的所有错误提示换成西班牙语其实很简单,核心是自定义Identity的错误描述器,下面是具体步骤:

1. 创建自定义的西班牙语错误描述器类

ASP.NET Identity默认的错误消息是通过IdentityErrorDescriber类生成的,我们只需要继承这个类,重写每个错误方法并返回对应的西班牙语消息即可。

创建一个新类,比如SpanishIdentityErrorDescriber,代码如下:

using Microsoft.AspNetCore.Identity;

public class SpanishIdentityErrorDescriber : IdentityErrorDescriber
{
    // 密码过短的错误提示
    public override IdentityError PasswordTooShort(int length)
    {
        return new IdentityError
        {
            Code = nameof(PasswordTooShort),
            Description = $"La contraseña debe tener al menos {length} caracteres."
        };
    }

    // 密码需要包含非字母数字字符的提示
    public override IdentityError PasswordRequiresNonAlphanumeric()
    {
        return new IdentityError
        {
            Code = nameof(PasswordRequiresNonAlphanumeric),
            Description = "La contraseña debe contener al menos un carácter no alfanumérico."
        };
    }

    // 密码需要包含数字的提示
    public override IdentityError PasswordRequiresDigit()
    {
        return new IdentityError
        {
            Code = nameof(PasswordRequiresDigit),
            Description = "La contraseña debe contener al menos un dígito (0-9)."
        };
    }

    // 密码需要包含小写字母的提示
    public override IdentityError PasswordRequiresLower()
    {
        return new IdentityError
        {
            Code = nameof(PasswordRequiresLower),
            Description = "La contraseña debe contener al menos una letra minúscula."
        };
    }

    // 密码需要包含大写字母的提示
    public override IdentityError PasswordRequiresUpper()
    {
        return new IdentityError
        {
            Code = nameof(PasswordRequiresUpper),
            Description = "La contraseña debe contener al menos una letra mayúscula."
        };
    }

    // 密码不匹配的提示
    public override IdentityError PasswordMismatch()
    {
        return new IdentityError
        {
            Code = nameof(PasswordMismatch),
            Description = "Contraseña incorrecta."
        };
    }

    // 用户已存在的提示
    public override IdentityError UserAlreadyExists()
    {
        return new IdentityError
        {
            Code = nameof(UserAlreadyExists),
            Description = "Ya existe un usuario con ese nombre de usuario."
        };
    }

    // 无效用户名的提示
    public override IdentityError InvalidUserName(string userName)
    {
        return new IdentityError
        {
            Code = nameof(InvalidUserName),
            Description = $"El nombre de usuario '{userName}' no es válido. Solo se permiten letras, dígitos y los caracteres @, ., +, -, _."
        };
    }

    // 无效邮箱的提示
    public override IdentityError InvalidEmail(string email)
    {
        return new IdentityError
        {
            Code = nameof(InvalidEmail),
            Description = $"El correo electrónico '{email}' no es válido."
        };
    }

    // 邮箱已存在的提示
    public override IdentityError DuplicateEmail(string email)
    {
        return new IdentityError
        {
            Code = nameof(DuplicateEmail),
            Description = $"El correo electrónico '{email}' ya está registrado."
        };
    }

    // 如果你还需要覆盖其他错误类型(比如锁定、令牌相关),继续重写对应的方法即可
}

2. 注册自定义错误描述器到DI容器

接下来,需要告诉ASP.NET使用我们自定义的错误描述器,而不是默认的。根据你的.NET版本,修改对应的配置文件:

对于.NET 6+(Program.cs)

在添加Identity服务的地方,加上.AddErrorDescriber<SpanishIdentityErrorDescriber>():

builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddErrorDescriber<SpanishIdentityErrorDescriber>() // 注册自定义描述器
    .AddEntityFrameworkStores<ApplicationDbContext>();

对于.NET 5及更早版本(Startup.cs)

在ConfigureServices方法里的Identity配置中添加同样的代码:

services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddErrorDescriber<SpanishIdentityErrorDescriber>()
    .AddEntityFrameworkStores<ApplicationDbContext>();

3. 验证效果

完成上面两步后,当你使用Identity的方法(比如_userManager.CreateAsync()、_userManager.ChangePasswordAsync()等)时,返回的IdentityResult中的错误消息就会自动变成西班牙语了。比如之前的"Passwords must be at least 6 characters."会变成"La contraseña debe tener al menos 6 caracteres."

如果有遗漏的错误类型,只需要回到SpanishIdentityErrorDescriber类中,重写对应的方法并添加西班牙语描述即可。

内容的提问来源于stack exchange,提问作者henoc salinas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:29:56