Merge branch 'dev' into maliming/net5

pull/5700/head
maliming 4 years ago
commit a8aff0eb9b

@ -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}

@ -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);
}
}
}

@ -19,18 +19,21 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Controllers
private readonly IStringLocalizer<AbpUiResource> _localizer;
private readonly AbpErrorPageOptions _abpErrorPageOptions;
private readonly IExceptionNotifier _exceptionNotifier;
private readonly AbpExceptionHandlingOptions _exceptionHandlingOptions;
public ErrorController(
IExceptionToErrorInfoConverter exceptionToErrorInfoConverter,
IHttpExceptionStatusCodeFinder httpExceptionStatusCodeFinder,
IOptions<AbpErrorPageOptions> abpErrorPageOptions,
IStringLocalizer<AbpUiResource> localizer,
IExceptionNotifier exceptionNotifier)
IStringLocalizer<AbpUiResource> localizer,
IExceptionNotifier exceptionNotifier,
IOptions<AbpExceptionHandlingOptions> 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)
{

@ -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<AbpExceptionHandlingOptions> exceptionHandlingOptions)
{
_errorInfoConverter = errorInfoConverter;
_statusCodeFinder = statusCodeFinder;
_jsonSerializer = jsonSerializer;
_exceptionHandlingOptions = exceptionHandlingOptions.Value;
Logger = NullLogger<AbpExceptionFilter>.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));

@ -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<AbpExceptionHandlingOptions> exceptionHandlingOptions)
{
_errorInfoConverter = errorInfoConverter;
_statusCodeFinder = statusCodeFinder;
_jsonSerializer = jsonSerializer;
_exceptionHandlingOptions = exceptionHandlingOptions.Value;
Logger = NullLogger<AbpExceptionPageFilter>.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));

@ -19,11 +19,9 @@
<ItemGroup>
<ProjectReference Include="..\Volo.Abp.Auditing\Volo.Abp.Auditing.csproj" />
<ProjectReference Include="..\Volo.Abp.Authorization\Volo.Abp.Authorization.csproj" />
<ProjectReference Include="..\Volo.Abp.Ddd.Domain\Volo.Abp.Ddd.Domain.csproj" />
<ProjectReference Include="..\Volo.Abp.ExceptionHandling\Volo.Abp.ExceptionHandling.csproj" />
<ProjectReference Include="..\Volo.Abp.Http\Volo.Abp.Http.csproj" />
<ProjectReference Include="..\Volo.Abp.Localization\Volo.Abp.Localization.csproj" />
<ProjectReference Include="..\Volo.Abp.Security\Volo.Abp.Security.csproj" />
<ProjectReference Include="..\Volo.Abp.UI\Volo.Abp.UI.csproj" />
<ProjectReference Include="..\Volo.Abp.Uow\Volo.Abp.Uow.csproj" />
<ProjectReference Include="..\Volo.Abp.Validation\Volo.Abp.Validation.csproj" />
<ProjectReference Include="..\Volo.Abp.VirtualFileSystem\Volo.Abp.VirtualFileSystem.csproj" />

@ -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
{

@ -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<IExceptionToErrorInfoConverter>();
var statusCodeFinder = httpContext.RequestServices.GetRequiredService<IHttpExceptionStatusCodeFinder>();
var jsonSerializer = httpContext.RequestServices.GetRequiredService<IJsonSerializer>();
var options = httpContext.RequestServices.GetRequiredService<IOptions<AbpExceptionHandlingOptions>>().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)
)
)
);

@ -18,6 +18,7 @@
<ProjectReference Include="..\Volo.Abp.Auditing\Volo.Abp.Auditing.csproj" />
<ProjectReference Include="..\Volo.Abp.Data\Volo.Abp.Data.csproj" />
<ProjectReference Include="..\Volo.Abp.EventBus\Volo.Abp.EventBus.csproj" />
<ProjectReference Include="..\Volo.Abp.ExceptionHandling\Volo.Abp.ExceptionHandling.csproj" />
<ProjectReference Include="..\Volo.Abp.Guids\Volo.Abp.Guids.csproj" />
<ProjectReference Include="..\Volo.Abp.MultiTenancy\Volo.Abp.MultiTenancy.csproj" />
<ProjectReference Include="..\Volo.Abp.ObjectMapping\Volo.Abp.ObjectMapping.csproj" />

