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