From edff85f6ac97cac63ec708827f9d1988255f0362 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 5 Oct 2020 16:11:56 +0300 Subject: [PATCH] Resolved #5525: Exception Handling for the Blazor UI. Resolved #5701: Introduce Volo.Abp.ExceptionHandling package. --- framework/Volo.Abp.sln | 7 ++ .../UserExceptionInformer.cs | 38 +++--- .../Controllers/ErrorController.cs | 9 +- .../ExceptionHandling/AbpExceptionFilter.cs | 8 +- .../AbpExceptionPageFilter.cs | 8 +- .../Volo.Abp.AspNetCore.csproj | 4 +- .../Abp/AspNetCore/AbpAspNetCoreModule.cs | 12 +- .../AbpExceptionHandlingMiddleware.cs | 5 +- .../Volo.Abp.Ddd.Domain.csproj | 1 + .../Volo/Abp/Domain/AbpDddDomainModule.cs | 4 +- .../FodyWeavers.xml | 3 + .../FodyWeavers.xsd | 30 +++++ .../Volo.Abp.ExceptionHandling.csproj | 25 ++++ .../DefaultExceptionToErrorInfoConverter.cs | 24 ++-- .../IExceptionToErrorInfoConverter.cs | 7 +- .../Entities/EntityNotFoundException.cs | 0 .../AbpExceptionHandlingModule.cs | 33 +++++ .../AbpExceptionHandlingResource.cs | 10 ++ .../ExceptionHandling/Localization/ar.json | 23 ++++ .../ExceptionHandling/Localization/cs.json | 23 ++++ .../ExceptionHandling/Localization/de.json | 23 ++++ .../ExceptionHandling/Localization/en.json | 23 ++++ .../ExceptionHandling/Localization/es.json | 23 ++++ .../ExceptionHandling/Localization/fr.json | 23 ++++ .../ExceptionHandling/Localization/nl.json | 23 ++++ .../ExceptionHandling/Localization/pl-PL.json | 18 +++ .../ExceptionHandling/Localization/pt-BR.json | 23 ++++ .../ExceptionHandling/Localization/ru.json | 23 ++++ .../ExceptionHandling/Localization/sl.json | 23 ++++ .../ExceptionHandling/Localization/tr.json | 23 ++++ .../ExceptionHandling/Localization/vi.json | 18 +++ .../Localization/zh-Hans.json | 23 ++++ .../Localization/zh-Hant.json | 23 ++++ .../Volo/Abp/Http/RemoteServiceErrorInfo.cs | 0 .../Abp/Http/RemoteServiceErrorResponse.cs | 0 .../Http/RemoteServiceValidationErrorInfo.cs | 0 .../Volo.Abp.Http.Client.csproj | 1 + .../Abp/Http/Client/AbpHttpClientModule.cs | 4 +- .../Localization/Resources/AbpUi/ar.json | 20 +-- .../Localization/Resources/AbpUi/cs.json | 18 --- .../Localization/Resources/AbpUi/de.json | 18 --- .../Localization/Resources/AbpUi/en.json | 18 --- .../Localization/Resources/AbpUi/es.json | 20 +-- .../Localization/Resources/AbpUi/fr.json | 118 ++++++++---------- .../Localization/Resources/AbpUi/nl.json | 18 --- .../Localization/Resources/AbpUi/pl-PL.json | 15 +-- .../Localization/Resources/AbpUi/pt-BR.json | 20 +-- .../Localization/Resources/AbpUi/ru.json | 18 --- .../Localization/Resources/AbpUi/sl.json | 18 --- .../Localization/Resources/AbpUi/tr.json | 18 --- .../Localization/Resources/AbpUi/vi.json | 13 -- .../Localization/Resources/AbpUi/zh-Hans.json | 18 --- .../Localization/Resources/AbpUi/zh-Hant.json | 18 --- framework/src/Volo.Abp.UI/Volo.Abp.UI.csproj | 2 +- .../Volo.Abp.UI/Volo/Abp/Ui/AbpUiModule.cs | 6 +- nupkg/common.ps1 | 1 + 56 files changed, 571 insertions(+), 374 deletions(-) create mode 100644 framework/src/Volo.Abp.ExceptionHandling/FodyWeavers.xml create mode 100644 framework/src/Volo.Abp.ExceptionHandling/FodyWeavers.xsd create mode 100644 framework/src/Volo.Abp.ExceptionHandling/Volo.Abp.ExceptionHandling.csproj rename framework/src/{Volo.Abp.AspNetCore => Volo.Abp.ExceptionHandling}/Volo/Abp/AspNetCore/ExceptionHandling/DefaultExceptionToErrorInfoConverter.cs (93%) rename framework/src/{Volo.Abp.AspNetCore => Volo.Abp.ExceptionHandling}/Volo/Abp/AspNetCore/ExceptionHandling/IExceptionToErrorInfoConverter.cs (72%) rename framework/src/{Volo.Abp.Ddd.Domain => Volo.Abp.ExceptionHandling}/Volo/Abp/Domain/Entities/EntityNotFoundException.cs (100%) create mode 100644 framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/AbpExceptionHandlingModule.cs create mode 100644 framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/AbpExceptionHandlingResource.cs create mode 100644 framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/ar.json create mode 100644 framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/cs.json create mode 100644 framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/de.json create mode 100644 framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/en.json create mode 100644 framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/es.json create mode 100644 framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/fr.json create mode 100644 framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/nl.json create mode 100644 framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/pl-PL.json create mode 100644 framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/pt-BR.json create mode 100644 framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/ru.json create mode 100644 framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/sl.json create mode 100644 framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/tr.json create mode 100644 framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/vi.json create mode 100644 framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/zh-Hans.json create mode 100644 framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/zh-Hant.json rename framework/src/{Volo.Abp.Http => Volo.Abp.ExceptionHandling}/Volo/Abp/Http/RemoteServiceErrorInfo.cs (100%) rename framework/src/{Volo.Abp.Http => Volo.Abp.ExceptionHandling}/Volo/Abp/Http/RemoteServiceErrorResponse.cs (100%) rename framework/src/{Volo.Abp.Http => Volo.Abp.ExceptionHandling}/Volo/Abp/Http/RemoteServiceValidationErrorInfo.cs (100%) diff --git a/framework/Volo.Abp.sln b/framework/Volo.Abp.sln index 503b42c7e1..c64adcbb0f 100644 --- a/framework/Volo.Abp.sln +++ b/framework/Volo.Abp.sln @@ -347,6 +347,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Autofac.WebAssembl EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.AspNetCore.Authentication.OpenIdConnect", "src\Volo.Abp.AspNetCore.Authentication.OpenIdConnect\Volo.Abp.AspNetCore.Authentication.OpenIdConnect.csproj", "{DEFE3DB2-EA4F-4F90-87FC-B25D64427BC5}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.ExceptionHandling", "src\Volo.Abp.ExceptionHandling\Volo.Abp.ExceptionHandling.csproj", "{B9D1ADCB-D552-4626-A1F1-78FF72C1E822}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -1033,6 +1035,10 @@ Global {DEFE3DB2-EA4F-4F90-87FC-B25D64427BC5}.Debug|Any CPU.Build.0 = Debug|Any CPU {DEFE3DB2-EA4F-4F90-87FC-B25D64427BC5}.Release|Any CPU.ActiveCfg = Release|Any CPU {DEFE3DB2-EA4F-4F90-87FC-B25D64427BC5}.Release|Any CPU.Build.0 = Release|Any CPU + {B9D1ADCB-D552-4626-A1F1-78FF72C1E822}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B9D1ADCB-D552-4626-A1F1-78FF72C1E822}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B9D1ADCB-D552-4626-A1F1-78FF72C1E822}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B9D1ADCB-D552-4626-A1F1-78FF72C1E822}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1208,6 +1214,7 @@ Global {29CA7471-4E3E-4E75-8B33-001DDF682F01} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} {37F89B0B-1C6B-426F-A5EE-676D1956D9E9} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} {DEFE3DB2-EA4F-4F90-87FC-B25D64427BC5} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} + {B9D1ADCB-D552-4626-A1F1-78FF72C1E822} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BB97ECF4-9A84-433F-A80B-2A3285BDD1D5} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/ExceptionHandling/UserExceptionInformer.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/ExceptionHandling/UserExceptionInformer.cs index 067248d7e9..80f80c675a 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/ExceptionHandling/UserExceptionInformer.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/ExceptionHandling/UserExceptionInformer.cs @@ -1,47 +1,49 @@ using System; using System.Threading.Tasks; +using Volo.Abp.AspNetCore.ExceptionHandling; using Volo.Abp.DependencyInjection; +using Volo.Abp.Http; using Volo.Abp.Http.Client; -using Volo.Abp.Validation; namespace Volo.Abp.AspNetCore.Components.WebAssembly.ExceptionHandling { public class UserExceptionInformer : IUserExceptionInformer, ITransientDependency { - private readonly IUiMessageService _messageService; + protected IUiMessageService MessageService { get; } + protected IExceptionToErrorInfoConverter ExceptionToErrorInfoConverter { get; } - public UserExceptionInformer(IUiMessageService messageService) + public UserExceptionInformer(IUiMessageService messageService, IExceptionToErrorInfoConverter exceptionToErrorInfoConverter) { - _messageService = messageService; + MessageService = messageService; + ExceptionToErrorInfoConverter = exceptionToErrorInfoConverter; } public virtual async Task InformAsync(UserExceptionInformerContext context) + { + var errorInfo = GetErrorInfo(context); + await ShowErrorInfoAsync(errorInfo); + } + + protected virtual RemoteServiceErrorInfo GetErrorInfo(UserExceptionInformerContext context) { if (context.Exception is AbpRemoteCallException remoteCallException) { - await InformAbpRemoteCallExceptionAsync(remoteCallException, context); - } - else if (context.Exception is AbpValidationException validationException) - { - await InformAbpValidationExceptionAsync(validationException, context); + return remoteCallException.Error; } + + return ExceptionToErrorInfoConverter.Convert(context.Exception, false); } - protected virtual async Task InformAbpRemoteCallExceptionAsync(AbpRemoteCallException exception, UserExceptionInformerContext context) + protected virtual async Task ShowErrorInfoAsync(RemoteServiceErrorInfo errorInfo) { - if (exception.Error.Details.IsNullOrEmpty()) + if (errorInfo.Details.IsNullOrEmpty()) { - await _messageService.ErrorAsync(exception.Error.Message); + await MessageService.ErrorAsync(errorInfo.Message); } else { - await _messageService.ErrorAsync(exception.Error.Details, exception.Error.Message); + await MessageService.ErrorAsync(errorInfo.Details, errorInfo.Message); } } - - protected virtual async Task InformAbpValidationExceptionAsync(AbpValidationException exception, UserExceptionInformerContext context) - { - await _messageService.ErrorAsync(exception.Message); - } } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Controllers/ErrorController.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Controllers/ErrorController.cs index 9682ec838e..0b05941f61 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Controllers/ErrorController.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Controllers/ErrorController.cs @@ -19,18 +19,21 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Controllers private readonly IStringLocalizer _localizer; private readonly AbpErrorPageOptions _abpErrorPageOptions; private readonly IExceptionNotifier _exceptionNotifier; + private readonly AbpExceptionHandlingOptions _exceptionHandlingOptions; public ErrorController( IExceptionToErrorInfoConverter exceptionToErrorInfoConverter, IHttpExceptionStatusCodeFinder httpExceptionStatusCodeFinder, IOptions abpErrorPageOptions, - IStringLocalizer localizer, - IExceptionNotifier exceptionNotifier) + IStringLocalizer localizer, + IExceptionNotifier exceptionNotifier, + IOptions exceptionHandlingOptions) { _errorInfoConverter = exceptionToErrorInfoConverter; _statusCodeFinder = httpExceptionStatusCodeFinder; _localizer = localizer; _exceptionNotifier = exceptionNotifier; + _exceptionHandlingOptions = exceptionHandlingOptions.Value; _abpErrorPageOptions = abpErrorPageOptions.Value; } @@ -44,7 +47,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Controllers await _exceptionNotifier.NotifyAsync(new ExceptionNotificationContext(exception)); - var errorInfo = _errorInfoConverter.Convert(exception); + var errorInfo = _errorInfoConverter.Convert(exception, _exceptionHandlingOptions.SendExceptionsDetailsToClients); if (httpStatusCode == 0) { diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs index 009d52b42f..c6f353b876 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs @@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; +using Microsoft.Extensions.Options; using Volo.Abp.AspNetCore.ExceptionHandling; using Volo.Abp.DependencyInjection; using Volo.Abp.ExceptionHandling; @@ -23,15 +24,18 @@ namespace Volo.Abp.AspNetCore.Mvc.ExceptionHandling private readonly IExceptionToErrorInfoConverter _errorInfoConverter; private readonly IHttpExceptionStatusCodeFinder _statusCodeFinder; private readonly IJsonSerializer _jsonSerializer; + private readonly AbpExceptionHandlingOptions _exceptionHandlingOptions; public AbpExceptionFilter( IExceptionToErrorInfoConverter errorInfoConverter, IHttpExceptionStatusCodeFinder statusCodeFinder, - IJsonSerializer jsonSerializer) + IJsonSerializer jsonSerializer, + IOptions exceptionHandlingOptions) { _errorInfoConverter = errorInfoConverter; _statusCodeFinder = statusCodeFinder; _jsonSerializer = jsonSerializer; + _exceptionHandlingOptions = exceptionHandlingOptions.Value; Logger = NullLogger.Instance; } @@ -76,7 +80,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ExceptionHandling context.HttpContext.Response.Headers.Add(AbpHttpConsts.AbpErrorFormat, "true"); context.HttpContext.Response.StatusCode = (int)_statusCodeFinder.GetStatusCode(context.HttpContext, context.Exception); - var remoteServiceErrorInfo = _errorInfoConverter.Convert(context.Exception); + var remoteServiceErrorInfo = _errorInfoConverter.Convert(context.Exception, _exceptionHandlingOptions.SendExceptionsDetailsToClients); context.Result = new ObjectResult(new RemoteServiceErrorResponse(remoteServiceErrorInfo)); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionPageFilter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionPageFilter.cs index 8e2356ff20..9ef0378909 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionPageFilter.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionPageFilter.cs @@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; +using Microsoft.Extensions.Options; using Volo.Abp.AspNetCore.ExceptionHandling; using Volo.Abp.DependencyInjection; using Volo.Abp.ExceptionHandling; @@ -23,15 +24,18 @@ namespace Volo.Abp.AspNetCore.Mvc.ExceptionHandling private readonly IExceptionToErrorInfoConverter _errorInfoConverter; private readonly IHttpExceptionStatusCodeFinder _statusCodeFinder; private readonly IJsonSerializer _jsonSerializer; + private readonly AbpExceptionHandlingOptions _exceptionHandlingOptions; public AbpExceptionPageFilter( IExceptionToErrorInfoConverter errorInfoConverter, IHttpExceptionStatusCodeFinder statusCodeFinder, - IJsonSerializer jsonSerializer) + IJsonSerializer jsonSerializer, + IOptions exceptionHandlingOptions) { _errorInfoConverter = errorInfoConverter; _statusCodeFinder = statusCodeFinder; _jsonSerializer = jsonSerializer; + _exceptionHandlingOptions = exceptionHandlingOptions.Value; Logger = NullLogger.Instance; } @@ -88,7 +92,7 @@ namespace Volo.Abp.AspNetCore.Mvc.ExceptionHandling context.HttpContext.Response.Headers.Add(AbpHttpConsts.AbpErrorFormat, "true"); context.HttpContext.Response.StatusCode = (int)_statusCodeFinder.GetStatusCode(context.HttpContext, context.Exception); - var remoteServiceErrorInfo = _errorInfoConverter.Convert(context.Exception); + var remoteServiceErrorInfo = _errorInfoConverter.Convert(context.Exception, _exceptionHandlingOptions.SendExceptionsDetailsToClients); context.Result = new ObjectResult(new RemoteServiceErrorResponse(remoteServiceErrorInfo)); diff --git a/framework/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj b/framework/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj index a3089646d2..44458218b0 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj +++ b/framework/src/Volo.Abp.AspNetCore/Volo.Abp.AspNetCore.csproj @@ -19,11 +19,9 @@ - + - - diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/AbpAspNetCoreModule.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/AbpAspNetCoreModule.cs index 279601387d..fad534949d 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/AbpAspNetCoreModule.cs +++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/AbpAspNetCoreModule.cs @@ -6,12 +6,10 @@ using Microsoft.Extensions.Options; using Volo.Abp.AspNetCore.Auditing; using Volo.Abp.Auditing; using Volo.Abp.Authorization; -using Volo.Abp.Domain; +using Volo.Abp.ExceptionHandling; using Volo.Abp.Http; -using Volo.Abp.Localization; using Volo.Abp.Modularity; using Volo.Abp.Security; -using Volo.Abp.UI; using Volo.Abp.Uow; using Volo.Abp.Validation; using Volo.Abp.VirtualFileSystem; @@ -19,16 +17,14 @@ using Volo.Abp.VirtualFileSystem; namespace Volo.Abp.AspNetCore { [DependsOn( - typeof(AbpAuditingModule), + typeof(AbpAuditingModule), typeof(AbpSecurityModule), typeof(AbpVirtualFileSystemModule), typeof(AbpUnitOfWorkModule), typeof(AbpHttpModule), typeof(AbpAuthorizationModule), - typeof(AbpDddDomainModule), //TODO: Can we remove this? - typeof(AbpLocalizationModule), - typeof(AbpUiModule), //TODO: Can we remove this? - typeof(AbpValidationModule) + typeof(AbpValidationModule), + typeof(AbpExceptionHandlingModule) )] public class AbpAspNetCoreModule : AbpModule { diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/ExceptionHandling/AbpExceptionHandlingMiddleware.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/ExceptionHandling/AbpExceptionHandlingMiddleware.cs index edd00e1fb7..9535aab149 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/ExceptionHandling/AbpExceptionHandlingMiddleware.cs +++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/ExceptionHandling/AbpExceptionHandlingMiddleware.cs @@ -3,9 +3,9 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; using Microsoft.Net.Http.Headers; using Volo.Abp.AspNetCore.Mvc; -using Volo.Abp.AspNetCore.Uow; using Volo.Abp.DependencyInjection; using Volo.Abp.ExceptionHandling; using Volo.Abp.Http; @@ -61,6 +61,7 @@ namespace Volo.Abp.AspNetCore.ExceptionHandling var errorInfoConverter = httpContext.RequestServices.GetRequiredService(); var statusCodeFinder = httpContext.RequestServices.GetRequiredService(); var jsonSerializer = httpContext.RequestServices.GetRequiredService(); + var options = httpContext.RequestServices.GetRequiredService>().Value; httpContext.Response.Clear(); httpContext.Response.StatusCode = (int)statusCodeFinder.GetStatusCode(httpContext, exception); @@ -70,7 +71,7 @@ namespace Volo.Abp.AspNetCore.ExceptionHandling await httpContext.Response.WriteAsync( jsonSerializer.Serialize( new RemoteServiceErrorResponse( - errorInfoConverter.Convert(exception) + errorInfoConverter.Convert(exception, options.SendExceptionsDetailsToClients) ) ) ); diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo.Abp.Ddd.Domain.csproj b/framework/src/Volo.Abp.Ddd.Domain/Volo.Abp.Ddd.Domain.csproj index ab162e60c7..9fd8702f22 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo.Abp.Ddd.Domain.csproj +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo.Abp.Ddd.Domain.csproj @@ -18,6 +18,7 @@ + diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/AbpDddDomainModule.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/AbpDddDomainModule.cs index 19b857553f..87965924e4 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/AbpDddDomainModule.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/AbpDddDomainModule.cs @@ -1,6 +1,7 @@ using Volo.Abp.Auditing; using Volo.Abp.Data; using Volo.Abp.EventBus; +using Volo.Abp.ExceptionHandling; using Volo.Abp.Guids; using Volo.Abp.Modularity; using Volo.Abp.MultiTenancy; @@ -20,7 +21,8 @@ namespace Volo.Abp.Domain typeof(AbpThreadingModule), typeof(AbpTimingModule), typeof(AbpUnitOfWorkModule), - typeof(AbpObjectMappingModule) + typeof(AbpObjectMappingModule), + typeof(AbpExceptionHandlingModule) )] public class AbpDddDomainModule : AbpModule { diff --git a/framework/src/Volo.Abp.ExceptionHandling/FodyWeavers.xml b/framework/src/Volo.Abp.ExceptionHandling/FodyWeavers.xml new file mode 100644 index 0000000000..bc5a74a236 --- /dev/null +++ b/framework/src/Volo.Abp.ExceptionHandling/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + diff --git a/framework/src/Volo.Abp.ExceptionHandling/FodyWeavers.xsd b/framework/src/Volo.Abp.ExceptionHandling/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/framework/src/Volo.Abp.ExceptionHandling/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo.Abp.ExceptionHandling.csproj b/framework/src/Volo.Abp.ExceptionHandling/Volo.Abp.ExceptionHandling.csproj new file mode 100644 index 0000000000..65283bbc26 --- /dev/null +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo.Abp.ExceptionHandling.csproj @@ -0,0 +1,25 @@ + + + + + + + netstandard2.0 + true + + + + + + + + + + + + + + + + + diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/ExceptionHandling/DefaultExceptionToErrorInfoConverter.cs b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/AspNetCore/ExceptionHandling/DefaultExceptionToErrorInfoConverter.cs similarity index 93% rename from framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/ExceptionHandling/DefaultExceptionToErrorInfoConverter.cs rename to framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/AspNetCore/ExceptionHandling/DefaultExceptionToErrorInfoConverter.cs index 339b249e49..6367bd24ff 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/ExceptionHandling/DefaultExceptionToErrorInfoConverter.cs +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/AspNetCore/ExceptionHandling/DefaultExceptionToErrorInfoConverter.cs @@ -2,7 +2,6 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; -using Localization.Resources.AbpUi; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Localization; using Microsoft.Extensions.Options; @@ -10,6 +9,7 @@ using Volo.Abp.Authorization; using Volo.Abp.DependencyInjection; using Volo.Abp.Domain.Entities; using Volo.Abp.ExceptionHandling; +using Volo.Abp.ExceptionHandling.Localization; using Volo.Abp.Http; using Volo.Abp.Localization; using Volo.Abp.Localization.ExceptionHandling; @@ -20,28 +20,25 @@ namespace Volo.Abp.AspNetCore.ExceptionHandling public class DefaultExceptionToErrorInfoConverter : IExceptionToErrorInfoConverter, ITransientDependency { protected AbpExceptionLocalizationOptions LocalizationOptions { get; } - protected AbpExceptionHandlingOptions ExceptionHandlingOptions { get; } protected IStringLocalizerFactory StringLocalizerFactory { get; } - protected IStringLocalizer L { get; } + protected IStringLocalizer L { get; } protected IServiceProvider ServiceProvider { get; } public DefaultExceptionToErrorInfoConverter( IOptions localizationOptions, - IOptions exceptionHandlingOptions, IStringLocalizerFactory stringLocalizerFactory, - IStringLocalizer abpUiStringLocalizer, + IStringLocalizer stringLocalizer, IServiceProvider serviceProvider) { ServiceProvider = serviceProvider; - ExceptionHandlingOptions = exceptionHandlingOptions.Value; StringLocalizerFactory = stringLocalizerFactory; - L = abpUiStringLocalizer; + L = stringLocalizer; LocalizationOptions = localizationOptions.Value; } - public RemoteServiceErrorInfo Convert(Exception exception) + public RemoteServiceErrorInfo Convert(Exception exception, bool includeSensitiveDetails) { - var errorInfo = CreateErrorInfoWithoutCode(exception); + var errorInfo = CreateErrorInfoWithoutCode(exception, includeSensitiveDetails); if (exception is IHasErrorCode hasErrorCodeException) { @@ -51,9 +48,9 @@ namespace Volo.Abp.AspNetCore.ExceptionHandling return errorInfo; } - protected virtual RemoteServiceErrorInfo CreateErrorInfoWithoutCode(Exception exception) + protected virtual RemoteServiceErrorInfo CreateErrorInfoWithoutCode(Exception exception, bool includeSensitiveDetails) { - if (ExceptionHandlingOptions.SendExceptionsDetailsToClients) + if (includeSensitiveDetails) { return CreateDetailedErrorInfoFromException(exception); } @@ -179,10 +176,9 @@ namespace Volo.Abp.AspNetCore.ExceptionHandling { var aggException = exception as AggregateException; - if (aggException.InnerException is IUserFriendlyException || - aggException.InnerException is AbpValidationException || - aggException.InnerException is EntityNotFoundException || + if (aggException.InnerException is AbpValidationException || aggException.InnerException is AbpAuthorizationException || + aggException.InnerException is EntityNotFoundException || aggException.InnerException is IBusinessException) { return aggException.InnerException; diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/ExceptionHandling/IExceptionToErrorInfoConverter.cs b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/AspNetCore/ExceptionHandling/IExceptionToErrorInfoConverter.cs similarity index 72% rename from framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/ExceptionHandling/IExceptionToErrorInfoConverter.cs rename to framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/AspNetCore/ExceptionHandling/IExceptionToErrorInfoConverter.cs index a25206a918..3293be71ee 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/ExceptionHandling/IExceptionToErrorInfoConverter.cs +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/AspNetCore/ExceptionHandling/IExceptionToErrorInfoConverter.cs @@ -4,7 +4,7 @@ using Volo.Abp.Http; namespace Volo.Abp.AspNetCore.ExceptionHandling { /// - /// This interface can be implemented to convert an object to an object. + /// This interface can be implemented to convert an object to an object. /// Implements Chain Of Responsibility pattern. /// public interface IExceptionToErrorInfoConverter @@ -13,7 +13,8 @@ namespace Volo.Abp.AspNetCore.ExceptionHandling /// Converter method. /// /// The exception + /// Should include sensitive details to the error info? /// Error info or null - RemoteServiceErrorInfo Convert(Exception exception); + RemoteServiceErrorInfo Convert(Exception exception, bool includeSensitiveDetails); } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/EntityNotFoundException.cs b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/Domain/Entities/EntityNotFoundException.cs similarity index 100% rename from framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/EntityNotFoundException.cs rename to framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/Domain/Entities/EntityNotFoundException.cs diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/AbpExceptionHandlingModule.cs b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/AbpExceptionHandlingModule.cs new file mode 100644 index 0000000000..12ed60299d --- /dev/null +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/AbpExceptionHandlingModule.cs @@ -0,0 +1,33 @@ +using Volo.Abp.ExceptionHandling.Localization; +using Volo.Abp.Localization; +using Volo.Abp.Modularity; +using Volo.Abp.VirtualFileSystem; + +namespace Volo.Abp.ExceptionHandling +{ + /* TODO: This package is introduced in a later time by gathering + * classes from multiple packages. + * So, didn't change the original namespaces of the types to not introduce breaking changes. + * We will re-design this package in a later time, probably with v5.0. + */ + [DependsOn( + typeof(AbpLocalizationModule) + )] + public class AbpExceptionHandlingModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.FileSets.AddEmbedded(); + }); + + Configure(options => + { + options.Resources + .Add("en") + .AddVirtualJson("/Volo/Abp/ExceptionHandling/Localization"); + }); + } + } +} diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/AbpExceptionHandlingResource.cs b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/AbpExceptionHandlingResource.cs new file mode 100644 index 0000000000..fe73b72aa1 --- /dev/null +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/AbpExceptionHandlingResource.cs @@ -0,0 +1,10 @@ +using Volo.Abp.Localization; + +namespace Volo.Abp.ExceptionHandling.Localization +{ + [LocalizationResourceName("AbpExceptionHandling")] + public class AbpExceptionHandlingResource + { + + } +} diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/ar.json b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/ar.json new file mode 100644 index 0000000000..bd2a274d94 --- /dev/null +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/ar.json @@ -0,0 +1,23 @@ +{ + "culture": "ar", + "texts": { + "InternalServerErrorMessage": "حدث خطأ داخلي أثناء طلبك!", + "ValidationErrorMessage": "طلبك غير صحيح!", + "ValidationNarrativeErrorMessageTitle": "تم الكشف عن الأخطاء التالية أثناء التحقق .", + "DefaultErrorMessage": "حدث خطأ!", + "DefaultErrorMessageDetail": "لم يتم إرسال تفاصيل الخطأ بواسطة الخادم.", + "DefaultErrorMessage401": "أنت غير مصدق!", + "DefaultErrorMessage401Detail": "يجب عليك تسجيل الدخول لأداء هذه العملية.", + "DefaultErrorMessage403": "أنك غير مخول!", + "DefaultErrorMessage403Detail": "لا يسمح لك بإجراء هذه العملية!", + "DefaultErrorMessage404": "المورد غير موجود!", + "DefaultErrorMessage404Detail": "لم يتم العثور على المورد المطلوب على الخادم!", + "EntityNotFoundErrorMessage": "لا يوجد كيان {0} بالمعرف = {1}!", + "Error": "خطأ", + "UnhandledException": "استثناء غير معالج!", + "401Message": "غير مصرح", + "403Message": "ممنوع", + "404Message": "الصفحة غير موجودة", + "500Message": "خطأ في الخادم الداخلي" + } +} diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/cs.json b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/cs.json new file mode 100644 index 0000000000..87c4fe6545 --- /dev/null +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/cs.json @@ -0,0 +1,23 @@ +{ + "culture": "cs", + "texts": { + "InternalServerErrorMessage": "Během požadavku se vyskytla vnitřní chyba!", + "ValidationErrorMessage": "Neplatný požadavek!", + "ValidationNarrativeErrorMessageTitle": "Během ověřování byly zjištěny následující chyby.", + "DefaultErrorMessage": "Vyskytla se chyba!", + "DefaultErrorMessageDetail": "Server neposkytl detaily k chybě.", + "DefaultErrorMessage401": "Nejste přihlášeni!", + "DefaultErrorMessage401Detail": "K vykonání této operace se musíte nejprve přihlásit.", + "DefaultErrorMessage403": "Nemáte oprávnění!", + "DefaultErrorMessage403Detail": "Není vám dovoleno vykonat tuto operaci!", + "DefaultErrorMessage404": "Prostředek nenalezen!", + "DefaultErrorMessage404Detail": "Vyžádaný prostředek nebyl na serveru nalezen!", + "EntityNotFoundErrorMessage": "Neexistující entita {0} s id = {1}!", + "Error": "Chyba", + "UnhandledException": "Neošetřená výjimka!", + "401Message": "Neoprávněno", + "403Message": "Zakázáno", + "404Message": "Stránka nenalezena", + "500Message": "Interní chyba serveru" + } +} diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/de.json b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/de.json new file mode 100644 index 0000000000..585e858cb3 --- /dev/null +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/de.json @@ -0,0 +1,23 @@ +{ + "culture": "de", + "texts": { + "InternalServerErrorMessage": "Während Ihrer Anfrage ist ein interner Fehler aufgetreten!", + "ValidationErrorMessage": "Ihre Anfrage ist nicht gültig!", + "ValidationNarrativeErrorMessageTitle": "Die folgenden Fehler wurden bei der Validierung entdeckt.", + "DefaultErrorMessage": "Ein Fehler ist aufgetreten!", + "DefaultErrorMessageDetail": "Es wurden keine Fehlerdetails vom Server gesendet.", + "DefaultErrorMessage401": "Sie sind nicht authentifiziert.", + "DefaultErrorMessage401Detail": "Sie sollten sich anmelden, um diese Operation durchzuführen.", + "DefaultErrorMessage403": "Sie sind nicht autorisiert!", + "DefaultErrorMessage403Detail": "Es ist Ihnen nicht erlaubt, diese Operation durchzuführen!", + "DefaultErrorMessage404": "Ressource nicht gefunden!", + "DefaultErrorMessage404Detail": "Die angeforderte Ressource konnte auf dem Server nicht gefunden werden!", + "EntityNotFoundErrorMessage": "Es gibt keine Entität {0} mit id = {1}!", + "Error": "Fehler", + "UnhandledException": "Unerwartete Ausnahme!", + "401Message": "Unauthorisiert", + "403Message": "Verboten", + "404Message": "Seite nicht gefunden", + "500Message": "Interner Server Fehler" + } +} diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/en.json b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/en.json new file mode 100644 index 0000000000..2f535cf201 --- /dev/null +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/en.json @@ -0,0 +1,23 @@ +{ + "culture": "en", + "texts": { + "InternalServerErrorMessage": "An internal error occurred during your request!", + "ValidationErrorMessage": "Your request is not valid!", + "ValidationNarrativeErrorMessageTitle": "The following errors were detected during validation.", + "DefaultErrorMessage": "An error has occurred!", + "DefaultErrorMessageDetail": "Error detail not sent by server.", + "DefaultErrorMessage401": "You are not authenticated!", + "DefaultErrorMessage401Detail": "You should sign in to perform this operation.", + "DefaultErrorMessage403": "You are not authorized!", + "DefaultErrorMessage403Detail": "You are not allowed to perform this operation!", + "DefaultErrorMessage404": "Resource not found!", + "DefaultErrorMessage404Detail": "The resource requested could not found on the server!", + "EntityNotFoundErrorMessage": "There is no entity {0} with id = {1}!", + "Error": "Error", + "UnhandledException": "Unhandled exception!", + "401Message": "Unauthorized", + "403Message": "Forbidden", + "404Message": "Page not found", + "500Message": "Internal Server Error" + } +} diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/es.json b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/es.json new file mode 100644 index 0000000000..b4ac4139b1 --- /dev/null +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/es.json @@ -0,0 +1,23 @@ +{ + "culture": "es", + "texts": { + "InternalServerErrorMessage": "Ocurrió un error interno en su pedido!", + "ValidationErrorMessage": "Su pedido no es válido!", + "ValidationNarrativeErrorMessageTitle": "Los siguientes errores se encontraton durante la validación.", + "DefaultErrorMessage": "Ocurrió un error!", + "DefaultErrorMessageDetail": "El servidor no envió el detalle del error.", + "DefaultErrorMessage401": "Usted no ha iniciado sessión!", + "DefaultErrorMessage401Detail": "Debe iniciar sessión para ejecutar esta operación.", + "DefaultErrorMessage403": "Usted no está autorizado!", + "DefaultErrorMessage403Detail": "Usted no puede hacer esta operación!", + "DefaultErrorMessage404": "No se encontró el recurso!", + "DefaultErrorMessage404Detail": "El recurso solicitado no se encontró en el servidor!", + "EntityNotFoundErrorMessage": "No hay una entidad {0} con el id = {1}!", + "Error": "Error", + "UnhandledException": "Excepción no controlada!", + "401Message": "No autorizado", + "403Message": "Prohibido", + "404Message": "La página no existe", + "500Message": "Error interno del servidor" + } +} diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/fr.json b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/fr.json new file mode 100644 index 0000000000..f1c9713e65 --- /dev/null +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/fr.json @@ -0,0 +1,23 @@ +{ + "culture": "fr", + "texts": { + "InternalServerErrorMessage": "Une erreur interne s'est produite lors de votre demande!", + "ValidationErrorMessage": "Votre demande n'est pas valide!", + "ValidationNarrativeErrorMessageTitle": "Les erreurs suivantes ont été détectées lors de la validation.", + "DefaultErrorMessage": "Une erreur est survenue!", + "DefaultErrorMessageDetail": "Détails de l'erreur non envoyés par le serveur.", + "DefaultErrorMessage401": "Vous n'êtes pas authentifié!", + "DefaultErrorMessage401Detail": "Vous devez vous connecter pour effectuer cette opération.", + "DefaultErrorMessage403": "Vous n'êtes pas autorisé!", + "DefaultErrorMessage403Detail": "Vous n'êtes pas autorisé à effectuer cette opération!", + "DefaultErrorMessage404": "Ressource introuvable!", + "DefaultErrorMessage404Detail": "La ressource demandée est introuvable sur le serveur!", + "EntityNotFoundErrorMessage": "Il n'y a pas d'entité {0} avec id = {1}!", + "Error": "Erreur", + "UnhandledException": "Exception non-gérée!", + "401Message": "Non autorisé", + "403Message": "Interdit", + "404Message": "Page introuvable", + "500Message": "Erreur Interne du Serveur" + } +} diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/nl.json b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/nl.json new file mode 100644 index 0000000000..f96c1f9a9c --- /dev/null +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/nl.json @@ -0,0 +1,23 @@ +{ + "culture": "nl", + "texts": { + "InternalServerErrorMessage": "Er is een interne fout opgetreden tijdens uw verzoek!", + "ValidationErrorMessage": "Uw verzoek is niet geldig!", + "ValidationNarrativeErrorMessageTitle": "Tijdens de validatie zijn de volgende fouten gedetecteerd.", + "DefaultErrorMessage": "er is een fout opgetreden!", + "DefaultErrorMessageDetail": "Foutdetails niet verzonden door server.", + "DefaultErrorMessage401": "U bent niet geverifieerd!", + "DefaultErrorMessage401Detail": "U moet inloggen om deze bewerking uit te voeren.", + "DefaultErrorMessage403": "U bent niet geautoriseerd!", + "DefaultErrorMessage403Detail": "U mag deze bewerking niet uitvoeren!", + "DefaultErrorMessage404": "Bron niet gevonden!", + "DefaultErrorMessage404Detail": "De gevraagde bron kan niet worden gevonden op de server!", + "EntityNotFoundErrorMessage": "Er is geen entiteit {0} met id = {1}!", + "Error": "Fout", + "UnhandledException": "Onverwerkte uitzondering!", + "401Message": "Ongeautoriseerd", + "403Message": "Verboden", + "404Message": "Pagina niet gevonden", + "500Message": "Interne Server Fout" + } +} diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/pl-PL.json b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/pl-PL.json new file mode 100644 index 0000000000..74105cb1d4 --- /dev/null +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/pl-PL.json @@ -0,0 +1,18 @@ +{ + "culture": "pl-PL", + "texts": { + "InternalServerErrorMessage": "Błąd wewnętrzny serwera podczas przetwarzania żądania!", + "ValidationErrorMessage": "Twoje żądanie jest niepoprawnie!", + "ValidationNarrativeErrorMessageTitle": "Wykryto następujące błędy podczas walidacji.", + "DefaultErrorMessage": "Wystąpił błąd!", + "DefaultErrorMessageDetail": "Treść błędu nie została wysłana z serwera.", + "DefaultErrorMessage401": "Nie jesteś zalogowany!", + "DefaultErrorMessage401Detail": "Musisz się zalogować, aby wykonać tą operację.", + "DefaultErrorMessage403": "Nie jesteś zautentykowany!", + "DefaultErrorMessage403Detail": "Nie masz uprawnień do wykonania tej operacji!", + "DefaultErrorMessage404": "Nie znaleziono zasobu!", + "DefaultErrorMessage404Detail": "Nie znaleziono zasobu z żądania na serwerze!", + "EntityNotFoundErrorMessage": "Nie istnieje encja {0} z id = {1}!", + "Error": "Błąd" + } +} diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/pt-BR.json b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/pt-BR.json new file mode 100644 index 0000000000..cfee21e1b0 --- /dev/null +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/pt-BR.json @@ -0,0 +1,23 @@ +{ + "culture": "pt-BR", + "texts": { + "InternalServerErrorMessage": "Um erro interno ocorreu durante a requisição!", + "ValidationErrorMessage": "Sua requisição não é válida!", + "ValidationNarrativeErrorMessageTitle": "Os seguintes erros foram detectados durante a validação:", + "DefaultErrorMessage": "Ocorreu um erro!", + "DefaultErrorMessageDetail": "Os detalhes do erro não foram enviados pelo servidor.", + "DefaultErrorMessage401": "Você não etá autenticado!", + "DefaultErrorMessage401Detail": "Você deve autenticar-se para proceder com esta operação.", + "DefaultErrorMessage403": "Você não possui autorização!", + "DefaultErrorMessage403Detail": "Você não tem permissão para executar esta operação!", + "DefaultErrorMessage404": "Recurso não encontrado!", + "DefaultErrorMessage404Detail": "O recurso requisitado não pode ser encontrado pelo servidor!", + "EntityNotFoundErrorMessage": "Não existe uma entidade {0} com código = {1}!", + "Error": "Erro", + "UnhandledException": "Exceção não tratada!", + "401Message": "Autenticação inválida", + "403Message": "Não autorizado", + "404Message": "Página não encontrada", + "500Message": "Erro interno do servidor" + } +} diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/ru.json b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/ru.json new file mode 100644 index 0000000000..28707de134 --- /dev/null +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/ru.json @@ -0,0 +1,23 @@ +{ + "culture": "ru", + "texts": { + "InternalServerErrorMessage": "Во время запроса произошла внутренняя ошибка!", + "ValidationErrorMessage": "Ваш запрос недействителен!", + "ValidationNarrativeErrorMessageTitle": "При проверке были обнаружены следующие ошибки.", + "DefaultErrorMessage": "Произошла ошибка!", + "DefaultErrorMessageDetail": "Сведения об ошибке не были предоставлены сервером.", + "DefaultErrorMessage401": "Вы не авторизированы!", + "DefaultErrorMessage401Detail": "Вы должны Войти, чтобы выполнить эту операцию.", + "DefaultErrorMessage403": "Вы не авторизованы!", + "DefaultErrorMessage403Detail": "У вас нет доступа к выполнению этой операции!", + "DefaultErrorMessage404": "Ресурс не найден!", + "DefaultErrorMessage404Detail": "Запрошенный ресурс не удалось найти на сервере!", + "EntityNotFoundErrorMessage": "Нет объекта {0} с id = {1}!", + "Error": "Ошибка", + "UnhandledException": "Непредвиденная ошибка!", + "401Message": "Неавторизованный", + "403Message": "В доступе отказано", + "404Message": "Страница не найдена", + "500Message": "Внутренняя ошибка сервера" + } +} diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/sl.json b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/sl.json new file mode 100644 index 0000000000..68394087a0 --- /dev/null +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/sl.json @@ -0,0 +1,23 @@ +{ + "culture": "sl", + "texts": { + "InternalServerErrorMessage": "Zgodila se je napaka na strežniku!", + "ValidationErrorMessage": "Vaš zahtevek ni veljaven!", + "ValidationNarrativeErrorMessageTitle": "Pri preverjanju so bile zaznane sledeče napake.", + "DefaultErrorMessage": "Zgodila se je napaka!", + "DefaultErrorMessageDetail": "Strežnik ni poslal podrobnosti o napaki.", + "DefaultErrorMessage401": "Niste prijavljeni!", + "DefaultErrorMessage401Detail": "Za izvedbo te operacije se morate prijaviti.", + "DefaultErrorMessage403": "Nimate pravic!", + "DefaultErrorMessage403Detail": "Nimate dovoljenja za izvedbo te operacije!", + "DefaultErrorMessage404": "Vir ni bil najden!", + "DefaultErrorMessage404Detail": "Zahtevanega vira ni bilo mogoče najti na strežniku!", + "EntityNotFoundErrorMessage": "Ni entitete {0} z id-jem = {1}!", + "Error": "Napaka", + "UnhandledException": "Neobravnavana napaka!", + "401Message": "Nepooblaščeno", + "403Message": "Prepovedano", + "404Message": "Strani ni mogoče najti", + "500Message": "Napaka na strani strežnika" + } +} diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/tr.json b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/tr.json new file mode 100644 index 0000000000..de91a0bd7e --- /dev/null +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/tr.json @@ -0,0 +1,23 @@ +{ + "culture": "tr", + "texts": { + "InternalServerErrorMessage": "Sayfa işlenirken sunucu tarafında beklenmedik bir hata oluştu!", + "ValidationErrorMessage": "İşleminiz geçerli değil!", + "ValidationNarrativeErrorMessageTitle": "Aşağıdaki hatalar doğrulama sırasında tespit edilmiştir.", + "DefaultErrorMessage": "Bir hata oluştu!", + "DefaultErrorMessageDetail": "Hatanın ne olduğu sunucu tarafından gönderilmedi.", + "DefaultErrorMessage401": "Giriş yapılmamış!", + "DefaultErrorMessage401Detail": "Bu işlemi gerçekleştirmek için uygulamaya giriş yapmalısınız.", + "DefaultErrorMessage403": "İzinsiz işlem!", + "DefaultErrorMessage403Detail": "Bu işlemi gerçekleştirmek için gereken izne sahip değilsiniz.", + "DefaultErrorMessage404": "Kaynak bulunamadı!", + "DefaultErrorMessage404Detail": "İstenilen kaynak sunucuda bulunamadı.", + "EntityNotFoundErrorMessage": "Id değeri {1} olan {0} türünden bir nesne bulunamadı!", + "Error": "Hata", + "UnhandledException": "Yakalanmamış hata!", + "401Message": "Yetkisiz", + "403Message": "Yasak", + "404Message": "Sayfa bulunamadı", + "500Message": "Sunucu tarafında hata" + } +} diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/vi.json b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/vi.json new file mode 100644 index 0000000000..245d9f52be --- /dev/null +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/vi.json @@ -0,0 +1,18 @@ +{ + "culture": "vi", + "texts": { + "InternalServerErrorMessage": "Có một lỗi nội bộ xảy ra trong quá trình thực hiện yêu cầu của bạn!", + "ValidationErrorMessage": "Yêu cầu của bạn không hợp lệ!", + "ValidationNarrativeErrorMessageTitle": "Các lỗi sau đây đã được phát hiện trong quá trình xác nhận", + "DefaultErrorMessage": "Một lỗi đã xảy ra", + "DefaultErrorMessageDetail": "Chi tiết lỗi không được gửi bởi máy chủ", + "DefaultErrorMessage401": "Bạn chưa được xác thực", + "DefaultErrorMessage401Detail": "Bạn cần đăng nhập để thực hiện thao tác này.", + "DefaultErrorMessage403": "Bạn không được phép!", + "DefaultErrorMessage403Detail": "Bạn không được phép thực hiện thao tác này!", + "DefaultErrorMessage404": "Tài nguyên không tìm thấy!", + "DefaultErrorMessage404Detail": "Tài nguyên được yêu cầu không được tìm thấy trên máy chủ!", + "EntityNotFoundErrorMessage": "Không có thực thể nào {0} với id = {1}!", + "Error": "Lỗi" + } +} diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/zh-Hans.json b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/zh-Hans.json new file mode 100644 index 0000000000..e9843def1b --- /dev/null +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/zh-Hans.json @@ -0,0 +1,23 @@ +{ + "culture": "zh-Hans", + "texts": { + "InternalServerErrorMessage": "对不起,在处理你的请求期间,产生了一个服务器内部错误!", + "ValidationErrorMessage": "你的请求无效!", + "ValidationNarrativeErrorMessageTitle": "验证时发现以下错误.", + "DefaultErrorMessage": "发生错误!", + "DefaultErrorMessageDetail": "服务器未发送错误的详细信息.", + "DefaultErrorMessage401": "未通过身份验证!", + "DefaultErrorMessage401Detail": "你需要进行身份认证(登录)后再执行此操作.", + "DefaultErrorMessage403": "你没有权限!", + "DefaultErrorMessage403Detail": "你不能执行此操作!", + "DefaultErrorMessage404": "未找到资源!", + "DefaultErrorMessage404Detail": "未在服务中找到请求的资源!", + "EntityNotFoundErrorMessage": "实体 {0} 不存在,id = {1}!", + "Error": "错误", + "UnhandledException": "未处理的异常!", + "401Message": "未授权", + "403Message": "禁止访问", + "404Message": "网页未找到", + "500Message": "内部服务器错误" + } +} diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/zh-Hant.json b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/zh-Hant.json new file mode 100644 index 0000000000..bf02b7f053 --- /dev/null +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/zh-Hant.json @@ -0,0 +1,23 @@ +{ + "culture": "zh-Hant", + "texts": { + "InternalServerErrorMessage": "對不起,在處理你的請求期間,產生了一個伺服器內部錯誤!", + "ValidationErrorMessage": "你的請求無效!", + "ValidationNarrativeErrorMessageTitle": "驗證時發現以下錯誤.", + "DefaultErrorMessage": "發生錯誤!", + "DefaultErrorMessageDetail": "伺服器未發送錯誤的詳細信息.", + "DefaultErrorMessage401": "未通過身份驗證!", + "DefaultErrorMessage401Detail": "你需要進行身份認證(登入)後再執行此操作.", + "DefaultErrorMessage403": "你沒有權限!", + "DefaultErrorMessage403Detail": "你不能執行此操作!", + "DefaultErrorMessage404": "未找到資源!", + "DefaultErrorMessage404Detail": "未在服務中找到請求的資源!", + "EntityNotFoundErrorMessage": "實體 {0} 不存在,id = {1}!", + "Error": "錯誤", + "UnhandledException": "未處理的異常!", + "401Message": "未授權", + "403Message": "禁止訪問", + "404Message": "網頁未找到", + "500Message": "內部伺服器錯誤" + } +} diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/RemoteServiceErrorInfo.cs b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/Http/RemoteServiceErrorInfo.cs similarity index 100% rename from framework/src/Volo.Abp.Http/Volo/Abp/Http/RemoteServiceErrorInfo.cs rename to framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/Http/RemoteServiceErrorInfo.cs diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/RemoteServiceErrorResponse.cs b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/Http/RemoteServiceErrorResponse.cs similarity index 100% rename from framework/src/Volo.Abp.Http/Volo/Abp/Http/RemoteServiceErrorResponse.cs rename to framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/Http/RemoteServiceErrorResponse.cs diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/RemoteServiceValidationErrorInfo.cs b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/Http/RemoteServiceValidationErrorInfo.cs similarity index 100% rename from framework/src/Volo.Abp.Http/Volo/Abp/Http/RemoteServiceValidationErrorInfo.cs rename to framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/Http/RemoteServiceValidationErrorInfo.cs diff --git a/framework/src/Volo.Abp.Http.Client/Volo.Abp.Http.Client.csproj b/framework/src/Volo.Abp.Http.Client/Volo.Abp.Http.Client.csproj index 75dbce3b03..c224811e16 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo.Abp.Http.Client.csproj +++ b/framework/src/Volo.Abp.Http.Client/Volo.Abp.Http.Client.csproj @@ -20,6 +20,7 @@ + diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientModule.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientModule.cs index e4e4f3e802..37eefa8f5a 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientModule.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientModule.cs @@ -6,6 +6,7 @@ using Volo.Abp.MultiTenancy; using Volo.Abp.Threading; using Volo.Abp.Validation; using Polly; +using Volo.Abp.ExceptionHandling; namespace Volo.Abp.Http.Client { @@ -14,7 +15,8 @@ namespace Volo.Abp.Http.Client typeof(AbpCastleCoreModule), typeof(AbpThreadingModule), typeof(AbpMultiTenancyModule), - typeof(AbpValidationModule) + typeof(AbpValidationModule), + typeof(AbpExceptionHandlingModule) )] public class AbpHttpClientModule : AbpModule { diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ar.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ar.json index 91e81be57f..37b538ce89 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ar.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ar.json @@ -1,20 +1,7 @@ { "culture": "ar", "texts": { - "InternalServerErrorMessage": "حدث خطأ داخلي أثناء طلبك!", - "ValidationErrorMessage": "طلبك غير صحيح!", - "ValidationNarrativeErrorMessageTitle": "تم الكشف عن الأخطاء التالية أثناء التحقق .", - "DefaultErrorMessage": "حدث خطأ!", - "DefaultErrorMessageDetail": "لم يتم إرسال تفاصيل الخطأ بواسطة الخادم.", - "DefaultErrorMessage401": "أنت غير مصدق!", - "DefaultErrorMessage401Detail": "يجب عليك تسجيل الدخول لأداء هذه العملية.", - "DefaultErrorMessage403": "أنك غير مخول!", - "DefaultErrorMessage403Detail": "لا يسمح لك بإجراء هذه العملية!", - "DefaultErrorMessage404": "المورد غير موجود!", - "DefaultErrorMessage404Detail": "لم يتم العثور على المورد المطلوب على الخادم!", - "EntityNotFoundErrorMessage": "لا يوجد كيان {0} بالمعرف = {1}!", "Languages": "اللغات", - "Error": "خطأ", "AreYouSure": "هل أنت متأكد؟", "Cancel": "إلغاء", "Clear": "تنظيف", @@ -55,13 +42,8 @@ "ChangePassword": "تغيير كلمة السر", "PersonalInfo": "ملفي الشخصي", "AreYouSureYouWantToCancelEditingWarningMessage": "لم تحفظ التغييرات.", - "UnhandledException": "استثناء غير معالج!", - "401Message": "غير مصرح", - "403Message": "ممنوع", - "404Message": "الصفحة غير موجودة", - "500Message": "خطأ في الخادم الداخلي", "GoHomePage": "اذهب الى الصفحة الرئيسية", "GoBack": "عد", "Search": "بحث" } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/cs.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/cs.json index b42cc1ebe3..85cf515095 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/cs.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/cs.json @@ -1,20 +1,7 @@ { "culture": "cs", "texts": { - "InternalServerErrorMessage": "Během požadavku se vyskytla vnitřní chyba!", - "ValidationErrorMessage": "Neplatný požadavek!", - "ValidationNarrativeErrorMessageTitle": "Během ověřování byly zjištěny následující chyby.", - "DefaultErrorMessage": "Vyskytla se chyba!", - "DefaultErrorMessageDetail": "Server neposkytl detaily k chybě.", - "DefaultErrorMessage401": "Nejste přihlášeni!", - "DefaultErrorMessage401Detail": "K vykonání této operace se musíte nejprve přihlásit.", - "DefaultErrorMessage403": "Nemáte oprávnění!", - "DefaultErrorMessage403Detail": "Není vám dovoleno vykonat tuto operaci!", - "DefaultErrorMessage404": "Prostředek nenalezen!", - "DefaultErrorMessage404Detail": "Vyžádaný prostředek nebyl na serveru nalezen!", - "EntityNotFoundErrorMessage": "Neexistující entita {0} s id = {1}!", "Languages": "Jazyky", - "Error": "Chyba", "AreYouSure": "Jste si jisti?", "Cancel": "Zrušit", "Yes": "Ano", @@ -54,11 +41,6 @@ "ChangePassword": "Změnit heslo", "PersonalInfo": "Můj profil", "AreYouSureYouWantToCancelEditingWarningMessage": "Máte neuložené změny.", - "UnhandledException": "Neošetřená výjimka!", - "401Message": "Neoprávněno", - "403Message": "Zakázáno", - "404Message": "Stránka nenalezena", - "500Message": "Interní chyba serveru", "GoHomePage": "Přejít na domovskou stránku", "GoBack": "Jít zpět", "Search": "Vyhledávání" diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/de.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/de.json index 9727a11823..64bb0f99b5 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/de.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/de.json @@ -1,20 +1,7 @@ { "culture": "de", "texts": { - "InternalServerErrorMessage": "Während Ihrer Anfrage ist ein interner Fehler aufgetreten!", - "ValidationErrorMessage": "Ihre Anfrage ist nicht gültig!", - "ValidationNarrativeErrorMessageTitle": "Die folgenden Fehler wurden bei der Validierung entdeckt.", - "DefaultErrorMessage": "Ein Fehler ist aufgetreten!", - "DefaultErrorMessageDetail": "Es wurden keine Fehlerdetails vom Server gesendet.", - "DefaultErrorMessage401": "Sie sind nicht authentifiziert.", - "DefaultErrorMessage401Detail": "Sie sollten sich anmelden, um diese Operation durchzuführen.", - "DefaultErrorMessage403": "Sie sind nicht autorisiert!", - "DefaultErrorMessage403Detail": "Es ist Ihnen nicht erlaubt, diese Operation durchzuführen!", - "DefaultErrorMessage404": "Ressource nicht gefunden!", - "DefaultErrorMessage404Detail": "Die angeforderte Ressource konnte auf dem Server nicht gefunden werden!", - "EntityNotFoundErrorMessage": "Es gibt keine Entität {0} mit id = {1}!", "Languages": "Sprachen", - "Error": "Fehler", "AreYouSure": "Sind Sie sicher?", "Cancel": "Abbrechen", "Yes": "Ja", @@ -52,11 +39,6 @@ "ChangePassword": "Passwort ändern", "PersonalInfo": "Mein Profil", "AreYouSureYouWantToCancelEditingWarningMessage": "Sie haben ungespeicherte Änderungen.", - "UnhandledException": "Unerwartete Ausnahme!", - "401Message": "Unauthorisiert", - "403Message": "Verboten", - "404Message": "Seite nicht gefunden", - "500Message": "Interner Server Fehler", "GoHomePage": "Zur Startseite", "GoBack": "Zurück" } diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/en.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/en.json index be63781aaa..72c53e8adf 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/en.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/en.json @@ -1,20 +1,7 @@ { "culture": "en", "texts": { - "InternalServerErrorMessage": "An internal error occurred during your request!", - "ValidationErrorMessage": "Your request is not valid!", - "ValidationNarrativeErrorMessageTitle": "The following errors were detected during validation.", - "DefaultErrorMessage": "An error has occurred!", - "DefaultErrorMessageDetail": "Error detail not sent by server.", - "DefaultErrorMessage401": "You are not authenticated!", - "DefaultErrorMessage401Detail": "You should sign in to perform this operation.", - "DefaultErrorMessage403": "You are not authorized!", - "DefaultErrorMessage403Detail": "You are not allowed to perform this operation!", - "DefaultErrorMessage404": "Resource not found!", - "DefaultErrorMessage404Detail": "The resource requested could not found on the server!", - "EntityNotFoundErrorMessage": "There is no entity {0} with id = {1}!", "Languages": "Languages", - "Error": "Error", "AreYouSure": "Are you sure?", "Cancel": "Cancel", "Clear": "Clear", @@ -55,11 +42,6 @@ "ChangePassword": "Change password", "PersonalInfo": "My profile", "AreYouSureYouWantToCancelEditingWarningMessage": "You have unsaved changes.", - "UnhandledException": "Unhandled exception!", - "401Message": "Unauthorized", - "403Message": "Forbidden", - "404Message": "Page not found", - "500Message": "Internal Server Error", "GoHomePage": "Go to the homepage", "GoBack": "Go back", "Search": "Search", diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/es.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/es.json index 69ac5dfc56..fb0bc45903 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/es.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/es.json @@ -1,20 +1,7 @@ { "culture": "es", "texts": { - "InternalServerErrorMessage": "Ocurrió un error interno en su pedido!", - "ValidationErrorMessage": "Su pedido no es válido!", - "ValidationNarrativeErrorMessageTitle": "Los siguientes errores se encontraton durante la validación.", - "DefaultErrorMessage": "Ocurrió un error!", - "DefaultErrorMessageDetail": "El servidor no envió el detalle del error.", - "DefaultErrorMessage401": "Usted no ha iniciado sessión!", - "DefaultErrorMessage401Detail": "Debe iniciar sessión para ejecutar esta operación.", - "DefaultErrorMessage403": "Usted no está autorizado!", - "DefaultErrorMessage403Detail": "Usted no puede hacer esta operación!", - "DefaultErrorMessage404": "No se encontró el recurso!", - "DefaultErrorMessage404Detail": "El recurso solicitado no se encontró en el servidor!", - "EntityNotFoundErrorMessage": "No hay una entidad {0} con el id = {1}!", "Languages": "Lenguajes", - "Error": "Error", "AreYouSure": "¿Está seguro?", "Cancel": "Cancelar", "Yes": "Si", @@ -52,13 +39,8 @@ "ChangePassword": "Cambiar contraseña", "PersonalInfo": "My perfil", "AreYouSureYouWantToCancelEditingWarningMessage": "Tiene cambios sin guardar.", - "UnhandledException": "Excepción no controlada!", - "401Message": "No autorizado", - "403Message": "Prohibido", - "404Message": "La página no existe", - "500Message": "Error interno del servidor", "GoHomePage": "Ir a la página principal", "GoBack": "Atras", "Search": "Buscar" } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/fr.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/fr.json index ce03c28549..8084270436 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/fr.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/fr.json @@ -1,69 +1,51 @@ { - "culture": "fr", - "texts": { - "InternalServerErrorMessage": "Une erreur interne s'est produite lors de votre demande!", - "ValidationErrorMessage": "Votre demande n'est pas valide!", - "ValidationNarrativeErrorMessageTitle": "Les erreurs suivantes ont été détectées lors de la validation.", - "DefaultErrorMessage": "Une erreur est survenue!", - "DefaultErrorMessageDetail": "Détails de l'erreur non envoyés par le serveur.", - "DefaultErrorMessage401": "Vous n'êtes pas authentifié!", - "DefaultErrorMessage401Detail": "Vous devez vous connecter pour effectuer cette opération.", - "DefaultErrorMessage403": "Vous n'êtes pas autorisé!", - "DefaultErrorMessage403Detail": "Vous n'êtes pas autorisé à effectuer cette opération!", - "DefaultErrorMessage404": "Ressource introuvable!", - "DefaultErrorMessage404Detail": "La ressource demandée est introuvable sur le serveur!", - "EntityNotFoundErrorMessage": "Il n'y a pas d'entité {0} avec id = {1}!", - "Languages": "Langues", - "Error": "Erreur", - "AreYouSure": "Êtes-vous sûr?", - "Cancel": "Annuler", - "Clear": "Clair", - "Yes": "Oui", - "No": "Non", - "Ok": "D'accord", - "Close": "Fermer", - "Save": "Enregistrer", - "SavingWithThreeDot": "Enregistrement...", - "Actions": "Actions", - "Delete": "Supprimer", - "Edit": "Modifier", - "Refresh": "Actualiser", - "Language": "Langue", - "LoadMore": "Charger plus", - "ProcessingWithThreeDot": "Traitement...", - "LoadingWithThreeDot": "Chargement...", - "Welcome": "Bienvenue", - "Login": "Se connecter", - "Register": "S'inscrire", - "Logout": "Se déconnecter", - "Submit": "Envoyer", - "Back": "Précédent", - "PagerSearch": "Recherche", - "PagerNext": "prochain", - "PagerPrevious": "Précédent", - "PagerFirst": "Première", - "PagerLast": "Dernier", - "PagerInfo": "Affichage de _START_ à _END_ entrées sur _TOTAL_", - "PagerInfo{0}{1}{2}": "Affichage de {0} à {1} sur {2} entrées", - "PagerInfoEmpty": "Affichage de 0 à 0 sur 0 entrées", - "PagerInfoFiltered": "(filtré à partir des entrées _MAX_ totale)", - "NoDataAvailableInDatatable": "Aucune donnée disponible", - "Total": "Total", - "Selected": "Sélectionné", - "PagerShowMenuEntries": "Afficher les entrées _MENU_", - "DatatableActionDropdownDefaultText": "Actions", - "ChangePassword": "Changer le mot de passe", - "PersonalInfo": "Mon profil", - "AreYouSureYouWantToCancelEditingWarningMessage": "Vous avez des changements non enregistrés.", - "UnhandledException": "Exception non-gérée!", - "401Message": "Non autorisé", - "403Message": "Interdit", - "404Message": "Page introuvable", - "500Message": "Erreur Interne du Serveur", - "GoHomePage": "Aller à la page d'accueil", - "GoBack": "Retour", - "Search": "Recherche", - "ItemWillBeDeletedMessageWithFormat": "{0} sera supprimé!", - "ItemWillBeDeletedMessage": "Cet objet va être supprimé!" - } -} \ No newline at end of file + "culture": "fr", + "texts": { + "Languages": "Langues", + "AreYouSure": "Êtes-vous sûr?", + "Cancel": "Annuler", + "Clear": "Clair", + "Yes": "Oui", + "No": "Non", + "Ok": "D'accord", + "Close": "Fermer", + "Save": "Enregistrer", + "SavingWithThreeDot": "Enregistrement...", + "Actions": "Actions", + "Delete": "Supprimer", + "Edit": "Modifier", + "Refresh": "Actualiser", + "Language": "Langue", + "LoadMore": "Charger plus", + "ProcessingWithThreeDot": "Traitement...", + "LoadingWithThreeDot": "Chargement...", + "Welcome": "Bienvenue", + "Login": "Se connecter", + "Register": "S'inscrire", + "Logout": "Se déconnecter", + "Submit": "Envoyer", + "Back": "Précédent", + "PagerSearch": "Recherche", + "PagerNext": "prochain", + "PagerPrevious": "Précédent", + "PagerFirst": "Première", + "PagerLast": "Dernier", + "PagerInfo": "Affichage de _START_ à _END_ entrées sur _TOTAL_", + "PagerInfo{0}{1}{2}": "Affichage de {0} à {1} sur {2} entrées", + "PagerInfoEmpty": "Affichage de 0 à 0 sur 0 entrées", + "PagerInfoFiltered": "(filtré à partir des entrées _MAX_ totale)", + "NoDataAvailableInDatatable": "Aucune donnée disponible", + "Total": "Total", + "Selected": "Sélectionné", + "PagerShowMenuEntries": "Afficher les entrées _MENU_", + "DatatableActionDropdownDefaultText": "Actions", + "ChangePassword": "Changer le mot de passe", + "PersonalInfo": "Mon profil", + "AreYouSureYouWantToCancelEditingWarningMessage": "Vous avez des changements non enregistrés.", + "GoHomePage": "Aller à la page d'accueil", + "GoBack": "Retour", + "Search": "Recherche", + "ItemWillBeDeletedMessageWithFormat": "{0} sera supprimé!", + "ItemWillBeDeletedMessage": "Cet objet va être supprimé!" + } +} diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/nl.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/nl.json index 6198aa360f..c65715f8a5 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/nl.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/nl.json @@ -1,20 +1,7 @@ { "culture": "nl", "texts": { - "InternalServerErrorMessage": "Er is een interne fout opgetreden tijdens uw verzoek!", - "ValidationErrorMessage": "Uw verzoek is niet geldig!", - "ValidationNarrativeErrorMessageTitle": "Tijdens de validatie zijn de volgende fouten gedetecteerd.", - "DefaultErrorMessage": "er is een fout opgetreden!", - "DefaultErrorMessageDetail": "Foutdetails niet verzonden door server.", - "DefaultErrorMessage401": "U bent niet geverifieerd!", - "DefaultErrorMessage401Detail": "U moet inloggen om deze bewerking uit te voeren.", - "DefaultErrorMessage403": "U bent niet geautoriseerd!", - "DefaultErrorMessage403Detail": "U mag deze bewerking niet uitvoeren!", - "DefaultErrorMessage404": "Bron niet gevonden!", - "DefaultErrorMessage404Detail": "De gevraagde bron kan niet worden gevonden op de server!", - "EntityNotFoundErrorMessage": "Er is geen entiteit {0} met id = {1}!", "Languages": "Talen", - "Error": "Fout", "AreYouSure": "Bent u zeker?", "Cancel": "Annuleren", "Yes": "Ja", @@ -52,11 +39,6 @@ "ChangePassword": "Verander wachtwoord", "PersonalInfo": "Mijn profiel", "AreYouSureYouWantToCancelEditingWarningMessage": "U heeft nog niet-opgeslagen wijzigingen.", - "UnhandledException": "Onverwerkte uitzondering!", - "401Message": "Ongeautoriseerd", - "403Message": "Verboden", - "404Message": "Pagina niet gevonden", - "500Message": "Interne Server Fout", "GoHomePage": "Ga naar de homepage", "GoBack": "Ga terug", "Search": "Zoeken" diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/pl-PL.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/pl-PL.json index 1be12a51cf..7c6738e0bd 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/pl-PL.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/pl-PL.json @@ -1,19 +1,6 @@ { "culture": "pl-PL", "texts": { - "InternalServerErrorMessage": "Błąd wewnętrzny serwera podczas przetwarzania żądania!", - "ValidationErrorMessage": "Twoje żądanie jest niepoprawnie!", - "ValidationNarrativeErrorMessageTitle": "Wykryto następujące błędy podczas walidacji.", - "DefaultErrorMessage": "Wystąpił błąd!", - "DefaultErrorMessageDetail": "Treść błędu nie została wysłana z serwera.", - "DefaultErrorMessage401": "Nie jesteś zalogowany!", - "DefaultErrorMessage401Detail": "Musisz się zalogować, aby wykonać tą operację.", - "DefaultErrorMessage403": "Nie jesteś zautentykowany!", - "DefaultErrorMessage403Detail": "Nie masz uprawnień do wykonania tej operacji!", - "DefaultErrorMessage404": "Nie znaleziono zasobu!", - "DefaultErrorMessage404Detail": "Nie znaleziono zasobu z żądania na serwerze!", - "EntityNotFoundErrorMessage": "Nie istnieje encja {0} z id = {1}!", - "Error": "Błąd", "AreYouSure": "Czy jesteś pewien?", "Cancel": "Anuluj", "Yes": "Tak", @@ -49,4 +36,4 @@ "PersonalInfo": "Mój profil", "AreYouSureYouWantToCancelEditingWarningMessage": "Masz niezapisane zmiany." } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/pt-BR.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/pt-BR.json index 9d69ba1ef8..0aa20797c9 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/pt-BR.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/pt-BR.json @@ -1,19 +1,6 @@ { "culture": "pt-BR", "texts": { - "InternalServerErrorMessage": "Um erro interno ocorreu durante a requisição!", - "ValidationErrorMessage": "Sua requisição não é válida!", - "ValidationNarrativeErrorMessageTitle": "Os seguintes erros foram detectados durante a validação:", - "DefaultErrorMessage": "Ocorreu um erro!", - "DefaultErrorMessageDetail": "Os detalhes do erro não foram enviados pelo servidor.", - "DefaultErrorMessage401": "Você não etá autenticado!", - "DefaultErrorMessage401Detail": "Você deve autenticar-se para proceder com esta operação.", - "DefaultErrorMessage403": "Você não possui autorização!", - "DefaultErrorMessage403Detail": "Você não tem permissão para executar esta operação!", - "DefaultErrorMessage404": "Recurso não encontrado!", - "DefaultErrorMessage404Detail": "O recurso requisitado não pode ser encontrado pelo servidor!", - "EntityNotFoundErrorMessage": "Não existe uma entidade {0} com código = {1}!", - "Error": "Erro", "AreYouSure": "Você tem certeza?", "Cancel": "Cancelar", "Yes": "Sim", @@ -48,13 +35,8 @@ "ChangePassword": "Alterar Senha", "PersonalInfo": "Perfil", "AreYouSureYouWantToCancelEditingWarningMessage": "Há alterações não salvas.", - "UnhandledException": "Exceção não tratada!", - "401Message": "Autenticação inválida", - "403Message": "Não autorizado", - "404Message": "Página não encontrada", - "500Message": "Erro interno do servidor", "GoHomePage": "Voltar à página principal", "GoBack": "Voltar", "Search": "Procurar" } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ru.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ru.json index 12ccca117b..7b4014ebef 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ru.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ru.json @@ -1,20 +1,7 @@ { "culture": "ru", "texts": { - "InternalServerErrorMessage": "Во время запроса произошла внутренняя ошибка!", - "ValidationErrorMessage": "Ваш запрос недействителен!", - "ValidationNarrativeErrorMessageTitle": "При проверке были обнаружены следующие ошибки.", - "DefaultErrorMessage": "Произошла ошибка!", - "DefaultErrorMessageDetail": "Сведения об ошибке не были предоставлены сервером.", - "DefaultErrorMessage401": "Вы не авторизированы!", - "DefaultErrorMessage401Detail": "Вы должны Войти, чтобы выполнить эту операцию.", - "DefaultErrorMessage403": "Вы не авторизованы!", - "DefaultErrorMessage403Detail": "У вас нет доступа к выполнению этой операции!", - "DefaultErrorMessage404": "Ресурс не найден!", - "DefaultErrorMessage404Detail": "Запрошенный ресурс не удалось найти на сервере!", - "EntityNotFoundErrorMessage": "Нет объекта {0} с id = {1}!", "Languages": "Языки", - "Error": "Ошибка", "AreYouSure": "Вы уверены?", "Cancel": "Отмена", "Yes": "Да", @@ -51,11 +38,6 @@ "ChangePassword": "Изменить пароль", "PersonalInfo": "Мой профиль", "AreYouSureYouWantToCancelEditingWarningMessage": "У вас есть несохраненные изменения.", - "UnhandledException": "Непредвиденная ошибка!", - "401Message": "Неавторизованный", - "403Message": "В доступе отказано", - "404Message": "Страница не найдена", - "500Message": "Внутренняя ошибка сервера", "GoHomePage": "Вернуться на главную страницу", "GoBack": "Вернуться назад", "Search": "поиск" diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/sl.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/sl.json index 2bbdb2c09d..2b285d97e4 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/sl.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/sl.json @@ -1,20 +1,7 @@ { "culture": "sl", "texts": { - "InternalServerErrorMessage": "Zgodila se je napaka na strežniku!", - "ValidationErrorMessage": "Vaš zahtevek ni veljaven!", - "ValidationNarrativeErrorMessageTitle": "Pri preverjanju so bile zaznane sledeče napake.", - "DefaultErrorMessage": "Zgodila se je napaka!", - "DefaultErrorMessageDetail": "Strežnik ni poslal podrobnosti o napaki.", - "DefaultErrorMessage401": "Niste prijavljeni!", - "DefaultErrorMessage401Detail": "Za izvedbo te operacije se morate prijaviti.", - "DefaultErrorMessage403": "Nimate pravic!", - "DefaultErrorMessage403Detail": "Nimate dovoljenja za izvedbo te operacije!", - "DefaultErrorMessage404": "Vir ni bil najden!", - "DefaultErrorMessage404Detail": "Zahtevanega vira ni bilo mogoče najti na strežniku!", - "EntityNotFoundErrorMessage": "Ni entitete {0} z id-jem = {1}!", "Languages": "Jeziki", - "Error": "Napaka", "AreYouSure": "Ali ste prepričani?", "Cancel": "Prekliči", "Yes": "Da", @@ -52,11 +39,6 @@ "ChangePassword": "Zamenjaj geslo", "PersonalInfo": "Moj profil", "AreYouSureYouWantToCancelEditingWarningMessage": "Imate neshranjene spremembe.", - "UnhandledException": "Neobravnavana napaka!", - "401Message": "Nepooblaščeno", - "403Message": "Prepovedano", - "404Message": "Strani ni mogoče najti", - "500Message": "Napaka na strani strežnika", "GoHomePage": "Pojdi na osnovno stran", "GoBack": "Nazaj", "Search": "Iskanje" diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/tr.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/tr.json index 087e96a021..630902d99e 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/tr.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/tr.json @@ -1,20 +1,7 @@ { "culture": "tr", "texts": { - "InternalServerErrorMessage": "Sayfa işlenirken sunucu tarafında beklenmedik bir hata oluştu!", - "ValidationErrorMessage": "İşleminiz geçerli değil!", - "ValidationNarrativeErrorMessageTitle": "Aşağıdaki hatalar doğrulama sırasında tespit edilmiştir.", - "DefaultErrorMessage": "Bir hata oluştu!", - "DefaultErrorMessageDetail": "Hatanın ne olduğu sunucu tarafından gönderilmedi.", - "DefaultErrorMessage401": "Giriş yapılmamış!", - "DefaultErrorMessage401Detail": "Bu işlemi gerçekleştirmek için uygulamaya giriş yapmalısınız.", - "DefaultErrorMessage403": "İzinsiz işlem!", - "DefaultErrorMessage403Detail": "Bu işlemi gerçekleştirmek için gereken izne sahip değilsiniz.", - "DefaultErrorMessage404": "Kaynak bulunamadı!", - "DefaultErrorMessage404Detail": "İstenilen kaynak sunucuda bulunamadı.", - "EntityNotFoundErrorMessage": "Id değeri {1} olan {0} türünden bir nesne bulunamadı!", "Languages": "Diller", - "Error": "Hata", "AreYouSure": "Emin misiniz?", "Cancel": "Vazgeç", "Clear": "Temizle", @@ -55,11 +42,6 @@ "ChangePassword": "Şifre değiştir", "PersonalInfo": "Profilim", "AreYouSureYouWantToCancelEditingWarningMessage": "Kaydedilmemiş değişiklikler var.", - "UnhandledException": "Yakalanmamış hata!", - "401Message": "Yetkisiz", - "403Message": "Yasak", - "404Message": "Sayfa bulunamadı", - "500Message": "Sunucu tarafında hata", "GoHomePage": "Ana sayfaya git", "GoBack": "Geri dön", "Search": "Arama", diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/vi.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/vi.json index 00f6c8f195..239622e438 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/vi.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/vi.json @@ -1,19 +1,6 @@ { "culture": "vi", "texts": { - "InternalServerErrorMessage": "Có một lỗi nội bộ xảy ra trong quá trình thực hiện yêu cầu của bạn!", - "ValidationErrorMessage": "Yêu cầu của bạn không hợp lệ!", - "ValidationNarrativeErrorMessageTitle": "Các lỗi sau đây đã được phát hiện trong quá trình xác nhận", - "DefaultErrorMessage": "Một lỗi đã xảy ra", - "DefaultErrorMessageDetail": "Chi tiết lỗi không được gửi bởi máy chủ", - "DefaultErrorMessage401": "Bạn chưa được xác thực", - "DefaultErrorMessage401Detail": "Bạn cần đăng nhập để thực hiện thao tác này.", - "DefaultErrorMessage403": "Bạn không được phép!", - "DefaultErrorMessage403Detail": "Bạn không được phép thực hiện thao tác này!", - "DefaultErrorMessage404": "Tài nguyên không tìm thấy!", - "DefaultErrorMessage404Detail": "Tài nguyên được yêu cầu không được tìm thấy trên máy chủ!", - "EntityNotFoundErrorMessage": "Không có thực thể nào {0} với id = {1}!", - "Error": "Lỗi", "AreYouSure": "Bạn có chắc không ?", "Cancel": "Hủy bỏ", "Yes": "Đồng ý", diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hans.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hans.json index 77fae4351a..ec85d90ac9 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hans.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hans.json @@ -1,20 +1,7 @@ { "culture": "zh-Hans", "texts": { - "InternalServerErrorMessage": "对不起,在处理你的请求期间,产生了一个服务器内部错误!", - "ValidationErrorMessage": "你的请求无效!", - "ValidationNarrativeErrorMessageTitle": "验证时发现以下错误.", - "DefaultErrorMessage": "发生错误!", - "DefaultErrorMessageDetail": "服务器未发送错误的详细信息.", - "DefaultErrorMessage401": "未通过身份验证!", - "DefaultErrorMessage401Detail": "你需要进行身份认证(登录)后再执行此操作.", - "DefaultErrorMessage403": "你没有权限!", - "DefaultErrorMessage403Detail": "你不能执行此操作!", - "DefaultErrorMessage404": "未找到资源!", - "DefaultErrorMessage404Detail": "未在服务中找到请求的资源!", - "EntityNotFoundErrorMessage": "实体 {0} 不存在,id = {1}!", "Languages": "语言", - "Error": "错误", "AreYouSure": "你确定吗?", "Cancel": "取消", "Yes": "是", @@ -49,11 +36,6 @@ "ChangePassword": "修改密码", "PersonalInfo": "个人信息", "AreYouSureYouWantToCancelEditingWarningMessage": "你有未保存的更改.", - "UnhandledException": "未处理的异常!", - "401Message": "未授权", - "403Message": "禁止访问", - "404Message": "网页未找到", - "500Message": "内部服务器错误", "GoHomePage": "返回主页", "GoBack": "返回", "Search" : "搜索" diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hant.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hant.json index c595a26476..ab529791be 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hant.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hant.json @@ -1,20 +1,7 @@ { "culture": "zh-Hant", "texts": { - "InternalServerErrorMessage": "對不起,在處理你的請求期間,產生了一個伺服器內部錯誤!", - "ValidationErrorMessage": "你的請求無效!", - "ValidationNarrativeErrorMessageTitle": "驗證時發現以下錯誤.", - "DefaultErrorMessage": "發生錯誤!", - "DefaultErrorMessageDetail": "伺服器未發送錯誤的詳細信息.", - "DefaultErrorMessage401": "未通過身份驗證!", - "DefaultErrorMessage401Detail": "你需要進行身份認證(登入)後再執行此操作.", - "DefaultErrorMessage403": "你沒有權限!", - "DefaultErrorMessage403Detail": "你不能執行此操作!", - "DefaultErrorMessage404": "未找到資源!", - "DefaultErrorMessage404Detail": "未在服務中找到請求的資源!", - "EntityNotFoundErrorMessage": "實體 {0} 不存在,id = {1}!", "Languages": "語系", - "Error": "錯誤", "AreYouSure": "你確定嗎?", "Cancel": "取消", "Clear": "清除", @@ -55,11 +42,6 @@ "ChangePassword": "修改密碼", "PersonalInfo": "個人資料", "AreYouSureYouWantToCancelEditingWarningMessage": "你有未保存的更改", - "UnhandledException": "未處理的異常!", - "401Message": "未授權", - "403Message": "禁止訪問", - "404Message": "網頁未找到", - "500Message": "內部伺服器錯誤", "GoHomePage": "返回首頁", "GoBack": "返回", "Search": "查詢", diff --git a/framework/src/Volo.Abp.UI/Volo.Abp.UI.csproj b/framework/src/Volo.Abp.UI/Volo.Abp.UI.csproj index acff7d004b..66aa7e93ea 100644 --- a/framework/src/Volo.Abp.UI/Volo.Abp.UI.csproj +++ b/framework/src/Volo.Abp.UI/Volo.Abp.UI.csproj @@ -20,7 +20,7 @@ - + diff --git a/framework/src/Volo.Abp.UI/Volo/Abp/Ui/AbpUiModule.cs b/framework/src/Volo.Abp.UI/Volo/Abp/Ui/AbpUiModule.cs index 90a9aa45f6..5191063f98 100644 --- a/framework/src/Volo.Abp.UI/Volo/Abp/Ui/AbpUiModule.cs +++ b/framework/src/Volo.Abp.UI/Volo/Abp/Ui/AbpUiModule.cs @@ -1,5 +1,6 @@ using Localization.Resources.AbpUi; -using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.ExceptionHandling; +using Volo.Abp.ExceptionHandling.Localization; using Volo.Abp.Localization; using Volo.Abp.Modularity; using Volo.Abp.VirtualFileSystem; @@ -7,7 +8,7 @@ using Volo.Abp.VirtualFileSystem; namespace Volo.Abp.UI { [DependsOn( - typeof(AbpLocalizationModule) + typeof(AbpExceptionHandlingModule) )] public class AbpUiModule : AbpModule { @@ -22,6 +23,7 @@ namespace Volo.Abp.UI { options.Resources .Add("en") + .AddBaseTypes(typeof(AbpExceptionHandlingResource)) .AddVirtualJson("/Localization/Resources/AbpUi"); }); } diff --git a/nupkg/common.ps1 b/nupkg/common.ps1 index e5847e8a7c..52fb4ef2da 100644 --- a/nupkg/common.ps1 +++ b/nupkg/common.ps1 @@ -92,6 +92,7 @@ $projects = ( "framework/src/Volo.Abp.EventBus", "framework/src/Volo.Abp.EventBus.RabbitMQ", "framework/src/Volo.Abp.EventBus.Kafka", + "framework/src/Volo.Abp.ExceptionHandling", "framework/src/Volo.Abp.Features", "framework/src/Volo.Abp.FluentValidation", "framework/src/Volo.Abp.GlobalFeatures",