From ea9d13c4fff79b8a318c50dc47f739a320e0d7aa Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 23 Apr 2020 20:22:07 +0800 Subject: [PATCH 01/48] Enhanced reindex function. Resolve #3718 --- .../Documents/IDocumentAdminAppService.cs | 7 +- .../Admin/Projects/IProjectAdminAppService.cs | 10 ++- .../Volo/Docs/Admin/Projects/ReindexInput.cs | 9 +++ .../Documents/DocumentAdminAppService.cs | 36 +--------- .../Admin/Projects/ProjectAdminAppService.cs | 71 +++++++++++++++++-- .../Docs/Admin/DocumentsAdminController.cs | 7 -- .../Docs/Admin/ProjectsAdminController.cs | 14 ++++ .../Pages/Docs/Admin/Projects/Index.cshtml | 4 ++ .../Pages/Docs/Admin/Projects/index.js | 27 ++++++- .../Elastic/ElasticDocumentFullSearch.cs | 44 +++++++++++- .../FullSearch/Elastic/IDocumentFullSearch.cs | 6 +- .../Volo/Docs/Localization/Domain/en.json | 6 ++ 12 files changed, 185 insertions(+), 56 deletions(-) create mode 100644 modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Projects/ReindexInput.cs diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Documents/IDocumentAdminAppService.cs b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Documents/IDocumentAdminAppService.cs index 475b94acb5..685347ab5d 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Documents/IDocumentAdminAppService.cs +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Documents/IDocumentAdminAppService.cs @@ -1,4 +1,5 @@ -using System.Threading.Tasks; +using System; +using System.Threading.Tasks; using Volo.Abp.Application.Services; namespace Volo.Docs.Admin.Documents @@ -10,7 +11,5 @@ namespace Volo.Docs.Admin.Documents Task PullAllAsync(PullAllDocumentInput input); Task PullAsync(PullDocumentInput input); - - Task ReindexAsync(); } -} \ No newline at end of file +} diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Projects/IProjectAdminAppService.cs b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Projects/IProjectAdminAppService.cs index 34b607689c..9b832165d1 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Projects/IProjectAdminAppService.cs +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Projects/IProjectAdminAppService.cs @@ -12,9 +12,13 @@ namespace Volo.Docs.Admin.Projects Task GetAsync(Guid id); Task CreateAsync(CreateProjectDto input); - + Task UpdateAsync(Guid id, UpdateProjectDto input); - + Task DeleteAsync(Guid id); + + Task ReindexAsync(ReindexInput input); + + Task ReindexAllAsync(); } -} \ No newline at end of file +} diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Projects/ReindexInput.cs b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Projects/ReindexInput.cs new file mode 100644 index 0000000000..c0ff3472af --- /dev/null +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Projects/ReindexInput.cs @@ -0,0 +1,9 @@ +using System; + +namespace Volo.Docs.Admin.Projects +{ + public class ReindexInput + { + public Guid ProjectId { get; set; } + } +} diff --git a/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs b/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs index 25e5c1d9df..92b809bf87 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs +++ b/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs @@ -25,17 +25,13 @@ namespace Volo.Docs.Admin.Documents private readonly IDistributedCache _documentUpdateCache; private readonly IDistributedCache> _versionCache; private readonly IDistributedCache _languageCache; - private readonly IDistributedCache _resourceCache; - private readonly IDocumentFullSearch _documentFullSearch; public DocumentAdminAppService(IProjectRepository projectRepository, IDocumentRepository documentRepository, IDocumentSourceFactory documentStoreFactory, IDistributedCache documentUpdateCache, IDistributedCache> versionCache, - IDistributedCache languageCache, - IDistributedCache resourceCache, - IDocumentFullSearch documentFullSearch) + IDistributedCache languageCache) { _projectRepository = projectRepository; _documentRepository = documentRepository; @@ -43,8 +39,6 @@ namespace Volo.Docs.Admin.Documents _documentUpdateCache = documentUpdateCache; _versionCache = versionCache; _languageCache = languageCache; - _resourceCache = resourceCache; - _documentFullSearch = documentFullSearch; LocalizationResource = typeof(DocsResource); } @@ -125,32 +119,6 @@ namespace Volo.Docs.Admin.Documents await UpdateDocumentUpdateInfoCache(sourceDocument); } - public async Task ReindexAsync() - { - var docs = await _documentRepository.GetListAsync(); - var projects = await _projectRepository.GetListAsync(); - foreach (var doc in docs) - { - var project = projects.FirstOrDefault(x => x.Id == doc.ProjectId); - if (project == null) - { - continue; - } - - if (doc.FileName == project.NavigationDocumentName) - { - continue; - } - - if (doc.FileName == project.ParametersDocumentName) - { - continue; - } - - await _documentFullSearch.AddOrUpdateAsync(doc); - } - } - private async Task UpdateDocumentUpdateInfoCache(Document document) { var cacheKey = $"DocumentUpdateInfo{document.ProjectId}#{document.Name}#{document.LanguageCode}#{document.Version}"; @@ -174,4 +142,4 @@ namespace Volo.Docs.Admin.Documents return document; } } -} \ No newline at end of file +} diff --git a/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Projects/ProjectAdminAppService.cs b/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Projects/ProjectAdminAppService.cs index 436c9d1c76..882a8b8087 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Projects/ProjectAdminAppService.cs +++ b/modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Projects/ProjectAdminAppService.cs @@ -1,10 +1,13 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; using Volo.Abp.Guids; +using Volo.Docs.Documents; +using Volo.Docs.Documents.FullSearch.Elastic; using Volo.Docs.Localization; using Volo.Docs.Projects; @@ -14,15 +17,22 @@ namespace Volo.Docs.Admin.Projects public class ProjectAdminAppService : ApplicationService, IProjectAdminAppService { private readonly IProjectRepository _projectRepository; + private readonly IDocumentRepository _documentRepository; + private readonly IDocumentFullSearch _documentFullSearch; private readonly IGuidGenerator _guidGenerator; public ProjectAdminAppService( - IProjectRepository projectRepository, IGuidGenerator guidGenerator) + IProjectRepository projectRepository, + IDocumentRepository documentRepository, + IDocumentFullSearch documentFullSearch, + IGuidGenerator guidGenerator) { ObjectMapperContext = typeof(DocsAdminApplicationModule); LocalizationResource = typeof(DocsResource); _projectRepository = projectRepository; + _documentRepository = documentRepository; + _documentFullSearch = documentFullSearch; _guidGenerator = guidGenerator; } @@ -51,7 +61,7 @@ namespace Volo.Docs.Admin.Projects { throw new ProjectShortNameAlreadyExistsException(input.ShortName); } - + var project = new Project(_guidGenerator.Create(), input.Name, input.ShortName, @@ -71,7 +81,7 @@ namespace Volo.Docs.Admin.Projects { project.ExtraProperties.Add(extraProperty.Key, extraProperty.Value); } - + project = await _projectRepository.InsertAsync(project); return ObjectMapper.Map(project); @@ -106,6 +116,57 @@ namespace Volo.Docs.Admin.Projects { await _projectRepository.DeleteAsync(id); } - + + public async Task ReindexAsync(ReindexInput input) + { + var project = await _projectRepository.GetAsync(input.ProjectId); + + await _documentFullSearch.DeleteAllByProjectIdAsync(project.Id); + + var docs = await _documentRepository.GetListByProjectId(project.Id); + + foreach (var doc in docs) + { + if (doc.FileName == project.NavigationDocumentName) + { + continue; + } + + if (doc.FileName == project.ParametersDocumentName) + { + continue; + } + + await _documentFullSearch.AddOrUpdateAsync(doc); + } + } + + public async Task ReindexAllAsync() + { + await _documentFullSearch.DeleteAllAsync(); + + var docs = await _documentRepository.GetListAsync(); + var projects = await _projectRepository.GetListAsync(); + foreach (var doc in docs) + { + var project = projects.FirstOrDefault(x => x.Id == doc.ProjectId); + if (project == null) + { + continue; + } + + if (doc.FileName == project.NavigationDocumentName) + { + continue; + } + + if (doc.FileName == project.ParametersDocumentName) + { + continue; + } + + await _documentFullSearch.AddOrUpdateAsync(doc); + } + } } -} \ No newline at end of file +} diff --git a/modules/docs/src/Volo.Docs.Admin.HttpApi/Volo/Docs/Admin/DocumentsAdminController.cs b/modules/docs/src/Volo.Docs.Admin.HttpApi/Volo/Docs/Admin/DocumentsAdminController.cs index 3a6136d662..f0fd596f58 100644 --- a/modules/docs/src/Volo.Docs.Admin.HttpApi/Volo/Docs/Admin/DocumentsAdminController.cs +++ b/modules/docs/src/Volo.Docs.Admin.HttpApi/Volo/Docs/Admin/DocumentsAdminController.cs @@ -39,12 +39,5 @@ namespace Volo.Docs.Admin { return _documentAdminAppService.PullAsync(input); } - - [HttpPost] - [Route("Reindex")] - public Task ReindexAsync() - { - return _documentAdminAppService.ReindexAsync(); - } } } diff --git a/modules/docs/src/Volo.Docs.Admin.HttpApi/Volo/Docs/Admin/ProjectsAdminController.cs b/modules/docs/src/Volo.Docs.Admin.HttpApi/Volo/Docs/Admin/ProjectsAdminController.cs index ed46afe944..627c7c4253 100644 --- a/modules/docs/src/Volo.Docs.Admin.HttpApi/Volo/Docs/Admin/ProjectsAdminController.cs +++ b/modules/docs/src/Volo.Docs.Admin.HttpApi/Volo/Docs/Admin/ProjectsAdminController.cs @@ -53,5 +53,19 @@ namespace Volo.Docs.Admin { return _projectAppService.DeleteAsync(id); } + + [HttpPost] + [Route("ReindexAll")] + public Task ReindexAllAsync() + { + return _projectAppService.ReindexAllAsync(); + } + + [HttpPost] + [Route("Reindex")] + public Task ReindexAsync(ReindexInput input) + { + return _projectAppService.ReindexAsync(input); + } } } diff --git a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/Index.cshtml b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/Index.cshtml index e3c0416b6d..8284d73dcd 100644 --- a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/Index.cshtml +++ b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/Index.cshtml @@ -39,6 +39,10 @@ } + @if (await Authorization.IsGrantedAsync(DocsAdminPermissions.Projects.Default)) + { + + } diff --git a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/index.js b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/index.js index de7faea5e2..baf4c6b646 100644 --- a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/index.js +++ b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/index.js @@ -74,6 +74,18 @@ _dataTable.ajax.reload(); }); } + }, + { + text: l('ReIndexProject'), + visible: abp.auth.isGranted('Docs.Admin.Documents'), + confirmMessage: function (data) { return l('ReIndexProjectConfirmationMessage', data.record.name); }, + action: function (data) { + volo.docs.admin.projectsAdmin + .reindex({ projectId: data.record.id}) + .then(function () { + abp.message.success(l('SuccessfullyReIndexProject', data.record.name)); + }); + } } ] } @@ -110,6 +122,19 @@ _createModal.open({source:"GitHub"}); }); + $("#ReIndexAllProjects").click(function (event) { + abp.message.confirm(l('ReIndexAllProjectConfirmationMessage')) + .done(function (accepted) { + if (accepted) { + volo.docs.admin.projectsAdmin + .reindexAll() + .then(function () { + abp.message.success(l('SuccessfullyReIndexAllProject')); + }); + } + }); + }); + _createModal.onClose(function () { _dataTable.ajax.reload(); }); @@ -118,4 +143,4 @@ _dataTable.ajax.reload(); }); -}); \ No newline at end of file +}); diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/ElasticDocumentFullSearch.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/ElasticDocumentFullSearch.cs index 51ecd817b5..854032ab2c 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/ElasticDocumentFullSearch.cs +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/ElasticDocumentFullSearch.cs @@ -92,6 +92,48 @@ namespace Volo.Docs.Documents.FullSearch.Elastic .DeleteAsync(DocumentPath.Id(id), x => x.Index(_options.IndexName), cancellationToken)); } + public async Task DeleteAllAsync(CancellationToken cancellationToken = default) + { + ValidateElasticSearchEnabled(); + + var request = new DeleteByQueryRequest(_options.IndexName) + { + Query = new MatchAllQuery() + }; + + HandleError(await _clientProvider.GetClient() + .DeleteByQueryAsync(request, cancellationToken)); + } + + public async Task DeleteAllByProjectIdAsync(Guid projectId, CancellationToken cancellationToken = default) + { + ValidateElasticSearchEnabled(); + + var request = new DeleteByQueryRequest(_options.IndexName) + { + Query = new BoolQuery + { + Filter = new QueryContainer[] + { + new BoolQuery + { + Must = new QueryContainer[] + { + new TermQuery + { + Field = "projectId", + Value = projectId + } + } + } + } + }, + }; + + HandleError(await _clientProvider.GetClient() + .DeleteByQueryAsync(request, cancellationToken)); + } + public async Task> SearchAsync(string context, Guid projectId, string languageCode, string version, int? skipCount = null, int? maxResultCount = null, CancellationToken cancellationToken = default) @@ -185,4 +227,4 @@ namespace Volo.Docs.Documents.FullSearch.Elastic } } } -} \ No newline at end of file +} diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/IDocumentFullSearch.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/IDocumentFullSearch.cs index 615f5be4b4..e05c31bda3 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/IDocumentFullSearch.cs +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/FullSearch/Elastic/IDocumentFullSearch.cs @@ -13,8 +13,12 @@ namespace Volo.Docs.Documents.FullSearch.Elastic Task DeleteAsync(Guid id, CancellationToken cancellationToken = default); + Task DeleteAllAsync(CancellationToken cancellationToken = default); + + Task DeleteAllByProjectIdAsync(Guid projectId, CancellationToken cancellationToken = default); + Task> SearchAsync(string context, Guid projectId, string languageCode, string version, int? skipCount = null, int? maxResultCount = null, CancellationToken cancellationToken = default); } -} \ No newline at end of file +} diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en.json b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en.json index 998327cd90..31fdf8f8f2 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en.json +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en.json @@ -11,6 +11,12 @@ "Delete": "Delete", "ClearCache": "Clear cache", "ClearCacheConfirmationMessage": "Are you sure to clear all caches for project \"{0}\"", + "ReIndexAllProjects": "ReIndex all projects", + "ReIndexProject": "ReIndex project", + "ReIndexProjectConfirmationMessage":"Are you sure to reindex for project \"{0}\"", + "SuccessfullyReIndexProject": "Successfully reindex for project \"{0}\"", + "ReIndexAllProjectConfirmationMessage": "Are you sure to reindex all project?", + "SuccessfullyReIndexAllProject": "Successfully reindex for all projects", "InThisDocument": "In this document", "GoToTop": "Go to top", "Projects": "Project(s)", From 5d9e2dfb0cd9149bb62d551592be567ecf550c5c Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Sat, 25 Apr 2020 13:54:29 +0200 Subject: [PATCH 02/48] german translation for `Volo.Abp.UI` --- .../Localization/Resources/AbpUi/de.json | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/de.json diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/de.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/de.json new file mode 100644 index 0000000000..a626e714a2 --- /dev/null +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/de.json @@ -0,0 +1,63 @@ +{ + "culture": "de", + "texts": { + "InternalServerErrorMessage": "Whrend Ihrer Anfrage ist ein interner Fehler aufgetreten!", + "ValidationErrorMessage": "Ihre Anfrage ist nicht gltig!", + "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 durchzufhren.", + "DefaultErrorMessage403": "Sie sind nicht autorisiert!", + "DefaultErrorMessage403Detail": "Es ist Ihnen nicht erlaubt, diese Operation durchzufhren!", + "DefaultErrorMessage404": "Ressource nicht gefunden!", + "DefaultErrorMessage404Detail": "Die angeforderte Ressource konnte auf dem Server nicht gefunden werden!", + "EntityNotFoundErrorMessage": "Es gibt keine Entitt {0} mit id = {1}!", + "Languages": "Sprachen", + "Error": "Fehler", + "AreYouSure": "Sind Sie sicher?", + "Cancel": "Abbrechen", + "Yes": "Ja", + "No": "Nein", + "Ok": "Ok", + "Close": "Schlieen", + "Save": "Speichern", + "SavingWithThreeDot": "Speichere...", + "Actions": "Aktionen", + "Delete": "Lschen", + "Edit": "Bearbeiten", + "Refresh": "Aktualisieren", + "Language": "Sprache", + "LoadMore": "Mehr laden", + "ProcessingWithThreeDot": "Verarbeite...", + "LoadingWithThreeDot": "Lade...", + "Welcome": "Willkommen", + "Login": "Anmelden", + "Register": "Registrieren", + "Logout": "Abmelden", + "Submit": "Absenden", + "Back": "Zurck", + "PagerSearch": "Suchen", + "PagerNext": "Nchste", + "PagerPrevious": "Vorherige", + "PagerFirst": "Erste", + "PagerLast": "Letzte", + "PagerInfo": "Zeige _START_ bis _END_ von _TOTAL_ Eintrgen", + "PagerInfo{0}{1}{2}": "Zeige {0} bis {1} von {2} Eintrgen", + "PagerInfoEmpty": "Zeige 0 bis 0 von 0 Eintrgen", + "PagerInfoFiltered": "(gefiltert von _MAX_ Eintrgen insgesamt)", + "NoDataAvailableInDatatable": "Keine Daten verfgbar", + "PagerShowMenuEntries": "Zeige _MENU_ Eintrge", + "DatatableActionDropdownDefaultText": "Aktionen", + "ChangePassword": "Passwort ndern", + "PersonalInfo": "Mein Profil", + "AreYouSureYouWantToCancelEditingWarningMessage": "Sie haben ungespeicherte nderungen.", + "UnhandledException": "Unerwartete Ausnahme!", + "401Message": "Unauthorisiert", + "403Message": "Verboten", + "404Message": "Seite nicht gefunden", + "500Message": "Internet Server Fehler", + "GoHomePage": "Zur Startseite", + "GoBack": "Zurck" + } +} From 8ea6f6e166502f3a199d5a8e655ec16cb6af63e0 Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Sat, 25 Apr 2020 14:03:43 +0200 Subject: [PATCH 03/48] german translation for `Volo.Abp.Localization.Tests` --- .../TestResources/Base/CountryNames/de.json | 7 +++++++ .../TestResources/Base/Validation/de.json | 7 +++++++ .../Abp/Localization/TestResources/Source/de.json | 11 +++++++++++ .../Abp/Localization/TestResources/SourceExt/de.json | 8 ++++++++ 4 files changed, 33 insertions(+) create mode 100644 framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/de.json create mode 100644 framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/de.json create mode 100644 framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/de.json create mode 100644 framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/de.json diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/de.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/de.json new file mode 100644 index 0000000000..52548ccc71 --- /dev/null +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/de.json @@ -0,0 +1,7 @@ +{ + "culture": "de", + "texts": { + "USA": "Vereinigte Staaten von Amerika", + "Brazil": "Brasilien" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/de.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/de.json new file mode 100644 index 0000000000..5ccbae2546 --- /dev/null +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/de.json @@ -0,0 +1,7 @@ +{ + "culture": "de", + "texts": { + "ThisFieldIsRequired": "Dieses Feld ist ein Pflichtfeld", + "MaxLenghtErrorMessage": "Die Länge dieses Feldes kann maximal '{0}'-Zeichen betragen" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/de.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/de.json new file mode 100644 index 0000000000..284c309cb6 --- /dev/null +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/de.json @@ -0,0 +1,11 @@ +{ + "culture": "de", + "texts": { + "Hello {0}.": "Hallo {0}.", + "Car": "Auto", + "CarPlural": "Autos", + "MaxLenghtErrorMessage": "Die Länge dieses Feldes kann maximal '{0}'-Zeichen betragen", + "Universe": "Universum", + "FortyTwo": "Zweiundvierzig" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/de.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/de.json new file mode 100644 index 0000000000..a61f799d4a --- /dev/null +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/de.json @@ -0,0 +1,8 @@ +{ + "culture": "de", + "texts": { + "Hello {0}.": "Hallo {0}.", + "Car": "Auto", + "SeeYou": "Bis bald" + } +} \ No newline at end of file From eaa551f7872fc2f8f32daf7273699c001385bbb0 Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Sat, 25 Apr 2020 14:03:59 +0200 Subject: [PATCH 04/48] Small locatization test extensions --- .../Volo/Abp/Localization/AbpLocalization_Tests.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpLocalization_Tests.cs b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpLocalization_Tests.cs index 5608ca0a80..961f1ba0a4 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpLocalization_Tests.cs +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/AbpLocalization_Tests.cs @@ -73,6 +73,11 @@ namespace Volo.Abp.Localization _localizer["Car"].Value.ShouldBe("Auto"); } + using (CultureHelper.Use("de")) + { + _localizer["Car"].Value.ShouldBe("Auto"); + } + } [Fact] @@ -98,6 +103,11 @@ namespace Volo.Abp.Localization _localizer["SeeYou"].Value.ShouldBe("Nos vemos"); } + using (CultureHelper.Use("de")) + { + _localizer["SeeYou"].Value.ShouldBe("Bis bald"); + } + } [Fact] From 0d187a35688b74f72085835a94da8cb5bea80451 Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Sat, 25 Apr 2020 14:05:53 +0200 Subject: [PATCH 05/48] german localization for `Volo.Abp.Emailing.Tests` --- .../Volo/Abp/Emailing/Localization/de.json | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/de.json diff --git a/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/de.json b/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/de.json new file mode 100644 index 0000000000..504dff050c --- /dev/null +++ b/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/de.json @@ -0,0 +1,6 @@ +{ + "culture": "de", + "texts": { + "hello": "Hallo" + } +} \ No newline at end of file From 76fc4fb21009293de031d45d768d4453e42bc916 Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Sat, 25 Apr 2020 14:08:04 +0200 Subject: [PATCH 06/48] german localization for `Volo.Abp.AspNetCore.Mvc.Tests` --- .../Volo/Abp/AspNetCore/Mvc/Localization/Resource/de.json | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/de.json diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/de.json b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/de.json new file mode 100644 index 0000000000..e5b59a1915 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/de.json @@ -0,0 +1,7 @@ +{ + "culture": "de", + "texts": { + "BirthDate": "Geburtsdatum", + "Value1": "Wert Eins" + } +} \ No newline at end of file From aa6fd1ac36d47566cfcd682dcab79706703ab768 Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Sat, 25 Apr 2020 14:23:46 +0200 Subject: [PATCH 07/48] german localization for `Volo.Abp.Validation` --- .../Volo/Abp/Validation/Localization/de.json | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/de.json diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/de.json b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/de.json new file mode 100644 index 0000000000..e50bd05772 --- /dev/null +++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/de.json @@ -0,0 +1,34 @@ +{ + "culture": "de", + "texts": { + "'{0}' and '{1}' do not match.": "'{0}' und '{1}' stimmen nicht berein.", + "The {0} field is not a valid credit card number.": "Das Feld {0} ist keine gltige Kreditkartennummer.", + "{0} is not valid.": "{0} ist nicht gltig.", + "The {0} field is not a valid e-mail address.": "Das Feld {0} ist keine gltige E-Mail-Adresse.", + "The {0} field only accepts files with the following extensions: {1}": "Das Feld {0} akzeptiert nur Dateien mit den folgenden Erweiterungen: {1}", + "The field {0} must be a string or array type with a maximum length of '{1}'.": "Das Feld {0} muss eine Zeichenfolge oder Auflistung mit einer maximalen Lnge von '{1}' sein.", + "The field {0} must be a string or array type with a minimum length of '{1}'.": "Das Feld {0} muss eine Zeichenfolge oder Auflistung mit einer Mindestlnge von '{1}' sein.", + "The {0} field is not a valid phone number.": "Das Feld {0} ist keine gltige Telefonnummer.", + "The field {0} must be between {1} and {2}.": "Das Feld {0} muss zwischen {1} und {2} liegen.", + "The field {0} must match the regular expression '{1}'.": "Das Feld {0} muss dem regulren Ausdruck '{1}' entsprechen.", + "The {0} field is required.": "Das Feld {0} ist erforderlich.", + "The field {0} must be a string with a maximum length of {1}.": "Das Feld {0} muss eine Zeichenfolge mit einer maximalen Lnge von {1} sein.", + "The field {0} must be a string with a minimum length of {2} and a maximum length of {1}.": "Das Feld {0} muss eine Zeichenfolge mit einer minimalen Lnge von {2} und einer maximalen Lnge von {1} sein.", + "The {0} field is not a valid fully-qualified http, https, or ftp URL.": "Das {0}-Feld ist keine gltige vollqualifizierte http-, https- oder ftp-URL.", + "The field {0} is invalid.": "Das Feld {0} ist ungltig.", + "ThisFieldIsNotAValidCreditCardNumber.": "Dieses Feld ist keine gltige Kreditkartennummer.", + "ThisFieldIsNotValid.": "Dieses Feld ist nicht gltig.", + "ThisFieldIsNotAValidEmailAddress.": "Dieses Feld ist keine gltige E-Mail-Adresse.", + "ThisFieldOnlyAcceptsFilesWithTheFollowingExtensions:{0}": "Dieses Feld akzeptiert nur Dateien mit den folgenden Erweiterungen: {0}", + "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthoOf{0}": "Dieses Feld muss eine Zeichenfolge oder Auflistung mit einer maximalen Lnge von '{0}' sein.", + "ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}": "Dieses Feld muss eine Zeichenfolge oder Auflistung mit einer Mindestlnge von '{0}' sein.", + "ThisFieldIsNotAValidPhoneNumber.": "Dieses Feld ist keine gltige Telefonnummer.", + "ThisFieldMustBeBetween{0}And{1}": "Dieses Feld muss zwischen {0} und {1} liegen.", + "ThisFieldMustMatchTheRegularExpression{0}": "Dieses Feld muss dem regulren Ausdruck '{0}' entsprechen.", + "ThisFieldIsRequired.": "Dieses Feld ist erforderlich.", + "ThisFieldMustBeAStringWithAMaximumLengthOf{0}": "Dieses Feld muss eine Zeichenfolge mit einer maximalen Lnge von {0} sein.", + "ThisFieldMustBeAStringWithAMinimumLengthOf{1}AndAMaximumLengthOf{0}": "Dieses Feld muss eine Zeichenfolge mit einer Mindestlnge von '{0}' sein.", + "ThisFieldIsNotAValidFullyQualifiedHttpHttpsOrFtpUrl": "Dieses Feld ist keine gltige vollqualifizierte http-, https- oder ftp-URL.", + "ThisFieldIsInvalid.": "Dieses Feld ist ungltig." + } +} \ No newline at end of file From 882d1151dc900b167ce1e6c2d26769ab6623eef2 Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Sat, 25 Apr 2020 14:30:10 +0200 Subject: [PATCH 08/48] Fixed a typo in resource keys Fixed #3739 --- .../Volo/Abp/Validation/Localization/cs.json | 2 +- .../Volo/Abp/Validation/Localization/de.json | 2 +- .../Volo/Abp/Validation/Localization/en.json | 2 +- .../Volo/Abp/Validation/Localization/es.json | 2 +- .../Volo/Abp/Validation/Localization/pt-BR.json | 2 +- .../Volo/Abp/Validation/Localization/ru.json | 2 +- .../Volo/Abp/Validation/Localization/tr.json | 2 +- .../Volo/Abp/Validation/Localization/zh-Hans.json | 2 +- .../Volo/Abp/Validation/Localization/zh-Hant.json | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/cs.json b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/cs.json index 2be5ff3b15..4f65237eb3 100644 --- a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/cs.json +++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/cs.json @@ -20,7 +20,7 @@ "ThisFieldIsNotValid.": "{0} není platný.", "ThisFieldIsNotAValidEmailAddress.": "V poli {0} není platný email.", "ThisFieldOnlyAcceptsFilesWithTheFollowingExtensions:{0}": "Pole přijímá soubory pouze s následujícími koncovkami: {0}", - "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthoOf{0}": "Vy poli musí být řežezec nebo řada o maximální délce '{0}'.", + "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthOf{0}": "Vy poli musí být řežezec nebo řada o maximální délce '{0}'.", "ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}": "V poli musí být řežezec nebo řada o minimální délce '{0}'.", "ThisFieldIsNotAValidPhoneNumber.": "V poli není platné telefonní číslo.", "ThisFieldMustBeBetween{0}And{1}": "Pole musí být mezi {0} a {1}.", diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/de.json b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/de.json index e50bd05772..1e0e10716a 100644 --- a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/de.json +++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/de.json @@ -20,7 +20,7 @@ "ThisFieldIsNotValid.": "Dieses Feld ist nicht gltig.", "ThisFieldIsNotAValidEmailAddress.": "Dieses Feld ist keine gltige E-Mail-Adresse.", "ThisFieldOnlyAcceptsFilesWithTheFollowingExtensions:{0}": "Dieses Feld akzeptiert nur Dateien mit den folgenden Erweiterungen: {0}", - "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthoOf{0}": "Dieses Feld muss eine Zeichenfolge oder Auflistung mit einer maximalen Lnge von '{0}' sein.", + "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthOf{0}": "Dieses Feld muss eine Zeichenfolge oder Auflistung mit einer maximalen Lnge von '{0}' sein.", "ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}": "Dieses Feld muss eine Zeichenfolge oder Auflistung mit einer Mindestlnge von '{0}' sein.", "ThisFieldIsNotAValidPhoneNumber.": "Dieses Feld ist keine gltige Telefonnummer.", "ThisFieldMustBeBetween{0}And{1}": "Dieses Feld muss zwischen {0} und {1} liegen.", diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/en.json b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/en.json index b6ff1bb26c..2599d80b8e 100644 --- a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/en.json +++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/en.json @@ -20,7 +20,7 @@ "ThisFieldIsNotValid.": "This field is not valid.", "ThisFieldIsNotAValidEmailAddress.": "This field is not a valid e-mail address.", "ThisFieldOnlyAcceptsFilesWithTheFollowingExtensions:{0}": "This field only accepts files with the following extensions: {0}", - "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthoOf{0}": "This field must be a string or array type with a maximum length of '{0}'.", + "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthOf{0}": "This field must be a string or array type with a maximum length of '{0}'.", "ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}": "This field must be a string or array type with a minimum length of '{0}'.", "ThisFieldIsNotAValidPhoneNumber.": "This field is not a valid phone number.", "ThisFieldMustBeBetween{0}And{1}": "This field must be between {0} and {1}.", diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/es.json b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/es.json index 25ed44d7ad..944c02318c 100644 --- a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/es.json +++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/es.json @@ -20,7 +20,7 @@ "ThisFieldIsNotValid.": "Este campo no es válido.", "ThisFieldIsNotAValidEmailAddress.": "Este campo no es una dirección de correo electrónico válida.", "ThisFieldOnlyAcceptsFilesWithTheFollowingExtensions:{0}": "Este campo sólo acepta archivos con las siguientes extensiones: {0}", - "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthoOf{0}": "Este campo debe ser una cadena o un array con una longitud máxima de '{0}'.", + "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthOf{0}": "Este campo debe ser una cadena o un array con una longitud máxima de '{0}'.", "ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}": "Este campo debe ser una cadena o un array con una longitud mínima de '{0}'.", "ThisFieldIsNotAValidPhoneNumber.": "Este campo no es un número de teléfono válido.", "ThisFieldMustBeBetween{0}And{1}": "Este campo debe tener un valor entre {0} y {1}.", diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/pt-BR.json b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/pt-BR.json index b0852a3f5f..1c6cbf4874 100644 --- a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/pt-BR.json +++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/pt-BR.json @@ -20,7 +20,7 @@ "ThisFieldIsNotValid.": "Campo inválido.", "ThisFieldIsNotAValidEmailAddress.": "E-mail inválido.", "ThisFieldOnlyAcceptsFilesWithTheFollowingExtensions:{0}": "Este campo só aceita arquivos com asseguintes extensões: {0}", - "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthoOf{0}": "This field must be a string or array type with a maximum length of '{0}'.", + "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthOf{0}": "This field must be a string or array type with a maximum length of '{0}'.", "ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}": "This field must be a string or array type with a minimum length of '{0}'.", "ThisFieldIsNotAValidPhoneNumber.": "Número de telefone inválido.", "ThisFieldMustBeBetween{0}And{1}": "Este campo deve estar entre {0} e {1}.", diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/ru.json b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/ru.json index 6272fdf534..443671df7b 100644 --- a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/ru.json +++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/ru.json @@ -20,7 +20,7 @@ "ThisFieldIsNotValid.": "Значение в этом поле недействительно.", "ThisFieldIsNotAValidEmailAddress.": "Это поле не содержит действительный адрес электронной почты.", "ThisFieldOnlyAcceptsFilesWithTheFollowingExtensions:{0}": "Вы можете загрузить файлы только следующих форматов: {0}", - "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthoOf{0}": "Это поле должно иметь тип строки или массива с максимальной длиной '{0}'.", + "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthOf{0}": "Это поле должно иметь тип строки или массива с максимальной длиной '{0}'.", "ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}": "Это поле должно иметь тип строки или массива с минимальной длиной '{0}'.", "ThisFieldIsNotAValidPhoneNumber.": "Это поле не содержит действительный номер телефона.", "ThisFieldMustBeBetween{0}And{1}": "Это поле должно быть между {0} и {1}.", diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/tr.json b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/tr.json index 447495e236..be19ed684a 100644 --- a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/tr.json +++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/tr.json @@ -20,7 +20,7 @@ "ThisFieldIsNotValid.": "Bu alan geçerli değil.", "ThisFieldIsNotAValidEmailAddress.": "Bu alan geçerli bir e-posta adresi olmalıdır.", "ThisFieldOnlyAcceptsFilesWithTheFollowingExtensions:{0}": "Bu alan sadece şu uzantılarda dosyaları kabul eder: {0}", - "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthoOf{0}": "Bu alan en fazla '{0}' uzunluğunda bir metin ya da dizi olmalıdır.", + "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthOf{0}": "Bu alan en fazla '{0}' uzunluğunda bir metin ya da dizi olmalıdır.", "ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}": "Bu alan en az '{0}' uzunluğunda bir metin ya da dizi olmalıdır.", "ThisFieldIsNotAValidPhoneNumber.": "Bu alan geçerli bir telefon numarası olmalıdır.", "ThisFieldMustBeBetween{0}And{1}": "Bu alanın değeri {0} ile {1} arasında olmalıdır.", diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/zh-Hans.json b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/zh-Hans.json index 282423a44a..5a476d770f 100644 --- a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/zh-Hans.json +++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/zh-Hans.json @@ -20,7 +20,7 @@ "ThisFieldIsNotValid.": "验证未通过.", "ThisFieldIsNotAValidEmailAddress.": "字段不是有效的邮箱地址.", "ThisFieldOnlyAcceptsFilesWithTheFollowingExtensions:{0}": "字段只允许以下扩展名的文件: {0}", - "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthoOf{0}": "字段必须是最大长度为'{0}'的字符串或数组.", + "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthOf{0}": "字段必须是最大长度为'{0}'的字符串或数组.", "ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}": "字段必须是最小长度为'{0}'的字符串或数组.", "ThisFieldIsNotAValidPhoneNumber.": "字段不是有效的手机号码.", "ThisFieldMustBeBetween{0}And{1}": "字段值必须在{0}和{1}范围内.", diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/zh-Hant.json b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/zh-Hant.json index 1e7e419625..17d5c2b115 100644 --- a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/zh-Hant.json +++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/zh-Hant.json @@ -20,7 +20,7 @@ "ThisFieldIsNotValid.": "此驗證未通過.", "ThisFieldIsNotAValidEmailAddress.": "此欄位不是有效的郵箱地址.", "ThisFieldOnlyAcceptsFilesWithTheFollowingExtensions:{0}": "此欄位只允許以下副檔名的文件: {0}", - "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthoOf{0}": "此欄位必須是最大長度為'{0}'的字串或陣列.", + "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthOf{0}": "此欄位必須是最大長度為'{0}'的字串或陣列.", "ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}": "此欄位必須是最小長度為'{0}'的字串或陣列.", "ThisFieldIsNotAValidPhoneNumber.": "此欄位不是有效的電話號碼.", "ThisFieldMustBeBetween{0}And{1}": "此欄位值必須在{0}和{1}範圍內.", From c099f1ef24d1ea3248c0cf89b3f19fc5864376aa Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Sat, 25 Apr 2020 14:31:59 +0200 Subject: [PATCH 09/48] german localization for `Volo.Abp.UI.Navigation` --- .../Volo/Abp/Ui/Navigation/Localization/Resource/de.json | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/de.json diff --git a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/de.json b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/de.json new file mode 100644 index 0000000000..170258b00c --- /dev/null +++ b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/de.json @@ -0,0 +1,6 @@ +{ + "culture": "de", + "texts": { + "Menu:Administration": "Administration" + } +} \ No newline at end of file From 43d5889aac48d6689ff639bd476d0189b8ddfec0 Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Sat, 25 Apr 2020 14:33:28 +0200 Subject: [PATCH 10/48] german localization for `Volo.Abp.Localization` --- .../Abp/Localization/Resources/AbpLocalization/de.json | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/de.json diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/de.json b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/de.json new file mode 100644 index 0000000000..a00c0d5f8a --- /dev/null +++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/de.json @@ -0,0 +1,7 @@ +{ + "culture": "de", + "texts": { + "DisplayName:Abp.Localization.DefaultLanguage": "Standardsprache", + "Description:Abp.Localization.DefaultLanguage": "Die Standardsprache der Anwendung." + } +} \ No newline at end of file From e9db6c1d03ce87f3709932a7aca599534747b4ab Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Tue, 28 Apr 2020 12:34:26 +0200 Subject: [PATCH 11/48] german localization for `Volo.Abp.Emailing` --- .../Volo/Abp/Emailing/Localization/de.json | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/de.json diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/de.json b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/de.json new file mode 100644 index 0000000000..a427fc2b09 --- /dev/null +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/de.json @@ -0,0 +1,23 @@ +{ + "culture": "de", + "texts": { + "DisplayName:Abp.Mailing.DefaultFromAddress": "Standard-Absenderadresse", + "DisplayName:Abp.Mailing.DefaultFromDisplayName": "Standard-Absendername", + "DisplayName:Abp.Mailing.Smtp.Host": "Host", + "DisplayName:Abp.Mailing.Smtp.Port": "Port", + "DisplayName:Abp.Mailing.Smtp.UserName": "Benutzername", + "DisplayName:Abp.Mailing.Smtp.Password": "Kennwort", + "DisplayName:Abp.Mailing.Smtp.Domain": "Domain", + "DisplayName:Abp.Mailing.Smtp.EnableSsl": "SSL aktivieren", + "DisplayName:Abp.Mailing.Smtp.UseDefaultCredentials": "Standard-Anmeldeinformationen verwenden", + "Description:Abp.Mailing.DefaultFromAddress": "Die Standard-Absenderadresse", + "Description:Abp.Mailing.DefaultFromDisplayName": "Der Standard-Absendername", + "Description:Abp.Mailing.Smtp.Host": "Der Name oder die IP-Adresse des fr SMTP-Transaktionen verwendeten Hosts.", + "Description:Abp.Mailing.Smtp.Port": "Der fr SMTP-Transaktionen verwendete Port.", + "Description:Abp.Mailing.Smtp.UserName": "Benutzername, der mit den Anmeldedaten verknpft ist.", + "Description:Abp.Mailing.Smtp.Password": "Das Passwort fr den Benutzernamen, der mit den Anmeldeinformationen verknpft ist.", + "Description:Abp.Mailing.Smtp.Domain": "Die Domne oder der Computername, der die Anmeldeinformationen verifiziert.", + "Description:Abp.Mailing.Smtp.EnableSsl": "Bestimmt, ob der SmptClient Secure Sockets Layer (SSL) zur Verschlsselung der Verbindung verwendet.", + "Description:Abp.Mailing.Smtp.UseDefaultCredentials": "Bestimmt, ob die DefaultCredentials mit Anfragen gesendet werden." + } +} \ No newline at end of file From aae316a7b579e85daf933f31095e1f7f05c673e9 Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Tue, 28 Apr 2020 18:27:24 +0200 Subject: [PATCH 12/48] Completed german translation for framework projects --- .../Mvc/UI/MultiTenancy/Localization/de.json | 12 ++++++++++++ .../Localization/Resources/AbpDdd/de.json | 6 ++++++ 2 files changed, 18 insertions(+) create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/de.json create mode 100644 framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/de.json diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/de.json b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/de.json new file mode 100644 index 0000000000..8a1a755193 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/de.json @@ -0,0 +1,12 @@ +{ + "culture": "de", + "texts": { + "GivenTenantIsNotAvailable": "Der angegebene Mandant ist nicht verfügbar: {0}", + "Tenant": "Mandant", + "Switch": "wechseln", + "Name": "Name", + "SwitchTenantHint": "Lassen Sie das Namensfeld leer, um auf die Host-Seite zu wechseln.", + "SwitchTenant": "Mandant wechseln", + "NotSelected": "Nicht ausgewählt" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/de.json b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/de.json new file mode 100644 index 0000000000..b96b58c2b3 --- /dev/null +++ b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/de.json @@ -0,0 +1,6 @@ +{ + "culture": "de", + "texts": { + "MaxResultCountExceededExceptionMessage": "{0} kann nicht mehr als {1} sein! Erhhen Sie {2}.{3} auf der Serverseite, um mehr Ergebnisse zu ermglichen." + } +} From 5ef65b7875490050176d1aa2b5569483a85fc912 Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Tue, 28 Apr 2020 18:30:50 +0200 Subject: [PATCH 13/48] Unified tabs / whitespaces --- .../Volo/Abp/Emailing/Localization/de.json | 42 +++--- .../Localization/Resources/AbpUi/de.json | 122 +++++++++--------- 2 files changed, 82 insertions(+), 82 deletions(-) diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/de.json b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/de.json index a427fc2b09..b16538387e 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/de.json +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/de.json @@ -1,23 +1,23 @@ { - "culture": "de", - "texts": { - "DisplayName:Abp.Mailing.DefaultFromAddress": "Standard-Absenderadresse", - "DisplayName:Abp.Mailing.DefaultFromDisplayName": "Standard-Absendername", - "DisplayName:Abp.Mailing.Smtp.Host": "Host", - "DisplayName:Abp.Mailing.Smtp.Port": "Port", - "DisplayName:Abp.Mailing.Smtp.UserName": "Benutzername", - "DisplayName:Abp.Mailing.Smtp.Password": "Kennwort", - "DisplayName:Abp.Mailing.Smtp.Domain": "Domain", - "DisplayName:Abp.Mailing.Smtp.EnableSsl": "SSL aktivieren", - "DisplayName:Abp.Mailing.Smtp.UseDefaultCredentials": "Standard-Anmeldeinformationen verwenden", - "Description:Abp.Mailing.DefaultFromAddress": "Die Standard-Absenderadresse", - "Description:Abp.Mailing.DefaultFromDisplayName": "Der Standard-Absendername", - "Description:Abp.Mailing.Smtp.Host": "Der Name oder die IP-Adresse des fr SMTP-Transaktionen verwendeten Hosts.", - "Description:Abp.Mailing.Smtp.Port": "Der fr SMTP-Transaktionen verwendete Port.", - "Description:Abp.Mailing.Smtp.UserName": "Benutzername, der mit den Anmeldedaten verknpft ist.", - "Description:Abp.Mailing.Smtp.Password": "Das Passwort fr den Benutzernamen, der mit den Anmeldeinformationen verknpft ist.", - "Description:Abp.Mailing.Smtp.Domain": "Die Domne oder der Computername, der die Anmeldeinformationen verifiziert.", - "Description:Abp.Mailing.Smtp.EnableSsl": "Bestimmt, ob der SmptClient Secure Sockets Layer (SSL) zur Verschlsselung der Verbindung verwendet.", - "Description:Abp.Mailing.Smtp.UseDefaultCredentials": "Bestimmt, ob die DefaultCredentials mit Anfragen gesendet werden." - } + "culture": "de", + "texts": { + "DisplayName:Abp.Mailing.DefaultFromAddress": "Standard-Absenderadresse", + "DisplayName:Abp.Mailing.DefaultFromDisplayName": "Standard-Absendername", + "DisplayName:Abp.Mailing.Smtp.Host": "Host", + "DisplayName:Abp.Mailing.Smtp.Port": "Port", + "DisplayName:Abp.Mailing.Smtp.UserName": "Benutzername", + "DisplayName:Abp.Mailing.Smtp.Password": "Kennwort", + "DisplayName:Abp.Mailing.Smtp.Domain": "Domain", + "DisplayName:Abp.Mailing.Smtp.EnableSsl": "SSL aktivieren", + "DisplayName:Abp.Mailing.Smtp.UseDefaultCredentials": "Standard-Anmeldeinformationen verwenden", + "Description:Abp.Mailing.DefaultFromAddress": "Die Standard-Absenderadresse", + "Description:Abp.Mailing.DefaultFromDisplayName": "Der Standard-Absendername", + "Description:Abp.Mailing.Smtp.Host": "Der Name oder die IP-Adresse des fr SMTP-Transaktionen verwendeten Hosts.", + "Description:Abp.Mailing.Smtp.Port": "Der fr SMTP-Transaktionen verwendete Port.", + "Description:Abp.Mailing.Smtp.UserName": "Benutzername, der mit den Anmeldedaten verknpft ist.", + "Description:Abp.Mailing.Smtp.Password": "Das Passwort fr den Benutzernamen, der mit den Anmeldeinformationen verknpft ist.", + "Description:Abp.Mailing.Smtp.Domain": "Die Domne oder der Computername, der die Anmeldeinformationen verifiziert.", + "Description:Abp.Mailing.Smtp.EnableSsl": "Bestimmt, ob der SmptClient Secure Sockets Layer (SSL) zur Verschlsselung der Verbindung verwendet.", + "Description:Abp.Mailing.Smtp.UseDefaultCredentials": "Bestimmt, ob die DefaultCredentials mit Anfragen gesendet werden." + } } \ No newline at end of file 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 a626e714a2..a663b772be 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/de.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/de.json @@ -1,63 +1,63 @@ { - "culture": "de", - "texts": { - "InternalServerErrorMessage": "Whrend Ihrer Anfrage ist ein interner Fehler aufgetreten!", - "ValidationErrorMessage": "Ihre Anfrage ist nicht gltig!", - "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 durchzufhren.", - "DefaultErrorMessage403": "Sie sind nicht autorisiert!", - "DefaultErrorMessage403Detail": "Es ist Ihnen nicht erlaubt, diese Operation durchzufhren!", - "DefaultErrorMessage404": "Ressource nicht gefunden!", - "DefaultErrorMessage404Detail": "Die angeforderte Ressource konnte auf dem Server nicht gefunden werden!", - "EntityNotFoundErrorMessage": "Es gibt keine Entitt {0} mit id = {1}!", - "Languages": "Sprachen", - "Error": "Fehler", - "AreYouSure": "Sind Sie sicher?", - "Cancel": "Abbrechen", - "Yes": "Ja", - "No": "Nein", - "Ok": "Ok", - "Close": "Schlieen", - "Save": "Speichern", - "SavingWithThreeDot": "Speichere...", - "Actions": "Aktionen", - "Delete": "Lschen", - "Edit": "Bearbeiten", - "Refresh": "Aktualisieren", - "Language": "Sprache", - "LoadMore": "Mehr laden", - "ProcessingWithThreeDot": "Verarbeite...", - "LoadingWithThreeDot": "Lade...", - "Welcome": "Willkommen", - "Login": "Anmelden", - "Register": "Registrieren", - "Logout": "Abmelden", - "Submit": "Absenden", - "Back": "Zurck", - "PagerSearch": "Suchen", - "PagerNext": "Nchste", - "PagerPrevious": "Vorherige", - "PagerFirst": "Erste", - "PagerLast": "Letzte", - "PagerInfo": "Zeige _START_ bis _END_ von _TOTAL_ Eintrgen", - "PagerInfo{0}{1}{2}": "Zeige {0} bis {1} von {2} Eintrgen", - "PagerInfoEmpty": "Zeige 0 bis 0 von 0 Eintrgen", - "PagerInfoFiltered": "(gefiltert von _MAX_ Eintrgen insgesamt)", - "NoDataAvailableInDatatable": "Keine Daten verfgbar", - "PagerShowMenuEntries": "Zeige _MENU_ Eintrge", - "DatatableActionDropdownDefaultText": "Aktionen", - "ChangePassword": "Passwort ndern", - "PersonalInfo": "Mein Profil", - "AreYouSureYouWantToCancelEditingWarningMessage": "Sie haben ungespeicherte nderungen.", - "UnhandledException": "Unerwartete Ausnahme!", - "401Message": "Unauthorisiert", - "403Message": "Verboten", - "404Message": "Seite nicht gefunden", - "500Message": "Internet Server Fehler", - "GoHomePage": "Zur Startseite", - "GoBack": "Zurck" - } + "culture": "de", + "texts": { + "InternalServerErrorMessage": "Whrend Ihrer Anfrage ist ein interner Fehler aufgetreten!", + "ValidationErrorMessage": "Ihre Anfrage ist nicht gltig!", + "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 durchzufhren.", + "DefaultErrorMessage403": "Sie sind nicht autorisiert!", + "DefaultErrorMessage403Detail": "Es ist Ihnen nicht erlaubt, diese Operation durchzufhren!", + "DefaultErrorMessage404": "Ressource nicht gefunden!", + "DefaultErrorMessage404Detail": "Die angeforderte Ressource konnte auf dem Server nicht gefunden werden!", + "EntityNotFoundErrorMessage": "Es gibt keine Entitt {0} mit id = {1}!", + "Languages": "Sprachen", + "Error": "Fehler", + "AreYouSure": "Sind Sie sicher?", + "Cancel": "Abbrechen", + "Yes": "Ja", + "No": "Nein", + "Ok": "Ok", + "Close": "Schlieen", + "Save": "Speichern", + "SavingWithThreeDot": "Speichere...", + "Actions": "Aktionen", + "Delete": "Lschen", + "Edit": "Bearbeiten", + "Refresh": "Aktualisieren", + "Language": "Sprache", + "LoadMore": "Mehr laden", + "ProcessingWithThreeDot": "Verarbeite...", + "LoadingWithThreeDot": "Lade...", + "Welcome": "Willkommen", + "Login": "Anmelden", + "Register": "Registrieren", + "Logout": "Abmelden", + "Submit": "Absenden", + "Back": "Zurck", + "PagerSearch": "Suchen", + "PagerNext": "Nchste", + "PagerPrevious": "Vorherige", + "PagerFirst": "Erste", + "PagerLast": "Letzte", + "PagerInfo": "Zeige _START_ bis _END_ von _TOTAL_ Eintrgen", + "PagerInfo{0}{1}{2}": "Zeige {0} bis {1} von {2} Eintrgen", + "PagerInfoEmpty": "Zeige 0 bis 0 von 0 Eintrgen", + "PagerInfoFiltered": "(gefiltert von _MAX_ Eintrgen insgesamt)", + "NoDataAvailableInDatatable": "Keine Daten verfgbar", + "PagerShowMenuEntries": "Zeige _MENU_ Eintrge", + "DatatableActionDropdownDefaultText": "Aktionen", + "ChangePassword": "Passwort ndern", + "PersonalInfo": "Mein Profil", + "AreYouSureYouWantToCancelEditingWarningMessage": "Sie haben ungespeicherte nderungen.", + "UnhandledException": "Unerwartete Ausnahme!", + "401Message": "Unauthorisiert", + "403Message": "Verboten", + "404Message": "Seite nicht gefunden", + "500Message": "Internet Server Fehler", + "GoHomePage": "Zur Startseite", + "GoBack": "Zurck" + } } From 746fc01d32794a8f9b572680cfddc315a41e31c5 Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Tue, 28 Apr 2020 18:32:35 +0200 Subject: [PATCH 14/48] More tabs / whitespace unification --- .../TestResources/Base/CountryNames/de.json | 10 +++++----- .../Abp/Localization/TestResources/SourceExt/de.json | 12 ++++++------ 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/de.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/de.json index 52548ccc71..748a622c5c 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/de.json +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/de.json @@ -1,7 +1,7 @@ { - "culture": "de", - "texts": { - "USA": "Vereinigte Staaten von Amerika", - "Brazil": "Brasilien" - } + "culture": "de", + "texts": { + "USA": "Vereinigte Staaten von Amerika", + "Brazil": "Brasilien" + } } \ No newline at end of file diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/de.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/de.json index a61f799d4a..8f7d549d52 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/de.json +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/de.json @@ -1,8 +1,8 @@ { - "culture": "de", - "texts": { - "Hello {0}.": "Hallo {0}.", - "Car": "Auto", - "SeeYou": "Bis bald" - } + "culture": "de", + "texts": { + "Hello {0}.": "Hallo {0}.", + "Car": "Auto", + "SeeYou": "Bis bald" + } } \ No newline at end of file From 270f265ea1eab544e0c5a234887db9f02221788a Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Tue, 28 Apr 2020 19:41:14 +0200 Subject: [PATCH 15/48] german localization for (most) modules --- .../Account/Localization/Resources/de.json | 45 ++++++++ .../Blogging/ApplicationContracts/de.json | 14 +++ .../Blogging/Localization/Resources/de.json | 49 +++++++++ .../Resources/VoloDocs/Web/de.json | 10 ++ .../Docs/ApplicationContracts/de.json | 37 +++++++ .../Volo/Docs/Localization/Domain/de.json | 31 ++++++ .../Localization/Domain/de.json | 7 ++ .../Volo/Abp/Identity/Localization/de.json | 104 ++++++++++++++++++ .../Localization/Domain/de.json | 10 ++ .../Resources/AbpSettingManagement/de.json | 7 ++ .../Localization/Resources/de.json | 22 ++++ 11 files changed, 336 insertions(+) create mode 100644 modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/de.json create mode 100644 modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/de.json create mode 100644 modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/de.json create mode 100644 modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/de.json create mode 100644 modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/de.json create mode 100644 modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/de.json create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/de.json create mode 100644 modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/de.json create mode 100644 modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/de.json create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/de.json create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/de.json diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/de.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/de.json new file mode 100644 index 0000000000..7e4a383189 --- /dev/null +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/de.json @@ -0,0 +1,45 @@ +{ + "culture": "de", + "texts": { + "UserName": "Benutzername", + "EmailAddress": "E-Mail-Adresse", + "UserNameOrEmailAddress": "Benutzername oder E-Mail-Adresse", + "Password": "Kennwort", + "RememberMe": "Angemeldet bleiben", + "UseAnotherServiceToLogin": "Einen anderen Dienst zum Anmelden verwenden", + "UserLockedOutMessage": "Das Benutzerkonto wurde aufgrund fehlgeschlagener Anmeldeversuche gesperrt. Bitte warten Sie eine Weile und versuchen Sie es erneut.", + "InvalidUserNameOrPassword": "Ungltiger Benutzername oder Kennwort!", + "LoginIsNotAllowed": "Sie drfen sich nicht anmelden! Sie mssen Ihre E-Mail/Telefonnummer besttigen.", + "SelfRegistrationDisabledMessage": "Die Selbstregistrierung ist fr diese Anwendung deaktiviert. Bitte wenden Sie sich an den Anwendungsadministrator, um einen neuen Benutzer zu registrieren.", + "LocalLoginDisabledMessage": "Die lokale Anmeldung ist fr diese Anwendung deaktiviert.", + "Login": "Anmelden", + "Cancel": "Abbrechen", + "Register": "Registrieren", + "AreYouANewUser": "Neuer Benutzer?", + "AlreadyRegistered": "Bereits registriert?", + "InvalidLoginRequest": "Ungltige Login-Anfrage", + "ThereAreNoLoginSchemesConfiguredForThisClient": "Es sind keine Anmeldeschemata fr diesen Client konfiguriert.", + "LogInUsingYourProviderAccount": "Melden Sie sich mit Ihrem {0}-Konto an", + "DisplayName:CurrentPassword": "Aktuelles Kennwort", + "DisplayName:NewPassword": "Neues Kennwort", + "DisplayName:NewPasswordConfirm": "Neues Kennwort besttigen", + "PasswordChangedMessage": "Ihr Kennwort wurde erfolgreich gendert.", + "DisplayName:UserName": "Benutzername", + "DisplayName:Email": "E-Mail", + "DisplayName:Name": "Name", + "DisplayName:Surname": "Nachname", + "DisplayName:Password": "Kennwort", + "DisplayName:EmailAddress": "E-Mail-Adresse", + "DisplayName:PhoneNumber": "Telefonnummer", + "PersonalSettings": "Persnliche Einstellungen", + "PersonalSettingsSaved": "Persnliche Einstellungen gespeichert", + "PasswordChanged": "Kennwort gendert", + "NewPasswordConfirmFailed": "Bitte besttigen Sie das neue Kennwort.", + "Manage": "Verwalten", + "ManageYourProfile": "Ihr profil verwalten", + "DisplayName:Abp.Account.IsSelfRegistrationEnabled": "Ist die Selbstregistrierung aktiviert", + "Description:Abp.Account.IsSelfRegistrationEnabled": "Gibt an, ob ein Benutzer das Konto selbst registrieren kann.", + "DisplayName:Abp.Account.EnableLocalLogin": "Authentifizierung mit einem lokalen Konto", + "Description:Abp.Account.EnableLocalLogin": "Gibt an, ob der Server Benutzern die Authentifizierung mit einem lokalen Konto erlaubt." + } +} diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/de.json b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/de.json new file mode 100644 index 0000000000..9455b3cd44 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/de.json @@ -0,0 +1,14 @@ +{ + "culture": "de", + "texts": { + "Permission:Blogging": "Blog", + "Permission:Blogs": "Blogs", + "Permission:Posts": "Beitrge", + "Permission:Tags": "Tags", + "Permission:Comments": "Kommentare", + "Permission:Management": "Verwaltung", + "Permission:Edit": "Bearbeiten", + "Permission:Create": "Erstellen", + "Permission:Delete": "Lschen" + } +} \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/de.json b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/de.json new file mode 100644 index 0000000000..6489396692 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/de.json @@ -0,0 +1,49 @@ +{ + "culture": "de", + "texts": { + "Menu:Blogs": "Blogs", + "Menu:BlogManagement": "Blog-Verwaltung", + "Title": "Titel", + "Delete": "Lschen", + "Reply": "Antwort", + "ReplyTo": "Antwort auf {0}", + "ContinueReading": "Weiterlesen", + "DaysAgo": "vor {0} Tagen", + "YearsAgo": "vor {0} Jahren", + "MonthsAgo": "vor {0} Monaten", + "WeeksAgo": "vor {0} Wochen", + "MinutesAgo": "vor {0} Minuten", + "SecondsAgo": "vor {0} Sekunden", + "HoursAgo": "vor {0} Stunden", + "Now": "jetzt", + "Content": "Inhalt", + "SeeAll": "Alle anzeigen", + "PopularTags": "Beliebte Tags", + "WiewsWithCount": "{0} Aufrufe", + "LastPosts": "Letzte Beitrge", + "LeaveComment": "Kommentar hinterlassen", + "TagsInThisArticle": "Tags in diesem Artikel", + "Posts": "Beitrge", + "Edit": "Bearbeiten", + "BLOG": "BLOG", + "CommentDeletionWarningMessage": "Kommentar wird gelscht.", + "PostDeletionWarningMessage": "Beitrag wird gelscht.", + "BlogDeletionWarningMessage": "Blog wird gelscht.", + "AreYouSure": "Sind Sie sicher?", + "CommentWithCount": "{0} Kommentare", + "Comment": "Kommentar", + "ShareOnTwitter": "Auf Twitter teilen", + "CoverImage": "Titelbild", + "CreateANewPost": "Neuen Beitrag erstellen", + "CreateANewBlog": "Neuen Blog erstellen", + "WhatIsNew": "Was ist neu?", + "Name": "Name", + "ShortName": "Kurzname", + "CreationTime": "Erstellungszeit", + "Description": "Beschreibung", + "Blogs": "Blogs", + "Tags": "Tags", + "ShareOn": "Teilen auf", + "TitleLengthWarning": "Halten Sie Ihren Titel unter 60 Zeichen, um SEO-freundlich zu sein!" + } +} \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/de.json b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/de.json new file mode 100644 index 0000000000..b31c3accc2 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/de.json @@ -0,0 +1,10 @@ +{ + "culture": "de", + "texts": { + "DocsTitle": "VoloDocs", + "WelcomeVoloDocs": "Willkommen bei den VoloDocs!", + "NoProjectWarning": "Es gibt noch kein definiertes Projekt!", + "CreateYourFirstProject": "Klicken Sie hier, um Ihr erstes Projekt zu starten", + "NoProject": "Kein Projekt!" + } +} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/de.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/de.json new file mode 100644 index 0000000000..25be277082 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/de.json @@ -0,0 +1,37 @@ +{ + "culture": "de", + "texts": { + "Permission:DocumentManagement": "Dokumentenverwaltung", + "Permission:Projects": "Projekte", + "Permission:Edit": "Bearbeiten", + "Permission:Delete": "Löschen", + "Permission:Create": "Erstellen", + "Permission:Documents": "Dokumente", + "Menu:DocumentManagement": "Dokumente", + "Menu:ProjectManagement": "Projekte", + "CreateANewProject": "Neues Projekt erstellen", + "Edit": "Bearbeiten", + "Create": "Erstellen", + "Pull": "Pull", + "Projects": "Projekte", + "Name": "Name", + "ShortName": "Kurzname", + "DocumentStoreType": "DocumentStoreType", + "Format": "Format", + "ShortNameInfoText": "Wird für eindeutige URL verwendet.", + "DisplayName:Name": "Name", + "DisplayName:ShortName": "Kurzname", + "DisplayName:Format": "Format", + "DisplayName:DefaultDocumentName": "Standard-Dokumentname", + "DisplayName:NavigationDocumentName": "Name des Navigationsdokuments", + "DisplayName:MinimumVersion": "Mindestversion", + "DisplayName:MainWebsiteUrl": "Haupt-URL der Website", + "DisplayName:LatestVersionBranchName": "Zweigname der neuesten Version", + "DisplayName:GitHubRootUrl": "GitHub-Stamm-URL", + "DisplayName:GitHubAccessToken": "GitHub-Zugriffstoken", + "DisplayName:GitHubUserAgent": "GitHub-Benutzer-Agent", + "DisplayName:All": "Pull all", + "DisplayName:LanguageCode": "Sprachcode", + "DisplayName:Version": "Version" + } +} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/de.json b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/de.json new file mode 100644 index 0000000000..dcaaaddd20 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/de.json @@ -0,0 +1,31 @@ +{ + "culture": "de", + "texts": { + "Documents": "Dokumente", + "BackToWebsite": "Zurück zur Website", + "Contributors": "Mitwirkende", + "ShareOn": "Teilen auf", + "Version": "Version", + "Edit": "Bearbeiten", + "LastEditTime": "Letzte Bearbeitung", + "Delete": "Löschen", + "ClearCache": "Cache leeren", + "ClearCacheConfirmationMessage": "Sind Sie sicher, dass Sie alle Caches für das Projekt löschen \"{0}\"", + "InThisDocument": "In diesem Dokument", + "GoToTop": "Nach oben", + "Projects": "Projekt(e)", + "NoProjectWarning": "Es gibt noch keine Projekte!", + "DocumentNotFound": "Hoppla, das angeforderte Dokument wurde nicht gefunden!", + "NavigationDocumentNotFound": "Diese Version hat kein Navigationsdokument!", + "DocumentNotFoundInSelectedLanguage": "Das Dokument wurde nicht in der von Ihnen gewünschten Sprache gefunden. Das Dokument wird in der Standardsprache angezeigt.", + "FilterTopics": "Themen filtern", + "FullSearch": "Suche in Dokumenten", + "Volo.Docs.Domain:010001": "Elastic search ist nicht aktiviert.", + "MultipleVersionDocumentInfo": "Dieses Dokument hat mehrere Versionen. Wählen Sie die für Sie am besten geeigneten Optionen aus.", + "New": "Neu", + "Upd": "Upd", + "NewExplanation": "Erstellt in den letzten zwei Wochen.", + "UpdatedExplanation": "Aktualisiert in den letzten zwei Wochen.", + "Volo.Docs.Domain:010002": "Kurzname {ShortName} existiert bereits." + } +} diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/de.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/de.json new file mode 100644 index 0000000000..848bd4bb28 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/de.json @@ -0,0 +1,7 @@ +{ + "culture": "de", + "texts": { + "Features": "Funktionen", + "NoFeatureFoundMessage": "Es ist keine Funktion verfgbar." + } +} \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/de.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/de.json new file mode 100644 index 0000000000..0c8ba47b66 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/de.json @@ -0,0 +1,104 @@ +{ + "culture": "de", + "texts": { + "Menu:IdentityManagement": "Identittsverwaltung", + "Users": "Benutzer", + "NewUser": "Neuer Benutzer", + "UserName": "Benutzername", + "EmailAddress": "E-Mail-Adresse", + "PhoneNumber": "Telefonnummer", + "UserInformations": "Benutzerinformationen", + "DisplayName:IsDefault": "Standard", + "DisplayName:IsStatic": "Statisch", + "DisplayName:IsPublic": "ffentlich", + "Roles": "Rollen", + "Password": "Passwort", + "PersonalInfo": "Mein Profil", + "PersonalSettings": "Persnliche Einstellungen", + "UserDeletionConfirmationMessage": "Der Benutzer '{0}' wird gelscht. Sind Sie sicher?", + "RoleDeletionConfirmationMessage": "Die Rolle '{0}' wird gelscht. Sind Sie sicher?", + "DisplayName:RoleName": "Rollenname", + "DisplayName:UserName": "Benutzername", + "DisplayName:Name": "Name", + "DisplayName:Surname": "Nachname", + "DisplayName:Password": "Passwort", + "DisplayName:Email": "E-Mail-Adresse", + "DisplayName:PhoneNumber": "Telefonnummer", + "DisplayName:TwoFactorEnabled": "Zwei-Faktor-Verifizierung", + "DisplayName:LockoutEnabled": "Konto nach fehlgeschlagenen Anmeldeversuchen sperren", + "NewRole": "Neue Rolle", + "RoleName": "Rollenname", + "CreationTime": "Erstellungszeit", + "Permissions": "Berechtigungen", + "DisplayName:CurrentPassword": "Aktuelles Passwort", + "DisplayName:NewPassword": "Neues Passwort", + "DisplayName:NewPasswordConfirm": "Neues Passwort besttigen", + "PasswordChangedMessage": "Ihr Passwort wurde erfolgreich gendert.", + "PersonalSettingsSavedMessage": "Ihre persnlichen Einstellungen wurden erfolgreich gespeichert.", + "Identity.DefaultError": "Ein unbekannter Fehler ist aufgetreten.", + "Identity.ConcurrencyFailure": "Optimistischer Nebenlufigkeitsfehler, Objekt wurde gendert.", + "Identity.DuplicateEmail": "E-Mail '{0}' ist bereits vergeben.", + "Identity.DuplicateRoleName": "Der Rollenname '{0}' ist bereits vergeben.", + "Identity.DuplicateUserName": "Der Benutzername '{0}' ist bereits vergeben.", + "Identity.InvalidEmail": "E-Mail '{0}' ist ungltig.", + "Identity.InvalidPasswordHasherCompatibilityMode": "Der angegebene PasswordHasherCompatibilityMode ist ungltig.", + "Identity.InvalidPasswordHasherIterationCount": "Die Iterationszahl muss eine positive Ganzzahl sein.", + "Identity.InvalidRoleName": "Der Rollenname '{0}' ist ungltig.", + "Identity.InvalidToken": "Ungltiges Token.", + "Identity.InvalidUserName": "Benutzername '{0}' ist ungltig, kann nur Buchstaben oder Ziffern enthalten.", + "Identity.LoginAlreadyAssociated": "Ein Benutzer mit diesem Login existiert bereits.", + "Identity.PasswordMismatch": "Falsches Passwort.", + "Identity.PasswordRequiresDigit": "Passwrter mssen mindestens eine Ziffer ('0'-'9') enthalten.", + "Identity.PasswordRequiresLower": "Passwrter mssen mindestens einen Kleinbuchstaben ('a'-'z') enthalten.", + "Identity.PasswordRequiresNonAlphanumeric": "Passwrter mssen mindestens ein Sonderzeichen enthalten.", + "Identity.PasswordRequiresUpper": "Passwrter mssen mindestens einen Grobuchstaben ('A'-'Z') enthalten.", + "Identity.PasswordTooShort": "Passwrter mssen mindestens {0} Zeichen enthalten.", + "Identity.RoleNotFound": "Die Rolle {0} existiert nicht.", + "Identity.UserAlreadyHasPassword": "Der Benutzer hat bereits ein Passwort gesetzt.", + "Identity.UserAlreadyInRole": "Benutzer ist bereits in der Rolle '{0}'.", + "Identity.UserLockedOut": "Benutzer ist ausgesperrt.", + "Identity.UserLockoutNotEnabled": "Aussperrung ist fr diesen Benutzer nicht aktiviert.", + "Identity.UserNameNotFound": "Benutzer {0} existiert nicht.", + "Identity.UserNotInRole": "Benutzer ist nicht in der Rolle '{0}'.", + "Identity.PasswordConfirmationFailed": "Passwort stimmt nicht mit dem Besttigungspasswort berein.", + "Identity.StaticRoleRenamingErrorMessage": "Statische Rollen knnen nicht umbenannt werden.", + "Identity.StaticRoleDeletionErrorMessage": "Statische Rollen knnen nicht gelscht werden.", + "Volo.Abp.Identity:010001": "Sie knnen Ihr eigenes Konto nicht lschen!", + "Permission:IdentityManagement": "Identittsverwaltung", + "Permission:RoleManagement": "Rollenverwaltung", + "Permission:Create": "Erstellen", + "Permission:Edit": "Bearbeiten", + "Permission:Delete": "Lschen", + "Permission:ChangePermissions": "Berechtigungen ndern", + "Permission:UserManagement": "Benutzerverwaltung", + "Permission:UserLookup": "Benutzer-Lookup", + "DisplayName:Abp.Identity.Password.RequiredLength": "Erforderliche Lnge", + "DisplayName:Abp.Identity.Password.RequiredUniqueChars": "Erforderliche eindeutige Zeichenanzahl", + "DisplayName:Abp.Identity.Password.RequireNonAlphanumeric": "Erforderliches Sonderzeichen", + "DisplayName:Abp.Identity.Password.RequireLowercase": "Erforderliche Kleinbuchstaben", + "DisplayName:Abp.Identity.Password.RequireUppercase": "Erforderliche Grobuchstaben", + "DisplayName:Abp.Identity.Password.RequireDigit": "Erforderliche Ziffer", + "DisplayName:Abp.Identity.Lockout.AllowedForNewUsers": "Aktiviert fr neue Benutzer", + "DisplayName:Abp.Identity.Lockout.LockoutDuration": "Aussperrdauer (Sekunden)", + "DisplayName:Abp.Identity.Lockout.MaxFailedAccessAttempts": "Max fehlgeschlagene Zugriffsversuche", + "DisplayName:Abp.Identity.SignIn.RequireConfirmedEmail": "Besttigte E-Mail erforderlich", + "DisplayName:Abp.Identity.SignIn.EnablePhoneNumberConfirmation": "Telefonnummer-Besttigung aktivieren", + "DisplayName:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "Besttigte Telefonnummer erforderlich", + "DisplayName:Abp.Identity.User.IsUserNameUpdateEnabled": "Ist die Aktualisierung des Benutzernamens aktiviert?", + "DisplayName:Abp.Identity.User.IsEmailUpdateEnabled": "Ist die E-Mail-Aktualisierung aktiviert?", + "Description:Abp.Identity.Password.RequiredLength": "Die Mindestlnge, die ein Passwort haben muss.", + "Description:Abp.Identity.Password.RequiredUniqueChars": "Die Mindestanzahl eindeutiger Zeichen, die ein Passwort enthalten muss.", + "Description:Abp.Identity.Password.RequireNonAlphanumeric": "Ob Passwrter ein nicht-alphanumerisches Zeichen enthalten mssen.", + "Description:Abp.Identity.Password.RequireLowercase": "Ob Passwrter ein kleingeschriebenes ASCII-Zeichen enthalten mssen.", + "Description:Abp.Identity.Password.RequireUppercase": "Ob Passwrter ein ASCII-Zeichen in Grobuchstaben enthalten mssen.", + "Description:Abp.Identity.Password.RequireDigit": "Ob Passwrter eine Ziffer enthalten mssen.", + "Description:Abp.Identity.Lockout.AllowedForNewUsers": "Ob ein neuer Benutzer ausgesperrt werden kann.", + "Description:Abp.Identity.Lockout.LockoutDuration": "Die Dauer, fr die ein Benutzer ausgesperrt ist, wenn eine Sperre auftritt.", + "Description:Abp.Identity.Lockout.MaxFailedAccessAttempts": "Die Anzahl der fehlgeschlagenen Zugriffsversuche, die erlaubt sind, bevor ein Benutzer gesperrt wird, vorausgesetzt, die Sperre ist aktiviert.", + "Description:Abp.Identity.SignIn.RequireConfirmedEmail": "Whether a confirmed email address is required to sign in.", + "Description:Abp.Identity.SignIn.EnablePhoneNumberConfirmation": "Ob fr die Anmeldung eine besttigte E-Mail-Adresse erforderlich ist.", + "Description:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "Ob fr die Anmeldung eine besttigte Telefonnummer erforderlich ist.", + "Description:Abp.Identity.User.IsUserNameUpdateEnabled": "Ob der Benutzername vom Benutzer aktualisiert werden kann.", + "Description:Abp.Identity.User.IsEmailUpdateEnabled": "Ob die E-Mail durch den Benutzer aktualisiert werden kann." + } +} diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/de.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/de.json new file mode 100644 index 0000000000..c556183e4c --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/de.json @@ -0,0 +1,10 @@ +{ + "culture": "de", + "texts": { + "Permissions": "Berechtigungen", + "OnlyProviderPermissons": "Nur dieser Anbieter", + "All": "Alle", + "SelectAllInAllTabs": "Alle Berechtigungen erteilen", + "SelectAllInThisTab": "Alle auswhlen" + } +} \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/de.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/de.json new file mode 100644 index 0000000000..21808d9acb --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/de.json @@ -0,0 +1,7 @@ +{ + "culture": "de", + "texts": { + "Settings": "Einstellungen", + "SuccessfullySaved": "Erfolgreich gespeichert" + } +} \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/de.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/de.json new file mode 100644 index 0000000000..7b32690527 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/de.json @@ -0,0 +1,22 @@ +{ + "culture": "de", + "texts": { + "Menu:TenantManagement": "Mandantenverwaltung", + "Tenants": "Mandanten", + "NewTenant": "Neuer Mandant", + "TenantName": "Mandantenname", + "DisplayName:TenantName": "Mandantenname", + "TenantDeletionConfirmationMessage": "Der Mandant '{0}' wird gelscht. Sind Sie sicher?", + "ConnectionStrings": "Verbindungszeichenfolgen", + "DisplayName:DefaultConnectionString": "Standard Verbindungszeichenfolge", + "DisplayName:UseSharedDatabase": "Nutze die gemeinsame Datenbank", + "Permission:TenantManagement": "Mandantenverwaltung", + "Permission:Create": "Erstellen", + "Permission:Edit": "Bearbeiten", + "Permission:Delete": "Lschen", + "Permission:ManageConnectionStrings": "Verbindungszeichenfolgen verwalten", + "Permission:ManageFeatures": "Funktionen verwalten", + "DisplayName:AdminEmailAddress": "Admin E-Mail-Adresse", + "DisplayName:AdminPassword": "Admin Kennwort" + } +} \ No newline at end of file From 07c536b6dc4532121208e6de1458362392ff542a Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Tue, 28 Apr 2020 19:44:17 +0200 Subject: [PATCH 16/48] Enhanced wording of german password word --- .../Volo/Abp/Emailing/Localization/de.json | 2 +- .../Abp/Account/Localization/Resources/de.json | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/de.json b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/de.json index b16538387e..8d6ae8c9ff 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/de.json +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/de.json @@ -6,7 +6,7 @@ "DisplayName:Abp.Mailing.Smtp.Host": "Host", "DisplayName:Abp.Mailing.Smtp.Port": "Port", "DisplayName:Abp.Mailing.Smtp.UserName": "Benutzername", - "DisplayName:Abp.Mailing.Smtp.Password": "Kennwort", + "DisplayName:Abp.Mailing.Smtp.Password": "Passwort", "DisplayName:Abp.Mailing.Smtp.Domain": "Domain", "DisplayName:Abp.Mailing.Smtp.EnableSsl": "SSL aktivieren", "DisplayName:Abp.Mailing.Smtp.UseDefaultCredentials": "Standard-Anmeldeinformationen verwenden", diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/de.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/de.json index 7e4a383189..935fff56a6 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/de.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/de.json @@ -4,11 +4,11 @@ "UserName": "Benutzername", "EmailAddress": "E-Mail-Adresse", "UserNameOrEmailAddress": "Benutzername oder E-Mail-Adresse", - "Password": "Kennwort", + "Password": "Passwort", "RememberMe": "Angemeldet bleiben", "UseAnotherServiceToLogin": "Einen anderen Dienst zum Anmelden verwenden", "UserLockedOutMessage": "Das Benutzerkonto wurde aufgrund fehlgeschlagener Anmeldeversuche gesperrt. Bitte warten Sie eine Weile und versuchen Sie es erneut.", - "InvalidUserNameOrPassword": "Ungltiger Benutzername oder Kennwort!", + "InvalidUserNameOrPassword": "Ungltiger Benutzername oder Passwort!", "LoginIsNotAllowed": "Sie drfen sich nicht anmelden! Sie mssen Ihre E-Mail/Telefonnummer besttigen.", "SelfRegistrationDisabledMessage": "Die Selbstregistrierung ist fr diese Anwendung deaktiviert. Bitte wenden Sie sich an den Anwendungsadministrator, um einen neuen Benutzer zu registrieren.", "LocalLoginDisabledMessage": "Die lokale Anmeldung ist fr diese Anwendung deaktiviert.", @@ -20,21 +20,21 @@ "InvalidLoginRequest": "Ungltige Login-Anfrage", "ThereAreNoLoginSchemesConfiguredForThisClient": "Es sind keine Anmeldeschemata fr diesen Client konfiguriert.", "LogInUsingYourProviderAccount": "Melden Sie sich mit Ihrem {0}-Konto an", - "DisplayName:CurrentPassword": "Aktuelles Kennwort", - "DisplayName:NewPassword": "Neues Kennwort", - "DisplayName:NewPasswordConfirm": "Neues Kennwort besttigen", - "PasswordChangedMessage": "Ihr Kennwort wurde erfolgreich gendert.", + "DisplayName:CurrentPassword": "Aktuelles Passwort", + "DisplayName:NewPassword": "Neues Passwort", + "DisplayName:NewPasswordConfirm": "Neues Passwort besttigen", + "PasswordChangedMessage": "Ihr Passwort wurde erfolgreich gendert.", "DisplayName:UserName": "Benutzername", "DisplayName:Email": "E-Mail", "DisplayName:Name": "Name", "DisplayName:Surname": "Nachname", - "DisplayName:Password": "Kennwort", + "DisplayName:Password": "Passwort", "DisplayName:EmailAddress": "E-Mail-Adresse", "DisplayName:PhoneNumber": "Telefonnummer", "PersonalSettings": "Persnliche Einstellungen", "PersonalSettingsSaved": "Persnliche Einstellungen gespeichert", - "PasswordChanged": "Kennwort gendert", - "NewPasswordConfirmFailed": "Bitte besttigen Sie das neue Kennwort.", + "PasswordChanged": "Passwort gendert", + "NewPasswordConfirmFailed": "Bitte besttigen Sie das neue Passwort.", "Manage": "Verwalten", "ManageYourProfile": "Ihr profil verwalten", "DisplayName:Abp.Account.IsSelfRegistrationEnabled": "Ist die Selbstregistrierung aktiviert", From aeca6606f9f3f17b895c12925c5f16b7c84d515d Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Tue, 28 Apr 2020 19:45:05 +0200 Subject: [PATCH 17/48] enhanced wording --- .../Volo/Abp/TenantManagement/Localization/Resources/de.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/de.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/de.json index 7b32690527..e0a7730933 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/de.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/de.json @@ -17,6 +17,6 @@ "Permission:ManageConnectionStrings": "Verbindungszeichenfolgen verwalten", "Permission:ManageFeatures": "Funktionen verwalten", "DisplayName:AdminEmailAddress": "Admin E-Mail-Adresse", - "DisplayName:AdminPassword": "Admin Kennwort" + "DisplayName:AdminPassword": "Admin Password" } } \ No newline at end of file From 3759e2180d91fb1f80a8a0043c54c9f3dfd20df5 Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Tue, 28 Apr 2020 19:51:21 +0200 Subject: [PATCH 18/48] german localization for identityserver --- .../IdentityServer/Localization/Resources/de.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/de.json diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/de.json b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/de.json new file mode 100644 index 0000000000..14bda65e83 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/de.json @@ -0,0 +1,12 @@ +{ + "culture": "de", + "texts": { + "Volo.IdentityServer:DuplicateIdentityResourceName": "Identität Ressourcenname existiert bereits: {Name}", + "Volo.IdentityServer:DuplicateApiResourceName": "Api Ressourcenname existiert bereits: {Name}", + "Volo.IdentityServer:DuplicateClientId": "ClientId bereits vorhanden: {ClientId}", + "UserLockedOut": "Das Benutzerkonto wurde aufgrund ungültiger Anmeldeversuche ausgesperrt. Bitte warten Sie eine Weile und versuchen Sie es erneut.", + "InvalidUserNameOrPassword": "Ungültiger Benutzername oder Passwort!", + "LoginIsNotAllowed": "Sie dürfen sich nicht anmelden! Sie müssen Ihre E-Mail/Telefonnummer bestätigen.", + "InvalidUsername": "Ungültiger Benutzername oder Passwort!" + } +} \ No newline at end of file From 660a83c0325152b86e564ea5ff1f411f6847632e Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Tue, 28 Apr 2020 20:13:08 +0200 Subject: [PATCH 19/48] dutch localization for framework projects --- .../Mvc/UI/MultiTenancy/Localization/nl.json | 12 ++++ .../Localization/Resources/AbpDdd/nl.json | 6 ++ .../Volo/Abp/Emailing/Localization/nl.json | 23 +++++++ .../Resources/AbpLocalization/nl.json | 7 +++ .../Navigation/Localization/Resource/nl.json | 6 ++ .../Localization/Resources/AbpUi/nl.json | 63 +++++++++++++++++++ .../Volo/Abp/Validation/Localization/nl.json | 34 ++++++++++ .../Mvc/Localization/Resource/nl.json | 7 +++ .../Volo/Abp/Emailing/Localization/nl.json | 6 ++ .../TestResources/Base/CountryNames/nl.json | 7 +++ .../TestResources/Base/Validation/nl.json | 7 +++ .../Localization/TestResources/Source/nl.json | 11 ++++ .../TestResources/SourceExt/nl.json | 6 ++ 13 files changed, 195 insertions(+) create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/nl.json create mode 100644 framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/nl.json create mode 100644 framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/nl.json create mode 100644 framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/nl.json create mode 100644 framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/nl.json create mode 100644 framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/nl.json create mode 100644 framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/nl.json create mode 100644 framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/nl.json create mode 100644 framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/nl.json create mode 100644 framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/nl.json create mode 100644 framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/nl.json create mode 100644 framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/nl.json create mode 100644 framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/nl.json diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/nl.json b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/nl.json new file mode 100644 index 0000000000..5a3feb3969 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/nl.json @@ -0,0 +1,12 @@ +{ + "culture": "nl", + "texts": { + "GivenTenantIsNotAvailable": "Gegeven klant is niet beschikbaar: {0}", + "Tenant": "Klant", + "Switch": "Schakel over", + "Name": "Name", + "SwitchTenantHint": "Laat het naamveld leeg om over te schakelen naar de hostkant.", + "SwitchTenant": "Klant wisselen", + "NotSelected": "Niet geselecteerd" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/nl.json b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/nl.json new file mode 100644 index 0000000000..cc4412cffc --- /dev/null +++ b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/nl.json @@ -0,0 +1,6 @@ +{ + "culture": "nl", + "texts": { + "MaxResultCountExceededExceptionMessage": "{0} kan niet meer dan {1} zijn! Vergroot {2}.{3} op de server om een groter resultaat toe te staan." + } +} diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/nl.json b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/nl.json new file mode 100644 index 0000000000..efd7f49421 --- /dev/null +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/nl.json @@ -0,0 +1,23 @@ +{ + "culture": "nl", + "texts": { + "DisplayName:Abp.Mailing.DefaultFromAddress": "Standard vanaf adres", + "DisplayName:Abp.Mailing.DefaultFromDisplayName": "Standaard vanaf weergave naam", + "DisplayName:Abp.Mailing.Smtp.Host": "Host", + "DisplayName:Abp.Mailing.Smtp.Port": "Poort", + "DisplayName:Abp.Mailing.Smtp.UserName": "Gebruiker naam", + "DisplayName:Abp.Mailing.Smtp.Password": "wachtwoord", + "DisplayName:Abp.Mailing.Smtp.Domain": "Domein", + "DisplayName:Abp.Mailing.Smtp.EnableSsl": "SSL toestaan", + "DisplayName:Abp.Mailing.Smtp.UseDefaultCredentials": "Gebruik standaardreferenties", + "Description:Abp.Mailing.DefaultFromAddress": "Standard vanaf adres", + "Description:Abp.Mailing.DefaultFromDisplayName": "Standaard vanaf weergave naam", + "Description:Abp.Mailing.Smtp.Host": "De naam of het IP-adres van de host die wordt gebruikt voor SMTP-transacties.", + "Description:Abp.Mailing.Smtp.Port": "De poort die wordt gebruikt voor SMTP-transacties.", + "Description:Abp.Mailing.Smtp.UserName": "User name associated with the credentials.", + "Description:Abp.Mailing.Smtp.Password": "Gebruikersnaam gekoppeld aan de referenties.", + "Description:Abp.Mailing.Smtp.Domain": "Het domein of de computernaam die de referenties verifieert.", + "Description:Abp.Mailing.Smtp.EnableSsl": "Of de SmtpClient Secure Sockets Layer (SSL) gebruikt om de verbinding te versleutelen.", + "Description:Abp.Mailing.Smtp.UseDefaultCredentials": "Of de standaardreferenties worden verzonden met verzoeken." + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/nl.json b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/nl.json new file mode 100644 index 0000000000..dd11c28ea0 --- /dev/null +++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/nl.json @@ -0,0 +1,7 @@ +{ + "culture": "nl", + "texts": { + "DisplayName:Abp.Localization.DefaultLanguage": "Standaard taal", + "Description:Abp.Localization.DefaultLanguage": "De standaardtaal van de applicatie." + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/nl.json b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/nl.json new file mode 100644 index 0000000000..279f79e1dc --- /dev/null +++ b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/nl.json @@ -0,0 +1,6 @@ +{ + "culture": "nl", + "texts": { + "Menu:Administration": "Administratie" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/nl.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/nl.json new file mode 100644 index 0000000000..b44ea3794b --- /dev/null +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/nl.json @@ -0,0 +1,63 @@ +{ + "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", + "No": "Nee", + "Ok": "Ok", + "Close": "Sluiten", + "Save": "Opslaan", + "SavingWithThreeDot": "Opslaan...", + "Actions": "Acties", + "Delete": "Verwijder", + "Edit": "Bewerk", + "Refresh": "Ververs", + "Language": "Taal", + "LoadMore": "Meer laden", + "ProcessingWithThreeDot": "Verwerken...", + "LoadingWithThreeDot": "Laden...", + "Welcome": "Welkom", + "Login": "Log in", + "Register": "Registreren", + "Logout": "Afmelden", + "Submit": "Verzenden", + "Back": "Terug", + "PagerSearch": "Zoeken", + "PagerNext": "Volgende", + "PagerPrevious": "Vorige", + "PagerFirst": "Eerste", + "PagerLast": "Laatste", + "PagerInfo": "Toont _START_ tot _END_ van _TOTAL_ vermeldingen", + "PagerInfo{0}{1}{2}": "{0} tot {1} van {2} vermeldingen weergeven", + "PagerInfoEmpty": "Toont 0 tot 0 van 0 vermeldingen", + "PagerInfoFiltered": "(gefilterd uit in totaal _MAX_ vermeldingen)", + "NoDataAvailableInDatatable": "Geen gegevens beschikbaar", + "PagerShowMenuEntries": "Toon _MENU_-vermeldingen", + "DatatableActionDropdownDefaultText": "Acties", + "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" + } +} diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/nl.json b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/nl.json new file mode 100644 index 0000000000..ff0edfa54d --- /dev/null +++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/nl.json @@ -0,0 +1,34 @@ +{ + "culture": "nl", + "texts": { + "'{0}' and '{1}' do not match.": "'{0}' en '{1}' komen niet overeen.", + "The {0} field is not a valid credit card number.": "Het veld {0} is geen geldig krediet kaartnummer.", + "{0} is not valid.": "{0} is niet geldig.", + "The {0} field is not a valid e-mail address.": "Het veld {0} is geen geldig e-mailadres.", + "The {0} field only accepts files with the following extensions: {1}": "Het veld {0} accepteert alleen bestanden met de volgende extensies: {1}", + "The field {0} must be a string or array type with a maximum length of '{1}'.": "Het veld {0} moet een tekenreeks- of arraytype zijn met een maximale lengte van '{1}'.", + "The field {0} must be a string or array type with a minimum length of '{1}'.": "Het veld {0} moet een tekenreeks- of arraytype zijn met een minimale lengte van '{1}'.", + "The {0} field is not a valid phone number.": "Het veld {0} is geen geldig telefoonnummer.", + "The field {0} must be between {1} and {2}.": "Het veld {0} moet tussen {1} en {2} liggen.", + "The field {0} must match the regular expression '{1}'.": "Het veld {0} moet overeenkomen met de reguliere expressie '{1}'.", + "The {0} field is required.": "Het veld {0} is verplicht.", + "The field {0} must be a string with a maximum length of {1}.": "Het veld {0} moet een tekenreeks zijn met een maximale lengte van {1}.", + "The field {0} must be a string with a minimum length of {2} and a maximum length of {1}.": "Het veld {0} moet een tekenreeks zijn met een minimale lengte van {2} en een maximale lengte van {1}.", + "The {0} field is not a valid fully-qualified http, https, or ftp URL.": "Het veld {0} is geen geldige, volledig gekwalificeerde http-, https- of ftp-URL.", + "The field {0} is invalid.": "Het veld {0} is ongeldig.", + "ThisFieldIsNotAValidCreditCardNumber.": "Dit veld is geen geldig krediet kaartnummer.", + "ThisFieldIsNotValid.": "Dir veld is ongeldig.", + "ThisFieldIsNotAValidEmailAddress.": "Dit veld is geen geldig e-mail adres.", + "ThisFieldOnlyAcceptsFilesWithTheFollowingExtensions:{0}": "Dit veld accepteert alleen bestanden met de volgende extensies: {0}", + "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthOf{0}": "Dit veld moet een tekenreeks- of arraytype zijn met een maximale lengte van '{0}'.", + "ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}": "Dit veld moet een tekenreeks- of arraytype zijn met een minimale lengte van '{0}'.", + "ThisFieldIsNotAValidPhoneNumber.": "Dit veld is geen geldig telefoonnummer.", + "ThisFieldMustBeBetween{0}And{1}": "Dit veld moet tussen {0} en {1} liggen.", + "ThisFieldMustMatchTheRegularExpression{0}": "Dit veld moet overeenkomen met de reguliere expressie '{0}'.", + "ThisFieldIsRequired.": "Dit veld is verplicht.", + "ThisFieldMustBeAStringWithAMaximumLengthOf{0}": "Dit veld moet een tekenreeks zijn met een maximale lengte van {0}.", + "ThisFieldMustBeAStringWithAMinimumLengthOf{1}AndAMaximumLengthOf{0}": "Dit veld moet een tekenreeks zijn met een minimale lengte van {1} en een maximale lengte van {0}.", + "ThisFieldIsNotAValidFullyQualifiedHttpHttpsOrFtpUrl": "Dit veld is geen geldige, volledig gekwalificeerde http-, https- of ftp-URL.", + "ThisFieldIsInvalid.": "Dit veld is ongeldig." + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/nl.json b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/nl.json new file mode 100644 index 0000000000..526e7203a7 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/nl.json @@ -0,0 +1,7 @@ +{ + "culture": "nl", + "texts": { + "BirthDate": "Geboortedatum", + "Value1": "Waarde een" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/nl.json b/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/nl.json new file mode 100644 index 0000000000..2a19df7473 --- /dev/null +++ b/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/nl.json @@ -0,0 +1,6 @@ +{ + "culture": "nl", + "texts": { + "hello": "hallo" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/nl.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/nl.json new file mode 100644 index 0000000000..849d1b0df6 --- /dev/null +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/nl.json @@ -0,0 +1,7 @@ +{ + "culture": "nl", + "texts": { + "USA": "Verenigde Staten van Amerika", + "Brazil": "Brazilië" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/nl.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/nl.json new file mode 100644 index 0000000000..5875cf7a12 --- /dev/null +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/nl.json @@ -0,0 +1,7 @@ +{ + "culture": "nl", + "texts": { + "ThisFieldIsRequired": "Dit veld is verplicht", + "MaxLenghtErrorMessage": "Dit veld mag maximaal '{0}' tekens bevatten" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/nl.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/nl.json new file mode 100644 index 0000000000..0e0ba67ef6 --- /dev/null +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/nl.json @@ -0,0 +1,11 @@ +{ + "culture": "nl", + "texts": { + "Hello {0}.": "Hallo {0}.", + "Car": "Auto", + "CarPlural": "Auto's", + "MaxLenghtErrorMessage": "De lengte van dit veld mag maximaal '{0}' tekens zijn", + "Universe": "Universum", + "FortyTwo": "Tweeënveertig" + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/nl.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/nl.json new file mode 100644 index 0000000000..7e7354d11b --- /dev/null +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/nl.json @@ -0,0 +1,6 @@ +{ + "culture": "nl", + "texts": { + "SeeYou": "Tot ziens" + } +} \ No newline at end of file From 263b9bf7f07520f72c01c34e928ea6753d83b903 Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Tue, 28 Apr 2020 20:15:13 +0200 Subject: [PATCH 20/48] replaced tabs with whitespaces --- .../Mvc/UI/MultiTenancy/Localization/nl.json | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/nl.json b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/nl.json index 5a3feb3969..2e3971055e 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/nl.json +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/nl.json @@ -1,12 +1,12 @@ { - "culture": "nl", - "texts": { - "GivenTenantIsNotAvailable": "Gegeven klant is niet beschikbaar: {0}", - "Tenant": "Klant", - "Switch": "Schakel over", - "Name": "Name", - "SwitchTenantHint": "Laat het naamveld leeg om over te schakelen naar de hostkant.", - "SwitchTenant": "Klant wisselen", - "NotSelected": "Niet geselecteerd" - } + "culture": "nl", + "texts": { + "GivenTenantIsNotAvailable": "Gegeven klant is niet beschikbaar: {0}", + "Tenant": "Klant", + "Switch": "Schakel over", + "Name": "Name", + "SwitchTenantHint": "Laat het naamveld leeg om over te schakelen naar de hostkant.", + "SwitchTenant": "Klant wisselen", + "NotSelected": "Niet geselecteerd" + } } \ No newline at end of file From 43b92f524e3cbcef3f8c003b42ea4a88cceefb61 Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Tue, 28 Apr 2020 20:21:06 +0200 Subject: [PATCH 21/48] dutch localization for modules --- .../Account/Localization/Resources/nl.json | 45 ++++++++ .../Blogging/ApplicationContracts/nl.json | 14 +++ .../Blogging/Localization/Resources/nl.json | 49 +++++++++ .../Resources/VoloDocs/Web/nl.json | 10 ++ .../Docs/ApplicationContracts/nl.json | 37 +++++++ .../Volo/Docs/Localization/Domain/nl.json | 31 ++++++ .../Localization/Domain/nl.json | 7 ++ .../Volo/Abp/Identity/Localization/nl.json | 104 ++++++++++++++++++ .../Localization/Resources/nl.json | 12 ++ .../Localization/Domain/nl.json | 10 ++ .../Resources/AbpSettingManagement/nl.json | 7 ++ .../Localization/Resources/nl.json | 22 ++++ 12 files changed, 348 insertions(+) create mode 100644 modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/nl.json create mode 100644 modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/nl.json create mode 100644 modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/nl.json create mode 100644 modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/nl.json create mode 100644 modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/nl.json create mode 100644 modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/nl.json create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/nl.json create mode 100644 modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/nl.json create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/nl.json create mode 100644 modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/nl.json create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/nl.json create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/nl.json diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/nl.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/nl.json new file mode 100644 index 0000000000..64a1a70124 --- /dev/null +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/nl.json @@ -0,0 +1,45 @@ +{ + "culture": "nl", + "texts": { + "UserName": "Gebruikersnaam", + "EmailAddress": "E-mailadres", + "UserNameOrEmailAddress": "Gebruikersnaam of e-mail adres", + "Password": "Wachtwoord", + "RememberMe": "Herinner me", + "UseAnotherServiceToLogin": "Gebruik een andere dienst om in te loggen", + "UserLockedOutMessage": "Het gebruikersaccount is geblokkeerd vanwege ongeldige inlogpogingen. Wacht even en probeer het opnieuw.", + "InvalidUserNameOrPassword": "Ongeldige gebruikersnaam of wachtwoord!", + "LoginIsNotAllowed": "U mag niet inloggen! U moet uw e-mailadres / telefoonnummer bevestigen.", + "SelfRegistrationDisabledMessage": "Zelfregistratie is uitgeschakeld voor deze applicatie. Neem contact op met de applicatiebeheerder om een nieuwe gebruiker te registreren.", + "LocalLoginDisabledMessage": "Lokale aanmelding is uitgeschakeld voor deze applicatie.", + "Login": "Log in", + "Cancel": "Annuleer", + "Register": "Registreer", + "AreYouANewUser": "Bent u een nieuwe gebruiker?", + "AlreadyRegistered": "Al geregistreerd?", + "InvalidLoginRequest": "Ongeldig inlogverzoek", + "ThereAreNoLoginSchemesConfiguredForThisClient": "Er zijn geen aanmeldingsschema's geconfigureerd voor deze client.", + "LogInUsingYourProviderAccount": "Log in met uw {0} -account", + "DisplayName:CurrentPassword": "Huidig wachtwoord", + "DisplayName:NewPassword": "Nieuw wachtwoord", + "DisplayName:NewPasswordConfirm": "Bevestig nieuw wachtwoord", + "PasswordChangedMessage": "Uw wachtwoord is met succes veranderd.", + "DisplayName:UserName": "Gebruikersnaam", + "DisplayName:Email": "E-mail", + "DisplayName:Name": "Naam", + "DisplayName:Surname": "Achternaam", + "DisplayName:Password": "Wachtwoord", + "DisplayName:EmailAddress": "E-mail adres", + "DisplayName:PhoneNumber": "Telefoonnummer", + "PersonalSettings": "Persoonlijke instellingen", + "PersonalSettingsSaved": "Persoonlijke instellingen opgeslagen", + "PasswordChanged": "wachtwoord veranderd", + "NewPasswordConfirmFailed": "Bevestig het nieuwe wachtwoord a.u.b..", + "Manage": "Beheer", + "ManageYourProfile": "Beheer uw profiel", + "DisplayName:Abp.Account.IsSelfRegistrationEnabled": "Is zelfregistratie ingeschakeld", + "Description:Abp.Account.IsSelfRegistrationEnabled": "Of een gebruiker het account zelf kan registreren.", + "DisplayName:Abp.Account.EnableLocalLogin": "Verifieer met een lokaal account", + "Description:Abp.Account.EnableLocalLogin": "Geeft aan of de server gebruikers toestaat zich te verifiëren met een lokaal account." + } +} diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/nl.json b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/nl.json new file mode 100644 index 0000000000..7e34f16b79 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Localization/Resources/Blogging/ApplicationContracts/nl.json @@ -0,0 +1,14 @@ +{ + "culture": "nl", + "texts": { + "Permission:Blogging": "Blog", + "Permission:Blogs": "Blogs", + "Permission:Posts": "Posts", + "Permission:Tags": "Tags", + "Permission:Comments": "Kommentaar", + "Permission:Management": "Beheer", + "Permission:Edit": "Bewerk", + "Permission:Create": "Maak aan", + "Permission:Delete": "Verwijder" + } +} \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/nl.json b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/nl.json new file mode 100644 index 0000000000..6548e4c0a8 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/nl.json @@ -0,0 +1,49 @@ +{ + "culture": "nl", + "texts": { + "Menu:Blogs": "Blogs", + "Menu:BlogManagement": "Blog Beheer", + "Title": "Titel", + "Delete": "Verwijder", + "Reply": "Antwoord", + "ReplyTo": "Antwoord aan {0}", + "ContinueReading": "Lees verder", + "DaysAgo": "{0} dagen geleden", + "YearsAgo": "{0} jaar geleden", + "MonthsAgo": "{0} maanden geleden", + "WeeksAgo": "{0} weken geleden", + "MinutesAgo": "{0} minuten geleden", + "SecondsAgo": "{0} seconden geleden", + "HoursAgo": "{0} uur geleden", + "Now": "nu", + "Content": "Inhoud", + "SeeAll": "Alles zien", + "PopularTags": "Populaire tags", + "WiewsWithCount": "{0} keer bekeken", + "LastPosts": "Laatste berichten", + "LeaveComment": "Laat commentaar achter", + "TagsInThisArticle": "Tags in dit artikel", + "Posts": "Berichten", + "Edit": "Bewerk", + "BLOG": "BLOG", + "CommentDeletionWarningMessage": "Reactie wordt verwijderd.", + "PostDeletionWarningMessage": "Berich wordt verwijderd.", + "BlogDeletionWarningMessage": "Blog wordt verwijderd.", + "AreYouSure": "Weet u het zeker?", + "CommentWithCount": "{0} reacties", + "Comment": "Reactie", + "ShareOnTwitter": "Delen op Twitter", + "CoverImage": "Omslagfoto", + "CreateANewPost": "Maak een nieuw bericht", + "CreateANewBlog": "Maak een nieuwe Blog", + "WhatIsNew": "Wat is nieuw?", + "Name": "Naam", + "ShortName": "Korte naam", + "CreationTime": "Creatie tijd", + "Description": "Beschrijving", + "Blogs": "Blogs", + "Tags": "Tags", + "ShareOn": "Delen op", + "TitleLengthWarning": "Houd uw titel kleiner dan 60 tekens om SEO-vriendelijk te zijn!" + } +} \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/nl.json b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/nl.json new file mode 100644 index 0000000000..b787dd4474 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/nl.json @@ -0,0 +1,10 @@ +{ + "culture": "nl", + "texts": { + "DocsTitle": "VoloDocs", + "WelcomeVoloDocs": "Welkom bij de VoloDocs!", + "NoProjectWarning": "Er is nog geen gedefinieerd project!", + "CreateYourFirstProject": "Klik hier om uw eerste project te starten", + "NoProject": "Geen project!" + } +} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/nl.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/nl.json new file mode 100644 index 0000000000..1be125e486 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/nl.json @@ -0,0 +1,37 @@ +{ + "culture": "nl", + "texts": { + "Permission:DocumentManagement": "Document beheer", + "Permission:Projects": "Projecten", + "Permission:Edit": "Bewerk", + "Permission:Delete": "Verwijder", + "Permission:Create": "Maak aan", + "Permission:Documents": "Documenten", + "Menu:DocumentManagement": "Documenten", + "Menu:ProjectManagement": "Projecten", + "CreateANewProject": "Maak een nieuw project", + "Edit": "Bewerk", + "Create": "Maak aan", + "Pull": "Pull", + "Projects": "Projecten", + "Name": "Naam", + "ShortName": "Korte naam", + "DocumentStoreType": "DocumentStoreType", + "Format": "Formaat", + "ShortNameInfoText": "Wordt gebruikt voor unieke URL.", + "DisplayName:Name": "Naam", + "DisplayName:ShortName": "Korte naam", + "DisplayName:Format": "Formaat", + "DisplayName:DefaultDocumentName": "Standaard documentnaam", + "DisplayName:NavigationDocumentName": "Navigatiedocumentnaam", + "DisplayName:MinimumVersion": "Minimale versie", + "DisplayName:MainWebsiteUrl": "URL van hoofdwebsite", + "DisplayName:LatestVersionBranchName": "Laatste versie vertakkingsnaam", + "DisplayName:GitHubRootUrl": "GitHub root URL", + "DisplayName:GitHubAccessToken": "GitHub-toegangstoken", + "DisplayName:GitHubUserAgent": "GitHub-gebruikersagent", + "DisplayName:All": "Pull all", + "DisplayName:LanguageCode": "Taalcode", + "DisplayName:Version": "Versie" + } +} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/nl.json b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/nl.json new file mode 100644 index 0000000000..56e6800f9f --- /dev/null +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/nl.json @@ -0,0 +1,31 @@ +{ + "culture": "nl", + "texts": { + "Documents": "Documenten", + "BackToWebsite": "Terug naar website", + "Contributors": "Bijdragers", + "ShareOn": "Delen op", + "Version": "Versie", + "Edit": "Bewerk", + "LastEditTime": "Laatste bewerking", + "Delete": "Verwijder", + "ClearCache": "Cache wissen", + "ClearCacheConfirmationMessage": "Weet u zeker dat u alle caches voor het project \"{0}\" wilt wissen?", + "InThisDocument": "In dit document", + "GoToTop": "Ga naar boven", + "Projects": "Project (en)", + "NoProjectWarning": "Er zijn nog geen projecten!", + "DocumentNotFound": "Oeps, het opgevraagde document is niet gevonden!", + "NavigationDocumentNotFound": "Deze versie heeft geen navigatiedocument!", + "DocumentNotFoundInSelectedLanguage": "Document in de gewenste taal is niet gevonden. Document in de standaardtaal wordt weergegeven.", + "FilterTopics": "Filter onderwerpen", + "FullSearch": "Zoek in documenten", + "Volo.Docs.Domain:010001": "Elastisch zoeken is niet ingeschakeld.", + "MultipleVersionDocumentInfo": "Dit document heeft meerdere versies. Selecteer de opties die het beste bij u passen.", + "New": "Nieuw", + "Upd": "Bew", + "NewExplanation": "Gemaakt in de afgelopen twee weken.", + "UpdatedExplanation": "Bewerkt in de afgelopen twee weken.", + "Volo.Docs.Domain:010002": "KorteNaam {ShortName} bestaat al." + } +} diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/nl.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/nl.json new file mode 100644 index 0000000000..8bb07d32d4 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/nl.json @@ -0,0 +1,7 @@ +{ + "culture": "nl", + "texts": { + "Features": "Functies", + "NoFeatureFoundMessage": "Er is geen functie beschikbaar." + } +} \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/nl.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/nl.json new file mode 100644 index 0000000000..84ed47efce --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/nl.json @@ -0,0 +1,104 @@ +{ + "culture": "nl", + "texts": { + "Menu:IdentityManagement": "Identiteitsbeheer", + "Users": "Gebruikers", + "NewUser": "Nieuwe Gebruiker", + "UserName": "Gebruikersnaam", + "EmailAddress": "E-mail adres", + "PhoneNumber": "Telefoonnummer", + "UserInformations": "Gebruikers informatie", + "DisplayName:IsDefault": "Standaard", + "DisplayName:IsStatic": "Statisch", + "DisplayName:IsPublic": "Openbaar", + "Roles": "Roles", + "Password": "Wachtwoord", + "PersonalInfo": "Mijn profiel", + "PersonalSettings": "Persoonlijke instellingen", + "UserDeletionConfirmationMessage": "Gebruiker '{0}' wordt verwijderd. Bevestigt U dat?", + "RoleDeletionConfirmationMessage": "Rol '{0}' wordt verwijderd. Bevestigt U dat?", + "DisplayName:RoleName": "Rol naam", + "DisplayName:UserName": "Gebruikersnaam", + "DisplayName:Name": "Naam", + "DisplayName:Surname": "Achternaam", + "DisplayName:Password": "Wachtwoord", + "DisplayName:Email": "E-mail adres", + "DisplayName:PhoneNumber": "Telefoonnummer", + "DisplayName:TwoFactorEnabled": "Twee-factor-verificatie", + "DisplayName:LockoutEnabled": "Account vergrendelen na mislukte inlogpogingen", + "NewRole": "Nieuwe rol", + "RoleName": "Rol naam", + "CreationTime": "Creatie tijd", + "Permissions": "Rechten", + "DisplayName:CurrentPassword": "Huidig wachtwoord", + "DisplayName:NewPassword": "Nieuw wachtwoord", + "DisplayName:NewPasswordConfirm": "Bevestig nieuw wachtwoord", + "PasswordChangedMessage": "Uw wachtwoord is met succes veranderd.", + "PersonalSettingsSavedMessage": "Uw persoonlijke instellingen zijn succesvol opgeslagen.", + "Identity.DefaultError": "Er is een onbekende fout opgetreden.", + "Identity.ConcurrencyFailure": "Optimistische gelijktijdigheidsfout, object is gewijzigd.", + "Identity.DuplicateEmail": "E-mail '{0}' is al in gebruik.", + "Identity.DuplicateRoleName": "De rolnaam '{0}' is al in gebruik.", + "Identity.DuplicateUserName": "Gebruikersnaam '{0}' is al in gebruik.", + "Identity.InvalidEmail": "E-mail' {0} 'is ongeldig.", + "Identity.InvalidPasswordHasherCompatibilityMode": "De opgegeven PasswordHasherCompatibilityMode is ongeldig.", + "Identity.InvalidPasswordHasherIterationCount": "De iteratietelling moet een positief geheel getal zijn.", + "Identity.InvalidRoleName": "Rolnaam '{0}' is ongeldig.", + "Identity.InvalidToken": "Ongeldig token.", + "Identity.InvalidUserName": "Gebruikersnaam '{0}' is ongeldig, mag alleen letters of cijfers bevatten.", + "Identity.LoginAlreadyAssociated": "Er bestaat al een gebruiker met deze login.", + "Identity.PasswordMismatch": "Incorrect wachtwoord.", + "Identity.PasswordRequiresDigit": "Wachtwoorden moeten minimaal één cijfer bevatten ('0' - '9').", + "Identity.PasswordRequiresLower": "Wachtwoorden moeten minstens één kleine letter bevatten ('a' - 'z').", + "Identity.PasswordRequiresNonAlphanumeric": "Wachtwoorden moeten minimaal één niet-alfanumeriek teken bevatten.", + "Identity.PasswordRequiresUpper": "Wachtwoorden moeten ten minste één hoofdletter bevatten ('A' - 'Z').", + "Identity.PasswordTooShort": "Wachtwoorden moeten uit minimaal {0} tekens bestaan.", + "Identity.RoleNotFound": "Rol {0} bestaat niet.", + "Identity.UserAlreadyHasPassword": "Gebruiker heeft al een wachtwoord ingesteld.", + "Identity.UserAlreadyInRole": "Gebruiker al in rol '{0}'.", + "Identity.UserLockedOut": "Gebruiker is geblokkeerd.", + "Identity.UserLockoutNotEnabled": "Lockout is niet ingeschakeld voor deze gebruiker.", + "Identity.UserNameNotFound": "Gebruiker {0} bestaat niet.", + "Identity.UserNotInRole": "Gebruiker speelt geen rol '{0}'.", + "Identity.PasswordConfirmationFailed": "Wachtwoord komt niet overeen met de wachtwoord bevestiging.", + "Identity.StaticRoleRenamingErrorMessage": "Statische rollen kunnen niet worden hernoemd.", + "Identity.StaticRoleDeletionErrorMessage": "Statische rollen kunnen niet worden verwijderd.", + "Volo.Abp.Identity:010001": "U kunt uw eigen account niet verwijderen!", + "Permission:IdentityManagement": "Identiteitsbeheer", + "Permission:RoleManagement": "Rolbeheer", + "Permission:Create": "Maak aan", + "Permission:Edit": "Verander", + "Permission:Delete": "Verwijder", + "Permission:ChangePermissions": "Wijzig de rechten", + "Permission:UserManagement": "Gebruikersbeheer", + "Permission:UserLookup": "Gebruiker opzoeken", + "DisplayName:Abp.Identity.Password.RequiredLength": "Vereiste lengte", + "DisplayName:Abp.Identity.Password.RequiredUniqueChars": "Vereist aantal unieke tekens", + "DisplayName:Abp.Identity.Password.RequireNonAlphanumeric": "Vereist niet-alfanumeriek teken", + "DisplayName:Abp.Identity.Password.RequireLowercase": "Vereist kleine letter", + "DisplayName:Abp.Identity.Password.RequireUppercase": "Vereist hoofdletter", + "DisplayName:Abp.Identity.Password.RequireDigit": "Vereist cijfer", + "DisplayName:Abp.Identity.Lockout.AllowedForNewUsers": "Ingeschakeld voor nieuwe gebruikers", + "DisplayName:Abp.Identity.Lockout.LockoutDuration": "Blokkeringsduur (seconden)", + "DisplayName:Abp.Identity.Lockout.MaxFailedAccessAttempts": "Max mislukte toegangspogingen", + "DisplayName:Abp.Identity.SignIn.RequireConfirmedEmail": "Vereist bevestigde e-mail", + "DisplayName:Abp.Identity.SignIn.EnablePhoneNumberConfirmation": "Schakel telefoonnummerbevestiging in", + "DisplayName:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "Vereist bevestigd telefoonnummer", + "DisplayName:Abp.Identity.User.IsUserNameUpdateEnabled": "Is gebruikersnaam aktualisering ingeschakeld", + "DisplayName:Abp.Identity.User.IsEmailUpdateEnabled": "Is e-mail aktualisering ingeschakeld", + "Description:Abp.Identity.Password.RequiredLength": "De minimale lengte die een wachtwoord moet hebben.", + "Description:Abp.Identity.Password.RequiredUniqueChars": "Het minimumaantal unieke tekens dat een wachtwoord moet bevatten.", + "Description:Abp.Identity.Password.RequireNonAlphanumeric": "Als wachtwoorden een niet-alfanumeriek teken moeten bevatten.", + "Description:Abp.Identity.Password.RequireLowercase": "Als wachtwoorden een ASCII-teken in kleine letters moeten bevatten.", + "Description:Abp.Identity.Password.RequireUppercase": "Als wachtwoorden een ASCII-teken in hoofdletters moeten bevatten.", + "Description:Abp.Identity.Password.RequireDigit": "Als wachtwoorden een cijfer moeten bevatten.", + "Description:Abp.Identity.Lockout.AllowedForNewUsers": "Of een nieuwe gebruiker kan worden geblokkeerd.", + "Description:Abp.Identity.Lockout.LockoutDuration": "De duur dat een gebruiker wordt geblokkeerd wanneer een blokkering optreedt.", + "Description:Abp.Identity.Lockout.MaxFailedAccessAttempts": "Het aantal mislukte toegangspogingen dat is toegestaan voordat een gebruiker wordt geblokkeerd, ervan uitgaande dat blokkering is ingeschakeld.", + "Description:Abp.Identity.SignIn.RequireConfirmedEmail": "Of een bevestigd e-mail adres vereist is om in te loggen.", + "Description:Abp.Identity.SignIn.EnablePhoneNumberConfirmation": "Of het telefoonnummer kan worden bevestigd door de gebruiker.", + "Description:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "Of een bevestigd telefoonnummer vereist is om in te loggen.", + "Description:Abp.Identity.User.IsUserNameUpdateEnabled": "Of de gebruikersnaam kan worden bijgewerkt door de gebruiker.", + "Description:Abp.Identity.User.IsEmailUpdateEnabled": "Of de e-mail door de gebruiker kan worden veranderd." + } +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/nl.json b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/nl.json new file mode 100644 index 0000000000..01cccfc567 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/nl.json @@ -0,0 +1,12 @@ +{ + "culture": "nl", + "texts": { + "Volo.IdentityServer:DuplicateIdentityResourceName": "Identiteitsbronnaam bestaat al: {Name}", + "Volo.IdentityServer:DuplicateApiResourceName": "API-bronnaam bestaat al: {Name}", + "Volo.IdentityServer:DuplicateClientId": "ClientId bestaat al: {ClientId}", + "UserLockedOut": "Het gebruikersaccount is geblokkeerd vanwege ongeldige inlogpogingen. Wacht even en probeer het opnieuw.", + "InvalidUserNameOrPassword": "ongeldige gebruikersnaam of wachtwoord!", + "LoginIsNotAllowed": "U mag niet inloggen! U moet uw e-mailadres / telefoonnummer bevestigen.", + "InvalidUsername": "Ongeldige gebruikersnaam of wachtwoord!" + } +} \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/nl.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/nl.json new file mode 100644 index 0000000000..13291c5798 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/nl.json @@ -0,0 +1,10 @@ +{ + "culture": "nl", + "texts": { + "Permissions": "Rechten", + "OnlyProviderPermissons": "Alleen deze provider", + "All": "Alle", + "SelectAllInAllTabs": "Verleen alle rechten", + "SelectAllInThisTab": "Selecteer alles" + } +} \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/nl.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/nl.json new file mode 100644 index 0000000000..2fecb32ec6 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/nl.json @@ -0,0 +1,7 @@ +{ + "culture": "nl", + "texts": { + "Settings": "Instellingen", + "SuccessfullySaved": "Succesvol opgeslagen" + } +} \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/nl.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/nl.json new file mode 100644 index 0000000000..c187ad3976 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/nl.json @@ -0,0 +1,22 @@ +{ + "culture": "nl", + "texts": { + "Menu:TenantManagement": "Klanten beheer", + "Tenants": "Klanten", + "NewTenant": "Nieuwe klant", + "TenantName": "Naam klant", + "DisplayName:TenantName": "Naam klant", + "TenantDeletionConfirmationMessage": "Klant '{0}' wordt verwijderd. Bevestigt u dat?", + "ConnectionStrings": "Connection Strings", + "DisplayName:DefaultConnectionString": "Standaard Connection String", + "DisplayName:UseSharedDatabase": "Gebruik de gedeelde database", + "Permission:TenantManagement": "Klanten beheer", + "Permission:Create": "Maak aan", + "Permission:Edit": "Bewerk", + "Permission:Delete": "Verwijder", + "Permission:ManageConnectionStrings": "Beheer connection strings", + "Permission:ManageFeatures": "Beheer functies", + "DisplayName:AdminEmailAddress": "Admin e-mail adres", + "DisplayName:AdminPassword": "Admin wachtwoord" + } +} \ No newline at end of file From b1d47293e3274288f23a6c156e94e80a501edcf4 Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Wed, 29 Apr 2020 09:03:13 +0200 Subject: [PATCH 22/48] ome improvements / corrections --- .../Volo/Abp/Emailing/Localization/nl.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/nl.json b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/nl.json index efd7f49421..923671e885 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/nl.json +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/nl.json @@ -9,15 +9,15 @@ "DisplayName:Abp.Mailing.Smtp.Password": "wachtwoord", "DisplayName:Abp.Mailing.Smtp.Domain": "Domein", "DisplayName:Abp.Mailing.Smtp.EnableSsl": "SSL toestaan", - "DisplayName:Abp.Mailing.Smtp.UseDefaultCredentials": "Gebruik standaardreferenties", + "DisplayName:Abp.Mailing.Smtp.UseDefaultCredentials": "Gebruik standaard inloggegevens", "Description:Abp.Mailing.DefaultFromAddress": "Standard vanaf adres", "Description:Abp.Mailing.DefaultFromDisplayName": "Standaard vanaf weergave naam", "Description:Abp.Mailing.Smtp.Host": "De naam of het IP-adres van de host die wordt gebruikt voor SMTP-transacties.", "Description:Abp.Mailing.Smtp.Port": "De poort die wordt gebruikt voor SMTP-transacties.", - "Description:Abp.Mailing.Smtp.UserName": "User name associated with the credentials.", - "Description:Abp.Mailing.Smtp.Password": "Gebruikersnaam gekoppeld aan de referenties.", - "Description:Abp.Mailing.Smtp.Domain": "Het domein of de computernaam die de referenties verifieert.", + "Description:Abp.Mailing.Smtp.UserName": "Gebruikersnaam gekoppeld aan de inloggegevens.", + "Description:Abp.Mailing.Smtp.Password": "Het wachtwoord voor de gebruikersnaam die bij de inloggegevens hoort.", + "Description:Abp.Mailing.Smtp.Domain": "Het domein of de computernaam die de inloggegevens verifieert.", "Description:Abp.Mailing.Smtp.EnableSsl": "Of de SmtpClient Secure Sockets Layer (SSL) gebruikt om de verbinding te versleutelen.", - "Description:Abp.Mailing.Smtp.UseDefaultCredentials": "Of de standaardreferenties worden verzonden met verzoeken." + "Description:Abp.Mailing.Smtp.UseDefaultCredentials": "Of de standaard inloggegevens worden verzonden met verzoeken." } } \ No newline at end of file From 560789baea3cdff95d9ecad3797aa1328174678f Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 29 Apr 2020 15:09:10 +0800 Subject: [PATCH 23/48] Update Getting-Started.md(Tiered project require redis) Resolve #2804 --- docs/en/Getting-Started.md | 6 ++++++ docs/zh-Hans/Getting-Started.md | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/docs/en/Getting-Started.md b/docs/en/Getting-Started.md index 72e2f2886c..fa7f47f276 100644 --- a/docs/en/Getting-Started.md +++ b/docs/en/Getting-Started.md @@ -25,6 +25,12 @@ The following tools should be installed on your development machine: * [Node v12+](https://nodejs.org) * [Yarn v1.19+](https://classic.yarnpkg.com/) +{{ if Tiered == "Yes" }} + +* [Redis](https://redis.io/): The applications use Redis as as [distributed cache](../Caching.md). So, you need to have Redis installed & running. + +{{ end }} + > You can use another editor instead of Visual Studio as long as it supports .NET Core and ASP.NET Core. diff --git a/docs/zh-Hans/Getting-Started.md b/docs/zh-Hans/Getting-Started.md index a2b3013fe5..b60fccfaa2 100644 --- a/docs/zh-Hans/Getting-Started.md +++ b/docs/zh-Hans/Getting-Started.md @@ -24,6 +24,11 @@ * [Node v12+](https://nodejs.org) * [Yarn v1.19+](https://classic.yarnpkg.com/) +{{ if Tiered == "Yes" }} + +* [Redis](https://redis.io/): 应用程序将Redis用作[分布式缓存](../Caching.md). 因此你需要安装并运行Redis. + +{{ end }} > 你可以也使用其他支持.NET Core 和 ASP.NET Core的编辑器. From f70953cac22bcfc8be121ceb467e5d3937645dab Mon Sep 17 00:00:00 2001 From: Necati Meral Date: Thu, 30 Apr 2020 17:09:46 +0200 Subject: [PATCH 24/48] Consolidated enodings to utf-8 --- .../Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/de.json | 2 +- .../Abp/Localization/TestResources/Base/CountryNames/de.json | 2 +- .../Volo/Abp/Localization/TestResources/Base/Validation/de.json | 2 +- .../Volo/Abp/Localization/TestResources/Source/de.json | 2 +- .../Volo/Abp/Localization/TestResources/SourceExt/de.json | 2 +- .../VoloDocs.Web/Localization/Resources/VoloDocs/Web/de.json | 2 +- .../Localization/Resources/Docs/ApplicationContracts/de.json | 2 +- .../src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/de.json | 2 +- .../Volo/Abp/IdentityServer/Localization/Resources/de.json | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/de.json b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/de.json index 8a1a755193..98909d9847 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/de.json +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/de.json @@ -1,4 +1,4 @@ -{ +{ "culture": "de", "texts": { "GivenTenantIsNotAvailable": "Der angegebene Mandant ist nicht verfügbar: {0}", diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/de.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/de.json index 748a622c5c..1412b467f8 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/de.json +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/de.json @@ -1,4 +1,4 @@ -{ +{ "culture": "de", "texts": { "USA": "Vereinigte Staaten von Amerika", diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/de.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/de.json index 5ccbae2546..22e395eb77 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/de.json +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/de.json @@ -1,4 +1,4 @@ -{ +{ "culture": "de", "texts": { "ThisFieldIsRequired": "Dieses Feld ist ein Pflichtfeld", diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/de.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/de.json index 284c309cb6..4ef1655764 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/de.json +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/de.json @@ -1,4 +1,4 @@ -{ +{ "culture": "de", "texts": { "Hello {0}.": "Hallo {0}.", diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/de.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/de.json index 8f7d549d52..fe1216d361 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/de.json +++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/de.json @@ -1,4 +1,4 @@ -{ +{ "culture": "de", "texts": { "Hello {0}.": "Hallo {0}.", diff --git a/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/de.json b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/de.json index b31c3accc2..c3477348e1 100644 --- a/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/de.json +++ b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/de.json @@ -1,4 +1,4 @@ -{ +{ "culture": "de", "texts": { "DocsTitle": "VoloDocs", diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/de.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/de.json index 25be277082..2eccecb715 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/de.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/de.json @@ -1,4 +1,4 @@ -{ +{ "culture": "de", "texts": { "Permission:DocumentManagement": "Dokumentenverwaltung", diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/de.json b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/de.json index dcaaaddd20..25994178f7 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/de.json +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/de.json @@ -1,4 +1,4 @@ -{ +{ "culture": "de", "texts": { "Documents": "Dokumente", diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/de.json b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/de.json index 14bda65e83..68e2cde8b8 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/de.json +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/de.json @@ -1,4 +1,4 @@ -{ +{ "culture": "de", "texts": { "Volo.IdentityServer:DuplicateIdentityResourceName": "Identität Ressourcenname existiert bereits: {Name}", From 5f75f4236a2f618073e058f99af76d0866c4048e Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 5 May 2020 23:19:43 +0800 Subject: [PATCH 25/48] Update document --- docs/zh-Hans/Localization.md | 52 +++++++++++++++- docs/zh-Hans/Object-Extensions.md | 100 ++++++++++++++++++++++++++++++ 2 files changed, 150 insertions(+), 2 deletions(-) diff --git a/docs/zh-Hans/Localization.md b/docs/zh-Hans/Localization.md index fce4b14407..1292655e62 100644 --- a/docs/zh-Hans/Localization.md +++ b/docs/zh-Hans/Localization.md @@ -86,6 +86,21 @@ JSON文件位于 "/Localization/Resources/Test" 项目文件夹下, 如下图所 * 每个本地化文件都需要定义 `culture` (文化) 代码 (例如 "en" 或 "en-US"). * `texts` 部分只包含本地化字符串的键值集合 (键也可能有空格). +### 默认资源 + +可以将 `AbpLocalizationOptions.DefaultResourceType` 设置为资源类型,在未指定本地化资源时使用: + +````csharp +Configure(options => +{ + options.DefaultResourceType = typeof(TestResource); +}); +```` + +> [启动模板]](Startup-Templates/Application.md) 设置 `DefaultResourceType` 为应用程序的本地化资源. + +请参阅下面的*客户端*部分获取用例 + ##### 简短的本地化资源名称 本地化资源也可以在客户端(JavaScript)使用. 因此, 为本地化资源设置一个简短的名称可以更方便的本地化文本. 例如: @@ -165,6 +180,10 @@ public class MyService } ```` +##### 格式参数 + +格式参数可以在本地化Key参数后传递,如果你的消息是 `Hello {0}, welcome!`,可以将 `{0}` 传递给localizer,例如: `_localizer["HelloMessage", "John"]`. + ###### 在Razor视图/Page中简单的用法 ````c# @@ -179,7 +198,9 @@ public class MyService ABP提供了JavaScript服务, 可以在客户端使用相同的本地化文本. -获取本地化资源: +#### getResource + +`abp.localization.getResource` 函数用于获取本地化资源: ````js var testResource = abp.localization.getResource('Test'); @@ -191,6 +212,33 @@ var testResource = abp.localization.getResource('Test'); var str = testResource('HelloWorld'); ```` -## See Also +#### 本地化 + +`abp.localization.localize` 函数用于获取本地化文本,你可以传递本地化Key和资源名称: + +````js +var str = abp.localization.localize('HelloWorld', 'Test'); +```` + +`HelloWorld` 是本地化文本的Key, `Test` 是本地化资源的名称. + +如果未指定本地化资源名称,它使用 `AbpLocalizationOptions` 中定义的默认本地化资源(参见上面的*默认资源*部分). 例: + +````js +var str = abp.localization.localize('HelloWorld'); //uses the default resource +```` + +##### 格式参数 + +如果本地化字符串包含参数, 例如 `Hello {0}, welcome!`. 你可以将参数传递给本地化方法. 例: + +````js +var str1 = abp.localization.getResource('Test')('HelloWelcomeMessage', 'John'); +var str2 = abp.localization.localize('HelloWorld', 'Test', 'John'); +```` + +上面的两个示例都会输出 `Hello John, welcome!`. + +## 另请参阅 * [Angular UI中的本地化](UI/Angular/Localization.md) \ No newline at end of file diff --git a/docs/zh-Hans/Object-Extensions.md b/docs/zh-Hans/Object-Extensions.md index a0f1e5534b..f925a8730a 100644 --- a/docs/zh-Hans/Object-Extensions.md +++ b/docs/zh-Hans/Object-Extensions.md @@ -176,6 +176,106 @@ ObjectExtensionManager.Instance `options` 有一个名为 `Configuration` 的字典,该字典存储对象扩展定义甚至可以扩展. EF Core使用它来将其他属性映射到数据库中的表字段. 请参阅[扩展实体文档](Customizing-Application-Modules-Extending-Entities.md). +#### CheckPairDefinitionOnMapping + +控制在映射两个可扩展对象时如何检查属性定义. 请参阅*对象到对象映射*部分,了解 `CheckPairDefinitionOnMapping` 选项. + +## Validation + +你可能要为你定义的额外属性添加一些 **验证规则**. `AddOrUpdateProperty` 方法选项允许进行验证的方法有两种: + +1. 你可以为属性添加 **数据注解 attributes**. +2. 你可以给定一个action(代码块)执行 **自定义验证**. + +当你在**自动验证**的方法(例如:控制器操作,页面处理程序方法,应用程序服务方法...)中使用对象时,验证会工作. 因此,每当扩展对象被验证时,所有额外的属性都会被验证. + +### 数据注解 Attributes + +所有标准的数据注解Attributes对于额外属性都是有效的. 例: + +````csharp +ObjectExtensionManager.Instance + .AddOrUpdateProperty( + "SocialSecurityNumber", + options => + { + options.Attributes.Add(new RequiredAttribute()); + options.Attributes.Add( + new StringLengthAttribute(32) { + MinimumLength = 6 + } + ); + }); +```` + +使用以上配置,如果没有提供有效的 `SocialSecurityNumber` 值, `IdentityUserCreateDto` 对象将是无效的. + +### 自定义验证 + +如果需要,可以添加一个自定义action验证额外属性. 例: + +````csharp +ObjectExtensionManager.Instance + .AddOrUpdateProperty( + "SocialSecurityNumber", + options => + { + options.Validators.Add(context => + { + var socialSecurityNumber = context.Value as string; + + if (socialSecurityNumber == null || + socialSecurityNumber.StartsWith("X")) + { + context.ValidationErrors.Add( + new ValidationResult( + "Invalid social security number: " + socialSecurityNumber, + new[] { "SocialSecurityNumber" } + ) + ); + } + }); + }); +```` + +`context.ServiceProvider` 可以解析服务. + +除了为单个属性添加自定义验证逻辑外,还可以添加在对象级执行的自定义验证逻辑. 例: + +````csharp +ObjectExtensionManager.Instance +.AddOrUpdate(objConfig => +{ + //Define two properties with their own validation rules + + objConfig.AddOrUpdateProperty("Password", propertyConfig => + { + propertyConfig.Attributes.Add(new RequiredAttribute()); + }); + + objConfig.AddOrUpdateProperty("PasswordRepeat", propertyConfig => + { + propertyConfig.Attributes.Add(new RequiredAttribute()); + }); + + //Write a common validation logic works on multiple properties + + objConfig.Validators.Add(context => + { + if (context.ValidatingObject.GetProperty("Password") != + context.ValidatingObject.GetProperty("PasswordRepeat")) + { + context.ValidationErrors.Add( + new ValidationResult( + "Please repeat the same password!", + new[] { "Password", "PasswordRepeat" } + ) + ); + } + }); +}); +```` + ## 对象到对象映射 假设你已向可扩展的实体对象添加了额外的属性并使用了自动[对象到对象的映射](Object-To-Object-Mapping.md)将该实体映射到可扩展的DTO类. 在这种情况下你需要格外小心,因为额外属性可能包含**敏感数据**,这些数据对于客户端不可用. From 51c0bec24783a206029beecacc9ae770feabbf5c Mon Sep 17 00:00:00 2001 From: Arkat Erol Date: Wed, 6 May 2020 12:08:24 +0300 Subject: [PATCH 26/48] generate-proxy folder structure changes --- .../Abp/Cli/Commands/GenerateProxyCommand.cs | 133 ++++++++++++------ 1 file changed, 88 insertions(+), 45 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/GenerateProxyCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/GenerateProxyCommand.cs index accf5eddb9..5c732f6873 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/GenerateProxyCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/GenerateProxyCommand.cs @@ -20,6 +20,7 @@ namespace Volo.Abp.Cli.Commands { public static Dictionary> propertyList = new Dictionary>(); public ILogger Logger { get; set; } + public static string outputPrefix = "src/app"; protected TemplateProjectBuilder TemplateProjectBuilder { get; } @@ -100,14 +101,22 @@ namespace Volo.Abp.Cli.Commands Logger.LogInformation($"{rootPath} directory is creating"); - Directory.CreateDirectory($"src/app/{rootPath}/shared/models"); - Directory.CreateDirectory($"src/app/{rootPath}/shared/services"); + if (rootPath == "app") + { + outputPrefix = "src"; + } + else + { + outputPrefix = "src/app"; + } - var serviceIndexList = new List(); - var modelIndexList = new List(); + Directory.CreateDirectory($"{outputPrefix}/{rootPath}"); foreach (var controller in moduleValue.Root.ToList().Select(item => item.First)) { + var serviceIndexList = new List(); + var modelIndexList = new List(); + var serviceFileText = new StringBuilder(); serviceFileText.AppendLine("[firstTypeList]"); @@ -128,6 +137,12 @@ namespace Volo.Abp.Cli.Commands var controllerName = (string)controller["controllerName"]; var controllerServiceName = controllerName.PascalToKebabCase() + ".service.ts"; + var controllerPathName = controllerName.ToLower().Replace("controller", ""); + controllerPathName = (controllerPathName.StartsWith(rootPath)) ? controllerPathName.Substring(rootPath.Length) : controllerPathName; + + Directory.CreateDirectory($"{outputPrefix}/{rootPath}/{controllerPathName}/models"); + Directory.CreateDirectory($"{outputPrefix}/{rootPath}/{controllerPathName}/services"); + foreach (var actionItem in controller["actions"]) { var action = actionItem.First; @@ -157,7 +172,7 @@ namespace Volo.Abp.Cli.Commands var isOptional = (bool)parameter["isOptional"]; var defaultValue = (string)parameter["defaultValue"]; - var modelIndex = CreateType(data, (string)parameter["type"], rootPath, modelIndexList); + var modelIndex = CreateType(data, (string)parameter["type"], rootPath, modelIndexList, controllerPathName); if (!string.IsNullOrWhiteSpace(modelIndex)) { @@ -194,7 +209,7 @@ namespace Volo.Abp.Cli.Commands parameterModel = AddParameter(name, typeSimple, isOptional, defaultValue, bindingSourceId, parameterModel); } - modelIndex = CreateType(data, (string)parameterOnMethod["type"], rootPath, modelIndexList); + modelIndex = CreateType(data, (string)parameterOnMethod["type"], rootPath, modelIndexList, controllerPathName); if (!string.IsNullOrWhiteSpace(modelIndex)) { @@ -225,7 +240,7 @@ namespace Volo.Abp.Cli.Commands foreach (var parameterItem in parameterModel.OrderBy(p => p.DisplayOrder)) { var parameterItemModelName = parameterItem.Type.PascalToKebabCase() + ".ts"; - var parameterItemModelPath = $"src/app/{rootPath}/shared/models/{parameterItemModelName}"; + var parameterItemModelPath = $"{outputPrefix}/{rootPath}/{controllerPathName}/models/{parameterItemModelName}"; if (parameterItem.BindingSourceId == "body" && !File.Exists(parameterItemModelPath)) { parameterItem.Type = "any"; @@ -262,7 +277,7 @@ namespace Volo.Abp.Cli.Commands var secondType = secondTypeArray[secondTypeArray.Length - 1].TrimEnd('>'); var secondTypeModelName = secondType.PascalToKebabCase() + ".ts"; - var secondTypeModelPath = $"src/app/{rootPath}/shared/models/{secondTypeModelName}"; + var secondTypeModelPath = $"{outputPrefix}/{rootPath}/{controllerPathName}/models/{secondTypeModelName}"; if (firstType == "List" && !File.Exists(secondTypeModelPath)) { secondType = "any"; @@ -306,7 +321,7 @@ namespace Volo.Abp.Cli.Commands } } - var modelIndex = CreateType(data, returnValueType, rootPath, modelIndexList); + var modelIndex = CreateType(data, returnValueType, rootPath, modelIndexList, controllerPathName); if (!string.IsNullOrWhiteSpace(modelIndex)) { @@ -359,26 +374,31 @@ namespace Volo.Abp.Cli.Commands serviceFileText.AppendLine("}"); serviceFileText.Replace("[controllerName]", controllerName); - File.WriteAllText($"src/app/{rootPath}/shared/services/{controllerServiceName}", serviceFileText.ToString()); - } + File.WriteAllText($"{outputPrefix}/{rootPath}/{controllerPathName}/services/{controllerServiceName}", serviceFileText.ToString()); - var serviceIndexFileText = new StringBuilder(); - foreach (var serviceIndexItem in serviceIndexList.Distinct()) - { - serviceIndexFileText.AppendLine($"export * from './{serviceIndexItem}';"); - } - File.WriteAllText($"src/app/{rootPath}/shared/services/index.ts", serviceIndexFileText.ToString()); + var serviceIndexFileText = new StringBuilder(); - var modelIndexFileText = new StringBuilder(); + foreach (var serviceIndexItem in serviceIndexList.Distinct()) + { + serviceIndexFileText.AppendLine($"export * from './{serviceIndexItem}';"); + } - foreach (var modelIndexItem in modelIndexList.Distinct()) - { - modelIndexFileText.AppendLine($"export * from './{modelIndexItem}';"); - } + File.WriteAllText($"{outputPrefix}/{rootPath}/{controllerPathName}/services/index.ts", serviceIndexFileText.ToString()); + + if (modelIndexList.Count > 0) + { + var modelIndexFileText = new StringBuilder(); + + foreach (var modelIndexItem in modelIndexList.Distinct()) + { + modelIndexFileText.AppendLine($"export * from './{modelIndexItem}';"); + } - File.WriteAllText($"src/app/{rootPath}/shared/models/index.ts", modelIndexFileText.ToString()); + File.WriteAllText($"{outputPrefix}/{rootPath}/{controllerPathName}/models/index.ts", modelIndexFileText.ToString()); + } + } } Logger.LogInformation("Completed!"); @@ -415,7 +435,7 @@ namespace Volo.Abp.Cli.Commands return moduleList; } - private static string CreateType(JObject data, string returnValueType, string rootPath, List modelIndexList) + private static string CreateType(JObject data, string returnValueType, string rootPath, List modelIndexList, string controllerPathName) { var type = data["types"][returnValueType]; @@ -425,30 +445,45 @@ namespace Volo.Abp.Cli.Commands } if (returnValueType.StartsWith("Volo.Abp.Application.Dtos") - || returnValueType.StartsWith("System.Collections") - || returnValueType == "System.String" - || returnValueType == "System.Void" - || returnValueType.Contains("System.Net.HttpStatusCode?") - || returnValueType.Contains("IActionResult") - || returnValueType.Contains("ActionResult") - || returnValueType.Contains("IStringValueType") - || returnValueType.Contains("IValueValidator") - ) + || returnValueType.StartsWith("System.Collections") + || returnValueType == "System.String" + || returnValueType == "System.Void" + || returnValueType.Contains("System.Net.HttpStatusCode?") + || returnValueType.Contains("IActionResult") + || returnValueType.Contains("ActionResult") + || returnValueType.Contains("IStringValueType") + || returnValueType.Contains("IValueValidator") + ) { - return null; + if (returnValueType.Contains("<")) + { + returnValueType = returnValueType.Split('<')[1].Split('>')[0]; + if (returnValueType.StartsWith("Volo.Abp.Application.Dtos") + || returnValueType.StartsWith("System.Collections") + || returnValueType == "System.String" + || returnValueType == "System.Void" + || returnValueType.Contains("System.Net.HttpStatusCode?") + || returnValueType.Contains("IActionResult") + || returnValueType.Contains("ActionResult") + || returnValueType.Contains("IStringValueType") + || returnValueType.Contains("IValueValidator") + ) + { + return null; + } + } + else + { + return null; + } } var typeNameSplit = returnValueType.Split("."); var typeName = typeNameSplit[typeNameSplit.Length - 1]; - if (typeName.Contains("HttpStatusCode")) - { - - } - var typeModelName = typeName.Replace("<", "").Replace(">", "").Replace("?", "").PascalToKebabCase() + ".ts"; - var path = $"src/app/{rootPath}/shared/models/{typeModelName}"; + var path = $"{outputPrefix}/{rootPath}/{controllerPathName}/models/{typeModelName}"; var modelFileText = new StringBuilder(); @@ -481,7 +516,7 @@ namespace Volo.Abp.Cli.Commands modelFileText.AppendLine($"import {{ {baseTypeName} }} from '{baseTypeKebabCase}';"); extends = "extends " + (!string.IsNullOrWhiteSpace(customBaseTypeName) ? customBaseTypeName : baseTypeName); - var modelIndex = CreateType(data, baseType, rootPath, modelIndexList); + var modelIndex = CreateType(data, baseType, rootPath, modelIndexList, controllerPathName); if (!string.IsNullOrWhiteSpace(modelIndex)) { modelIndexList.Add(modelIndex); @@ -514,7 +549,7 @@ namespace Volo.Abp.Cli.Commands propertyName = (char.ToLower(propertyName[0]) + propertyName.Substring(1)); var typeSimple = (string)property["typeSimple"]; - var modelIndex = CreateType(data, (string)property["type"], rootPath, modelIndexList); + var modelIndex = CreateType(data, (string)property["type"], rootPath, modelIndexList, controllerPathName); if (typeSimple.IndexOf("[") > -1 && typeSimple.IndexOf("]") > -1) { @@ -547,7 +582,7 @@ namespace Volo.Abp.Cli.Commands ) { var typeSimpleModelName = typeSimple.PascalToKebabCase() + ".ts"; - var modelPath = $"src/app/{rootPath}/shared/models/{typeSimpleModelName}"; + var modelPath = $"{outputPrefix}/{rootPath}/{controllerPathName}/models/{typeSimpleModelName}"; if (!File.Exists(modelPath)) { typeSimple = "any" + (typeSimple.Contains("[]") ? "[]" : ""); @@ -561,10 +596,18 @@ namespace Volo.Abp.Cli.Commands if (!string.IsNullOrWhiteSpace(modelIndex)) { + var from = "../models"; var propertyTypeSplit = ((string)property["type"]).Split("."); var propertyType = propertyTypeSplit[propertyTypeSplit.Length - 1]; + + var propertyTypeKebabCase = propertyType.PascalToKebabCase(); + if (File.Exists($"{outputPrefix}/{rootPath}/{controllerPathName}/models/{propertyTypeKebabCase}.ts")) + { + from = "./" + propertyTypeKebabCase; + } + modelFileText.Insert(0, ""); - modelFileText.Insert(0, $"import {{ {propertyType} }} from '../models';"); + modelFileText.Insert(0, $"import {{ {propertyType} }} from '{from}';"); modelFileText.Insert(0, ""); modelIndexList.Add(modelIndex); } @@ -608,7 +651,7 @@ namespace Volo.Abp.Cli.Commands modelFileText.AppendLine("}"); } - File.WriteAllText($"src/app/{rootPath}/shared/models/{typeModelName}", modelFileText.ToString()); + File.WriteAllText($"{outputPrefix}/{rootPath}/{controllerPathName}/models/{typeModelName}", modelFileText.ToString()); return typeModelName.Replace(".ts", ""); } From 1691d05e313f11bc0d0167cb17fce959e8e7ff14 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Wed, 6 May 2020 15:47:50 +0300 Subject: [PATCH 27/48] build: upgrade ngx-validate version --- npm/ng-packs/package.json | 19 +++++++++++-------- npm/ng-packs/yarn.lock | 22 +++++++++++----------- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index d141817a6e..46a2009087 100644 --- a/npm/ng-packs/package.json +++ b/npm/ng-packs/package.json @@ -22,20 +22,20 @@ "generate:changelog": "conventional-changelog -p angular -i CHANGELOG.md -s" }, "devDependencies": { - "@abp/ng.account": "~2.6.2", + "@abp/ng.account": "^2.6.2", "@abp/ng.account.config": "~2.6.2", - "@abp/ng.core": "^2.6.2", + "@abp/ng.core": "~2.6.2", "@abp/ng.feature-management": "^2.6.2", - "@abp/ng.identity": "~2.6.2", + "@abp/ng.identity": "^2.6.2", "@abp/ng.identity.config": "~2.6.2", "@abp/ng.permission-management": "^2.6.2", - "@abp/ng.setting-management": "~2.6.2", + "@abp/ng.setting-management": "^2.6.2", "@abp/ng.setting-management.config": "~2.6.2", - "@abp/ng.tenant-management": "~2.6.2", + "@abp/ng.tenant-management": "^2.6.2", "@abp/ng.tenant-management.config": "~2.6.2", - "@abp/ng.theme.basic": "~2.6.2", + "@abp/ng.theme.basic": "^2.6.2", "@abp/ng.theme.shared": "^2.6.2", - "@abp/utils": "^2.6.0", + "@abp/utils": "~2.6.2", "@angular-builders/jest": "^8.2.0", "@angular-devkit/build-angular": "~0.803.21", "@angular-devkit/build-ng-packagr": "~0.803.21", @@ -54,7 +54,7 @@ "@fortawesome/fontawesome-free": "^5.12.1", "@ng-bootstrap/ng-bootstrap": "^5.3.0", "@ngneat/spectator": "^4.5.0", - "@ngx-validate/core": "^0.0.7", + "@ngx-validate/core": "^0.0.8", "@ngxs/devtools-plugin": "^3.5.1", "@ngxs/logger-plugin": "^3.5.1", "@ngxs/router-plugin": "^3.6.2", @@ -97,5 +97,8 @@ "commitizen": { "path": "cz-conventional-changelog" } + }, + "resolutions": { + "@ngx-validate/core": "^0.0.8" } } diff --git a/npm/ng-packs/yarn.lock b/npm/ng-packs/yarn.lock index e8539d81be..3f9479ae7e 100644 --- a/npm/ng-packs/yarn.lock +++ b/npm/ng-packs/yarn.lock @@ -9,7 +9,7 @@ dependencies: tslib "^1.9.0" -"@abp/ng.account@~2.6.2": +"@abp/ng.account@^2.6.2": version "2.6.2" resolved "https://registry.yarnpkg.com/@abp/ng.account/-/ng.account-2.6.2.tgz#aac921c49bcd8cdec506bd27d2546193416ea187" integrity sha512-s3gLSqNdCW6D+DvuML+aGFT8braCfSXUbxvJ1WRCovd2Ec0jNxPBKj84zgYPYEb3smD294DcXxNx36jtJK+1OA== @@ -18,7 +18,7 @@ "@abp/ng.theme.shared" "^2.6.2" tslib "^1.9.0" -"@abp/ng.core@^2.6.2": +"@abp/ng.core@^2.6.2", "@abp/ng.core@~2.6.2": version "2.6.2" resolved "https://registry.yarnpkg.com/@abp/ng.core/-/ng.core-2.6.2.tgz#d0e4f6666a9a207fc7425001449bea2cdfe93522" integrity sha512-e7c82d9VF20d4JFUkyzT5iTqGKnkq5FBHdv6IW6lsVyuz2Zf/p4wNtKATRr2ntM7qNIjIQebtGNFyxxX4nmL+w== @@ -50,7 +50,7 @@ dependencies: tslib "^1.9.0" -"@abp/ng.identity@~2.6.2": +"@abp/ng.identity@^2.6.2": version "2.6.2" resolved "https://registry.yarnpkg.com/@abp/ng.identity/-/ng.identity-2.6.2.tgz#14f83305415d27b67d01405e582978682cfd7f22" integrity sha512-wzR/QFoSSRhIxfH91QsTSCc0rBsFfsg8aiP5xPheNx3/lZygCnMogH3blRgLiNIoyxuG00MTfp+e9lFIBfDnbQ== @@ -75,7 +75,7 @@ dependencies: tslib "^1.9.0" -"@abp/ng.setting-management@~2.6.2": +"@abp/ng.setting-management@^2.6.2": version "2.6.2" resolved "https://registry.yarnpkg.com/@abp/ng.setting-management/-/ng.setting-management-2.6.2.tgz#f49d361ed8412380fdf2173f28b890115748a52b" integrity sha512-0VdGa+t8lEZRsUdKL1EHoZei+ZCDMTu4n3UvXvD0OzRJyYPUjHRrMSSOYifuN4gPatluIe0E2I+tO3lQ3/2tjw== @@ -91,7 +91,7 @@ dependencies: tslib "^1.9.0" -"@abp/ng.tenant-management@~2.6.2": +"@abp/ng.tenant-management@^2.6.2": version "2.6.2" resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management/-/ng.tenant-management-2.6.2.tgz#6be284fe6691946e2e6766e34ae958d7d2ec5e3a" integrity sha512-BGARok01Eqn1kEltOwjwIpMJ8LD0jtYfbSbnO8V9TRg7f4ZEqFmfXudOIluDIwHjSEkNXk+Cs0/iV53lyi5+lg== @@ -101,7 +101,7 @@ "@abp/ng.theme.shared" "^2.6.2" tslib "^1.9.0" -"@abp/ng.theme.basic@~2.6.2": +"@abp/ng.theme.basic@^2.6.2": version "2.6.2" resolved "https://registry.yarnpkg.com/@abp/ng.theme.basic/-/ng.theme.basic-2.6.2.tgz#4b0414411e164885b8c467b04d635a0a3c81bd01" integrity sha512-qgA4hh7ipIWY88JOqjChjoJgFB0csqXbwdb/pabrsFoHYuiFVT3cqvHq6jMfKQHEPBJSEnl6/GUIm+26DQ5eDw== @@ -122,7 +122,7 @@ chart.js "^2.9.3" tslib "^1.9.0" -"@abp/utils@^2.6.0": +"@abp/utils@^2.6.0", "@abp/utils@~2.6.2": version "2.6.2" resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-2.6.2.tgz#dba9e7c0aa1531fae6c5ff22fcbdfb4d98c576e3" integrity sha512-MqExfPA4FRYORsskVG7kbkAwzs9z4XaMaZ75XkoahD+FyZtm1e0miEEoDvwrdye9jgL/FrWeShWNE49GY7PvpA== @@ -2129,10 +2129,10 @@ tree-kill "1.2.2" webpack-sources "1.4.3" -"@ngx-validate/core@^0.0.7": - version "0.0.7" - resolved "https://registry.yarnpkg.com/@ngx-validate/core/-/core-0.0.7.tgz#35a4364e8c8bb43ce1731e8d681ce1ab307c5955" - integrity sha512-APT7kstDaJ0JkC6cDkypbVSXAOAEyPTQ9P8DjEI1szi+Xzuz69XLASK3NdTYjFwogWevhYXoYRaR2Bq9iWzl+g== +"@ngx-validate/core@^0.0.7", "@ngx-validate/core@^0.0.8": + version "0.0.8" + resolved "https://registry.yarnpkg.com/@ngx-validate/core/-/core-0.0.8.tgz#8577405eb1af0f5002cdda7a86fbcda56280f116" + integrity sha512-caIG5ao76Xhf7T+pNA8crnpAwK0yqj3i0OAUGZRUq1W+kNgz+ZnrSd4F9an/W4g+38u/8gfUVvsfsm07ju6qYA== dependencies: tslib "^1.9.0" From 29d0e8c683e2cc72376ca58b2491854b2fbfe4d5 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Wed, 6 May 2020 15:50:10 +0300 Subject: [PATCH 28/48] build: add tilde to abp packages --- npm/ng-packs/package.json | 16 ++++++++-------- npm/ng-packs/yarn.lock | 16 ++++++++-------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index 46a2009087..913edd1e00 100644 --- a/npm/ng-packs/package.json +++ b/npm/ng-packs/package.json @@ -22,19 +22,19 @@ "generate:changelog": "conventional-changelog -p angular -i CHANGELOG.md -s" }, "devDependencies": { - "@abp/ng.account": "^2.6.2", + "@abp/ng.account": "~2.6.2", "@abp/ng.account.config": "~2.6.2", "@abp/ng.core": "~2.6.2", - "@abp/ng.feature-management": "^2.6.2", - "@abp/ng.identity": "^2.6.2", + "@abp/ng.feature-management": "~2.6.2", + "@abp/ng.identity": "~2.6.2", "@abp/ng.identity.config": "~2.6.2", - "@abp/ng.permission-management": "^2.6.2", - "@abp/ng.setting-management": "^2.6.2", + "@abp/ng.permission-management": "~2.6.2", + "@abp/ng.setting-management": "~2.6.2", "@abp/ng.setting-management.config": "~2.6.2", - "@abp/ng.tenant-management": "^2.6.2", + "@abp/ng.tenant-management": "~2.6.2", "@abp/ng.tenant-management.config": "~2.6.2", - "@abp/ng.theme.basic": "^2.6.2", - "@abp/ng.theme.shared": "^2.6.2", + "@abp/ng.theme.basic": "~2.6.2", + "@abp/ng.theme.shared": "~2.6.2", "@abp/utils": "~2.6.2", "@angular-builders/jest": "^8.2.0", "@angular-devkit/build-angular": "~0.803.21", diff --git a/npm/ng-packs/yarn.lock b/npm/ng-packs/yarn.lock index 3f9479ae7e..67b8b86725 100644 --- a/npm/ng-packs/yarn.lock +++ b/npm/ng-packs/yarn.lock @@ -9,7 +9,7 @@ dependencies: tslib "^1.9.0" -"@abp/ng.account@^2.6.2": +"@abp/ng.account@~2.6.2": version "2.6.2" resolved "https://registry.yarnpkg.com/@abp/ng.account/-/ng.account-2.6.2.tgz#aac921c49bcd8cdec506bd27d2546193416ea187" integrity sha512-s3gLSqNdCW6D+DvuML+aGFT8braCfSXUbxvJ1WRCovd2Ec0jNxPBKj84zgYPYEb3smD294DcXxNx36jtJK+1OA== @@ -35,7 +35,7 @@ ts-toolbelt "^6.3.6" tslib "^1.9.0" -"@abp/ng.feature-management@^2.6.2": +"@abp/ng.feature-management@^2.6.2", "@abp/ng.feature-management@~2.6.2": version "2.6.2" resolved "https://registry.yarnpkg.com/@abp/ng.feature-management/-/ng.feature-management-2.6.2.tgz#da09b07ebe81f09ccf338a7c10c384920375567a" integrity sha512-JdHuAZk9j9AR1iKU02Xoux40ULOccm+68q7/4L2G1cBET6yTAE8Ua9RPPX9HadmCG0cR8awl3d+5JPwyL3OjFA== @@ -50,7 +50,7 @@ dependencies: tslib "^1.9.0" -"@abp/ng.identity@^2.6.2": +"@abp/ng.identity@~2.6.2": version "2.6.2" resolved "https://registry.yarnpkg.com/@abp/ng.identity/-/ng.identity-2.6.2.tgz#14f83305415d27b67d01405e582978682cfd7f22" integrity sha512-wzR/QFoSSRhIxfH91QsTSCc0rBsFfsg8aiP5xPheNx3/lZygCnMogH3blRgLiNIoyxuG00MTfp+e9lFIBfDnbQ== @@ -60,7 +60,7 @@ "@abp/ng.theme.shared" "^2.6.2" tslib "^1.9.0" -"@abp/ng.permission-management@^2.6.2": +"@abp/ng.permission-management@^2.6.2", "@abp/ng.permission-management@~2.6.2": version "2.6.2" resolved "https://registry.yarnpkg.com/@abp/ng.permission-management/-/ng.permission-management-2.6.2.tgz#ba7902256acf3e1ff49552983e4d292f670f9ad8" integrity sha512-6NW5BF+5ZFQI8oLEQWCiJS5iF2v3gHLvohrbN84RsPNTc+ZRDte6MbIOGq2CWxM8qXwisLBiR/RWC4ssgfPqEA== @@ -75,7 +75,7 @@ dependencies: tslib "^1.9.0" -"@abp/ng.setting-management@^2.6.2": +"@abp/ng.setting-management@~2.6.2": version "2.6.2" resolved "https://registry.yarnpkg.com/@abp/ng.setting-management/-/ng.setting-management-2.6.2.tgz#f49d361ed8412380fdf2173f28b890115748a52b" integrity sha512-0VdGa+t8lEZRsUdKL1EHoZei+ZCDMTu4n3UvXvD0OzRJyYPUjHRrMSSOYifuN4gPatluIe0E2I+tO3lQ3/2tjw== @@ -91,7 +91,7 @@ dependencies: tslib "^1.9.0" -"@abp/ng.tenant-management@^2.6.2": +"@abp/ng.tenant-management@~2.6.2": version "2.6.2" resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management/-/ng.tenant-management-2.6.2.tgz#6be284fe6691946e2e6766e34ae958d7d2ec5e3a" integrity sha512-BGARok01Eqn1kEltOwjwIpMJ8LD0jtYfbSbnO8V9TRg7f4ZEqFmfXudOIluDIwHjSEkNXk+Cs0/iV53lyi5+lg== @@ -101,7 +101,7 @@ "@abp/ng.theme.shared" "^2.6.2" tslib "^1.9.0" -"@abp/ng.theme.basic@^2.6.2": +"@abp/ng.theme.basic@~2.6.2": version "2.6.2" resolved "https://registry.yarnpkg.com/@abp/ng.theme.basic/-/ng.theme.basic-2.6.2.tgz#4b0414411e164885b8c467b04d635a0a3c81bd01" integrity sha512-qgA4hh7ipIWY88JOqjChjoJgFB0csqXbwdb/pabrsFoHYuiFVT3cqvHq6jMfKQHEPBJSEnl6/GUIm+26DQ5eDw== @@ -109,7 +109,7 @@ "@abp/ng.theme.shared" "^2.6.2" tslib "^1.9.0" -"@abp/ng.theme.shared@^2.6.2": +"@abp/ng.theme.shared@^2.6.2", "@abp/ng.theme.shared@~2.6.2": version "2.6.2" resolved "https://registry.yarnpkg.com/@abp/ng.theme.shared/-/ng.theme.shared-2.6.2.tgz#9d70b7aab010af4cd5a451c9c2d162d73ec5f9cc" integrity sha512-e3QVsPpmbPGmTpQY9J1RgmWer7Tx7mrsOtxjFvbJGqKVF1UUtU5Kc3VyGPb3JsjQtT+890/9qmAf/YSj3cNPIA== From 3f66f9062cf8bf8bf0411593c1ab7bf16104fbbb Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 6 May 2020 21:40:22 +0800 Subject: [PATCH 29/48] Add AbpTenantManagementEntityFrameworkCoreModule to host module dependencies --- .../BloggingService.Host/BloggingService.Host.csproj | 3 ++- .../BloggingService.Host/BloggingServiceHostModule.cs | 6 ++++-- .../ProductService.Host/ProductService.Host.csproj | 3 ++- .../ProductService.Host/ProductServiceHostModule.cs | 4 +++- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingService.Host.csproj b/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingService.Host.csproj index 58c3d59c40..14493fcf0a 100644 --- a/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingService.Host.csproj +++ b/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingService.Host.csproj @@ -36,6 +36,7 @@ + @@ -44,5 +45,5 @@ - + diff --git a/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingServiceHostModule.cs b/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingServiceHostModule.cs index 3b10225ef9..4c5b7b6d3b 100644 --- a/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingServiceHostModule.cs +++ b/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingServiceHostModule.cs @@ -29,6 +29,7 @@ using Volo.Abp.MultiTenancy; using Volo.Abp.PermissionManagement.EntityFrameworkCore; using Volo.Abp.Security.Claims; using Volo.Abp.SettingManagement.EntityFrameworkCore; +using Volo.Abp.TenantManagement.EntityFrameworkCore; using Volo.Abp.Threading; using Volo.Blogging; using Volo.Blogging.Blogs; @@ -49,7 +50,8 @@ namespace BloggingService.Host typeof(BloggingApplicationModule), typeof(AbpHttpClientIdentityModelWebModule), typeof(AbpIdentityHttpApiClientModule), - typeof(AbpAspNetCoreMultiTenancyModule) + typeof(AbpAspNetCoreMultiTenancyModule), + typeof(AbpTenantManagementEntityFrameworkCoreModule) )] public class BloggingServiceHostModule : AbpModule { @@ -82,7 +84,7 @@ namespace BloggingService.Host { options.Languages.Add(new LanguageInfo("en", "en", "English")); }); - + Configure(options => { options.UseSqlServer(); diff --git a/samples/MicroserviceDemo/microservices/ProductService.Host/ProductService.Host.csproj b/samples/MicroserviceDemo/microservices/ProductService.Host/ProductService.Host.csproj index 5b3247fcef..7027c3294a 100644 --- a/samples/MicroserviceDemo/microservices/ProductService.Host/ProductService.Host.csproj +++ b/samples/MicroserviceDemo/microservices/ProductService.Host/ProductService.Host.csproj @@ -34,6 +34,7 @@ + @@ -42,5 +43,5 @@ - + diff --git a/samples/MicroserviceDemo/microservices/ProductService.Host/ProductServiceHostModule.cs b/samples/MicroserviceDemo/microservices/ProductService.Host/ProductServiceHostModule.cs index 92993809b4..e03cf26182 100644 --- a/samples/MicroserviceDemo/microservices/ProductService.Host/ProductServiceHostModule.cs +++ b/samples/MicroserviceDemo/microservices/ProductService.Host/ProductServiceHostModule.cs @@ -25,6 +25,7 @@ using Volo.Abp.MultiTenancy; using Volo.Abp.PermissionManagement.EntityFrameworkCore; using Volo.Abp.Security.Claims; using Volo.Abp.SettingManagement.EntityFrameworkCore; +using Volo.Abp.TenantManagement.EntityFrameworkCore; using Volo.Abp.Threading; namespace ProductService.Host @@ -39,7 +40,8 @@ namespace ProductService.Host typeof(ProductManagementApplicationModule), typeof(ProductManagementHttpApiModule), typeof(ProductManagementEntityFrameworkCoreModule), - typeof(AbpAspNetCoreMultiTenancyModule) + typeof(AbpAspNetCoreMultiTenancyModule), + typeof(AbpTenantManagementEntityFrameworkCoreModule) )] public class ProductServiceHostModule : AbpModule { From 60fafb37020535213845a11e55d8661ddf13ed7c Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Wed, 6 May 2020 18:25:30 +0300 Subject: [PATCH 30/48] feat(theme-shared): make segments variable in breadcrumb an input --- .../breadcrumb/breadcrumb.component.ts | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.ts index ae7a589617..e67d3fa346 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/breadcrumb/breadcrumb.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, Input } from '@angular/core'; import { Router } from '@angular/router'; import { Store } from '@ngxs/store'; import { ConfigState, ABP } from '@abp/ng.core'; @@ -8,18 +8,22 @@ import { ConfigState, ABP } from '@abp/ng.core'; templateUrl: './breadcrumb.component.html', }) export class BreadcrumbComponent implements OnInit { - show: boolean; - + @Input() segments: string[] = []; + show: boolean; + constructor(private router: Router, private store: Store) {} ngOnInit(): void { this.show = !!this.store.selectSnapshot(state => state.LeptonLayoutState); - if (this.show) { + + if (this.show && !this.segments.length) { let splittedUrl = this.router.url.split('/').filter(chunk => chunk); - let currentUrl: ABP.FullRoute = this.store.selectSnapshot(ConfigState.getRoute(splittedUrl[0])); + let currentUrl: ABP.FullRoute = this.store.selectSnapshot( + ConfigState.getRoute(splittedUrl[0]), + ); if (!currentUrl) { currentUrl = this.store.selectSnapshot(ConfigState.getRoute(null, null, this.router.url)); @@ -38,6 +42,8 @@ export class BreadcrumbComponent implements OnInit { let childRoute: ABP.FullRoute = currentUrl; for (let i = 0; i < arr.length; i++) { const element = arr[i]; + if (!childRoute.children || !childRoute.children.length) return; + childRoute = childRoute.children.find(child => child.path === element); this.segments.push(childRoute.name); From 3c817c80d74ec74ce9230ab813bc57927588719c Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Wed, 6 May 2020 18:29:01 +0300 Subject: [PATCH 31/48] feat(core): add new types to ApplicationConfiguration namespace --- .../lib/models/application-configuration.ts | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/core/src/lib/models/application-configuration.ts b/npm/ng-packs/packages/core/src/lib/models/application-configuration.ts index ad34955dac..0a4377f4d2 100644 --- a/npm/ng-packs/packages/core/src/lib/models/application-configuration.ts +++ b/npm/ng-packs/packages/core/src/lib/models/application-configuration.ts @@ -10,8 +10,10 @@ export namespace ApplicationConfiguration { } export interface Localization { - values: LocalizationValue; + currentCulture: CurrentCulture; + defaultResourceName: string; languages: Language[]; + values: LocalizationValue; } export interface LocalizationValue { @@ -25,6 +27,27 @@ export namespace ApplicationConfiguration { flagIcon: string; } + export interface CurrentCulture { + cultureName: string; + dateTimeFormat: DateTimeFormat; + displayName: string; + englishName: string; + isRightToLeft: boolean; + name: string; + nativeName: string; + threeLetterIsoLanguageName: string; + twoLetterIsoLanguageName: string; + } + + export interface DateTimeFormat { + calendarAlgorithmType: string; + dateSeparator: string; + fullDateTimePattern: string; + longTimePattern: string; + shortDatePattern: string; + shortTimePattern: string; + } + export interface Auth { policies: Policy; grantedPolicies: Policy; From afc8cd6c89176e6bd7a9ac01c462f2ffc3144dfd Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Wed, 6 May 2020 18:29:20 +0300 Subject: [PATCH 32/48] refactor(account): add name property to tenant response type --- npm/ng-packs/packages/account/src/lib/models/tenant.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/npm/ng-packs/packages/account/src/lib/models/tenant.ts b/npm/ng-packs/packages/account/src/lib/models/tenant.ts index 732b0f6655..b1302d130c 100644 --- a/npm/ng-packs/packages/account/src/lib/models/tenant.ts +++ b/npm/ng-packs/packages/account/src/lib/models/tenant.ts @@ -1,4 +1,5 @@ export interface TenantIdResponse { success: boolean; tenantId: string; + name: string; } From 39d901f78a65f13667d5eb07e96849cd8393dc7a Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Thu, 7 May 2020 00:33:59 +0300 Subject: [PATCH 33/48] refactor: tenant-box.component --- .../tenant-box/tenant-box.component.html | 104 ++++++++++-------- .../tenant-box/tenant-box.component.ts | 97 +++++++--------- 2 files changed, 98 insertions(+), 103 deletions(-) diff --git a/npm/ng-packs/packages/account/src/lib/components/tenant-box/tenant-box.component.html b/npm/ng-packs/packages/account/src/lib/components/tenant-box/tenant-box.component.html index 007f45f5a9..e8b2df61e1 100644 --- a/npm/ng-packs/packages/account/src/lib/components/tenant-box/tenant-box.component.html +++ b/npm/ng-packs/packages/account/src/lib/components/tenant-box/tenant-box.component.html @@ -1,51 +1,63 @@ -
-
-
-
- {{ - 'AbpUiMultiTenancy::Tenant' | abpLocalization - }}
-
- - {{ tenantName || ('AbpUiMultiTenancy::NotSelected' | abpLocalization) }} - -
-
-
- {{ 'AbpUiMultiTenancy::Switch' | abpLocalization }} + +
+
+
+
+ {{ + 'AbpUiMultiTenancy::Tenant' | abpLocalization + }}
+
+ {{ currentTenant.name || ('AbpUiMultiTenancy::NotSelected' | abpLocalization) }} +
+
+
-
- - -
Switch Tenant
-
- -
-
-
- - + + +
Switch Tenant
+
+ + +
+
+ + +
+