@ -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
{

@ -0,0 +1,3 @@
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
<ConfigureAwait ContinueOnCapturedContext="false" />
</Weavers>

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. -->
<xs:element name="Weavers">
<xs:complexType>
<xs:all>
<xs:element name="ConfigureAwait" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="ContinueOnCapturedContext" type="xs:boolean" />
</xs:complexType>
</xs:element>
</xs:all>
<xs:attribute name="VerifyAssembly" type="xs:boolean">
<xs:annotation>
<xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="VerifyIgnoreCodes" type="xs:string">
<xs:annotation>
<xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="GenerateXsd" type="xs:boolean">
<xs:annotation>
<xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>

@ -0,0 +1,25 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\configureawait.props" />
<Import Project="..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>
<RootNamespace />
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Volo.Abp.Localization\Volo.Abp.Localization.csproj" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Volo\Abp\ExceptionHandling\Localization\**\*.json" />
<Content Remove="Volo\Abp\ExceptionHandling\Localization\**\*.json" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="3.1.6" />
</ItemGroup>
</Project>

@ -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<AbpUiResource> L { get; }
protected IStringLocalizer<AbpExceptionHandlingResource> L { get; }
protected IServiceProvider ServiceProvider { get; }
public DefaultExceptionToErrorInfoConverter(
IOptions<AbpExceptionLocalizationOptions> localizationOptions,
IOptions<AbpExceptionHandlingOptions> exceptionHandlingOptions,
IStringLocalizerFactory stringLocalizerFactory,
IStringLocalizer<AbpUiResource> abpUiStringLocalizer,
IStringLocalizer<AbpExceptionHandlingResource> 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;

@ -4,7 +4,7 @@ using Volo.Abp.Http;
namespace Volo.Abp.AspNetCore.ExceptionHandling
{
/// <summary>
/// This interface can be implemented to convert an <see cref="Exception"/> object to an <see cref="RemoteServiceErrorInfo"/> object.
/// This interface can be implemented to convert an <see cref="Exception"/> object to an <see cref="RemoteServiceErrorInfo"/> object.
/// Implements Chain Of Responsibility pattern.
/// </summary>
public interface IExceptionToErrorInfoConverter
@ -13,7 +13,8 @@ namespace Volo.Abp.AspNetCore.ExceptionHandling
/// Converter method.
/// </summary>
/// <param name="exception">The exception</param>
/// <param name="includeSensitiveDetails">Should include sensitive details to the error info?</param>
/// <returns>Error info or null</returns>
RemoteServiceErrorInfo Convert(Exception exception);
RemoteServiceErrorInfo Convert(Exception exception, bool includeSensitiveDetails);
}
}
}

@ -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<AbpVirtualFileSystemOptions>(options =>
{
options.FileSets.AddEmbedded<AbpExceptionHandlingModule>();
});
Configure<AbpLocalizationOptions>(options =>
{
options.Resources
.Add<AbpExceptionHandlingResource>("en")
.AddVirtualJson("/Volo/Abp/ExceptionHandling/Localization");
});
}
}
}

@ -0,0 +1,10 @@
using Volo.Abp.Localization;
namespace Volo.Abp.ExceptionHandling.Localization
{
[LocalizationResourceName("AbpExceptionHandling")]
public class AbpExceptionHandlingResource
{
}
}

@ -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": "خطأ في الخادم الداخلي"
}
}

@ -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"
}
}

@ -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"
}
}

@ -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"
}
}

@ -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"
}
}

@ -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"
}
}

@ -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"
}
}

@ -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"
}
}

@ -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"
}
}

@ -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": "Внутренняя ошибка сервера"
}
}

@ -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"
}
}

@ -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"
}
}

@ -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"
}
}

@ -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": "内部服务器错误"
}
}

@ -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": "內部伺服器錯誤"
}
}

@ -20,6 +20,7 @@
<ItemGroup>
<ProjectReference Include="..\Volo.Abp.Castle.Core\Volo.Abp.Castle.Core.csproj" />
<ProjectReference Include="..\Volo.Abp.ExceptionHandling\Volo.Abp.ExceptionHandling.csproj" />
<ProjectReference Include="..\Volo.Abp.Http\Volo.Abp.Http.csproj" />
<ProjectReference Include="..\Volo.Abp.MultiTenancy\Volo.Abp.MultiTenancy.csproj" />
<ProjectReference Include="..\Volo.Abp.Threading\Volo.Abp.Threading.csproj" />

@ -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
{

@ -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": "بحث"
}
}
}

@ -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í"

@ -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"
}

@ -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",

@ -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"
}
}
}

@ -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é!"
}
}
"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é!"
}
}

@ -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"

@ -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."
}
}
}

@ -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"
}
}
}

@ -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": "поиск"

@ -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"

@ -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",

@ -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 ý",

@ -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" : "搜索"

@ -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": "查詢",

@ -20,7 +20,7 @@
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Volo.Abp.Localization\Volo.Abp.Localization.csproj" />
<ProjectReference Include="..\Volo.Abp.ExceptionHandling\Volo.Abp.ExceptionHandling.csproj" />
</ItemGroup>
</Project>

@ -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<AbpUiResource>("en")
.AddBaseTypes(typeof(AbpExceptionHandlingResource))
.AddVirtualJson("/Localization/Resources/AbpUi");
});
}

@ -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",

Loading…
Cancel
Save