Allows to customize the English localized text of Identity errors.

Resolve #7280
pull/7362/head
maliming 5 years ago
parent 053881b31b
commit 9fb4ad6e6c

@ -1,17 +1,18 @@
using System;
using System.Collections;
using System.Linq;
using System.Collections.Generic;
using System.Globalization;
using System.Resources;
using Microsoft.Extensions.Localization;
using Volo.Abp.Identity;
using Volo.Abp.Localization;
using Volo.Abp.Text.Formatting;
namespace Microsoft.AspNetCore.Identity
{
public static class AbpIdentityResultExtensions
{
//TODO: cache?
private static readonly ResourceManager IdentityResourceManager = new ResourceManager("Microsoft.Extensions.Identity.Core.Resources", typeof(UserManager<>).Assembly);
public static void CheckErrors(this IdentityResult identityResult)
{
if (identityResult.Succeeded)
@ -41,25 +42,19 @@ namespace Microsoft.AspNetCore.Identity
}
var error = identityResult.Errors.First();
var key = $"Volo.Abp.Identity:{error.Code}";
var englishString = IdentityResourceManager.GetString(error.Code);
using (CultureHelper.Use(CultureInfo.GetCultureInfo("en")))
if (englishString == null)
{
var englishLocalizedString = localizer[key];
if (englishLocalizedString.ResourceNotFound)
{
return Array.Empty<string>();
}
if (FormattedStringValueExtracter.IsMatch(error.Description, englishLocalizedString.Value,
out var values))
{
return values;
}
return Array.Empty<string>();
}
if (FormattedStringValueExtracter.IsMatch(error.Description, englishString, out var values))
{
return values;
}
return Array.Empty<string>();
}
public static string LocalizeErrors(this IdentityResult identityResult, IStringLocalizer localizer)
@ -85,16 +80,12 @@ namespace Microsoft.AspNetCore.Identity
if (!localizedString.ResourceNotFound)
{
using (CultureHelper.Use(CultureInfo.GetCultureInfo("en")))
var englishString = IdentityResourceManager.GetString(error.Code);
if (englishString != null)
{
var englishLocalizedString = localizer[key];
if (!englishLocalizedString.ResourceNotFound)
if (FormattedStringValueExtracter.IsMatch(error.Description, englishString, out var values))
{
if (FormattedStringValueExtracter.IsMatch(error.Description, englishLocalizedString.Value,
out var values))
{
return string.Format(localizedString.Value, values.Cast<object>().ToArray());
}
return string.Format(localizedString.Value, values.Cast<object>().ToArray());
}
}
}

@ -19,6 +19,12 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNETTestSdkPackageVersion)" />
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="$(MicrosoftPackageVersion)" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Volo\Abp\Identity\LocalizationExtensions\*.json" />
<Content Remove="Volo\Abp\Identity\LocalizationExtensions\*.json" />
</ItemGroup>
</Project>

@ -2,9 +2,12 @@
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Domain.Entities.Events.Distributed;
using Volo.Abp.Identity.EntityFrameworkCore;
using Volo.Abp.Identity.Localization;
using Volo.Abp.Localization;
using Volo.Abp.Modularity;
using Volo.Abp.PermissionManagement.Identity;
using Volo.Abp.Threading;
using Volo.Abp.VirtualFileSystem;
namespace Volo.Abp.Identity
{
@ -21,6 +24,18 @@ namespace Volo.Abp.Identity
{
options.AutoEventSelectors.Add<IdentityUser>();
});
Configure<AbpVirtualFileSystemOptions>(options =>
{
options.FileSets.AddEmbedded<AbpIdentityDomainTestModule>();
});
Configure<AbpLocalizationOptions>(options =>
{
options.Resources
.Get<IdentityResource>()
.AddVirtualJson("/Volo/Abp/Identity/LocalizationExtensions");
});
}
public override void OnApplicationInitialization(ApplicationInitializationContext context)

@ -28,10 +28,18 @@ namespace Volo.Abp.Identity
using (CultureHelper.Use("tr"))
{
var localizeMessage = exception.LocalizeMessage(new LocalizationContext(ServiceProvider));
localizeMessage.ShouldContain("Şifre en az 6 karakter uzunluğunda olmalı.");
localizeMessage.ShouldContain("Şifre en az bir sayı ya da harf olmayan karakter içermeli.");
}
using (CultureHelper.Use("en"))
{
var localizeMessage = exception.LocalizeMessage(new LocalizationContext(ServiceProvider));
localizeMessage.ShouldContain("Password length must be greater than 6 characters.");
localizeMessage.ShouldContain("Password must contain at least one non-alphanumeric character.");
}
}
}
}

@ -0,0 +1,7 @@
{
"culture": "en",
"texts": {
"Volo.Abp.Identity:PasswordTooShort": "Password length must be greater than {0} characters.",
"Volo.Abp.Identity:PasswordRequiresNonAlphanumeric": "Password must contain at least one non-alphanumeric character."
}
}
Loading…
Cancel
Save