{{ 'AbpUiMultiTenancy::SwitchTenantHint' | abpLocalization }}

-

{{ 'AbpUiMultiTenancy::SwitchTenantHint' | abpLocalization }}

-
- - - - - - {{ 'AbpTenantManagement::Save' | abpLocalization }} - - - + + + + + + {{ 'AbpTenantManagement::Save' | abpLocalization }} + + + + diff --git a/npm/ng-packs/packages/account/src/lib/components/tenant-box/tenant-box.component.ts b/npm/ng-packs/packages/account/src/lib/components/tenant-box/tenant-box.component.ts index fd66913ca5..92d35fcf2e 100644 --- a/npm/ng-packs/packages/account/src/lib/components/tenant-box/tenant-box.component.ts +++ b/npm/ng-packs/packages/account/src/lib/components/tenant-box/tenant-box.component.ts @@ -1,26 +1,26 @@ -import { ABP, SetTenant, SessionState, GetAppConfiguration } from '@abp/ng.core'; +import { ABP, GetAppConfiguration, SessionState, SetTenant } from '@abp/ng.core'; import { ToasterService } from '@abp/ng.theme.shared'; -import { Component, OnInit } from '@angular/core'; -import { Store } from '@ngxs/store'; -import { throwError } from 'rxjs'; -import { catchError, take, finalize, switchMap } from 'rxjs/operators'; -import snq from 'snq'; -import { AccountService } from '../../services/account.service'; +import { Component } from '@angular/core'; +import { Select, Store } from '@ngxs/store'; +import { Observable } from 'rxjs'; +import { finalize, take } from 'rxjs/operators'; import { Account } from '../../models/account'; +import { AccountService } from '../../services/account.service'; @Component({ selector: 'abp-tenant-box', templateUrl: './tenant-box.component.html', }) export class TenantBoxComponent - implements OnInit, Account.TenantBoxComponentInputs, Account.TenantBoxComponentOutputs { - tenant = {} as ABP.BasicItem; + implements Account.TenantBoxComponentInputs, Account.TenantBoxComponentOutputs { + @Select(SessionState.getTenant) + currentTenant$: Observable; - tenantName: string; + name: string; isModalVisible: boolean; - inProgress: boolean; + modalBusy: boolean; constructor( private store: Store, @@ -28,58 +28,41 @@ export class TenantBoxComponent private accountService: AccountService, ) {} - ngOnInit() { - this.tenant = this.store.selectSnapshot(SessionState.getTenant) || ({} as ABP.BasicItem); - this.tenantName = this.tenant.name || ''; - } - onSwitch() { + const tenant = this.store.selectSnapshot(SessionState.getTenant); + this.name = (tenant || ({} as ABP.BasicItem)).name; this.isModalVisible = true; } save() { - if (this.tenant.name && !this.inProgress) { - this.inProgress = true; - this.accountService - .findTenant(this.tenant.name) - .pipe( - finalize(() => (this.inProgress = false)), - take(1), - catchError(err => { - this.toasterService.error( - snq(() => err.error.error_description, 'AbpUi::DefaultErrorMessage'), - 'AbpUi::Error', - ); - return throwError(err); - }), - switchMap(({ success, tenantId }) => { - if (success) { - this.tenant = { - id: tenantId, - name: this.tenant.name, - }; - this.tenantName = this.tenant.name; - this.isModalVisible = false; - } else { - this.toasterService.error( - 'AbpUiMultiTenancy::GivenTenantIsNotAvailable', - 'AbpUi::Error', - { - messageLocalizationParams: [this.tenant.name], - }, - ); - this.tenant = {} as ABP.BasicItem; - this.tenantName = ''; - } - this.store.dispatch(new SetTenant(success ? this.tenant : null)); - return this.store.dispatch(new GetAppConfiguration()); - }), - ) - .subscribe(); - } else { - this.store.dispatch([new SetTenant(null), new GetAppConfiguration()]); - this.tenantName = null; + if (!this.name) { + this.setTenant(null); this.isModalVisible = false; + return; } + + this.modalBusy = true; + this.accountService + .findTenant(this.name) + .pipe(finalize(() => (this.modalBusy = false))) + .subscribe(({ success, tenantId: id, name }) => { + if (!success) { + this.showError(); + return; + } + + this.setTenant({ id, name }); + this.isModalVisible = false; + }); + } + + private setTenant(tenant: ABP.BasicItem) { + return this.store.dispatch([new SetTenant(tenant), new GetAppConfiguration()]); + } + + private showError() { + this.toasterService.error('AbpUiMultiTenancy::GivenTenantIsNotAvailable', 'AbpUi::Error', { + messageLocalizationParams: [this.name], + }); } } From a06ea3d106a838a676033f0fe334e3d9f385c0a2 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Thu, 7 May 2020 00:34:13 +0300 Subject: [PATCH 34/48] test: fix testing errors --- .../lib/tests/config-state.service.spec.ts | 20 +++++++++++++++++++ .../core/src/lib/tests/config.state.spec.ts | 20 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/npm/ng-packs/packages/core/src/lib/tests/config-state.service.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/config-state.service.spec.ts index ec8fb3ce67..d019bda84b 100644 --- a/npm/ng-packs/packages/core/src/lib/tests/config-state.service.spec.ts +++ b/npm/ng-packs/packages/core/src/lib/tests/config-state.service.spec.ts @@ -83,6 +83,26 @@ const CONFIG_STATE_DATA = { flagIcon: null, }, ], + currentCulture: { + displayName: 'English', + englishName: 'English', + threeLetterIsoLanguageName: 'eng', + twoLetterIsoLanguageName: 'en', + isRightToLeft: false, + cultureName: 'en', + name: 'en', + nativeName: 'English', + dateTimeFormat: { + calendarAlgorithmType: 'SolarCalendar', + dateTimeFormatLong: 'dddd, MMMM d, yyyy', + shortDatePattern: 'M/d/yyyy', + fullDateTimePattern: 'dddd, MMMM d, yyyy h:mm:ss tt', + dateSeparator: '/', + shortTimePattern: 'h:mm tt', + longTimePattern: 'h:mm:ss tt', + }, + }, + defaultResourceName: null, }, auth: { policies: { diff --git a/npm/ng-packs/packages/core/src/lib/tests/config.state.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/config.state.spec.ts index ae98855913..3df3abc63e 100644 --- a/npm/ng-packs/packages/core/src/lib/tests/config.state.spec.ts +++ b/npm/ng-packs/packages/core/src/lib/tests/config.state.spec.ts @@ -105,6 +105,26 @@ export const CONFIG_STATE_DATA = { flagIcon: null, }, ], + currentCulture: { + displayName: 'English', + englishName: 'English', + threeLetterIsoLanguageName: 'eng', + twoLetterIsoLanguageName: 'en', + isRightToLeft: false, + cultureName: 'en', + name: 'en', + nativeName: 'English', + dateTimeFormat: { + calendarAlgorithmType: 'SolarCalendar', + dateTimeFormatLong: 'dddd, MMMM d, yyyy', + shortDatePattern: 'M/d/yyyy', + fullDateTimePattern: 'dddd, MMMM d, yyyy h:mm:ss tt', + dateSeparator: '/', + shortTimePattern: 'h:mm tt', + longTimePattern: 'h:mm:ss tt', + }, + }, + defaultResourceName: null, }, auth: { policies: { From 6cccfb8995ade03cc93ce9c35b7fff9506aa91e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 7 May 2020 02:12:41 +0300 Subject: [PATCH 35/48] Update Entity-Framework-Core-Migrations.md --- docs/en/Entity-Framework-Core-Migrations.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/en/Entity-Framework-Core-Migrations.md b/docs/en/Entity-Framework-Core-Migrations.md index e0772579ec..00e791a94e 100644 --- a/docs/en/Entity-Framework-Core-Migrations.md +++ b/docs/en/Entity-Framework-Core-Migrations.md @@ -546,6 +546,8 @@ Entity extension system solves the main problem of the extra properties: It can All you need to do is to use the `ObjectExtensionManager` to define the extra property as explained above, in the `AppRole` example. Then you can continue to use the same `GetProperty` and `SetProperty` methods defined above to get/set the related property on the entity, but this time stored as a separate field in the database. +See the [entity extension system](Customizing-Application-Modules-Extending-Entities.md) for details. + ###### Creating a New Table Instead of creating a new entity and mapping to the same table, you can also create **your own table** to store your properties. You typically duplicate some values of the original entity. For example, you can add `Name` field to your own table which is a duplication of the `Name` field in the original table. From 27a75f108bfb604d20210678ed5598457b795b1a Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Thu, 7 May 2020 02:58:20 +0300 Subject: [PATCH 36/48] add LogoReverseUrl for black backgrounds --- .../Components/DefaultBrandingProvider.cs | 2 ++ .../Components/IBrandingProvider.cs | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Components/DefaultBrandingProvider.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Components/DefaultBrandingProvider.cs index eb13a1cea0..a85c03364c 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Components/DefaultBrandingProvider.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Components/DefaultBrandingProvider.cs @@ -7,5 +7,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Components public virtual string AppName => "MyApplication"; public virtual string LogoUrl => null; + + public virtual string LogoReverseUrl => null; } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Components/IBrandingProvider.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Components/IBrandingProvider.cs index 65e3cb8883..1c20f7fc6e 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Components/IBrandingProvider.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Components/IBrandingProvider.cs @@ -4,6 +4,14 @@ { string AppName { get; } + /// + /// Logo on white background + /// string LogoUrl { get; } + + /// + /// Logo on dark background + /// + string LogoReverseUrl { get; } } } From 0bb117de688517e9cdbce07ffbc14f7a3f0c67f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 7 May 2020 03:28:21 +0300 Subject: [PATCH 37/48] Don't make orderable for the extra property. --- .../libs/abp/aspnetcore-mvc-ui-theme-shared/ui-extensions.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/ui-extensions.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/ui-extensions.js index 19882fbc62..9ee545615c 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/ui-extensions.js +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/ui-extensions.js @@ -144,7 +144,8 @@ var tableProperty = properties[i]; columnConfigs.push({ title: localizeDisplayName(tableProperty.name, tableProperty.config.displayName), - data: "extraProperties." + tableProperty.name + data: "extraProperties." + tableProperty.name, + orderable: false }); } From 11c5cc358db9fc20c494de7c02fc3d4588dc95b9 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Thu, 7 May 2020 03:29:12 +0300 Subject: [PATCH 38/48] fix: swap nextValue and previousValue --- npm/packs/utils/projects/utils/src/lib/linked-list.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/npm/packs/utils/projects/utils/src/lib/linked-list.ts b/npm/packs/utils/projects/utils/src/lib/linked-list.ts index 5c8c41791f..5545f1db01 100644 --- a/npm/packs/utils/projects/utils/src/lib/linked-list.ts +++ b/npm/packs/utils/projects/utils/src/lib/linked-list.ts @@ -103,7 +103,7 @@ export class LinkedList { }; } - addAfter(value: T, nextValue: T): ListNode; + addAfter(value: T, previousValue: T): ListNode; addAfter(value: T, previousValue: any, compareFn: ListComparisonFn): ListNode; addAfter(value: T, previousValue: any, compareFn: ListComparisonFn = compare): ListNode { const previous = this.find(node => compareFn(node.value, previousValue)); @@ -173,7 +173,7 @@ export class LinkedList { return previous ? this.attachMany(values, previous, previous.next) : this.addManyTail(values); } - addManyBefore(values: T[], previousValue: T): ListNode[]; + addManyBefore(values: T[], nextValue: T): ListNode[]; addManyBefore(values: T[], nextValue: any, compareFn: ListComparisonFn): ListNode[]; addManyBefore( values: T[], From 58b88e2de42157703340bb9c7edcdb144a9d02b0 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Thu, 7 May 2020 05:00:50 +0300 Subject: [PATCH 39/48] fix: language changing error --- npm/ng-packs/packages/core/src/lib/core.module.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/npm/ng-packs/packages/core/src/lib/core.module.ts b/npm/ng-packs/packages/core/src/lib/core.module.ts index a8d808b885..c0223d28a6 100644 --- a/npm/ng-packs/packages/core/src/lib/core.module.ts +++ b/npm/ng-packs/packages/core/src/lib/core.module.ts @@ -28,11 +28,13 @@ import { LocalizationPipe, MockLocalizationPipe } from './pipes/localization.pip import { SortPipe } from './pipes/sort.pipe'; import { ConfigPlugin, NGXS_CONFIG_PLUGIN_OPTIONS } from './plugins/config.plugin'; import { LocaleProvider } from './providers/locale.provider'; +import { LocalizationService } from './services/localization.service'; import { ConfigState } from './states/config.state'; import { ProfileState } from './states/profile.state'; import { ReplaceableComponentsState } from './states/replaceable-components.state'; import { SessionState } from './states/session.state'; import { CORE_OPTIONS } from './tokens/options.token'; +import { noop } from './utils/common-utils'; import './utils/date-extensions'; import { getInitialData, localeInitializer } from './utils/initial-utils'; @@ -187,6 +189,12 @@ export class CoreModule { deps: [Injector], useFactory: localeInitializer, }, + { + provide: APP_INITIALIZER, + multi: true, + deps: [LocalizationService], + useFactory: noop, + }, ...OAuthModule.forRoot().providers, { provide: OAuthStorage, useFactory: storageFactory }, ], From dee71ed0bf6a143f4509d8e33ed4b5fb088f970e Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Thu, 7 May 2020 05:01:04 +0300 Subject: [PATCH 40/48] fix: cyclic dependency error --- .../packages/theme-shared/src/lib/theme-shared.module.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts index 8134a44be4..5d53ed2124 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts @@ -92,6 +92,8 @@ export function appendScript(injector: Injector) { ], }) export class ThemeSharedModule { + constructor(private errorHandler: ErrorHandler) {} + static forRoot(options = {} as RootParams): ModuleWithProviders { return { ngModule: ThemeSharedModule, @@ -102,12 +104,6 @@ export class ThemeSharedModule { deps: [THEME_SHARED_APPEND_CONTENT], useFactory: noop, }, - { - provide: APP_INITIALIZER, - multi: true, - deps: [ErrorHandler], - useFactory: noop, - }, { provide: HTTP_ERROR_CONFIG, useValue: options.httpErrorConfig }, { provide: 'HTTP_ERROR_CONFIG', From 8155027fc25c327ab195567bd34b2f0ba5149b96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 7 May 2020 05:03:06 +0300 Subject: [PATCH 41/48] Resolved #3740: The virtual file system cannot handle static asset files well. --- .../WebContentFileProvider.cs | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/VirtualFileSystem/WebContentFileProvider.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/VirtualFileSystem/WebContentFileProvider.cs index 1b71dad8cb..4fab6d0001 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/VirtualFileSystem/WebContentFileProvider.cs +++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/VirtualFileSystem/WebContentFileProvider.cs @@ -1,8 +1,10 @@ using System; +using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.FileProviders; +using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Options; using Microsoft.Extensions.Primitives; using Volo.Abp.DependencyInjection; @@ -91,9 +93,27 @@ namespace Volo.Abp.AspNetCore.VirtualFileSystem protected virtual IFileProvider CreateFileProvider() { - return new CompositeFileProvider( + var fileProviders = new List() + { new PhysicalFileProvider(_hostingEnvironment.ContentRootPath), _virtualFileProvider + }; + + if (_hostingEnvironment.IsDevelopment() && + _hostingEnvironment.WebRootFileProvider is CompositeFileProvider compositeFileProvider) + { + var staticWebAssetsFileProvider = compositeFileProvider + .FileProviders + .FirstOrDefault(f => f.GetType().Name.Equals("StaticWebAssetsFileProvider")); + + if (staticWebAssetsFileProvider != null) + { + fileProviders.Add(staticWebAssetsFileProvider); + } + } + + return new CompositeFileProvider( + fileProviders ); } From cd9b14f1921ecdc78ae0db077de4cfc3f10f4a29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 7 May 2020 05:19:23 +0300 Subject: [PATCH 42/48] Fix typo --- npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts b/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts index 827983b15f..0441204463 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts @@ -28,7 +28,7 @@ export const LAYOUTS = [ApplicationLayoutComponent, AccountLayoutComponent, Empt email: 'AbpAccount::ThisFieldIsNotAValidEmailAddress.', max: 'AbpAccount::ThisFieldMustBeBetween{0}And{1}[{{ min }},{{ max }}]', maxlength: - 'AbpAccount::ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthoOf{0}[{{ requiredLength }}]', + 'AbpAccount::ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthOf{0}[{{ requiredLength }}]', min: 'AbpAccount::ThisFieldMustBeBetween{0}And{1}[{{ min }},{{ max }}]', minlength: 'AbpAccount::ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}[{{ requiredLength }}]', From 43d1d4ac8fbea6b5dc8623ede8748ffff099f977 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 7 May 2020 05:26:21 +0300 Subject: [PATCH 43/48] Fix BrandingProvider. --- .../applications/AuthServer.Host/BrandingProvider.cs | 5 ++--- .../applications/BackendAdminApp.Host/BrandingProvider.cs | 5 ++--- .../applications/PublicWebSite.Host/BrandingProvider.cs | 5 ++--- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/BrandingProvider.cs b/samples/MicroserviceDemo/applications/AuthServer.Host/BrandingProvider.cs index 820fec9adf..59dacdcfd3 100644 --- a/samples/MicroserviceDemo/applications/AuthServer.Host/BrandingProvider.cs +++ b/samples/MicroserviceDemo/applications/AuthServer.Host/BrandingProvider.cs @@ -3,9 +3,8 @@ using Volo.Abp.DependencyInjection; namespace AuthServer.Host { - public class BrandingProvider : IBrandingProvider, ISingletonDependency + public class BrandingProvider : DefaultBrandingProvider, ISingletonDependency { - public string AppName => "Authentication Server"; - public string LogoUrl => null; + public override string AppName => "Authentication Server"; } } diff --git a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BrandingProvider.cs b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BrandingProvider.cs index b0f5b10dd2..86475698ad 100644 --- a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BrandingProvider.cs +++ b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BrandingProvider.cs @@ -3,9 +3,8 @@ using Volo.Abp.DependencyInjection; namespace BackendAdminApp.Host { - public class BrandingProvider : IBrandingProvider, ISingletonDependency + public class BrandingProvider : DefaultBrandingProvider, ISingletonDependency { - public string AppName => "Backend Admin App"; - public string LogoUrl => null; + public override string AppName => "Backend Admin App"; } } diff --git a/samples/MicroserviceDemo/applications/PublicWebSite.Host/BrandingProvider.cs b/samples/MicroserviceDemo/applications/PublicWebSite.Host/BrandingProvider.cs index 57f7a94f27..b068361860 100644 --- a/samples/MicroserviceDemo/applications/PublicWebSite.Host/BrandingProvider.cs +++ b/samples/MicroserviceDemo/applications/PublicWebSite.Host/BrandingProvider.cs @@ -3,9 +3,8 @@ using Volo.Abp.DependencyInjection; namespace PublicWebSite.Host { - public class BrandingProvider : IBrandingProvider, ISingletonDependency + public class BrandingProvider : DefaultBrandingProvider, ISingletonDependency { - public string AppName => "Public Web Site"; - public string LogoUrl => null; + public override string AppName => "Public Web Site"; } } From 551b85b7669da629fd1527472363fd067c138b79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 7 May 2020 05:54:18 +0300 Subject: [PATCH 44/48] Add error pages. --- .../MyProjectNameHttpApiHostModule.cs | 11 +++++++++++ .../MyProjectNameIdentityServerModule.cs | 10 ++++++++++ 2 files changed, 21 insertions(+) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs index 27a5485c05..ad2df2e528 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs @@ -18,6 +18,7 @@ using Volo.Abp.Account.Web; using Volo.Abp.AspNetCore.Authentication.JwtBearer; using Volo.Abp.AspNetCore.MultiTenancy; using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; using Volo.Abp.AspNetCore.Serilog; using Volo.Abp.Autofac; using Volo.Abp.Localization; @@ -152,6 +153,16 @@ namespace MyCompanyName.MyProjectName public override void OnApplicationInitialization(ApplicationInitializationContext context) { var app = context.GetApplicationBuilder(); + var env = context.GetEnvironment(); + + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + else + { + app.UseErrorPage(); + } app.UseCorrelationId(); app.UseVirtualFiles(); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs index 9a17f5e3ba..f7ef3f23eb 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs @@ -139,6 +139,16 @@ namespace MyCompanyName.MyProjectName public override void OnApplicationInitialization(ApplicationInitializationContext context) { var app = context.GetApplicationBuilder(); + var env = context.GetEnvironment(); + + if (env.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + else + { + app.UseErrorPage(); + } app.UseCorrelationId(); app.UseVirtualFiles(); From 8e9050e6cd5d2ac4c023b96e1e27ccb0436ce76e Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Thu, 7 May 2020 11:07:09 +0300 Subject: [PATCH 45/48] feat(theme-basic): create logo component --- .../src/lib/components/logo/logo.component.ts | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 npm/ng-packs/packages/theme-basic/src/lib/components/logo/logo.component.ts diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/logo/logo.component.ts b/npm/ng-packs/packages/theme-basic/src/lib/components/logo/logo.component.ts new file mode 100644 index 0000000000..6f8365c3e3 --- /dev/null +++ b/npm/ng-packs/packages/theme-basic/src/lib/components/logo/logo.component.ts @@ -0,0 +1,29 @@ +import { Config, ConfigState } from '@abp/ng.core'; +import { Component } from '@angular/core'; +import { Store } from '@ngxs/store'; + +@Component({ + selector: 'abp-logo', + template: ` + + + + + + {{ appInfo.name }} + + `, +}) +export class LogoComponent { + get appInfo(): Config.Application { + return this.store.selectSnapshot(ConfigState.getApplicationInfo); + } + + constructor(private store: Store) {} +} From 99fb9b6e59a990c46ec1d54cedbec9a5fe45ee23 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Thu, 7 May 2020 11:07:23 +0300 Subject: [PATCH 46/48] feat(theme-basic): create nav-items component --- .../nav-items/nav-items.component.html | 80 +++++++++++ .../nav-items/nav-items.component.ts | 125 ++++++++++++++++++ 2 files changed, 205 insertions(+) create mode 100644 npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/nav-items.component.html create mode 100644 npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/nav-items.component.ts diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/nav-items.component.html b/npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/nav-items.component.html new file mode 100644 index 0000000000..94d7954570 --- /dev/null +++ b/npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/nav-items.component.html @@ -0,0 +1,80 @@ + + + + + + + + + diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/nav-items.component.ts b/npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/nav-items.component.ts new file mode 100644 index 0000000000..7bae923989 --- /dev/null +++ b/npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/nav-items.component.ts @@ -0,0 +1,125 @@ +import { + Component, + AfterViewInit, + TrackByFunction, + TemplateRef, + ViewChild, + OnDestroy, + Input, +} from '@angular/core'; +import { + ABP, + takeUntilDestroy, + SetLanguage, + AuthService, + ConfigState, + ApplicationConfiguration, + SessionState, +} from '@abp/ng.core'; +import { LayoutState } from '../../states/layout.state'; +import { Store, Select } from '@ngxs/store'; +import { eNavigationElementNames } from '../../enums/navigation-element-names'; +import { AddNavigationElement } from '../../actions/layout.actions'; +import { map, filter } from 'rxjs/operators'; +import { Observable } from 'rxjs'; +import { Layout } from '../../models/layout'; +import { Navigate, RouterState } from '@ngxs/router-plugin'; +import snq from 'snq'; +import compare from 'just-compare'; + +@Component({ + selector: 'abp-nav-items', + templateUrl: 'nav-items.component.html', +}) +export class NavItemsComponent implements AfterViewInit, OnDestroy { + @Select(LayoutState.getNavigationElements) + navElements$: Observable; + + @Select(ConfigState.getOne('currentUser')) + currentUser$: Observable; + + @Select(ConfigState.getDeep('localization.languages')) + languages$: Observable; + + @ViewChild('currentUser', { static: false, read: TemplateRef }) + currentUserRef: TemplateRef; + + @ViewChild('language', { static: false, read: TemplateRef }) + languageRef: TemplateRef; + + @Input() + smallScreen: boolean; + + rightPartElements: TemplateRef[] = []; + + trackByFn: TrackByFunction = (_, element) => element; + + get defaultLanguage$(): Observable { + return this.languages$.pipe( + map( + languages => + snq( + () => languages.find(lang => lang.cultureName === this.selectedLangCulture).displayName, + ), + '', + ), + ); + } + + get dropdownLanguages$(): Observable { + return this.languages$.pipe( + map( + languages => + snq(() => languages.filter(lang => lang.cultureName !== this.selectedLangCulture)), + [], + ), + ); + } + + get selectedLangCulture(): string { + return this.store.selectSnapshot(SessionState.getLanguage); + } + + constructor(private store: Store, private authService: AuthService) {} + + ngAfterViewInit() { + const navigations = this.store + .selectSnapshot(LayoutState.getNavigationElements) + .map(({ name }) => name); + + if (navigations.indexOf(eNavigationElementNames.Language) < 0) { + this.store.dispatch( + new AddNavigationElement([ + { element: this.languageRef, order: 4, name: eNavigationElementNames.Language }, + { element: this.currentUserRef, order: 5, name: eNavigationElementNames.User }, + ]), + ); + } + + this.navElements$ + .pipe( + map(elements => elements.map(({ element }) => element)), + filter(elements => !compare(elements, this.rightPartElements)), + takeUntilDestroy(this), + ) + .subscribe(elements => { + setTimeout(() => (this.rightPartElements = elements), 0); + }); + } + + ngOnDestroy() {} + + onChangeLang(cultureName: string) { + this.store.dispatch(new SetLanguage(cultureName)); + } + + logout() { + this.authService.logout().subscribe(() => { + this.store.dispatch( + new Navigate(['/'], null, { + state: { redirectUrl: this.store.selectSnapshot(RouterState).state.url }, + }), + ); + }); + } +} From 5bb96ddc5bffbf8076277f4021af6ab6641d3dbc Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Thu, 7 May 2020 11:07:46 +0300 Subject: [PATCH 47/48] feat(theme-basic): create routes component --- .../application-layout.component.html | 219 ++---------------- .../application-layout.component.ts | 160 +------------ .../theme-basic/src/lib/components/index.ts | 3 + .../components/routes/routes.component.html | 111 +++++++++ .../lib/components/routes/routes.component.ts | 51 ++++ .../theme-basic/src/lib/enums/components.ts | 3 + .../theme-basic/src/lib/theme-basic.module.ts | 13 +- 7 files changed, 202 insertions(+), 358 deletions(-) create mode 100644 npm/ng-packs/packages/theme-basic/src/lib/components/routes/routes.component.html create mode 100644 npm/ng-packs/packages/theme-basic/src/lib/components/routes/routes.component.ts diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.html b/npm/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.html index 438c315c16..1faaafaa58 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.html +++ b/npm/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.html @@ -3,16 +3,8 @@ id="main-navbar" style="min-height: 4rem;" > - @@ -160,81 +45,3 @@ >
- - - {{ appInfo.name }} - - - - - - - - - diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.ts b/npm/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.ts index 75ab177fb4..e996d2f786 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.ts @@ -1,34 +1,10 @@ -import { - ABP, - ApplicationConfiguration, - AuthService, - Config, - ConfigState, - eLayoutType, - SessionState, - SetLanguage, - takeUntilDestroy, -} from '@abp/ng.core'; +import { eLayoutType, takeUntilDestroy } from '@abp/ng.core'; import { collapseWithMargin, slideFromBottom } from '@abp/ng.theme.shared'; -import { - AfterViewInit, - Component, - OnDestroy, - Renderer2, - TemplateRef, - TrackByFunction, - ViewChild, -} from '@angular/core'; -import { Navigate, RouterState } from '@ngxs/router-plugin'; -import { Select, Store } from '@ngxs/store'; -import compare from 'just-compare'; -import { fromEvent, Observable } from 'rxjs'; -import { debounceTime, filter, map } from 'rxjs/operators'; -import snq from 'snq'; -import { AddNavigationElement } from '../../actions'; -import { Layout } from '../../models/layout'; -import { LayoutState } from '../../states'; -import { eNavigationElementNames } from '../../enums/navigation-element-names'; +import { AfterViewInit, Component, OnDestroy } from '@angular/core'; +import { Store } from '@ngxs/store'; +import { fromEvent } from 'rxjs'; +import { debounceTime } from 'rxjs/operators'; +import { eThemeBasicComponents } from '../../enums/components'; @Component({ selector: 'abp-layout-application', @@ -39,75 +15,19 @@ export class ApplicationLayoutComponent implements AfterViewInit, OnDestroy { // required for dynamic component static type = eLayoutType.application; - @Select(ConfigState.getOne('routes')) - routes$: Observable; - - @Select(ConfigState.getOne('currentUser')) - currentUser$: Observable; - - @Select(ConfigState.getDeep('localization.languages')) - languages$: Observable; - - @Select(LayoutState.getNavigationElements) - navElements$: Observable; - - @ViewChild('currentUser', { static: false, read: TemplateRef }) - currentUserRef: TemplateRef; - - @ViewChild('language', { static: false, read: TemplateRef }) - languageRef: TemplateRef; - isDropdownChildDynamic: boolean; isCollapsed = true; smallScreen: boolean; // do not set true or false - get appInfo(): Config.Application { - return this.store.selectSnapshot(ConfigState.getApplicationInfo); - } - - get visibleRoutes$(): Observable { - return this.routes$.pipe(map(routes => getVisibleRoutes(routes))); - } - - get defaultLanguage$(): Observable { - return this.languages$.pipe( - map( - languages => - snq( - () => languages.find(lang => lang.cultureName === this.selectedLangCulture).displayName, - ), - '', - ), - ); - } - - get dropdownLanguages$(): Observable { - return this.languages$.pipe( - map( - languages => - snq(() => languages.filter(lang => lang.cultureName !== this.selectedLangCulture)), - [], - ), - ); - } - - get selectedLangCulture(): string { - return this.store.selectSnapshot(SessionState.getLanguage); - } - - rightPartElements: TemplateRef[] = []; + logoComponentKey = eThemeBasicComponents.Logo; - trackByFn: TrackByFunction = (_, item) => item.name; + routesComponentKey = eThemeBasicComponents.Routes; - trackElementByFn: TrackByFunction = (_, element) => element; + navItemsComponentKey = eThemeBasicComponents.NavItems; - constructor( - private store: Store, - private renderer: Renderer2, - private authService: AuthService, - ) {} + constructor(private store: Store) {} private checkWindowWidth() { setTimeout(() => { @@ -128,29 +48,6 @@ export class ApplicationLayoutComponent implements AfterViewInit, OnDestroy { } ngAfterViewInit() { - const navigations = this.store - .selectSnapshot(LayoutState.getNavigationElements) - .map(({ name }) => name); - - if (navigations.indexOf(eNavigationElementNames.Language) < 0) { - this.store.dispatch( - new AddNavigationElement([ - { element: this.languageRef, order: 4, name: eNavigationElementNames.Language }, - { element: this.currentUserRef, order: 5, name: eNavigationElementNames.User }, - ]), - ); - } - - this.navElements$ - .pipe( - map(elements => elements.map(({ element }) => element)), - filter(elements => !compare(elements, this.rightPartElements)), - takeUntilDestroy(this), - ) - .subscribe(elements => { - setTimeout(() => (this.rightPartElements = elements), 0); - }); - this.checkWindowWidth(); fromEvent(window, 'resize') @@ -161,41 +58,4 @@ export class ApplicationLayoutComponent implements AfterViewInit, OnDestroy { } ngOnDestroy() {} - - onChangeLang(cultureName: string) { - this.store.dispatch(new SetLanguage(cultureName)); - } - - logout() { - this.authService.logout().subscribe(() => { - this.store.dispatch( - new Navigate(['/'], null, { - state: { redirectUrl: this.store.selectSnapshot(RouterState).state.url }, - }), - ); - }); - } - - openChange(event: boolean, childrenContainer: HTMLDivElement) { - if (!event) { - Object.keys(childrenContainer.style) - .filter(key => Number.isInteger(+key)) - .forEach(key => { - this.renderer.removeStyle(childrenContainer, childrenContainer.style[key]); - }); - this.renderer.removeStyle(childrenContainer, 'left'); - } - } -} - -function getVisibleRoutes(routes: ABP.FullRoute[]) { - return routes.reduce((acc, val) => { - if (val.invisible) return acc; - - if (val.children && val.children.length) { - val.children = getVisibleRoutes(val.children); - } - - return [...acc, val]; - }, []); } diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/index.ts b/npm/ng-packs/packages/theme-basic/src/lib/components/index.ts index cd1e7e8757..06b6d5339c 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/components/index.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/components/index.ts @@ -1,4 +1,7 @@ export * from './account-layout/account-layout.component'; export * from './application-layout/application-layout.component'; export * from './empty-layout/empty-layout.component'; +export * from './logo/logo.component'; +export * from './nav-items/nav-items.component'; +export * from './routes/routes.component'; export * from './validation-error/validation-error.component'; diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/routes/routes.component.html b/npm/ng-packs/packages/theme-basic/src/lib/components/routes/routes.component.html new file mode 100644 index 0000000000..226e19c39e --- /dev/null +++ b/npm/ng-packs/packages/theme-basic/src/lib/components/routes/routes.component.html @@ -0,0 +1,111 @@ + diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/routes/routes.component.ts b/npm/ng-packs/packages/theme-basic/src/lib/components/routes/routes.component.ts new file mode 100644 index 0000000000..22b30426fa --- /dev/null +++ b/npm/ng-packs/packages/theme-basic/src/lib/components/routes/routes.component.ts @@ -0,0 +1,51 @@ +import { Component, OnInit, TrackByFunction, Input, Renderer2 } from '@angular/core'; +import { Observable } from 'rxjs'; +import { ABP, ConfigState } from '@abp/ng.core'; +import { map } from 'rxjs/operators'; +import { Select } from '@ngxs/store'; + +@Component({ + selector: 'abp-routes', + templateUrl: 'routes.component.html', +}) +export class RoutesComponent { + @Select(ConfigState.getOne('routes')) + routes$: Observable; + + @Input() + smallScreen: boolean; + + @Input() + isDropdownChildDynamic: boolean; + + get visibleRoutes$(): Observable { + return this.routes$.pipe(map(routes => getVisibleRoutes(routes))); + } + + trackByFn: TrackByFunction = (_, item) => item.name; + + constructor(private renderer: Renderer2) {} + + openChange(event: boolean, childrenContainer: HTMLDivElement) { + if (!event) { + Object.keys(childrenContainer.style) + .filter(key => Number.isInteger(+key)) + .forEach(key => { + this.renderer.removeStyle(childrenContainer, childrenContainer.style[key]); + }); + this.renderer.removeStyle(childrenContainer, 'left'); + } + } +} + +function getVisibleRoutes(routes: ABP.FullRoute[]) { + return routes.reduce((acc, val) => { + if (val.invisible) return acc; + + if (val.children && val.children.length) { + val.children = getVisibleRoutes(val.children); + } + + return [...acc, val]; + }, []); +} diff --git a/npm/ng-packs/packages/theme-basic/src/lib/enums/components.ts b/npm/ng-packs/packages/theme-basic/src/lib/enums/components.ts index e773e17464..ab7aa86942 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/enums/components.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/enums/components.ts @@ -2,4 +2,7 @@ export const enum eThemeBasicComponents { ApplicationLayout = 'Theme.ApplicationLayoutComponent', AccountLayout = 'Theme.AccountLayoutComponent', EmptyLayout = 'Theme.EmptyLayoutComponent', + Logo = 'Theme.LogoComponent', + Routes = 'Theme.RoutesComponent', + NavItems = 'Theme.NavItemsComponent', } diff --git a/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts b/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts index 827983b15f..f7625b7cf9 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts +++ b/npm/ng-packs/packages/theme-basic/src/lib/theme-basic.module.ts @@ -10,11 +10,20 @@ import { EmptyLayoutComponent } from './components/empty-layout/empty-layout.com import { LayoutState } from './states/layout.state'; import { ValidationErrorComponent } from './components/validation-error/validation-error.component'; import { InitialService } from './services/initial.service'; +import { LogoComponent } from './components/logo/logo.component'; +import { RoutesComponent } from './components/routes/routes.component'; +import { NavItemsComponent } from './components/nav-items/nav-items.component'; export const LAYOUTS = [ApplicationLayoutComponent, AccountLayoutComponent, EmptyLayoutComponent]; @NgModule({ - declarations: [...LAYOUTS, ValidationErrorComponent], + declarations: [ + ...LAYOUTS, + ValidationErrorComponent, + LogoComponent, + NavItemsComponent, + RoutesComponent, + ], imports: [ CoreModule, ThemeSharedModule, @@ -38,7 +47,7 @@ export const LAYOUTS = [ApplicationLayoutComponent, AccountLayoutComponent, Empt errorTemplate: ValidationErrorComponent, }), ], - exports: [...LAYOUTS], + exports: [...LAYOUTS, LogoComponent, ValidationErrorComponent], entryComponents: [...LAYOUTS, ValidationErrorComponent], }) export class ThemeBasicModule { From d288ab381df423d7b4f6e31265ac7fc813420606 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Thu, 7 May 2020 11:54:23 +0300 Subject: [PATCH 48/48] fix(theme-basic): small screen dropdown problem --- .../src/lib/components/nav-items/nav-items.component.html | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/nav-items.component.html b/npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/nav-items.component.html index 94d7954570..cb86773db5 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/nav-items.component.html +++ b/npm/ng-packs/packages/theme-basic/src/lib/components/nav-items/nav-items.component.html @@ -2,10 +2,11 @@ - +