diff --git a/.github/ISSUE_TEMPLATE/03_studio.yml b/.github/ISSUE_TEMPLATE/03_studio.yml
new file mode 100644
index 0000000000..c6839403d7
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/03_studio.yml
@@ -0,0 +1,94 @@
+name: đ€ ABP Studio
+description: Create a report to help us improve the ABP Studio
+labels: [studio]
+body:
+ - type: markdown
+ attributes:
+ value: |
+ We welcome bug reports! This template will help us gather the information we need to start the triage process.
+
+ Please keep in mind that the GitHub issue tracker is not intended as a general support forum, but for reporting **non-security** bugs and feature requests.
+ If you believe you have an issue that affects the SECURITY of the platform, please do NOT create an issue and instead email your issue details to info@abp.io.
+ For other types of questions, consider using [StackOverflow](https://stackoverflow.com/questions/tagged/abp).
+ - type: checkboxes
+ id: searched
+ attributes:
+ label: Is there an existing issue for this?
+ description: Please search to see if an issue already exists for the bug you encountered or feature request ([abp/issues](https://github.com/abpframework/abp/issues?q=is%3Aopen+is%3Aissue+label%3Astudio)).
+ options:
+ - label: I have searched the existing issues
+ required: true
+ - type: textarea
+ id: background
+ attributes:
+ label: Description
+ description: Please share a clear and concise description of the problem.
+ placeholder: Description
+ validations:
+ required: true
+ - type: markdown
+ attributes:
+ value: |
+ ## Setup
+ Please provide more information on your ABP Studio setup.
+ - type: input
+ id: version
+ attributes:
+ label: Version
+ description: Which version of ABP Studio are you using?
+ placeholder: Version
+ validations:
+ required: true
+ - type: dropdown
+ id: Operation-System
+ attributes:
+ label: Operation System
+ description: What is the operation system of the computer?
+ options:
+ - Windows (Default)
+ - Linux
+ - macOS
+ - Others
+ validations:
+ required: true
+ - type: textarea
+ id: solution-config
+ attributes:
+ label: Solution Configuration
+ description: |
+ If there is an open solution, what are the configurations of the solution?
+ đ§ Hint: You can see all the information about your solution from the configuration window, which opens when you right-click on the [solution](https://abp.io/docs/latest/studio/solution-explorer#solution) and click on the `Solution Configuration` button.
+ placeholder: |
+ - **Template**: app
+ - **Created ABP Studio Version**: 0.7.9
+ - **Tiered**: No
+ - **UI Framework**: mvc
+ - **Theme**: leptonx
+ - **Theme Style**: system
+ - **Database Provider**: ef
+ - **Database Management System**: sqlserver
+ - **Separate Tenant Schema**: No
+ - **Mobile Framework**: none
+ - **Public Website**: No
+ - **Optional Modules**:
+ * GDPR
+ * TextTemplateManagement
+ * LanguageManagement
+ * AuditLogging
+ * SaaS
+ * OpenIddictAdmin
+ validations:
+ required: false
+ - type: markdown
+ attributes:
+ value: |
+ ---
+ - type: textarea
+ id: other-info
+ attributes:
+ label: Other information
+ description: |
+ If you have an idea where the problem might lie, let us know that here. Please include any pointers to code, relevant changes, or related issues you know of.
+ placeholder: Other information
+ validations:
+ required: false
diff --git a/.github/ISSUE_TEMPLATE/03_article_request.yml b/.github/ISSUE_TEMPLATE/04_article_request.yml
similarity index 100%
rename from .github/ISSUE_TEMPLATE/03_article_request.yml
rename to .github/ISSUE_TEMPLATE/04_article_request.yml
diff --git a/.github/ISSUE_TEMPLATE/04_performance_issue.md b/.github/ISSUE_TEMPLATE/05_performance_issue.md
similarity index 100%
rename from .github/ISSUE_TEMPLATE/04_performance_issue.md
rename to .github/ISSUE_TEMPLATE/05_performance_issue.md
diff --git a/.github/ISSUE_TEMPLATE/05_blank_issue.md b/.github/ISSUE_TEMPLATE/06_blank_issue.md
similarity index 100%
rename from .github/ISSUE_TEMPLATE/05_blank_issue.md
rename to .github/ISSUE_TEMPLATE/06_blank_issue.md
diff --git a/Directory.Packages.props b/Directory.Packages.props
index b43886f7cf..8f741e93b8 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -6,7 +6,7 @@
-
+
@@ -38,6 +38,7 @@
+
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/sv.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/sv.json
new file mode 100644
index 0000000000..d5b7e713d9
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/sv.json
@@ -0,0 +1,18 @@
+{
+ "culture": "sv",
+ "texts": {
+ "Account": "ABP-konto - Logga in och registrera dig | ABP.IO",
+ "Welcome": "VĂ€lkommen",
+ "UseOneOfTheFollowingLinksToContinue": "AnvÀnd nÄgon av följande lÀnkar för att fortsÀtta",
+ "FrameworkHomePage": "Ramverkets startsida",
+ "FrameworkDocumentation": "Dokumentation av ramverk",
+ "OfficialBlog": "Officiell blogg",
+ "CommercialHomePage": "Kommersiell hemsida",
+ "CommercialSupportWebSite": "Webbplats för kommersiellt stöd",
+ "CommunityWebSite": "ABP:s gemensamma webbplats",
+ "ManageAccount": "Mitt konto | ABP.IO",
+ "ManageYourProfile": "Hantera din profil",
+ "ReturnToApplication": "Ă
tergÄ till ansökan",
+ "IdentityUserNotAvailable:Deleted": "Den hÀr e-postadressen Àr inte tillgÀnglig. Anledning till detta: Redan raderad."
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en-GB.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en-GB.json
index 2429f52eef..7e2642e88b 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en-GB.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en-GB.json
@@ -15,6 +15,7 @@
"Permission:Maintain": "Maintain",
"Permission:ClearCaches": "Clear caches",
"Permission:Modules": "Modules",
+ "Permission:UserDownloads": "User Downloads",
"Permission:Packages": "Packages",
"Permission:Edit": "Edit",
"Permission:Delete": "Delete",
@@ -32,12 +33,15 @@
"Name": "Name",
"DisplayName": "Display name",
"ShortDescription": "Short description",
+ "LongDescription": "Long description",
"NameFilter": "Name",
"CreationTime": "Creation time",
- "IsPro": "Is pro",
+ "IsPro": "Pro package",
"ShowOnModuleList": "Show in module list",
"EfCoreConfigureMethodName": "Configure method name",
"IsProFilter": "Is pro",
+ "ShowOnModuleFilter": "Show on module list",
+ "ShowOnModuleListFilter": "Show on module list",
"ApplicationType": "Application type",
"Target": "Target",
"TargetFilter": "Target",
@@ -56,8 +60,10 @@
"Refresh": "Refresh",
"NpmPackages": "NPM Packages",
"NugetPackages": "Nuget Packages",
+ "NuGetPackages": "NuGet Packages",
"NpmPackageCount": "NPM Package Count",
"NugetPackageCount": "Nuget Package Count",
+ "NuGetPackageCount": "NuGet Package Count",
"Module": "Modules",
"ModuleInfo": "Module info",
"CreateANpmPackage": "Create a NPM package",
@@ -102,6 +108,9 @@
"DoYouWantToCreateNewUser": "Do you want to create new user?",
"MasterModules": "Master Modules",
"OrganizationName": "Organisation name",
+ "DownloadType": "Download type",
+ "UserDownloads": "User Downloads",
+ "AcceptNewsletter": "Accept newsletter",
"CreationDate": "Creation date",
"LicenseStartDate": "License start date",
"LicenseEndDate": "License end date",
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
index 76a35b48ff..9fb30d3fda 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
@@ -28,17 +28,21 @@
"Menu:DiscountRequests": "Discount Requests",
"NpmPackageDeletionWarningMessage": "This NPM Package will be deleted. Do you confirm that?",
"NugetPackageDeletionWarningMessage": "This Nuget Package will be deleted. Do you confirm that?",
+ "NuGetPackages": "NuGet Packages",
"ModuleDeletionWarningMessage": "This Module will be deleted. Do you confirm that?",
"Name": "Name",
"DisplayName": "Display name",
"ShortDescription": "Short description",
+ "LongDescription": "Long description",
"NameFilter": "Name",
"CreationTime": "Creation time",
- "IsPro": "Is pro",
+ "IsPro": "Pro package",
"IsFreeToActiveLicenseOwners": "Free to license owners",
"ShowOnModuleList": "Show on module list",
"EfCoreConfigureMethodName": "Configure method name",
- "IsProFilter": "Is pro",
+ "IsProFilter": "Pro package",
+ "ShowOnModuleFilter": "Show on module list",
+ "ShowOnModuleListFilter": "Show on module list",
"ApplicationType": "Application type",
"Target": "Target",
"TargetFilter": "Target",
@@ -59,6 +63,7 @@
"NugetPackages": "Nuget Packages",
"NpmPackageCount": "NPM Package Count",
"NugetPackageCount": "Nuget Package Count",
+ "NuGetPackageCount": "NuGet Package Count",
"Module": "Modules",
"ModuleInfo": "Module info",
"CreateANpmPackage": "Create a NPM package",
@@ -120,8 +125,15 @@
"PurchaseOrderNo": "Purchase order no",
"QuotationDate": "Quotation date",
"CompanyName": "Company name",
+ "DownloadType": "Download type",
+ "UserDownloads": "User Downloads",
+ "AcceptNewsletter": "Accept newsletter",
"CompanyAddress": "Company address",
"Price": "Price",
+ "Unknown": "Unknown",
+ "DddEBook": "Ddd EBook",
+ "MasteringAbpFrameworkEBook": "Mastering AbpFramework EBook",
+ "MicroserviceEBook": "Microservice EBook",
"DiscountText": "Discount text",
"DiscountQuantity": "Discount quantity",
"DiscountPrice": "Discount price",
@@ -284,6 +296,7 @@
"Menu:Quotation": "Quotation",
"Menu:Invoice": "Invoice",
"Menu:Quotation/Invoice": "Quotation/Invoice",
+ "Menu:UserDownloads": "User Downloads",
"Menu:PaymentRequests": "Payment Requests",
"Permission:PaymentRequests": "Payment Requests",
"PaymentRequests": "Payment Requests",
@@ -457,7 +470,7 @@
"MoveWaitList": "Move to wait list",
"CommunityLinkTitle": "Open on the community website",
"CommunityLink": "Link",
- "IpAddress": "Ip Address",
+ "IpAddress": "IP Address",
"ReloadFromSource": "Reload From the Source",
"ReloadFromSourceConfirmationMessage": "This post will be refreshed from \"{0}\". Do you want to continue?",
"UnitPrice": "Unit Price",
@@ -566,6 +579,7 @@
"AllowAbpStudioBetaAccess": "Allow ABP Studio Beta Access",
"TotalQuestionCanNotBeNullMessage": "Total Question can not be null",
"Permission:OrganizationAutoRenewalPayments": "Organization Auto Renewal Payments",
+ "Permission:UserDownloads": "User Downloads",
"Permission:RetryFailedPayments": "Retry Failed Payments",
"AutoRenewalIsNotEnabled": "Auto Renewal is not enabled!",
"LicenseIsNotExpired": "License is not expired!",
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/sv.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/sv.json
new file mode 100644
index 0000000000..f6b113895b
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/sv.json
@@ -0,0 +1,640 @@
+{
+ "culture": "sv",
+ "texts": {
+ "Permission:Organizations": "Organisationer",
+ "Permission:Manage": "Hantera organisationer",
+ "Permission:DiscountRequests": "RabattförfrÄgningar",
+ "Permission:DiscountManage": "Hantera rabattförfrÄgningar",
+ "Permission:Disable": "Avaktivera",
+ "Permission:Enable": "Aktivera",
+ "Permission:EnableSendEmail": "Aktivera skicka e-post",
+ "Permission:SendEmail": "Skicka e-post",
+ "Permission:NpmPackages": "NPM-paket",
+ "Permission:NugetPackages": "Nuget-paket",
+ "Permission:Maintenance": "UnderhÄll",
+ "Permission:Maintain": "BehÄlla",
+ "Permission:ClearCaches": "Rensa cacheminnen",
+ "Permission:Modules": "Moduler",
+ "Permission:Packages": "Paket",
+ "Permission:Edit": "Redigera",
+ "Permission:Delete": "Radera",
+ "Permission:Create": "Skapa",
+ "Permission:Accounting": "Redovisning",
+ "Permission:Accounting:Quotation": "Offert",
+ "Permission:Accounting:Invoice": "Faktura",
+ "Menu:Organizations": "Organisationer",
+ "Menu:Accounting": "Redovisning",
+ "Menu:Packages": "Paket",
+ "Menu:DiscountRequests": "RabattförfrÄgningar",
+ "NpmPackageDeletionWarningMessage": "Detta NPM-paket kommer att raderas. Kan du bekrÀfta det?",
+ "NugetPackageDeletionWarningMessage": "Detta Nuget-paket kommer att raderas. Kan du bekrÀfta det?",
+ "ModuleDeletionWarningMessage": "Denna modul kommer att raderas. Kan du bekrÀfta det?",
+ "Name": "Namn",
+ "DisplayName": "Visa namn",
+ "ShortDescription": "Kort beskrivning",
+ "NameFilter": "Namn",
+ "CreationTime": "Skapelsetid",
+ "IsPro": "Ăr pro",
+ "IsFreeToActiveLicenseOwners": "Gratis för licensinnehavare",
+ "ShowOnModuleList": "Visa pÄ modullistan",
+ "EfCoreConfigureMethodName": "Konfigurera metodnamn",
+ "IsProFilter": "Ăr pro",
+ "ApplicationType": "Typ av applikation",
+ "Target": "MÄl",
+ "TargetFilter": "MÄl",
+ "ModuleClass": "Modul klass",
+ "NugetPackageTarget.DomainShared": "Delad domÀn",
+ "NugetPackageTarget.Domain": "DomÀn",
+ "NugetPackageTarget.Application": "TillÀmpning",
+ "NugetPackageTarget.ApplicationContracts": "Ansökan Kontrakt",
+ "NugetPackageTarget.HttpApi": "Http Api",
+ "NugetPackageTarget.HttpApiClient": "Http Api-klient",
+ "NugetPackageTarget.Web": "Webb",
+ "NugetPackageTarget.EntityFrameworkCore": "DeleteAllEntityFramework Core",
+ "NugetPackageTarget.MongoDB": "MongoDB",
+ "Edit": "Redigera",
+ "Delete": "Radera",
+ "Refresh": "Uppdatera",
+ "NpmPackages": "NPM-paket",
+ "NugetPackages": "Nuget-paket",
+ "NpmPackageCount": "Antal NPM-paket",
+ "NugetPackageCount": "Antal Nuget-paket",
+ "Module": "Moduler",
+ "ModuleInfo": "Modulinformation",
+ "CreateANpmPackage": "Skapa ett NPM-paket",
+ "CreateAModule": "Skapa en modul",
+ "CreateANugetPackage": "Skapa ett Nuget-paket",
+ "AddNew": "LĂ€gg till ny",
+ "PackageAlreadyExist{0}": "\"{0}\"-paketet Àr redan tillagt.",
+ "ModuleAlreadyExist{0}": "\"{0}\"-modulen Àr redan tillagd.",
+ "ClearCache": "Rensa cache",
+ "SuccessfullyCleared": "FramgÄngsrikt rensad",
+ "Menu:NpmPackages": "NPM-paket",
+ "Menu:Modules": "Moduler",
+ "Menu:Maintenance": "UnderhÄll",
+ "Menu:NugetPackages": "NuGet-paket",
+ "CreateAnOrganization": "Skapa en organisation",
+ "Organizations": "Organisationer",
+ "LongName": "LÄngt namn",
+ "LicenseType": "Typ av licens",
+ "MissingLicenseTypeField": "FÀltet för licenstyp Àr obligatoriskt!",
+ "LicenseStartTime": "Licensens starttid",
+ "LicenseEndTime": "Licensens sluttid",
+ "AllowedDeveloperCount": "TillÄtet antal utvecklare",
+ "UserNameOrEmailAddress": "AnvÀndarnamn eller e-postadress",
+ "AddOwner": "LÀgg till Àgare",
+ "UserName": "AnvÀndarnamn",
+ "Email": "E-post",
+ "Developers": "Utvecklare",
+ "AddDeveloper": "LĂ€gg till utvecklare",
+ "Create": "Skapa",
+ "UserNotFound": "AnvÀndaren hittades inte",
+ "{0}WillBeRemovedFromDevelopers": "{0} Kommer att tas bort frÄn utvecklare, bekrÀftar du?",
+ "{0}WillBeRemovedFromOwners": "{Kommer att tas bort frÄn Àgarna, bekrÀftar du?",
+ "{0}WillBeRemovedFromMembers": "{0} Kommer att tas bort frÄn medlemmar, bekrÀftar du?",
+ "Computers": "Datorer",
+ "UniqueComputerId": "Unikt dator-ID",
+ "LastSeenDate": "Datum för senaste observation",
+ "{0}Computer{1}WillBeRemovedFromRecords": "Dator för {0} ({1}) kommer att tas bort frÄn register",
+ "OrganizationDeletionWarningMessage": "Organisationen kommer att raderas",
+ "DeletingLastOwnerWarningMessage": "En organisation mÄste ha minst en Àgare! DÀrför kan du inte ta bort den hÀr Àgaren",
+ "This{0}AlreadyExistInThisOrganization": "Denna {0} finns redan i denna organisation",
+ "AreYouSureYouWantToDeleteAllComputers": "Ăr du sĂ€ker pĂ„ att du vill radera alla datorer?",
+ "DeleteAll": "Radera alla",
+ "DoYouWantToCreateNewUser": "Vill du skapa en ny anvÀndare?",
+ "MasterModules": "Master-moduler",
+ "OrganizationName": "Organisationens namn",
+ "CreationDate": "Datum för skapande",
+ "LicenseStartDate": "Licensens startdatum",
+ "LicenseEndDate": "Licensens slutdatum",
+ "OrganizationNamePlaceholder": "Organisationens namn...",
+ "TotalQuestionCountPlaceholder": "Totalt antal frÄgor...",
+ "RemainingQuestionCountPlaceholder": "KvarstÄende frÄgor Àr...",
+ "LicenseTypePlaceholder": "Licenstyp...",
+ "CreationDatePlaceholder": "Datum för skapande...",
+ "LicenseStartDatePlaceholder": "Licensens startdatum...",
+ "LicenseEndDatePlaceholder": "Licensens slutdatum...",
+ "UsernameOrEmail": "AnvÀndarnamn eller e-post",
+ "UsernameOrEmailPlaceholder": "AnvÀndarnamn eller e-post...",
+ "Member": "Ledamot",
+ "PurchaseOrderNo": "Inköpsorder nr",
+ "QuotationDate": "Datum för offert",
+ "CompanyName": "Företagets namn",
+ "CompanyAddress": "Företagets adress",
+ "Price": "Pris",
+ "DiscountText": "Rabatt text",
+ "DiscountQuantity": "Rabatt kvantitet",
+ "DiscountPrice": "Rabatterat pris",
+ "Quotation": "Offert",
+ "ExtraText": "Extra text",
+ "ExtraAmount": "Extra belopp",
+ "DownloadQuotation": "Ladda ner offert",
+ "Invoice": "Faktura",
+ "TaxNumber": "Skattenummer",
+ "InvoiceNumber": "Fakturanummer",
+ "InvoiceDate": "Fakturadatum",
+ "InvoiceNote": "Fakturanota",
+ "Quantity": "Kvantitet",
+ "AddProduct": "LĂ€gg till produkt",
+ "AddProductWarning": "Du mÄste lÀgga till produkt!",
+ "TotalPrice": "Totalt pris",
+ "Generate": "Generera",
+ "MissingQuantityField": "KvantitetsfÀltet Àr obligatoriskt!",
+ "MissingPriceField": "PrisfÀltet Àr obligatoriskt!",
+ "CodeUsageStatus": "Status",
+ "Country": "Land",
+ "DeveloperCount": "Antal utvecklare",
+ "RequestCode": "BegÀr kod",
+ "WebSite": "Webbplats",
+ "GithubUsername": "AnvÀndarnamn för Github",
+ "PhoneNumber": "Telefonnummer",
+ "ProjectDescription": "Projektbeskrivning",
+ "Referrer": "HĂ€nvisare",
+ "DiscountRequests": "BegÀran om rabatt",
+ "Copylink": "Kopiera lÀnk",
+ "Disable": "Avaktivera",
+ "Enable": "Aktivera",
+ "EnableSendEmail": "Aktivera skicka e-post",
+ "SendEmail": "Skicka e-post",
+ "SuccessfullyDisabled": "FramgÄngsrikt avaktiverad",
+ "SuccessfullyEnabled": "FramgÄngsrikt aktiverad",
+ "EmailSent": "Skickad e-post",
+ "SuccessfullySent": "FramgÄngsrikt skickat",
+ "SuccessfullyDeleted": "FramgÄngsrikt raderad",
+ "DiscountRequestDeletionWarningMessage": "BegÀran om rabatt kommer att raderas",
+ "BusinessType": "Typ av verksamhet",
+ "TotalQuestionCount": "Totalt antal frÄgor",
+ "RemainingQuestionCount": "Antal ÄterstÄende frÄgor",
+ "TotalQuestionMustBeGreaterWarningMessage": "TotalQuestionCount mÄste vara större Àn RemainingQuestionCount !",
+ "QuestionCountsMustBeGreaterThanZero": "TotalQuestionCount och RemainingQuestionCount mÄste vara noll eller större Àn noll!",
+ "UnlimitedQuestionCount": "ObegrÀnsat antal frÄgor",
+ "Notes": "Anteckningar",
+ "Menu:Community": "Gemenskap",
+ "Menu:Posts": "InlÀgg",
+ "Wait": "VĂ€nta",
+ "Approve": "GodkÀnna",
+ "Reject": "Avvisa",
+ "Details": "Detaljer",
+ "Url": "Url",
+ "Title": "Titel",
+ "ContentSource": "KÀlla för innehÄll",
+ "Status": "Status",
+ "ReadPost": "LÀs inlÀgget",
+ "PostHasBeenWaiting": "Posten har vÀntat",
+ "PostHasBeenApproved": "InlÀgget har godkÀnts",
+ "PostHasBeenRejected": "InlÀgget har avvisats",
+ "Permission:Community": "Gemenskap",
+ "Permission:CommunityPost": "Post",
+ "Link": "Link",
+ "Enum:ContentSource:0": "Github",
+ "Enum:ContentSource:1": "Extern",
+ "Enum:Status:0": "VÀntar pÄ",
+ "Enum:Status:1": "Avvisad",
+ "Enum:Status:2": "GodkÀnd",
+ "Summary": "Sammanfattning",
+ "AuthorName": "Författarens namn",
+ "CoverImage": "Omslagsbild",
+ "RemoveCacheConfirmationMessage": "Ăr du sĂ€ker pĂ„ att du tar bort cacheminnet för \"{0}\" -posten?",
+ "SuccessfullyRemoved": "FramgÄngsrikt rensad",
+ "RemoveCache": "Ta bort cachen",
+ "Language": "SprÄk",
+ "Optional": "Valfritt",
+ "CreatePostLanguageInfo": "Det sprÄk som inlÀgget Àr skrivet pÄ",
+ "Enum:ContentSource:2": "VideoinlÀgg",
+ "VideoPreview": "Förhandsgranskning av video",
+ "VideoPreviewErrorMessage": "Angiven video-URL kunde inte hÀmtas frÄn Youtube. Detta kan orsakas av att videon Àr privat eller att den angivna webbadressen inte Àr tillgÀnglig.",
+ "DeleteCoverImage": "Ta bort omslagsbild",
+ "DeleteCoverImageConfirmationMessage": "Ăr du sĂ€ker att du vill ta bort omslagsbilden för \"{0}\"?",
+ "DeleteCoverImageSuccessMessage": "Omslagsbilden har raderats framgÄngsrikt",
+ "PaymentsOf": "Betalningar av",
+ "ShowPaymentsOfOrganization": "Betalningar",
+ "Date": "Datum",
+ "Products": "Produkter",
+ "TotalAmount": "Totalt belopp",
+ "Currency": "Valuta",
+ "Gateway": "Gateway",
+ "State": "Stat",
+ "FailReason": "Orsak till misslyckande",
+ "ReIndexAllPosts": "Ă
terindexera alla inlÀgg",
+ "ReIndexAllPostsConfirmationMessage": "Ăr du sĂ€ker pĂ„ att du vill indexera om alla inlĂ€gg?",
+ "SuccessfullyReIndexAllPosts": "Alla inlÀgg har framgÄngsrikt indexerats om.",
+ "Permission:FullSearch": "Fulltextsökning",
+ "Menu:CliAnalytics": "CLI Analys",
+ "Menu:Reports": "Dynamiska rapporter",
+ "TemplateName": "Mallens namn",
+ "TemplateVersion": "Mallversion",
+ "DatabaseProvider": "Databasleverantör",
+ "IsTiered": "Ăr Tiered",
+ "ProjectName": "Projektets namn",
+ "Username": "AnvÀndarens namn",
+ "Tool": "Verktyg",
+ "Command": "Kommando",
+ "UiFramework": "Ramverk för anvÀndargrÀnssnitt",
+ "Options": "Alternativ",
+ "CliAnalytics": "Cli Analytics",
+ "Reports": "Dynamiska rapporter",
+ "Permission:CliAnalyticses": "Cli Analyticses",
+ "Permission:CliAnalytics": "Cli Analytics",
+ "Permission:Reports": "Rapporter",
+ "Search": "Sök",
+ "ClearFilter": "Rensa filter",
+ "LicensePrivateKey": "Licens privat nyckel",
+ "LicensePublicKey": "Licens offentlig nyckel",
+ "ApiKey": "NuGet API-nyckel",
+ "ShowInvoiceRequestsOfOrganization": "FakturaförfrÄgningar",
+ "ShowQuestionsOfOrganization": "FrÄgor och svar",
+ "Question": "FrÄga",
+ "Open": "Ăppna",
+ "Questions": "FrÄgor och svar",
+ "InvoiceRequests": "FakturaförfrÄgningar",
+ "Address": "Adress",
+ "TaxNo": "Skatt Nej",
+ "Permission:InvoiceRequest": "FakturabegÀran",
+ "Permission:Question": "FrÄga",
+ "AddNoteSuccessMessage": "Not framgÄngsrikt tillagd",
+ "NameSurname": "Namn Efternamn",
+ "Note": "Notera",
+ "Add": "LĂ€gg till",
+ "ProjectDownloads": "Projektnedladdningar",
+ "ShowProjectDownloadsOfOrganization": "Projektnedladdningar",
+ "ShowAuditLogsOfOrganization": "Granskningsloggar",
+ "Enum:EntityChangeType:0": "Skapad",
+ "Enum:EntityChangeType:1": "Uppdaterad",
+ "Enum:EntityChangeType:2": "Borttagen",
+ "TenantId": "HyresgÀst-ID",
+ "ChangeTime": "Ăndra tid",
+ "EntityTypeFullName": "FullstÀndigt namn pÄ entitetstyp",
+ "AuditLogsFor{0}Organization": "Granskningsloggar för organisationen \"{0}\"",
+ "Permission:EntityChange": "FörÀndring av enhet",
+ "Permission:ProjectDownload": "Projekt Ladda ner",
+ "Permission:PaymentRequest": "BegÀran om betalning",
+ "CreatorEmailAddress": "E-postadress till skaparen",
+ "EmailSendDate": "Datum för e-postutskick",
+ "PaymentRequestsFor{0}Organization": "BetalningsförfrÄgningar för \"{0}\" organisation",
+ "PaymentDetails": "Betalningsinformation",
+ "PaymentProduct": "Betalning Produkt",
+ "ProductName": "Produktens namn",
+ "Code": "Kod",
+ "GenerateInvoice": "Generera faktura",
+ "ExportOrganizationsToExcel": "Exportera till Excel",
+ "ThisExtensionIsNotAllowed": "Denna förlÀngning Àr inte tillÄten.",
+ "TheFileIsTooLarge": "Filen Àr för stor!",
+ "PostDeletionConfirmationMessage": "Ăr du sĂ€ker pĂ„ att du vill radera det hĂ€r inlĂ€gget?",
+ "ChooseCoverImage": "VĂ€lj en omslagsbild...",
+ "Menu:Quotation": "Offert",
+ "Menu:Invoice": "Faktura",
+ "Menu:Quotation/Invoice": "Offert/faktura",
+ "Menu:PaymentRequests": "BetalningsförfrÄgningar",
+ "Permission:PaymentRequests": "BetalningsförfrÄgningar",
+ "PaymentRequests": "BetalningsförfrÄgningar",
+ "Creator": "Skapare",
+ "ExtraProperties": "Extra egenskaper",
+ "Organization": "Organisation",
+ "Waiting": "VÀntar pÄ",
+ "Completed": "FÀrdigstÀlld",
+ "Failed": "Misslyckades",
+ "PaymentRequestDeletionWarningMessage": "Denna betalningsbegÀran kommer att raderas. Kan du bekrÀfta det?",
+ "Payment": "Betalning",
+ "AddPayment": "LĂ€gg till betalning",
+ "Enum:PurchaseType:1": "Ny licens",
+ "Enum:PurchaseType:2": "LicensförlÀngning",
+ "Enum:PurchaseType:3": "Uppgradering av licens",
+ "Enum:PurchaseType:4": "Ytterligare utvecklare",
+ "LicenceType": "Typ av licens",
+ "PurchaseType": "Typ av köp",
+ "ReceiptNo": "Kvitto nr",
+ "PaymentTime": "Betalningstid",
+ "ProductPrice": "Produktens pris",
+ "AdditionalDeveloper": "Ytterligare utvecklare",
+ "ThisPaymentHasBeenAlreadyUsed": "Denna betalning har redan anvÀnts",
+ "PaymentTimeCannotBeFutureTime": "Betalningstid kan inte vara en framtida tid!",
+ "SaveAndDownload": "Spara och ladda ner",
+ "BillingInfo": "Faktureringsinformation",
+ "DeleteInvoice": "Ta bort faktura",
+ "PaymentStateSetTo": "Betalningsstatus satt till {0}",
+ "ChangeState": "Ăndra tillstĂ„nd",
+ "Permission:TrialLicense": "Trial-licens",
+ "Menu:TrialLicenses": "PreliminÀra licenser",
+ "TrialLicenses": "PreliminÀra licenser",
+ "UserNameFilter": "AnvÀndarnamn",
+ "TrialLicenseStatusFilter": "Status",
+ "TrialLicenseStartDateFilter": "Startdatum",
+ "TrialLicenseEndDateFilter": "Slutdatum",
+ "FirstName": "Förnamn",
+ "LastName": "Efternamn",
+ "StartDate": "Startdatum",
+ "EndDate": "Slutdatum",
+ "PurchasedDate": "Inköpsdatum",
+ "OrganizationDetail": "Organisation Detalj",
+ "TrialLicenseStatus": "Status för provlicens",
+ "TrialLicenseDetail": "Trial licens detalj",
+ "AcceptsMarketingCommunications": "Marknadskommunikation",
+ "PurposeOfUsage": "Syfte med anvÀndningen",
+ "CountryName": "Landets namn",
+ "CompanySize": "Företagets storlek",
+ "DetailTrialLicense": "Detaljer",
+ "Requested": "BegÀrd",
+ "Activated": "Aktiverad",
+ "PurchasedToNormalLicense": "Köpte",
+ "Expired": "UtgÄtt",
+ "TrialLicenseDeletionWarningMessage": "Ăr du sĂ€ker pĂ„ att du vill ta bort testlicensen? Testlicens, organisation och supportkonton kommer att raderas!",
+ "LicenseCategoryFilter": "Licenskategori",
+ "Permission:SendWelcomeEmail": "Skicka vÀlkomstmejl",
+ "SendWelcomeEmail": "Skicka vÀlkomstmejl",
+ "SendWelcomeEmailWarningMessage": "Ăr du sĂ€ker pĂ„ att du vill skicka ett vĂ€lkomstmeddelande till organisationens medlemmar?",
+ "SendWelcomeEmailSuccessMessage": "VÀlkomstmejl skickat framgÄngsrikt!",
+ "Activate": "Aktivera",
+ "ActivateTrialLicenseWarningMessage": " NÀr du aktiverar en testlicens skickas ett vÀlkomstmeddelande till anvÀndaren. Vill du aktivera det?",
+ "ActivateTrialLicenseSuccessMessage": "Aktiverades framgÄngsrikt och vÀlkomstmeddelandet skickades till organisationsmedlemmarna.",
+ "PaymentRequestId": "BetalningsbegÀran Id",
+ "AdditionalDeveloperCount": "Ytterligare antal utvecklare",
+ "LicensePrice": "Licenspris",
+ "PurchaseDate": "Köpdatum",
+ "IsAbpBookDownloaded": "Mastering ABP Book nedladdad?",
+ "IsMasteringAbpBookDownloadEnabled": "ABP Book nedladdning aktiverad",
+ "Permission:Accounting:CustomPaymentLinkGenerator": "Anpassad betalningslÀnk",
+ "CustomPaymentLink": "Anpassad betalningslÀnk",
+ "Menu:CustomPaymentLink": "Anpassad betalningslÀnk",
+ "Amount": "Belopp",
+ "GenerateCustomPaymentLink": "Generera anpassad betalningslÀnk",
+ "GeneratedPaymentLink": "Genererad betalningslÀnk",
+ "CopyText": "Kopiera text",
+ "Permission:CommunityEvents": "HĂ€ndelser",
+ "Menu:Events": "HĂ€ndelser",
+ "Events": "HĂ€ndelser",
+ "EventType": "Typ av hÀndelse",
+ "Number": "Antal",
+ "RegistrationURL": "URL för registrering",
+ "URL": "URL",
+ "EventDeletionConfirmationMessage": "Ăr du sĂ€ker pĂ„ att du vill ta bort den hĂ€r hĂ€ndelsen?",
+ "Enum:EventType:0": "Samtal med gemenskapen",
+ "CreateAnEvent": "Skapa ett evenemang",
+ "Permission:CommunitySpeakers": "Högtalare",
+ "CreateASpeaker": "Skapa en högtalare",
+ "Speakers": "Högtalare",
+ "Image": "Bild",
+ "GithubURL": "URL till Github",
+ "SpeakerDeletionConfirmationMessage": "Ăr du sĂ€ker att du vill ta bort den hĂ€r högtalaren?",
+ "Menu:Speakers": "Högtalare",
+ "ChooseSpeakerImage": "VÀlj en högtalarbild...",
+ "SpeakerImage": "Bild pÄ högtalare",
+ "AddSpeaker": "LÀgg till högtalare",
+ "ShowPurchaseItemsOfOrganizations": "Köp av föremÄl",
+ "Enum:OrganizationPurchaseState:0": "Ej levererad",
+ "Enum:OrganizationPurchaseState:1": "Levereras",
+ "PurchaseItems": "Köp av föremÄl",
+ "SuccessfullyUpdated": "FramgÄngsrikt uppdaterad",
+ "SuccessfullyAdded": "FramgÄngsrikt tillagt",
+ "PurchaseState": "Status för köp",
+ "ShowBetweenDayCount": "Visa mellan dagarna",
+ "PurchaseOrder": "Inköpsorder",
+ "ShowCreateInvoiceOfOrganization": "Skapa faktura",
+ "ShowCreateQuotationOfOrganization": "Skapa offert/faktura",
+ "BookDiscounts": "Boka rabatter",
+ "Permission:BookDiscount": "Boka rabatt",
+ "Menu:BookDiscounts": "Boka rabatter",
+ "BookType": "Typ av bok",
+ "PurchasePlatform": "Plattform för inköp",
+ "StartTime": "Starttid",
+ "EndTime": "Sluttid",
+ "CreateABookDiscount": "Skapa en bokrabatt",
+ "BookDiscountDeletionConfirmationMessage": "Ăr du sĂ€ker pĂ„ att du vill ta bort den hĂ€r bokrabatten?",
+ "CustomPaymentFlexSwitchDescription": "Med licens",
+ "AllowFeatureUpgradeOnLicenseExpire": "TillÄt uppgradering av funktioner nÀr licensen löper ut",
+ "Deleted{0}": "[Raderad {0}]",
+ "Tags": "Etiketter",
+ "SetTagsInfo": "Taggar ska vara kommaseparerade. Exempel: CSharp, Entity Framework",
+ "RejectTrialLicenseWarningMessage": "Ăr du sĂ€ker pĂ„ att du vill avvisa denna begĂ€ran om testlicens?",
+ "ExportToExcel": "Exportera till Excel",
+ "OverallTotalPrice": "Totalt totalpris",
+ "OverallDiscountPrice": "Totalt Rabatt Pris",
+ "OverallDiscountText": "Ăvergripande rabatt Text",
+ "SelectReport": "- VĂ€lj rapport",
+ "NoDataAvailable": "Inga uppgifter tillgÀngliga",
+ "StatisticsOfCachedContents": "Statistik över cachelagrat NuGet-paketinnehÄll för nuget.abp.io",
+ "Compact": "Kompakt",
+ "EditSettings": "Redigera instÀllningar",
+ "CurrentEstimatedSize": "Nuvarande uppskattad storlek",
+ "CurrentEntryCount": "Aktuellt antal poster",
+ "TotalHits": "Totalt antal trÀffar",
+ "TotalMisses": "Totalt antal missar",
+ "NoResponseFrom": "Inget svar frÄn",
+ "ContentCacheSlidingExpirationByDay": "InnehÄllscache glidande utgÄng per dag",
+ "MaxDaysForCaching": "Max dagar för cachelagring",
+ "Enabled": "Aktiverad",
+ "Menu:NugetPackagesContentCache": "NuGet Cache",
+ "NugetPackagesContentCache": "NuGet Cache för innehÄll",
+ "SlidingExpritionByDayInfo": "HÀmtar eller anger hur lÀnge en cache-post kan vara inaktiv (t.ex. inte Ätkommen) innan den tas bort. Detta kommer inte att förlÀnga postens livstid utöver den absoluta expirationen.",
+ "MaxDaysForCachingInfo": "HÀmtar eller anger en absolut utgÄngstid i förhÄllande till nu.",
+ "CurrentEstimatedSizeInfo": "Anger en uppskattad summa av alla NuGet-pakets innehÄllsstorlek som för nÀrvarande finns i minnescachen",
+ "CurrentEntryCountInfo": "Anger antalet instanser som för nÀrvarande finns i minnescachen.",
+ "TotalHitsInfo": "Anger det totala antalet cache-missar. En cachetrÀff intrÀffar nÀr en fil begÀrs frÄn en cache och cachen kan uppfylla denna begÀran.",
+ "TotalMissesInfo": "Anger det totala antalet trÀffar i cachen. En cachemiss Àr nÀr cacheminnet inte innehÄller det begÀrda innehÄllet.",
+ "Permission:VersionHistory": "Versionshistorik",
+ "Caches": "Cacher",
+ "VersionHistories": "Versionshistorik",
+ "Version": "Version",
+ "PublishDate": "Publiceringsdatum",
+ "IsStableVersion": "Stabil version",
+ "IsActive": "Aktiv",
+ "NewVersion": "Ny version",
+ "VersionHistoryDeletionConfirmationMessage": "Ăr du sĂ€ker pĂ„ att du vill radera den hĂ€r versionen?",
+ "CreateAbpConsultantLogoInfo": "Maximal filstorlek: 1MB
Filtyper som stöds: jpg, jpeg, png, SVG, WebP",
+ "UrlCode": "Url-kod",
+ "Clear": "Klart",
+ "Permission:AbpConsultant": "ABP Konsult",
+ "Menu:AbpConsultants": "ABP Konsulter",
+ "CreateAbpConsultant": "Skapa ABP-konsult",
+ "UrlCodeIsNotAvailable": "Url-koden anvÀnds av en annan ABP-konsult.",
+ "AbpConsultants": "ABP Konsulter",
+ "AbpConsultant": "ABP Konsult",
+ "AbpConsultantEdit": "Edit ABP Konsult",
+ "AbpConsultantCreate": "Skapa ABP-konsult",
+ "WhoWeAreItem": "Vilka vi Àr Artikel",
+ "FieldIsRequired": "{0} krÀvs.",
+ "FieldIsNotValid": " {0} Àr inte giltig.",
+ "InterestedLicenseType": "Intresserad licenstyp",
+ "MoveWaitList": "Flytta till vÀntelista",
+ "CommunityLinkTitle": "Ăppna pĂ„ community-webbplatsen",
+ "CommunityLink": "Link",
+ "IpAddress": "Ip-adress",
+ "ReloadFromSource": "Ladda om frÄn kÀllan",
+ "ReloadFromSourceConfirmationMessage": "Detta inlÀgg kommer att uppdateras frÄn \"{0}\". Vill du fortsÀtta?",
+ "UnitPrice": "Enhetspris",
+ "OverallDiscountAmount": "Totalt rabattbelopp",
+ "DiscountAmount": "Diskonteringsbelopp",
+ "FullChangeHistory": "FullstÀndig Àndringshistorik",
+ "Permission:RefreshReleaseLogs": "Uppdatera release-loggar",
+ "ReleaseLogs": "Release Loggar",
+ "AuthorUserName": "AnvÀndarnamn för författare",
+ "Type": "Typ",
+ "TotalDiscount": "Total rabatt",
+ "SubTotal": "Subtotal",
+ "TotalDue": "Totalt förfallna",
+ "QuotationNo": "Offert nr",
+ "ValidTill": "Giltig till och med",
+ "QuotationNote": "Citatanteckning",
+ "QuotationTemplate.Address:": "Adress:",
+ "QuotationTemplate.VATNo:": "Momsregistreringsnummer",
+ "QuotationTemplate.Phone:": "Telefon:",
+ "QuotationTemplate.E-mail:": "E-post:",
+ "QuotationTemplate.Quotation": "Offert",
+ "QuotationTemplate.To": "Till",
+ "QuotationTemplate.Details": "Detaljer",
+ "QuotationTemplate.QuotationNo:": "Citat #:",
+ "QuotationTemplate.IssueDate:": "Utgivningsdatum:",
+ "QuotationTemplate.ValidTill:": "Giltig till:",
+ "QuotationTemplate.ValidDays": "{0} dagar",
+ "QuotationTemplate.Description": "Beskrivning",
+ "QuotationTemplate.UnitPrice": "Enhetspris",
+ "QuotationTemplate.Qty": "Antal",
+ "QuotationTemplate.Discount": "Rabatt",
+ "QuotationTemplate.Total": "Totalt",
+ "QuotationTemplate.Notes": "Anteckningar",
+ "QuotationTemplate.SubTotal:": "Sub Total :",
+ "QuotationTemplate.Tax/VAT:": "Skatt / moms (%{0}) :",
+ "QuotationTemplate.TotalDiscount:": "Total rabatt :",
+ "QuotationTemplate.TOTALDUE:": "TOTAL SKULD :",
+ "QuotationTemplate.BankAccount": "Information om vÄrt bankkonto finns pÄ {0}.",
+ "Permission:Raffles": "Lottdragning",
+ "Permission:Draw": "Dragning",
+ "Menu:Raffles": "Raffles",
+ "RaffleIsNotDrawable": "Lottdragning Àr inte dragbar",
+ "WinnerCountMustBeGreaterThanZero": "Antalet vinnare mÄste vara större Àn noll",
+ "FullDescription": "FullstÀndig beskrivning",
+ "VisibilityStartDate": "Synlighet Startdatum",
+ "VisibilityEndDate": "Slutdatum för synlighet",
+ "RaffleDate": "Lottdragning Datum",
+ "SubscriptionCode": "Prenumerationskod",
+ "GroupCode": "Gruppkod",
+ "MaxWinnerCount": "Max antal vinnare",
+ "ReDraw": "Rita om",
+ "EditRaffle": "Redigera utlottning",
+ "Raffles": "Raffles",
+ "CreateARaffle": "Skapa en utlottning",
+ "Draw": "Dragning",
+ "Enum:RaffleStatus:0": "Aktiv",
+ "Enum:RaffleStatus:1": "NĂ€sta",
+ "Enum:RaffleStatus:2": "Tidigare",
+ "DrawDone": "Ritning klar",
+ "HomePageShowType": "Startsida Visa typ",
+ "None": "Ingen",
+ "Card": "Kort",
+ "Horizontal": "Horisontell",
+ "Winners": "Vinnare",
+ "StartDateMustBeLessThanEndDate": "Startdatum mÄste vara mindre Àn slutdatum",
+ "VisibilityStartDateMustBeLessThanVisibilityEndDate": "Startdatum för synlighet mÄste vara mindre Àn slutdatum för synlighet",
+ "StartDateMustBeGreaterThanVisibilityStartDate": "Startdatum mÄste vara större Àn startdatum för synlighet",
+ "EndDateMustBeLessThanVisibilityEndDate": "Slutdatum mÄste vara mindre Àn visibilitetens slutdatum",
+ "DrawnDone": "Ritad Gjord",
+ "AddColor": "LÀgg till fÀrg",
+ "Colors": "FĂ€rger",
+ "RemoveColor": "Ta bort fÀrg",
+ "MaxColorCountWarning": "Du kan lÀgga till upp till {0} fÀrger",
+ "MinColorCountWarning": "Du mÄste lÀgga till minst {0} fÀrger",
+ "RaffleDeletionConfirmationMessage": "Ăr du sĂ€ker pĂ„ att du vill ta bort den hĂ€r utlottningen?",
+ "CreateRaffle": "Skapa utlottning",
+ "RemoveImage": "Ta bort bild",
+ "SavedSuccessfully": "Sparades framgÄngsrikt",
+ "Menu:CommunityTalks": "Samtal med gemenskapen",
+ "Menu:Conferences": "Konferenser",
+ "Menu:OtherLiveEvents": "Andra live-evenemang",
+ "Menu:SponsoredConferences": "Sponsrade konferenser",
+ "Logo": "Logotyp",
+ "Slug": "Snigel",
+ "CompanyUrl": "Företagets webbadress",
+ "TalkTitle": "Titel pÄ samtal",
+ "AbstractTopic": "Sammanfattning Ămne",
+ "Bio": "Bio",
+ "LinkedIn": "LinkedIn",
+ "Github": "Github",
+ "Twitch": "Twitch",
+ "Youtube": "Youtube",
+ "Twitter": "Twitter",
+ "PersonalWebsite": "Personlig webbplats",
+ "VideoId": "Video Id",
+ "Order": "BestÀllning",
+ "Image1x1": "Bild 1x1",
+ "Image16x9": "Bild 16x9",
+ "Banner": "Banner",
+ "Speaker": "Högtalare",
+ "SessionDate": "Datum för session",
+ "AddSession": "LĂ€gg till session",
+ "AddSponsor": "LĂ€gg till sponsor",
+ "SponsorLogo": "Sponsorlogotyp",
+ "RegistrationUrl": "Url för registrering",
+ "AllowAbpStudioBetaAccess": "TillÄt Ätkomst till ABP Studio Beta",
+ "TotalQuestionCanNotBeNullMessage": "Total frÄga kan inte vara null",
+ "Permission:OrganizationAutoRenewalPayments": "Betalningar för automatisk förnyelse av organisation",
+ "Permission:RetryFailedPayments": "Försök pÄ nytt med misslyckade betalningar",
+ "AutoRenewalIsNotEnabled": "Automatisk förnyelse Àr inte aktiverad!",
+ "LicenseIsNotExpired": "Licensen har inte gÄtt ut!",
+ "PaymentNotFound": "Betalning hittades inte!",
+ "PaymentAlreadyTried": "Betalning redan försökt!",
+ "PaymentIsNotFailed": "Betalning Àr inte misslyckad!",
+ "OrganizationIdIsNull": "OrganizationId Àr null!",
+ "Menu:AutoRenewals": "Förnyelse av bilar",
+ "OrganizationAutoRenewalPayments": "Betalningar för automatisk förnyelse av organisation",
+ "PaymentDate": "Betalningsdag",
+ "TryCount": "Försök rÀkna",
+ "ErrorMessage": "Felmeddelande",
+ "ErrorCode": "Felkod",
+ "CreditCard": "Kreditkort",
+ "BuyerName": "Köparens namn",
+ "BuyerSurname": "Köparens efternamn",
+ "BuyerEmail": "Köparens e-post",
+ "AutoRenewalStartTime": "Starttid för automatisk förnyelse",
+ "AutoRenewalEndTime": "Sluttid för automatisk förnyelse",
+ "AutoRenewalEnabled": "Automatisk förnyelse aktiverad",
+ "LastAutoRenewalPaymentTime": "Sista betalningstid för automatisk förnyelse",
+ "OrganizationDoesNotHaveACreditCard": "Organisationen har inte ett kreditkort!",
+ "OrganizationDoesNotHaveACreditCardInGateway": "Organisationen har inte ett kreditkort i porten!",
+ "Permission:EditWinners": "Redigera vinnare",
+ "Permission:ChangeDrawingStatus": "Ăndra ritningsstatus",
+ "Menu:Licenses": "Licensiering",
+ "OrganizationId": "Organisations-ID",
+ "RemoveAllWinnersConfirmationMessage": "Ăr du sĂ€ker pĂ„ att du vill ta bort alla vinnare?",
+ "AutoRenewals": "Förnyelse av bilar",
+ "OrganizationHasCreditCard": "Organisationen har kreditkort. VÀnligen ta bort kreditkortet först!",
+ "DisplayName:DontSendEmailForLicenseExpire": "Skicka inte e-post för att licensen löper ut",
+ "DontSendEmailForLicenseExpire": "Skicka inte e-post för att licensen löper ut",
+ "SuccessfullyChanged": "FramgÄngsrikt Àndrat",
+ "WinnerCountMustBeLessThanMaxWinnerCount": "Antalet vinnare mÄste vara mindre Àn det maximala antalet vinnare",
+ "NoChangesDetected": "Inga förÀndringar upptÀckta",
+ "ProductCount": "ProduktrÀkning",
+ "Actions": "Ă
tgÀrder",
+ "CreateInvoice": "Skapa faktura",
+ "IsVisible": "Synlig",
+ "Menu:Testimonials": "VittnesmÄl",
+ "TestimonialDeletionConfirmationMessage": "Ăr du sĂ€ker pĂ„ att du vill ta bort detta vittnesmĂ„l?",
+ "FullName": "FullstÀndigt namn",
+ "TestimonialText": "Text i vittnesmÄl",
+ "ExperienceYear": "ErfarenhetsÄr",
+ "Position": "Titel",
+ "YearsOfExperience": "ErfarenhetsÄr",
+ "AllowedLicenses": "TillÄtna licenser",
+ "AllowedModules": "TillÄtna moduler",
+ "ModuleName": "Modulens namn",
+ "NonYet": "Inte Ànnu",
+ "Permission:Testimonials": "VittnesmÄl",
+ "SelectCompanySizePlaceholder": "Företagets storlek",
+ "SelectExperienceYearPlaceholder": "ErfarenhetsÄr",
+ "SelectCountryPlaceholder": "Land",
+ "DeleteImageConfirmationMessage": "Ăr du sĂ€ker att du vill ta bort bilden för \"{0}\"?",
+ "DeleteImageSuccessMessage": "Bilden har raderats framgÄngsrikt",
+ "DeleteImage": "Ta bort bild",
+ "NetTerms": "Villkor (dagar)",
+ "Menu:DynamicReports": "Dynamiska rapporter",
+ "Menu:Others": "Ăvriga",
+ "Menu:Packs&Modules": "Paket & moduler",
+ "ReleaseCaches": "Frigör cachen",
+ "Menu:HeroSections": "HjÀlte-sektioner",
+ "HeroSections": "HjÀlte-sektioner",
+ "DynamicReports": "Dynamiska rapporter",
+ "Menu:ReportsMenu": "Rapporter",
+ "Permission:HeroSections": "HjÀlte-sektioner",
+ "RedirectLink": "Omdirigera lÀnk",
+ "HeroSectionsDeletionConfirmationMessage": "Ăr du sĂ€ker pĂ„ att du vill ta bort hjĂ€lteavsnittet?",
+ "AbpStudioName": "Abp Studio namn"
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/sv.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/sv.json
new file mode 100644
index 0000000000..9bcca4c170
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/sv.json
@@ -0,0 +1,256 @@
+{
+ "culture": "sv",
+ "texts": {
+ "Volo.AbpIo.Domain:010004": "Maximalt antal medlemmar uppnÄtt!",
+ "Volo.AbpIo.Domain:010005": "Maximalt antal Àgare uppnÄtt!",
+ "Volo.AbpIo.Domain:010006": "Den hÀr anvÀndaren Àr redan Àgare i den hÀr organisationen!",
+ "Volo.AbpIo.Domain:010007": "Den hÀr anvÀndaren Àr redan en utvecklare i den hÀr organisationen!",
+ "Volo.AbpIo.Domain:010008": "TillÄtet antal utvecklare kan inte vara mindre Àn nuvarande antal utvecklare!",
+ "Volo.AbpIo.Domain:010009": "TillÄtet antal utvecklare kan inte vara mindre Àn 0!",
+ "Volo.AbpIo.Domain:010010": "Maximalt antal mac-adresser har överskridits!",
+ "Volo.AbpIo.Domain:010011": "Personlig licens kan inte ha mer Àn 1 utvecklare!",
+ "Volo.AbpIo.Domain:010012": "Licensen kan inte förlÀngas en mÄnad efter att licensen har löpt ut!",
+ "Volo.AbpIo.Domain:020001": "Det gick inte att ta bort detta NPM-paket eftersom \"{NugetPackages}\" Nuget-paket Àr beroende av detta paket.",
+ "Volo.AbpIo.Domain:020002": "Det gick inte att ta bort detta NPM-paket eftersom \"{Moduler}\" Moduler anvÀnder detta paket.",
+ "Volo.AbpIo.Domain:020003": "Det gick inte att ta bort detta NPM-paket eftersom \"{Modules}\" Moduler anvÀnder det hÀr paketet och \"{NugetPackages}\" Nuget-paket Àr beroende av detta paket.",
+ "Volo.AbpIo.Domain:020004": "Det gick inte att ta bort detta Nuget-paket eftersom \"{Moduler}\" Moduler anvÀnder detta paket.",
+ "Volo.AbpIo.Domain:030000": "Du har redan avslutat din provperiod.",
+ "Volo.AbpIo.Domain:030001": "Det hÀr organisationsnamnet finns redan.",
+ "Volo.AbpIo.Domain:030002": "Efter aktivering kan du inte Àndra testlicensen till -requested- status!",
+ "Volo.AbpIo.Domain:030003": "Det finns ingen sÄdan status!",
+ "Volo.AbpIo.Domain:030004": "Status kunde inte Àndras pÄ grund av ett ovÀntat fel!",
+ "Volo.AbpIo.Domain:030005": "Start- och slutdatum kan uppdateras nÀr testlicensen Àr i statusen -aktiverad!",
+ "Volo.AbpIo.Domain:030006": "Slutdatumet mÄste vara större Àn startdatumet!",
+ "Volo.AbpIo.Domain:030007": "Denna testlicens har redan aktiverats!",
+ "Volo.AbpIo.Domain:030008": "Köpdatumet kan endast stÀllas in nÀr statusen Àr -köpt-!",
+ "Volo.AbpIo.Domain:030009": "AnvÀndaren hittades inte!",
+ "Volo.AbpIo.Domain:030010": "För att köpa testlicensen mÄste du först aktivera din testlicens!",
+ "Volo.AbpIo.Domain:030011": "Du kan inte ta bort en testlicens nÀr den Àr köpt!",
+ "Volo.AbpIo.Domain:030012": "En anvÀndare har endast rÀtt till 1 gratis provperiod. Du har redan anvÀnt din testlicens.",
+ "Volo.AbpIo.Domain:030013": "En anvÀndare med en aktiv licens kan inte starta en testlicens.",
+ "Volo.AbpIo.Domain:040000": "Telemetri finns redan!",
+ "Volo.AbpIo.Domain:050000": "Organisationen har kreditkort. Du kan inte ta bort det!",
+ "Volo.AbpIo.Domain:070000": "Organisationsnamnet fÄr endast innehÄlla latinska bokstÀver, siffror, punkter och bindestreck!",
+ "Volo.AbpIo.Domain:070001": "Företagsnamnet fÄr endast innehÄlla latinska bokstÀver, siffror, punkter, mellanslag och bindestreck!",
+ "WantToLearn?": "Vill du lÀra dig mer?",
+ "ReadyToGetStarted?": "Ăr du redo att komma igĂ„ng?",
+ "JoinOurCommunity": "GÄ med i vÄr community",
+ "GetStartedUpper": "KOM IGĂ
NG",
+ "ForkMeOnGitHub": "Fork mig pÄ GitHub",
+ "Features": "Funktioner",
+ "GetStarted": "Kom igÄng",
+ "Documents": "Dokument",
+ "Community": "Gemenskap",
+ "ContributionGuide": "Bidragsguide",
+ "Blog": "Blogg",
+ "Commercial": "Kommersiell",
+ "MyAccount": "Mitt konto",
+ "Permission:License": "Licens",
+ "Permission:UserInfo": "AnvÀndarinformation",
+ "SeeDocuments": "Se dokument",
+ "Samples": "Prover",
+ "Framework": "Ramverk",
+ "Support": "Stöd",
+ "FreeDDDBook": "Gratis e-bok om DDD",
+ "New": "Nya",
+ "Volo.AbpIo.Domain:020005": "LicensförlÀngningsÄret fÄr inte vara lÀgre Àn {MinExtendLicenseYear} Är och inte högre Àn {MaxExtendLicenseYear} Är",
+ "TrialLicensePeriodHasExpired": "Din testlicensperiod löpte ut för {0} dagar sedan.",
+ "TrialLicensePeriodWillExpire": "Din testlicensperiod kommer att löpa ut om {0} dagar.",
+ "TrialLicensePeriodExpireToday": "Din testlicensperiod kommer att löpa ut idag.",
+ "PurchaseNow": "Köp nu!",
+ "LatestReleaseLogs": "Senaste versionsloggar",
+ "RoadMap": "VĂ€gkarta",
+ "FAQ": "VANLIGA FRĂ
GOR",
+ "SourceCode": "KĂ€llkod",
+ "SeeAllPosts": "Se alla inlÀgg",
+ "Contribute": "Bidra",
+ "LiveDemo": "Live Demo",
+ "GetLicense": "Skaffa licens",
+ "OpenSource": "Ăppen kĂ€llkod",
+ "WebApplication": "Webbapplikation",
+ "MeetTheABP": "Möt ABP",
+ "CompleteWebDevelopment": "En komplett webbutveckling",
+ "Platform": "Plattform",
+ "ABPDescription": "Ett ramverk med öppen kÀllkod för utveckling av webbapplikationer för ASP.NET Core. Det erbjuder en komplett infrastruktur genom att följa bÀsta praxis för programvaruutveckling.",
+ "StrongInfrastructure": "Stark infrastruktur",
+ "CompleteArchitecture": "Komplett arkitektur",
+ "DeveloperFocused": "Fokus pÄ utvecklare",
+ "ShareYourExperiences": "Dela dina erfarenheter av ABP-ramverket",
+ "LatestPosts": "Senaste inlÀgg",
+ "LatestVideos": "Senaste videor",
+ "Views": "Utsikt",
+ "LearnLatestNewsAboutABPFramework": "FÄ information om hÀndelser i ABP som nya utgÄvor, fria kÀllor, inlÀgg och mycket mer.",
+ "DeveloperTools": "Verktyg för utvecklare",
+ "StartupTemplates": "Mallar för nystartade företag",
+ "ApplicationModules": "Applikationsmoduler",
+ "UI": "UI",
+ "Themes": "Teman",
+ "Premium": "Premium",
+ "PrivacyPolicy": "Integritetspolicy",
+ "TermsAndConditions": "Villkor och anvisningar",
+ "WouldLikeToReceiveMarketingMaterials": "Jag skulle vilja fÄ marknadsföringsmaterial som produkterbjudanden och specialerbjudanden.",
+ "JoinOurMarketingNewsletter": "AnmÀl dig till vÄrt marknadsföringsnyhetsbrev",
+ "CommunityPrivacyPolicyConfirmation": "Jag godkÀnner de allmÀnna villkoren och Privatlivspolicyn.",
+ "WouldLikeToReceiveNotification": "Jag skulle vilja fÄ de senaste nyheterna frÄn abp.io webbplatser.",
+ "CommercialNewsletterConfirmationMessage": "Jag samtycker till Terms & Conditions och Privacy Policy.",
+ "FreeDDDEBook": "Gratis e-bok om DDD",
+ "AdditionalServices": "Ytterligare tjÀnster",
+ "Learn": "LĂ€r dig",
+ "AccountOverview": "Ăversikt över konton",
+ "MyOrganizations": "Mina organisationer",
+ "MySupportQuestions": "Mina frÄgor om support",
+ "MyProfile": "Min profil",
+ "Logout": "Logga ut",
+ "Home": "Hem",
+ "Posts": "InlÀgg",
+ "Videos": "Videor",
+ "JoinTheABPCommunity": "GĂ„ med i ABP:s gemenskap",
+ "SubmitYourPost": "Skicka in ditt inlÀgg",
+ "Modules": "Moduler",
+ "Tools": "Verktyg",
+ "Pricing": "PrissÀttning",
+ "ChangeLogs": "Ăndra loggar",
+ "SubscribeToNewsletter": "Prenumerera pÄ nyhetsbrevet",
+ "SubscribeToNewsletterDescription": "FÄ information om hÀndelser i ABP som nya utgÄvor, fria kÀllor, inlÀgg och mycket mer.",
+ "EmailAddress": "E-postadress",
+ "Subscribe": "Prenumerera",
+ "WelcomeToABP": "VĂ€lkommen till ABP",
+ "EULA": "EULA",
+ "ABPCommercialIntroductionMessage": "Förbyggda applikationsmoduler, avancerade startmallar, verktyg för snabb applikationsutveckling, professionella UI-teman och premiumsupport.",
+ "MasteringAbpFrameworkEBook": "BehÀrskar ABP-ramverket",
+ "MasteringTheABPFrameworkExplanation": "Mastering ABP Framework e-bok; skriven av skaparen av ABP Framework, hjÀlper dig att fÄ en fullstÀndig förstÄelse för ramverket och moderna tekniker för utveckling av webbapplikationer.",
+ "Speakers": "Högtalare",
+ "PreviousEvents": "Tidigare hÀndelser",
+ "WatchTheEvent": "Titta pÄ evenemanget",
+ "RegisterNow": "Registrera dig nu",
+ "ThereIsNoEvent": "Det finns ingen hÀndelse.",
+ "Events": "HĂ€ndelser",
+ "Volo.AbpIo.Domain:080000": "Det finns redan ett inköpsobjekt som heter \"{Namn}\"",
+ "MasteringAbpFrameworkBook": "Bok: Att bemÀstra ABP:s ramverk",
+ "ABPIO-CommonPreferenceDefinition": "FÄ de senaste nyheterna om ABP Platform som nya inlÀgg, evenemang och mer.",
+ "BuiltOn": "Inbyggd",
+ "AbpFramework": "ABP-ramverk",
+ "Volo.AbpIo.Domain:080001": "Starttiden fÄr inte vara större Àn sluttiden",
+ "Enum:BookType:0": "BehÀrskar ABP-ramverket",
+ "Enum:PurchasePlatform:0": "Amazonas",
+ "Enum:PurchasePlatform:1": "Förpackningar",
+ "Copied": "Kopierat!",
+ "CouldNotCopy": "Kunde inte kopiera!",
+ "CopyNotSupportByYourBrowser": "Den hÀr funktionen fungerar inte i den webblÀsare du anvÀnder.",
+ "City": "Stad",
+ "ZipCode": "Postnummer",
+ "Address": "Adress",
+ "Homepage": "Hemsida",
+ "Year": "Ă
r",
+ "Year_Plural": "Ă
r",
+ "Copyright": "Copyright © {1}",
+ "DomainDrivenDesign": "DomÀnstyrd design",
+ "CrossCuttingConcerns": "TvÀrgÄende angelÀgenheter",
+ "AbpCommunity": "ABP Gemenskap",
+ "Footer_GithubStarCount": "{0} StjÀrnor pÄ GitHub",
+ "Footer_NugetDownloadCount": "{Nedladdningar pÄ NuGet",
+ "AbpDescription": "ABP Àr ett applikationsramverk med öppen kÀllkod som fokuserar pÄ AspNet Core-baserad utveckling av webbapplikationer. Upprepa inte dig sjÀlv, fokusera pÄ din egen affÀrskod.",
+ "Layout_AbpFramework_MetaTitle": "ABP Framework | Ramverk för webbapplikationer med öppen kÀllkod för ASP.NET Core",
+ "CommunityTalks_CountdownDays": "Dagar",
+ "CommunityTalks_CountdownHours": "Timmar",
+ "CommunityTalks_CountdownMinutes": "Min",
+ "CommunityTalks_CountdownSeconds": "Sek",
+ "SeePreviousEvents": "Se tidigare evenemang",
+ "CookieConsent_Accept": "Acceptera",
+ "CookieConsent_Explanation_1": "Vi anvÀnder cookies för att ge dig den bÀsta upplevelsen pÄ vÄr webbplats.",
+ "CookieConsent_Explanation_2": "Om du fortsÀtter att surfa samtycker du till vÄr Privatpolicy och cookiepolicy..",
+ "Error_Page_400_Title": "Det uppstod ett problem med att visa den begÀrda sidan.",
+ "Error_Page_400_Description_1": "Vanligtvis betyder det att ett ovÀntat fel intrÀffade nÀr vi behandlade din begÀran.",
+ "Error_Page_400_Description_2": "Om problemet kvarstÄr, kontakta oss pÄ info@abp.io sÄ hjÀlper vi dig att komma vidare.",
+ "GoToHomepage": "GĂ„ till hemsidan",
+ "Error_Page_404_Title": "Sidan hittades inte!",
+ "Error_Page_404_Description_1": "Det hÀr Àr inte den webbsida du letar efter.",
+ "Error_Page_500_Title": "Det ser ut som om nÄgot gick fel!",
+ "Error_Page_500_Description_1": "Vi spÄrar dessa fel automatiskt, men om problemet kvarstÄr Àr du vÀlkommen att
kontakta oss. Under tiden kan du prova att uppdatera.",
+ "Error_Page_500_Description_2": "Kontakta oss pÄ info@abp.io.",
+ "Books": "Böcker",
+ "ABPDiscordServer": "ABP Discord Server",
+ "ABPCommunityTalks": "ABP:s samtal med allmÀnheten",
+ "ABPCommunityPosts": "ABP Gemenskap InlÀgg",
+ "BuyAndGetMonths": "KĂP 12 MĂ
NADER, FĂ
14 MĂ
NADER!",
+ "GetYourDeal": "FĂ„ ditt erbjudande",
+ "BuyOrRenewLicense": "Köp eller förnya licensen nu och fÄ 2 extra mÄnader!",
+ "BuyOrRenewLicenseToGetExtra2Months": "Köp eller förnya licens nu och fÄ 2 extra mÄnader! SKYNDA DIG UPP! ⰠSista dag: {0}",
+ "HurryUp": "SKYNDA PĂ
!",
+ "LastDay": "Sista dagen: {0}",
+ "BuyNewLicenseBetweenDatesToGetBenefit": "Köp en ny licens mellan {0} och {1} för att fÄ förmÄnen i extra 2 mÄnader!",
+ "CheckAllCommunityTalks": "Kontrollera alla inlÀgg i gemenskapen",
+ "ReadMore": "LĂ€s mer om",
+ "ContinueReading": "FortsÀtta lÀsa",
+ "Post": "Post",
+ "ExploreTheContentsCreatedByTheCoreABPTeamAndTheABPCommunity": "Utforska innehÄllet som skapats av ABP:s kÀrnteam och ABP:s community.",
+ "WelcomeFallCampaign": "VÀlkommen till höstkampanjen!",
+ "GiveAwayForNewPurchases": "Application Development Classroom Training kommer att ges bort för de nya inköpen!",
+ "BlackFriday": "BLACK FRIDAY",
+ "ValidForExistingCustomers": "GÀller Àven för
befintliga kunder!",
+ "CampaignBetweenDates": "FrÄn {0}
Till {1}",
+ "SaveUpTo": "Spara Upp till${0}K",
+ "ImplementingDDD": "Implementering av domÀndriven design",
+ "ExploreTheEBook": "Utforska e-boken",
+ "ExploreTheBook": "Utforska boken",
+ "ConsultantType": "Typ av konsultverksamhet",
+ "Expert": "ABP Expert",
+ "Partner": "ABP Partner",
+ "Industry": "Industri",
+ "Location": "Plats",
+ "Contact": "Kontakt",
+ "Partner_Year": "PartnerskapsÄr",
+ "Info": "Info",
+ "SpokenLanguages": "Talade sprÄk",
+ "SocialMedia": "Sociala medier",
+ "Activity": "Aktivitet",
+ "Type": "Typ",
+ "Contribution": "Bidrag",
+ "WhoWeAre": "Vilka vi Àr",
+ "Icons": "Ikoner",
+ "Url": "Url",
+ "Icon": "Ikon",
+ "RecentActivities": "Senaste aktiviteterna",
+ "SpringCampaign": "VĂ€lkommen
VÄrens försÀljning!",
+ "SpringCampaign2": "BegrÀnsat
tidserbjudande!",
+ "AboutUs": "Om oss",
+ "HowItWorks": "Hur fungerar det?",
+ "ReleaseNotes": "Releaseanteckningar",
+ "DetailedChangeNotes": "Detaljerade Àndringsanteckningar",
+ "SeeTrainings": "Se utbildningar",
+ "NoContent": "Inget innehÄll",
+ "More": "Mer om",
+ "WhyABPIOPlatform": "Varför ABP.IO Platform?",
+ "AbpStudio": "ABP Studio",
+ "ExtraMonths": "{0}EXTRA MĂ
NADER",
+ "RSS": "RSS",
+ "RSSFeed": "RSS-flöde",
+ "Articles": "Artiklar",
+ "Organizations": "Organisationer",
+ "ManageAccount": "Hantera konto",
+ "CommunityProfile": "Gemenskapsprofil",
+ "BlogProfile": "Bloggprofil",
+ "Tickets": "Tickets",
+ "Raffles": "Raffles",
+ "Status": "Status",
+ "Resources": "Resurser",
+ "Video Courses": "Videokurser",
+ "Packages": "Paket",
+ "Trainings": "Utbildningar",
+ "MeetTheABPCommunity": "Möt ABP ",
+ "DisplayName:CommunityIndexPagePoll": "Community Index Page Poll",
+ "ReturnOnInvestment": "Avkastning pÄ investeringar",
+ "PromotionalOffers": "Kampanjerbjudanden",
+ "PromotionalOffersDefinition": "Rabatter, sÀsongskampanjer etc.",
+ "EventsDefinition": "Community Talks, webbseminarier, ABP .NET-konferens, etc.",
+ "ReleaseNotesDefinition": "ABP.IO Plattformsreleaser, nya produkter etc.",
+ "Newsletter": "Nyhetsbrev",
+ "NewsletterDefinition": "BlogginlÀgg, nyheter om samhÀllet etc.",
+ "OrganizationOverview": "Ăversikt över organisationen",
+ "EmailPreferences": "InstÀllningar för e-post",
+ "VideoCourses": "Viktiga videor",
+ "DoYouAgreePrivacyPolicy": "Genom att klicka pÄ Prenumerera-knappen godkÀnner du Villkor och bestÀmmelser och Privatlivspolicy.",
+ "AbpConferenceDescription": "ABP Conference Àr ett virtuellt evenemang för .NET-utvecklare dÀr de kan lÀra sig mer och fÄ kontakt med andra.",
+ "Mobile": "Mobil"
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/sv.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/sv.json
new file mode 100644
index 0000000000..2ac06f43f8
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/sv.json
@@ -0,0 +1,8 @@
+{
+ "culture": "sv",
+ "texts": {
+ "AbpTitle": "LÀs alla blogginlÀgg",
+ "AbpDescription": "ABP Àr ett applikationsramverk med öppen kÀllkod som fokuserar pÄ AspNet Core-baserad utveckling av webbapplikationer. Upprepa inte dig sjÀlv, fokusera pÄ din egen affÀrskod.",
+ "AbpDefinition": "ABP-blogg för .NET-utveckling, plattformsoberoende, ASP.NET-applikationsmallar, ABP-relaterade nyheter och mer..."
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sv.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sv.json
new file mode 100644
index 0000000000..f6e1184c2d
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sv.json
@@ -0,0 +1,1215 @@
+{
+ "culture": "sv",
+ "texts": {
+ "OrganizationManagement": "Organisation och ledning",
+ "OrganizationList": "Organisationslista",
+ "Volo.AbpIo.Commercial:010003": "Du Àr inte Àgare till den hÀr organisationen!",
+ "OrganizationNotFoundMessage": "Ingen organisation hittades!",
+ "DeveloperCount": "Tilldelade / totala utvecklare",
+ "QuestionCount": "Kvarvarande / totala frÄgor",
+ "Unlimited": "ObegrÀnsad",
+ "Owners": "Ăgare",
+ "Owner": "Ăgare",
+ "AddMember": "LĂ€gg till medlem",
+ "AddNewOwner": "LÀgg till ny Àgare",
+ "AddNewDeveloper": "LĂ€gg till ny utvecklare",
+ "UserName": "AnvÀndarnamn",
+ "Name": "Namn",
+ "EmailAddress": "E-postadress",
+ "Developers": "Utvecklare",
+ "LicenseType": "Typ av licens",
+ "Manage": "Hantera",
+ "SetDefault": "StÀll in som standard",
+ "DefaultOrganization": "Standard",
+ "StartDate": "Startdatum",
+ "EndDate": "Slutdatum",
+ "Modules": "Moduler",
+ "LicenseExtendMessage": "Slutdatum för din licens förlÀngs till {0}.",
+ "LicenseUpgradeMessage": "Din licens har uppgraderats till {0}.",
+ "LicenseExtendAdnUpgradeMessage": "Din licens har förlÀngts till {0} och din licensplan har uppgraderats till {1}.",
+ "LicenseAddDeveloperMessage": "{0} utvecklare lÀggs till i din licens",
+ "Volo.AbpIo.Commercial:010004": "Kan inte hitta den angivna anvÀndaren! AnvÀndaren mÄste redan ha registrerats.",
+ "MyOrganizations": "Mina organisationer",
+ "ApiKey": "API-nyckel",
+ "UserNameNotFound": "Det finns ingen anvÀndare med anvÀndarnamnet {0}",
+ "SuccessfullyAddedToNewsletter": "Tack för att du prenumererar pÄ vÄrt nyhetsbrev!",
+ "MyProfile": "Min profil",
+ "EmailNotValid": "VĂ€nligen ange en giltig e-postadress.",
+ "JoinOurMarketingNewsletter": "AnmÀl dig till vÄrt marknadsföringsnyhetsbrev",
+ "WouldLikeToReceiveMarketingMaterials": "Jag skulle vilja fÄ marknadsföringsnyheter som produkterbjudanden och specialerbjudanden.",
+ "StartUsingYourLicenseNow": "Börja anvÀnda din licens nu!",
+ "WelcomePage": "VĂ€lkomstsida",
+ "UnsubscriptionExpireEmail": "Avregistrera dig frÄn e-postmeddelanden med pÄminnelser om licensens utgÄngsdatum",
+ "UnsubscribeLicenseExpireEmailReminderMessage": "Denna e-postprenumeration innehÄller endast pÄminnelser om utgÄngsdatum för din licens.",
+ "UnsubscribeFromLicenseExpireEmails": "Om du inte vill fÄ e-postmeddelanden om utgÄngsdatum för din licens kan du avsluta prenumerationen nÀr som helst.",
+ "Unsubscribe": "Avsluta prenumeration",
+ "NotOrganizationMember": "Du Àr inte medlem i nÄgon organisation.",
+ "UnsubscribeLicenseExpirationEmailSuccessTitle": "FramgÄngsrikt avregistrerad",
+ "UnsubscribeLicenseExpirationEmailSuccessMessage": "Du kommer inte lÀngre att fÄ e-postmeddelanden med pÄminnelser om licensens utgÄngsdatum.",
+ "IndexPageHeroSection": "En komplettwebbutvecklingsplattformbyggd pÄ
ramverk",
+ "AbpCommercialShortDescription": "ABP tillhandahÄller förbyggda applikationsmoduler, verktyg för snabb applikationsutveckling, professionella UI-teman, premiumsupport och mycket mer.",
+ "LiveDemo": "Live Demo",
+ "LiveDemoLead": "{1} med ditt ABP-konto, {3} till abp.io eller fyll i formulÀret nedan för att skapa en live demo nu",
+ "ThereIsAlreadyAnAccountWithTheGivenEmailAddress": "Det finns redan ett konto med den angivna e-postadressen: {0}
Du bör logga in med ditt konto för att fortsÀtta.",
+ "GetLicence": "Skaffa licens",
+ "Application": "TillÀmpning",
+ "StartupTemplates": "Mallar för nystartade företag",
+ "Startup": "Nystartad verksamhet",
+ "Templates": "Mallar",
+ "Developer": "Utvecklare",
+ "Tools": "Verktyg",
+ "Premium": "Premium",
+ "PremiumSupport": "Premium-support",
+ "PremiumForumSupport": "Premium Forum Support",
+ "UI": "UI",
+ "Themes": "Teman",
+ "JoinOurNewsletter": "AnmÀl dig till vÄrt nyhetsbrev",
+ "Send": "Skicka",
+ "WhatIsABPFramework": "VAD ĂR ABP-RAMVERKET?",
+ "OpenSourceBaseFramework": "Basramverk med öppen kÀllkod",
+ "ABPFrameworkExplanation": "
ABP kommersiell version Àr baserad pÄ ABP Framework, en öppen kÀllkod och community-driven webbapplikationsram för ASP.NET Core.
ABP Framework ger en utmÀrkt infrastruktur för att skriva underhÄllbar, utdragbar och testbar kod med bÀsta praxis.
Byggd pÄ och integrerad med populÀra verktyg som du redan kÀnner till. LÄg inlÀrningskurva, enkel anpassning, bekvÀm utveckling.
",
+ "Modular": "ModulÀr",
+ "MicroserviceCompatible": "Kompatibel med mikrotjÀnster",
+ "DomainDrivenDesignInfrastructure": "DomÀnstyrd design Infrastruktur",
+ "MultiTenancy": "Multi-Tenancy",
+ "DistributedMessaging": "Distribuerad meddelandehantering",
+ "DynamicProxying": "Dynamisk proxyservering",
+ "BackgroundJobs": "Bakgrundsjobb",
+ "AuditLogging": "Loggning av revision",
+ "BLOBStoring": "BLOB Storing",
+ "BundlingMinification": "Paketering och minimering",
+ "AdvancedLocalization": "Avancerad lokalisering",
+ "ManyMore": "MÄnga fler",
+ "ExploreTheABPFramework": "Utforska ABP-ramverket",
+ "WhyUseTheABPCommercial": "Varför anvÀnda ABP-plattformen?",
+ "WhyUseTheABPCommercialExplanation": "
Att bygga webbapplikationer i företagsklass kan vara komplext och tidskrÀvande.
ABP erbjuder den perfekta basinfrastrukturen som krÀvs för alla moderna ASP.NET Core-baserade lösningar i företagsklass. FrÄn design till driftsÀttning, hela utvecklingscykeln förstÀrks av ABP: s inbyggda funktioner och moduler.
",
+ "StartupTemplatesShortDescription": "Startup-mallar gör att du kan starta ditt projekt pÄ nÄgra sekunder.",
+ "UIFrameworksOptions": "Alternativ för ramverk för anvÀndargrÀnssnitt;",
+ "DatabaseProviderOptions": "Alternativ för databasleverantör;",
+ "PreBuiltApplicationModules": "Förbyggda applikationsmoduler",
+ "PreBuiltApplicationModulesShortDescription": "De vanligaste applikationskraven Àr redan utvecklade Ät dig som ÄteranvÀndbara moduler.",
+ "Account": "Konto",
+ "Blogging": "Bloggande",
+ "Identity": "Identitet",
+ "IdentityServer": "Identitetsserver",
+ "Saas": "Saas",
+ "LanguageManagement": "SprÄkhantering",
+ "TextTemplateManagement": "Hantering av textmallar",
+ "See All Modules": "SeAllaModuler",
+ "ABPSuite": "ABP-svit",
+ "AbpSuiteShortDescription": "ABP Suite Àr ett kompletterande verktyg till ABP-projekt.",
+ "AbpSuiteExplanation": "Det gör att du kan bygga webbsidor pÄ bara nÄgra minuter. Det Àr ett .NET Core Global-verktyg som kan installeras frÄn kommandoraden. Det kan skapa en ny ABP-lösning och generera CRUD-sidor frÄn databasen till frontend.",
+ "Details": "Detaljer",
+ "LeptonTheme": "Lepton tema",
+ "ProfessionalModernUIThemes": "Professionella, moderna UI-teman",
+ "LeptonThemeExplanation": "Lepton tillhandahÄller en rad Bootstrap-adminteman som fungerar som en solid grund för alla projekt som krÀver en adminpanel.",
+ "DefaultTheme": "Standardtema",
+ "MaterialTheme": "Materialtema",
+ "Default2Theme": "Standard 2 Tema",
+ "DarkTheme": "Mörkt tema",
+ "DarkBlueTheme": "MörkblÄtt tema",
+ "LightTheme": "Ljus tema",
+ "ProudToWorkWith": "Stolt över att arbeta med",
+ "OurConsumers": "Tusentals företag och utvecklare i över 70 lÀnder vÀrlden över förlitar sig pÄ ABP.",
+ "JoinOurConsumers": "Anslut dig till dem och bygg fantastiska produkter snabbt.",
+ "AdditionalServicesExplanation": "Behöver du ytterligare eller anpassade tjÀnster? Vi och vÄra partners kan tillhandahÄlla;",
+ "CustomProjectDevelopment": "Anpassad projektutveckling",
+ "CustomProjectDevelopmentExplanation": "Dedikerade utvecklare för dina anpassade projekt.",
+ "PortingExistingProjects": "Portning av befintliga projekt",
+ "PortingExistingProjectsExplanation": "Migrera dina Àldre projekt till ABP-plattformen.",
+ "LiveSupport": "Support i realtid",
+ "LiveSupportExplanation": "FjÀrrsupport i realtid nÀr du behöver det.",
+ "Training": "Utbildning",
+ "TrainingExplanation": "Dedikerad utbildning för dina utvecklare.",
+ "OnBoarding": "Onboarding",
+ "OnBoardingExplanation": "HjÀlp med att konfigurera dina utvecklings-, CI- och CD-miljöer.",
+ "PrioritizedTechnicalSupport": "Prioriterad teknisk support",
+ "PremiumSupportExplanation": "Förutom det stora samhÀllsstödet i ABP-ramverket svarar vÄrt supportteam pÄ tekniska frÄgor och problem frÄn de kommersiella anvÀndarna med hög prioritet.",
+ "SeeTheSupportOptions": "Kolla in supportalternativen",
+ "Contact": "Kontakt",
+ "TellUsWhatYouNeed": "BerÀtta för oss vad du behöver.",
+ "YourMessage": "Ditt meddelande",
+ "YourFullName": "Ditt fullstÀndiga namn",
+ "FirstNameField": "Förnamn",
+ "LastNameField": "Efternamn",
+ "EmailField": "E-postadress",
+ "YourEmailAddress": "Din e-postadress",
+ "ValidEmailAddressIsRequired": "En giltig e-postadress krÀvs.",
+ "HowMayWeHelpYou": "Hur kan vi hjÀlpa dig?",
+ "SendMessage": "Skicka meddelande",
+ "Success": "FramgÄng",
+ "WeWillReplyYou": "Vi har mottagit ditt meddelande och kommer att kontakta dig inom kort.",
+ "GoHome": "GĂ„ hem",
+ "CreateLiveDemo": "Skapa live-demo",
+ "CreateLiveDemoDescription": "NÀr du har skickat in formulÀret kommer du att fÄ ett e-postmeddelande med din demolÀnk.",
+ "RegisterToTheNewsletter": "AnmÀl dig till nyhetsbrevet för att fÄ information om ABP.IO, inklusive nya releaser etc.",
+ "EnterYourEmailOrLogin": "Ange din e-postadress för att skapa din demo eller Logga in med ditt befintliga konto.",
+ "ApplicationTemplate": "Mall för ansökan",
+ "ApplicationTemplateExplanation": "Application startup template anvÀnds för att skapa en ny webbapplikation.",
+ "EfCoreProvider": "Entity Framework (Stödjer SQL Server, MySQL, PostgreSQL, Oracle och andra)",
+ "AlreadyIncludedInTemplateModules": "Följande moduler Àr redan inkluderade och konfigurerade i den hÀr mallen:",
+ "ApplicationTemplateArchitecture": "Den hÀr applikationsmallen stöder ocksÄ nivÄindelad arkitektur dÀr anvÀndargrÀnssnittslagret, API-lagret och autentiseringstjÀnsten Àr fysiskt Ätskilda.",
+ "SeeTheGuideOrGoToTheLiveDemo": "Kolla in utvecklarguiden för teknisk information om den hÀr mallen eller gÄ till live-demonstrationen.",
+ "DeveloperGuide": "Guide för utvecklare",
+ "ModuleTemplate": "Mall för modul",
+ "ModuleTemplateExplanation1": "Vill du skapa en modul och ÄteranvÀnda den i olika applikationer? Den hÀr startmallen förbereder allt för att börja skapa en ÄteranvÀndbar applikationsmodul eller en mikrotjÀnst.",
+ "ModuleTemplateExplanation2": "
Du kan stödja enstaka eller flera anvÀndargrÀnssnittsramverk, enstaka eller flera databasleverantörer för en enda modul. Startmallen Àr konfigurerad för att köra och testa din modul i en minimal applikation utöver infrastrukturen för enhets- och integrationstest.
Se utvecklarguiden för teknisk information om den hÀr mallen.
",
+ "WithAllStyleOptions": "med alla stilalternativ",
+ "Demo": "Demo",
+ "SeeAllModules": "Se alla moduler",
+ "ABPCLIExplanation": "ABP CLI (Command Line Interface) Àr ett kommandoradsverktyg för att utföra vissa vanliga ÄtgÀrder för ABP-baserade lösningar.",
+ "ABPSuiteEasilyCURD": "ABP Suite Àr ett verktyg som gör att du enkelt kan skapa CRUD-sidor",
+ "WeAreHereToHelp": "Vi Àr hÀr för att hjÀlpa",
+ "BrowseOrAskQuestion": "Du kan blÀddra i vÄra hjÀlpÀmnen eller söka i vanliga frÄgor, eller sÄ kan du stÀlla en frÄga till oss genom att anvÀnda kontaktformulÀret.",
+ "SearchQuestionPlaceholder": "Sök i vanliga frÄgor och svar",
+ "WhatIsTheABPCommercial": "Vad Àr ABP?",
+ "WhatAreDifferencesThanAbpFramework": "Vilka Àr skillnaderna mellan ABP med öppen kÀllkod och den kommersiella versionen av ABP?",
+ "AbpCommercialMetaTitle": " {0} | ABP",
+ "AbpCommercialMetaDescription": "En omfattande webbutvecklingsplattform pÄ ABP Framework med förbyggda moduler, startmallar, verktyg för snabb utveckling, proffsiga UI-teman och premiumsupport.",
+ "ABPCommercialExplanation": "ABP Platform Àr en uppsÀttning premiummoduler, verktyg, teman och tjÀnster som Àr byggda pÄ toppen av open source ABP-ramverket. ABP utvecklas och stöds av samma team som ligger bakom ABP-ramverket.",
+ "WhatAreDifferencesThanABPFrameworkExplanation": "
ABP-ramverket Àr ett modulÀrt, tematiserbart, mikrotjÀnstkompatibelt ramverk för applikationsutveckling för ASP.NET Core. Det ger en komplett arkitektur och en stark infrastruktur sÄ att du kan fokusera pÄ din egen affÀrskod istÀllet för att upprepa dig sjÀlv för varje nytt projekt. Det Àr baserat pÄ bÀsta praxis för mjukvaruutveckling och populÀra verktyg som du redan kÀnner till.
ABP-ramverket Àr helt gratis, öppen kÀllkod och community-driven. Det ger ocksÄ ett gratis tema och nÄgra förbyggda moduler (t.ex. identitetshantering och hyresgÀsthantering).
<",
+ "VisitTheFrameworkVSCommercialDocument": "Besök följande lÀnk för mer information {1} ",
+ "ABPCommercialFollowingBenefits": "ABP kommersiell version lÀgger till följande fördelar ovanpÄ ABP-ramverket:",
+ "Professional": "Professionell",
+ "UIThemes": "Teman för anvÀndargrÀnssnitt",
+ "EnterpriseModules": "Enterprise ready, funktionsrika, förbyggda applikationsmoduler (t.ex. hantering av identitetsserver, SaaS-hantering, sprÄkhantering)",
+ "ToolingToSupport": "Verktyg för att stödja din utvecklingsproduktivitet (t.ex. ABP Suite)",
+ "PremiumSupportLink": "Premium Support",
+ "WhatDoIDownloadABPCommercial": "Vad laddar jag ner nÀr jag köper den kommersiella versionen av ABP?",
+ "CreateUnlimitedSolutions": "NÀr du har köpt en ABP Commercial-licens kan du skapa obegrÀnsade lösningar som beskrivs i dokumentet GÄ igÄng.",
+ "ABPCommercialSolutionExplanation": "NÀr du skapar en ny applikation fÄr du en Visual Studio-lösning (en startmall) som baseras pÄ dina önskemÄl. Den nedladdade lösningen har kommersiella moduler och teman som redan Àr installerade och konfigurerade Ät dig. Du kan ta bort en förinstallerad modul eller lÀgga till en annan modul om du vill. Alla moduler och teman anvÀnder NuGet/NPM-paket som standard.",
+ "StartDevelopWithTutorials": "Den nedladdade lösningen Àr vÀl arkitekterad och dokumenterad. Du kan börja utveckla din egen företagskod baserad pÄ den genom att följa handledningarna.",
+ "TryTheCommercialDemo": "Du kan prova Live Demo för att se ett exempel pÄ en applikation som skapats med hjÀlp av ABP-startmallen.",
+ "HowManyProducts": "Hur mÄnga olika produkter/lösningar kan jag bygga med hjÀlp av ABP?",
+ "HowManyProductsExplanation": "Du kan skapa sÄ mÄnga projekt du vill under din aktiva licensperiod; det finns ingen grÀns! Efter att din licens har löpt ut kan du inte skapa nya projekt, men du kan fortsÀtta att utveckla de projekt du har laddat ner och distribuera dem till ett obegrÀnsat antal servrar.",
+ "HowManyDevelopers": "Hur mÄnga utvecklare kan arbeta med ABP?",
+ "HowManyDevelopersExplanation": "ABP-licenser Àr per utvecklare. Olika licenstyper har olika grÀnser för utvecklare. Du kan dock lÀgga till fler utvecklare till vilken licenstyp som helst nÀr du behöver. Kolla in sidan Planer och priser för licenstyper, utvecklargrÀnser och ytterligare utvecklingskostnader.",
+ "ChangingLicenseType": "Kan jag uppgradera min licenstyp senare?",
+ "ChangingLicenseTypeExplanation": "Du kan uppgradera till en högre licens genom att betala mellanskillnaden inom din aktiva licensperiod. NĂ€r du uppgraderar till en högre licensplan fĂ„r du fördelarna med den nya planen, men licensuppgraderingen Ă€ndrar inte licensens utgĂ„ngsdatum. Dessutom kan du ocksĂ„ lĂ€gga till nya utvecklarplatser till din befintliga licens, kolla in \"Hur mĂ„nga utvecklare kan arbeta med ABP?\" VANLIGA FRĂ
GOR.",
+ "LicenseExtendUpgradeDiff": "Vad Àr skillnaden mellan licensförlÀngning och uppgradering?",
+ "LicenseExtendUpgradeDiffExplanation": "FörlÀngning: Genom att förlÀnga/förnya din licens kommer du att fortsÀtta att fÄ premiumsupport och fÄ större eller mindre uppdateringar för modulerna och teman. Dessutom kommer du att kunna fortsÀtta skapa nya projekt. Och du kommer fortfarande att kunna anvÀnda ABP Suite, vilket pÄskyndar din utveckling. NÀr du förlÀnger din licens lÀggs 1 Är till licensens utgÄngsdatum.
Uppgradering: Genom att uppgradera din licens kommer du att befordras till en högre licensplan, vilket gör att du kan fÄ ytterligare fördelar. Kolla in jÀmförelsetabellen för licenser för att se skillnaderna mellan licensplanerna. NÀr du uppgraderar Àndras dÀremot inte licensens utgÄngsdatum! För att förlÀnga licensens slutdatum mÄste du förlÀnga din licens.",
+ "LicenseRenewalCost": "Vad Àr kostnaden för licensförnyelse efter 1 Är?",
+ "LicenseRenewalCostExplanation": "Priset för förnyelse (förlÀngning) av standard Team License Àr ${0}, standard Business License Àr ${1} och standard Enterprise License Àr ${2}. Om du redan Àr kund, logga in pÄ ditt konto för att granska den aktuella förnyelseprissÀttningen.",
+ "HowDoIRenewMyLicense": "Hur förnyar jag min licens?",
+ "HowDoIRenewMyLicenseExplanation": "Du kan förnya din licens genom att navigera till organisationshanteringssidan. För att dra nytta av vÄra rabatterade priser för tidig förnyelse, se till att du förnyar innan din licens löper ut. Oroa dig inte för att du inte vet nÀr din möjlighet till tidig förnyelse stÀngs; du kommer att fÄ 3 pÄminnelse-e-postmeddelanden innan din prenumeration löper ut. Vi skickar dem 30 dagar, 7 dagar och 1 dag före utgÄngen.",
+ "IsSourceCodeIncluded": "Omfattar min licens kÀllkoden för pro-modulerna och teman?",
+ "IsSourceCodeIncludedExplanation1": "Beror pÄ vilken licenstyp du har köpt:",
+ "IsSourceCodeIncludedExplanation2": "Team: Din lösning anvÀnder moduler och teman som NuGet- och NPM-paket. Den inkluderar inte deras kÀllkod. PÄ sÄ sÀtt kan du enkelt uppgradera dessa moduler och teman nÀr en ny version Àr tillgÀnglig. Du kan dock inte fÄ kÀllkoden för dessa moduler och teman.",
+ "IsSourceCodeIncludedExplanation3": "Business/Enterprise: Utöver Team-licensen kan du ladda ner kÀllkoden för alla moduler eller teman du behöver. Du kan till och med ta bort NuGet/NPM-paketreferenserna för en viss modul och lÀgga till dess kÀllkod direkt i din lösning för att Àndra den helt.",
+ "IsSourceCodeIncludedExplanation4": "Att inkludera kÀllkoden för en modul i din lösning ger dig maximal frihet att anpassa den modulen. Det kommer dock inte att vara möjligt att automatiskt uppgradera modulen nÀr en ny version slÀpps.
Ingen av licenserna inkluderar kÀllkoden för ABP Suite och ABP Studio, vilket Àr externa verktyg som genererar kod Ät dig och hjÀlper din utveckling.
Kolla in sidan Planer och priser för andra skillnader mellan licenstyperna.
<",
+ "ChangingDevelopers": "Kan jag Àndra de registrerade utvecklarna för min organisation i framtiden?",
+ "ChangingDevelopersExplanation": "Förutom att lÀgga till nya utvecklare till din licens kan du ocksÄ Àndra befintliga utvecklare (du kan ta bort en utvecklare och lÀgga till en ny pÄ samma plats) utan nÄgon extra kostnad.",
+ "WhatHappensWhenLicenseEnds": "Vad hÀnder nÀr min licensperiod upphör?",
+ "WhatHappensWhenLicenseEndsExplanation1": "ABP-licensen Àr en perpetuell licens. NÀr din licens löper ut kan du fortsÀtta att utveckla ditt projekt. Och du Àr inte skyldig att förnya din licens. Din licens levereras med en ettÄrig uppdaterings- och supportplan direkt ur lÄdan. För att fortsÀtta fÄ nya funktioner, prestandaförbÀttringar, buggfixar, support och fortsÀtta anvÀnda ABP Suite mÄste du förnya din licens. NÀr din licens löper ut;",
+ "WhatHappensWhenLicenseEndsExplanation2": "Du kan inte skapa nya lösningar med hjÀlp av den kommersiella versionen av ABP, men du kan fortsÀtta att utveckla dina befintliga applikationer för alltid.",
+ "WhatHappensWhenLicenseEndsExplanation3": "Du kommer att kunna fÄ uppdateringar för modulerna och teman inom din MINOR-version (utom RC- eller Preview-versioner). Om du t.ex. anvÀnder v3.2.0 av en modul kan du fortfarande fÄ uppdateringar för v3.2.x (v3.2.1, v3.2.5... etc.) av den modulen. Men du kan inte fÄ uppdateringar för nÀsta större eller mindre version (som v3.3.0, v3.3.3, 4.x.x.. etc.). Till exempel, nÀr din licens löpte ut, den senaste versionen var v4.4.3, och senare publicerade den bÄde 4.4.4-versionen och 4.5.0-versionen, skulle du kunna komma Ät v4.4.X men du skulle inte komma Ät v4.5.X.",
+ "WhatHappensWhenLicenseEndsExplanation4": "Du kan inte installera nya moduler och teman som lÀggs till i ABP:s kommersiella plattform efter att din licens har upphört.",
+ "WhatHappensWhenLicenseEndsExplanation5": "Du kan inte anvÀnda ABP Suite.",
+ "WhatHappensWhenLicenseEndsExplanation6": "Du kan inte fÄ premium support lÀngre.",
+ "WhatHappensWhenLicenseEndsExplanation7": "Du kan förlÀnga (förnya) din licens om du vill fortsÀtta att fÄ dessa förmÄner. Om du förlÀnger din licens inom {3} dagar efter att din licens har löpt ut, kommer följande rabatter att tillÀmpas: Teamlicens {0}; Företagslicens {1}; Enterprise-licens {2}.",
+ "discountForYears": "{0}% rabatt för {1} Är",
+ "WhatHappensWhenLicenseEndsExplanation8": "De ABP-projekt som du genererar lagras inte pÄ vÄra servrar. DÀrför Àr det ditt ansvar att behÄlla kÀllkoden som du laddar ner. NÀr din licens löper ut finns det inget sÀtt att fÄ tag pÄ kÀllkoden för dina genererade ABP-projekt.",
+ "WhenShouldIRenewMyLicense": "NÀr ska jag förnya min licens?",
+ "WhenShouldIRenewMyLicenseExplanation": "Om du förnyar din licens inom {3} dagar efter att din licens har löpt ut, kommer följande rabatter att tillÀmpas: Teamlicens {0}; Företagslicens {1}; Enterprise-licens {2}. Men om du förnyar din licens efter {3} dagar efter licensens utgÄngsdatum, kommer förnyelsepriset att vara detsamma som licensens inköpspris och det kommer inte att finnas nÄgon rabatt pÄ din förnyelse.",
+ "TrialPlan": "Har du en testplan?",
+ "TrialPlanExplanation": "Ja, för att starta din kostnadsfria testversion, kontakta marketing@volosoft.com. Vi erbjuder ocksÄ en 30-dagars pengarna-tillbaka-garanti för Team-licensen, inga frÄgor stÀlls! Du kan begÀra full Äterbetalning inom de första 30 dagarna efter licensköpet. Vi ger 60% Äterbetalning inom 30 dagar för Business- och Enterprise-licenser. Detta beror pÄ att Business- och Enterprise-licenserna innehÄller den fullstÀndiga kÀllkoden för alla moduler och teman.",
+ "DoYouAcceptBankWireTransfer": "Accepterar ni banköverföringar?",
+ "DoYouAcceptBankWireTransferExplanation": "Ja, vi accepterar banköverföringar.
NÀr du har skickat licensavgiften via banköverföring, skicka ditt kvitto och önskad licenstyp till accounting@volosoft.com.
VÄr internationella bankkontoinformation:",
+ "HowToUpgrade": "Hur uppgraderar man befintliga applikationer nÀr en ny version finns tillgÀnglig?",
+ "HowToUpgradeExplanation1": "NÀr du skapar en ny applikation med hjÀlp av ABP anvÀnds alla moduler och teman som NuGet- och NPM-paket. PÄ sÄ sÀtt kan du enkelt uppgradera paketen nÀr en ny version finns tillgÀnglig.",
+ "HowToUpgradeExplanation2": "Förutom de vanliga NuGet/NPM-uppgraderingarna tillhandahÄller ABP CLI ett uppdateringskommando som automatiskt hittar och uppgraderar alla ABP-relaterade paket i din lösning.",
+ "DatabaseSupport": "Vilka databassystem stöds?",
+ "DatabaseSupportExplanation": "ABP Framework i sig Àr databasagnostiskt och kan fungera med alla databasleverantörer genom sin natur. Kolla in Data Access-dokumentet för en lista över för nÀrvarande implementerade leverantörer.",
+ "UISupport": "Vilka UI-ramverk stöds?",
+ "Supported": "Stödd",
+ "UISupportExplanation": "ABP Framework Àr i sig sjÀlvt agnostiskt och kan fungera med alla anvÀndargrÀnssnitt. Startmallar, modul-anvÀndargrÀnssnitt och teman implementerades dock inte för alla anvÀndargrÀnssnittsramverk. Kolla in GÄ igÄng-dokumentet för den uppdaterade listan över anvÀndargrÀnssnittsalternativ.",
+ "MicroserviceSupport": "Stödjer den microservice-arkitekturen?",
+ "MicroserviceSupportExplanation1": "Ett av de viktigaste mÄlen med ABP-ramverket Àr att tillhandahÄlla en bekvÀm infrastruktur för att skapa mikroservicelösningar. Kolla in Microservice Architecture-dokumentet för att förstÄ hur det hjÀlper till att skapa mikroservicesystem.",
+ "MicroserviceSupportExplanation2": "Alla ABP-moduler Àr utformade för att stödja distributionsscenarier för mikrotjÀnster (med eget API och egen databas) genom att följa dokumentet Module Development Best Practices.",
+ "MicroserviceSupportExplanation3": "Vi tillhandahÄller ett exempel pÄ Microservice Demo Solution som visar en implementering av en mikrotjÀnstarkitektur för att hjÀlpa dig att skapa din egen lösning.",
+ "MicroserviceSupportExplanation4": "SÄ det korta svaret Àr: \"Ja, det stöder mikroservicearkitektur\".",
+ "MicroserviceSupportExplanation5": "Ett mikrotjÀnstsystem Àr dock en lösning och varje lösning kommer att ha olika krav, nÀtverkstopologi, kommunikationsscenarier, autentiseringsmöjligheter, databasdelning/partitioneringsbeslut, runtime-konfigurationer, integrationer med tredjepartssystem och mycket mer.",
+ "MicroserviceSupportExplanation6": "ABP tillhandahÄller infrastruktur för microservice-scenarier, microservice-kompatibla moduler, exempel och dokumentation som hjÀlper dig att bygga din egen lösning. Men förvÀnta dig inte att direkt ladda ner din drömlösning som Àr förbyggd Ät dig. Du mÄste förstÄ den och sammanföra specifika delar baserat pÄ dina krav.",
+ "WhereCanIDownloadSourceCode": "Var kan jag ladda ner kÀllkoden?",
+ "WhereCanIDownloadSourceCodeExplanation": "Du kan ladda ner kÀllkoden för alla ABP-moduler, Angular-paket och teman via ABP Suite eller ABP CLI. Kolla in Hur man laddar ner kÀllkoden?",
+ "ComputerLimitation": "Hur mÄnga datorer kan en utvecklare logga in pÄ nÀr han utvecklar ABP?",
+ "ComputerLimitationExplanation": "Vi tillÄter specifikt {0} datorer per individ/licensierad utvecklare. NÀr det finns ett behov för en utvecklare att utveckla ABP-baserade produkter pÄ en tredje maskin, ska ett e-postmeddelande skickas till license@abp.io dÀr situationen förklaras, och vi kommer sedan att göra lÀmplig tilldelning i vÄrt system.",
+ "RefundPolicy": "Har ni nÄgon Äterbetalningspolicy?",
+ "RefundPolicyExplanation": "Du kan begÀra Äterbetalning inom 30 dagar efter ditt licensköp. Licenstyperna Business och Enterprise har alternativ för nedladdning av kÀllkod; dÀrför ger vi en Äterbetalning pÄ 60 % inom 30 dagar för Business- och Enterprise-licenser. Dessutom görs inga Äterbetalningar för förnyelser och andra licensköp.",
+ "HowCanIRefundVat": "Hur kan jag Äterbetala moms?",
+ "HowCanIRefundVatExplanation1": "Om du gjorde betalningen med 2Checkout kan du Äterbetala momsen via ditt 2Checkout-konto:",
+ "HowCanIRefundVatExplanation2": "Logga in pÄ ditt 2Checkout-konto",
+ "HowCanIRefundVatExplanation3": "Leta upp rĂ€tt order och tryck pĂ„ \"Ă
terbetala försenad moms\" (ange ditt momsregistreringsnummer)",
+ "HowCanIGetMyInvoice": "Hur kan jag fÄ min faktura?",
+ "HowCanIGetMyInvoiceExplanation": "Det finns 2 betalningsgateways för att köpa en licens: Iyzico och 2Checkout. Om du köper din licens via 2Checkout-gatewayen skickar den PDF-fakturan till din e-postadress; kolla in 2Checkout-fakturering. Om du köper via Iyzico-gatewayen, med en anpassad inköpslÀnk eller via en banköverföring, kommer vi att förbereda och skicka din faktura. Du kan begÀra eller ladda ner din faktura frÄn sidan för organisationshantering. Innan du kontaktar oss för fakturan, kontrollera din organisationshanteringssida!",
+ "Forum": "Forum",
+ "SupportExplanation": "ABP-licensen ger ett premiumforumstöd av ett team som bestÄr av ABP Framework-experter.",
+ "PrivateTicket": "Privat biljett",
+ "PrivateTicketExplanation": "Enterprise License inkluderar Àven en privat support med e-post och Àrendehanteringssystem.",
+ "AbpSuiteExplanation1": "Med ABP Suite kan du skapa webbsidor pÄ bara nÄgra minuter. Det Àr ett globalt .NET Core-verktyg som kan installeras frÄn kommandoraden.",
+ "AbpSuiteExplanation2": "Den kan skapa en ny ABP-lösning och generera CRUD-sidor frÄn databasen till frontend. För teknisk översikt se dokumentet",
+ "FastEasy": "Snabbt och enkelt",
+ "AbpSuiteExplanation3": "Med ABP Suite kan du enkelt skapa CRUD-sidor. Du behöver bara definiera din entitet och dess egenskaper och lÄta resten gÄ till ABP Suite Ät dig! ABP Suite genererar all nödvÀndig kod för din CRUD-sida pÄ nÄgra sekunder. Den stöder Angular, MVC och Blazor anvÀndargrÀnssnitt.",
+ "RichOptions": "Rika alternativ",
+ "AbpSuiteExplanation4": "ABP Suite stöder flera anvÀndargrÀnssnittsalternativ som Razor Pages och Angular. Den stöder ocksÄ flera databaser som MongoDB och alla databaser som stöds av EntityFramework Core (MS SQL Server, Oracle, MySql, PostgreSQL och andra leverantörer...).",
+ "AbpSuiteExplanation5": "Det som Àr bra Àr att du inte behöver oroa dig för dessa alternativ. ABP Suite förstÄr din projekttyp och genererar koden för ditt projekt och placerar den genererade koden pÄ rÀtt plats i ditt projekt.",
+ "SourceCode": "KĂ€llkod",
+ "AbpSuiteExplanation6": "ABP Suite genererar kÀllkoden Ät dig! Den genererar inte magiska filer för att generera webbsidan. ABP Suite genererar kÀllkoden för Entity, Repository, Application Service, Code First Migration, JavaScript/TypeScript och CSHTML/HTML och Àven nödvÀndiga grÀnssnitt. ABP Suite genererar ocksÄ koden enligt Best Practices för programvaruutveckling, sÄ du behöver inte oroa dig för den genererade kodens kvalitet.",
+ "AbpSuiteExplanation7": "Eftersom du har kÀllkoden för byggstenarna i den genererade CRUD-sidan i rÀtt applikationslager kan du enkelt Àndra kÀllkoden och lÀgga till din egen anpassade affÀrslogik i den genererade koden.",
+ "CrossPlatform": "Plattformsoberoende",
+ "AbpSuiteExplanation8": "ABP Suite Àr byggt med .NET Core och Àr plattformsoberoende. Den körs som en webbapplikation pÄ din lokala dator. Du kan köra den pÄ Windows, Mac och Linux",
+ "OtherFeatures": "Andra funktioner",
+ "OtherFeatures1": "Uppdaterar enkelt NuGet- och NPM-paket pÄ din lösning.",
+ "OtherFeatures2": "Ă
terskapar redan genererade sidor frÄn början.",
+ "OtherFeatures3": "Skapar nya lösningar",
+ "ThanksForCreatingProject": "Ditt projekt har skapats framgÄngsrikt!",
+ "HotToRunSolution": "Hur kör du din lösning?",
+ "HotToRunSolutionExplanation": "I dokumentet Kom igÄng kan du lÀsa om hur du konfigurerar och kör din lösning.",
+ "GettingStarted": "Komma igÄng",
+ "WebAppDevTutorial": "Handledning för utveckling av webbapplikationer",
+ "WebAppDevTutorialExplanation": "I handledningsdokumentet för utveckling av webbapplikationer finns ett exempel pÄ utveckling steg för steg.",
+ "Document": "Dokument",
+ "UsingABPSuiteToCURD": "AnvÀnda ABP Suite för generering av CRUD-sidor och verktyg",
+ "SeeABPSuiteDocument": "Kolla in ABP Suite-dokumentet för att lÀra dig anvÀndningen av ABP Suite.",
+ "AskQuestionsOnSupport": "Du kan stÀlla frÄgor pÄ ABP Support.",
+ "Documentation": "Dokumentation",
+ "SeeModulesDocument": "Se sidan med moduler för en lista över alla PRO-moduler.",
+ "Pricing": "PrissÀttning",
+ "PricingExplanation": "VÀlj de egenskaper och funktioner som ditt företag behöver idag. Uppgradera enkelt nÀr ditt företag vÀxer.",
+ "Team": "Team",
+ "Business": "Företag",
+ "Enterprise": "Företag",
+ "Custom": "Anpassad",
+ "IncludedDeveloperLicenses": "Inkluderade utvecklarlicenser",
+ "CustomLicenceOrAdditionalServices": "Behöver du en anpassad licens eller ytterligare tjÀnster?",
+ "CustomOrVolumeLicense": "Anpassad licens eller volymlicens",
+ "LiveTrainingSupport": "Utbildning och support i realtid",
+ "AndMore": "och mer",
+ "AdditionalDeveloperLicense": "Ytterligare licens för utvecklare",
+ "ProjectCount": "ProjektrÀkning",
+ "AllProModules": "Alla proffsmoduler",
+ "AllProThemes": "Alla proffsteman",
+ "AllProStartupTemplates": "Alla proffsmallar för nystartade företag",
+ "SourceCodeOfAllModules": "KÀllkod för alla moduler",
+ "SourceCodeOfAllThemes": "KÀllkod för alla teman",
+ "PerpetualLicense": "Evig licens",
+ "UnlimitedServerDeployment": "ObegrÀnsad serverdistribution",
+ "YearUpgrade": "1 Ärs uppgradering",
+ "YearPremiumForumSupport": "1 Ärs premiumsupport för forum",
+ "ForumSupportIncidentCountYear": "Antal incidenter för forumstöd/Är",
+ "PrivateTicketEmailSupport": "Privat support via biljett och e-post",
+ "BuyNow": "Köp nu",
+ "PayViaAmexCard": "Hur kan jag betala med mitt AMEX-kort?",
+ "PayViaAmexCardDescription": "Standardbetalningsgatewayen \"Iyzico\" kan neka vissa AMEX-kreditkort pÄ grund av sÀkerhetsÄtgÀrder. I detta fall kan du betala via den alternativa betalningsgatewayen \"2Checkout\".",
+ "ThankYou": "Tack sÄ mycket",
+ "InvalidReCaptchaErrorMessage": "Det uppstod ett fel vid verifiering av reCAPTCHA. VÀnligen försök igen.",
+ "CompanyName": "Företagets namn",
+ "YourCompanyName": "Ditt företagsnamn",
+ "FirstName": "Förnamn",
+ "LastName": "Efternamn",
+ "Optional": "Valfritt",
+ "YourFirstName": "Ditt förnamn",
+ "YourLastName": "Ditt efternamn",
+ "SpecialOffer": "Specialerbjudande",
+ "SpecialOfferMessage": "Skynda dig! Priserna gÀller under en begrÀnsad tid.",
+ "DiscountRequest": "BegÀran om rabatt",
+ "DiscountRequestDescribeCustomerQuestion": "Vilken av följande beskrivningar stÀmmer in pÄ dig?",
+ "DiscountRequestStudentEmailMessage": "E-postadressen mÄste innehÄlla \"edu\".",
+ "DiscountRequestDeveloperCount": "Hur mÄnga utvecklare Àr ni?",
+ "DiscountRequestDeveloperCountExceedMessage": "Vi erbjuder inte rabatterade licenser för företag som har fler Àn {0} utvecklare.",
+ "DiscountRequestOrganizationName": "Företagets/organisationens/skolans namn",
+ "Website": "Webbplats",
+ "GithubUsername": "AnvÀndarnamn för GitHub",
+ "PhoneNumber": "Telefonnummer",
+ "Country": "Land",
+ "DescribeABPCommercialUsage": "Beskriv det projekt som du planerar att utveckla baserat pÄ APB",
+ "DiscountRequestCertifyInformationMessage": "Jag intygar att alla uppgifter Àr sanningsenliga och korrekta.",
+ "DiscountRequestReceived": "Vi har mottagit din begÀran om rabatt.",
+ "DiscountRequestStatusMessage": "Vi kommer att svara dig efter att ha kontrollerat den information du har lÀmnat.",
+ "MVCOrRazorPages": "MVC (Razor Pages)",
+ "Angular": "Angular",
+ "Blazor": "Blazor",
+ "New": "Nya",
+ "MongoDB": "MongoDB",
+ "EBookDDD": "E-bok DomÀnstyrd design",
+ "PracticalGuideForImplementingDDD": "Den hÀr boken Àr en praktisk guide för att implementera domÀndriven design med ABP-ramverket.",
+ "IntroducingDDD": "Introduktion till domÀndriven design",
+ "DDDLayersAndCleanArchitecture": "DDD-skikt och ren arkitektur",
+ "LayeringOfADotnetSolution": "Skiktning av en .NET-lösning",
+ "ImplementingDDDBuildingBlocks": "Implementering av DDD-byggstenar",
+ "DomainVsApplicationLogic": "DomÀnlogik vs applikationslogik",
+ "SamplesAndDiscussions": "Provtagningar och diskussioner",
+ "Free": "Gratis",
+ "Download": "Nedladdningar",
+ "DDDEBook": "DDD E-bok",
+ "ImplementingDDD": "Implementering av domÀndriven design",
+ "DDDBookExplanation": "En praktisk guide för implementering av domÀndriven design med ABP-ramverket.",
+ "Overview": "Ăversikt",
+ "DDDBookPracticalGuide": "Detta Àr en praktisk guide för implementering av domÀndriven design (DDD). Implementeringsdetaljerna bygger pÄ ABP Framework-infrastrukturen, men kÀrnkoncepten, principerna och mönstren Àr tillÀmpliga pÄ alla typer av lösningar, Àven om det inte Àr en .NET-lösning.",
+ "TableOfContents": "InnehÄllsförteckning",
+ "IntroductionToImplementingDDD": "Introduktion till implementering av domÀndriven design",
+ "WhatIsDDD": "Vad Àr domÀndriven design?",
+ "Implementation": "Implementering",
+ "TheBigPicture": "Den stora bilden",
+ "TheBuildingBlock": "Byggstenen",
+ "ExampleUseCase": "Exempel AnvÀndningsfall",
+ "DomainAndApplicationLogic": "DomÀnlogik och applikationslogik",
+ "Author": "Författaren",
+ "PublishedOn": "Publicerad pÄ",
+ "Page": "Sidan",
+ "FreeEBook": "Gratis e-bok",
+ "EBookSignInForDownload": "För att ladda ner e-boken logga in",
+ "SignIn": "Logga in",
+ "Or": "Eller",
+ "TellUsAboutYourself": "BerÀtta lite om dig sjÀlv",
+ "Surname": "Efternamn",
+ "DoYouAgreePrivacyPolicy": "Jag samtycker till Terms & Conditions och Privacy Policy.",
+ "VolosoftMarketingInformationMessage": "Jag vill ha information, tips och erbjudanden om Solutions for Businesses and Organizations och andra produkter och tjÀnster frÄn Volosoft.",
+ "VolosoftSharingInformationMessage": "Jag vill att Volosoft ska dela min information med utvalda partners sÄ att jag kan fÄ relevant information om deras produkter och tjÀnster.",
+ "WeWillSendYouADownloadLink": "LÀnken för nedladdning av e-boken har skickats till {0}. Kontrollera din inkorg, skrÀppost och spamboxar!",
+ "InvalidFormInputs": "VÀnligen skriv in den giltiga information som anges pÄ formulÀret.",
+ "DDDBookEmailBody": "Tack sÄ mycket.
För att ladda ner din bok, klicka hÀr.",
+ "StartFree": "Starta gratis",
+ "FreeTrial": "Gratis provperiod",
+ "AcceptsMarketingCommunications": " Ja, jag vill gÀrna fÄ ABP-relaterade marknadsföringsnyheter.",
+ "PurposeOfUsage": "Syfte med anvÀndningen",
+ "Choose": "- VĂ€lj -",
+ "CompanyOrganizationName": "Företagets/organisationens namn",
+ "CompanySize": "Företagets storlek",
+ "Next": "NĂ€sta",
+ "StartTrial": "Starta min kostnadsfria testperiod",
+ "ContactUsQuestions": "Kontakta oss om du har nÄgra frÄgor",
+ "TrialActivatedWarning": "En anvÀndare har endast rÀtt till 1 gratis provperiod. Du har redan anvÀnt din provperiod.",
+ "ActivationRequirement": "Du Àr bara ett steg frÄn att starta din provperiod.
Efter att ha kontrollerat din information aktiverar vi din licens. NÀr din licens Àr aktiverad skickar vi ett e-postmeddelande till {0}. Oroa dig inte, den hÀr processen kommer inte att ta lÄng tid!",
+ "SaveAndDownload": "Spara och ladda ner",
+ "CompanyNameValidationMessage": "Företagsnamnet Àr för lÄngt!",
+ "AddressValidationMessage": "Adressen Àr för lÄng!",
+ "TaxNoValidationMessage": "TAX/VAT Nej Àr för lÄngt!",
+ "NotesValidationMessage": "AnteckningsfÀltet Àr för lÄngt!",
+ "CheckYourBillingInfo": "Du kan bara skapa din faktura en gÄng! Kontrollera din faktureringsinformation innan du skapar din faktura.",
+ "StartYourFreeTrial": "Starta din kostnadsfria testperiod",
+ "TrialLicenseModelInvalidErrorMessage": "Ett av följande fÀlt Àr ogiltigt: Landsnamn, Företagsstorlek, Bransch eller Syfte med anvÀndning.",
+ "Trial": "RÀttegÄng",
+ "Purchased": "Köpte",
+ "PurchaseNow": "Köp nu",
+ "PurchaseTrialLicenseMessage": "Din licens utgÄngsdatum Àr {0}.
Om du vill fortsÀtta anvÀnda de projekt som du skapade under din kostnadsfria testperiod mÄste du Àndra licensnycklarna i dina appsettings.secrets.json-filer. HÀr Àr din licensnyckel:",
+ "TrialLicenseExpireMessage": "Du anvÀnder en testlicens och din testlicens upphör att gÀlla den {0}.",
+ "TryForFree": "Prova gratis",
+ "TrialLicenseExpiredInfo": "Din testlicensperiod har löpt ut!",
+ "DowngradeLicensePlan": "Kan jag nedgradera till en lÀgre licensplan i framtiden?",
+ "DowngradeLicensePlanExplanation": "Du kan inte nedgradera din befintliga licensplan. Men du kan köpa en ny lÀgre licensplan och fortsÀtta din utveckling pÄ den nya licensen. NÀr du har köpt en lÀgre licens behöver du bara logga in pÄ din nya licensplan via ABP CLI-kommandot: ` abp login -o `.",
+ "LicenseTransfer": "Kan en licens överföras frÄn en utvecklare till en annan?",
+ "LicenseTransferExplanation": "Ja, det gör jag! NĂ€r du köper en licens blir du licensinnehavare och fĂ„r dĂ€rmed tillgĂ„ng till sidan för organisationshantering. En organisation har rollerna Ă€gare och utvecklare. Ăgare kan hantera utvecklarplatserna och tilldela utvecklare. Varje tilldelad utvecklare loggar in via ABP CLI-kommandot i systemet och har utvecklings- och supportbehörighet.",
+ "UserOwnerDescription": "Organisationens \"Àgare\" Àr administratör för detta konto. Han/hon hanterar organisationen genom att köpa licenser och tilldela utvecklare. En \"Àgare\" kan inte skriva kod i ABP-projekten, kan inte ladda ner ABP-exempelprojekten och kan inte stÀlla frÄgor pÄ supportwebbplatsen. Om du vill göra allt detta mÄste du ocksÄ lÀgga till dig sjÀlv som utvecklare.",
+ "UserDeveloperDescription": "\"Utvecklarna\" kan skriva kod i ABP-projekten, ladda ner ABP:s exempelprojekt och stĂ€lla frĂ„gor pĂ„ supportwebbplatsen. Ă
andra sidan kan \"utvecklarna\" inte hantera den hÀr organisationen.",
+ "RemoveCurrentUserFromOrganizationWarningMessage": "Du tar bort dig sjÀlv frÄn din egen organisation. Du kommer inte lÀngre att kunna hantera den hÀr organisationen, bekrÀftar du det?",
+ "RenewExistingOrganizationOrCreateNewOneMessage": "Du kan förnya licensen för din organisation (er) genom att klicka pÄ nedanstÄende \"FörlÀng nu\"-knapp (ar) och dÀrmed kan du förlÀnga licensens utgÄngsdatum med 1 Är. Om du fortsÀtter till kassan kommer du att ha en ny organisation. Vill du fortsÀtta med en ny organisation?",
+ "PurchaseTrialOrganizationOrCreateNewOneMessage": "Du har en testlicens. För att köpa din testlicens klickar du pÄ knappen Köp nu. Om du fortsÀtter till kassan kommer du att ha en ny organisation. Vill du fortsÀtta med en ny organisation?",
+ "ExtendNow": "FörlÀnga / Förnya",
+ "CreateNewOrganization": "Skapa en ny organisation",
+ "RenewLicenseEarly": "Om jag förnyar min licens tidigt, kommer jag att fÄ hela Äret?",
+ "RenewLicenseEarylExplanation": "NÀr du förnyar din licens före licensens utgÄngsdatum kommer 1 Är att lÀggas till licensens utgÄngsdatum. Om din licens t.ex. löper ut den {0}-06-06 och du förnyar den den {0}-01-01, kommer din nya licens att löpa ut den {1}-06-06.",
+ "OpenSourceWebApplication": "Webbapplikation med öppen kÀllkod",
+ "CompleteWebDevelopment": "En komplett webbutveckling",
+ "ABPFrameworkDescription": "ABP Framework Àr en komplett infrastruktur för att skapa moderna webbapplikationer genom att följa de bÀsta metoderna för mjukvaruutveckling och konventioner.",
+ "CommunityDescription": "Dela dina erfarenheter av ABP-ramverket!",
+ "GetStarted": "Kom igÄng",
+ "Views": "utsikt",
+ "LatestPosts": "Senaste inlÀgg",
+ "PreBuiltApplication": "Förbyggd applikation",
+ "DatabaseProviders": "Databasleverantörer",
+ "UIFrameworks": "Ramverk för anvÀndargrÀnssnitt",
+ "UsefulLinks": "AnvÀndbara lÀnkar",
+ "Platform": "Plattform",
+ "CoolestCompaniesUseABPCommercial": "De coolaste företagen anvÀnder redan ABP.",
+ "UserInterface": "AnvÀndargrÀnssnitt",
+ "APIGateway": "API-gateway",
+ "Microservice": "Mikroservice",
+ "Database": "Databas",
+ "Architecture": "Arkitektur",
+ "MicroserviceArchitectureExplanation": "Det hÀr Àr en komplett lösningsarkitektur som bestÄr av flera applikationer, API-gateways, mikrotjÀnster och databaser för att bygga en skalbar mikrotjÀnstlösning med den senaste tekniken.",
+ "BusinessLogic": "AffÀrslogik",
+ "DataAccessLayer": "DataÄtkomstskikt",
+ "Monolith": "Monolit",
+ "ModularArchitectureExplanation": "Denna startup-mall ger en skiktad, modulÀr och DDD-baserad lösningsarkitektur för att bygga en ren och underhÄllbar kodbas.",
+ "SeeDetails": "Se detaljer",
+ "SeeDocumentation": "Kolla in dokumentationen",
+ "Bs5Compatible": "Professionellt tema som Àr kompatibelt med Bootstrap 5, perfekt för din administratörswebbplats.",
+ "LeptonXTheme": "LeptonX tema",
+ "LeptonXDark": "LeptonX Mörk",
+ "LeptonXLight": "LeptonX Ljus",
+ "LeptonXSemiDark": "LeptonX Halvmörk",
+ "BuiltOnBs5Library": "Byggd pÄ Bootstrap 5-biblioteket",
+ "FullyCompatibleWithBs5": "100% kompatibel med Bootstrap 5 HTML-struktur och CSS-klasser",
+ "ResponsiveAndMobileCompatible": "Responsiv, mobilkompatibel, RTL-stöd",
+ "ProvidesStylesForDatatables": "TillhandahÄller stilar för datatabeller",
+ "MultipleLayoutOptions": "Flera layoutalternativ",
+ "EasilyInstallAndUpgrade": "Enkel installation och uppgradering",
+ "SupportForum": "Forum för support",
+ "TrustedBy": "Betrodda av",
+ "OurPricing": "VÄr prissÀttning",
+ "Plans": "Planer",
+ "NameSurname": "Namn Efternamn",
+ "Unspecified": "Ospecificerad",
+ "LicenceType": "Typ av licens",
+ "LicenseDiscountWarning": "DENNA RABATTSIDA ANVĂNDER STANDARD RABATTKOD OCH FĂR VOLOSOFT UTVECKLARE. INKĂPSLĂNKAR NEDAN FUNGERAR INTE.",
+ "DiscountedLicenseExplanation": "Dessa licenspriser Àr avsedda för smÄ nystartade företag, enskilda utvecklare, studenter, ideella organisationer och projekt!",
+ "General": "AllmÀnt",
+ "License": "Licens",
+ "Development": "Utveckling",
+ "Payment": "Betalning",
+ "WatchExplainerVideo": "LÄt oss trÀffas! Titta pÄ förklarande video",
+ "LightDarkAndSemiDarkThemes": "Ljus, mörk och halvmörk",
+ "LeptonXThemeExplanation": "Lepton Theme kan Àndra ditt tema enligt dina systeminstÀllningar.",
+ "PRO": "PRO",
+ "WelcomeToABPCommercial": "VĂ€lkommen till ABP Platform!",
+ "YourAccountDetails": "Dina kontouppgifter",
+ "OrganizationName": "Organisationens namn",
+ "AddDevelopers": "LĂ€gg till utvecklare",
+ "StartDevelopment": "Starta utveckling",
+ "CreateAndRunApplicationUsingStartupTemplate": "LÀr dig hur du skapar och kör en ny webbapplikation med hjÀlp av ABP:s startmallar.",
+ "CommunityDescription2": "community.abp.io Àr en plats dÀr mÀnniskor kan dela ABP-relaterade artiklar. Sök efter artiklar, handledningar, kodprover, fallstudier och trÀffa mÀnniskor som Àr i samma spÄr som du.",
+ "UseABPSuiteExplanation": "AnvÀnd ABP Suite för att ladda ner kÀllkoden för modulerna och temana.",
+ "ManageModulesWithSuite": "Du kan ocksÄ hantera dina ABP-moduler med Suite.",
+ "LearnHowToInstallSuite": "LÀr dig hur du installerar och anvÀnder ABP Suite.",
+ "SeeMore": "Se mer",
+ "SeeLess": "Se mindre",
+ "LayeredSolutionStructure": "Struktur med flera lager av lösningar",
+ "LayeredSolutionStructureExplanation": "Lösningen Àr uppbyggd i lager baserat pÄ principer och mönster för domÀndriven design för att isolera affÀrslogiken frÄn infrastruktur och integrationer och för att maximera underhÄll och ÄteranvÀndning av koden. ABP Framework tillhandahÄller redan abstraktioner, basklasser och guider för att verkligen implementera DDD för din applikation.",
+ "MultipleUIOptions": "Flera alternativ för anvÀndargrÀnssnitt",
+ "MultipleUIOptionsExplanation": "Vi Àlskar olika sÀtt att skapa anvÀndargrÀnssnitt. Den hÀr startup-lösningen ger tre olika alternativ för anvÀndargrÀnssnitt för din affÀrsapplikation.",
+ "MultipleDatabaseOptions": "Flera databasalternativ",
+ "MultipleDatabaseOptionsExplanation": "Du har tvĂ„ alternativ för databasleverantörer (förutom att du kan anvĂ€nda bĂ„da i en och samma applikation). AnvĂ€nd Entity Framework Core för att arbeta med alla relationsdatabaser och anvĂ€nd eventuellt Dapper nĂ€r du behöver skriva lĂ„gnivĂ„frĂ„gor för bĂ€ttre prestanda. MongoDB Ă€r ett annat alternativ om du behöver anvĂ€nda en dokumentbaserad NoSQL-databas. Ăven om dessa leverantörer Ă€r vĂ€lintegrerade, abstraherade och förkonfigurerade kan du faktiskt interagera med alla databassystem som du kan anvĂ€nda med .NET.",
+ "ModularArchitectureExplanation2": "Modularitet Àr en första klassens medborgare i ABP.IO-plattformen. Alla applikationsfunktionaliteter Àr uppdelade i vÀlisolerade valfria moduler. Startlösningen levereras redan med de grundlÀggande ABP-modulerna förinstallerade. Du kan ocksÄ skapa dina egna moduler för att bygga ett modulÀrt system för din egen applikation.",
+ "MultiTenancyForSaasBusiness": "Multi-Tenancy för ditt SaaS-företag",
+ "MultiTenancyForSaasBusinessExplanation": "ABP tillhandahÄller ett komplett, end-to-end multi-tenancy-system för att skapa dina SaaS-system (Software-as-a-Service). Det gör det möjligt för hyresgÀsterna att dela eller ha sina egna databaser med on-the-fly databasskapande och migrationssystem.",
+ "MicroserviceStartupSolution": "Microservice Startup-lösning",
+ "MicroserviceArchitectureExplanation2": "Du kan skaffa det till ditt nÀsta microservice-system för att dra nytta av den förbyggda baslösningen och destillerade erfarenheten.",
+ "PreIntegratedTools": "Förintegrerad i populÀra verktyg",
+ "PreIntegratedToolsExplanation": "Lösningen Àr redan integrerad i branschens standardverktyg och -tekniker, men du kan alltid Àndra dem och integrera dem med dina favoritverktyg.",
+ "SingleSignOnAuthenticationServer": "Server för autentisering med enkel inloggning",
+ "SingleSignOnAuthenticationServerExplanation": "Lösningen har en autentiseringsserverapplikation som anvÀnds av de andra applikationerna som en server för enkel inloggning med API-Ätkomsthanteringsfunktioner. Den Àr baserad pÄ IdentityServer.",
+ "WebAppsWithGateways": "2 Webbapp med 2 API-gateways",
+ "WebAppsWithGatewaysExplanation": "Lösningen innehÄller tvÄ webbapplikationer som var och en har en dedikerad API-gateway (BFF - Backend For Frontend-mönster).",
+ "BackOfficeApplication": "Back Office-applikation",
+ "BackOfficeApplicationExplanation": "Den faktiska webbapplikationen för ditt system, med flera alternativ för anvÀndargrÀnssnitt. Du kan skapa alla typer av affÀrsapplikationer.",
+ "LandingWebsite": "Landningswebbplats",
+ "LandingWebsiteExplanation": "En generisk landningsplats/publik webbplats som kan anvÀndas för flera ÀndamÄl, t.ex. för att presentera ditt företag, sÀlja dina produkter osv.",
+ "ABPFrameworkEBook": "Mastering ABP Framework e-bok",
+ "MasteringAbpFrameworkEBookDescription": "IngÄr i din ABP-licens",
+ "FullName": "Full Name",
+ "LicenseTypeNotCorrect": "Licenstypen Àr inte korrekt!",
+ "Trainings": "Utbildningar",
+ "ChooseTrainingPlaceholder": "VĂ€lj utbildning...",
+ "DoYouNeedTrainings": "Behöver du nÄgon av dessa utbildningar?",
+ "DoYouNeedTraining": "Behöver du {0} utbildning?",
+ "GetInTouchUs": "Ta kontakt med oss",
+ "ForMoreInformationClickHere": "För mer information, klicka hÀr.",
+ "ForMoreInformationClickHereByClass": "För mer information, klicka hÀr.",
+ "IsGetOnboardingTraining": "Vill du fÄ utbildning i onboarding och utveckling av webbapplikationer?",
+ "OnboardingWebApplicationDevelopmentTrainingMessage": "För att schemalÀgga din utbildningskalender, vÀnligen kontakta {0} efter att du har skapat organisationen",
+ "CustomPurchaseMessage": "För nÀsta steg, klicka pÄ {0} för att kontakta oss.",
+ "Note": "Notera",
+ "AdditionalNote": "Ytterligare anmÀrkning",
+ "OnboardingTrainingFaqTitle": "Har du en ABP onboarding-utbildning?",
+ "OnboardingTrainingFaqExplanation": "Ja, vi har ABP Training Services som hjÀlper dig att snabbt komma igÄng med ditt ABP-projekt. Du kommer att lÀra dig om ABP frÄn en medlem i ABP:s kÀrnteam och du kommer att fÄ de fÀrdigheter som krÀvs för att starta ditt ABP-projekt. I onboarding-utbildningen förklarar vi hur du stÀller in din utvecklingsmiljö, installerar de nödvÀndiga verktygen och skapar en fullt fungerande CRUD-sida. Utbildningen kommer att vara live och Zoom-applikationen kommer att anvÀndas, men vi Àr öppna för att anvÀnda andra online-mötesplattformar. SprÄket för utbildningen kommer att vara engelska. Du kan ocksÄ stÀlla dina frÄgor om ABP under sessionerna. En lÀmplig tid och ett lÀmpligt datum kommer att planeras för bÄda parter. För att fÄ mer information, kontakta oss pÄ info@abp.io.",
+ "AddBasket": "LĂ€gg till i korgen",
+ "SendTrainingRequest": "Skicka förfrÄgan om utbildning",
+ "OnlyEnglishVersionOfThisDocumentIsTheRecentAndValid": "* Den engelska versionen av detta dokument Àr den mest aktuella och den engelska versionen ska ha företrÀde i alla tvister.",
+ "Pricing_Page_Title": "Priser och planer",
+ "Pricing_Page_Description": "VÀlj de funktioner och den funktionalitet som ditt företag behöver idag. Köp en ABP-licens och skapa obegrÀnsat med projekt.",
+ "Pricing_Page_HurryUp": "Skynda dig!",
+ "Pricing_Page_BuyLicense": "Köp en licens till 2021 Ärs priser fram till den 16 januari!",
+ "Pricing_Page_ValidForExistingCustomers": "GÀller Àven för befintliga kunder och licensförnyelser.",
+ "Pricing_Page_Hint1": "I licenspriset ingÄr ett visst antal platser för utvecklare. Om du har fler utvecklare kan du alltid köpa ytterligare platser.",
+ "Pricing_Page_Hint2": "Du kan köpa fler utvecklarlicenser nu eller i framtiden. Licenserna Àr platsbaserade, vilket innebÀr att du kan överföra en plats frÄn en utvecklare till en annan.",
+ "Pricing_Page_Hint3": "Du kan utveckla ett obegrÀnsat antal olika produkter med din licens.",
+ "Pricing_Page_Hint4": "ABP Suite Àr ett verktyg som hjÀlper dig att utveckla och förbÀttra din produktivitet. Det stöder generering av CRUD-sidor och skapande av nya projekt.",
+ "Pricing_Page_Hint5": "Du kan anvÀnda alla de förbyggda modulerna i dina applikationer.",
+ "Pricing_Page_Hint6": "Du kan anvÀnda alla de förbyggda temana i dina applikationer.",
+ "Pricing_Page_Hint7": "En startmall Àr en Visual Studio-lösning som hjÀlper dig att komma igÄng med ditt projekt. Alla grundlÀggande moduler lÀggs till och förkonfigureras Ät dig.",
+ "Pricing_Page_Hint8": "Mastering ABP Framework e-bok förklarar hur man implementerar .NET-lösningar med bÀsta praxis. Den sÀljs pÄ Amazon.com, och du kan ladda ner boken gratis med din licens.",
+ "Pricing_Page_Hint9": "Du kan ladda ner kÀllkoden för alla moduler. Du kanske vill lÀgga till kÀllkoden i din lösning för att göra radikala Àndringar eller bara behÄlla den för dig sjÀlv av sÀkerhetsskÀl.",
+ "Pricing_Page_Hint10": "Licenserna Àr livstidsbaserade. Det innebÀr att du kan fortsÀtta att utveckla din applikation för alltid. TillgÄng till den senaste versionen och support beviljas inom licensperioden (1 Är om du inte förnyar den).",
+ "Pricing_Page_Hint11": "Inga begrÀnsningar för driftsÀttning! Du kan distribuera till sÄ mÄnga servrar som du vill, inklusive molntjÀnster eller lokalt.",
+ "Pricing_Page_Hint12": "Du kan uppdatera moduler, teman och verktyg till den senaste versionen inom din aktiva licensperiod. NÀr din licens löper ut mÄste du förnya den för att fortsÀtta att fÄ uppdateringar för buggfixar, nya funktioner och förbÀttringar.",
+ "Pricing_Page_Hint13": "Du kan fÄ premiumsupport i ett Är (du kan förnya din licens för att förlÀnga den).",
+ "Pricing_Page_Hint14": "Team- och Business-licenser har en grÀns för antal incidenter/frÄgor. Om du köper ytterligare utvecklarlicenser ökar incidentgrÀnsen med {0} (för Team-licensen) eller {1} (för Business-licensen) per utvecklare.",
+ "Pricing_Page_Hint15": "Endast Enterprise License inkluderar privat support. Du kan skicka ett e-postmeddelande direkt till ABP-teamet eller stÀlla frÄgor pÄ support.abp.io med ett privat biljettalternativ. De privata Àrendena Àr inte synliga för allmÀnheten.",
+ "Pricing_Page_Hint16": "Du kan ladda ner kÀllkoden för alla ABP-teman. Du kanske vill lÀgga till kÀllkoden i din lösning för att göra radikala Àndringar eller bara behÄlla den för dig sjÀlv av sÀkerhetsskÀl.",
+ "Pricing_Page_Testimonial_1": "ABP gjorde det möjligt för SC Ventures att leverera en bankklassad SaaS-plattform med silodatabas med flera hyresgÀster pÄ 9 mÄnader för att stödja leverantörskedjans kundfordringar / leverantörsskulder för finansiering av fakturor med betydande vÀrde frÄn flera integrerade ankare. ABP:s modularitet gjorde det möjligt för teamet att leverera pÄ rekordtid, klara alla VAPT och distribuera den containeriserade mikrotjÀnststacken via fullstÀndig CI/CD och pipelines till produktion.",
+ "Pricing_Page_Testimonial_2": "Vi ser vÀrdet av att anvÀnda ABP för att minska omkostnaderna för kundanpassade utvecklingsprojekt. Teamet kan förena kodmönstret i olika projektströmmar. Vi ser mer potential i ramverket för att vi ska kunna bygga nya funktioner snabbare Àn tidigare. Vi litar pÄ att vi stÀndigt kommer att se vÀrdet av att utnyttja ABP.",
+ "Pricing_Page_Testimonial_3": "Vi Àlskar ABP. Vi behöver inte skriva allt frÄn grunden. Vi utgÄr frÄn out-of-the-box-funktioner och fokuserar bara pÄ det vi verkligen behöver skriva. Dessutom Àr ABP vÀlarkitekterat och koden Àr av hög kvalitet med fÀrre buggar. Om vi hade varit tvungna att skriva allt vi behövde pÄ egen hand hade vi kanske fÄtt lÀgga ner flera Är. Ytterligare en sak vi gillar Àr att den nya versionen, problemfixningen eller förbÀttringen kommer ut vÀldigt snart, varannan vecka. Vi vÀntar inte för lÀnge.",
+ "Pricing_Page_Testimonial_4": "ABP Àr en fantastisk produkt som jag skulle rekommendera. Kommersiella produkter till marknaden för vÄra kunder i en enda konfigurerbar plattform. Den starthjÀlp som ramverket och verktygen ger alla team Àr vÀrd varenda cent. ABP var det som passade bÀst för vÄra behov.",
+ "Pricing_Page_Testimonial_5": "ABP Framework Ă€r inte bara ett ramverk, utan det Ă€r ocksĂ„ en guide för projektutveckling/hantering, eftersom det ger utbildning i DDD, GenericRepository, DI, Microservice och Modularity. Ăven om du inte kommer att anvĂ€nda sjĂ€lva ramverket kan du utveckla dig sjĂ€lv med docs.abp.io som Ă€r vĂ€l och professionellt förberedd (OpenIddict, Redis, Quartz etc.). Eftersom mĂ„nga saker Ă€r förbyggda förkortar det projektutvecklingstiden avsevĂ€rt (t.ex. inloggningssida, undantagshantering, datafiltrering, sĂ„dd, revisionsloggning, lokalisering, automatisk API-kontroller etc.) Som ett exempel frĂ„n vĂ„r applikation har jag anvĂ€nt Local Event Bus för lagerstyrning. SĂ„ jag kan hantera orderrörelser genom att skriva lagerhanterare. Det Ă€r underbart att inte förlora tid för CreationTime, CreatorId. De fylls i automatiskt.",
+ "Pricing_Page_Testimonial_6": "ABP Framework Àr ett bra ramverk men det tar tid att förstÄ de olika lager, klasser och bibliotek som det anvÀnder (sÀrskilt ABP). Jag spenderade mycket tid pÄ att lÀsa kodbasen, men ABP sparade oss tid nÀr vi skapade projektspecialitetsenheterna (AR) och förvaret kopplat till var och en av dem. Jag gillade ocksÄ att den metod som anvÀnds i ABP Àr mycket mogen; vi vet att den Àr baserad pÄ DDD och monolit.",
+ "Pricing_Page_Testimonial_7": "Som ett nystartat företag mÄste vi iterera snabbt och spendera minimal tid pÄ standardfunktioner och icke-kÀrnfunktioner.\nVÄra ingenjörer strÀcker sig frÄn mycket erfarna till juniora ingenjörer, och vi behövde en gemensam förstÄelse och ett sÀtt att dela teknisk och domÀnkunskap, ABP gjorde det möjligt för oss att göra detta tack vare deras fantastiska guider och dokumentation.\nDet finns saker som vi inte har behövt oroa oss för eftersom de fungerar direkt med ABP.\nABP hjÀlpte oss att effektivisera snabb prototyping och utveckling, mindre Àn 4 veckor frÄn funktionsstart till produktion. Med alla premiumfunktioner som ingÄr i licensen har ABP gett oss \"Startup in a Box\" pÄ Software Engineering-sidan.",
+ "Pricing_Page_Testimonial_8": "Jag skulle rekommendera ABP till alla som vill utöka utbudet av produkter som Àr tillgÀngliga för sina kunder. Det Àr fantastiskt nÀr man behöver anvÀnda en distribuerad företagsmiljö (Angular, WPF, Win&Linux). Förutom deras produkter Àlskar vi deras support, som gör vÄrt jobb snabbare och enklare. Vi vet redan att vi har hittat en bra partner för framtiden som kommer att stödja oss i att expandera vÄr verksamhet.",
+ "Pricing_Page_Testimonial_9": "Vi Àr ett företag med 2 anstÀllda som har varit i branschen i över 20 Är.\nNÀr det gÀller vÄr erfarenhet av ABP kontaktades vi av en kund som ville att vi skulle utveckla en ny personalapplikation i en modern miljö för att ersÀtta deras 25 Är gamla Access-applikation. Vi bestÀmde oss för att gÄ över frÄn en desktoplösning till en webbaserad lösning.\n\nVid den tidpunkten hade vi mycket liten kunskap om webbapplikationer och .NET, men vi snubblade över ABP, och med hjÀlp av ABP Framework, teknisk dokumentation och ABP Suite kunde vi inte bara utveckla applikationen enligt kundens specifikationer utan ocksÄ framgÄngsrikt arbeta i en .NET-miljö inom ett Är.",
+ "AbpBookDownloadArea_ClaimYourEBook": "Gör ansprÄk pÄ din e-bok om ABP Framework",
+ "AddMemberModal_Warning_1": "Om det anvÀndarnamn som du försöker lÀgga till inte finns i systemet, be din teammedlem att registrera sig pÄ {0} och dela anvÀndarnamnet pÄ hans/hennes konto med dig.",
+ "MyOrganizations_Detail_WelcomeMessage": "VĂ€lkommen till din organisation, {0}",
+ "MyOrganizations_Detail_OrganizationManagement": "Organisation Förvaltning",
+ "OrganizationDisplayName": "Organisationens visningsnamn",
+ "MyOrganizations_Detail_EditDisplayName": "Redigera visningsnamn",
+ "MyOrganizations_Detail_UpgradeYourLicense": "Uppgradera din licens",
+ "MyOrganizations_Detail_LicenseStartAndExpiryDate": "Licensens startdatum - utgÄngsdatum",
+ "MyOrganizations_Detail_OwnerRightInfo": "Du anvÀnder {0} av din {1} Àgares rÀttigheter.",
+ "MyOrganizations_Detail_CopyApiKey": "Kopiera nyckeln",
+ "MyOrganizations_Detail_ApiKeyDescription": "API-nyckeln Àr token för PRO-paket som finns pÄ {1}.",
+ "MyOrganizations_Detail_YourPrivateNugetSource": "Din privata NuGet-kÀlla Àr {0}",
+ "MyOrganizations_Detail_PrivateNugetSourceWarning": "Detta lÀggs automatiskt till som en feed till din NuGet.Config i din ABP-lösning. Dela inte din privata nyckel med obehöriga anvÀndare!",
+ "MyOrganizations_Detail_DeveloperSeatInfo": "Du anvÀnder {0} av dina {1} platser för utvecklare.",
+ "NeedMoreSeatsForYourTeam": "Behöver du fler platser för ditt team?",
+ "MyOrganizations_Detail_PricePerYear": "{0} / per Är",
+ "MyOrganizations_Detail_PurchaseDeveloperSeats": "Köpa platser för utvecklare",
+ "Invoices": "Fakturor",
+ "RequestInvoice": "BegÀr faktura",
+ "OrderNumber": "BestÀllningsnummer",
+ "Date": "Datum",
+ "Products": "Produkter",
+ "TotalPrice": "Totalt pris",
+ "ThereIsNoInvoice": "Det finns ingen faktura",
+ "MyOrganizations_Detail_PaymentProviderInfo": "Om du har köpt din licens via {0} gateway skickas PDF-fakturan till din e-postadress, se {0} fakturering.",
+ "MyOrganizations_Detail_PayUInfo": "Om du har köpt via Iyzico-gatewayen klickar du pÄ knappen \"BegÀr faktura\" och fyller i faktureringsinformationen.",
+ "MyOrganizations_Detail_ConclusionInfo": "Din fakturabegÀran kommer att behandlas inom {0} arbetsdagar.",
+ "ExtendYourLicense": "FörlÀng din {0} licens",
+ "Continue": "FortsÀtt",
+ "PurchaseLicense": "Köp {0} licens",
+ "DownloadInvoiceModal_DownloadInvoice": "Ladda ner faktura",
+ "DownloadInvoiceModal_SaveInformationOnlyOnce": "Du kan bara spara din faktureringsinformation en gÄng.",
+ "InvoiceModal_EnterCompanyName": "Ange ditt juridiska företagsnamn...",
+ "InvoiceModal_EnterCompanyAddress": "Ange din juridiska företagsadress...",
+ "InvoiceModal_EnterTaxNumber": "Ange ditt TAX/VAT-nummer om det finns tillgÀngligt...",
+ "RequestInvoiceModal_EnterNotes": "Ytterligare information för din faktura... Denna anteckning kommer att skrivas i anteckningsavsnittet pÄ fakturan.",
+ "PrePayment_PayWithIyzico": "Du kommer att betala med Iyzico",
+ "ContinueToCheckout": "FortsÀtt till kassan",
+ "PrePayment_IyzicoRedirectionInfo": "Du kommer att omdirigeras till Iyzico Payment Gateway för att slutföra ditt köp pÄ ett sÀkert sÀtt.",
+ "PrePayment_IyzicoAcceptVisaAndMasterCard": "Iyzico tar emot Visa och MasterCard.",
+ "Purchase": "Köp",
+ "AcceptTermsAndConditions": "Jag har lÀst, förstÄtt och accepterar integritetspolicy, villkor och EULA.",
+ "AcceptTermsAndConditionsWarningMessage": "VĂ€nligen acceptera integritetspolicyn och villkoren",
+ "SelectGatewayToContinue": "VÀnligen vÀlj en Gateway för att fortsÀtta!",
+ "GatewaySelection_SelectGateway": "VĂ€lj en betalningsportal",
+ "GatewaySelection_RedirectionMessage": "DÀrefter kommer du att omdirigeras till den valda betalningsgatewayens webbplats för transaktionen.",
+ "PaymentSucceed_PaymentSuccessMessage": "Betalning framgÄngsrik",
+ "PaymentSucceed_ThanksForPurchase": "Tack för ditt köp!",
+ "PaymentSucceed_CreateYourOrganization": "Skapa din organisation",
+ "PaymentSucceed_AddMeAsDeveloper": "Jag Àr ocksÄ utvecklare, lÀgg till mig som utvecklare i min organisation.",
+ "PaymentSucceed_CreateOrganization": "Skapa organisation",
+ "PaymentSucceed_OrganizationDescription": "En organisation bestĂ„r av utvecklare och Ă€gare. Utvecklarna Ă€r anvĂ€ndare som skriver kod pĂ„ ABP-projektet och som kommer att dra nytta av webbplatsen {1}. Ăgarna Ă€r anvĂ€ndare som tilldelar utvecklarplatser och hanterar licensiering.",
+ "PaymentSucceed_ViewOrganization": "Klicka hÀr för att se organisationen",
+ "Purchase_TotalAnnualPrice": "TOTALT (Ärsavgift)",
+ "Purchase_TrainingPrice": "Pris för utbildning",
+ "Purchase_OnboardingTraining": "Live-utbildning i onboarding och utveckling av webbapplikationer",
+ "TotalDeveloperPrice": "Totalt pris för utvecklare",
+ "Purchase_PricePerDeveloper": "{0} per utvecklare",
+ "Purchase_IncludedDeveloperInfo": "{0} {1} ingÄr.",
+ "Purchase_LicenseExtraDeveloperPurchaseMessage": "I {0} licens ingÄr {1} utvecklare. Du kan lÀgga till ytterligare utvecklare.",
+ "StartupTemplates_Page_Title": "ABP Startup Mallar",
+ "StartupTemplates_Page_Description": "Med ABP kan du bygga lösningar med valfri komplexitetsnivÄ. Det ger tvÄ huvudsakliga förbyggda startlösningar. Du kan vÀlja den som ligger nÀrmast dina krav och bygga din egen anpassade lösning ovanpÄ den.",
+ "MicroserviceStartupSolutionForDotnet": "Microservice Startup-lösning för .NET",
+ "MonolithSolutionForDotnet": "Monolitisk (modulÀr) lösning för .NET",
+ "TrainingDetailsHeaderInfo_TrainingHour": "{0} timmar",
+ "Trainings_Content": "Utbildningens innehÄll",
+ "Trial_Page_StartYourFreeTrial": "Starta din gratis provperiod.",
+ "TrialLicenseFeatures": "Du kommer att kunna dra nytta av alla ABP:s kommersiella funktioner",
+ "TrialPeriodDays": "Du kommer att ha en {0} dagars teamlicens",
+ "TrialForumSupportIncident": "Du kommer att ha {0} forum support incidenter",
+ "Contact_Page_Title": "Kontakt med ABP:s utvecklingsteam",
+ "Contact_Page_Description": "Kontakta ABP:s utvecklingsteam om du behöver hjÀlp eller dela med dig av dina tankar och Äsikter! ABP Support Team Àr redo att hjÀlpa till.",
+ "Demo_Page_Title": "Skapa en demo",
+ "Demo_Page_Description": "Skapa en gratis demo för att se ett exempel pÄ en ansökan som skapats med hjÀlp av ABP:s startmallar. Upprepa inte dig sjÀlv för vanliga applikationskrav.",
+ "Discounted_Page_Title": "Rabatterad prissÀttning",
+ "Discounted_Page_Description": "VÀlj de funktioner och den funktionalitet som ditt företag behöver redan idag. Köp en ABP-licens och skapa obegrÀnsat med projekt",
+ "Faq_Page_Title": "Vanliga frÄgor och svar (FAQ)",
+ "Faq_Page_Description": "Har du nÄgra frÄgor eller funderingar? Sök bland vanliga frÄgor eller stÀll en frÄga till oss via kontaktformulÀret.",
+ "Faq_Page_SwiftCode": "SWIFT-kod",
+ "Faq_Page_BankName": "Bankens namn",
+ "Faq_Page_AccountName": "Kontots namn",
+ "Faq_Page_AccountNumber": "Kontonummer",
+ "Faq_Page_Currency": "Valuta",
+ "Faq_Page_VatNumber": "Momsregistreringsnummer",
+ "Faq_Page_OtherCurrenciesInfo": "För andra valutor, se alla konton",
+ "ProjectCreatedSuccess_Page_Title": "Ditt projekt skapat",
+ "ProjectCreatedSuccess_Page_Description": "Ditt ABP-projekt har skapats framgÄngsrikt!",
+ "Suite_Page_Title": "ABP-svit",
+ "Suite_Page_Description": "ABP tillhandahÄller verktyg för snabb applikationsutveckling för att öka utvecklarens produktivitet. Med ABP Suite kan du enkelt skapa CRUD-sidor.",
+ "Themes_Page_Title": "ABP Teman",
+ "Themes_Page_Description": "ABP tillhandahÄller flera professionella, moderna UI-teman. Skapa en gratis demo för att fÄ en snabb bild av hur anvÀndargrÀnssnittet ser ut.",
+ "Tools_Page_Title": "Verktyg för snabb applikationsutveckling",
+ "Tools_Page_Description": "ABP tillhandahÄller verktyg för snabb applikationsutveckling för att öka utvecklarens produktivitet. Med ABP Suite kan du enkelt skapa CRUD-sidor.",
+ "DeveloperPrice": "Pris för utvecklare",
+ "AdditionalDeveloperPaymentInfoSection_AdditionalDevelopers": "{0} utvecklare",
+ "LicenseRemainingDays": "för {0} dagar",
+ "ExtendPaymentInfoSection_Description": "Genom att förlÀnga/förnya din licens kommer du att fortsÀtta att fÄ premium support. Du kommer ocksÄ att kunna fÄ större eller mindre uppdateringar för moduler och teman. Du kommer att kunna fortsÀtta skapa nya projekt. Och du kommer fortfarande att kunna anvÀnda ABP Suite som pÄskyndar din utveckling.",
+ "LicenseRenewalPrice": "Pris för förnyelse av licens",
+ "LicensePrice": "Licenspris",
+ "TrialLicensePaymentInfoSection_Description": "Köp licens: Genom att köpa en licens kommer du att fortsÀtta att fÄ premium support. Du kommer ocksÄ att kunna fÄ större eller mindre uppdateringar för moduler och teman. Du kommer att kunna fortsÀtta skapa nya projekt. Och du kommer fortfarande att kunna anvÀnda ABP Suite som pÄskyndar din utveckling.
Se jÀmförelsetabellen för licenser för att kontrollera skillnaderna mellan licenstyperna.",
+ "SelectTargetLicense": "VÀlj mÄllicens",
+ "UpgradePaymentInfoSection_ExtendMyLicenseForOneYear": "Ja, förlÀnga min licens utgÄngsdatum med 1 Är.",
+ "UpgradePaymentInfoSection_WantToExtendLicense": "Vill du förlÀnga din licens med ytterligare 1 Är?",
+ "UpgradePaymentInfoSection_UpgradingWillNotExtendLicense": "Uppgradering kommer inte att förlÀnga licensens utgÄngsdatum!",
+ "UpgradePaymentInfoSection_LicenseUpgradeDescription": "Genom att uppgradera din licens kommer du att bli befordrad till en högre licenstyp, vilket gör att du kan fÄ ytterligare fördelar. Se jÀmförelsetabellen för licenser för att kontrollera skillnaderna mellan licenstyperna.",
+ "Landing_Page_CustomerStories": "Customer Stories",
+ "Landing_Page_OurGreatCustomers": "VÄra fantastiska kunder",
+ "Landing_Page_WebApplicationFramework": "Ramverk för webbapplikationer",
+ "Landing_Page_WebDevelopmentPlatform": "Plattform för webbutveckling",
+ "Landing_Page_CompleteWebDevelopmentPlatform": "Komplett plattform för webbutveckling",
+ "Landing_Page_TryFreeDemo": "Prova gratis demo",
+ "Landing_Page_StartingPointForWebApplications": "UtgÄngspunkten för ASP.NET Core-baserade webbapplikationer! Den Àr baserad pÄ ABP-ramverket för bÀsta webbutveckling.",
+ "Landing_Page_AbpProvidesSoftwareInfrastructure": "ABP Framework tillhandahÄller en mjukvaruinfrastruktur för att utveckla utmÀrkta webbapplikationer med bÀsta praxis.",
+ "Landing_Page_MicroserviceCompatibleArchitecture": "Kompatibel arkitektur för mikrotjÀnster",
+ "Landing_Page_PreBuiltApplicationModulesAndThemes": "Förbyggda applikationsmoduler och teman",
+ "Landing_Page_MultiTenantArchitecture": "Arkitektur för flera hyresgÀster",
+ "Landing_Page_MultiTenancyDescription": "SaaS-applikationer pÄ ett enkelt sÀtt! Integrerad multi-tenancy frÄn databas till anvÀndargrÀnssnitt.",
+ "Landing_Page_DDDIntroduction": "Designad och utvecklad utifrÄn DDD-mönster och principer. Ger en skiktad modell för din applikation.",
+ "Landing_Page_CrossCuttingConcernsInfo": "Komplett infrastruktur för auktorisering, validering, undantagshantering, cachelagring, revisionsloggning, transaktionshantering med mera.",
+ "Landing_Page_PreBuiltApplicationModules": "Förbyggda applikationsmoduler som omfattar de vanligaste kraven pÄ webbapplikationer.",
+ "Landing_Page_ChatModule": "Chatt",
+ "Landing_Page_DocsModule": "Dokument",
+ "Landing_Page_FileManagementModule": "Filhantering",
+ "Landing_Page_CustomerStory_1": "ABP gjorde det möjligt för SC Ventures att leverera en bankklassad SaaS-plattform med silodatabas med flera hyresgÀster pÄ 9 mÄnader för att stödja leverantörskedjans kundfordringar / leverantörsskulder för finansiering av fakturor med betydande vÀrde frÄn flera integrerade ankare. ABP:s modularitet gjorde det möjligt för teamet att leverera pÄ rekordtid, klara alla VAPT och distribuera den containeriserade mikrotjÀnststacken via fullstÀndig CI/CD och pipelines till produktion.",
+ "Landing_Page_CustomerStory_2": "Vi ser vÀrdet av att anvÀnda ABP för att minska omkostnaderna för anpassade utvecklingsprojekt. Teamet kan förenhetliga kodmönstret i olika projektflöden. Vi ser mer potential i ramverket för att vi ska kunna bygga nya funktioner snabbare Àn tidigare. Vi litar pÄ att vi stÀndigt kommer att se vÀrdet av att utnyttja ABP.",
+ "Landing_Page_CustomerStory_3": "Vi Àlskar ABP. Vi behöver inte skriva allt frÄn grunden. Vi utgÄr frÄn out-of-the-box-funktioner och fokuserar bara pÄ det vi verkligen behöver skriva. Dessutom Àr ABP vÀlarkitekterat och koden Àr av hög kvalitet med fÀrre buggar. Om vi hade varit tvungna att skriva allt vi behövde pÄ egen hand hade vi kanske fÄtt lÀgga ner flera Är. Ytterligare en sak som vi gillar Àr att den nya versionen, problemfixningen eller förbÀttringen kommer ut mycket snart\n varannan vecka. Vi vÀntar inte för lÀnge.",
+ "Landing_Page_CustomerStory_4": "ABP Àr en fantastisk produkt som jag skulle rekommendera. Kommersiella produkter till marknaden för vÄra kunder i en enda konfigurerbar plattform. Den starthjÀlp som ramverket och verktygen ger alla team Àr vÀrd varenda cent. ABP var det som passade bÀst för vÄra behov.",
+ "Landing_Page_AdditionalServices": "Anpassad eller volymlicens, onboarding, liveutbildning och support, anpassad projektutveckling, portning av befintliga projekt och mycket mer...",
+ "Landing_Page_IncludedDeveloperLicenses": "Inkluderar {0} utvecklarlicenser",
+ "Landing_Page_SeeOnDemo": "Se pÄ Demo",
+ "Landing_Page_LeptonThemes": "LeptonTema",
+ "Landing_Page_AccountModuleDescription_1": "Denna modul implementerar autentiseringssystemet för en applikation;",
+ "Landing_Page_AccountModuleDescription_2": "TillhandahÄller en inloggningssida med anvÀndarnamn och lösenord",
+ "Landing_Page_AccountModuleDescription_3": "TillhandahÄller en register-sida för att skapa ett nytt konto.",
+ "Landing_Page_AccountModuleDescription_4": "TillhandahÄller en glömt lösenord-sida för att skicka en ÄterstÀllningslÀnk för lösenord som ett e-postmeddelande.",
+ "Landing_Page_AccountModuleDescription_5": "Ger email confirmation-funktionalitet med UI.",
+ "Landing_Page_AccountModuleDescription_6": "Implementerar tvÄfaktor-autentisering (SMS och e-post).",
+ "Landing_Page_AccountModuleDescription_7": "Implementerar anvÀndarspÀrr (lÄser kontot under en viss tid nÀr ett visst antal misslyckade inloggningar intrÀffar pÄ grund av ogiltiga inloggningsuppgifter inom en viss tidsperiod).",
+ "Landing_Page_AccountModuleDescription_8": "Implementerar anvÀndargrÀnssnitt och funktionalitet för autentiseringsservern Identity Server.",
+ "Landing_Page_AccountModuleDescription_9": "Gör det möjligt att vÀxla mellan hyresgÀster i en miljö med flera hyresgÀster.",
+ "Landing_Page_AccountModuleDescription_10": "Gör det möjligt att Àndra UI-sprÄk i programmet.",
+ "Landing_Page_AuditLoggingModuleDescription_1": "Den hÀr modulen tillhandahÄller grÀnssnittet för rapportering av granskningsloggar för granskningsinfrastrukturen. Gör det möjligt att söka, filtrera och visa poster i granskningsloggen och loggar över enhetsÀndringar.",
+ "Landing_Page_AuditLoggingModuleDescription_2": "En post i granskningsloggen bestÄr av kritisk information om varje klientförfrÄgan:",
+ "Landing_Page_AuditLoggingModuleDescription_3": "URL, webblÀsare, IP-adress, klientnamn",
+ "Landing_Page_AuditLoggingModuleDescription_4": "AnvÀndaren",
+ "Landing_Page_AuditLoggingModuleDescription_5": "HTTP-metod, HTTP-returstatuskod",
+ "Landing_Page_AuditLoggingModuleDescription_6": "FramgÄng/misslyckande, detaljer om undantag om sÄdana finns",
+ "Landing_Page_AuditLoggingModuleDescription_7": "Tid för genomförande av begÀran",
+ "Landing_Page_AuditLoggingModuleDescription_8": "Enheterna har skapats, tagits bort eller uppdaterats i denna begÀran (med Àndrade egenskaper).",
+ "Landing_Page_BloggingModuleDescription_1": "Denna modul lÀgger till en enkel blogg i din ABP-applikation;",
+ "Landing_Page_BloggingModuleDescription_2": "Gör det möjligt att skapa flera bloggar i en och samma applikation.",
+ "Landing_Page_BloggingModuleDescription_3": "Stöder Markdown-formatet.",
+ "Landing_Page_BloggingModuleDescription_4": "Gör det möjligt att skriva en kommentar till ett inlÀgg.",
+ "Landing_Page_BloggingModuleDescription_5": "Gör det möjligt att tilldela taggar till blogginlÀggen.",
+ "Landing_Page_BloggingModuleDescription_6": "Se webbplatsen blog.abp.io som ett levande exempel pÄ bloggmodulen.",
+ "Landing_Page_ChatModuleDescription_1": "Denna modul anvÀnds för realtidsmeddelanden mellan anvÀndare i applikationen.",
+ "Landing_Page_ChatModuleDescription_2": "Meddelanden i realtid pÄ chatt-sidan.",
+ "Landing_Page_ChatModuleDescription_3": "Sök efter anvÀndare i applikationen för nya konversationer.",
+ "Landing_Page_ChatModuleDescription_4": "Kontaktlista för senaste konversationer.",
+ "Landing_Page_ChatModuleDescription_5": "Meddelanden om nya meddelanden nÀr anvÀndaren tittar pÄ en annan sida.",
+ "Landing_Page_ChatModuleDescription_6": "Symbol för totalt antal olÀsta meddelanden pÄ menyikonen.",
+ "Landing_Page_ChatModuleDescription_7": "Antal olÀsta meddelanden för varje konversation.",
+ "Landing_Page_ChatModuleDescription_8": "Lata laddade konversationer.",
+ "Landing_Page_DocsModuleDescription_1": "Denna modul anvÀnds för att skapa webbplatser för teknisk dokumentation;",
+ "Landing_Page_DocsModuleDescription_2": "Inbyggd GitHub-integration: Skriv och hantera dokument direkt pÄ GitHub.",
+ "Landing_Page_DocsModuleDescription_3": "Stöd för Versioning direkt integrerat i GitHub-utgÄvor.",
+ "Landing_Page_DocsModuleDescription_4": "Stöd för flersprÄkighet (med fallback-stöd till standardsprÄket).",
+ "Landing_Page_DocsModuleDescription_5": "Stöder formaten Markdown och HTML.",
+ "Landing_Page_DocsModuleDescription_6": "InnehÄller en navigation och en outline.",
+ "Landing_Page_DocsModuleDescription_7": "Gör det möjligt att hosta flera projekt dokumentation i en enda applikation.",
+ "Landing_Page_DocsModuleDescription_8": "LÀnkar till filen pÄ GitHub, sÄ att vem som helst enkelt kan bidra genom att klicka pÄ Edit-lÀnken.",
+ "Landing_Page_DocsModuleDescription_9": "Förutom GitHub-kÀllan kan du helt enkelt anvÀnda en mapp som dokumentationskÀlla.",
+ "Landing_Page_FileManagementModuleDescription_1": "Ladda upp, ladda ner och organisera filer i en hierarkisk mappstruktur.",
+ "Landing_Page_FileManagementModuleDescription_2": "Den hÀr modulen anvÀnds för att ladda upp, ladda ner och organisera filer i en hierarkisk mappstruktur. Den Àr ocksÄ kompatibel med multi-tenancy och du kan bestÀmma den totala storleksgrÀnsen för dina hyresgÀster.",
+ "Landing_Page_FileManagementModuleDescription_3": "Den hÀr modulen Àr baserad pÄ BLOB-lagring-systemet, sÄ den kan anvÀnda olika lagringsleverantörer för att lagra filinnehÄllet.",
+ "Landing_Page_IdentityModuleDescription_1": "Denna modul implementerar anvÀndar- och rollsystemet i en applikation;",
+ "Landing_Page_IdentityModuleDescription_2": "Bygger pÄ Microsofts ASP.NET Core Identity-bibliotek.",
+ "Landing_Page_IdentityModuleDescription_3": "Hantera roller och anvÀndare i systemet. En anvÀndare kan ha flera roller.",
+ "Landing_Page_IdentityModuleDescription_4": "Ange behörigheter i roll- och anvÀndarnivÄer.",
+ "Landing_Page_IdentityModuleDescription_5": "Aktivera/avaktivera tvÄfaktorautentisering och lÄsning av anvÀndare per anvÀndare.",
+ "Landing_Page_IdentityModuleDescription_6": "Hantera grundlÀggande anvÀndarprofil och lösenord.",
+ "Landing_Page_IdentityModuleDescription_7": "Hantera ansprÄkstyper i systemet, koppla ansprÄk till roller och anvÀndare.",
+ "Landing_Page_IdentityModuleDescription_8": "InstÀllningssida för att hantera lösenordskomplexitet, anvÀndarinloggning, konto och spÀrr.",
+ "Landing_Page_IdentityModuleDescription_9": "Stöd för LDAP-autentisering.",
+ "Landing_Page_IdentityModuleDescription_10": "Ger verifiering av e-postadress och telefonnummer.",
+ "Landing_Page_IdentityModuleDescription_11": "Stödjer integrering av sociala inloggningar (Twitter, Facebook, GitHub etc.).",
+ "Landing_Page_IdentityModuleDescription_12": "Hantera organisationsenheter i systemet.",
+ "Landing_Page_PaymentModuleDescription_1": "Ger integration för olika betalningsgateways.",
+ "Landing_Page_PaymentModuleDescription_2": "Denna modul ger integration för betalningsgateways, sÄ att du enkelt kan fÄ betalning frÄn dina kunder.",
+ "Landing_Page_PaymentModuleDescription_3": "Denna modul stöder följande betalningsportaler",
+ "Welcome_Page_UseSameCredentialForCommercialWebsites": "AnvÀnd samma autentiseringsuppgifter för bÄde abp.io och abp.io/support.",
+ "WatchCrudPagesVideo": "Titta pÄ videon \"Skapa CRUD-sidor med ABP Suite\"!",
+ "WatchGeneratingFromDatabaseVideo": "Titta pÄ videon \"ABP Suite: Generera CRUD-sidor frÄn befintliga databastabeller\" Video!",
+ "WatchTakeCloserLookVideo": "Titta pÄ videon \"Ta en nÀrmare titt pÄ kodgenerering: ABP Suite\" Video!",
+ "ConfirmedEmailAddressRequiredToStartTrial": "Du mÄste ha en bekrÀftad e-postadress för att kunna starta en testlicens.",
+ "EmailVerificationMailNotSent": "E-postverifiering mail kunde inte skickas.",
+ "GetConfirmationEmail": "Klicka hÀr för att fÄ ett verifieringsmejl om du inte har fÄtt det tidigare.",
+ "WhichLicenseTypeYouAreInterestedIn": "Vilken licenstyp Àr du intresserad av?",
+ "DontTakeOurWordForIt": "Ta inte vÄrt ord för det...",
+ "ReadAbpCommercialUsersWantYouToKnow": "LÀs vad ABP:s anvÀndare vill att du ska veta",
+ "Testimonial_ShortDescription_1": "ABP:s modularitet gjorde det möjligt för teamet att leverera i tid.",
+ "Testimonial_ShortDescription_2": "Bygg nya funktioner snabbare Àn tidigare.",
+ "Testimonial_ShortDescription_3": "Vi utgÄr frÄn out-of-the-box-funktioner och fokuserar bara pÄ det som vi verkligen behöver skriva.",
+ "Testimonial_ShortDescription_4": "ABP passade bÀst för vÄra behov.",
+ "OnlineReviewersOnAbpCommercial": "Online recensioner om ABP",
+ "SeeWhatToldAboutAbpCommercial": "Se vad som har sagts om ABP och skriv dina tankar om du vill.",
+ "BlazoriseLicense": "MÄste vi köpa en Blazorise-licens?",
+ "BlazoriseLicenseExplanation": "Vi har ett avtal mellan Volosoft och Megabit, med detta avtal Àr Blazorise-licensen buntad med ABP-produkter, dÀrför behöver vÄra kunder inte köpa en extra Blazorise-licens.",
+ "ExtendPaymentInfoSection_DeveloperPrice": "{0}x Ytterligare utvecklare",
+ "ExtendPaymentInfoSection_DiscountRate": "Rabatt {0}%.",
+ "TotalNetPrice": "Totalt nettopris",
+ "EFCore": "Entity Framework Core",
+ "All": "Alla",
+ "Mvc": "MVC",
+ "DataBaseProvider": "Dataleverantör",
+ "UIFramework": "Ramverk för anvÀndargrÀnssnitt",
+ "LeptonXThemeForDashboard": "LeptonX Theme för din Admin Dashboard av",
+ "AbpPlatform": "ABP-plattform",
+ "YouDeserveGoodUXUI": "Du förtjÀnar ett bra UI och ett bÀttre UX. LeptonX Theme by ABP Àr hÀr för att tjÀna det.",
+ "ViewLiveDemo": "Visa demo för live-tema",
+ "GetLeptonX": "Skaffa LeptonX nu",
+ "SeeLeptonXDocumentation": "Se LeptonX dokumentation",
+ "SeeLeptonDocumentation": "Se Lepton Dokumentation",
+ "SimplifiedMenu": "Förenklad meny",
+ "SimplifiedMenuDescription": "Du kan enkelt hitta den sida du letar efter genom att filtrera i menyn",
+ "YourFavoritePages": "Dina favoritsidor inom rÀckhÄll",
+ "YourFavoritePagesDescription": "LÀgg enkelt till eller ta bort sidan frÄn favoriter genom att klicka pÄ stjÀrnikonen i det övre högra hörnet av sidan.",
+ "BreadCrumbs": "Breadcrumb för sömlös vÀxling",
+ "BreadCrumbsDescription": "Med Breadcrumb kan du vÀxla till sidorna pÄ samma nivÄ med ett klick, Àven nÀr vÀnstermenyn Àr stÀngd, och det fungerar pÄ surfplattor och mobiler!",
+ "YourMenu": "Din meny som du vill ha den",
+ "YourMenuDescription": "Anpassa de direktklickbara ikonerna och rullgardinsmenyerna i anvÀndarmenyn som du vill. AnvÀndarmenyn Àr helt anpassningsbar efter dina behov",
+ "RtlSupport": "RTL-stöd för ditt sprÄk",
+ "RtlSupportDescription": "LeptonX Theme stöder RTL för ditt sprÄk. SprÄkalternativen finns i instÀllningsmenyn sÄ att du kan Àndra sprÄk.",
+ "YourColors": "Dina fÀrger i grÀnssnittet för din adminpanel",
+ "YourColorsDescription": "LeptonX Theme fungerar enligt dina systeminstÀllningar och har alternativ för dashboard light theme, dashboard dark theme och dashboard semi-dark theme.",
+ "ArrangeContentWidth": "Ordna enkelt bredden pÄ ditt innehÄll",
+ "ArrangeContentWidthDescription": "Ăndra enkelt bredden pĂ„ din innehĂ„llsyta.",
+ "LeptonXCompatibleWith": "LeptonX Theme Àr kompatibelt med",
+ "MobileResponsiveTemplate": "Mobil responsiv mall",
+ "MobileResponsiveTemplateDescription1": "FÄ tillgÄng till LeptonX adminpanel frÄn vilken enhet du vill.",
+ "MobileResponsiveTemplateDescription2": "Den Àr utformad för att du enkelt ska kunna anvÀnda den i alla dina enheter. Den Àr responsiv pÄ mobila enheter och surfplattor.",
+ "TopMenuLayoutOption": "Alternativ för layout av toppmeny",
+ "TopMenuLayoutOptionDescription1": "Om du vill konfigurera din webbplats med samma adminpanel Àr det möjligt att göra det med LeptonX Theme!",
+ "TopMenuLayoutOptionDescription2": "Prova bara LeptonX toppmenylayout för att fÄ det att hÀnda!",
+ "EasilyCustomizable": "LÀtt att anpassa till ditt varumÀrkes fÀrger",
+ "EasilyCustomizableDescription1": "Du kan anpassa LeptonX-temat med bara nÄgra fÄ SCSS-variabler. Ingen ÄsidosÀttning, ingen extra CSS-belastning!",
+ "EasilyCustomizableDescription2": "Med LeptonX kan du ordna din adminpanel precis som du vill.",
+ "IndependentLayout": "Oberoende layout och innehÄllsyta",
+ "IndependentLayoutDescription1": "LeptonX:s layoutinfrastruktur utformades helt separat frÄn innehÄllet.",
+ "IndependentLayoutDescription2": "Detta innebÀr att du fritt kan utforma ditt projekt med en annan innehÄllsstruktur Àn Bootstrap om du vill.",
+ "MostUsedLibraries": "De mest anvÀnda biblioteken integrerade med LeptonX",
+ "MostUsedLibrariesDescription1": "LeptonX innehÄller dina mest anvÀnda bibliotek. Det gör att du enkelt kan anvÀnda bibliotek som ApexCharts, DataTables, DropZone, FullCalender, JSTree, Select2 och Toastr.",
+ "MostUsedLibrariesDescription2": "LeptonX stöder ocksÄ MVC Angular och Blazor-specifika bibliotek.",
+ "CreateAndCustomize": "Skapa och anpassa de sidor du behöver pÄ nÄgra sekunder med LeptonX anpassade sidor",
+ "CreateAndCustomizeDescription": "Genom att anvÀnda LeptonX Theme fÄr du ocksÄ tillgÄng till mÄnga fÀrdiga HTML-sidor. Dessa inkluderar mÄnga sidor som inloggningssida, blogg, FAQ, prenumerationslista, faktura, prissÀttning och filhantering.",
+ "LeptonThemeForAdmin": "Lepton Theme för din adminpanel genom att",
+ "LeptonThemeForAdminDescription": "Lepton Theme Àr fortfarande tillgÀngligt och kommer att underhÄllas. Om du vill byta till LeptonX Theme som Lepton Theme-anvÀndare kan du se dokumentationen för att lÀra dig hur du gör.",
+ "LeptonCompatibleWith": "Lepton Theme Àr kompatibelt med",
+ "BlackFridayDiscount": "Black Friday-rabatt",
+ "UpgradePaymentInfoSection_DeveloperPrice": "{0} för {1} ytterligare utvecklare",
+ "Upgrade": "Uppgradering",
+ "Renewal": "Förnyelse",
+ "UpgradePaymentInfoSection_LicensePrice": "{0} licens",
+ "UpgradePaymentInfoSection_LicenseRenewalPrice": "Förnyelse av licens",
+ "Total": "Totalt",
+ "SupportPolicyFaqTitle": "Vilken Àr er supportpolicy?",
+ "SupportPolicyFaqExplanation": "Vi stöder endast den aktiva och den tidigare huvudversionen. Vi garanterar inte en patchrelease för den tredje och Ă€ldre huvudversionen. Till exempel, om den aktiva versionen Ă€r 7.0.0, kommer vi att slĂ€ppa patchversioner för bĂ„de 6.x.x och 7.x.x. Dessutom ger vi support endast för ABP Framework och ABP-relaterade problem. Det betyder att inget stöd ges för tredjepartsapplikationer, molntjĂ€nster och andra perifera bibliotek som anvĂ€nds av ABP-produkter. Vi kommer att anvĂ€nda kommersiellt rimliga anstrĂ€ngningar för att ge vĂ„ra kunder teknisk support under \"Volosoft Bilisim A.S\" officiella öppettider. Ă
andra sidan förbinder vi oss inte till en svarstid enligt servicenivÄavtal (SLA), men vi kommer att försöka svara pÄ de tekniska frÄgorna sÄ snabbt som möjligt inom vÄra officiella arbetstider. Om inte en sÀrskild överenskommelse görs med kunden tillhandahÄller vi endast support pÄ https://support.abp.io. Vi har ocksÄ en privat e-postsupport som endast Àr tillgÀnglig för innehavare av Enterprise-licenser.",
+ "TotalDevelopers": "Totalt {0} utvecklare",
+ "CustomPurchaseExplanation": "SkrÀddarsydd för dina specifika behov",
+ "WhereDidYouHearAboutUs": "Var har du hört talas om oss?",
+ "Twitter": "Twitter",
+ "Facebook": "Facebook",
+ "Youtube": "YouTube",
+ "Google": "Google",
+ "Github": "GitHub",
+ "Friend": " FrÄn en vÀn",
+ "Other": "Ăvriga",
+ "WhereDidYouHearAboutUs_explain": "Ange ...",
+ "DeletingMemberWarningMessage": "\"{0}\" kommer att tas bort frÄn listan över utvecklare. Om du vill kan du tilldela denna tomma plats till en annan utvecklare senare.",
+ "AdditionalInfo": "Om antalet platser för utvecklare överstiger dina krav kan du minska dem. Du kan skicka e-post till info@abp.io för att ta bort nÄgra av dina utvecklarplatser. Om du rensar bort oanvÀnda utvecklarplatser minskar kostnaden för licensförnyelse. Om du vill kan du Äterköpa ytterligare utvecklarplatser inom din aktiva licensperiod. Observera att eftersom det finns {0} utvecklare i det hÀr licenspaketet kan du inte minska detta antal.",
+ "LinkExpiredErrorMessage": "LÀnken du försöker komma Ät har gÄtt ut.",
+ "ExpirationDate": "UtgÄngsdatum",
+ "SpringCampaignDiscount": "Rabatt pÄ vÄrkampanjen",
+ "WhyUseAbpIoPlatform": "Varför ska jag anvÀnda ABP.IO-plattformen i stÀllet för att skapa en ny lösning frÄn grunden?",
+ "WhyUseAbpIoPlatformFaqExplanation": "Se den sidan för en detaljerad förklaring av varför anvÀndning av ABP.IO Platform har en betydande fördel jÀmfört med att göra allt sjÀlv.",
+ "EulaPageTitle": "Licensavtal för slutanvÀndare (EULA)",
+ "PrivacyPolicyPageTitle": "Integritetspolicy - Cookiepolicy",
+ "TermsConditionsPageTitle": "Villkor och anvisningar",
+ "TrainingsPageTitle": "ABP:s utbildningspaket",
+ "ModulesPageTitle": "ABP Förbyggda applikationsmoduler",
+ "Volo.AbpIo.Commercial:040001": "API-Ätkomstnyckeln Àr felaktig.",
+ "GetLepton": "Skaffa Lepton nu",
+ "MyOrganizations_Detail_LicenseStartDate": "Startdatum",
+ "MyOrganizations_Detail_LicenseExpiryDate": "UtgÄngsdatum",
+ "BlazoriseSupport": "Hur fÄr jag Blazorise-licensnyckeln och support frÄn Blazorise-teamet?",
+ "BlazoriseSupportExplanation": "Följ stegen nedan för att fÄ support frÄn Blazorise-teamet och fÄ din Blazorise-licensnyckel:",
+ "BlazoriseSupportExplanation1": "Registrera dig för ett nytt konto pÄ blazorise.com/support/register med samma e-postadress som ditt abp.io-konto. LÀmna posten \"Licensnyckel\" tom. Det mÄste vara samma e-postadress som ditt e-postkonto pÄ abp.io.",
+ "BlazoriseSupportExplanation2": "Verifiera din e-postadress genom att kolla din e-postlÄda. Kontrollera din skrÀppostlÄda om du inte ser ett e-postmeddelande i din inkorg!",
+ "BlazoriseSupportExplanation3": "Logga in pÄ Blazorise supportwebbplats pÄ blazorise.com/support/login.",
+ "BlazoriseSupportExplanation4": "Om du har en aktiv ABP betald licens kommer du ocksÄ att ha en Blazorise PRO-licens. Du kan fÄ din Blazorise-licensnyckel pÄ blazorise.com/support/user/manage/license.",
+ "BlazoriseSupportExplanation5": "Du kan stÀlla dina frÄgor pÄ supportwebbplatsen och generera en produkttoken för din applikation.",
+ "AbpLiveTrainingPackages": "ABP Live utbildningspaket",
+ "Releases": "UtgÄvor",
+ "ReleasesDescription": "Den hÀr sidan innehÄller detaljerad information om varje release. Du kan se alla stÀngda pull requests för en specifik release. För övergripande milstolpsutvecklingar kan du kolla in sidan med kortfattade releaseanteckningar.",
+ "ReleaseDate": "Utgivningsdatum",
+ "Labels": "Etiketter",
+ "PreRelease": "Förhandsrelease",
+ "AllTypes": "Alla typer",
+ "Enhancement": "FörbÀttring",
+ "Bug": "Insekt",
+ "Feature": "Funktion",
+ "AllUIs": "Alla anvÀndargrÀnssnitt",
+ "MVC": "MVC",
+ "BlazorServer": "Blazor Server",
+ "MAUI": "MAUI",
+ "HowItWorks_Page_Title": "Hur fungerar det?",
+ "HowItWorks_Page_Description": "ABP Framework utökar .NET-plattformen. SÄ allt du kan göra med en vanlig .NET-lösning Àr redan möjligt med ABP Framework. Det gör det enkelt att komma igÄng med en lÄg inlÀrningskurva.",
+ "HowItWorks_Description1": "ABP Framework utökar .NET-plattformen. SÄ allt du kan göra med en vanlig .NET-lösning Àr redan möjligt med ABP Framework. Det gör det enkelt att komma igÄng med en lÄg inlÀrningskurva.",
+ "HowItWorks_Description2": "NÀr du vÀl har börjat lÀra dig och anvÀnda ABP Framework-funktionerna kommer det att bli mycket roligare Àn nÄgonsin att utveckla din programvara.",
+ "HowItWorks_Description3": "Den hÀr sidan förklarar i princip hur du anvÀnder ABP.IO Platform som .NET-utvecklare.",
+ "CreateANewSolution": "Skapa en ny .NET-lösning",
+ "CreateANewSolution_Description1": "Allt börjar med att skapa en ny ABP-integrerad .NET-lösning.",
+ "StartWithStartupTemplates": "Starta en av de förbyggda mallarna för startup-lösningar",
+ "SimpleMonolithApplicationTemplate": "Enkel mall för monolitisk applikation",
+ "LayeredApplicationTemplate": "Skiktad applikationsmall",
+ "MicroserviceSolutionTemplate": "Mall för mikroservicelösning",
+ "CreateEmptySolutionAndUseAbp": "Eller skapa en ny tom .NET-lösning och installera ABP NuGet & NPM paket sjÀlv.",
+ "CreatingSolutionWithMultipleOptions": "Det finns flera alternativ för anvÀndargrÀnssnitt och databas nÀr du skapar en ny lösning.",
+ "UIFrameworkOptions": "Alternativ för anvÀndargrÀnssnitt",
+ "DotnetSolutionWithoutDependency": "Nu har du en vanlig .NET-lösning i din lokala dator som inte Àr beroende av nÄgon molnplattform eller extern tjÀnst.",
+ "CheckTheDocumentForDetails": "Du kan kontrollera {1} dokumentet för detaljer.",
+ "UIAndDatabaseIndependent": "ABP kan fungera med alla anvÀndargrÀnssnitt och alla databasleverantörer som stöds av .NET.\n Dessa anvÀndargrÀnssnitt och databasleverantörer Àr dock förintegrerade och vÀldokumenterade.",
+ "InstallAbpModules": "Installera ABP-moduler",
+ "DevelopYourSolution": "Utveckla din lösning",
+ "DeployAnywhere": "Distribuera var som helst",
+ "InstallAbpModule_Description1": "ABP Àr ett modulÀrt ramverk för applikationsutveckling. Mallarna för startup-lösningar levereras redan med de viktigaste modulerna installerade.\n Men det finns fler applikationsmoduler som du kanske vill anvÀnda i din lösning.",
+ "InstallAbpModule_Description2": "Varje modul bestÄr av ett fÄtal NuGet- och NPM-paket och har ett installationsdokument. ABP Suite gör det mesta av arbetet automatiskt, sedan konfigurerar eller finjusterar du modulen manuellt baserat pÄ dess dokumentation.",
+ "DevelopYourSolution_Description1": "ABP:s infrastruktur gör att du kan fokusera pÄ din egen affÀrskod genom att automatisera det repetitiva arbetet och tillhandahÄlla förbyggd infrastruktur och applikationsfunktioner.",
+ "DevelopYourSolution_Description2": "I följande kodblock kan du se hur ABP Framework sömlöst integreras i din kod och automatiserar de repetitiva uppgifterna Ät dig.",
+ "DevelopYourSolution_Description3": "Ăven i detta kortkodsblock gör ABP en hel del saker Ă„t dig.",
+ "DevelopYourSolution_Description4": "Den tillhandahÄller basklasser för att tillÀmpa konventioner, som\n dependency injection. Generiska\n repository tjÀnster ger ett bekvÀmt sÀtt att\n sÀtt att interagera med databasen. Deklarativ\n auktorisering arbetar med ett finjusterat behörighetssystem.",
+ "DevelopYourSolution_Description5": "ABP automatiserar helt och hÄllet\n arbetsenhet (för databasanslutning och transaktionshantering),\n undantagshantering,\n validering\n och auditloggning. Det ger mÄnga fler byggstenar för att förenkla dina dagliga utvecklingsuppgifter och fokusera pÄ din egen kod medan du skapar produktionsklara\n applikationer.",
+ "DevelopYourSolution_Description6": "Du kan förestÀlla dig hur lÄngt och komplicerat det kodblocket kan bli om du skulle göra allt manuellt.",
+ "SuiteCrudGenerationInFewSeconds": "Förutom att handkoda din lösning kan du skapa fullt fungerande avancerade CRUD-sidor pÄ nÄgra minuter med hjÀlp av ABP Suite-verktyget. Det genererar koden till din lösning, sÄ att du kan finjustera den utifrÄn dina anpassade krav.",
+ "DeployAnywhere_Description1": "I slutÀndan har du en ren .NET-lösning. Du kan distribuera din lösning till din egen server, till en molnplattform, till Kubernetes eller var du vill. Du kan distribuera till sÄ mÄnga servrar som du vill. ABP Àr ett agnostiskt verktyg för driftsÀttningsmiljöer.",
+ "ExpertiseAbpFramework": "Expertis ABP-ramverket",
+ "ExpertiseAbpFramework_Description1": "Vill du gÄ lÀngre Àn till grunderna och fÄ expertis inom ABP.IO-plattformen?",
+ "FreeDownload": "Fri nedladdning",
+ "Read": "LĂ€s",
+ "HavingTrouble": "Har du problem?",
+ "HavingTrouble_Description1": "Har du problem med att utveckla din lösning? Vi finns hÀr för dig! AnvÀnd ABP:s supportplattform\n eller skicka ett e-postmeddelande för att fÄ hjÀlp direkt frÄn Core ABP Framework-teamets medlemmar.",
+ "WeAreHereToHelp_Description1": "Du kan blÀddra bland vÄra hjÀlpÀmnen eller söka i vanliga frÄgor,\n eller sÄ kan du stÀlla en frÄga till oss genom att anvÀnda kontaktformulÀret.",
+ "OtherModules": "Ăvriga moduler",
+ "OtherModules_Description1": "Konto, Audit Logging, Chatt, CMS Kit, Filhantering, FormulÀr, GDPR, Identitet, SprÄkhantering, Betalning, Saas och mer ...",
+ "HowItWorks_DatabaseProviderOptions": "Alternativ för databasleverantör",
+ "SeeFAQ": "Se vanliga frÄgor",
+ "ReleaseLogs": "Release Loggar",
+ "ReleaseLogs_Tag": "{0} Loggar för frislÀppande",
+ "ReleaseLogs_Pr": "Pull Request #{0} - {1}",
+ "NoLabels": "Inga etiketter",
+ "DoesTheSubscriptionRenewAutomatically": "Förnyas abonnemanget automatiskt?",
+ "DoesTheSubscriptionRenewAutomaticallyExplanation": "ABP.IO-plattformen har inte en faktureringsmodell för automatisk förnyelse. DÀrför kommer din prenumeration inte att förnyas automatiskt i slutet av din licensperiod. Om du vill fortsÀtta att ha fördelarna med ABP.IO-plattformen mÄste du förnya den manuellt pÄ sidan för organisationshantering. Om du har flera organisationer klickar du pÄ knappen \"Hantera\" pÄ din organisation som löper ut och klickar sedan pÄ knappen \"FörlÀng nu\" för att förnya din licens. Du kanske ocksÄ vill ta en titt pÄ avsnittet Vad hÀnder nÀr min licens gÄr ut?.",
+ "DoesTheSubscriptionRenewAutomaticallyExplanationAutoRenewal": "ABP tillÄter dig att automatiskt förnya din licens. Detta Àr en valfri tjÀnst. Du kan vÀxla den hÀr funktionen nÀr du köper en ny licens eller senare aktivera den frÄn din organisationshanteringssida. VÀxling för automatisk förnyelse finns i avsnittet \"Betalningsmetod\" pÄ organisationshanteringssidan. Om du vill stÀnga av automatisk förnyelse, besök organisationshanteringssidan, gÄ till avsnittet \"Betalningsmetod\" och avmarkera kryssrutan \"Automatisk förnyelse\". NÀr du stÀnger av funktionen för automatisk förnyelse mÄste du förnya din licens sjÀlv.",
+ "ExtraQuestionCreditsFaqTitle": "Kan jag köpa extra poÀng för supportfrÄgor?",
+ "ExtraQuestionCreditsFaqExplanation": "Ja, det kan du göra. För att köpa extra frÄgepoÀng, skicka ett e-postmeddelande till info@abp.io med din organisations namn. HÀr Àr prislistan för de extra frÄgekrediterna: - 50 frÄgor paket $999
- 25 frÄgor paket $625
- 15 frÄgor paket $450
",
+ "AlreadyBetaTester": "Du har redan gÄtt med i betatestarprogrammet.",
+ "AbpStudio": "ABP Studio",
+ "AbpStudio_Description": "ABP Studio Àr fortfarande under utveckling. Du kan fylla i formulÀret nedan för att bli en av de första anvÀndarna.",
+ "AbpStudio_Description1": "ABP Studio Àr en plattformsoberoende skrivbordsapplikation för ABP-utvecklare.",
+ "AbpStudio_Description2": "Det Àr vÀl integrerat i ABP-ramverket och syftar till att tillhandahÄlla en bekvÀm utvecklingsmiljö för dig genom att automatisera saker, ge insikter om din lösning, vilket gör det mycket enklare att utveckla, köra och distribuera dina lösningar.",
+ "AbpStudio_ComingSoon": "Om du vill testa ABP Studio före alla andra kan du bli BETA-testare",
+ "AbpStudio_PlannedPreviewDate": "Planerat utgivningsdatum för förhandsvisning: Q4 Är 2023.",
+ "BetaRequest": "Beta förfrÄgan",
+ "CreateNewSolutions": "Skapa nya lösningar",
+ "CreateNewSolutions_Description1": "Du kan enkelt skapa allt frÄn enkla applikationer till modulÀra monolit- eller mikroservicelösningar med mÄnga alternativ. Du fÄr en fullstÀndig produktionsfÀrdig basprogramvarulösning för ditt företag.",
+ "ArchitectYourSolutions": "Arkitekt för dina lösningar",
+ "ArchitectYourSolutions_Description1": "Bygg enklare monolitiskt modulÀra och mikrotjÀnstbaserade lösningsstrukturer genom att skapa moduler eller tjÀnster och upprÀtta relationer mellan dem. Du kan ocksÄ installera eller avinstallera förbyggda applikationsmoduler.",
+ "ExploreYourSolution": "Utforska din lösning",
+ "ExploreYourSolution_Description1": "ABP Studio visar en vy pÄ hög nivÄ av komponenterna i din lösning och de moduler som din lösning Àr beroende av. Du kan utforska entiteter, tjÀnster, HTTP API:er och mycket mer utan att behöva öppna din kodbas.",
+ "RunMultiApplicationOrMicroserviceSolutionsInABreeze": "Kör multiapplikations- eller microservice-lösningar pÄ ett kick",
+ "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description1": "Kör en, flera eller alla tjÀnster med ett enda klick. PÄ sÄ sÀtt Àr det mycket enkelt att stoppa en tjÀnst, köra den i Visual Studio för att testa eller debugga.",
+ "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description2": "Se en lista över tjÀnster, visa HTTP Request i realtid och antal undantag för varje tjÀnst.",
+ "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description3": "Se alla detaljer om alla HTTP-begÀranden som kommer till en tjÀnst.",
+ "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description4": "Utforska undantagsdetaljer i realtid i alla tjÀnster, filtrera och sök enkelt.",
+ "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description5": "Visa applikationsloggarna, filtrera efter loggnivÄ eller sök efter text...",
+ "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description6": "BlÀddra genom anvÀndargrÀnssnittet i din applikation utan att lÀmna solution runner.",
+ "IntegrateToYourKubernetesCluster": "Integrera till ditt Kubernetes-kluster",
+ "IntegrateToYourKubernetesCluster_Description1": "Koppla din lokala utvecklingsmiljö till ett lokalt eller avlÀgset Kubernetes-kluster, dÀr klustret redan kör din mikrotjÀnstlösning.",
+ "IntegrateToYourKubernetesCluster_Description2": "FÄ Ätkomst till alla tjÀnster i Kubernetes med deras tjÀnstenamn som DNS, precis som om de körs pÄ din lokala dator.",
+ "IntegrateToYourKubernetesCluster_Description3": "Interceptera vilken tjÀnst som helst i det klustret, sÄ att all trafik till den intercepterade tjÀnsten automatiskt omdirigeras till din tjÀnst som körs i din lokala maskin. NÀr din tjÀnst behöver anvÀnda nÄgon tjÀnst i Kubernetes omdirigeras trafiken tillbaka till klustret, precis som om din lokala tjÀnst körs inuti Kubernetes.",
+ "GetInformed": "Bli informerad",
+ "Studio_GetInformed_Description1": "LÀmna din kontaktinformation för att fÄ information och pröva först nÀr ABP Studio har lanserats.",
+ "Studio_GetInformed_Description2": "Planerat utgivningsdatum för förhandsvisning: Q3 Är 2023.",
+ "ThankYou!": "Tack sÄ mycket!",
+ "SendBetaRequest": "Skicka Beta förfrÄgan",
+ "YouJoinedTheBetaTesterProgram": "Du har gÄtt med i betatestarprogrammet för ABP Studio.",
+ "PricingExplanation2": "30 dagars pengarna tillbaka-garanti - LĂ€s mer",
+ "MoneyBackGuaranteeText": "* 30-dagars pengarna-tillbaka-garanti pÄ alla licenser! 100% Äterbetalning pÄ Team-, 60% Äterbetalning pÄ Business- och Enterprise-licenser inom 30 dagar.",
+ "MobileApplicationStartupTemplates": "Mallar för uppstart av mobilapplikationer",
+ "MobileApplicationStartupTemplates_Description1": "Integrerade startmallar för mobilapplikationer för dina ABP-lösningar.",
+ "CreatePowerfulLineOfBusinessApplicationsUsingABPMobileStartupTemplates": "Skapa kraftfulla affÀrsapplikationer med hjÀlp av ABP Mobile Startup Templates",
+ "CreatePowerfulLineOfBusinessApplicationsUsingABPMobileStartupTemplates_Description1": "ABP tillhandahÄller tvÄ startmallar för mobilapplikationer som implementerats med React Native och .NET MAUI. NÀr du skapar din nya ABP-baserade lösning kommer du ocksÄ att ha grundlÀggande startapplikationer som Àr anslutna till dina backend-API:er.",
+ "CreatePowerfulLineOfBusinessApplicationsUsingABPMobileStartupTemplates_Description2": "Applikationen har en förbyggd autentiseringstokencykel, stöd för flera sprÄk, stöd för flera behörigheter, inloggning, glömt lösenord, profilhantering och en anvÀndarhanteringssida. Du kan lÀgga till din egen affÀrslogik och anpassa den utifrÄn dina krav.",
+ "TwoFrameworkOptions": "TvÄ alternativ för ramverk",
+ "TwoFrameworkOptions_Description": "ABP tillhandahÄller bÄde React Native och .NET MAUI mobila startup-mallar. PÄ sÄ sÀtt kan du vÀlja den som bÀst passar dina behov. BÄda apparna ÄteranvÀnder kod i den högsta graden mellan iOS- och Android-plattformarna.",
+ "PreIntegratedToYourBackend": "Förintegrerad till din backend",
+ "PreIntegratedToYourBackend_Description": "ABP Mobile-applikationer Àr förintegrerade med dina backend-API:er. Den fÄr en giltig autentiseringstoken frÄn servern och gör autentiserade förfrÄgningar.",
+ "MultiLanguage": "FlersprÄkig",
+ "MultiLanguage_Description": "Det stöder redan mer Àn 10 sprÄk ur lÄdan. Du kan ocksÄ lÀgga till ytterligare sprÄk.",
+ "Arabic": "Arabiska",
+ "Czech": "Tjeckien",
+ "English": "Engelska",
+ "Hungarian": "Ungerska",
+ "Finnish": "Finska",
+ "French": "Franska",
+ "Hindi": "Hindi",
+ "Portuguese": "Portugisiska",
+ "Italian": "Italienska",
+ "Russian": "Ryska",
+ "Slovak": "Slovakien",
+ "Turkish": "Turkiska",
+ "EngageAndRetainYourCustomersWithABPMobileApps": "Engagera och behÄll dina kunder med ABP:s mobilappar",
+ "EngageAndRetainYourCustomersWithABPMobileApps_Description1": "Dina kunder vill kunna hantera sina produkter och prenumerationer var som helst och nÀr som helst. Det krÀver att organisationer skapar mobilappar som gör det möjligt för kunderna att uppfylla sina önskemÄl snabbt och smidigt.",
+ "EngageAndRetainYourCustomersWithABPMobileApps_Description2": "Med ABP Mobile apps kan du skapa högkvalitativa native mobilappar för Android och iOS... med en enda kodbas och utan att kompromissa med sÀkerhet, kvalitet eller skalbarhet.",
+ "OneCodeBaseMultipleDevices": "En kodbas Flera enheter",
+ "OneCodeBaseMultipleDevices_Description": "ABP:s mobilapplikationer Àr plattformsoberoende. De Àr redo att installeras och köras pÄ iOS- och Android-enheter, och de anpassar sig till olika formfaktorer med hjÀlp av en enda kodbas. Utvecklare behöver bara skapa anvÀndargrÀnssnittet och front-end-koden en gÄng, det finns inget behov av att anpassa koden för varje enhet du vill stödja.",
+ "ComesWithTheSourceCode": "Levereras med kÀllkoden",
+ "ComesWithTheSourceCode_Description": "Mobilapparna Àr försedda med kÀllkod. Anpassa enkelt UX/UI för dina appar för att uppfylla riktlinjerna för varumÀrkesprofilering.",
+ "Purchase_OneYearPrice": "1 Är Pris",
+ "Purchase_DeveloperSeatCount": "Antal platser för utvecklare",
+ "Purchase_DevelopersAlreadyIncluded": "{0} utvecklare redan inkluderade",
+ "1Year": "1 Är",
+ "{0}Years": "{0} Är",
+ "1YearLicense": "1 Ärs licens",
+ "{0}YearsLicense": "{0} Ă
r Licens",
+ "1AdditionalDeveloper": "1 ytterligare utvecklare",
+ "{0}AdditionalDevelopers": "{0} Ytterligare utvecklare",
+ "Discount": "Rabatt ({0}%)",
+ "Summary": "Sammanfattning",
+ "TrainingPack": "Utbildningspaket",
+ "TrainingPackDiscount": "Rabatt pÄ utbildningspaket",
+ "Purchase_OnboardingTraining_Description": "Denna liveutbildning Àr giltig för en klass med 8 elever och denna rabatt Àr endast giltig nÀr den köps med den nya licensen. LÀs mer ",
+ "Purchase_Save": "{0}% Spara {1}",
+ "RemoveBasket": "Ta bort frÄn korgen",
+ "WhyABPIOPlatform?": "Varför ABP.IO Platform?",
+ "DocumentAim": "Detta dokument syftar till att besvara den stora frÄgan:",
+ "DocumentAim_Description": "\"Varför ska man anvÀnda ABP.IO-plattformen i stÀllet för att skapa en ny lösning frÄn grunden?\"",
+ "DocumentAim_Description2": "Dokumentet presenterar utmaningarna med att bygga en modern mjukvarulösning och förklarar hur ABP hanterar dessa utmaningar.",
+ "CreatingANewSolution": "Skapa en ny lösning",
+ "CreatingANewSolution_Description": "NÀr du ska starta en ny lösning finns det mÄnga frÄgor du mÄste stÀlla dig sjÀlv, och du bör lÀgga ner mycket tid innan du börjar skriva din allra första affÀrskod.",
+ "CreatingAnEmptySolution": "Skapa en tom lösning",
+ "THEPROBLEM": "PROBLEMET",
+ "CreatingAnEmptySolution_THEPROBLEM_Description": "Ăven att skapa en nĂ€stan tom lösning Ă€r en utmaning;",
+ "CreatingAnEmptySolution_THEPROBLEM_Description2": "Hur organiserar du din kodbas mellan olika projekt?",
+ "CreatingAnEmptySolution_THEPROBLEM_Description3": "Vilka Àr lagren och hur samverkar de?",
+ "CreatingAnEmptySolution_THEPROBLEM_Description4": "Hur integrerar du med tredjepartsbibliotek?",
+ "CreatingAnEmptySolution_THEPROBLEM_Description5": "Hur stÀller man in automatiserade tester?",
+ "ABPSOLUTION": "ABP-LĂSNING",
+ "CreatingAnEmptySolution_ABPSOLUTION_Description": "ABP tillhandahÄller en vÀlarkitekterad, skiktad och produktionsklar startup-lösning baserad pÄ Domain Driven Design-principerna. Lösningen innehÄller ocksÄ en förkonfigurerad enhet och integration test -projekt för varje lager.",
+ "CommonLibraries": "Gemensamma bibliotek",
+ "CommonLibraries_THEPROBLEM_Description": "Vilka bibliotek bör du anvÀnda för att implementera gemensamma krav? Ekosystemet för programvaruutveckling Àr mycket dynamiskt, vilket gör det svÄrt att hÄlla jÀmna steg med de senaste verktygen, biblioteken, trenderna och metoderna.",
+ "CommonLibraries_ABPSOLUTION_Description": "ABP förintegrerar populÀra, mogna och uppdaterade bibliotek i lösningen. Du behöver inte lÀgga tid pÄ att integrera dem eller fÄ dem att kommunicera med varandra. De fungerar som de ska direkt frÄn start.",
+ "UITheme&Layout": "UI Tema & Layout",
+ "UITheme&Layout_THEPROBLEM_Description": "NÀr man tar itu med anvÀndargrÀnssnittet uppstÄr en rad olika utmaningar. Det handlar bland annat om att lÀgga grunden för ett responsivt, modernt och anpassningsbart UI-kit med ett konsekvent utseende och en mÀngd funktioner som navigeringsmenyer, rubriker, verktygsfÀlt, sidfötter, widgetar med mera.",
+ "UITheme&Layout_THEPROBLEM_Description2": "Ăven om du vĂ€ljer ett fördesignat tema kan det ta flera dagars utveckling att integrera det sömlöst i ditt projekt. Ett ytterligare hinder ligger i att uppgradera sĂ„dana teman. Ofta blir temats HTML/CSS-struktur sammanflĂ€tad med din UI-kod, vilket gör framtida temaförĂ€ndringar eller uppgraderingar till komplicerade uppgifter. Denna sammanvĂ€vning av kod och design komplicerar flexibiliteten att göra justeringar lĂ€ngs linjen.",
+ "UITheme&Layout_ABPSOLUTION_Description": "ABP Framework erbjuder ett distinkt temasystem som frigör din UI-kod frĂ„n temabegrĂ€nsningar. Teman finns isolerade, paketerade som NuGet- eller NPM-paket, vilket gör installation eller uppgradering av teman till en frĂ„ga om minuter. Ăven om du behĂ„ller möjligheten att utveckla ditt eget tema eller integrera ett befintligt, presenterar ABP en samling polerade och moderna teman.",
+ "UITheme&Layout_ABPSOLUTION_Description2": "Dessutom finns det leverantörer av UI-komponenter som Telerik och DevExpress. Dessa leverantörer tillhandahÄller dock frÀmst enskilda komponenter, vilket innebÀr att det Àr upp till dig att skapa ditt layoutsystem. NÀr du arbetar inom ABP-baserade projekt kan du sömlöst införliva dessa bibliotek, pÄ samma sÀtt som du skulle göra i alla andra projekt.",
+ "TestInfrastructure": "Testinfrastruktur",
+ "TestInfrastructure_THEPROBLEM_Description": "Att etablera en robust testmiljö Àr en tidskrÀvande uppgift. Det handlar om att skapa dedikerade testprojekt inom din lösning, noggrant vÀlja ut de verktyg som behövs, skapa mocks för tjÀnster och databaser, skapa viktiga basklasser och verktygstjÀnster för att minimera redundant kod i testerna och ta itu med olika relaterade uppgifter.",
+ "TestInfrastructure_ABPSOLUTION_Description": "ABP Startup Templates levereras fÀrdigutrustade med konfigurerade testprojekt, vilket effektiviserar processen för dig. Det innebÀr att du redan frÄn dag ett kan börja skriva din första enhets- eller integrationstestkod utan dröjsmÄl.",
+ "CodingStandards&Training": "Kodningsstandarder och utbildning",
+ "CodingStandards&Training_THEPROBLEM_Description": "NĂ€r du har konfigurerat lösningen för utveckling mĂ„ste du vanligtvis lĂ€ra utvecklarna hur systemet fungerar och hur man bygger det med hjĂ€lp av samma överenskomna metoder. Ăven om du ger dem utbildning kan det vara svĂ„rt att hĂ„lla dokumentationen uppdaterad. Med tiden kanske varje utvecklare skriver kod pĂ„ sitt eget sĂ€tt, vilket leder till att reglerna för att skriva kod skiljer sig frĂ„n varandra.",
+ "CodingStandards&Training_ABPSOLUTION_Description": "ABP-lösningen Àr redan snyggt organiserad och har tydliga förklaringar. Steg-för-steg-handledningar och guider visar exakt hur du ska arbeta med ett ABP-projekt.",
+ "KeepingYourSolutionUpToDate": "HÄll din lösning uppdaterad",
+ "KeepingYourSolutionUpToDate_THEPROBLEM_Description": "NÀr du har pÄbörjat din utveckling mÄste du hÄlla reda pÄ de nya versionerna av de bibliotek du anvÀnder för uppgraderingar och korrigeringar.",
+ "KeepingYourSolutionUpToDate_ABPSOLUTION_Description": "Vi uppdaterar regelbundet alla paket till de senaste versionerna och testar dem före den stabila utgÄvan. NÀr du uppdaterar ABP Framework uppgraderas alla dess beroenden till den senaste tekniken.",
+ "KeepingYourSolutionUpToDate_ABPSOLUTION_Description2": "Abp update CLI-kommando hittar och uppgraderar automatiskt alla ABP-beroende NuGet- och NPM-paket i en lösning. Med ABP Àr det enklare att hÄlla sig till de senaste versionerna.",
+ "DRY": "Upprepa inte dig sjÀlv!",
+ "DRY_Description": "Att skapa en baslösning tar lÄng tid och krÀver god erfarenhet av arkitektur. Men detta Àr bara början! NÀr du börjar utveckla kommer du sannolikt att behöva skriva massor av repetitiv kod; det skulle vara fantastiskt om allt detta kunde hanteras automatiskt.",
+ "DRY_Description2": "ABP automatiserar och förenklar upprepningskoden sÄ mycket som möjligt genom att följa principen om konvention framför konfiguration. Det begrÀnsar dig dock inte nÀr du behöver vÀxla till manuell vÀxel. Kontrollen ligger alltid i dina hÀnder.",
+ "Authentication": "Autentisering",
+ "Authentication_THEPROBLEM_Description": "Single Sign On, Active Directory / LDAP-integration, OpenIddict-integration, sociala inloggningar, tvÄfaktorsautentisering, glömt / ÄterstÀllt lösenord, e-postaktivering, ny anvÀndarregistrering, kontroll av lösenordskomplexitet, lÄsning av konto vid misslyckade försök, visning av misslyckade inloggningsförsök ... etc. Vi vet att alla dessa generiska krav Àr bekanta för dig. Du Àr inte ensam!",
+ "Authentication_ABPSOLUTION_Description": "ABP Framework och den kommersiella versionen tillhandahÄller alla dessa standardgrejer förimplementerade Ät dig som en ÄteranvÀndbar kontomodul. Du aktiverar och konfigurerar bara det du behöver.",
+ "CrossCuttingConcerns": "Ăvergripande frĂ„gor",
+ "CrossCuttingConcerns_THEPROBLEM_Description": "Cross-Cutting Concerns Àr den grundlÀggande upprepningslogik som bör implementeras för varje anvÀndningsfall. NÄgra exempel;",
+ "CrossCuttingConcerns_THEPROBLEM_Description2": "Starta transaktioner, genomföra vid framgÄng och rulla tillbaka vid fel.",
+ "CrossCuttingConcerns_THEPROBLEM_Description3": "Hantera och rapportera undantag, returnera ett korrekt felsvar till klienterna och hantera felfall pÄ klientsidan.",
+ "CrossCuttingConcerns_THEPROBLEM_Description4": "Implementera auktorisering och validering, returnera korrekta svar och hantera dessa pÄ klientsidan.",
+ "CrossCuttingConcerns_ABPSOLUTION_Description": "ABP Framework automatiserar eller förenklar alla vanliga övergripande problem. Du skriver bara kod som Àr viktig för ditt företag, och ABP hanterar resten genom konventioner.",
+ "ArchitecturalInfrastructure": "Arkitektonisk infrastruktur",
+ "ArchitecturalInfrastructure_THEPROBLEM_Description": "Du behöver vanligtvis bygga infrastruktur för att implementera din arkitektur pÄ rÀtt sÀtt. Till exempel implementerar du i allmÀnhet Repository-mönstret. Du definierar nÄgra basklasser för att förenkla och standardisera skapandet av entiteter, tjÀnster, controllers och andra objekt.",
+ "ArchitecturalInfrastructure_ABPSOLUTION_Description": "ABP Framework tillhandahÄller allt detta och mer dÀrtill direkt frÄn start. Det Àr moget och vÀldokumenterat.",
+ "EnterpriseApplicationRequirements": "Krav pÄ företagsapplikationer",
+ "EnterpriseApplicationRequirements_THEPROBLEM_Description": "Det finns mÄnga krav som du upprepade gÄnger mÄste implementera i varje affÀrsapplikation;",
+ "EnterpriseApplicationRequirements_THEPROBLEM_Description2": "Detaljerat behörighetssystem och hantering av behörigheter i anvÀndargrÀnssnittet baserat pÄ roller och anvÀndare.",
+ "EnterpriseApplicationRequirements_THEPROBLEM_Description3": "Skriva granskningsloggar och entitetshistorik för att spÄra nÀr en anvÀndare Àndrar en databaspost.",
+ "EnterpriseApplicationRequirements_THEPROBLEM_Description4": "Gör dina enheter mjukt raderade, sÄ att de markeras som raderade istÀllet för att fysiskt raderas frÄn databasen och automatiskt filtrera bort raderade enheter i dina frÄgor.",
+ "EnterpriseApplicationRequirements_THEPROBLEM_Description5": "Skapa abstraktioner och omslag för att konsumera dina backend-API:er frÄn frontend-koden.",
+ "EnterpriseApplicationRequirements_THEPROBLEM_Description6": "UppstÀllning i kö och utförande av bakgrundsjobb.",
+ "EnterpriseApplicationRequirements_THEPROBLEM_Description7": "Hantering av flera tidszoner i ett globalt system.",
+ "EnterpriseApplicationRequirements_THEPROBLEM_Description8": "Delning av validering, lokalisering och auktoriseringslogik mellan server och klient.",
+ "EnterpriseApplicationRequirements_ABPSOLUTION_Description": "ABP tillhandahĂ„ller en infrastruktur för att enkelt implementera sĂ„dana krav. Ă
terigen behöver du inte spendera din vÀrdefulla tid pÄ att implementera alla dessa om och om igen.",
+ "GeneratingInitialCode&Tooling": "Generering av initialkod och verktyg",
+ "GeneratingInitialCode&Tooling_THEPROBLEM_Description": "Du kommer att bygga mÄnga liknande sidor i en typisk webbapplikation. De flesta av dem kommer att utföra liknande CRUD-operationer. Det Àr mycket trÄkigt och Àven felbenÀget att upprepade gÄnger skapa sÄdana sidor.",
+ "GeneratingInitialCode&Tooling_ABPSOLUTION_Description": "ABP Suite kan generera en full-stack CRUD-sida för dina enheter pÄ nÄgra sekunder. Den genererade koden Àr skiktad och ren. Alla standardkrav för validering och auktorisering Àr implementerade. Dessutom genereras enhetstestklasser. NÀr du vÀl har fÄtt en helt fungerande sida kan du Àndra den enligt dina affÀrsbehov.",
+ "IntegratingTo3rdPartyLibrariesAndSystems": "Integrering med bibliotek och system frÄn tredje part",
+ "IntegratingTo3rdPartyLibrariesAndSystems_THEPROBLEM_Description": "De flesta bibliotek Àr utformade pÄ lÄg nivÄ och du mÄste vanligtvis göra en del arbete för att integrera dem pÄ rÀtt sÀtt utan att upprepa samma integrations- och konfigurationskod överallt i din lösning. Anta till exempel att du mÄste anvÀnda RabbitMQ för att implementera din distribuerade hÀndelsebuss. Allt du vill göra Àr att skicka ett meddelande till en kö och hantera de inkommande meddelandena. Men du mÄste förstÄ meddelandemönster, köer och utbytesdetaljer. För att skriva effektiv kod mÄste du skapa en pool för att hantera anslutningar, klienter och kanaler. Du mÄste ocksÄ hantera undantag, ACK-meddelanden, Äteranslutning till RabbitMQ vid misslyckanden och mer.",
+ "IntegratingTo3rdPartyLibrariesAndSystems_ABPSOLUTION_Description": "Till exempel abstraherar ABP:s RabbitMQ Distributed Event Bus-integration alla dessa detaljer. Du skickar och tar emot meddelanden utan krÄngel. Behöver du skriva kod pÄ lÄg nivÄ? Inga problem, det kan du alltid göra. ABP begrÀnsar dig inte nÀr du behöver anvÀnda lÄgnivÄfunktioner i det bibliotek du anvÀnder.",
+ "WhyNotBuildYourOwnFramework?": "Varför inte bygga ditt eget ramverk?",
+ "WhyNotBuildYourOwnFramework_THEPROBLEM_Description": "All infrastruktur, Àven pÄ det enklaste sÀttet, tar mycket tid att bygga, underhÄlla och dokumentera. Den blir större med tiden och det blir svÄrt att underhÄlla den i din lösning. Att separera dessa i ett ÄteranvÀndbart projekt Àr utgÄngspunkten för att bygga ditt eget interna ramverk.",
+ "WhyNotBuildYourOwnFramework_THEPROBLEM_Description2": "Att bygga, dokumentera, utbilda och underhĂ„lla ett internt ramverk Ă€r verkligen svĂ„rt. Om du inte har ett erfaret, dedikerat ramverksteam blir ditt interna ramverk snabbt en odokumenterad Ă€ldre kod som ingen lĂ€ngre kan förstĂ„ och underhĂ„lla. Ă
andra sidan utvecklas dessa ramverk i allmÀnhet av en eller tvÄ utvecklare i teamet. Och dessa medarbetare hÄller pÄ att bli en kunskapssilo. Det Àr bra för dem men dÄligt för företaget eftersom de Àr projektets enda punkt för misslyckande -SPOF-. NÀr de lÀmnar företaget gÄr projektet dramatiskt ner.",
+ "WhyNotBuildYourOwnFramework_ABPSOLUTION_Description": "ABP Framework Àr ett community-drivet, vÀldokumenterat, moget och generiskt applikationsramverk. Ett team av mycket erfarna utvecklare arbetar hÄrt för att hÄlla det uppdaterat, lÀtt att förstÄ och bekvÀmt att anvÀnda. Att anvÀnda ett sÄ stabilt ramverk gör att du kan fokusera pÄ din egen affÀrskod och fÄ hjÀlp med ramverket frÄn experter nÀr du behöver det.",
+ "ArchitecturalInfrastructure_Description": "SaaS-applikationer, modulÀra system eller mikroservicesystem Àr de mest anvÀnda modellerna för företagsprogramvara. Att bygga sÄdana system krÀver inte bara en god förstÄelse och erfarenhet utan ocksÄ en stark mjukvaruinfrastruktur. Annars kommer du att fÄ lÀgga ner mycket arbete pÄ att stödja dessa arkitektoniska detaljer i din kodbas.",
+ "Modularity": "Modularitet",
+ "Modularity_THEPROBLEM_Description": "Att bygga ett verkligt modulÀrt system Àr inte lÀtt! Alla aspekter av systemet (databas, entiteter, API:er, UI-sidor/komponenter) kan delas upp i moduler, och varje modul kan ÄteranvÀndas utan andra. Den vanliga ASP.NET Core ger inte en sÄdan modulÀr arkitektur. Om du behöver det bör du tÀnka pÄ det frÄn grunden.",
+ "Modularity_ABPSOLUTION_Description": "ABP Framework Àr skapat för att vara en modulÀr struktur för applikationsutveckling. Varje funktion i ramverket Àr utvecklad för att vara kompatibel med modularitet. Dokumentation och guider förklarar hur man utvecklar ÄteranvÀndbara moduler pÄ ett standardiserat sÀtt.",
+ "SaaSMultiTenancy": "SaaS / Multi-Tenancy",
+ "SaaSMultiTenancy_THEPROBLEM_Description": "Multi-Tenancy Àr ett vanligt sÀtt att implementera SaaS-system. Att implementera en konsekvent multi-tenant infrastruktur kan dock bli komplicerat.",
+ "SaaSMultiTenancy_ABPSOLUTION_Description": "ABP Framework tillhandahÄller en komplett infrastruktur för flera hyresgÀster och abstraherar komplexiteten frÄn din företagskod. Din applikationskod kommer att vara mestadels multi-tenancy medveten, medan ABP Framework automatiskt isolerar databasen, cache och andra detaljer om hyresgÀsterna frÄn varandra. Det stöder en enda databas, per hyresgÀstdatabas och hybridmetoder. Det konfigurerar biblioteken som Microsoft Identity och OpenIddict, som normalt inte Àr multi-tenancy-kompatibla, pÄ rÀtt sÀtt.",
+ "Microservices": "MikrotjÀnster",
+ "Microservices_THEPROBLEM_Description": "Att bygga ett mikrotjÀnstsystem krÀver mÄnga infrastrukturdetaljer: Autentisering och auktorisering av applikationer och mikrotjÀnster samt implementering av asynkrona meddelanden och synkrona (Rest/GRPC) kommunikationsmönster mellan mikrotjÀnster Àr de mest grundlÀggande frÄgorna.",
+ "Microservices_ABPSOLUTION_Description": "ABP-ramverket tillhandahÄller tjÀnster, guider och exempel som hjÀlper dig att implementera din mikrotjÀnstlösning med hjÀlp av branschens standardverktyg.",
+ "Microservices_ABPSOLUTION_Description2": "ABP:s kommersiella version gÄr till och med ett steg lÀngre och tillhandahÄller en komplett startup-mall för att kickstarta din microservice-lösning.",
+ "PreBuiltModules": "Förbyggda moduler",
+ "PreBuiltModules_THEPROBLEM_Description": "Alla har vi liknande men lite olika affÀrskrav. Men vi mÄste alla uppfinna hjulet pÄ nytt eftersom ingen annans kod kan fungera direkt i vÄr lösning. De Àr alla inbÀddade delar av en större lösning.",
+ "PreBuiltModules_ABPSOLUTION_Description": "ABP modules tillhandahÄller mÄnga ÄteranvÀndbara applikationsmoduler som betalning, chatt, filhantering, revisionsloggrapportering ... etc. Alla dessa moduler installeras enkelt i din lösning och fungerar direkt. Vi lÀgger stÀndigt till fler moduler.",
+ "PreBuiltModules_ABPSOLUTION_Description2": "Alla moduler Àr utformade sÄ att de kan anpassas efter dina affÀrsbehov. Om du behöver fullstÀndig kontroll kan du ladda ner den fullstÀndiga kÀllkoden för alla moduler och anpassa dem helt utifrÄn dina specifika affÀrskrav.",
+ "ABPCommunity": "ABP Gemenskap",
+ "ABPCommunity_Description": "Slutligen, att vara en del av en stor gemenskap dÀr alla följer liknande kodningsstilar och principer och delar en gemensam infrastruktur ger kraft nÀr du har problem eller behöver hjÀlp med designbeslut. Eftersom vi skriver kod pÄ liknande sÀtt kan vi hjÀlpa varandra mycket bÀttre. ABP Àr ett community-stöttat projekt med mer Àn 10K stjÀrnor pÄ GitHub.",
+ "ABPCommunity_Description2": "Det Àr lÀtt att dela kod eller till och med ÄteranvÀndbara bibliotek mellan ABP-utvecklare. En kodsnutt som fungerar för dig kommer ocksÄ att fungera för andra. Det finns mÄnga exempel och handledningar som du direkt kan implementera i din applikation.",
+ "ABPCommunity_Description3": "NÀr du anlitar en utvecklare som tidigare arbetat med ABP-arkitekturen kommer denne omedelbart att förstÄ din lösning och pÄbörja utvecklingen pÄ mycket kort tid.",
+ "WhyAbpIo_Page_Title": "Varför ABP.IO Platform?",
+ "AbpStudio_Page_Title": "ABP Studio",
+ "CampaignInfo": "Köp en ny licens eller förnya din befintliga licens och fÄ ytterligare 2 mÄnader utan extra kostnad! Detta erbjudande gÀller för alla licensplaner. Se till att du utnyttjar denna tidsbegrÀnsade kampanj för att utöka din tillgÄng till premiumfunktioner och uppgraderingar.",
+ "HurryUpLastDay": "Skynda pÄ! Sista dagen: {0}",
+ "CreatingCRUDPagesWithABPSuite": "Skapa CRUD-sidor med ABP Suite",
+ "Testimonials": "VittnesmÄl",
+ "MultipleYearDiscount": "Rabatt för flera Är",
+ "CampaignDiscountText": "Black Friday-rabatt",
+ "CampaignDiscountName": "Svart fredag",
+ "CampaignName:BlackFriday": "Svart fredag",
+ "MultipleOrganizationInfo": "Se alla dina organisationer",
+ "AbpStudioBetaAccessInfoTitle": "ABP Studio Beta Access",
+ "AbpStudioBetaAccessInfoText": "Vi Àr glada över att kunna dela med oss av beta-versionen av ABP Studio! Den hÀr versionen markerar en viktig milstolpe i vÄr utvecklingsresa, och vi Àr angelÀgna om att samla in din feedback för att göra applikationen Ànnu bÀttre.",
+ "YouAreNotAuthorizedToDownloadStudio": "Du Àr inte behörig att ladda ner ABP Studio.",
+ "OrganizationHasNoDefaultCreditCard": "Din organisation har inget standardkreditkort. LÀgg till ett kreditkort för din organisation.",
+ "YouAreNotAuthorizedToPayThisPaymentRequest": "Du Àr inte behörig att betala denna betalningsbegÀran.",
+ "YouAreNotAuthorizedToCreateBillingInfoForThisPaymentRequest": "Du Àr inte behörig att skapa faktureringsinformation för denna betalningsbegÀran.",
+ "OrganizationNotFound": "Organisationen hittades inte.",
+ "CannotDeleteDefaultCardBecauseAutoRenewalEnabled": "Du kan inte ta bort kortet just nu eftersom funktionen Auto-Renewal Àr aktiverad. För att ta bort kortet mÄste du först avaktivera Auto-Renewal.",
+ "AreYouSureWantToDeleteThisCard": "Ăr du sĂ€ker pĂ„ att du vill ta bort det hĂ€r kortet?",
+ "AreYouSureWantToSetThisCardAsDefault": "Ăr du sĂ€ker pĂ„ att du vill anvĂ€nda det hĂ€r kortet som standard?",
+ "OrganizationBillingInfoIsNotSuitableForIyzicoPayment": "Din organisations faktureringsinformation Àr inte lÀmplig för iyzico-betalning.",
+ "AutomaticRenewal": "Automatisk förnyelse",
+ "AutomaticRenewal_Description": "Om du förnyar en licens innan den gÄr ut fÄr du en rabatt pÄ upp till 40 %. Med den automatiska förnyelseprocessen kan du förnya din licens utan att förlora denna rabatt, och din utveckling kommer aldrig att avbrytas. Automatisk förnyelse Àr endast tillgÀnglig för kreditkortsbetalning. Du kan inaktivera automatisk förnyelse nÀr som helst genom att gÄ till din organisationshanteringssida. ABP sparar inte din kreditkortsinformation, men vÄra globala betalningsgateways sÀkrar besparingar.",
+ "CardNotFoundMessage": "Vill du lÀgga till ett nytt kort?",
+ "CardNotFoundTitle": "Kortet hittades inte",
+ "AutoRenewalEnabled": "Automatisk förnyelse aktiverad",
+ "AutoRenewalDisabled": "Automatisk förnyelse Avaktiverad",
+ "PaymentRequestIdIsNotProvided": "BetalningsförfrÄgans ID anges inte.",
+ "PaymentFailedInfo": "TyvÀrr, betalningen misslyckades! Detta kan bero pÄ otillrÀckliga medel, ogiltigt kreditkortsnummer eller ogiltig pinkod",
+ "UsedPayment": "Denna betalning har redan anvÀnts",
+ "ManageLicense": "Hantera licens",
+ "AbpPlatformLeptonXTheme": "LeptonX Theme för din administrativa instrumentpanel av ABP Platform",
+ "NoActiveLicence": "Du Àr inte berÀttigad till denna ÄtgÀrd! Du har ingen aktiv licens.",
+ "ABPStudioBetaTester": "För att kunna skicka in din begÀran mÄste du logga in",
+ "ABPStudioBetaAccess": "ABP Studio Beta Access",
+ "VisitABPStudio": "Besök ABP Studio",
+ "EditBillingInformation": "Redigera faktureringsinformation",
+ "Organization": "Organisation",
+ "E-Book": "E-bok",
+ "CreditCards": "Kreditkort",
+ "BillingInformation": "Faktureringsinformation",
+ "AddNewCreditCard": "LĂ€gg till nytt kreditkort",
+ "MyOrganizations_LearnMorePlan": "LÀs mer om planer pÄ prissÀttningssidan",
+ "AutoLicenseRenewalIsNotEnabled": "Automatisk licensförnyelse Àr inte aktiverad.",
+ "SetAsDefaultPaymentMethod": "Ange som standardbetalningsmetod",
+ "{0}PerAdditionalDeveloper": "{0} per ytterligare utvecklare",
+ "CardAlias": "Alias för kort (valfritt)",
+ "AbpDoesNotSaveYourPaymentDetails_Description": "Betalningsuppgifterna kommer att sparas i {2} sÀkerhetsvalv och du kan ta bort lagrade uppgifter nÀr som helst. Aktivering av automatisk förnyelse sÀkerstÀller att din ABP-prenumeration automatiskt förnyas innan den löper ut, förutsatt att du har ett giltigt kreditkort. Om du avaktiverar automatisk förnyelse mÄste du förnya din prenumeration manuellt. Om du vill fortsÀtta din projektutveckling utan avbrott föreslÄr vi att du aktiverar alternativet Automatisk förnyelse.",
+ "AddBillingInformation": "LĂ€gg till faktureringsinformation",
+ "YouHaveNoCardsSaved": "Kortet Àr inte sparat Ànnu.",
+ "CreateCreditCardModal_BillingDetails_Description": "Du mÄste spara dina faktureringsuppgifter för att kunna lÀgga till ditt kreditkort.",
+ "TaxNo": "Skatt Nej",
+ "CardNumber": "Kortnummer",
+ "NameOnCard": "Namn pÄ kortet",
+ "BillingDetails": "Faktureringsinformation",
+ "ThereIsNoDeveloper": "Ingen utvecklare tillagd.",
+ "CardDetails": "Debit-/Kreditkortsuppgifter",
+ "YearCantBeNull": "Ă
rsfÀltet fÄr inte vara tomt.",
+ "CardHolderName": "Namn pÄ kortet",
+ "ExpireDate": "UtgÄngsdatum",
+ "DisplayName:ExpireDate": "UtgÄngsdatum",
+ "DisplayName:CardHolderName": "Namn pÄ kortet",
+ "CreditCardNumberLengthWarning": "Ogiltigt kortnummer",
+ "ExpirationWarning": "Ogiltigt utgÄngsdatum",
+ "CreateCreditCardModal_Description": "NÀr du sparar ditt betalkort/kreditkort kommer en tillfÀllig avgift pÄ 1 USD att godkÀnnas för verifiering och Äterbetalas omedelbart.",
+ "ReturnOfInvestmentTitle": "Avkastning pÄ investering",
+ "ReduceYourDevelopmentCostsDescription": "Minska dina utvecklingskostnader med mer Àn 50 % med ABP-ramverket. Men hur? FortsÀtt lÀsa...",
+ "SettingUpTheArchitectureTitle": "UppsÀttning av arkitekturen",
+ "DoingEverythingFromScratch": "Att göra allt frÄn början",
+ "SettingUpTheArchitecture_Description1": "Organisera kodbas och lösningsstruktur",
+ "SettingUpTheArchitecture_Description2": "Identifiera, installera och konfigurera viktiga tredjepartsbibliotek",
+ "SettingUpTheArchitecture_Description3": "UpprÀtta infrastruktur för automatiserad integration och enhetstest",
+ "SettingUpTheArchitecture_Description4": "FaststÀlla och dokumentera kodstandarder, utbilda utvecklingsteamet",
+ "UsingTheABPFramework": "AnvÀnda ABP-ramverket",
+ "UseABPSettingUpTheArchitecture_Description": "AnvÀnd ABP:s mallar för startup-lösningar",
+ "ReduceCostsWithABP": "Minska kostnaderna med ABP genom att",
+ "ReduceCostsBy": "80 % till 100 %.",
+ "DesigningTheUserInterfaceTitle": "Utformning av anvÀndargrÀnssnittet",
+ "DesigningTheUserInterface_Description1": "Skapa eller köp ett UI-tema",
+ "DesigningTheUserInterface_Description2": "Anpassa anvÀndargrÀnssnittets tema till lösningen",
+ "DesigningTheUserInterface_Description3": "Bygga de viktigaste delarna av anvÀndargrÀnssnittet (layout, meny, sidhuvud, sidfot med responsiv design)",
+ "DesigningTheUserInterface_Description4": "Se till att designen Àr konsekvent pÄ alla applikationssidor",
+ "UseABPDesigningTheUserInterface_Description": "AnvÀnd ABP:s LeptonX UI Theme",
+ "DevelopingApplicationFeaturesTitle": "Utveckling av applikationsfunktioner",
+ "DevelopingApplicationFeatures_Description1": "Utveckla din egen affÀrslogik",
+ "DevelopingApplicationFeatures_Description2": "Utveckla varje sida en efter en",
+ "DevelopingApplicationFeatures_Description3": "Utveckla gemensamma affÀrsmoduler sjÀlv",
+ "DevelopingApplicationFeatures_Description4": "Utveckla autentiseringssystemet (enkel inloggning, 2-faktor autentisering, sociala inloggningar, ÄterstÀllning av lösenord, e-postaktivering etc...)",
+ "DevelopingApplicationFeatures_Description5": "TillÀmpa övergripande frÄgor i varje anvÀndningsfall (DB-transaktioner, auktorisering, validering, undantagshantering etc.)",
+ "DevelopingApplicationFeatures_Description6": "Utveckla gemensamma basklasser och nyttotjÀnster",
+ "DevelopingApplicationFeatures_Description7": "Utveckla gemensamma icke-affÀrsmÀssiga krav (revisionsloggning, soft-delete, bakgrundsjobb, behörighetssystem etc.)",
+ "UseABPDevelopingApplicationFeatures_Description1": "Utveckla din egen affÀrslogik",
+ "UseABPDevelopingApplicationFeatures_Description2": "AnvÀnd ABP Suite för att automatiskt generera CRUD-liknande sidor",
+ "UseABPDevelopingApplicationFeatures_Description3": "AnvÀnd direkt ABP:s förbyggda gemensamma applikationsmoduler och anpassa dem utifrÄn dina unika krav",
+ "ReduceCostsBy_2": "40-60 procent",
+ "WhyABPIoPlatform": "Varför ABP.IO Platform?",
+ "WhyShouldYouUsetheABPIOPlatform": "Varför ska du anvÀnda ABP.IO-plattformen istÀllet för att skapa en ny lösning frÄn grunden?",
+ "ExploreMore": "Utforska mer",
+ "DocumentIntroducesDescription": "Om du vill veta mer om varför du ska anvÀnda ABP.IO Platform istÀllet för att skapa en ny lösning frÄn grunden, lÀs följande dokument:",
+ "ReturnOfInvestmentPageAbout": "PÄ den hÀr sidan beskrivs de grundlÀggande stegen i utvecklingen av en programvarulösning och hur ABP.IO Platform minskar dina utvecklingskostnader i varje steg.",
+ "LearnMore": "LĂ€r dig mer",
+ "ReturnOfInvestment": "Avkastning pÄ investeringar",
+ "ReturnOfInvestment_Description": "LÀr dig hur du kan minska dina utvecklingskostnader med mer Àn 50 %.",
+ "Previous": "FöregÄende",
+ "PricingDiscount": "Spara",
+ "PricingTeamTitle": "Team",
+ "PricingBusinessTitle": "Företag",
+ "PricingEnterpriseTitle": "Företag",
+ "SpecialDiscount": "SĂ€rskild rabatt",
+ "YourOrganizationOverview": "Ăversikt över din organisation",
+ "TrainingDetailsHeaderInfo_TrainingHourSingular": "{0} timme",
+ "ContactPageError": "VĂ€nligen skicka ditt meddelande via e-post till info@abp.io
HÀr Àr vad du skrev :",
+ "GoBack": "GĂ„ tillbaka",
+ "HereWhatYouWrote": "HÀr Àr vad du skrev:",
+ "Sales": "FörsÀljning",
+ "LicensingPricing": "Licensiering/prissÀttning",
+ "TrialDemo": "Testversion / Demo",
+ "TrainingOnboarding": "Utbildning / Onboarding",
+ "Resellers": "Ă
terförsÀljare",
+ "Others": "Ăvriga",
+ "Characters": "KaraktÀrer",
+ "Topic": "Ămne",
+ "SendUsEmail": "Skicka e-post till oss",
+ "ErrorExceptionMessage": "Ett fel intrÀffade under behandlingen av din begÀran",
+ "WatchTakeCodeGeneration": "Titta pÄ videon \"Utforska potentialen med kodgenerering: ABP Suite\" Video!",
+ "StartupTemplatesUser": "AnvÀndare",
+ "StartupSingleSignOn": "Enkel inloggning",
+ "Application{0}": "TillÀmpning {0}",
+ "PreBuiltApplicationModulesTitle": "FĂ€rdigbyggda applikationer Moduler.",
+ "RegisterDemo": "Registrera",
+ "TrainingDescription": "Vi erbjuder följande utbildningspaket för dig som vill skaffa dig kunskap om ABP.",
+ "PurchaseDevelopers": "Utvecklare",
+ "LinkExpiredMessage": "BetalningslÀnken har löpt ut! Kontakta oss pÄ sales@volosoft.com för att uppdatera lÀnken eller klicka hÀr för att navigera till kontaktsidan."
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/sv.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/sv.json
new file mode 100644
index 0000000000..de8175fe77
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/sv.json
@@ -0,0 +1,269 @@
+{
+ "culture": "sv",
+ "texts": {
+ "Permission:CommunityPost": "Gemenskapens inlÀgg",
+ "Permission:Edit": "Redigera",
+ "Waiting": "VÀntar pÄ",
+ "Approved": "GodkÀnd",
+ "Rejected": "Avvisad",
+ "Wait": "VĂ€nta",
+ "Approve": "GodkÀnna",
+ "Reject": "Avvisa",
+ "ReadPost": "LÀs inlÀgget",
+ "Status": "Status",
+ "ContentSource": "KÀlla för innehÄll",
+ "Details": "Detaljer",
+ "Title": "Titel",
+ "CreationTime": "Skapelsetid",
+ "Save": "Spara",
+ "SameUrlAlreadyExist": "Samma URL finns redan! Du mÄste Àndra webbadressen!",
+ "UrlIsNotValid": "Url Àr inte giltig.",
+ "UrlNotFound": "Url hittades inte.",
+ "UrlContentNotFound": "Url-innehÄllet hittades inte.",
+ "Summary": "Sammanfattning",
+ "MostRead": "Mest lÀst",
+ "Latest": "Senaste",
+ "ContributeAbpCommunity": "Bidra till ABP:s gemenskap",
+ "SubmitYourPost": "Skicka in ditt inlÀgg",
+ "ContributionGuide": "Bidragsguide",
+ "BugReport": "Bugg-rapport",
+ "SeeAllPosts": "Se alla inlÀgg",
+ "WelcomeToABP": "VĂ€lkommen till ABP",
+ "EmailNotValid": "VĂ€nligen ange en giltig e-postadress.",
+ "FeatureRequest": "BegÀran om funktion",
+ "CreatePostTitleInfo": "Titel pÄ det inlÀgg som ska visas i inlÀggslistan.",
+ "CreatePostSummaryInfo": "En kort sammanfattning av inlÀgget som ska visas i inlÀggslistan. Maximal lÀngd: {0}",
+ "CreatePostCoverInfo": "För att skapa ett effektivt inlÀgg, lÀgg till ett omslagsfoto. Ladda upp bilder i bildförhÄllandet 16:9 för bÀsta visning.
Maximal filstorlek Àr 1MB.",
+ "ThisExtensionIsNotAllowed": "Denna förlÀngning Àr inte tillÄten.",
+ "TheFileIsTooLarge": "Filen Àr för stor.",
+ "GoToThePost": "GÄ till inlÀgget",
+ "GoToTheVideo": "GĂ„ till videon",
+ "Contribute": "Bidra",
+ "OverallProgress": "Ăvergripande framsteg",
+ "Done": "Klar",
+ "Open": "Ăppna",
+ "Closed": "StÀngt",
+ "RecentQuestionFrom": "Senaste frÄgan frÄn {0}",
+ "Stackoverflow": "Stackoverflow",
+ "Votes": "röster",
+ "Answer": "Svar",
+ "Views": "utsikt",
+ "Answered": "Besvarad",
+ "WaitingForYourAnswer": "VÀntar pÄ ditt svar",
+ "Asked": "aska",
+ "AllQuestions": "Alla frÄgor",
+ "NextVersion": "NĂ€sta version",
+ "MilestoneErrorMessage": "Det gick inte att fÄ aktuell milstolpsinformation frÄn Github.",
+ "QuestionItemErrorMessage": "Kunde inte fÄ de senaste frÄgeuppgifterna frÄn Stackoverflow.",
+ "Oops": "Oops!",
+ "CreatePostSuccessMessage": "Ditt inlÀgg har skickats in med framgÄng. Det kommer att publiceras efter granskning av webbplatsadministratören.",
+ "Browse": "BlÀddra",
+ "CoverImage": "Omslagsbild",
+ "ShareYourExperiencesWithTheABPFramework": "Dela dina erfarenheter av ABP-ramverket!",
+ "Optional": "Valfritt",
+ "UpdateUserWebSiteInfo": "Exempel: https://johndoe.com",
+ "UpdateUserTwitterInfo": "Exempel: johndoe",
+ "UpdateUserGithubInfo": "Exempel: johndoe",
+ "UpdateUserLinkedinInfo": "Exempel: https://www.linkedin.com/...",
+ "UpdateUserCompanyInfo": "Exempel: Volosoft",
+ "UpdateUserJobTitleInfo": "Exempel: Programvaruutvecklare",
+ "UserName": "AnvÀndarnamn",
+ "Company": "Företag",
+ "PersonalWebsite": "Personlig webbplats",
+ "RegistrationDate": "Registreringsdatum",
+ "Social": "Sociala",
+ "Biography": "Biografi",
+ "HasNoPublishedPostsYet": "har inga publicerade inlÀgg Ànnu",
+ "Author": "Författaren",
+ "LatestGithubAnnouncements": "Senaste Github-tillkÀnnagivanden",
+ "SeeAllAnnouncements": "Se alla tillkÀnnagivanden",
+ "LatestBlogPost": "Senaste blogginlÀgget",
+ "Edit": "Redigera",
+ "ProfileImageChange": "Ăndra profilbilden",
+ "BlogItemErrorMessage": "Kunde inte fÄ den senaste informationen om blogginlÀgg frÄn ABP.",
+ "PlannedReleaseDate": "Planerat utgivningsdatum",
+ "CommunityPostRequestErrorMessage": "Det gick inte att fÄ den senaste postförfrÄgan frÄn Github.",
+ "PostRequestFromGithubIssue": "Det finns inga postförfrÄgningar nu.",
+ "LatestPosts": "Senaste inlÀgg",
+ "ArticleRequests": "BegÀr ett innehÄll",
+ "ArticleRequestsDescription": "Vill du se ett specifikt innehÄll hÀr? Du kan be communityn att skapa det!",
+ "LatestContentRequests": "Senaste förfrÄgningar om innehÄll",
+ "AllPostRequests": "Se alla postförfrÄgningar",
+ "SubscribeToTheNewsletter": "Prenumerera pÄ nyhetsbrevet",
+ "NewsletterEmailDefinition": "FÄ information om vad som hÀnder i ABP, t.ex. nya utgÄvor, fria kÀllor, inlÀgg och mycket mer.",
+ "NoThanks": "Nej, tack.",
+ "MaybeLater": "Kanske senare",
+ "JoinOurPostNewsletter": "AnmÀl dig till vÄrt nyhetsbrev",
+ "Community": "Gemenskap",
+ "Marketing": "Marknadsföring",
+ "CommunityPrivacyPolicyConfirmation": "Jag godkÀnner de allmÀnna villkoren och Integritetspolicy.",
+ "PostRequestMessageTitle": "Ăppna en frĂ„ga pĂ„ GitHub för att begĂ€ra ett inlĂ€gg / en handledning som du vill se pĂ„ den hĂ€r webbplatsen.",
+ "PostRequestMessageBody": "HÀr Àr en lista över de inlÀgg som efterfrÄgats av communityn. Vill du skriva ett efterfrÄgat inlÀgg? Klicka pÄ önskemÄlet och delta i diskussionen.",
+ "Language": "SprÄk",
+ "CreatePostLanguageInfo": "SprÄket för inlÀggets innehÄll.",
+ "VideoPost": "VideoinlÀgg",
+ "Post": "Post",
+ "Read": "LĂ€s",
+ "CreateGithubPostUrlInfo": "FullstÀndig URL till Markdown-filen pÄ GitHub (exempel).",
+ "CreateVideoContentUrlInfo": "InlÀggets ursprungliga URL pÄ Youtube.",
+ "CreateExternalPostUrlInfo": "InlÀggets ursprungliga externa webbadress.",
+ "VideoContentForm": "Skicka in video pÄ YouTube",
+ "GithubPostForm": "Skicka inlÀgg pÄ GitHub",
+ "ExternalPostForm": "Skicka in ett externt innehÄll",
+ "HowToPost": "Hur postar jag?",
+ "Posts": "InlÀgg",
+ "VideoUrl": "Video webbadress",
+ "GithubPostUrl": "Url för GitHub-post",
+ "ExternalPostUrl": "Url för externt inlÀgg",
+ "ThankYouForContribution": "Tack för att du bidrar till ABP Community. Vi tar gÀrna emot artiklar och videohandledning om ABP Framework, .NET, ASP.NET Core och allmÀnna Àmnen inom programvaruutveckling.",
+ "GithubPost": "GitHub-inlÀgg",
+ "GithubPostSubmitStepOne": "1. Skriv ett inlÀgg pÄ ett offentligt GitHub-arkiv med Markdown-formatet. exempel",
+ "GithubPostSubmitStepTwo": "2. Skicka in din URL till inlÀgget med hjÀlp av formulÀret.",
+ "GithubPostSubmitStepThree": "3. Ditt inlÀgg kommer att Äterges pÄ denna webbplats.",
+ "YoutubeVideo": "Youtube-video",
+ "YoutubeVideoSubmitStepOne": "1. Publicera din video pÄ YouTube.",
+ "YoutubeVideoSubmitStepTwo": "2. Skicka in video-URL:en med hjÀlp av formulÀret.",
+ "YoutubeVideoSubmitStepThree": "3. Besökare kommer att kunna titta pÄ ditt videoinnehÄll direkt pÄ denna webbplats.",
+ "ExternalContent": "Externt innehÄll",
+ "ExternalContentSubmitStepOne": "1. Skapa innehÄll pÄ en publik plattform (Medium, din egen blogg eller var du vill).",
+ "ExternalContentSubmitStepTwo": "2. Skicka in URL:en för ditt innehÄll med hjÀlp av formulÀret.",
+ "ExternalContentSubmitStepThree": "3. Besökare omdirigeras till innehÄllet pÄ den ursprungliga webbplatsen.",
+ "ChooseYourContentType": "VÀlj det sÀtt som du vill lÀgga till ditt innehÄll pÄ.",
+ "PostContentViaGithub": "Jag vill lÀgga till mitt inlÀgg med GitHub i enlighet med markdown-reglerna.",
+ "PostContentViaYoutube": "Jag vill dela mina videor som finns pÄ Youtube hÀr.",
+ "PostContentViaExternalSource": "Jag vill lÀgga till det innehÄll jag publicerade pÄ en annan plattform hÀr.",
+ "GitHubUserNameValidationMessage": "Ditt Github-anvÀndarnamn kan inte innehÄlla blanksteg, kontrollera att ditt Github-anvÀndarnamn Àr korrekt.",
+ "PersonalSiteUrlValidationMessage": "URL:en till din personliga webbplats fÄr inte innehÄlla blanksteg, kontrollera att URL:en till din personliga webbplats Àr korrekt.",
+ "TwitterUserNameValidationMessage": "Ditt Twitter-anvÀndarnamn fÄr inte innehÄlla blanksteg, kontrollera att ditt Twitter-anvÀndarnamn Àr korrekt.",
+ "LinkedinUrlValidationMessage": "Din LinkedIn-URL fÄr inte innehÄlla blanksteg, kontrollera att din LinkedIn-URL Àr korrekt.",
+ "NoPostsFound": "Inga inlÀgg hittades!",
+ "SearchInPosts": "Sök i inlÀgg...",
+ "MinimumSearchContent": "Du mÄste ange minst 3 tecken!",
+ "Volo.AbpIo.Domain:060001": "KÀllans URL(\"{PostUrl}\") Àr inte Github URL",
+ "Volo.AbpIo.Domain:060002": "InlÀggets innehÄll Àr inte tillgÀngligt frÄn GitHub(\"{PostUrl}\")-resursen.",
+ "Volo.AbpIo.Domain:060003": "Inget innehÄll i inlÀgget hittades!",
+ "SeeMore": "Se mer",
+ "JoinTheABPCommunity": "GĂ„ med i ABP:s gemenskap",
+ "ABPCommunityTalks": "ABP:s samtal med allmÀnheten",
+ "LiveDemo": "Live Demo",
+ "GetLicense": "Skaffa licens",
+ "GetStarted": "Kom igÄng",
+ "SourceCode": "KĂ€llkod",
+ "LeaveComment": "LĂ€mna kommentar",
+ "ShowMore": "Visa mer",
+ "NoPublishedPostsYet": "Inga publicerade inlÀgg Ànnu.",
+ "Name": "Namn",
+ "Surname": "Efternamn",
+ "WebSite": "Webbplats",
+ "FullURL": "Full URL",
+ "JobTitle": "Befattning",
+ "Prev": "Före",
+ "Previous": "FöregÄende",
+ "Next": "NĂ€sta",
+ "Share": "Aktie",
+ "SortBy": "Sortera efter",
+ "NoPublishedEventsYet": "Inga publicerade hÀndelser Ànnu.",
+ "SubscribeYoutubeChannel": "Prenumerera pÄ Youtube-kanalen",
+ "Enum:EventType:0": "Samtal",
+ "MemberNotPublishedPostYet": "Denna medlem har inte publicerat nÄgra inlÀgg Ànnu.",
+ "TimeAgo": "för {0} sedan",
+ "Discord_Page_JoinCommunityMessage": "GĂ„ med i ABP Discord Community",
+ "Discord_Page_Announce": "Vi Àr glada att kunna presentera ABP Community Discord Server!",
+ "Discord_Page_Description_1": "ABP Community har vuxit sedan dag ett. Vi ville ta det till nÀsta steg genom att skapa en officiell ABP Discord-server sÄ att ABP-communityn kan interagera med varandra med hjÀlp av underverk som snabbmeddelanden.",
+ "Discord_Page_Description_2": "ABP Community Discord Server Àr platsen dÀr du kan visa upp dina skapelser med ABP Framework, dela de tips som fungerade för dig, fÄ de senaste nyheterna och tillkÀnnagivandena om ABP Framework, bara chatta med medlemmar i samhÀllet för att utbyta idéer och ha kul!",
+ "Discord_Page_Description_3": "Denna ABP Community Discord Server Àr den officiella med ABP Core Team nÀrvarande pÄ servern för att övervaka.",
+ "Discord_Page_JoinToServer": "GĂ„ med i ABP Discord Server",
+ "Events_Page_MetaTitle": "ABP:s evenemang för allmÀnheten",
+ "Events_Page_MetaDescription": "Live-showerna, som leds av ABP-teamet, Àr avslappnade sessioner fulla av community-innehÄll, demonstrationer, frÄgor och svar och diskussioner om vad som hÀnder i ABP.",
+ "Events_Page_Title": "ABP Samtal",
+ "Members_Page_WritingFromUser": "LÀs skrivning frÄn {0} pÄ ABP Community.",
+ "Post_Create_Page_MetaTitle": "Ny post",
+ "Post_Create_Page_MetaDescription": "Skapa ditt inlÀgg för att dela med dig av dina erfarenheter om ABP-ramverket och bidra till ABP-communityn.",
+ "Post_Create_Page_CreateNewPost": "Skapa nytt inlÀgg",
+ "Post_Index_Page_MetaDescription": "ABP Communitys syfte Àr att skapa en bidragsmiljö för utvecklare som anvÀnder ABP-ramverket.",
+ "Layout_Title": "{0} | ABP Gemenskap",
+ "Layout_MetaDescription": "Ett nav för ABP Framework, .NET och programvaruutveckling. FÄ tillgÄng till artiklar, handledning, nyheter och bidra till ABP-communityn.",
+ "Index_Page_CommunityIntroduction": "Detta Àr ett nav för ABP Framework, .NET och programvaruutveckling. Du kan lÀsa artiklarna, titta pÄ videohandledningarna, fÄ information om ABP:s utvecklingsframsteg och ABP-relaterade evenemang, hjÀlpa andra utvecklare och dela med dig av din expertis till ABP-communityn.",
+ "TagsInArticle": "Taggar i artikel",
+ "IConsentToMedium": "Jag samtycker till publicering av detta inlÀgg pÄ https://medium.com/volosoft.",
+ "SearchResultsFor": "Sökresultat för \"{0}\"",
+ "SeeMoreVideos": "Se fler videor",
+ "DiscordPageTitle": "ABP Discord Gemenskap",
+ "ViewVideo": "Visa video",
+ "AbpCommunityTitleContent": "ABP Community - ABP-ramverk med öppen kÀllkod",
+ "CommunitySlogan": "En unik community-plattform för ABP-Àlskare.",
+ "RaffleIsNotActive": "Lottdragningen Àr inte aktiv",
+ "YouAreAlreadyJoinedToThisRaffle": "Du Àr redan med i utlottningen!",
+ "InvalidSubscriptionCode": "Ogiltig prenumerationskod",
+ "Raffle:{0}": "Lottdragning: {0}",
+ "Join": "GĂ„ med",
+ "Leave": "LĂ€mna",
+ "LoginToJoin": "Logga in för att gÄ med",
+ "ToEnd:": "För att avsluta:",
+ "ToStart:": "Det Àr en början:",
+ "days": "dagar",
+ "hrs": "timmar",
+ "min": "min",
+ "sec": "sek",
+ "Winners": "Vinnare",
+ "To{0}LuckyWinners": "till {0} lyckliga vinnare",
+ "ActiveRaffles": "Aktiva .",
+ "UpcomingRaffles": "Kommande ",
+ "CompletedRaffles": "FÀrdigstÀllda ",
+ "NoActiveRaffleTitle": "Ingen aktiv utlottning Àr tillgÀnglig för tillfÀllet.",
+ "NoActiveRaffleDescription": "Ingen aktiv utlottning Àr tillgÀnglig för tillfÀllet.",
+ "RaffleSubscriptionCodeInputMessage": "Denna utlottning krÀver en registreringskod. VÀnligen ange registreringskoden nedan:",
+ "RaffleSubscriptionCodeInputErrorMessage": "Registreringskoden Àr felaktig. VÀnligen försök igen.",
+ "GoodJob!": "Bra jobbat!",
+ "RaffleJoinSuccessMessage": "Du Àr nu registrerad för utlottningen. Du kommer att informeras via e-post om du vinner priset!",
+ "RaffleLoginAndRegisterMessage": "Du mÄste logga in för att delta i utlottningen! Om du inte har registrerat dig Ànnu kan du skapa ett konto gratis nu.",
+ "Ok": "Ok",
+ "SeeDetails": "Se detaljer",
+ "WaitingForTheDraw": "VÀnta pÄ dragningen!",
+ "AllAttendees": "Alla deltagare",
+ "SeeRaffleDetail": "Se Raffle detalj",
+ "SeeRaffle": "Se Raffle",
+ "ParticipationIsComplete": "Deltagandet Àr fullstÀndigt.",
+ "ABPCoreDevelopmentTeam": "ABP Core utvecklingsteam",
+ "RegisterTheEvent": "Registrera evenemanget",
+ "GoToConferencePage": "GĂ„ till konferenssidan",
+ "BuyTicket": "Buy Ticket",
+ "SeeEvent": "Se evenemang",
+ "PreviousEvents": "Tidigare evenemang",
+ "OtherLiveEvents": "Andra live-evenemang",
+ "SponsoredConferences": "Sponsrade konferenser",
+ "SponsoredConferencesDescription": "Vi Àr stolta över att stödja .NET-communities och evenemang för programvaruutvecklare.",
+ "UpcomingEvents": "Kommande evenemang",
+ "UpcomingCommunityTalkEventDescription": "Live-showerna, som leds av ABP-teamet, Àr avslappnade sessioner fulla av community-innehÄll, demonstrationer, frÄgor och svar och diskussioner om vad som hÀnder i ABP.",
+ "UpcomingConferenceEventDescription": "ABP .NET Conference Àr ett virtuellt evenemang för .NET-utvecklare dÀr de kan trÀffas och lyssna pÄ föredrag om .NET-vÀrlden, vanliga metoder för programvaruutveckling och ABP Framework med öppen kÀllkod.",
+ "LastOneYear": "Senaste 1 Äret",
+ "AllTimes": "Alla tider",
+ "TopContributors": "De största bidragsgivarna",
+ "{0}Posts": "{0} InlÀgg",
+ "LATESTPOSTS": "SENASTE INLĂGGNINGAR",
+ "NoContributorsFound": "Inga bidragsgivare hittades!",
+ "LatestPost": "Senaste inlÀgget",
+ "MEMBERSINCE{0}": "MEDLEM EFTERSOM {0}",
+ "CopyLink": "Kopiera lÀnk",
+ "ShareOnTwitter": "Dela pÄ Twitter",
+ "ShareOnLinkedIn": "Dela pÄ LinkedIn",
+ "MoreFrom{0}": "Mer frÄn {0}",
+ "SeeAllFrom{0}": "Se alla frÄn {0}",
+ "MostWatched": "Mest bevakade",
+ "Articles({0})": "Artiklar ({0})",
+ "Videos({0})": "Videor ({0})",
+ "LatestArticles": "Senaste artiklar",
+ "RaffleHeader": "Hej ABP Community Member!",
+ "RafflesInfo": "
Det hÀr Àr utlottningssidan som Àr avsedd att visa vÄr uppskattning för att du Àr en aktiv gemenskapsmedlem. Vi gör ABP Community Talks ,ABP .NET Conference, deltar eller sponsrar .NET-relaterade evenemang dÀr vi ger bort nÄgra gÄvor.
Du kan följa den hÀr sidan för att se kommande lotterier, delta i dem eller se tidigare lotterier som vi dragit inklusive vinnarna.
Tack för att du Àr en aktiv medlem! Vi ses i de kommande lotterierna.",
+ "RafflesInfoTitle": "ABP Community .",
+ "ToLuckyWinner": "till 1 lycklig vinnare",
+ "MarkdownSupported": "Stöd för Markdown.",
+ "Preview": "Förhandsgranskning",
+ "VisitPage": "Besök sidan",
+ "VisitVideoCourseDescription": "Om du vill lÀra dig grunderna i ABP-ramverket kan du kolla in videokurserna ABP Essentials.",
+ "EditProfile": "Redigera profil",
+ "ConfirmEmailForPost": "För att kunna göra inlÀgg mÄste du bekrÀfta din e-post. GÄ till account.abp.io/Account/Manage och verifiera din e-postadress under fliken Personal Info.",
+ "DailyPostCreateLimitation": "Du har nÄtt den dagliga grÀnsen för skapande av inlÀgg. Du kan skapa ett nytt inlÀgg i {0}.",
+ "YourAccountDisabled": "Ditt anvÀndarkonto Àr inaktiverat!"
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/sv.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/sv.json
new file mode 100644
index 0000000000..d24ece38ce
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/sv.json
@@ -0,0 +1,9 @@
+{
+ "culture": "sv",
+ "texts": {
+ "Buy": "Köp",
+ "SeeBookDetails": "Se bokdetaljer",
+ "MasteringAbpFrameworkEBookDescription": "Den hÀr boken hjÀlper dig att fÄ en fullstÀndig förstÄelse för ramverket och moderna tekniker för utveckling av webbapplikationer.",
+ "Feedback": "Ă
terkoppling"
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Support/Localization/Resources/sv.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Support/Localization/Resources/sv.json
new file mode 100644
index 0000000000..e39cf79f0e
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Support/Localization/Resources/sv.json
@@ -0,0 +1,6 @@
+{
+ "culture": "sv",
+ "texts": {
+ "FAQ": "VANLIGA FRĂ
GOR"
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en-GB.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en-GB.json
index f0f5dbd496..f91152bf59 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en-GB.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en-GB.json
@@ -153,6 +153,9 @@
"AndMore": "and more...",
"Code": "Code",
"Result": "Result",
+ "CommercialSupport": "Commercial Suport",
+ "GithubIssues": "GitHub Issues",
+ "TechnicalSupport": "Technical Support",
"SeeTheDocumentForMoreInformation": "See the {0} document for more information",
"IndexPageHeroSection": "open sourceWeb Application
Framework for asp.net core",
"UiFramework": "UI Framework",
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json
index a7fba41149..2eaa3d875d 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json
@@ -110,6 +110,9 @@
"EmailSMSAbstractionsWithTemplatingSupport": "Email & SMS Abstractions with Templating Support",
"Localization": "Localization",
"SettingManagement": "Setting Management",
+ "CommercialSupport": "Commercial Suport",
+ "GithubIssues": "GitHub Issues",
+ "TechnicalSupport": "Technical Support",
"ExtensionMethods": "Extension Methods",
"ExtensionMethodsHelpers": "Extension Methods & Helpers",
"AspectOrientedProgramming": "Aspect Oriented Programming",
@@ -258,6 +261,8 @@
"Name": "Name",
"Surname": "Surname",
"CompanyName": "Company name",
+ "CompanyAddress" : "Company Address",
+ "TaxNumber" : "Tax Number",
"Free": "Free",
"DDDEBook": "DDD E-Book",
"PracticalGuideForImplementingDDD": "This book is a practical guide for implementing the Domain Driven Design with the ABP Framework.",
@@ -481,7 +486,7 @@
"GenderRequired": "The Gender field is required.",
"LeaveUsReview": "Leave us review",
"ABPVideoCoursesDescription": "Learn fundamental concepts and usage of ABP Framework in this video course series. Ideal for newbies!",
- "ABPVideoCoursesPageDescription": "Learn the basics of the ABP Framework through video courses created by the ABP team. In this video series, you will learn the essential topics of the ABP Framework. The numbers on each video are written according to the learning flow.",
+ "ABPVideoCoursesPageDescription": "In this video series, you will learn the key topics of the ABP Framework through videos prepared by the ABP Team.",
"DocumentationButtonTitle": "Documentation",
"ABPVideoCoursesTitle": "Essentials Videos",
"LovedDevelopers": "Loved by thousands of developers
around the world",
@@ -539,7 +544,7 @@
"CommercialLicenses": "Commercial Licenses",
"WhatIsDifferencePaidLicenses": "What is the difference between a personal license and other types of paid licenses?",
"DifferencePaidLicenseExplanation1": "A non-personal paid license is the standard licensing option for enterprises and commercial entities. Licenses are purchased by the company and can be used by anyone within the organization.",
- "DifferencePaidLicenseExplanation2": "Personal License; on the other hand, is a type of license for private individuals/freelancers/independent developers who purchase licenses with their own funds and solely for their own use. The Personal License has some limitations. In this plan, there can only be 1 developer working on the ABP project and no additional developers are allowed to be added later to the project. Downloading the source-code of PRO modules is not allowed in the personal license plan. Also, there is no microservice template and tier (layered) architecture in this plan. Personal License holders can only use the following modules: Account, Audit Log UI, GDPR, Identity, Language Management, LeptonX PRO, OpenIddict UI and SaaS. Personal License holders cannot use the following modules: Chat, CMS-Kit PRO, Forms, Identity Server User Interface, Lepton Theme, Text Template Management, File Management and Twilio SMS. You can access the full module list at abp.io/modules.",
+ "DifferencePaidLicenseExplanation2": "Personal License; on the other hand, is a type of license for private individuals/freelancers/independent developers who purchase licenses with their own funds and solely for their own use. The Personal License has some limitations. In this plan, there can only be 1 developer working on the ABP project and no additional developers are allowed to be added later to the project. Downloading the source-code of PRO modules is not allowed in the personal license plan. Also, there is no microservice template and tier (layered) architecture in this plan. Personal License holders can only use the following modules: Account, Audit Logging UI, GDPR, Identity, Language Management, LeptonX PRO, OpenIddict UI and SaaS. Personal License holders cannot use the following modules: Chat, CMS-Kit PRO, File Management, Forms, Payment, Text Template Management, and Twilio SMS. You can access the full module list at abp.io/modules.",
"ReadyToStart": "Ready to start?",
"TransformYourIdeasIntoRealityWithOurProfessionalNETDevelopmentServices": "Transform your ideas into reality with our professional .NET development services.",
"ReadyToUpgrade": "Ready to upgrade?",
@@ -574,6 +579,11 @@
"CreatePostTitleInfo": "Title of the post to be shown on the post list.",
"CreatePostSummaryInfo": "A short summary of the post to be shown on the post list. Maximum length: {0}",
"CreatePostCoverInfo": "For creating an effective post, add a cover photo. Upload 16:9 aspect ratio pictures for the best view.
Maximum file size: 1MB.",
+ "CreatePostCoverInfo_Title": "Add a cover image to your post.",
+ "CreatePostCoverInfo1": " Accepted file types : JPEG, JPG, PNG",
+ "CreatePostCoverInfo2": " Max file size : 1 MB",
+ "CreatePostCoverInfo3": " Image proportion : 16:9",
+ "CreatePostCoverInfo4": " Download a sample cover image ",
"ThisExtensionIsNotAllowed": "This extension is not allowed.",
"TheFileIsTooLarge": "The file is too large.",
"GoToThePost": "Go to the Post",
@@ -1458,6 +1468,7 @@
"MAUI": "MAUI",
"HowItWorks_Page_Title": "How It Works?",
"HowItWorks_Page_Description": "Understand how ABP Framework works with detailed documentation, including guides and best practices.",
+ "HowItWorks_Description_Title": "Whatâs possible with ASP.NET Core, easier with ABP!",
"HowItWorks_Description1": "ABP extends the .NET platform. So, anything you can do with a plain .NET solution is already possible with ABP. That makes it easy to get started with a low learning curve.",
"HowItWorks_Description2": "Once you start learning and using ABP features, developing your software will be much more enjoyable than ever.",
"HowItWorks_Description3": "This page basically explains how you use the ABP Platform as a .NET developer.",
@@ -1841,6 +1852,11 @@
"BackgroundWorkers": "Background Workers",
"BackgroundWorkersExplanation": "Define operations to run in a separate, dedicated thread. Use the built-in background workers or integrate your own. Hangfire and Quartz integrations are already available.",
"ConcurrencyCheck": "Concurrency Check",
- "ConcurrencyCheckExplanation": "ABP provides an optimistic concurrency check mechanism to ensure data consistency in your application and prevents users access or change the same data in a database at the same time."
+ "ConcurrencyCheckExplanation": "ABP provides an optimistic concurrency check mechanism to ensure data consistency in your application and prevents users access or change the same data in a database at the same time.",
+ "NewsletterEmailFooterCreateTemplateMessage": "Thank you for subscribing! We're thrilled to have you on board.
As a subscriber, you'll receive the latest updates on:- Promotional Offers:Benefit from exclusive discounts, seasonal campaigns, and special offers.
- Events:Stay informed about our Community Talks, Webinars, and the ABP DOTNET Conferences.
- Release Notes:Get the latest on ABP Platform releases and new products.
- Newsletter:Enjoy our blog posts, community news, and more.
We look forward to keeping you informed and engaged. ",
+ "NewsletterDeleteSubscriptionDescription": "This is a confirmation that you have unsubscribed from the following email categories:- Promotional Offers:Discounts, seasonal campaigns, etc.
- Events:Community Talks, Webinars, ABP DOTNET Conference, etc.
- Release Notes:ABP Platform releases, new products, etc.
- Newsletter:Blog posts, community news, etc.
Please note that you will still receive important transactional emails related to your account. ",
+ "NewsletterEmailFooterTemplateDeleteSubscription": "If you change your mind, you're always welcome to resubscribe!",
+ "GenerateQuote" : "Generate Quote" ,
+ "GeneratePriceQuote" : "Generate a Price Quote"
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sv.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sv.json
new file mode 100644
index 0000000000..a26f21b66b
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sv.json
@@ -0,0 +1,1828 @@
+{
+ "culture": "sv",
+ "texts": {
+ "GetStarted": "Kom igÄng",
+ "Create": "Skapa",
+ "NewProject": "Nytt projekt",
+ "DirectDownload": "Direkt nedladdning",
+ "ProjectName": "Projektets namn",
+ "ProjectType": "Typ av projekt",
+ "DatabaseProvider": "Databasleverantör",
+ "DatabaseManagementSystem": "System för databashantering",
+ "NTier": "N-djur",
+ "IncludeUserInterface": "Inkludera anvÀndargrÀnssnitt",
+ "CreateNow": "Skapa nu",
+ "TheStartupProject": "Uppstartsprojektet",
+ "Tutorial": "Handledning",
+ "UsingCLI": "AnvÀnda CLI",
+ "SeeDetails": "Se detaljer",
+ "AbpShortDescription": "ABP Framework Àr en komplett infrastruktur för att skapa mjukvarulösningar med moderna arkitekturer baserade pÄ ASP.NET Core-plattformen.",
+ "SourceCodeUpper": "KĂLLKOD",
+ "LatestReleaseLogs": "Senaste versionens loggar",
+ "Infrastructure": "Infrastruktur",
+ "Architecture": "Arkitektur",
+ "Modular": "ModulÀr",
+ "DontRepeatYourself": "Upprepa inte dig sjÀlv",
+ "DeveloperFocused": "Fokus pÄ utvecklare",
+ "FullStackApplicationInfrastructure": "Full stack applikationsinfrastruktur.",
+ "DomainDrivenDesign": "DomÀnstyrd design",
+ "DomainDrivenDesignExplanation": "Designad och utvecklad utifrÄn DDD-mönster och principer. Ger en skiktad modell för din applikation.",
+ "Authorization": "Auktorisering",
+ "AuthorizationExplanation": "Avancerad auktorisering med anvÀndare, roll och finkornigt behörighetssystem. Byggt pÄ Microsoft Identity-biblioteket.",
+ "MultiTenancy": "Multi-tenancy",
+ "MultiTenancyExplanationShort": "SaaS-applikationer pÄ ett enkelt sÀtt! Integrerad multi-tenancy frÄn databas till anvÀndargrÀnssnitt.",
+ "CrossCuttingConcerns": "TvÀrgÄende angelÀgenheter",
+ "CrossCuttingConcernsExplanationShort": "Komplett infrastruktur för auktorisering, validering, undantagshantering, cachelagring, revisionsloggning, transaktionshantering med mera.",
+ "BuiltInBundlingMinification": "Inbyggd paketering och minimering",
+ "BuiltInBundlingMinificationExplanation": "Du behöver inte anvÀnda externa verktyg för paketering och minifiering. ABP erbjuder ett enklare, mer dynamiskt, kraftfullt, modulÀrt och inbyggt sÀtt!",
+ "VirtualFileSystem": "Virtuellt filsystem",
+ "VirtualFileSystemExplanation": "BÀdda in vyer, skript, stilar, bilder ... i paket/libraries och ÄteranvÀnd dem i olika applikationer.",
+ "Theming": "Tematisering",
+ "ThemingExplanationShort": "AnvÀnd och anpassa det bootstrap-baserade standardgrÀnssnittstemat eller skapa ditt eget.",
+ "BootstrapTagHelpersDynamicForms": "Bootstrap-tagghjÀlpmedel och dynamiska formulÀr",
+ "BootstrapTagHelpersDynamicFormsExplanation": "IstÀllet för att manuellt skriva de upprepade detaljerna i bootstrap-komponenter, anvÀnd ABP:s tagghjÀlpmedel för att förenkla dem och dra nytta av IntelliSense. Bygg snabbt anvÀndargrÀnssnittsformulÀr baserat pÄ en C#-modell med hjÀlp av tagghjÀlpen för dynamiska formulÀr.",
+ "HTTPAPIsDynamicProxies": "HTTP API:er och dynamiska proxyservrar",
+ "HTTPAPIsDynamicProxiesExplanation": "Exponera automatiskt applikationstjÀnster som HTTP API:er i REST-stil och anvÀnd dem med dynamiska JavaScript- och C#-proxyer.",
+ "CompleteArchitectureInfo": "Modern arkitektur för att skapa underhÄllsfria programvarulösningar.",
+ "DomainDrivenDesignBasedLayeringModelExplanation": "HjÀlper till att implementera en DDD-baserad skiktad arkitektur och bygga en underhÄllbar kodbas.",
+ "DomainDrivenDesignBasedLayeringModelExplanationCont": "TillhandahÄller startmallar, abstraktioner, basklasser, tjÀnster, dokumentation och guider som hjÀlper dig att utveckla din applikation baserat pÄ DDD-mönster och -principer.",
+ "MicroserviceCompatibleModelExplanation": "KÀrnramverket och de förbyggda modulerna Àr utformade med mikrotjÀnstarkitektur i Ätanke.",
+ "MicroserviceCompatibleModelExplanationCont": "TillhandahÄller infrastruktur, integrationer, exempel och dokumentation för att göra det enklare att implementera mikrotjÀnstlösningar, samtidigt som det inte medför ytterligare komplexitet om du vill ha en monolitisk applikation.",
+ "ModularInfo": "ABP tillhandahÄller ett modulsystem som gör att du kan utveckla ÄteranvÀndbara applikationsmoduler, knyta an till hÀndelser i applikationens livscykel och uttrycka beroenden mellan centrala delar av ditt system.",
+ "PreBuiltModulesThemes": "Förbyggda moduler och teman",
+ "PreBuiltModulesThemesExplanation": "Moduler och teman med öppen kÀllkod och kommersiella moduler Àr redo att anvÀndas i din affÀrsapplikation.",
+ "NuGetNPMPackages": "NuGet- och NPM-paket",
+ "NuGetNPMPackagesExplanation": "Distribueras som NuGet- och NPM-paket. LĂ€tt att installera och uppgradera.",
+ "ExtensibleReplaceable": "Utdragbar/utbytbar",
+ "ExtensibleReplaceableExplanation": "Alla tjÀnster och moduler Àr utformade med tanke pÄ utbyggbarhet. Du kan byta ut tjÀnster, sidor, stilar och komponenter.",
+ "CrossCuttingConcernsExplanation2": "HÄll din kodbas mindre sÄ att du kan behÄlla fokus pÄ den kod som Àr specifik för ditt företag.",
+ "CrossCuttingConcernsExplanation3": "LÀgg inte tid pÄ att implementera gemensamma applikationskrav i flera projekt.",
+ "AuthenticationAuthorization": "Autentisering och auktorisering",
+ "ExceptionHandling": "Hantering av undantag",
+ "Validation": "Validering",
+ "DatabaseConnection": "Databasanslutning",
+ "TransactionManagement": "Transaktionshantering",
+ "AuditLogging": "Loggning av revision",
+ "Caching": "Caching",
+ "Multitenancy": "Multitenancy",
+ "DataFiltering": "Filtrering av data",
+ "ConventionOverConfiguration": "Konvention över konfiguration",
+ "ConventionOverConfigurationExplanation": "ABP implementerar vanliga applikationskonventioner som standard med minimal eller ingen konfiguration.",
+ "ConventionOverConfigurationExplanationList1": "Auto-registrering av kÀnda tjÀnster för beroendeinjektion.",
+ "ConventionOverConfigurationExplanationList2": "Exponerar applikationstjÀnster som HTTP API:er med hjÀlp av namnkonventioner.",
+ "ConventionOverConfigurationExplanationList3": "Skapar dynamiska HTTP-klientproxyer för C# och JavaScript.",
+ "ConventionOverConfigurationExplanationList4": "TillhandahÄller standardförvar för dina enheter.",
+ "ConventionOverConfigurationExplanationList5": "Hanterar arbetsenhet per webbförfrÄgan eller applikationstjÀnstmetod.",
+ "ConventionOverConfigurationExplanationList6": "Publicerar skapa, uppdatera och ta bort hÀndelser för dina enheter.",
+ "BaseClasses": "Basklasser",
+ "BaseClassesExplanation": "Förbyggda basklasser för vanliga applikationsmönster.",
+ "DeveloperFocusedExplanation": "ABP Àr till för utvecklare.",
+ "DeveloperFocusedExplanationCont": "Det syftar till att förenkla den dagliga programutvecklingen utan att hindra dig frÄn att skriva lÄgnivÄkod.",
+ "SeeAllFeatures": "Se alla funktioner",
+ "CLI_CommandLineInterface": "CLI (kommandoradsgrÀnssnitt)",
+ "CLI_CommandLineInterfaceExplanation": "InnehÄller ett CLI som hjÀlper dig att automatisera skapandet av nya projekt och tillÀgg av nya moduler.",
+ "StartupTemplates": "Mallar för nystartade företag",
+ "StartupTemplatesExplanation": "ABP:s mall för applikationsstart ger en fullt konfigurerad lösning för att starta din utveckling.",
+ "BasedOnFamiliarTools": "Baserat pÄ vÀlkÀnda verktyg",
+ "BasedOnFamiliarToolsExplanation": "Byggd pÄ och integrerad med populÀra verktyg som du redan kÀnner till. LÄg inlÀrningskurva, enkel anpassning, bekvÀm utveckling.",
+ "ORMIndependent": "ORM Oberoende",
+ "ORMIndependentExplanation": "KÀrnramverket Àr ORM/databasoberoende och kan fungera med alla datakÀllor. Entity Framework Core- och MongoDB-leverantörer finns redan tillgÀngliga.",
+ "Features": "Utforska ABP-ramverkets funktioner",
+ "ABPCLI": "ABP CLI",
+ "Modularity": "Modularitet",
+ "BootstrapTagHelpers": "Bootstrap-taggarnas hjÀlpmedel",
+ "DynamicForms": "Dynamiska formulÀr",
+ "BundlingMinification": "Paketering och minimering",
+ "BackgroundJobs": "Bakgrundsjobb",
+ "BackgroundJobsExplanation": "Definiera enkla klasser för att utföra jobb i bakgrunden nÀr de stÄr i kö. AnvÀnd den inbyggda jobbhanteraren eller integrera din egen. Integrationer med Hangfire, RabbitMQ och Quartz Àr redan tillgÀngliga.",
+ "DDDInfrastructure": "DDD Infrastruktur",
+ "DomainDrivenDesignInfrastructure": "DomÀnstyrd design Infrastruktur",
+ "AutoRESTAPIs": "Auto REST API:er",
+ "DynamicClientProxies": "Dynamiska klientproxyservrar",
+ "DistributedEventBus": "Distribuerad hÀndelsebuss",
+ "DistributedEventBusWithRabbitMQIntegration": "Distribuerad hÀndelsebuss med RabbitMQ-integration",
+ "TestInfrastructure": "Testinfrastruktur",
+ "AuditLoggingEntityHistories": "Audit Logging & Entity Histories",
+ "ObjectToObjectMapping": "Mappning av objekt till objekt",
+ "ObjectToObjectMappingExplanation": "Objekt-till-objekt-mappning abstraktion med AutoMapper-integration.",
+ "EmailSMSAbstractions": "E-post- och SMS-abstraktioner",
+ "EmailSMSAbstractionsWithTemplatingSupport": "E-post- och SMS-abstraktioner med stöd för templating",
+ "Localization": "Lokalisering",
+ "SettingManagement": "InstÀllning Management",
+ "ExtensionMethods": "Metoder för förlÀngning",
+ "ExtensionMethodsHelpers": "Metoder och hjÀlpmedel för förlÀngning",
+ "AspectOrientedProgramming": "Aspektorienterad programmering",
+ "DependencyInjection": "Injektion av beroenden",
+ "DependencyInjectionByConventions": "Dependency Injection enligt konventioner",
+ "ModularityExplanation": "ABP tillhandahÄller en komplett infrastruktur för att bygga dina egna applikationsmoduler som kan innehÄlla enheter, tjÀnster, databasintegration, API:er, UI-komponenter och sÄ vidare.",
+ "MultiTenancyExplanation": "ABP stöder inte bara utveckling av applikationer med flera hyresgÀster, utan gör ocksÄ din kod mestadels omedveten om flera hyresgÀster.",
+ "MultiTenancyExplanation2": "Kan automatiskt bestÀmma den aktuella hyresgÀsten, isolera data frÄn olika hyresgÀster frÄn varandra.",
+ "MultiTenancyExplanation3": "Stöd för en enda databas, databas per klient och hybridmetoder.",
+ "MultiTenancyExplanation4": "Du fokuserar pÄ din affÀrskod och lÄter ramverket hantera multi-tenancy för din rÀkning.",
+ "BootstrapTagHelpersExplanation": "IstÀllet för att manuellt skriva de upprepande detaljerna i bootstrap-komponenterna, anvÀnd ABP:s tagghjÀlpmedel för att förenkla det och dra nytta av IntelliSense. Du kan anvÀnda Bootstrap direkt nÀr du behöver det.",
+ "DynamicFormsExplanation": "Dynamiska formulÀr- och inmatningstagghjÀlpmedel kan skapa ett komplett formulÀr frÄn en C#-klass som modell.",
+ "AuthenticationAuthorizationExplanation": "Rika autentiserings- och auktoriseringsalternativ integrerade med ASP.NET Core Identity & OpenIddict. TillhandahÄller ett utbyggbart och detaljerat behörighetssystem.",
+ "CrossCuttingConcernsExplanation": "Upprepa inte dig sjÀlv för att implementera alla dessa vanliga saker om och om igen. Fokusera pÄ din affÀrskod och lÄt ABP automatisera dem genom konventioner.",
+ "DatabaseConnectionTransactionManagement": "Databasanslutning och transaktionshantering",
+ "CorrelationIdTracking": "SpÄrning av korrelation-Id",
+ "BundlingMinificationExplanation": "ABP erbjuder ett enkelt, dynamiskt, kraftfullt, modulÀrt och inbyggt system för paketering och minifiering.",
+ "VirtualFileSystemnExplanation": "Det virtuella filsystemet gör det möjligt att hantera filer som inte fysiskt finns i filsystemet (disken). Det anvÀnds frÀmst för att bÀdda in (js, css, image, cshtml...) filer i assemblies och anvÀnda dem som fysiska filer vid körning.",
+ "ThemingExplanation": "Theming-systemet gör det möjligt att utveckla dina applikationer och moduler tematiskt oberoende genom att definiera en uppsÀttning gemensamma basbibliotek och layouter, baserade pÄ det senaste Bootstrap-ramverket.",
+ "DomainDrivenDesignInfrastructureExplanation": "En komplett infrastruktur för att bygga applikationer i flera lager baserat pÄ mönster och principer för domÀndriven design;",
+ "Specification": "Specifikation",
+ "Repository": "Förvar",
+ "DomainService": "DomÀnservice",
+ "ValueObject": "VĂ€rdeobjekt",
+ "ApplicationService": "ApplikationstjÀnst",
+ "DataTransferObject": "Dataöverföringsobjekt",
+ "AggregateRootEntity": "Aggregerad rot, enhet",
+ "AutoRESTAPIsExplanation": "ABP kan automatiskt konfigurera dina applikationstjÀnster som API-controllers enligt konvention.",
+ "DynamicClientProxiesExplanation": "AnvÀnd enkelt dina API:er frÄn JavaScript- och C#-klienter.",
+ "DistributedEventBusWithRabbitMQIntegrationExplanation": "Publicera och konsumera enkelt distribuerade hÀndelser med hjÀlp av den inbyggda Distributed Event Bus med RabbitMQ-integration.",
+ "TestInfrastructureExplanation": "Ramverket har utvecklats med enhets- och integrationstestning i Ätanke. Ger dig basklasser för att göra det enklare. Startmallar kommer förkonfigurerade för testning.",
+ "AuditLoggingEntityHistoriesExplanation": "Inbyggd revisionsloggning för affÀrskritiska applikationer. Granskningsloggning pÄ förfrÄgnings-, tjÀnste- och metodnivÄ samt entitetshistorik med detaljer pÄ egenskapsnivÄ.",
+ "EmailSMSAbstractionsWithTemplatingSupportExplanation": "IEmailSender- och ISmsSender-abstraktionerna frikopplar din applikationslogik frÄn infrastrukturen. Avancerat e-postmallsystem gör det möjligt att skapa och lokalisera e-postmallar och enkelt anvÀnda dem nÀr det behövs.",
+ "LocalizationExplanation": "Lokaliseringssystemet gör det möjligt att skapa resurser i vanliga JSON-filer och anvÀnda dem för att lokalisera ditt anvÀndargrÀnssnitt. Det stöder avancerade scenarier som arv, tillÀgg och JavaScript-integration samtidigt som det Àr helt kompatibelt med AspNet Core's lokaliseringssystem.",
+ "SettingManagementExplanation": "Definiera instÀllningar för din applikation och hÀmta vÀrdena i körtid baserat pÄ aktuell konfiguration, klient och anvÀndare.",
+ "ExtensionMethodsHelpersExplanation": "Upprepa inte dig sjÀlv ens för triviala koddelar. Extensions & helpers för standardtyper gör din kod mycket renare och lÀttare att skriva.",
+ "AspectOrientedProgrammingExplanation": "Ger en bekvÀm infrastruktur för att skapa dynamiska proxies och implementera aspektorienterad programmering. FÄnga upp valfri klass och kör din kod före och efter varje metodkörning.",
+ "DependencyInjectionByConventionsExplanation": "Du behöver inte registrera dina klasser för dependency injection manuellt. Registrerar automatiskt vanliga tjÀnstetyper enligt konvention. För andra typer av tjÀnster kan du anvÀnda grÀnssnitt och attribut för att göra det enklare och pÄ plats.",
+ "DataFilteringExplanation": "Definiera och anvÀnd datafilter som tillÀmpas automatiskt nÀr du söker efter enheter i databasen. Soft Delete & MultiTenant-filter tillhandahÄlls direkt nÀr du implementerar enkla grÀnssnitt.",
+ "PublishEvents": "Publicera evenemang",
+ "HandleEvents": "Hantera hÀndelser",
+ "Code": "Kod",
+ "Result": "Resultat",
+ "SeeTheDocumentForMoreInformation": "Kolla in {0} dokumentet för mer information",
+ "UiFramework": "Ramverk för anvÀndargrÀnssnitt",
+ "EmailAddress": "E-postadress",
+ "Mobile": "Mobil",
+ "ReactNative": "React Native",
+ "Strong": "Stark",
+ "Complete": "Komplett",
+ "BasedLayeringModel": "Baserad skiktningsmodell",
+ "Microservice": "Mikroservice",
+ "Compatible": "Kompatibel",
+ "MeeTTheABPCommunityInfo": "VÄrt uppdrag Àr att skapa en miljö dÀr utvecklare kan hjÀlpa varandra med inlÀgg, handledning, fallstudier etc. och trÀffa likasinnade.",
+ "JoinTheABPCommunityInfo": "Engagera dig i en livlig gemenskap och bli en bidragsgivare till ABP-ramverket!",
+ "AllPosts": "Alla inlÀgg",
+ "SubmitYourPost": "Skicka in ditt inlÀgg",
+ "DynamicClientProxyDocument": "Kolla in dokumentationen för dynamisk klientproxy för JavaScript & C#.",
+ "EmailSMSAbstractionsDocument": "Mer information finns i dokumenten E-post och SMS-sÀndning.",
+ "CreateProjectWizard": "Den hÀr guiden skapar ett nytt projekt frÄn startmallen som Àr korrekt konfigurerad för att starta upp ditt projekt.",
+ "TieredOption": "Skapar en skiktad lösning dÀr webb- och Http API-skikten Àr fysiskt Ätskilda. Om det inte Àr markerat skapas en skiktad lösning som Àr mindre komplex och lÀmplig för de flesta scenarier.",
+ "SeparateIdentityServerOption": "Separerar serversidan i tvÄ applikationer: Den första Àr för identitetsservern och den andra Àr för ditt HTTP-API pÄ serversidan.",
+ "SeparateAuthenticationServerOption": "Separerar serversidan i tvÄ applikationer: Den första Àr för autentiseringsservern och den andra Àr för ditt HTTP-API pÄ serversidan.",
+ "ProgressiveWebApplicationOption": "Anger projektet som Progressive Web Application",
+ "UseslatestPreVersion": "AnvÀnder den senaste pre-release-versionen",
+ "ReadTheDocumentation": "LĂ€s dokumentationen",
+ "Documentation": "Dokumentation",
+ "GettingStartedTutorial": "Handledning för att komma igÄng",
+ "ApplicationDevelopmentTutorial": "Handledning för applikationsutveckling",
+ "TheStartupTemplate": "Startmall för nystartade företag",
+ "InstallABPCLIInfo": "ABP CLI Àr det snabbaste sÀttet att starta en ny lösning med ABP-ramverket. Installera ABP CLI med hjÀlp av ett kommandoradsfönster:",
+ "DifferentLevelOfNamespaces": "Du kan anvÀnda olika nivÄer av namnrymder; t.ex. BookStore, Acme.BookStore eller Acme.Retail.BookStore.",
+ "ABPCLIExamplesInfo": "Kommandot new skapar en lagrad MVC-applikation med Entity Framework Core som databasleverantör. Det har dock ytterligare alternativ.",
+ "SeeCliDocumentForMoreInformation": "Kolla in ABP CLI-dokumentet för fler alternativ eller vÀlj fliken \"Direkt nedladdning\" ovan.",
+ "Optional": "Valfritt",
+ "LocalFrameworkRef": "BehÄll den lokala projektreferensen för ramverkspaketen.",
+ "BlobStoring": "BLOB Storing",
+ "BlobStoringExplanation": "BLOB-lagringssystemet ger en abstraktion för att arbeta med BLOB. ABP tillhandahÄller nÄgra förbyggda lagringsleverantörsintegrationer (Azure, AWS, File System, Database, etc.) som du enkelt kan anvÀnda i dina applikationer.",
+ "TextTemplating": "Templating av text",
+ "TextTemplatingExplanation": "Textmallar anvÀnds för att dynamiskt Äterge innehÄll baserat pÄ en mall och en modell (ett dataobjekt). Du kan t.ex. anvÀnda det för att skapa dynamiskt e-postinnehÄll med en förbyggd mall.",
+ "MultipleUIOptions": "Flera alternativ för anvÀndargrÀnssnitt",
+ "MultipleDBOptions": "Flera databasleverantörer",
+ "MultipleDBOptionsExplanation": "Ramverket kan anvÀndas med alla datakÀllor, men följande leverantörer Àr officiellt utvecklade och stöds:",
+ "SelectLanguage": "VÀlj sprÄk",
+ "LatestPostOnCommunity": "Senaste inlÀgget pÄ ABP Community",
+ "Register": "Registrera",
+ "IsDownloadable": "Ăr nedladdningsbar",
+ "DatabaseOptions": "Alternativ för databas",
+ "BackToPackagesPage": "Tillbaka till sidan Paket",
+ "HowToInstall": "SÄ hÀr installerar du",
+ "SeeOnNpm": "Se pÄ NPM",
+ "SeeOnNuget": "Detta Àr Nuget",
+ "MVCGulpCommandExplanation": "Om du anvÀnder MVC (Razor Pages) UI, kör kommandot \"gulp\" efter installationen av paketet.",
+ "UsingABPCLI": "AnvÀnda Abp CLI",
+ "WithoutABPCLI": "Utan ABP CLI",
+ "ABPCLIModuleDependency": "Abp Cli lÀgger automatiskt till modulberoende.",
+ "AddModuleDependency": "LĂ€gg sedan till modulberoende",
+ "Packages": "Paket",
+ "NugetPackages": "Nuget-paket",
+ "NPMPackages": "NPM-paket",
+ "SeeDocs": "Se dokument",
+ "None": "Ingen",
+ "Application": "TillÀmpning",
+ "ApplicationExplanation": "Skapar en heltÀckande lösning baserad pÄ metoder för domÀndriven design. Rekommenderas för lÄngsiktiga projekt som behöver en underhÄllbar och utbyggbar kodbas.",
+ "ApplicationNoLayer": "Applikation (enstaka lager)",
+ "ApplicationNoLayerExplanation": "Skapar en webbapplikation i ett lager. Rekommenderas för att bygga en applikation med en enklare och mer lÀttförstÄelig arkitektur.",
+ "Module": "Modul",
+ "ModuleExplanation": "Skapar en ÄteranvÀndbar, helt skiktad applikationsmodullösning. Du kan anvÀnda det hÀr alternativet för att skapa moduler för din modulÀra applikation.",
+ "PackageName": "Paketets namn",
+ "LicenseURL": "URL för licens",
+ "License": "Licens",
+ "ProjectCreationSuccessMessage": "Ditt projekt har skapats framgÄngsrikt",
+ "HowToRunSolution": "Hur kör jag din lösning?",
+ "GettingStartedMessage": "I dokumentet Kom igÄng kan du lÀsa om hur du konfigurerar och kör din lösning.",
+ "WebAppDevTutorial": "Handledning för utveckling av webbapplikationer",
+ "WebAppDevTutorialMessage": "I handledningsdokumentet för utveckling av webbapplikationer finns ett exempel pÄ utveckling steg för steg.",
+ "CommunityPosts": "InlÀgg frÄn gemenskapen",
+ "CommunityPostMessage": "Kolla in ABP Community Platform för att lÀsa anvÀndbara inlÀgg för ABP Framework.",
+ "InvestigateSolutionDetails": "Kolla in lösningsdetaljerna",
+ "StartupTemplateDocumentationMessage": "Ta en titt pÄ malldokumentet för applikationsstart för att lÀra dig arkitekturen och strukturen för din lösning.",
+ "ClientSideDevelopment": "Utveckling pÄ klientsidan",
+ "ClientSideDevelopmentDocumentationMessage": "Kolla in {0}-dokumentet för att lÀra dig de viktigaste punkterna för utvecklingen av anvÀndargrÀnssnittet (klientsidan).",
+ "DatabaseProviderDocumentationMessage": "Kolla in dokumentet {0} för att lÀra dig de viktigaste punkterna för utvecklingen av databaslagret.",
+ "ImplementingDDD": "Implementering av domÀndriven design",
+ "DDDBookExplanation": "En praktisk guide för implementering av domÀndriven design med ABP-ramverket.",
+ "Overview": "Ăversikt",
+ "TableOfContents": "InnehÄllsförteckning",
+ "IntroductionToImplementingDDD": "Introduktion till implementering av domÀndriven design",
+ "WhatIsDDD": "Vad Àr domÀndriven design?",
+ "Implementation": "Implementering",
+ "TheBigPicture": "Den stora bilden",
+ "TheBuildingBlock": "Byggstenen",
+ "ExampleUseCase": "Exempel AnvÀndningsfall",
+ "DomainAndApplicationLogic": "DomÀnlogik och applikationslogik",
+ "Author": "Författaren",
+ "Pages": "Sidor",
+ "PublishedOn": "Publicerad pÄ",
+ "FreeEBook": "Gratis e-bok",
+ "Download": "Nedladdningar",
+ "EBookSignInForDownload": "För att ladda ner e-boken logga in",
+ "SignIn": "Logga in",
+ "Or": "Eller",
+ "TellUsAboutYourself": "BerÀtta lite om dig sjÀlv",
+ "Name": "Namn",
+ "Surname": "Efternamn",
+ "CompanyName": "Företagets namn",
+ "Free": "Gratis",
+ "DDDEBook": "DDD e-bok",
+ "PracticalGuideForImplementingDDD": "Den hÀr boken Àr en praktisk guide för att implementera domÀndriven design med ABP-ramverket.",
+ "IntroducingDDD": "Introduktion till domÀndriven design",
+ "DDDLayersAndCleanArchitecture": "DDD-skikt och ren arkitektur",
+ "LayeringOfADotnetSolution": "Skiktning av en .NET-lösning",
+ "ImplementingDDDBuildingBlocks": "Implementering av DDD-byggstenar",
+ "DomainVsApplicationLogic": "DomÀnlogik vs applikationslogik",
+ "SamplesAndDiscussions": "Provtagningar och diskussioner",
+ "EmailNotValid": "VĂ€nligen ange en giltig e-postadress.",
+ "WeWillSendYouADownloadLink": "En lÀnk för att ladda ner e-boken har skickats till {0}. Kontrollera din inkorg, skrÀppost eller spambox!",
+ "GoHome": "GĂ„ hem",
+ "InvalidFormInputs": "VÀnligen skriv in den giltiga information som anges pÄ formulÀret.",
+ "DDDBookEmailBody": "Tack sÄ mycket.
För att ladda ner din bok, klicka hÀr.",
+ "SubscribeToNewsletter": "Prenumerera pÄ nyhetsbrevet för att fÄ information om vad som hÀnder i ABP Platform, t.ex. nya releaser, inlÀgg, erbjudanden och mycket mer.",
+ "FirstEdition": "Första upplagan",
+ "ThankYou": "Tack sÄ mycket!",
+ "CheckboxMandatory": "Du mÄste kontrollera detta för att fortsÀtta!",
+ "UserInterface": "AnvÀndargrÀnssnitt",
+ "APIGateway": "API-gateway",
+ "Database": "Databas",
+ "Saas": "Saas",
+ "OpenSourceWebApp": "Ăppna kĂ€llan
webbapplikation",
+ "Framework": "Ramverk",
+ "AuditLoggingExplanation": "SpÄra automatiskt alla operationer och dataförÀndringar i ditt system.",
+ "AbpNewCommandExplanation": "Skapar nya lösningar med hjÀlp av ABP:s startmallar.",
+ "AbpAddModuleCommandExplanation": "Installerar förbyggda applikationsmoduler till din lösning",
+ "AbpUpdateCommandExplanation": "Uppdaterar automatiskt alla ABP-relaterade NuGet- och NPM-paket i din lösning.",
+ "ExploreAllCLICommands": "Utforska alla CLI-kommandon",
+ "ExploreDocumentationAndGuides": "Utforska den omfattande dokumentationen och guiderna.",
+ "Documentations": "Dokumentation",
+ "Views": "Utsikt",
+ "EnterYouEmailToGetNews": "Ange din e-postadress för att fÄ de senaste nyheterna om ABP-ramverket",
+ "Tiered": "Tiered",
+ "SeparateIdentityServer": "Separat identitetsserver",
+ "SeparateAuthenticationServer": "Separat autentiseringsserver",
+ "ProgressiveWebApplication": "Progressiv webbapplikation",
+ "Preview": "Förhandsgranskning",
+ "CreateANewSolution": "Skapa en ny .NET-lösning",
+ "FrameworkFeatures": "Funktioner för ramverk",
+ "Commercial": "Kommersiell",
+ "ThirdPartyTools": "Verktyg frÄn tredje part",
+ "Back": "Tillbaka",
+ "Community": "Gemenskap",
+ "SeeMore": "Se mer",
+ "DetailsOfTheEBook": "Detaljer om e-boken",
+ "JoinOurMarketingNewsletter": "AnmÀl dig till vÄrt marknadsföringsnyhetsbrev",
+ "FrameworkNewsletterConfirmationMessage": "Jag godkÀnner Villkor och bestÀmmelser och Privatlivspolicy.",
+ "GetYourFreeEBook": "HĂ€mta din gratis DDD e-bok ",
+ "EverythingYouNeedToKnow": "Allt du behöver veta.",
+ "PreOrderNow": "FörbestÀll nu",
+ "UITheming": "Tematisering av anvÀndargrÀnssnitt",
+ "UIThemingExplanation": "Skapa ÄteranvÀndbara UI-teman och layouter eller anvÀnd ett av de förbyggda UI-temana.",
+ "DataFilteringExplanation2": "Filtrera automatiskt vid förfrÄgningar frÄn databasen för att enkelt kunna implementera mönster som mjuk borttagning och multi-tenancy.",
+ "NeedHelp": "Behöver du hjÀlp?",
+ "GiveYourProjectAName": "Ge ditt projekt ett namn",
+ "SelectProjectType": "VĂ€lj projekttyp",
+ "SelectUIFramework": "VĂ€lj UI Framework",
+ "SelectDatabaseProvider": "VÀlj databasleverantör",
+ "SelectDatabaseManagementSystem": "VÀlj system för databashantering",
+ "InstallingTheABPCLI": "Installera ABP CLI",
+ "CreateYourProjectNow": "Skapa ditt projekt nu",
+ "OrderOn": "Order pÄ {0}",
+ "DownloadFreeDDDBook": "Ladda ner gratis DDD-bok",
+ "WhatIsABPFramework": "Vad Àr ABP-ramverket?",
+ "TenantDatabase": "HyresgÀst {0} Databas",
+ "SharedDatabase": "Delad databas",
+ "ConnectionResolver": "Ă
terlösare för anslutning",
+ "TenantBasedDataFilter": "Filter för hyresgÀstbaserad data",
+ "ApplicationCode": "TillÀmpningskod",
+ "TenantResolution": "Lösning för hyresgÀster",
+ "TenantUser": "HyresgÀst {0} AnvÀndare",
+ "CardTitle": "Kortets titel",
+ "View": "Utsikt",
+ "Model": "Modell",
+ "Email": "E-post",
+ "Password": "Lösenord",
+ "Address": "Adress",
+ "Gender": "Kön",
+ "Male": "Man",
+ "Female": "Kvinna",
+ "Submit": "Skicka in",
+ "Unspecified": "Ospecificerad",
+ "StaticFileMiddleware": "Middleware för statiska filer",
+ "RazorViewEngine": "Razor View Motor",
+ "PhysicalFiles": "Fysiska filer (wwwroot)",
+ "EmbeddedFiles": "InbÀddade filer (DLL)",
+ "DynamicFiles": "Dynamiska filer (minne)",
+ "BuildSolutionsWithAbp": "Skapa underhÄllbara .NET-lösningar genom att följa bÀsta praxis för programvaruutveckling med hjÀlp av ABP.",
+ "BuyOnAmazon": "Köp pÄ Amazon",
+ "BuyOnPackt": "Köp pÄ Packt",
+ "BuyOnDangDang": "Köp pÄ DangDang",
+ "BuyOnJD": "Köp pÄ JD",
+ "Discounted": "Rabatterad",
+ "MasteringAbpFramework_Book_KeyFeatures": "Viktiga funktioner",
+ "MasteringAbpFramework_Book_Key_Features_Description_1": "Bygga robusta, underhÄllbara, modulÀra och skalbara programvarulösningar med hjÀlp av ABP Framework.",
+ "MasteringAbpFramework_Book_Key_Features_Description_2": "LÀr dig hur du implementerar SOLID-principer och domÀndriven design i dina webbapplikationer.",
+ "MasteringAbpFramework_Book_Key_Features_Description_3": "UpptÀck hur ABP Framework pÄskyndar din utvecklingscykel genom att automatisera repetitiva uppgifter.",
+ "MasteringAbpFramework_Book_Description": "Bokbeskrivning",
+ "MasteringAbpFramework_Book_Description_Details_1": "ABP Framework Àr en komplett infrastruktur för att skapa moderna webbapplikationer genom att följa\n bÀsta praxis och konventioner för mjukvaruutveckling. Med ABP:s ramverk och ekosystem pÄ hög nivÄ kan du\n implementera DRY-principen (Don't Repeat Yourself) och fokusera pÄ din affÀrskod.",
+ "MasteringAbpFramework_Book_Description_Details_2": "Den hÀr boken Àr skriven av skaparen av ABP Framework och hjÀlper dig att fÄ en fullstÀndig förstÄelse för ramverket\n ramverket och moderna tekniker för utveckling av webbapplikationer. Med steg-för-steg-förklaringar av viktiga\n begrepp och praktiska exempel kommer du att förstÄ kraven pÄ en modern webblösning och hur ABP\n Framework gör det enkelt att utveckla dina egna lösningar. Du kommer att upptÀcka de vanliga kraven pÄ\n utveckling av webbapplikationer för företag och utforska den infrastruktur som tillhandahÄlls av ABP. Genom hela\n boken kommer du att lÀra dig bÀsta praxis för mjukvaruutveckling för att bygga underhÄllbara och modulÀra\n webblösningar.",
+ "MasteringAbpFramework_Book_Description_Details_3": "I slutet av den hÀr boken kommer du att kunna skapa en komplett webblösning som Àr lÀtt att utveckla, underhÄlla och testa,\n underhÄlla och testa.",
+ "MasteringAbpFramework_Book_WhatYouWillLearn": "Vad du kommer att lÀra dig",
+ "MasteringAbpFramework_Book_What_You_Will_Learn_1": "Konfigurera utvecklingsmiljön och kom igÄng med ABP Framework.",
+ "MasteringAbpFramework_Book_What_You_Will_Learn_2": "Arbeta med Entity Framework Core och MongoDB för att utveckla ditt dataÄtkomstlager.",
+ "MasteringAbpFramework_Book_What_You_Will_Learn_3": "FörstÄ övergripande problem och hur ABP automatiserar repetitiva uppgifter.",
+ "MasteringAbpFramework_Book_What_You_Will_Learn_4": "FÄ koll pÄ hur du implementerar domÀndriven design med ABP Framework.",
+ "MasteringAbpFramework_Book_What_You_Will_Learn_5": "Bygg UI-sidor och komponenter med ASP.NET Core MVC (Razor Pages) och Blazor.",
+ "MasteringAbpFramework_Book_What_You_Will_Learn_6": "Arbeta med multi-tenancy för att skapa modulÀra webbapplikationer.",
+ "MasteringAbpFramework_Book_What_You_Will_Learn_7": "FörstÄ modularitet och skapa ÄteranvÀndbara applikationsmoduler.",
+ "MasteringAbpFramework_Book_What_You_Will_Learn_8": "Skriva enhets-, integrations- och UI-tester med hjÀlp av ABP Framework.",
+ "MasteringAbpFramework_Book_WhoIsThisBookFor": "Vem Àr den hÀr boken för?",
+ "MasteringAbpFramework_Book_WhoIsThisBookFor_Description": "Den hÀr boken vÀnder sig till webbutvecklare som vill lÀra sig programvaruarkitekturer och bÀsta praxis för att bygga\n underhÄllbara webbaserade lösningar med hjÀlp av Microsoft-teknik och ABP Framework. GrundlÀggande kunskaper i C#\n och ASP.NET Core Àr nödvÀndiga för att komma igÄng med den hÀr boken.",
+ "ComputersAndTechnology": "Datorer & teknik",
+ "BuildingMicroserviceSolutions": "Bygga Microservice-lösningar",
+ "MicroserviceBookPracticalGuide": "Den hÀr boken Àr en referensguide för utveckling och hantering av mikrotjÀnstbaserade applikationer med hjÀlp av ABP Framework. Den refererar till .NET Microservice Sample Reference Application: eShopOnContainers och diskuterar den arkitektoniska utformningen och implementeringsmetoderna med hjÀlp av ABP-ramverket. I slutet av den hÀr boken kommer du att lÀra dig hur ABP hanterar de vanligaste komplexiteterna för mikrotjÀnster, t.ex. auktorisering, distribuerade transaktioner, kommunikation mellan mikrotjÀnster, driftsÀttning osv.",
+ "IntroducingTheSolution": "Vi presenterar lösningen eShopOnAbp",
+ "RunningTheSolution": "Kör lösningen",
+ "UnderstandingTheAuthenticationSystem": "FörstÄelse för autentiseringssystemet",
+ "ExploringTheApplications": "Utforska applikationerna",
+ "UnderstandingTheAPIGateways": "FörstÄelse för API-gateways",
+ "DevelopingTheMicroservices": "Utveckling av mikrotjÀnster",
+ "UnderstandingTheInfrastructure": "FörstÄelse för infrastrukturen",
+ "DiggingInTheUseCases": "GrÀva i anvÀndningsfallen",
+ "DeployingTheSolution": "Implementering av lösningen",
+ "ThisBookIsInDraftStageAndIsNotCompletedYet": "Denna bok Àr i utkaststadiet och Àr inte fÀrdigstÀlld Ànnu.",
+ "Authors": "Författarna",
+ "MicroserviceEBook": "Mikroservice e-bok",
+ "SelectUITheme": "VĂ€lj UI-tema",
+ "LeptonXLiteTheme": "LeptonX Lite tema",
+ "BasicTheme": "GrundlÀggande tema",
+ "LeptonXLiteThemeInfo": " Ett modernt och snyggt Bootstrap UI-tema. Perfekt om du vill ha ett produktionsfÀrdigt UI-tema. Detta Àr det nyaste temat och Àr standard.",
+ "BasicThemeInfo": "Minimalistiskt UI-tema med vanliga Bootstrap-fÀrger och -stilar. Perfekt om du ska bygga ditt eget UI-tema.",
+ "SeeDocumentation": "Se dokumentation.",
+ "SeeFullScreen": "đŒïž Se skĂ€rmdump",
+ "BuildingMicroserviceSolutionsShortDescription": "Den hÀr boken Àr en referensguide för utveckling och hantering av mikrotjÀnstbaserade applikationer med hjÀlp av ABP-ramverket.",
+ "InstallAbpCliMessage": "Installera ABP CLI i en kommandoradsterminal om du inte har installerat det tidigare:",
+ "Terminal": "Terminal",
+ "Copy": "Kopia",
+ "RunTheFollowingCommand": "Kör följande kommando i en kommandoradsterminal:",
+ "ChangeSolutionOptionsBelow": "Du kan Àndra lösningsalternativen nedan.",
+ "MultiLayerApplication": "Flera lager
AnvÀndningsomrÄde",
+ "MultiLayerApplicationExplanation1": "Skapar en heltÀckande lösning baserad pÄ metoder för domÀndriven design.",
+ "MultiLayerApplicationExplanation2": "Rekommenderas för lÄngsiktiga projekt som krÀver en underhÄllbar och utbyggbar kodbas.",
+ "SingleLayerApplication": "Enkelskikt
AnvÀndningsomrÄde",
+ "SingleLayerApplicationExplanation1": "Skapar en webbapplikation i ett lager. ",
+ "SingleLayerApplicationExplanation2": "Rekommenderas för att bygga en applikation med en enklare och mer lÀttförstÄelig arkitektur.",
+ "ApplicationModule": "Applikation
Modul",
+ "SeeTheScreenshot": "Se skÀrmdumpen",
+ "ApplicationModuleExplanation1": "Skapar en ÄteranvÀndbar, helt skiktad applikationsmodullösning.",
+ "ApplicationModuleExplanation2": "Du kan anvÀnda detta alternativ för att skapa moduler för din modulÀra applikation.",
+ "Expert_": "Expert",
+ "Partner_": "Partnerskap",
+ "WebSite": "Webbplats",
+ "Expert_Year": "Kompetens Ă
r",
+ "CompanyInfo": "Företagsinformation",
+ "Date": "Datum",
+ "WhoWeAre_Partner": "Vilka vi Àr",
+ "WhoWeAre_Expert": "Om mig",
+ "CreateSolutionFolder": "Skapa lösningsmapp",
+ "CreateSolutionFolderOption": "Anger om projektet ska lÀggas i en ny mapp i utdatamappen eller direkt i utdatamappen.",
+ "BooksPageTitle": "ABP Böcker",
+ "BooksPageDescription": "Utforska ABP-böcker för att fördjupa din förstÄelse och behÀrskning av ABP-ramverket.",
+ "PackageDetailPage_NuGetPackageInstallationOptions": "Det finns tre sÀtt att installera {0} NuGet-paket till ditt projekt",
+ "PackageDetailPage_InstallingWithABPCLI": "1: Installera med ABP CLI",
+ "PackageDetailPage_InstallingWithABPCLIDescription1": "Om du inte har installerat ABP CLI, installera först genom att utföra följande kommando i en kommandoradsterminal",
+ "PackageDetailPage_InstallingWithABPCLIDescription2": "NÀr du har installerat ABP CLI öppnar du en kommandoradsterminal pÄ platsen för projektet (.csproj-filen) som du vill installera det och kör följande kommando",
+ "PackageDetailPage_InstallingWithABPCLIDescription3": "Den lÀgger till {0}-paketreferensen i ditt projekt och {1}-beroendet i din modulklass.",
+ "PackageDetailPage_ManualInstallation": "2: Installera med Dotnet CLI",
+ "PackageDetailPage_ManualInstallationDescription1": "LÀgg till {0} NuGet-paketreferens till ditt projekt med hjÀlp av din IDE eller genom att utföra följande kommando",
+ "PackageDetailPage_ManualInstallationDescription2": "LÀgg sedan till {0}-beroendet i din modulklass enligt följande exempel",
+ "PackageDetailPage_SeeDocumentation": "Se dokumentationen för att lÀra dig hur du anvÀnder det hÀr paketet i dina program.",
+ "PackageDetailPage_InstallingUsingPMC": "3: Installera med Package Manager-konsolen",
+ "PackageDetailPage_InstallingUsingPMCDescription1": "Ăppna Package Manager Console i Visual Studio (Verktyg -> Nuget Package Manager -> Package Manager Console) och kör följande kommando",
+ "UIOptions": "Alternativ för anvÀndargrÀnssnitt",
+ "Testimonials": "VittnesmÄl",
+ "CoolestCompaniesUseABPFramework": "De coolaste företagen anvÀnder ABP-ramverket",
+ "Index_Page_Testimonial_1": "ABP Framework Àr inte bara ett verktyg utan en katalysator som har pÄskyndat min tillvÀxt som utvecklare. Det har gjort det möjligt för mig att bygga nya funktioner snabbare Àn nÄgonsin tidigare, som pÄminner om andra anvÀndares erfarenheter. Det enhetliga kodningsmönstret har effektiviserat mina projekt, vilket ger mig mer tid att fokusera pÄ att skapa snarare Àn att felsöka.\nJag skulle sÀga att ABP-ramverket har varit hörnstenen i min tidiga professionella resa. Det har underlÀttat min övergÄng frÄn en aspirerande utvecklare till en sjÀlvsÀker yrkesman som Àr redo att göra avtryck i programvaruvÀrlden. Jag ser fram emot de spÀnnande projekt som vÀntar mig, med vetskapen om att ABP kommer att finnas dÀr för att vÀgleda mig. Det Àr mer Àn bara en produkt; det Àr en partner i framgÄng.",
+ "Index_Page_Testimonial_2": "ABP Framework Ă€r inte bara ett ramverk, det Ă€r ocksĂ„ en vĂ€gledning för projektutveckling / hantering, eftersom det ger DDD, GenericRepository, DI, Microservice, Modularity utbildningar. Ăven om du inte kommer att anvĂ€nda sjĂ€lva ramverket kan du utveckla dig sjĂ€lv med abp.io/docs som Ă€r vĂ€l och professionellt förberedda. (OpenIddict, Redis, Quartz etc.)\nEftersom mĂ„nga saker Ă€r förbyggda förkortar det projektutvecklingstiden avsevĂ€rt. (SĂ„som inloggningssida, undantagshantering, datafiltrering-sĂ„dd, revisionsloggning, lokalisering, automatisk api-kontroller etc.)\nSom ett exempel frĂ„n vĂ„r app har jag anvĂ€nt Local Event Bus för lagerstyrning. SĂ„ jag kan hantera orderrörelser genom att skriva lagerhanterare.\nDet Ă€r underbart att inte förlora tid för CreationTime, CreatorId. De fylls i automatiskt.",
+ "VideosLoginAndRegisterMessage": "För att kunna titta pÄ videor mÄste du logga in.",
+ "Filter": "Filter",
+ "VideoCourses": "Viktiga videor",
+ "TestimonialText": "Ditt vittnesmÄl",
+ "Position": "Position",
+ "ExperienceYear": "Antal Ärs erfarenhet",
+ "FullName": "FullstÀndigt namn",
+ "CompanySize": "Företagets storlek",
+ "TestimonialTitle": "LÄt oss höra ditt vittnesmÄl",
+ "TestimonialInfo": "Vad vÄra kunder sÀger Àr viktigt! BerÀtta om din erfarenhet av vÄra produkter och tjÀnster. Vi rekommenderar att du skriver din testimonial pÄ engelska för att nÄ ut till en bredare publik.",
+ "Country": "Land",
+ "TestimonialTextPlaceholder": "Skriv en kort berÀttelse om hur ABP hjÀlpte dig att bygga och leverera ditt projekt.",
+ "PositionPlaceholder": "Din position pÄ företaget",
+ "SelectExperienceYearPlaceholder": "Hur mÄnga Är har du arbetat inom mjukvarubranschen",
+ "FullNamePlaceholder": "Ditt fullstÀndiga namn",
+ "CompanyNamePlaceholder": "Ditt företagsnamn",
+ "SelectCompanySizePlaceholder": "Antal anstÀllda",
+ "ImagePlaceholder": "Din bild",
+ "SelectCountryPlaceholder": "Ditt land",
+ "YouAreNotAuthorizedToWriteTestimonial": "För att kunna skriva ett rekommendationsbrev mÄste du vara inloggad.",
+ "UnAuthorizeTestimonialInfo": "Din Äsikt Àr viktig! Logga in för att dela den.",
+ "TheFileIsTooLargeForImage": "Din profilbild kan inte vara mer Àn {0} MB",
+ "ThisExtensionIsNotAllowedForImage": "Denna förlÀngning Àr inte tillÄten.",
+ "FileUploadError": "Fel vid filuppladdning",
+ "TestimonialSend": "Tack sÄ mycket! Vi har tagit emot ditt vittnesmÄl.
Vi kommer att granska och ta nÀsta steg snart.",
+ "Title": "Titel",
+ "TitlePlaceholder": "Programvaruutvecklare, CTO etc.",
+ "characters": "karaktÀrer",
+ "Testimonial_YourProfilePicture": "Din profilbild (endast {0})",
+ "BootstrapCardTitle": "Detta Àr ett exempel pÄ en kortkomponent som byggts av ABP bootstrap card tag helper.",
+ "GoSomewhere": "Ă
k nĂ„gonstans â.",
+ "ABPTestimonialTitle": "Nytt vittnesmÄl",
+ "ABPTestimonialDescription": "Skicka in din testimonial till ABP Community genom att dela med dig av dina erfarenheter och feedback om ramverket.",
+ "NotValidEmailAddress": "E-postfÀltet Àr inte en giltig e-postadress.",
+ "EmailAddressMaxLength": "FÀltet Email mÄste vara en strÀng med en maximal lÀngd pÄ 255.",
+ "EmailAddressRequired": "FÀltet E-post Àr obligatoriskt.",
+ "PasswordLength": "FÀltet Password mÄste vara en strÀng med en maximal lÀngd pÄ 32.",
+ "PasswordRequired": "FÀltet Password (Lösenord) Àr obligatoriskt.",
+ "AddressLength": "FÀltet Address mÄste vara en strÀng med en maximal lÀngd pÄ 255.",
+ "GenderRequired": "FÀltet Gender (kön) Àr obligatoriskt.",
+ "LeaveUsReview": "LĂ€mna oss en recension",
+ "ABPVideoCoursesDescription": "LÀr dig grundlÀggande begrepp och anvÀndning av ABP Framework i denna videokursserie. Perfekt för nybörjare!",
+ "ABPVideoCoursesPageDescription": "LÀr dig grunderna i ABP-ramverket genom videokurser som skapats av ABP-teamet. I den hÀr videoserien fÄr du lÀra dig de viktigaste Àmnena i ABP-ramverket. Siffrorna i varje video Àr skrivna enligt inlÀrningsflödet.",
+ "DocumentationButtonTitle": "Dokumentation",
+ "ABPVideoCoursesTitle": "Viktiga videor",
+ "LovedDevelopers": "Ălskad av tusentals utvecklare
runt om i vÀrlden",
+ "ABPIOPlatformPackages": "ABP-paket",
+ "AbpPackagesDescription": "Utöka din applikation med olika paket som finns i ABP och lÀgg till funktioner och egenskaper.",
+ "Cancel": "Avbryt",
+ "Continue": "FortsÀtt",
+ "WhatIsTheABPIOPlatform": "Vad Àr ABP-plattformen?",
+ "AbpIoPlatformExplanation1": "ABP Platform Àr en omfattande infrastruktur för applikationsutveckling baserad pÄ .NET- och ASP.NET Core-plattformarna. Den fyller gapet mellan den enkla ASP.NET Core-plattformen och de komplexa krav som stÀlls vid utveckling av programvara för moderna företag.",
+ "AbpIoPlatformExplanation2": "I kÀrnan tillhandahÄller det ett open source och gratis ramverk som bestÄr av hundratals NuGet- och NPM-paket, som alla erbjuder olika funktioner. KÀrnramverket Àr modulÀrt, tematiserbart och kompatibelt med mikrotjÀnster, vilket ger en komplett arkitektur och en robust infrastruktur. Detta gör att du kan fokusera pÄ din affÀrskod snarare Àn att upprepa dig sjÀlv för varje nytt projekt. Det Àr baserat pÄ bÀsta praxis för programvaruutveckling och integrerar populÀra verktyg som du redan kÀnner till. Ramverket Àr helt gratis, open source och community-drivet.",
+ "AbpIoPlatformExplanation3": "ABP Platform erbjuder gratis och betalda licensalternativ. Beroende pÄ din licenstyp fÄr du tillgÄng till flera produktionsfÀrdiga startmallar, mÄnga förbyggda applikationsmoduler, UI-teman, CLI och GUI-verktyg, support och mycket mer.",
+ "WhatAreTheDifferencesBetweenFreeAndPaid": "Vilka Àr skillnaderna mellan de fria och kommersiella licenserna?",
+ "WhatAreTheDifferencesBetweenFreeAndPaidExplanation1": "ABP-licensen för fri (öppen kÀllkod) omfattar kÀrnramverket, grundlÀggande startmallar, grundlÀggande moduler, grundlÀggande teman och community-utgÄvan av ABP Studio.",
+ "WhatAreTheDifferencesBetweenFreeAndPaidExplanation2": "Kommersiella licenser erbjuder ytterligare funktioner, inklusive fler startmallar (t.ex. startmallen för mikrotjÀnster), professionella applikationsmoduler, ett fullfjÀdrat UI-tema, professionella utgÄvor av ABP Studio, ABP Suite för kodgenerering, fler alternativ för mobila startapplikationer, premiumsupport och nÄgra andra fördelar.",
+ "WhatAreTheDifferencesBetweenFreeAndPaidExplanation3": "För mer information om skillnaderna mellan licenstyperna, se prissÀttningssidan.",
+ "HowDoIUseTheABPIOPlatform": "Hur anvÀnder jag ABP-plattformen?",
+ "HowDoIUseTheABPIOPlatformExplanation": "ABP Framework utökar .NET-plattformen, vilket innebÀr att allt du kan göra med en vanlig .NET-lösning redan Àr möjligt med ABP Framework. Det gör det enkelt att komma igÄng med en lÄg inlÀrningskurva. Se sidan Hur det fungerar för att lÀra dig hur du anvÀnder ABP Platform i praktiken.",
+ "SupportPolicyFaqExplanation1": "Vi tillhandahĂ„ller tvĂ„ typer av support: Community-support för anvĂ€ndare med en icke-kommersiell licens och premium-support för kommersiella licensinnehavare. Community-support Ă€r tillgĂ€ngligt pĂ„ plattformar som GitHub och Stackoverflow, dĂ€r supporten Ă€r begrĂ€nsad. Ă
andra sidan tillhandahÄlls premiumsupport pÄ den officiella ABP Support-webbplatsen. HÀr besvaras dina frÄgor direkt av ABP:s kÀrnutvecklare, vilket garanterar support av högre kvalitet.",
+ "SupportPolicyFaqExplanation2": "Information om Premium-support: Vi ger endast support för den aktiva och den föregÄende huvudversionen. Vi garanterar inte patchreleaser för den tredje och Àldre huvudversionen. Till exempel, om den aktiva versionen Àr 7.0.0, kommer vi att slÀppa patchversioner för bÄde 6.x.x och 7.x.x. Dessutom ger vi support endast för ABP Platform-relaterade problem. Detta innebÀr att inget stöd ges för tredjepartsapplikationer, molntjÀnster och andra perifera bibliotek som anvÀnds av ABP-produkter.",
+ "SupportPolicyFaqExplanation3": "Vi Ätar oss att anvÀnda kommersiellt rimliga anstrÀngningar för att ge vÄra kunder teknisk support under de officiella öppettiderna för \"Volosoft Bilisim A.S\". Vi förbinder oss dock inte till en SLA-svarstid (Service-Level Agreement), men vi kommer att försöka svara pÄ de tekniska frÄgorna sÄ snabbt som möjligt inom vÄra officiella arbetstider. Om inte ett sÀrskilt avtal görs med kunden tillhandahÄlls support uteslutande pÄ {1}. Dessutom Àr privat e-postsupport endast tillgÀnglig för innehavare av Enterprise-licens.",
+ "HowManyProducts": "Hur mÄnga olika produkter/lösningar kan jag bygga?",
+ "HowManyDevelopers": "Hur mÄnga utvecklare kan arbeta med lösningar som anvÀnder ABP Platform?",
+ "HowManyDevelopersExplanation": "ABP.IO-licenser utfÀrdas per utvecklare. Olika licenstyper har varierande grÀnser för utvecklare. Du kan dock lÀgga till fler utvecklare till vilken licenstyp som helst nÀr du behöver. För information om licenstyper, utvecklargrÀnser och kostnader för ytterligare utvecklare, se prissÀttningssidan.",
+ "ChangingLicenseTypeExplanation": "Du kan uppgradera till en högre licens genom att betala mellanskillnaden under din aktiva licensperiod. NÀr du uppgraderar till en högre licensplan fÄr du fördelarna med den nya planen, men licensuppgraderingen Àndrar inte licensens utgÄngsdatum. Dessutom kan du lÀgga till nya utvecklarplatser till din befintliga licens. För detaljer om hur mÄnga utvecklare som kan arbeta med lösningar som anvÀnder ABP Platform, se 'Hur mÄnga utvecklare kan arbeta med lösningar som anvÀnder ABP Platform?' frÄgan.",
+ "DowngradeLicensePlanExplanation": "Du kan inte nedgradera din befintliga licensplan. För ytterligare information, kontakta oss pÄ info@abp.io.",
+ "LicenseTransferExplanation": "Ja, det gör jag! NĂ€r du köper en licens blir du licensinnehavare, vilket ger dig tillgĂ„ng till sidan för organisationshantering. En organisation innehĂ„ller roller för Ă€gare och utvecklare. Ăgare kan hantera utvecklarplatser och tilldela utvecklare. Varje tilldelad utvecklare loggar in i systemet med kommandot ABP CLI och har behörigheter för utveckling och support.",
+ "LicenseExtendUpgradeDiff": "Vad Àr skillnaden mellan licensförnyelse och uppgradering?",
+ "LicenseExtendUpgradeDiffExplanation1": "Förnyelse: Genom att förnya din licens kommer du att fortsÀtta att fÄ premiumsupport och uppdateringar, bÄde större och mindre, för moduler, verktyg och teman. Dessutom kommer du att kunna skapa nya projekt och anvÀnda ABP Suite och ABP Studio, vilket kan pÄskynda din utvecklingsprocess avsevÀrt. NÀr du förnyar din licens lÀggs ett Är till licensens utgÄngsdatum.",
+ "LicenseExtendUpgradeDiffExplanation2": "Uppgradering: Genom att uppgradera din licens kommer du att befordras till en högre licensplan, vilket gör att du kan fĂ„ ytterligare fördelar. Kolla in prissĂ€ttningssidan för att se skillnaderna mellan licensplanerna. Ă
andra sidan Àndras inte licensens utgÄngsdatum nÀr du uppgraderar! Om du vill förlÀnga licensens slutdatum mÄste du förnya din licens.",
+ "WhatHappensWhenLicenseEndsExplanation1": "ABP-licenser Àr eviga licenser. NÀr din licens löper ut kan du fortsÀtta att utveckla ditt projekt utan att behöva förnya den. Din licens levereras med en ettÄrig uppdaterings- och premiumsupportplan. För att fÄ nya funktioner, prestandaförbÀttringar, buggfixar och fortsatt support, samt för att anvÀnda ABP Suite och ABP Studio, mÄste du förnya din licens. NÀr din licens löper ut;",
+ "WhatHappensWhenLicenseEndsExplanation2": "Du kan inte skapa nya lösningar med hjÀlp av pro startup-mallarna, men du kan fortsÀtta att utveckla dina befintliga applikationer för alltid.",
+ "WhatHappensWhenLicenseEndsExplanation3": "Du kommer att fÄ uppdateringar för programmoduler och teman i din MINOR-version (exklusive RC- eller Preview-versioner). Om du t.ex. anvÀnder v3.2.0 av en modul kan du fortfarande fÄ uppdateringar för v3.2.x (v3.2.1, v3.2.5... etc.) av den modulen. Du kan dock inte fÄ uppdateringar för nÀsta större eller mindre version (t.ex. v3.3.0, v3.3.3, 4.x.x... etc.). Om t.ex. den senaste versionen var v4.4.3 nÀr din licens löpte ut och senare versioner 4.4.4 och 4.5.0 publicerades, skulle du ha tillgÄng till v4.4.x men inte till v4.5.x.",
+ "WhatHappensWhenLicenseEndsExplanation4": "Du kan inte installera nya programmoduler och teman som lÀggs till i din lösning efter att din licens har upphört att gÀlla.",
+ "WhatHappensWhenLicenseEndsExplanation5": "Du kan inte anvÀnda ABP Suite.",
+ "WhatHappensWhenLicenseEndsExplanation6": "Du kan inte anvÀnda ABP Studios proffsfunktioner (du kan anvÀnda ABP Studios Community Edition-funktioner)",
+ "WhatHappensWhenLicenseEndsExplanation7": "Du kommer inte lÀngre att ha tillgÄng till premiumsupport.",
+ "WhatHappensWhenLicenseEndsExplanation8": "Du kan förnya (förlÀnga) din licens för att fortsÀtta att fÄ dessa förmÄner. Om du förnyar din licens inom {3} dagar efter att den har löpt ut kommer följande rabatter att tillÀmpas: Teamlicens {0}; Företagslicens {1}; Enterprise-licens {2}.",
+ "WhenShouldIRenewMyLicenseExplanation1": "Om du förnyar din licens inom 30 dagar efter att den har löpt ut kommer följande rabatter att tillÀmpas:",
+ "WhenShouldIRenewMyLicenseExplanation2": "{0} för Team Licenser;",
+ "WhenShouldIRenewMyLicenseExplanation3": "{0} för Business- och Enterprise-licenser;",
+ "WhenShouldIRenewMyLicenseExplanation4": "Om du förnyar din licens mer Àn {0} dagar efter utgÄngsdatumet kommer dock förnyelsepriset att vara detsamma som det ursprungliga inköpspriset för licensen, utan att nÄgra rabatter tillÀmpas pÄ din förnyelse.",
+ "DoesTheSubscriptionRenewAutomaticallyExplanationAutoRenewal": "ABP Platform tillÄter dig att automatiskt förnya din licens. Detta Àr en valfri gratis tjÀnst. Du kan vÀxla den hÀr funktionen nÀr du köper en ny licens eller senare aktivera den frÄn din organisationshanteringssida. Om du vill slÄ pÄ eller av den automatiska förnyelsen, besök organisationens hanteringssida, gÄ till avsnittet \"Betalningsmetod\" och antingen markera eller avmarkera kryssrutan \"Automatisk förnyelse\". NÀr du stÀnger av funktionen för automatisk förnyelse kommer det att vara ditt ansvar att förnya din licens manuellt.",
+ "TrialPlanExplanation": "Ja, för att starta din kostnadsfria testperiod, vÀnligen kontakta marketing@volosoft.com. Vi erbjuder ocksÄ en 30-dagars pengarna-tillbaka-garanti för Team-licensen, utan nÄgra frÄgor! Du kan begÀra full Äterbetalning inom de första 30 dagarna efter att du köpt licensen. För Business- och Enterprise-licenser ger vi 60% Äterbetalning om det begÀrs inom 30 dagar efter köpet. Denna policy beror pÄ att den fullstÀndiga kÀllkoden för alla moduler och teman ingÄr i Business- och Enterprise-licenserna.",
+ "BlazoriseLicenseExplanation": "Vi har ett avtal mellan Volosoft och Megabit, enligt vilket Blazorise-licensen buntas med ABP-plattformens kommersiella licenser. DÀrför behöver vÄra betalda anvÀndare inte köpa en ytterligare Blazorise-licens.",
+ "HowToUpgradeExplanation1": "NÀr du skapar en ny applikation med hjÀlp av ABP:s startmallar anvÀnds alla moduler och teman som NuGet- och NPM-paket. Den hÀr instÀllningen gör det enkelt att uppgradera till nyare versioner av paketen.",
+ "HowToUpgradeExplanation2": "Förutom de vanliga NuGet/NPM-uppgraderingarna tillhandahÄller ABP CLI ett update-kommando som automatiskt hittar och uppgraderar alla ABP-relaterade paket i din lösning.",
+ "HowToUpgradeExplanation3": "Utöver automatiska paketuppgraderingar publicerar vi ocksÄ en migreringsguide om den nya versionen krÀver nÄgra manuella steg för att uppgradera eller om den har nÄgra anteckningar som ska beaktas. FortsÀtt följa ABP-bloggen för nyheter om nya utgÄvor.",
+ "DatabaseSupportExplanation": "ABP Àr databasagnostisk och kan arbeta med alla databasleverantörer i sin natur. För en lista över för nÀrvarande implementerade leverantörer, vÀnligen kolla in Data Access-dokumentet.",
+ "MicroserviceSupportExplanation1": "Ja, det stöder mikrotjÀnstarkitekturer.",
+ "MicroserviceSupportExplanation2": "Ett av de viktigaste mÄlen med ABP-plattformen Àr att tillhandahÄlla en bekvÀm infrastruktur för att skapa mikrotjÀnstlösningar. Alla officiella ABP-applikationsmoduler Àr utformade för att stödja mikroservice-distributionsscenarier (med eget API och databas) genom att följa dokumentet Module Development Best Practices.",
+ "MicroserviceSupportExplanation3": "ABP Platforms kommersiella licenser innehÄller ocksÄ en microservice startup template som kan anvÀndas för att direkt skapa en produktionsfÀrdig baslösning för ditt microservice-system.",
+ "MicroserviceSupportExplanation4": "För icke-betalande anvÀndare tillhandahÄller vi ocksÄ en exempel pÄ e-handelslösning som du kan kontrollera för att förstÄ hur du kan bygga din mikrotjÀnstlösning baserat pÄ ABP-ramverket.",
+ "MicroserviceSupportExplanation5": "Ett mikrotjÀnstsystem Àr dock en lösning och varje lösning kommer att ha olika krav, inklusive nÀtverkstopologi, kommunikationsscenarier, autentiseringsmöjligheter, beslut om databashardning/partitionering, körtidskonfigurationer, systemintegrationer frÄn tredje part och mÄnga fler aspekter. ABP-plattformen tillhandahÄller infrastruktur för mikroservicescenarier, mikroservice-kompatibla moduler, exempel och dokumentation för att hjÀlpa till att bygga din egen lösning. FörvÀnta dig dock inte att direkt ladda ner din idealiska, anpassade lösning som Àr förbyggd Ät dig. Du mÄste förstÄ den och sammanföra specifika delar baserat pÄ dina krav.",
+ "WhereCanIDownloadSourceCodeExplanation": "Du kan ladda ner kÀllkoden för alla ABP-moduler, Angular-paket och teman via ABP Suite, ABP Studio eller ABP CLI. Kolla in forumfrÄgan: Hur laddar man ner kÀllkoden?",
+ "CommercialLicenses": "Kommersiella licenser",
+ "WhatIsDifferencePaidLicenses": "Vad Àr skillnaden mellan en personlig licens och andra typer av betalda licenser?",
+ "DifferencePaidLicenseExplanation1": "En icke-personlig betald licens Àr standardlicensalternativet för företag och kommersiella enheter. Licenser köps av företaget och kan anvÀndas av vem som helst inom organisationen.",
+ "DifferencePaidLicenseExplanation2": "Personal License Àr Ä andra sidan en typ av licens för privatpersoner/freelancers/oberoende utvecklare som köper licenser med egna medel och enbart för eget bruk. Den personliga licensen har vissa begrÀnsningar. I den hÀr planen kan det bara finnas 1 utvecklare som arbetar med ABP-projektet och inga ytterligare utvecklare fÄr lÀggas till senare i projektet. Nedladdning av kÀllkoden för PRO-moduler Àr inte tillÄten i den personliga licensplanen. Det finns inte heller nÄgon mikrotjÀnstmall och nivÄ (skiktad) arkitektur i denna plan. Personliga licensinnehavare kan endast anvÀnda följande moduler: Konto, Audit Log UI, GDPR, Identity, Language Management, LeptonX PRO, OpenIddict UI och SaaS. Personliga licensinnehavare kan inte anvÀnda följande moduler: Chatt, CMS-Kit PRO, FormulÀr, Identity Server User Interface, Lepton Theme, Text Template Management, File Management och Twilio SMS. Du kan komma Ät den fullstÀndiga modullistan pÄ abp.io/modules.",
+ "ReadyToStart": "Ăr du redo att börja?",
+ "TransformYourIdeasIntoRealityWithOurProfessionalNETDevelopmentServices": "Förvandla dina idéer till verklighet med vÄra professionella .NET-utvecklingstjÀnster.",
+ "ReadyToUpgrade": "Ăr du redo att uppgradera?",
+ "SendServiceRequest": "Skicka en servicebegÀran",
+ "Permission:CommunityPost": "Gemenskapens inlÀgg",
+ "Permission:Edit": "Redigera",
+ "Waiting": "VÀntar pÄ",
+ "Approved": "GodkÀnd",
+ "Rejected": "Avvisad",
+ "Wait": "VĂ€nta",
+ "Approve": "GodkÀnna",
+ "Reject": "Avvisa",
+ "ReadPost": "LÀs inlÀgget",
+ "Status": "Status",
+ "ContentSource": "KÀlla för innehÄll",
+ "Details": "Detaljer",
+ "CreationTime": "Skapelsetid",
+ "Save": "Spara",
+ "SameUrlAlreadyExist": "Samma webbadress finns redan om du vill lÀgga till det hÀr inlÀgget, bör du Àndra webbadressen!",
+ "UrlIsNotValid": "Url Àr inte giltig.",
+ "UrlNotFound": "Url hittades inte.",
+ "UrlContentNotFound": "Url-innehÄllet hittades inte.",
+ "Summary": "Sammanfattning",
+ "MostRead": "Mest lÀst",
+ "Latest": "Senaste",
+ "ContributeAbpCommunity": "Bidra till ABP:s gemenskap",
+ "ContributionGuide": "Bidragsguide",
+ "BugReport": "Bugg-rapport",
+ "SeeAllPosts": "Se alla inlÀgg",
+ "WelcomeToABP": "VĂ€lkommen till ABP",
+ "FeatureRequest": "BegÀran om funktion",
+ "CreatePostTitleInfo": "Titel pÄ det inlÀgg som ska visas i inlÀggslistan.",
+ "CreatePostSummaryInfo": "En kort sammanfattning av inlÀgget som ska visas i inlÀggslistan. Maximal lÀngd: {0}",
+ "CreatePostCoverInfo": "För att skapa ett effektivt inlÀgg, lÀgg till ett omslagsfoto. Ladda upp bilder med bildförhÄllandet 16:9 för bÀsta visning.
Maximal filstorlek: 1MB.",
+ "ThisExtensionIsNotAllowed": "Denna förlÀngning Àr inte tillÄten.",
+ "TheFileIsTooLarge": "Filen Àr för stor.",
+ "GoToThePost": "GÄ till inlÀgget",
+ "GoToTheVideo": "GĂ„ till videon",
+ "Contribute": "Bidra",
+ "OverallProgress": "Ăvergripande framsteg",
+ "Done": "Klar",
+ "Open": "Ăppna",
+ "Closed": "StÀngt",
+ "RecentQuestionFrom": "Senaste frÄgan frÄn {0}",
+ "Stackoverflow": "Stackoverflow",
+ "Votes": "röster",
+ "Answer": "Svar",
+ "views": "utsikt",
+ "Answered": "Besvarad",
+ "WaitingForYourAnswer": "VÀntar pÄ ditt svar",
+ "Asked": "aska",
+ "AllQuestions": "Alla frÄgor",
+ "NextVersion": "NĂ€sta version",
+ "MilestoneErrorMessage": "Det gick inte att fÄ aktuell milstolpsinformation frÄn Github.",
+ "QuestionItemErrorMessage": "Kunde inte fÄ de senaste frÄgeuppgifterna frÄn Stackoverflow.",
+ "Oops": "Oops!",
+ "CreatePostSuccessMessage": "InlÀgget har skickats in framgÄngsrikt. Det kommer att publiceras efter en granskning frÄn webbplatsens administratör.",
+ "Browse": "BlÀddra",
+ "CoverImage": "Omslagsbild",
+ "ShareYourExperiencesWithTheABPFramework": "Dela dina erfarenheter av ABP-ramverket!",
+ "UpdateUserWebSiteInfo": "Exempel: https://johndoe.com",
+ "UpdateUserTwitterInfo": "Exempel: johndoe",
+ "UpdateUserGithubInfo": "Exempel: johndoe",
+ "UpdateUserLinkedinInfo": "Exempel: https://www.linkedin.com/...",
+ "UpdateUserCompanyInfo": "Exempel: Volosoft",
+ "UpdateUserJobTitleInfo": "Exempel: Programvaruutvecklare",
+ "UserName": "AnvÀndarnamn",
+ "Company": "Företag",
+ "PersonalWebsite": "Personlig webbplats",
+ "RegistrationDate": "Registreringsdatum",
+ "Social": "Sociala",
+ "Biography": "Biografi",
+ "HasNoPublishedPostsYet": "har inga publicerade inlÀgg Ànnu",
+ "LatestGithubAnnouncements": "Senaste Github-tillkÀnnagivanden",
+ "SeeAllAnnouncements": "Se alla tillkÀnnagivanden",
+ "LatestBlogPost": "Senaste blogginlÀgget",
+ "Edit": "Redigera",
+ "ProfileImageChange": "Ăndra profilbilden",
+ "BlogItemErrorMessage": "Kunde inte fÄ den senaste informationen om blogginlÀgg frÄn ABP.",
+ "PlannedReleaseDate": "Planerat utgivningsdatum",
+ "CommunityPostRequestErrorMessage": "Det gick inte att fÄ den senaste postförfrÄgan frÄn Github.",
+ "PostRequestFromGithubIssue": "Det finns inga postförfrÄgningar nu.",
+ "LatestPosts": "Senaste inlÀgg",
+ "ArticleRequests": "BegÀr ett innehÄll",
+ "ArticleRequestsDescription": "Vill du se ett specifikt innehÄll hÀr? Du kan be communityn att skapa det!",
+ "LatestContentRequests": "Senaste förfrÄgningar om innehÄll",
+ "AllPostRequests": "Se alla postförfrÄgningar",
+ "SubscribeToTheNewsletter": "Prenumerera pÄ nyhetsbrevet",
+ "NewsletterEmailDefinition": "FÄ information om vad som hÀnder i ABP, t.ex. nya utgÄvor, fria kÀllor, inlÀgg och mycket mer.",
+ "NoThanks": "Nej, tack.",
+ "MaybeLater": "Kanske senare",
+ "JoinOurPostNewsletter": "AnmÀl dig till vÄrt nyhetsbrev",
+ "Marketing": "Marknadsföring",
+ "CommunityPrivacyPolicyConfirmation": "Jag godkÀnner de allmÀnna villkoren och Integritetspolicy.",
+ "PostRequestMessageTitle": "Ăppna en frĂ„ga pĂ„ GitHub för att begĂ€ra ett inlĂ€gg / en handledning som du vill se pĂ„ den hĂ€r webbplatsen.",
+ "PostRequestMessageBody": "HÀr Àr en lista över de inlÀgg som efterfrÄgats av communityn. Vill du skriva ett efterfrÄgat inlÀgg? Klicka pÄ önskemÄlet och delta i diskussionen.",
+ "Language": "SprÄk",
+ "CreatePostLanguageInfo": "SprÄket för inlÀggets innehÄll.",
+ "VideoPost": "VideoinlÀgg",
+ "Post": "Post",
+ "Read": "LĂ€s",
+ "CreateGithubPostUrlInfo": "FullstÀndig URL till Markdown-filen pÄ GitHub (exempel).",
+ "CreateVideoContentUrlInfo": "InlÀggets ursprungliga URL pÄ Youtube.",
+ "CreateExternalPostUrlInfo": "InlÀggets ursprungliga externa webbadress.",
+ "VideoContentForm": "Skicka in video pÄ YouTube",
+ "GithubPostForm": "Skicka inlÀgg pÄ GitHub",
+ "ExternalPostForm": "Skicka in ett externt innehÄll",
+ "HowToPost": "Hur postar jag?",
+ "Posts": "InlÀgg",
+ "VideoUrl": "Video webbadress",
+ "GithubPostUrl": "Url för GitHub-post",
+ "ExternalPostUrl": "Url för externt inlÀgg",
+ "ThankYouForContribution": "Tack för att du bidrar till ABP Community. Vi tar gÀrna emot artiklar och videohandledning om ABP Framework, .NET, ASP.NET Core och allmÀnna Àmnen inom programvaruutveckling.",
+ "GithubPost": "GitHub-inlÀgg",
+ "GithubPostSubmitStepOne": "1. Skriv ett inlÀgg pÄ ett offentligt GitHub-arkiv med Markdown-formatet. exempel",
+ "GithubPostSubmitStepTwo": "2. Skicka in din URL till inlÀgget med hjÀlp av formulÀret.",
+ "GithubPostSubmitStepThree": "3. Ditt inlÀgg kommer att Äterges pÄ denna webbplats.",
+ "YoutubeVideo": "Youtube-video",
+ "YoutubeVideoSubmitStepOne": "1. Publicera din video pÄ YouTube.",
+ "YoutubeVideoSubmitStepTwo": "2. Skicka in video-URL:en med hjÀlp av formulÀret.",
+ "YoutubeVideoSubmitStepThree": "3. Besökare kommer att kunna titta pÄ ditt videoinnehÄll direkt pÄ denna webbplats.",
+ "ExternalContent": "Externt innehÄll",
+ "ExternalContentSubmitStepOne": "1. Skapa ett innehÄll pÄ en publik plattform (Medium, din egen blogg eller var du vill).",
+ "ExternalContentSubmitStepTwo": "2. Skicka in URL:en för ditt innehÄll med hjÀlp av formulÀret.",
+ "ExternalContentSubmitStepThree": "3. Besökare omdirigeras till innehÄllet pÄ den ursprungliga webbplatsen.",
+ "ChooseYourContentType": "VÀlj det sÀtt som du vill lÀgga till ditt innehÄll pÄ.",
+ "PostContentViaGithub": "Jag vill lÀgga till mitt inlÀgg med GitHub i enlighet med markdown-reglerna.",
+ "PostContentViaYoutube": "Jag vill dela mina videor som finns pÄ Youtube hÀr.",
+ "PostContentViaExternalSource": "Jag vill lÀgga till det innehÄll jag publicerade pÄ en annan plattform hÀr.",
+ "GitHubUserNameValidationMessage": "Ditt Github-anvÀndarnamn kan inte innehÄlla blanksteg, kontrollera att ditt Github-anvÀndarnamn Àr korrekt.",
+ "PersonalSiteUrlValidationMessage": "URL:en till din personliga webbplats fÄr inte innehÄlla blanksteg, kontrollera att URL:en till din personliga webbplats Àr korrekt.",
+ "TwitterUserNameValidationMessage": "Ditt Twitter-anvÀndarnamn fÄr inte innehÄlla blanksteg, kontrollera att ditt Twitter-anvÀndarnamn Àr korrekt.",
+ "LinkedinUrlValidationMessage": "Din Linkedin-URL fÄr inte innehÄlla blanksteg, kontrollera att din Linkedin-URL Àr korrekt.",
+ "NoPostsFound": "Inga inlÀgg hittades!",
+ "SearchInPosts": "Sök i inlÀgg...",
+ "MinimumSearchContent": "Du mÄste ange minst 3 tecken!",
+ "Volo.AbpIo.Domain:060001": "KÀllans URL(\"{PostUrl}\") Àr inte Github URL",
+ "Volo.AbpIo.Domain:060002": "InlÀggets innehÄll Àr inte tillgÀngligt frÄn Github(\"{PostUrl}\")-resursen.",
+ "Volo.AbpIo.Domain:060003": "Inget innehÄll i inlÀgget hittades!",
+ "JoinTheABPCommunity": "GĂ„ med i ABP:s gemenskap",
+ "ABPCommunityTalks": "ABP:s samtal med allmÀnheten",
+ "LiveDemo": "Live Demo",
+ "GetLicense": "Skaffa licens",
+ "SourceCode": "KĂ€llkod",
+ "LeaveComment": "LĂ€mna kommentar",
+ "ShowMore": "Visa mer",
+ "NoPublishedPostsYet": "Inga publicerade inlÀgg Ànnu.",
+ "FullURL": "Full URL",
+ "JobTitle": "Befattning",
+ "Prev": "Före",
+ "Previous": "FöregÄende",
+ "Next": "NĂ€sta",
+ "Share": "Aktie",
+ "SortBy": "Sortera efter",
+ "NoPublishedEventsYet": "Inga publicerade hÀndelser Ànnu.",
+ "SubscribeYoutubeChannel": "Prenumerera pÄ Youtube-kanalen",
+ "Enum:EventType:0": "Samtal",
+ "MemberNotPublishedPostYet": "Denna medlem har inte publicerat nÄgra inlÀgg Ànnu.",
+ "MemberNotPublishedArticlesYet": "Denna medlem har inte publicerat nÄgra artiklar Ànnu.",
+ "MemberNotPublishedVideosYet": "Denna medlem har inte publicerat nÄgra videor Ànnu.",
+ "TimeAgo": "för {0} sedan",
+ "Discord_Page_JoinCommunityMessage": "GĂ„ med i ABP Discord Community",
+ "Discord_Page_Announce": "Vi Àr glada att kunna presentera ABP Community Discord Server!",
+ "Discord_Page_Description_1": "ABP Community har vuxit sedan dag ett. Vi ville ta det till nÀsta steg genom att skapa en officiell ABP Discord-server sÄ att ABP-communityn kan interagera med varandra med hjÀlp av underverk som snabbmeddelanden.",
+ "Discord_Page_Description_2": "ABP Community Discord Server Àr platsen dÀr du kan visa upp dina skapelser med ABP Framework, dela de tips som fungerade för dig, fÄ de senaste nyheterna och tillkÀnnagivandena om ABP Framework, bara chatta med medlemmar i samhÀllet för att utbyta idéer och ha kul!",
+ "Discord_Page_Description_3": "Denna ABP Community Discord Server Àr den officiella med ABP Core Team Àr nÀrvarande pÄ servern för att övervaka.",
+ "Discord_Page_JoinToServer": "GĂ„ med i ABP Discord Server",
+ "Events_Page_MetaTitle": "ABP:s evenemang för allmÀnheten",
+ "Events_Page_MetaDescription": "Live-showerna, som leds av ABP-teamet, Àr avslappnade sessioner fulla av community-innehÄll, demonstrationer, frÄgor och svar och diskussioner om vad som hÀnder i ABP.",
+ "Events_Page_Title": "ABP Samtal",
+ "Members_Page_WritingFromUser": "LÀs skrivning frÄn {0} pÄ ABP Community.",
+ "Post_Create_Page_MetaTitle": "Ny tjÀnst i gemenskapen",
+ "Post_Create_Page_MetaDescription": "Skicka in dina egna inlÀgg till ABP:s communityplattform och bidra med dina insikter och erfarenheter.",
+ "Post_Create_Page_CreateNewPost": "Skapa nytt inlÀgg",
+ "Post_Index_Page_MetaDescription": "ABP Communitys syfte Àr att skapa en bidragsmiljö för utvecklare som anvÀnder ABP-ramverket.",
+ "Layout_Title": "{0} | ABP Gemenskap",
+ "Layout_MetaDescription": "Ett nav för ABP Framework, .NET och programvaruutveckling. FÄ tillgÄng till artiklar, handledning, nyheter och bidra till ABP-communityn.",
+ "Index_Page_CommunityIntroduction": "Detta Àr ett nav för ABP Framework, .NET och programvaruutveckling. Du kan lÀsa artiklarna, titta pÄ videohandledningarna, fÄ information om ABP:s utvecklingsframsteg och ABP-relaterade evenemang, hjÀlpa andra utvecklare och dela med dig av din expertis till ABP-communityn.",
+ "TagsInArticle": "Taggar i artikel",
+ "IConsentToMedium": "Jag samtycker till publicering av detta inlÀgg pÄ https://medium.com/volosoft.",
+ "SearchResultsFor": "Sökresultat för \"{0}\"",
+ "SeeMoreVideos": "Se fler videor",
+ "DiscordPageTitle": "Discord",
+ "DiscordPageDescription": "GÄ med i ABP Community Discord för att chatta med andra medlemmar, diskutera idéer och fÄ stöd om ABP.",
+ "ViewVideo": "Visa video",
+ "AbpCommunityTitleContent": "ABP Community - ABP-ramverk med öppen kÀllkod",
+ "CommunitySlogan": "En unik community-plattform för ABP-Àlskare.",
+ "RaffleIsNotActive": "Lottdragningen Àr inte aktiv",
+ "YouAreAlreadyJoinedToThisRaffle": "Du har redan gÄtt med i denna utlottning!",
+ "InvalidSubscriptionCode": "Ogiltig prenumerationskod",
+ "Raffle:{0}": "Lottdragning: {0}",
+ "Join": "GĂ„ med",
+ "Leave": "LĂ€mna",
+ "LoginToJoin": "Logga in för att gÄ med",
+ "ToEnd:": "För att avsluta:",
+ "ToStart:": "Det Àr en början:",
+ "days": "dagar",
+ "hrs": "timmar",
+ "min": "min",
+ "sec": "sek",
+ "Winners": "Vinnare",
+ "To{0}LuckyWinners": "till {0} lyckliga vinnare",
+ "ActiveRaffles": "Aktiva .",
+ "UpcomingRaffles": "Kommande ",
+ "CompletedRaffles": "FÀrdigstÀllda ",
+ "NoActiveRaffleTitle": "Ingen aktiv utlottning Àr tillgÀnglig för tillfÀllet.",
+ "NoActiveRaffleDescription": "Ingen aktiv utlottning Àr tillgÀnglig för tillfÀllet.",
+ "RaffleSubscriptionCodeInputMessage": "Denna utlottning krÀver en registreringskod. VÀnligen ange registreringskoden nedan:",
+ "RaffleSubscriptionCodeInputErrorMessage": "Registreringskoden Àr felaktig. VÀnligen försök igen.",
+ "GoodJob!": "Bra jobbat!",
+ "RaffleJoinSuccessMessage": "Du Àr nu registrerad för utlottningen. Du kommer att informeras via e-post om du vinner priset!",
+ "RaffleLoginAndRegisterMessage": "Du mÄste logga in för att delta i utlottningen! Om du inte har registrerat dig Ànnu kan du skapa ett konto gratis nu.",
+ "Ok": "Ok",
+ "WaitingForTheDraw": "VÀnta pÄ dragningen!",
+ "AllAttendees": "Alla deltagare",
+ "SeeRaffleDetail": "Se Raffle detalj",
+ "SeeRaffle": "Se Raffle",
+ "ParticipationIsComplete": "Deltagandet Àr fullstÀndigt.",
+ "ABPCoreDevelopmentTeam": "ABP Core utvecklingsteam",
+ "RegisterTheEvent": "Registrera evenemanget",
+ "GoToConferencePage": "GĂ„ till konferenssidan",
+ "BuyTicket": "Buy Ticket",
+ "SeeEvent": "Se evenemang",
+ "PreviousEvents": "Tidigare evenemang",
+ "OtherLiveEvents": "Andra live-evenemang",
+ "SponsoredConferences": "Sponsrade konferenser",
+ "SponsoredConferencesDescription": "Vi Àr stolta över att stödja .NET-communities och evenemang för programvaruutvecklare.",
+ "UpcomingEvents": "Kommande evenemang",
+ "UpcomingCommunityTalkEventDescription": "Live-showerna, som leds av ABP-teamet, Àr avslappnade sessioner fulla av community-innehÄll, demonstrationer, frÄgor och svar och diskussioner om vad som hÀnder i ABP.",
+ "UpcomingConferenceEventDescription": "ABP .NET Conference Àr ett virtuellt evenemang för .NET-utvecklare dÀr de kan trÀffas och lyssna pÄ föredrag om .NET-vÀrlden, vanliga metoder för programvaruutveckling och ABP Framework med öppen kÀllkod.",
+ "LastOneYear": "Senaste 1 Äret",
+ "AllTimes": "Alla tider",
+ "TopContributors": "De största bidragsgivarna",
+ "{0}Posts": "{0} InlÀgg",
+ "LATESTPOSTS": "SENASTE INLĂGGNINGAR",
+ "NoContributorsFound": "Inga bidragsgivare hittades!",
+ "LatestPost": "Senaste inlÀgget",
+ "MEMBERSINCE{0}": "MEDLEM EFTERSOM {0}",
+ "CopyLink": "Kopiera lÀnk",
+ "ShareOnTwitter": "Dela pÄ Twitter",
+ "ShareOnLinkedIn": "Dela pÄ LinkedIn",
+ "MoreFrom{0}": "Mer frÄn {0}",
+ "SeeAllFrom{0}": "Se alla frÄn {0}",
+ "MostWatched": "Mest bevakade",
+ "Articles({0})": "Artiklar ({0})",
+ "Videos({0})": "Videor ({0})",
+ "LatestArticles": "Senaste artiklar",
+ "RaffleHeader": "Hej ABP Community Member!",
+ "RafflesInfo": "
Detta Àr utlottningssidan som Àr avsedd att visa vÄr uppskattning för att du Àr en aktiv gemenskapsmedlem. Vi gör ABP Community Talks ABP Dotnet Conference, deltar eller sponsrar .NET-relaterade evenemang dÀr vi ger bort nÄgra gÄvor.
Du kan följa den hÀr sidan för att se kommande lotterier, delta i dem eller se tidigare lotterier som vi dragit inklusive vinnarna.
Tack för att du Àr en aktiv medlem! Vi ses i de kommande lotterierna.",
+ "RafflesInfoTitle": "ABP Community .",
+ "ToLuckyWinner": "till 1 lycklig vinnare",
+ "MarkdownSupported": "Stöd för Markdown.",
+ "VisitPage": "Besök sidan",
+ "VisitVideoCourseDescription": "Om du vill lÀra dig grunderna i ABP-ramverket kan du kolla in videokurserna ABP Essentials.",
+ "EditProfile": "Redigera profil",
+ "ConfirmEmailForPost": "För att kunna göra inlÀgg mÄste du bekrÀfta din e-post. GÄ till account.abp.io/Account/Manage och verifiera din e-postadress under fliken Personal Info.",
+ "DailyPostCreateLimitation": "Du har nÄtt den dagliga grÀnsen för skapande av inlÀgg. Du kan skapa ett nytt inlÀgg i {0}.",
+ "OrganizationManagement": "Organisation och ledning",
+ "OrganizationList": "Organisationslista",
+ "Volo.AbpIo.Commercial:010003": "Du Àr inte Àgare till den hÀr organisationen!",
+ "OrganizationNotFoundMessage": "Ingen organisation hittades!",
+ "DeveloperCount": "Tilldelade / totala utvecklare",
+ "QuestionCount": "Kvarvarande / totala frÄgor",
+ "Unlimited": "ObegrÀnsad",
+ "Owners": "Ăgare",
+ "Owner": "Ăgare",
+ "AddMember": "LĂ€gg till medlem",
+ "AddNewOwner": "LÀgg till ny Àgare",
+ "AddNewDeveloper": "LĂ€gg till ny utvecklare",
+ "Developers": "Utvecklare",
+ "LicenseType": "Typ av licens",
+ "Manage": "Hantera",
+ "SetDefault": "StÀll in som standard",
+ "DefaultOrganization": "Standard",
+ "StartDate": "Startdatum",
+ "EndDate": "Slutdatum",
+ "Modules": "Moduler",
+ "LicenseExtendMessage": "Slutdatum för din licens förlÀngs till {0}.",
+ "LicenseUpgradeMessage": "Din licens har uppgraderats till {0}.",
+ "LicenseExtendAdnUpgradeMessage": "Din licens har förlÀngts till {0} och din licensplan har uppgraderats till {1}.",
+ "LicenseAddDeveloperMessage": "{0} utvecklare lÀggs till i din licens",
+ "Volo.AbpIo.Commercial:010004": "Kan inte hitta den angivna anvÀndaren! AnvÀndaren mÄste redan ha registrerats.",
+ "MyOrganizations": "Mina organisationer",
+ "ApiKey": "API-nyckel",
+ "UserNameNotFound": "Det finns ingen anvÀndare med anvÀndarnamnet {0}",
+ "SuccessfullyAddedToNewsletter": "Tack för att du prenumererar pÄ vÄrt nyhetsbrev!",
+ "MyProfile": "Min profil",
+ "WouldLikeToReceiveMarketingMaterials": "Jag skulle vilja fÄ marknadsföringsnyheter som produkterbjudanden och specialerbjudanden.",
+ "StartUsingYourLicenseNow": "Börja anvÀnda din licens nu!",
+ "WelcomePage": "VĂ€lkomstsida",
+ "UnsubscriptionExpireEmail": "Avregistrera dig frÄn e-postmeddelanden med pÄminnelser om licensens utgÄngsdatum",
+ "UnsubscribeLicenseExpireEmailReminderMessage": "Denna e-postprenumeration innehÄller endast pÄminnelser om utgÄngsdatum för din licens.",
+ "UnsubscribeFromLicenseExpireEmails": "Om du inte vill fÄ e-postmeddelanden om utgÄngsdatum för din licens kan du avsluta prenumerationen nÀr som helst.",
+ "Unsubscribe": "Avsluta prenumeration",
+ "NotOrganizationMember": "Du Àr inte medlem i nÄgon organisation.",
+ "UnsubscribeLicenseExpirationEmailSuccessTitle": "FramgÄngsrikt avregistrerad",
+ "UnsubscribeLicenseExpirationEmailSuccessMessage": "Du kommer inte lÀngre att fÄ e-postmeddelanden med pÄminnelser om licensens utgÄngsdatum.",
+ "LiveDemoLead": "{1} med ditt ABP-konto, {3} till abp.io eller fyll i formulÀret nedan för att skapa en live demo nu",
+ "ThereIsAlreadyAnAccountWithTheGivenEmailAddress": "Det finns redan ett konto med den angivna e-postadressen: {0}
Du bör logga in med ditt konto för att fortsÀtta.",
+ "GetLicence": "Skaffa licens",
+ "Startup": "Nystartad verksamhet",
+ "Templates": "Mallar",
+ "Developer": "Utvecklare",
+ "Tools": "Verktyg",
+ "Premium": "Premium",
+ "PremiumSupport": "Premium-support",
+ "PremiumForumSupport": "Premium Forum Support",
+ "UI": "UI",
+ "Themes": "Teman",
+ "JoinOurNewsletter": "AnmÀl dig till vÄrt nyhetsbrev",
+ "Send": "Skicka",
+ "OpenSourceBaseFramework": "Basramverk med öppen kÀllkod",
+ "MicroserviceCompatible": "Kompatibel med mikrotjÀnster",
+ "DistributedMessaging": "Distribuerad meddelandehantering",
+ "DynamicProxying": "Dynamisk proxyservering",
+ "BLOBStoring": "BLOB Storing",
+ "AdvancedLocalization": "Avancerad lokalisering",
+ "ManyMore": "MÄnga fler",
+ "ExploreTheABPFramework": "Utforska ABP-ramverket",
+ "StartupTemplatesShortDescription": "Startup-mallar gör att du kan starta ditt projekt pÄ nÄgra sekunder.",
+ "UIFrameworksOptions": "Alternativ för ramverk för anvÀndargrÀnssnitt;",
+ "DatabaseProviderOptions": "Alternativ för databasleverantör;",
+ "PreBuiltApplicationModules": "Förbyggda applikationsmoduler",
+ "PreBuiltApplicationModulesShortDescription": "De vanligaste applikationskraven Àr redan utvecklade Ät dig som ÄteranvÀndbara moduler.",
+ "Account": "Konto",
+ "Blogging": "Bloggande",
+ "Identity": "Identitet",
+ "IdentityServer": "Identitetsserver",
+ "LanguageManagement": "SprÄkhantering",
+ "TextTemplateManagement": "Hantering av textmallar",
+ "See All Modules": "SeAllaModuler",
+ "ABPSuite": "ABP-svit",
+ "AbpSuiteShortDescription": "ABP Suite Àr ett komplementÀrt verktyg till ABP Platform.",
+ "AbpSuiteExplanation": "Det gör att du kan bygga webbsidor pÄ bara nÄgra minuter. Det Àr ett .NET Core Global-verktyg som kan installeras frÄn kommandoraden. Det kan skapa en ny ABP-lösning och generera CRUD-sidor frÄn databasen till frontend.",
+ "LeptonTheme": "Lepton tema",
+ "ProfessionalModernUIThemes": "Professionella, moderna UI-teman",
+ "LeptonThemeExplanation": "Lepton tillhandahÄller en rad Bootstrap-adminteman som fungerar som en solid grund för alla projekt som krÀver en adminpanel.",
+ "DefaultTheme": "Standardtema",
+ "MaterialTheme": "Materialtema",
+ "Default2Theme": "Standard 2 Tema",
+ "DarkTheme": "Mörkt tema",
+ "DarkBlueTheme": "MörkblÄtt tema",
+ "LightTheme": "Ljus tema",
+ "ProudToWorkWith": "Stolt över att arbeta med",
+ "JoinOurConsumers": "Anslut dig till dem och bygg fantastiska produkter snabbt.",
+ "AdditionalServicesExplanation": "Behöver du ytterligare eller anpassade tjÀnster? Vi och vÄra partners kan tillhandahÄlla;",
+ "CustomProjectDevelopment": "Anpassad projektutveckling",
+ "CustomProjectDevelopmentExplanation": "Dedikerade utvecklare för dina anpassade projekt.",
+ "PortingExistingProjects": "Portning av befintliga projekt",
+ "PortingExistingProjectsExplanation": "Migrera dina Àldre projekt till ABP-plattformen.",
+ "LiveSupport": "Support i realtid",
+ "LiveSupportExplanation": "FjÀrrsupport i realtid nÀr du behöver det.",
+ "Training": "Utbildning",
+ "TrainingExplanation": "Dedikerad utbildning för dina utvecklare.",
+ "OnBoarding": "Onboarding",
+ "OnBoardingExplanation": "HjÀlp med att konfigurera dina utvecklings-, CI- och CD-miljöer.",
+ "PrioritizedTechnicalSupport": "Prioriterad teknisk support",
+ "PremiumSupportExplanation": "Förutom det stora samhÀllsstödet i ABP-ramverket svarar vÄrt supportteam pÄ tekniska frÄgor och problem frÄn de kommersiella anvÀndarna med hög prioritet.",
+ "SeeTheSupportOptions": "Kolla in supportalternativen",
+ "Contact": "Kontakt",
+ "TellUsWhatYouNeed": "BerÀtta för oss vad du behöver.",
+ "YourMessage": "Ditt meddelande",
+ "YourFullName": "Ditt fullstÀndiga namn",
+ "FirstNameField": "Förnamn",
+ "LastNameField": "Efternamn",
+ "EmailField": "E-postadress",
+ "YourEmailAddress": "Din e-postadress",
+ "ValidEmailAddressIsRequired": "En giltig e-postadress krÀvs.",
+ "HowMayWeHelpYou": "Hur kan vi hjÀlpa dig?",
+ "SendMessage": "Skicka meddelande",
+ "Success": "FramgÄng",
+ "WeWillReplyYou": "Vi har mottagit ditt meddelande och kommer att kontakta dig inom kort.",
+ "CreateLiveDemo": "Skapa live-demo",
+ "CreateLiveDemoDescription": "NÀr du har skickat in formulÀret kommer du att fÄ ett e-postmeddelande med din demolÀnk.",
+ "RegisterToTheNewsletter": "AnmÀl dig till nyhetsbrevet för att fÄ information om ABP.IO, inklusive nya releaser etc.",
+ "EnterYourEmailOrLogin": "Ange din e-postadress för att skapa din demo eller Logga in med ditt befintliga konto.",
+ "ApplicationTemplate": "Mall för ansökan",
+ "ApplicationTemplateExplanation": "Application startup template anvÀnds för att skapa en ny webbapplikation.",
+ "EfCoreProvider": "Entity Framework (Stödjer SQL Server, MySQL, PostgreSQL, Oracle och andra)",
+ "AlreadyIncludedInTemplateModules": "Följande moduler Àr redan inkluderade och konfigurerade i den hÀr mallen:",
+ "ApplicationTemplateArchitecture": "Den hÀr applikationsmallen stöder ocksÄ nivÄindelad arkitektur dÀr anvÀndargrÀnssnittslagret, API-lagret och autentiseringstjÀnsten Àr fysiskt Ätskilda.",
+ "SeeTheGuideOrGoToTheLiveDemo": "Kolla in utvecklarguiden för teknisk information om den hÀr mallen eller gÄ till live-demonstrationen.",
+ "DeveloperGuide": "Guide för utvecklare",
+ "ModuleTemplate": "Mall för modul",
+ "ModuleTemplateExplanation1": "Vill du skapa en modul och ÄteranvÀnda den i olika applikationer? Den hÀr startmallen förbereder allt för att börja skapa en ÄteranvÀndbar applikationsmodul eller en mikrotjÀnst.",
+ "ModuleTemplateExplanation2": "Du kan stödja enstaka eller flera anvÀndargrÀnssnittsramverk, enstaka eller flera databasleverantörer för en enda modul. Startmallen Àr konfigurerad för att köra och testa din modul i en minimal applikation utöver infrastrukturen för enhets- och integrationstest.
Se utvecklarguiden för teknisk information om den hÀr mallen.
",
+ "WithAllStyleOptions": "med alla stilalternativ",
+ "Demo": "Demo",
+ "SeeAllModules": "Se alla moduler",
+ "ABPCLIExplanation": "ABP CLI Àr ett kommandoradsverktyg för att utföra vanliga utvecklingsuppgifter för ABP-baserade lösningar.",
+ "ABPSuiteEasilyCURD": "ABP Suite Àr ett verktyg som gör att du enkelt kan skapa CRUD-sidor",
+ "WeAreHereToHelp": "Vi Àr hÀr för att hjÀlpa",
+ "BrowseOrAskQuestion": "Du kan blÀddra i vÄra hjÀlpÀmnen eller söka i vanliga frÄgor, eller sÄ kan du stÀlla en frÄga till oss genom att anvÀnda kontaktformulÀret.",
+ "SearchQuestionPlaceholder": "Sök i vanliga frÄgor och svar",
+ "AbpCommercialMetaDescription": "En omfattande webbutvecklingsplattform pÄ ABP Framework med förbyggda moduler, startmallar, verktyg för snabb utveckling, proffsiga UI-teman och premiumsupport.",
+ "WhatAreDifferencesThanABPFrameworkExplanation": "
ABP-ramverket Àr ett modulÀrt, tematiserbart, mikrotjÀnstkompatibelt ramverk för applikationsutveckling för ASP.NET Core. Det ger en komplett arkitektur och en stark infrastruktur sÄ att du kan fokusera pÄ din egen affÀrskod istÀllet för att upprepa dig sjÀlv för varje nytt projekt. Det Àr baserat pÄ bÀsta praxis för mjukvaruutveckling och populÀra verktyg som du redan kÀnner till.
ABP-ramverket Àr helt gratis, öppen kÀllkod och community-driven. Det ger ocksÄ ett gratis tema och nÄgra förbyggda moduler (t.ex. identitetshantering och hyresgÀsthantering).
<",
+ "VisitTheFrameworkVSCommercialDocument": "Besök följande lÀnk för mer information {1} ",
+ "Professional": "Professionell",
+ "UIThemes": "Teman för anvÀndargrÀnssnitt",
+ "EnterpriseModules": "Enterprise ready, funktionsrika, förbyggda applikationsmoduler (t.ex. hantering av identitetsserver, SaaS-hantering, sprÄkhantering)",
+ "ToolingToSupport": "Verktyg för att stödja din utvecklingsproduktivitet (t.ex. ABP Suite)",
+ "PremiumSupportLink": "Premium Support",
+ "ABPCommercialSolutionExplanation": "NÀr du skapar en ny applikation fÄr du en Visual Studio-lösning (en startmall) som baseras pÄ dina önskemÄl. Den nedladdade lösningen har kommersiella moduler och teman som redan Àr installerade och konfigurerade Ät dig. Du kan ta bort en förinstallerad modul eller lÀgga till en annan modul om du vill. Alla moduler och teman anvÀnder NuGet/NPM-paket som standard.",
+ "StartDevelopWithTutorials": "Den nedladdade lösningen Àr vÀl arkitekterad och dokumenterad. Du kan börja utveckla din egen företagskod baserad pÄ den genom att följa handledningarna.",
+ "HowManyProductsExplanation": "Du kan skapa sÄ mÄnga projekt du vill under din aktiva licensperiod; det finns ingen grÀns! Efter att din licens har löpt ut kan du inte skapa nya projekt, men du kan fortsÀtta att utveckla de projekt du har laddat ner och distribuera dem till ett obegrÀnsat antal servrar.",
+ "ChangingLicenseType": "Kan jag uppgradera min licenstyp senare?",
+ "LicenseExtendUpgradeDiffExplanation": "FörlÀngning: Genom att förlÀnga/förnya din licens kommer du att fortsÀtta att fÄ premiumsupport och fÄ större eller mindre uppdateringar för modulerna och teman. Dessutom kommer du att kunna fortsÀtta skapa nya projekt. Och du kommer fortfarande att kunna anvÀnda ABP Suite, vilket pÄskyndar din utveckling. NÀr du förlÀnger din licens lÀggs 1 Är till licensens utgÄngsdatum.
Uppgradering: Genom att uppgradera din licens kommer du att befordras till en högre licensplan, vilket gör att du kan fÄ ytterligare fördelar. Kolla in jÀmförelsetabellen för licenser för att se skillnaderna mellan licensplanerna. NÀr du uppgraderar Àndras dÀremot inte licensens utgÄngsdatum! För att förlÀnga licensens slutdatum mÄste du förlÀnga din licens.",
+ "LicenseRenewalCost": "Vad Àr kostnaden för licensförnyelse efter 1 Är?",
+ "LicenseRenewalCostExplanation": "Priset för förnyelse (förlÀngning) av standard Team License Àr ${0}, standard Business License Àr ${1} och standard Enterprise License Àr ${2}. Om du redan Àr kund, logga in pÄ ditt konto för att granska den aktuella förnyelseprissÀttningen.",
+ "HowDoIRenewMyLicense": "Hur förnyar jag min licens?",
+ "HowDoIRenewMyLicenseExplanation": "Du kan förnya din licens genom att navigera till organisationshanteringssidan. För att dra nytta av vÄra rabatterade priser för tidig förnyelse, se till att du förnyar innan din licens löper ut. Oroa dig inte för att du inte vet nÀr din möjlighet till tidig förnyelse stÀngs; du kommer att fÄ 3 pÄminnelse-e-postmeddelanden innan din prenumeration löper ut. Vi skickar dem 30 dagar, 7 dagar och 1 dag före utgÄngen.",
+ "IsSourceCodeIncluded": "Omfattar min licens kÀllkoden för pro-modulerna och teman?",
+ "IsSourceCodeIncludedExplanation1": "Beror pÄ vilken licenstyp du har köpt:",
+ "IsSourceCodeIncludedExplanation2": "Team: Din lösning anvÀnder moduler och teman som NuGet- och NPM-paket. Den inkluderar inte deras kÀllkod. PÄ sÄ sÀtt kan du enkelt uppgradera dessa moduler och teman nÀr en ny version Àr tillgÀnglig. Du kan dock inte fÄ kÀllkoden för dessa moduler och teman.",
+ "IsSourceCodeIncludedExplanation3": "Business/Enterprise: Utöver Team-licensen kan du ladda ner kÀllkoden för alla moduler eller teman du behöver. Du kan till och med ta bort NuGet/NPM-paketreferenserna för en viss modul och lÀgga till dess kÀllkod direkt i din lösning för att Àndra den helt.",
+ "IsSourceCodeIncludedExplanation4": "Att inkludera kÀllkoden för en modul i din lösning ger dig maximal frihet att anpassa den modulen. Det kommer dock inte att vara möjligt att automatiskt uppgradera modulen nÀr en ny version slÀpps.
Ingen av licenserna inkluderar kÀllkoden för ABP Suite och ABP Studio, vilket Àr externa verktyg som genererar kod Ät dig och hjÀlper din utveckling.
Kolla in sidan Planer och priser för andra skillnader mellan licenstyperna.
<",
+ "ChangingDevelopers": "Kan jag Àndra de registrerade utvecklarna för min organisation i framtiden?",
+ "ChangingDevelopersExplanation": "Förutom att lÀgga till nya utvecklare till din licens kan du ocksÄ Àndra befintliga utvecklare (du kan ta bort en utvecklare och lÀgga till en ny pÄ samma plats) utan nÄgon extra kostnad.",
+ "WhatHappensWhenLicenseEnds": "Vad hÀnder nÀr min licensperiod upphör?",
+ "discountForYears": "{0}% rabatt för {1} Är",
+ "WhenShouldIRenewMyLicense": "NÀr ska jag förnya min licens?",
+ "WhenShouldIRenewMyLicenseExplanation": "Om du förnyar din licens inom {3} dagar efter att din licens har löpt ut, kommer följande rabatter att tillÀmpas: Teamlicens {0}; Företagslicens {1}; Enterprise-licens {2}. Men om du förnyar din licens efter {3} dagar efter licensens utgÄngsdatum, kommer förnyelsepriset att vara detsamma som licensens inköpspris och det kommer inte att finnas nÄgon rabatt pÄ din förnyelse.",
+ "TrialPlan": "Har du en testplan?",
+ "DoYouAcceptBankWireTransfer": "Accepterar ni banköverföringar?",
+ "DoYouAcceptBankWireTransferExplanation": "Ja, vi accepterar banköverföringar.
NÀr du har skickat licensavgiften via banköverföring, skicka ditt kvitto och önskad licenstyp till accounting@volosoft.com.
VÄr internationella bankkontoinformation:",
+ "HowToUpgrade": "Hur uppgraderar man befintliga applikationer nÀr en ny version finns tillgÀnglig?",
+ "DatabaseSupport": "Vilka databassystem stöds?",
+ "UISupport": "Vilka UI-ramverk stöds?",
+ "Supported": "Stödd",
+ "UISupportExplanation": "ABP Framework Àr i sig sjÀlvt agnostiskt och kan fungera med alla anvÀndargrÀnssnitt. Startmallar, modul-anvÀndargrÀnssnitt och teman implementerades dock inte för alla anvÀndargrÀnssnittsramverk. Kolla in GÄ igÄng-dokumentet för den uppdaterade listan över anvÀndargrÀnssnittsalternativ.",
+ "MicroserviceSupport": "Stödjer den microservice-arkitekturen?",
+ "WhereCanIDownloadSourceCode": "Var kan jag ladda ner kÀllkoden?",
+ "ComputerLimitation": "Hur mÄnga datorer kan en utvecklare logga in pÄ nÀr han utvecklar ABP?",
+ "ComputerLimitationExplanation": "Vi tillÄter specifikt {0} datorer per individ/licensierad utvecklare. NÀr det finns ett behov för en utvecklare att utveckla ABP-baserade produkter pÄ en tredje maskin, ska ett e-postmeddelande skickas till license@abp.io dÀr situationen förklaras, och vi kommer sedan att göra lÀmplig tilldelning i vÄrt system.",
+ "RefundPolicy": "Har ni nÄgon Äterbetalningspolicy?",
+ "RefundPolicyExplanation": "Du kan begÀra Äterbetalning inom 30 dagar efter ditt licensköp. Licenstyperna Business och Enterprise har alternativ för nedladdning av kÀllkod; dÀrför ger vi en Äterbetalning pÄ 60 % inom 30 dagar för Business- och Enterprise-licenser. Dessutom görs inga Äterbetalningar för förnyelser och andra licensköp.",
+ "HowCanIRefundVat": "Hur kan jag Äterbetala moms?",
+ "HowCanIRefundVatExplanation1": "Om du gjorde betalningen med 2Checkout kan du Äterbetala momsen via ditt 2Checkout-konto:",
+ "HowCanIRefundVatExplanation2": "Logga in pÄ ditt 2Checkout-konto",
+ "HowCanIRefundVatExplanation3": "Leta upp rĂ€tt order och tryck pĂ„ \"Ă
terbetala försenad moms\" (ange ditt momsregistreringsnummer)",
+ "HowCanIGetMyInvoice": "Hur kan jag fÄ min faktura?",
+ "HowCanIGetMyInvoiceExplanation": "Det finns 2 betalningsgateways för att köpa en licens: Iyzico och 2Checkout. Om du köper din licens via 2Checkout-gatewayen skickar den PDF-fakturan till din e-postadress; kolla in 2Checkout-fakturering. Om du köper via Iyzico-gatewayen, med en anpassad inköpslÀnk eller via en banköverföring, kommer vi att förbereda och skicka din faktura. Du kan begÀra eller ladda ner din faktura frÄn sidan för organisationshantering. Innan du kontaktar oss för fakturan, kontrollera din organisationshanteringssida!",
+ "Forum": "Forum",
+ "PrivateTicket": "Privat biljett",
+ "PrivateTicketExplanation": "Enterprise License inkluderar Àven en privat support med e-post och Àrendehanteringssystem.",
+ "AbpSuiteExplanation1": "Med ABP Suite kan du skapa webbsidor pÄ bara nÄgra minuter. Det Àr ett globalt .NET Core-verktyg som kan installeras frÄn kommandoraden.",
+ "AbpSuiteExplanation2": "Den kan skapa en ny ABP-lösning och generera CRUD-sidor frÄn databasen till frontend. För teknisk översikt se dokumentet",
+ "FastEasy": "Snabbt och enkelt",
+ "AbpSuiteExplanation3": "Med ABP Suite kan du enkelt skapa CRUD-sidor. Du behöver bara definiera din entitet och dess egenskaper och lÄta resten gÄ till ABP Suite Ät dig! ABP Suite genererar all nödvÀndig kod för din CRUD-sida pÄ nÄgra sekunder. Den stöder Angular, MVC och Blazor anvÀndargrÀnssnitt.",
+ "RichOptions": "Rika alternativ",
+ "AbpSuiteExplanation4": "ABP Suite stöder flera anvÀndargrÀnssnittsalternativ som Razor Pages och Angular. Det stöder ocksÄ flera databaser som MongoDB och alla databaser som stöds av EntityFramework Core (MS SQL Server, Oracle, MySql, PostgreSQL och andra leverantörer...).",
+ "AbpSuiteExplanation5": "Det som Àr bra Àr att du inte behöver oroa dig för dessa alternativ. ABP Suite förstÄr din projekttyp och genererar koden för ditt projekt och placerar den genererade koden pÄ rÀtt plats i ditt projekt.",
+ "AbpSuiteExplanation6": "ABP Suite genererar kÀllkoden för Entity, Repository, Application Service, Code First Migration, JavaScript/TypeScript och CSHTML/HTML och Àven nödvÀndiga grÀnssnitt. ABP Suite genererar ocksÄ koden enligt Best Practices för programvaruutveckling, sÄ du behöver inte oroa dig för den genererade kodens kvalitet.",
+ "AbpSuiteExplanation7": "Eftersom du har kÀllkoden för byggstenarna i den genererade CRUD-sidan i rÀtt applikationslager kan du enkelt Àndra kÀllkoden och lÀgga till din egen anpassade affÀrslogik i den genererade koden.",
+ "CrossPlatform": "Plattformsoberoende",
+ "AbpSuiteExplanation8": "ABP Suite Àr byggt med .NET Core och Àr plattformsoberoende. Den körs som en webbapplikation pÄ din lokala dator. Du kan köra den pÄ Windows, Mac och Linux",
+ "OtherFeatures": "Andra funktioner",
+ "OtherFeatures1": "Uppdaterar enkelt NuGet- och NPM-paket pÄ din lösning.",
+ "OtherFeatures2": "Ă
terskapar redan genererade sidor frÄn början.",
+ "OtherFeatures3": "Skapar nya lösningar",
+ "ThanksForCreatingProject": "Ditt projekt har skapats framgÄngsrikt!",
+ "HotToRunSolution": "Hur kör du din lösning?",
+ "HotToRunSolutionExplanation": "I dokumentet Kom igÄng kan du lÀsa om hur du konfigurerar och kör din lösning.",
+ "GettingStarted": "Komma igÄng",
+ "WebAppDevTutorialExplanation": "I handledningsdokumentet för utveckling av webbapplikationer finns ett exempel pÄ utveckling steg för steg.",
+ "Document": "Dokument",
+ "UsingABPSuiteToCURD": "AnvÀnda ABP Suite för generering av CRUD-sidor och verktyg",
+ "SeeABPSuiteDocument": "Kolla in ABP Suite-dokumentet för att lÀra dig anvÀndningen av ABP Suite.",
+ "SeeModulesDocument": "Se sidan med moduler för en lista över alla PRO-moduler.",
+ "Pricing": "PrissÀttning",
+ "PricingExplanation": "VÀlj de egenskaper och funktioner som ditt företag behöver idag. Uppgradera enkelt nÀr ditt företag vÀxer.",
+ "Team": "Team",
+ "Business": "Företag",
+ "Enterprise": "Företag",
+ "Custom": "Anpassad",
+ "IncludedDeveloperLicenses": "Inkluderade utvecklarlicenser",
+ "CustomLicenceOrAdditionalServices": "Behöver du en anpassad licens eller ytterligare tjÀnster?",
+ "CustomOrVolumeLicense": "Anpassad licens eller volymlicens",
+ "LiveTrainingSupport": "Utbildning och support i realtid",
+ "AndMore": "och mer",
+ "AdditionalDeveloperLicense": "Ytterligare licens för utvecklare",
+ "ProjectCount": "ProjektrÀkning",
+ "AllProModules": "Alla proffsmoduler",
+ "AllProThemes": "Alla proffsteman",
+ "AllProStartupTemplates": "Alla proffsmallar för nystartade företag",
+ "SourceCodeOfAllModules": "KÀllkod för alla moduler",
+ "SourceCodeOfAllThemes": "KÀllkod för alla teman",
+ "PerpetualLicense": "Evig licens",
+ "UnlimitedServerDeployment": "ObegrÀnsad serverdistribution",
+ "YearUpgrade": "1 Ärs uppgradering",
+ "YearPremiumForumSupport": "1 Ärs premiumsupport för forum",
+ "ForumSupportIncidentCountYear": "Antal incidenter för forumstöd/Är",
+ "PrivateTicketEmailSupport": "Privat support via biljett och e-post",
+ "BuyNow": "Köp nu",
+ "PayViaAmexCard": "Hur kan jag betala med mitt AMEX-kort?",
+ "PayViaAmexCardDescription": "Standardbetalningsgatewayen \"Iyzico\" kan neka vissa AMEX-kreditkort pÄ grund av sÀkerhetsÄtgÀrder. I detta fall kan du betala via den alternativa betalningsgatewayen \"2Checkout\".",
+ "InvalidReCaptchaErrorMessage": "Det uppstod ett fel vid verifiering av reCAPTCHA. VÀnligen försök igen.",
+ "YourCompanyName": "Ditt företagsnamn",
+ "FirstName": "Förnamn",
+ "LastName": "Efternamn",
+ "YourFirstName": "Ditt förnamn",
+ "YourLastName": "Ditt efternamn",
+ "SpecialOffer": "Specialerbjudande",
+ "SpecialOfferMessage": "Skynda dig! Priserna gÀller under en begrÀnsad tid.",
+ "DiscountRequest": "BegÀran om rabatt",
+ "DiscountRequestDescribeCustomerQuestion": "Vilken av följande beskrivningar stÀmmer in pÄ dig?",
+ "DiscountRequestStudentEmailMessage": "E-postadressen mÄste innehÄlla \"edu\".",
+ "DiscountRequestDeveloperCount": "Hur mÄnga utvecklare Àr ni?",
+ "DiscountRequestDeveloperCountExceedMessage": "Vi erbjuder inte rabatterade licenser för företag som har fler Àn {0} utvecklare.",
+ "DiscountRequestOrganizationName": "Företagets/organisationens/skolans namn",
+ "Website": "Webbplats",
+ "GithubUsername": "AnvÀndarnamn för GitHub",
+ "PhoneNumber": "Telefonnummer",
+ "DescribeABPCommercialUsage": "Beskriv det projekt som du planerar att utveckla baserat pÄ APB Commercial",
+ "DiscountRequestCertifyInformationMessage": "Jag intygar att alla uppgifter Àr sanningsenliga och korrekta.",
+ "DiscountRequestReceived": "Vi har mottagit din begÀran om rabatt.",
+ "DiscountRequestStatusMessage": "Vi kommer att svara dig efter att ha kontrollerat den information du har lÀmnat.",
+ "MVCOrRazorPages": "MVC (Razor Pages)",
+ "Angular": "Angular",
+ "Blazor": "Blazor",
+ "New": "Nya",
+ "MongoDB": "MongoDB",
+ "EBookDDD": "E-bok DomÀnstyrd design",
+ "Page": "Sidan",
+ "DoYouAgreePrivacyPolicy": "Jag samtycker till Terms & Conditions och Privacy Policy.",
+ "VolosoftMarketingInformationMessage": "Jag vill ha information, tips och erbjudanden om Solutions for Businesses and Organizations och andra produkter och tjÀnster frÄn Volosoft.",
+ "VolosoftSharingInformationMessage": "Jag vill att Volosoft ska dela min information med utvalda partners sÄ att jag kan fÄ relevant information om deras produkter och tjÀnster.",
+ "StartFree": "Starta gratis",
+ "FreeTrial": "Gratis provperiod",
+ "AcceptsMarketingCommunications": " Ja, jag vill gÀrna fÄ ABP-relaterade marknadsföringsnyheter.",
+ "PurposeOfUsage": "Syfte med anvÀndningen",
+ "Choose": "- VĂ€lj -",
+ "CompanyOrganizationName": "Företagets/organisationens namn",
+ "StartTrial": "Starta min kostnadsfria testperiod",
+ "ContactUsQuestions": "Kontakta oss om du har nÄgra frÄgor",
+ "TrialActivatedWarning": "En anvÀndare har endast rÀtt till 1 gratis provperiod. Du har redan anvÀnt din provperiod.",
+ "ActivationRequirement": "Du Àr bara ett steg frÄn att starta din provperiod.
Efter att ha kontrollerat din information aktiverar vi din licens. NÀr din licens Àr aktiverad skickar vi ett e-postmeddelande till {0}. Oroa dig inte, den hÀr processen kommer inte att ta lÄng tid!",
+ "SaveAndDownload": "Spara och ladda ner",
+ "CompanyNameValidationMessage": "Företagsnamnet Àr för lÄngt!",
+ "AddressValidationMessage": "Adressen Àr för lÄng!",
+ "TaxNoValidationMessage": "TAX/VAT Nej Àr för lÄngt!",
+ "NotesValidationMessage": "AnteckningsfÀltet Àr för lÄngt!",
+ "CheckYourBillingInfo": "Du kan bara skapa din faktura en gÄng! Kontrollera din faktureringsinformation innan du skapar din faktura.",
+ "StartYourFreeTrial": "Starta din kostnadsfria testperiod",
+ "TrialLicenseModelInvalidErrorMessage": "Ett av följande fÀlt Àr ogiltigt: Landsnamn, Företagsstorlek, Bransch eller Syfte med anvÀndning.",
+ "Trial": "RÀttegÄng",
+ "Purchased": "Köpte",
+ "PurchaseNow": "Köp nu",
+ "PurchaseTrialLicenseMessage": "Din licens utgÄngsdatum Àr {0}.
Om du vill fortsÀtta anvÀnda de projekt som du skapade under din kostnadsfria testperiod mÄste du Àndra licensnycklarna i dina appsettings.secrets.json-filer. HÀr Àr din licensnyckel:",
+ "TrialLicenseExpireMessage": "Du anvÀnder en testlicens och din testlicens upphör att gÀlla den {0}.",
+ "TryForFree": "Prova gratis",
+ "TrialLicenseExpiredInfo": "Din testlicensperiod har löpt ut!",
+ "DowngradeLicensePlan": "Kan jag nedgradera till en lÀgre licensplan i framtiden?",
+ "LicenseTransfer": "Kan en licens överföras frÄn en utvecklare till en annan?",
+ "UserOwnerDescription": "Organisationens \"Àgare\" Àr administratör för detta konto. Han/hon hanterar organisationen genom att köpa licenser och tilldela utvecklare. En \"Àgare\" kan inte skriva kod i ABP-projekten, kan inte ladda ner ABP-exempelprojekten och kan inte stÀlla frÄgor pÄ supportwebbplatsen. Om du vill göra allt detta mÄste du ocksÄ lÀgga till dig sjÀlv som utvecklare.",
+ "UserDeveloperDescription": "\"Utvecklarna\" kan skriva kod i ABP-projekten, ladda ner ABP:s exempelprojekt och stĂ€lla frĂ„gor pĂ„ supportwebbplatsen. Ă
andra sidan kan \"utvecklarna\" inte hantera den hÀr organisationen.",
+ "RemoveCurrentUserFromOrganizationWarningMessage": "Du tar bort dig sjÀlv frÄn din egen organisation. Du kommer inte lÀngre att kunna hantera den hÀr organisationen, bekrÀftar du det?",
+ "RenewExistingOrganizationOrCreateNewOneMessage": "Du kan förnya licensen för din organisation (er) genom att klicka pÄ nedanstÄende \"FörlÀng nu\"-knapp (ar) och dÀrmed kan du förlÀnga licensens utgÄngsdatum med 1 Är. Om du fortsÀtter till kassan kommer du att ha en ny organisation. Vill du fortsÀtta med en ny organisation?",
+ "PurchaseTrialOrganizationOrCreateNewOneMessage": "Du har en testlicens. För att köpa din testlicens klickar du pÄ knappen Köp nu. Om du fortsÀtter till kassan kommer du att ha en ny organisation. Vill du fortsÀtta med en ny organisation?",
+ "ExtendNow": "FörlÀnga / Förnya",
+ "CreateNewOrganization": "Skapa en ny organisation",
+ "RenewLicenseEarly": "Om jag förnyar min licens tidigt, kommer jag att fÄ hela Äret?",
+ "RenewLicenseEarylExplanation": "NÀr du förnyar din licens före licensens utgÄngsdatum kommer 1 Är att lÀggas till licensens utgÄngsdatum. Om din licens t.ex. löper ut den {0}-06-06 och du förnyar den den {0}-01-01, kommer din nya licens att löpa ut den {1}-06-06.",
+ "OpenSourceWebApplication": "Webbapplikation med öppen kÀllkod",
+ "CompleteWebDevelopment": "En komplett webbutveckling",
+ "ABPFrameworkDescription": "ABP Framework Àr en komplett infrastruktur för att skapa moderna webbapplikationer genom att följa de bÀsta metoderna för mjukvaruutveckling och konventioner.",
+ "CommunityDescription": "Dela dina erfarenheter av ABP-ramverket!",
+ "PreBuiltApplication": "Förbyggd applikation",
+ "DatabaseProviders": "Databasleverantörer",
+ "UIFrameworks": "Ramverk för anvÀndargrÀnssnitt",
+ "UsefulLinks": "AnvÀndbara lÀnkar",
+ "Platform": "Plattform",
+ "MicroserviceArchitectureExplanation": "Det hÀr Àr en komplett lösningsarkitektur som bestÄr av flera applikationer, API-gateways, mikrotjÀnster och databaser för att bygga en skalbar mikrotjÀnstlösning med den senaste tekniken.",
+ "BusinessLogic": "AffÀrslogik",
+ "DataAccessLayer": "DataÄtkomstskikt",
+ "Monolith": "Monolit",
+ "ModularArchitectureExplanation": "Denna startup-mall ger en skiktad, modulÀr och DDD-baserad lösningsarkitektur för att bygga en ren och underhÄllbar kodbas.",
+ "Bs5Compatible": "Professionellt tema som Àr kompatibelt med Bootstrap 5, perfekt för din administratörswebbplats.",
+ "LeptonXTheme": "LeptonX tema",
+ "LeptonXDark": "LeptonX Mörk",
+ "LeptonXLight": "LeptonX Ljus",
+ "LeptonXSemiDark": "LeptonX Halvmörk",
+ "BuiltOnBs5Library": "Byggd pÄ Bootstrap 5-biblioteket",
+ "FullyCompatibleWithBs5": "100% kompatibel med Bootstrap 5 HTML-struktur och CSS-klasser",
+ "ResponsiveAndMobileCompatible": "Responsiv, mobilkompatibel, RTL-stöd",
+ "ProvidesStylesForDatatables": "TillhandahÄller stilar för datatabeller",
+ "MultipleLayoutOptions": "Flera layoutalternativ",
+ "EasilyInstallAndUpgrade": "Enkel installation och uppgradering",
+ "SupportForum": "Forum för support",
+ "TrustedBy": "Betrodda av",
+ "OurPricing": "VÄr prissÀttning",
+ "Plans": "Planer",
+ "NameSurname": "Namn Efternamn",
+ "LicenceType": "Typ av licens",
+ "LicenseDiscountWarning": "DENNA RABATTSIDA ANVĂNDER STANDARD RABATTKOD OCH FĂR VOLOSOFT UTVECKLARE. INKĂPSLĂNKAR NEDAN FUNGERAR INTE.",
+ "DiscountedLicenseExplanation": "Dessa licenspriser Àr avsedda för smÄ nystartade företag, enskilda utvecklare, studenter, ideella organisationer och projekt!",
+ "General": "AllmÀnt",
+ "Development": "Utveckling",
+ "Payment": "Betalning",
+ "WatchExplainerVideo": "LÄt oss trÀffas! Titta pÄ förklarande video",
+ "LightDarkAndSemiDarkThemes": "Ljus, mörk och halvmörk",
+ "LeptonXThemeExplanation": "Lepton Theme kan Àndra ditt tema enligt dina systeminstÀllningar.",
+ "PRO": "PRO",
+ "YourAccountDetails": "Dina kontouppgifter",
+ "OrganizationName": "Organisationens namn",
+ "AddDevelopers": "LĂ€gg till utvecklare",
+ "StartDevelopment": "Starta utveckling",
+ "CreateAndRunApplicationUsingStartupTemplate": "LÀr dig hur du skapar och kör en ny webbapplikation med hjÀlp av ABP:s startmall.",
+ "CommunityDescription2": "abp.io/community Àr en plats dÀr mÀnniskor kan dela ABP-relaterade artiklar. Sök efter artiklar, handledningar, kodprover, fallstudier och trÀffa mÀnniskor som Àr i samma spÄr som du.",
+ "UseABPSuiteExplanation": "AnvÀnd ABP Suite för att ladda ner kÀllkoden för modulerna och temana.",
+ "ManageModulesWithSuite": "Du kan ocksÄ hantera dina ABP-moduler med Suite.",
+ "LearnHowToInstallSuite": "LÀr dig hur du installerar och anvÀnder ABP Suite.",
+ "SeeLess": "Se mindre",
+ "LayeredSolutionStructure": "Struktur med flera lager av lösningar",
+ "LayeredSolutionStructureExplanation": "Lösningen Àr uppbyggd i lager baserat pÄ principer och mönster för domÀndriven design för att isolera affÀrslogiken frÄn infrastruktur och integrationer och för att maximera underhÄll och ÄteranvÀndning av koden. ABP Framework tillhandahÄller redan abstraktioner, basklasser och guider för att verkligen implementera DDD för din applikation.",
+ "MultipleUIOptionsExplanation": "Vi Àlskar olika sÀtt att skapa anvÀndargrÀnssnittet. Den hÀr startup-lösningen ger tre olika alternativ för anvÀndargrÀnssnitt för din affÀrsapplikation.",
+ "MultipleDatabaseOptions": "Flera databasalternativ",
+ "MultipleDatabaseOptionsExplanation": "Du har tvĂ„ alternativ för databasleverantörer (förutom att du kan anvĂ€nda bĂ„da i en och samma applikation). AnvĂ€nd Entity Framework Core för att arbeta med alla relationsdatabaser och anvĂ€nd eventuellt Dapper nĂ€r du behöver skriva lĂ„gnivĂ„frĂ„gor för bĂ€ttre prestanda. MongoDB Ă€r ett annat alternativ om du behöver anvĂ€nda en dokumentbaserad NoSQL-databas. Ăven om dessa leverantörer Ă€r vĂ€lintegrerade, abstraherade och förkonfigurerade kan du faktiskt interagera med alla databassystem som du kan anvĂ€nda med .NET.",
+ "ModularArchitectureExplanation2": "Modularitet Àr en förstklassig medborgare i ABP-plattformen. Alla applikationsfunktionaliteter Àr uppdelade i vÀlisolerade valfria moduler. Startlösningen levereras redan med de grundlÀggande ABP-modulerna förinstallerade. Du kan ocksÄ skapa dina egna moduler för att bygga ett modulÀrt system för din egen applikation.",
+ "MultiTenancyForSaasBusiness": "Multi-tenancy för ditt SaaS-företag",
+ "MultiTenancyForSaasBusinessExplanation": "Lösningen har konfigurerats fullt ut för att stödja system med flera hyresgÀster. Det gör det möjligt för hyresgÀsterna att dela eller ha sina egna databaser med on-the-fly databasskapande och migrationssystem.",
+ "MicroserviceStartupSolution": "Microservice Startup-lösning",
+ "MicroserviceArchitectureExplanation2": "Du kan skaffa det till ditt nÀsta microservice-system för att dra nytta av den förbyggda baslösningen och destillerade erfarenheten.",
+ "PreIntegratedTools": "Förintegrerad med populÀra verktyg",
+ "PreIntegratedToolsExplanation": "Lösningen Àr redan integrerad i branschens standardverktyg och -tekniker, medan du alltid kan Àndra dem och integrera dem med dina favoritverktyg.",
+ "SingleSignOnAuthenticationServer": "Server för autentisering med enkel inloggning",
+ "SingleSignOnAuthenticationServerExplanation": "Lösningen har en autentiseringsserverapplikation som anvÀnds av de andra applikationerna som en server för enkel inloggning med API-Ätkomsthanteringsfunktioner. Den Àr baserad pÄ implementeringen Openiddict.",
+ "WebAppsWithGateways": "2 webbappar med 2 API-gateways",
+ "WebAppsWithGatewaysExplanation": "Lösningen innehÄller tvÄ webbapplikationer som var och en har en dedikerad API-gateway (BFF - Backend For Frontend-mönster).",
+ "BackOfficeApplication": "Back Office-applikation",
+ "BackOfficeApplicationExplanation": "Den faktiska webbapplikationen för ditt system, med flera alternativ för anvÀndargrÀnssnitt. Du kan skapa alla typer av affÀrsapplikationer.",
+ "LandingWebsite": "Landningswebbplats",
+ "LandingWebsiteExplanation": "En generisk landningsplats/publik webbplats som kan anvÀndas för flera ÀndamÄl, t.ex. för att presentera ditt företag, sÀlja dina produkter osv.",
+ "ABPFrameworkEBook": "Mastering ABP Framework e-bok",
+ "MasteringAbpFrameworkEBookDescription": "IngÄr i din kommersiella licens",
+ "LicenseTypeNotCorrect": "Licenstypen Àr inte korrekt!",
+ "Trainings": "Utbildningar",
+ "ChooseTrainingPlaceholder": "VĂ€lj utbildning...",
+ "DoYouNeedTrainings": "Behöver du nÄgon av dessa utbildningar?",
+ "DoYouNeedTraining": "Behöver du {0} utbildning?",
+ "GetInTouchUs": "Ta kontakt med oss",
+ "ForMoreInformationClickHere": "För mer information, klicka hÀr.",
+ "ForMoreInformationClickHereByClass": "För mer information, klicka hÀr.",
+ "IsGetOnboardingTraining": "Vill du fÄ utbildning i onboarding och utveckling av webbapplikationer?",
+ "OnboardingWebApplicationDevelopmentTrainingMessage": "För att schemalÀgga din utbildningskalender, vÀnligen kontakta {0} efter att du har skapat organisationen",
+ "CustomPurchaseMessage": "För nÀsta steg, klicka pÄ {0} för att kontakta oss.",
+ "Note": "Notera",
+ "AdditionalNote": "Ytterligare anmÀrkning",
+ "OnboardingTrainingFaqTitle": "Har du en ABP onboarding-utbildning?",
+ "OnboardingTrainingFaqExplanation": "Ja, vi har ABP Training Services som hjÀlper dig att snabbt komma igÄng med ditt ABP-projekt. Du kommer att lÀra dig om ABP frÄn en medlem i ABP:s kÀrnteam och du kommer att fÄ de fÀrdigheter som krÀvs för att starta ditt ABP-projekt. I onboarding-utbildningen förklarar vi hur du stÀller in din utvecklingsmiljö, installerar de nödvÀndiga verktygen och skapar en fullt fungerande CRUD-sida. Utbildningen kommer att vara live och Zoom-applikationen kommer att anvÀndas, men vi Àr öppna för att anvÀnda andra online-mötesplattformar. SprÄket för utbildningen kommer att vara engelska. Du kan ocksÄ stÀlla dina frÄgor om ABP under sessionerna. En lÀmplig tid och ett lÀmpligt datum kommer att planeras för bÄda parter. För ytterligare information besök utbildningssidan.",
+ "AddBasket": "LĂ€gg till i korgen",
+ "SendTrainingRequest": "Skicka förfrÄgan om utbildning",
+ "OnlyEnglishVersionOfThisDocumentIsTheRecentAndValid": "* Den engelska versionen av detta dokument Àr den mest aktuella och den engelska versionen ska ha företrÀde i alla tvister.",
+ "Pricing_Page_Title": "PrissÀttning",
+ "Pricing_Page_Description": "Se de olika licensplanerna för ABP Platform, inklusive kostnadsfria nivÄer. Om standardplanerna inte passar, be om en offert. Glöm inte att vi har en 30-dagars pengarna-tillbaka-garanti!",
+ "Pricing_Page_HurryUp": "Skynda dig!",
+ "Pricing_Page_BuyLicense": "Köp en licens till 2021 Ärs priser fram till den 16 januari!",
+ "Pricing_Page_ValidForExistingCustomers": "GÀller Àven för befintliga kunder och licensförnyelser.",
+ "Pricing_Page_Hint1": "I licenspriset ingÄr ett visst antal platser för utvecklare. Om du har fler utvecklare kan du alltid köpa ytterligare platser.",
+ "Pricing_Page_Hint2": "Du kan köpa fler utvecklarlicenser nu eller i framtiden. Licenserna Àr platsbaserade, vilket innebÀr att du kan överföra en plats frÄn en utvecklare till en annan.",
+ "Pricing_Page_Hint3": "Du kan utveckla ett obegrÀnsat antal olika produkter med din licens.",
+ "Pricing_Page_Hint4": "ABP Suite Àr ett verktyg som hjÀlper dig att utveckla och förbÀttra din produktivitet. Det stöder generering av CRUD-sidor och skapande av nya projekt.",
+ "Pricing_Page_Hint5": "Du kan anvÀnda alla de förbyggda modulerna i dina applikationer.",
+ "Pricing_Page_Hint6": "Du kan anvÀnda alla de förbyggda temana i dina applikationer.",
+ "Pricing_Page_Hint7": "En startmall Àr en Visual Studio-lösning som hjÀlper dig att komma igÄng med ditt projekt. Alla grundlÀggande moduler lÀggs till och förkonfigureras Ät dig.",
+ "Pricing_Page_Hint8": "Mastering ABP Framework e-bok förklarar hur man implementerar .NET-lösningar med bÀsta praxis. Den sÀljs pÄ Amazon.com, och du kan ladda ner boken gratis med din licens.",
+ "Pricing_Page_Hint9": "Du kan ladda ner kÀllkoden för alla moduler. Du kanske vill lÀgga till kÀllkoden i din lösning för att göra radikala Àndringar eller bara behÄlla den för dig sjÀlv av sÀkerhetsskÀl.",
+ "Pricing_Page_Hint10": "Licenserna Àr livstidsbaserade. Det innebÀr att du kan fortsÀtta att utveckla din applikation för alltid. TillgÄng till den senaste versionen och support beviljas inom licensperioden (1 Är om du inte förnyar den).",
+ "Pricing_Page_Hint11": "Inga begrÀnsningar för driftsÀttning! Du kan distribuera till sÄ mÄnga servrar som du vill, inklusive molntjÀnster eller lokalt.",
+ "Pricing_Page_Hint12": "Du kan uppdatera moduler, teman och verktyg till den senaste versionen inom din aktiva licensperiod. NÀr din licens löper ut mÄste du förnya den för att fortsÀtta att fÄ uppdateringar för buggfixar, nya funktioner och förbÀttringar.",
+ "Pricing_Page_Hint13": "Du kan fÄ premiumsupport i ett Är (du kan förnya din licens för att förlÀnga den).",
+ "Pricing_Page_Hint14": "Team- och Business-licenser har en grÀns för antal incidenter/frÄgor. Om du köper ytterligare utvecklarlicenser ökar incidentgrÀnsen med {0} (för Team-licensen) eller {1} (för Business-licensen) per utvecklare.",
+ "Pricing_Page_Hint15": "Endast Enterprise License inkluderar privat support. Du kan skicka ett e-postmeddelande direkt till ABP-teamet eller stÀlla frÄgor pÄ abp.io/support/questions med ett privat biljettalternativ. De privata Àrendena Àr inte synliga för allmÀnheten.",
+ "Pricing_Page_Hint16": "Du kan ladda ner kÀllkoden för alla ABP-teman. Du kanske vill lÀgga till kÀllkoden i din lösning för att göra radikala Àndringar eller bara behÄlla den för dig sjÀlv av sÀkerhetsskÀl.",
+ "Pricing_Page_Testimonial_1": "ABP Commercial gjorde det möjligt för SC Ventures att leverera en bankklassad SaaS-plattform med silodatabas med flera hyresgÀster pÄ 9 mÄnader för att stödja leverantörskedjans kundfordringar / leverantörsskulder för finansiering av fakturor med betydande vÀrde frÄn flera integrerade ankare. ABP:s modularitet gjorde det möjligt för teamet att leverera pÄ rekordtid, klara alla VAPT och driftsÀtta den containeriserade mikrotjÀnststacken via fullstÀndig CI/CD och pipelines till produktion.",
+ "Pricing_Page_Testimonial_2": "Vi ser vÀrdet av att anvÀnda ABP Commercial för att minska omkostnaderna för kundanpassade utvecklingsprojekt. Teamet kan förena kodmönstret i olika projektströmmar. Vi ser mer potential i ramverket för att vi ska kunna bygga nya funktioner snabbare Àn tidigare. Vi litar pÄ att vi stÀndigt kommer att se vÀrdet av att utnyttja ABP Commercial.",
+ "Pricing_Page_Testimonial_3": "Vi Àlskar ABP. Vi behöver inte skriva allt frÄn grunden. Vi utgÄr frÄn out-of-the-box-funktioner och fokuserar bara pÄ det vi verkligen behöver skriva. Dessutom Àr ABP vÀlarkitekterat och koden Àr av hög kvalitet med fÀrre buggar. Om vi hade varit tvungna att skriva allt vi behövde pÄ egen hand hade vi kanske fÄtt lÀgga ner flera Är. Ytterligare en sak vi gillar Àr att den nya versionen, problemfixningen eller förbÀttringen kommer ut vÀldigt snart, varannan vecka. Vi vÀntar inte för lÀnge.",
+ "Pricing_Page_Testimonial_4": "ABP Commercial Àr en fantastisk produkt som jag skulle rekommendera. Kommersiella produkter till marknaden för vÄra kunder i en enda konfigurerbar plattform. Den starthjÀlp som ramverket och verktygen ger alla team Àr vÀrd varenda krona. ABP Commercial var det som passade bÀst för vÄra behov.",
+ "Pricing_Page_Testimonial_5": "ABP Framework Ă€r inte bara ett ramverk, utan ocksĂ„ en guide för projektutveckling/hantering, eftersom det ger utbildning i DDD, GenericRepository, DI, Microservice och Modularity. Ăven om du inte kommer att anvĂ€nda sjĂ€lva ramverket kan du utveckla dig sjĂ€lv med abp.io/docs som Ă€r vĂ€l och professionellt förberedda (OpenIddict, Redis, Quartz etc.). Eftersom mĂ„nga saker Ă€r förbyggda förkortar det projektutvecklingstiden avsevĂ€rt (t.ex. inloggningssida, undantagshantering, datafiltrering, seeding, revisionsloggning, lokalisering, automatisk API-kontroller etc.) Som ett exempel frĂ„n vĂ„r applikation har jag anvĂ€nt Local Event Bus för lagerstyrning. SĂ„ jag kan hantera orderrörelser genom att skriva lagerhanterare. Det Ă€r underbart att inte förlora tid för CreationTime, CreatorId. De fylls i automatiskt.",
+ "Pricing_Page_Testimonial_6": "ABP Framework Àr ett bra ramverk men det tar tid att förstÄ de olika lager, klasser och bibliotek som det anvÀnder (sÀrskilt ABP). Jag tillbringade mycket tid med att lÀsa kodbasen, men ABP Commercial sparade oss tid nÀr vi skapade projektspecialitetsenheterna (AR) och förvaret kopplat till var och en av dem. Jag gillade ocksÄ det tillvÀgagÄngssÀtt som anvÀnds i ABP Àr mycket moget; vi vet Àr baserat pÄ DDD och monolit.",
+ "Pricing_Page_Testimonial_7": "Som ett nystartat företag mÄste vi iterera snabbt och spendera minimal tid pÄ standardfunktioner och icke-kÀrnfunktioner.\nVÄra ingenjörer strÀcker sig frÄn mycket erfarna till juniora ingenjörer, och vi behövde en gemensam förstÄelse och ett sÀtt att dela teknisk och domÀnkunskap, ABP gjorde det möjligt för oss att göra detta tack vare deras fantastiska guider och dokumentation.\nDet finns saker som vi inte har behövt oroa oss för eftersom de fungerar direkt med ABP.\nABP hjÀlpte oss att effektivisera snabb prototyping och utveckling, mindre Àn 4 veckor frÄn funktionsstart till produktion. Med alla premiumfunktioner som ingÄr i licensen har ABP gett oss \"Startup in a Box\" pÄ Software Engineering-sidan.",
+ "Pricing_Page_Testimonial_8": "Jag skulle rekommendera ABP commercial till alla som vill utöka utbudet av produkter som Àr tillgÀngliga för sina kunder. Det Àr fantastiskt nÀr man behöver anvÀnda en distribuerad företagsmiljö (Angular, WPF, Win&Linux). Förutom deras produkter Àlskar vi deras support, som gör vÄrt jobb snabbare och enklare. Vi vet redan att vi har hittat en bra partner för framtiden som kommer att stödja oss i att expandera vÄr verksamhet.",
+ "Pricing_Page_Testimonial_9": "Vi Àr ett företag med 2 anstÀllda som har varit verksamma i över 20 Är.\nNÀr det gÀller vÄr erfarenhet av ABP Commercial kontaktades vi av en kund som ville att vi skulle utveckla en ny personalapplikation i en modern miljö för att ersÀtta deras 25 Är gamla Access-applikation. Vi bestÀmde oss för att gÄ över frÄn en desktoplösning till en webbaserad lösning.\n\nVid den tidpunkten hade vi mycket liten kunskap om webbapplikationer och .NET, men vi snubblade över ABP Commercial, och med hjÀlp av ABP Framework, teknisk dokumentation och ABP Suite kunde vi inte bara utveckla applikationen enligt kundens specifikationer utan ocksÄ framgÄngsrikt arbeta i en .NET-miljö inom ett Är.",
+ "AbpBookDownloadArea_ClaimYourEBook": "Gör ansprÄk pÄ din Mastering ABP Framework e-bok",
+ "AddMemberModal_Warning_1": "Om det anvÀndarnamn som du försöker lÀgga till inte finns i systemet, be din teammedlem att registrera sig pÄ {0} och dela anvÀndarnamnet pÄ hans/hennes konto med dig.",
+ "MyOrganizations_Detail_WelcomeMessage": "VĂ€lkommen till din organisation, {0}",
+ "MyOrganizations_Detail_OrganizationManagement": "Organisation Förvaltning",
+ "OrganizationDisplayName": "Organisationens visningsnamn",
+ "MyOrganizations_Detail_EditDisplayName": "Redigera visningsnamn",
+ "MyOrganizations_Detail_UpgradeYourLicense": "Uppgradera din licens",
+ "MyOrganizations_Detail_LicenseStartAndExpiryDate": "Licensens startdatum - utgÄngsdatum",
+ "MyOrganizations_Detail_OwnerRightInfo": "Du anvÀnder {0} av din {1} Àgares rÀttigheter.",
+ "MyOrganizations_Detail_CopyApiKey": "Kopiera nyckeln",
+ "MyOrganizations_Detail_ApiKeyDescription": "API-nyckeln Àr token för PRO-paket som finns pÄ {1}.",
+ "MyOrganizations_Detail_YourPrivateNugetSource": "Din privata NuGet-kÀlla Àr {0}",
+ "MyOrganizations_Detail_PrivateNugetSourceWarning": "Detta lÀggs automatiskt till som en feed till din NuGet.Config i din ABP-lösning. Dela inte din privata nyckel med obehöriga anvÀndare!",
+ "MyOrganizations_Detail_DeveloperSeatInfo": "Du anvÀnder {0} av dina {1} platser för utvecklare.",
+ "NeedMoreSeatsForYourTeam": "Behöver du fler platser för ditt team?",
+ "MyOrganizations_Detail_PricePerYear": "{0} / per Är",
+ "MyOrganizations_Detail_PurchaseDeveloperSeats": "Köpa platser för utvecklare",
+ "Invoices": "Fakturor",
+ "RequestInvoice": "BegÀr faktura",
+ "OrderNumber": "BestÀllningsnummer",
+ "Products": "Produkter",
+ "TotalPrice": "Totalt pris",
+ "ThereIsNoInvoice": "Det finns ingen faktura",
+ "MyOrganizations_Detail_PaymentProviderInfo": "Om du har köpt din licens via {0} gateway skickas PDF-fakturan till din e-postadress, se {0} fakturering.",
+ "MyOrganizations_Detail_PayUInfo": "Om du har köpt via Iyzico-gatewayen klickar du pÄ knappen \"BegÀr faktura\" och fyller i faktureringsinformationen.",
+ "MyOrganizations_Detail_ConclusionInfo": "Din fakturabegÀran kommer att behandlas inom {0} arbetsdagar.",
+ "ExtendYourLicense": "FörlÀng din {0} licens",
+ "PurchaseLicense": "Köp {0} licens",
+ "DownloadInvoiceModal_DownloadInvoice": "Ladda ner faktura",
+ "DownloadInvoiceModal_SaveInformationOnlyOnce": "Du kan bara spara din faktureringsinformation en gÄng.",
+ "InvoiceModal_EnterCompanyName": "Ange ditt juridiska företagsnamn...",
+ "InvoiceModal_EnterCompanyAddress": "Ange din juridiska företagsadress...",
+ "InvoiceModal_EnterTaxNumber": "Ange ditt TAX/VAT-nummer om det finns tillgÀngligt...",
+ "RequestInvoiceModal_EnterNotes": "Ytterligare information för din faktura... Denna anteckning kommer att skrivas i anteckningsavsnittet pÄ fakturan.",
+ "PrePayment_PayWithIyzico": "Du kommer att betala med Iyzico",
+ "ContinueToCheckout": "FortsÀtt till kassan",
+ "PrePayment_IyzicoRedirectionInfo": "Du kommer att omdirigeras till Iyzico Payment Gateway för att slutföra ditt köp pÄ ett sÀkert sÀtt.",
+ "PrePayment_IyzicoAcceptVisaAndMasterCard": "Iyzico tar emot Visa och MasterCard.",
+ "Purchase": "Köp",
+ "AcceptTermsAndConditions": "Jag har lÀst, förstÄtt och accepterar integritetspolicy, villkor och EULA.",
+ "AcceptTermsAndConditionsWarningMessage": "VĂ€nligen acceptera integritetspolicyn och villkoren",
+ "SelectGatewayToContinue": "VÀnligen vÀlj en Gateway för att fortsÀtta!",
+ "GatewaySelection_SelectGateway": "VĂ€lj en betalningsportal",
+ "GatewaySelection_RedirectionMessage": "DÀrefter kommer du att omdirigeras till den valda betalningsgatewayens webbplats för transaktionen.",
+ "PaymentSucceed_PaymentSuccessMessage": "Betalning framgÄngsrik",
+ "PaymentSucceed_ThanksForPurchase": "Tack för ditt köp!",
+ "PaymentSucceed_CreateYourOrganization": "Skapa din organisation",
+ "PaymentSucceed_AddMeAsDeveloper": "Jag Àr ocksÄ utvecklare, lÀgg till mig som utvecklare i min organisation.",
+ "PaymentSucceed_CreateOrganization": "Skapa organisation",
+ "PaymentSucceed_OrganizationDescription": "En organisation bestĂ„r av utvecklare och Ă€gare. Utvecklarna Ă€r anvĂ€ndare som skriver kod i ABP-projektet och som kommer att dra nytta av webbplatsen {1}. Ăgarna Ă€r anvĂ€ndare som tilldelar utvecklarplatser och hanterar licensiering.",
+ "PaymentSucceed_ViewOrganization": "Klicka hÀr för att se organisationen",
+ "Purchase_TotalAnnualPrice": "TOTALT (Ärsavgift)",
+ "Purchase_TrainingPrice": "Pris för utbildning",
+ "Purchase_OnboardingTraining": "Live-utbildning i onboarding och utveckling av webbapplikationer",
+ "TotalDeveloperPrice": "Totalt pris för utvecklare",
+ "Purchase_PricePerDeveloper": "{0} per utvecklare",
+ "Purchase_IncludedDeveloperInfo": "{0} {1} ingÄr.",
+ "Purchase_LicenseExtraDeveloperPurchaseMessage": "I {0} licens ingÄr {1} utvecklare. Du kan lÀgga till ytterligare utvecklare.",
+ "StartupTemplates_Page_Title": "ABP Startup Mallar",
+ "StartupTemplates_Page_Description": "Kickstarta ditt nya projekt med ABP:s appmallar! LÀmna alla infrastrukturaspekter till ABP och gör det du gör bÀst; fokusera pÄ ditt arbete...",
+ "MicroserviceStartupSolutionForDotnet": "Microservice Startup-lösning för .NET",
+ "MonolithSolutionForDotnet": "Monolitisk (modulÀr) lösning för .NET",
+ "TrainingDetailsHeaderInfo_TrainingHour": "{0} timmar",
+ "Trainings_Content": "Utbildningens innehÄll",
+ "Trial_Page_StartYourFreeTrial": "Starta din gratis provperiod.",
+ "TrialLicenseFeatures": "Du kommer att kunna dra nytta av alla ABP:s kommersiella funktioner",
+ "TrialPeriodDays": "Du kommer att ha en {0} dagars teamlicens",
+ "TrialForumSupportIncident": "Du kommer att ha {0} forum support incidenter",
+ "Contact_Page_Title": "Kontakta oss",
+ "Contact_Page_Description": "Kontakta oss om du har frÄgor om licenser, tillÀggstjÀnster, förfrÄgningar eller feedback om ABP. Vi Àr hÀr för att hjÀlpa dig!",
+ "Demo_Page_Title": "Skapa en demo",
+ "Demo_Page_Description": "Skapa en gratis demo för att se ett exempel pÄ en ansökan som skapats med hjÀlp av ABP-startmallen. Upprepa inte dig sjÀlv för vanliga applikationskrav.",
+ "Discounted_Page_Title": "Rabatterad prissÀttning",
+ "Discounted_Page_Description": "VÀlj de funktioner och den funktionalitet som ditt företag behöver redan idag. Köp en kommersiell licens och skapa obegrÀnsat med projekt",
+ "Faq_Page_Title": "Vanliga frÄgor och svar",
+ "Faq_Page_Description": "Hitta svar pÄ vanliga frÄgor om ABP Framework i vÄr FAQ-sektion, som tÀcker olika Àmnen och frÄgor.",
+ "Faq_Page_SwiftCode": "SWIFT-kod",
+ "Faq_Page_BankName": "Bankens namn",
+ "Faq_Page_AccountName": "Kontots namn",
+ "Faq_Page_AccountNumber": "Kontonummer",
+ "Faq_Page_Currency": "Valuta",
+ "Faq_Page_VatNumber": "Momsregistreringsnummer",
+ "Faq_Page_OtherCurrenciesInfo": "För andra valutor, se alla konton",
+ "ProjectCreatedSuccess_Page_Title": "Ditt projekt skapat",
+ "ProjectCreatedSuccess_Page_Description": "Ditt ABP-projekt har skapats framgÄngsrikt!",
+ "Suite_Page_Title": "ABP-svit",
+ "Suite_Page_Description": "Möt ABP Suite, ett verktyg för snabb applikationsutveckling som ökar produktiviteten och effektiviteten. Skapa CRUD-sidor pÄ nÄgra minuter!",
+ "Themes_Page_Title": "ABP Teman",
+ "Themes_Page_Description": "Utseendet Àr viktigt! Vi presenterar LeptonX Theme, ett modernt, anpassningsbart och flexibelt tema som skapar en unik anvÀndarupplevelse.",
+ "Tools_Page_Title": "ABP Verktyg",
+ "Tools_Page_Description": "Utforska de verktygslÄdor som ABP tillhandahÄller och som ökar utvecklingsproduktiviteten och effektiviserar din utveckling.",
+ "DeveloperPrice": "Pris för utvecklare",
+ "AdditionalDeveloperPaymentInfoSection_AdditionalDevelopers": "{0} utvecklare",
+ "LicenseRemainingDays": "i {0} dagar",
+ "ExtendPaymentInfoSection_Description": "Genom att förlÀnga/förnya din licens kommer du att fortsÀtta att fÄ premium support. Du kommer ocksÄ att kunna fÄ större eller mindre uppdateringar för moduler och teman. Du kommer att kunna fortsÀtta skapa nya projekt. Och du kommer fortfarande att kunna anvÀnda ABP Suite som pÄskyndar din utveckling.",
+ "LicenseRenewalPrice": "Pris för förnyelse av licens",
+ "LicensePrice": "Licenspris",
+ "TrialLicensePaymentInfoSection_Description": "Köp licens: Genom att köpa en licens kommer du att fortsÀtta att fÄ premium support. Du kommer ocksÄ att kunna fÄ större eller mindre uppdateringar för moduler och teman. Du kommer att kunna fortsÀtta skapa nya projekt. Och du kommer fortfarande att kunna anvÀnda ABP Suite som pÄskyndar din utveckling.
Se jÀmförelsetabellen för licenser för att kontrollera skillnaderna mellan licenstyperna.",
+ "SelectTargetLicense": "VÀlj mÄllicens",
+ "UpgradePaymentInfoSection_ExtendMyLicenseForOneYear": "Ja, förlÀnga min licens utgÄngsdatum med 1 Är.",
+ "UpgradePaymentInfoSection_WantToExtendLicense": "Vill du förlÀnga din licens med ytterligare 1 Är?",
+ "UpgradePaymentInfoSection_UpgradingWillNotExtendLicense": "Uppgradering kommer inte att förlÀnga licensens utgÄngsdatum!",
+ "UpgradePaymentInfoSection_LicenseUpgradeDescription": "Genom att uppgradera din licens kommer du att bli befordrad till en högre licenstyp, vilket gör att du kan fÄ ytterligare fördelar. Se jÀmförelsetabellen för licenser för att kontrollera skillnaderna mellan licenstyperna.",
+ "Welcome_Page_UseSameCredentialForCommercialWebsites": "AnvÀnd samma autentiseringsuppgifter för bÄde abp.io och abp.io/support/questions.",
+ "WatchCrudPagesVideo": "Titta pÄ videon \"Skapa CRUD-sidor med ABP Suite\"!",
+ "WatchGeneratingFromDatabaseVideo": "Titta pÄ videon \"ABP Suite: Generera CRUD-sidor frÄn befintliga databastabeller\" Video!",
+ "WatchTakeCloserLookVideo": "Titta pÄ videon \"Ta en nÀrmare titt pÄ kodgenerering: ABP Suite\" Video!",
+ "ConfirmedEmailAddressRequiredToStartTrial": "Du mÄste ha en bekrÀftad e-postadress för att kunna starta en testlicens.",
+ "EmailVerificationMailNotSent": "E-postverifiering mail kunde inte skickas.",
+ "GetConfirmationEmail": "Klicka hÀr för att fÄ ett verifieringsmejl om du inte har fÄtt det tidigare.",
+ "WhichLicenseTypeYouAreInterestedIn": "Vilken licenstyp Àr du intresserad av?",
+ "DontTakeOurWordForIt": "Ta inte vÄrt ord för det...",
+ "BlazoriseLicense": "MÄste vi köpa en Blazorise-licens?",
+ "ExtendPaymentInfoSection_DeveloperPrice": "{0}x Ytterligare utvecklare",
+ "ExtendPaymentInfoSection_DiscountRate": "Rabatt {0}%.",
+ "TotalNetPrice": "Totalt nettopris",
+ "EFCore": "Entity Framework Core",
+ "All": "Alla",
+ "Mvc": "MVC",
+ "DataBaseProvider": "Dataleverantör",
+ "UIFramework": "Ramverk för anvÀndargrÀnssnitt",
+ "LeptonXThemeForDashboard": "LeptonX Theme för din Admin Dashboard av",
+ "AbpPlatform": "ABP-plattform",
+ "YouDeserveGoodUXUI": "Du förtjÀnar ett bra UI och ett bÀttre UX. LeptonX Theme by ABP Àr hÀr för att tjÀna det.",
+ "ViewLiveDemo": "Visa demo för live-tema",
+ "GetLeptonX": "Skaffa LeptonX nu",
+ "SeeLeptonXDocumentation": "Se LeptonX dokumentation",
+ "SeeLeptonDocumentation": "Se Lepton Dokumentation",
+ "SimplifiedMenu": "Förenklad meny",
+ "SimplifiedMenuDescription": "Du kan enkelt hitta den sida du letar efter genom att filtrera i menyn",
+ "YourFavoritePages": "Dina favoritsidor inom rÀckhÄll",
+ "YourFavoritePagesDescription": "LÀgg enkelt till eller ta bort sidan frÄn favoriter genom att klicka pÄ stjÀrnikonen i det övre högra hörnet av sidan.",
+ "BreadCrumbs": "Breadcrumb för sömlös vÀxling",
+ "BreadCrumbsDescription": "Med Breadcrumb kan du vÀxla till sidorna pÄ samma nivÄ med ett klick, Àven nÀr vÀnstermenyn Àr stÀngd, och det fungerar pÄ surfplattor och mobiler!",
+ "YourMenu": "Din meny som du vill ha den",
+ "YourMenuDescription": "Anpassa de direktklickbara ikonerna och rullgardinsmenyerna i anvÀndarmenyn som du vill. AnvÀndarmenyn Àr helt anpassningsbar efter dina behov",
+ "RtlSupport": "RTL-stöd för ditt sprÄk",
+ "RtlSupportDescription": "LeptonX Theme stöder RTL för ditt sprÄk. SprÄkalternativen finns i instÀllningsmenyn sÄ att du kan Àndra sprÄk.",
+ "YourColors": "Dina fÀrger i grÀnssnittet för din adminpanel",
+ "YourColorsDescription": "LeptonX Theme fungerar enligt dina systeminstÀllningar och har alternativ för dashboard light theme, dashboard dark theme och dashboard semi-dark theme.",
+ "ArrangeContentWidth": "Ordna enkelt bredden pÄ ditt innehÄll",
+ "ArrangeContentWidthDescription": "Ăndra enkelt bredden pĂ„ din innehĂ„llsyta.",
+ "LeptonXCompatibleWith": "LeptonX Theme Àr kompatibelt med",
+ "MobileResponsiveTemplate": "Mobil responsiv mall",
+ "MobileResponsiveTemplateDescription1": "FÄ tillgÄng till LeptonX adminpanel frÄn vilken enhet du vill.",
+ "MobileResponsiveTemplateDescription2": "Den Àr utformad för att du enkelt ska kunna anvÀnda den i alla dina enheter. Den Àr responsiv pÄ mobila enheter och surfplattor.",
+ "TopMenuLayoutOption": "Alternativ för layout av toppmeny",
+ "TopMenuLayoutOptionDescription1": "Om du vill konfigurera din webbplats med samma adminpanel Àr det möjligt att göra det med LeptonX Theme!",
+ "TopMenuLayoutOptionDescription2": "Prova bara LeptonX toppmenylayout för att fÄ det att hÀnda!",
+ "EasilyCustomizable": "LÀtt att anpassa till ditt varumÀrkes fÀrger",
+ "EasilyCustomizableDescription1": "Du kan anpassa LeptonX-temat med bara nÄgra fÄ SCSS-variabler. Ingen ÄsidosÀttning, ingen extra CSS-belastning!",
+ "EasilyCustomizableDescription2": "Med LeptonX kan du ordna din adminpanel precis som du vill.",
+ "IndependentLayout": "Oberoende layout och innehÄllsyta",
+ "IndependentLayoutDescription1": "LeptonX:s layoutinfrastruktur utformades helt separat frÄn innehÄllet.",
+ "IndependentLayoutDescription2": "Detta innebÀr att du fritt kan utforma ditt projekt med en annan innehÄllsstruktur Àn Bootstrap om du vill.",
+ "MostUsedLibraries": "De mest anvÀnda biblioteken integrerade med LeptonX",
+ "MostUsedLibrariesDescription1": "LeptonX innehÄller dina mest anvÀnda bibliotek. Det gör att du enkelt kan anvÀnda bibliotek som ApexCharts, DataTables, DropZone, FullCalender, JSTree, Select2 och Toastr.",
+ "MostUsedLibrariesDescription2": "LeptonX stöder ocksÄ MVC Angular och Blazor-specifika bibliotek.",
+ "CreateAndCustomize": "Skapa och anpassa de sidor du behöver pÄ nÄgra sekunder med LeptonX anpassade sidor",
+ "CreateAndCustomizeDescription": "Genom att anvÀnda LeptonX Theme fÄr du ocksÄ tillgÄng till mÄnga fÀrdiga HTML-sidor. Dessa inkluderar mÄnga sidor som inloggningssida, blogg, FAQ, prenumerationslista, faktura, prissÀttning och filhantering.",
+ "LeptonThemeForAdmin": "Lepton Theme för din adminpanel genom att",
+ "LeptonThemeForAdminDescription": "Lepton Theme Àr fortfarande tillgÀngligt och kommer att underhÄllas. Om du vill byta till LeptonX Theme som Lepton Theme-anvÀndare kan du se dokumentationen för att lÀra dig hur du gör.",
+ "LeptonCompatibleWith": "Lepton Theme Àr kompatibelt med",
+ "BlackFridayDiscount": "Black Friday-rabatt",
+ "UpgradePaymentInfoSection_DeveloperPrice": "{0} för {1} ytterligare utvecklare",
+ "Upgrade": "Uppgradering",
+ "Renewal": "Förnyelse",
+ "UpgradePaymentInfoSection_LicensePrice": "{0} licens",
+ "UpgradePaymentInfoSection_LicenseRenewalPrice": "Förnyelse av licens",
+ "Total": "Totalt",
+ "SupportPolicyFaqTitle": "Vilken Àr er supportpolicy?",
+ "TotalDevelopers": "Totalt {0} utvecklare",
+ "CustomPurchaseExplanation": "SkrÀddarsydd för dina specifika behov",
+ "WhereDidYouHearAboutUs": "Var har du hört talas om oss?",
+ "Twitter": "Twitter",
+ "Facebook": "Facebook",
+ "Youtube": "YouTube",
+ "Google": "Google",
+ "Github": "GitHub",
+ "Friend": " FrÄn en vÀn",
+ "Other": "Ăvriga",
+ "WhereDidYouHearAboutUs_explain": "Ange ...",
+ "DeletingMemberWarningMessage": "\"{0}\" kommer att tas bort frÄn listan över utvecklare. Om du vill kan du tilldela denna tomma plats till en annan utvecklare senare.",
+ "AdditionalInfo": "Om antalet platser för utvecklare överstiger dina krav kan du minska dem. Du kan skicka e-post till info@abp.io för att ta bort nÄgra av dina utvecklarplatser. Om du rensar bort oanvÀnda utvecklarplatser minskar kostnaden för licensförnyelse. Om du vill kan du Äterköpa ytterligare utvecklarplatser inom din aktiva licensperiod. Observera att eftersom det finns {0} utvecklare i det hÀr licenspaketet kan du inte minska detta antal.",
+ "LinkExpiredErrorMessage": "LÀnken du försöker komma Ät har gÄtt ut.",
+ "ExpirationDate": "UtgÄngsdatum",
+ "SpringCampaignDiscount": "Rabatt pÄ vÄrkampanjen",
+ "WhyUseAbpIoPlatform": "Varför ska jag anvÀnda ABP Platform istÀllet för att skapa en ny lösning frÄn grunden?",
+ "WhyUseAbpIoPlatformFaqExplanation": "Se den sidan för en detaljerad förklaring av varför anvÀndning av ABP Platform har en betydande fördel jÀmfört med att göra allt sjÀlv.",
+ "EulaPageTitle": "Licensavtal för slutanvÀndare (EULA)",
+ "PrivacyPolicyPageTitle": "Integritetspolicy - Cookiepolicy",
+ "TermsConditionsPageTitle": "Villkor och anvisningar",
+ "TrainingsPageTitle": "Utbildningspaket",
+ "ModulesPageTitle": "ABP-moduler",
+ "ModulesPageDescription": "Utöka och anpassa din applikation med ABP:s modulÀra arkitektur, som ger flexibilitet och skalbarhet.",
+ "Volo.AbpIo.Commercial:040001": "API-Ätkomstnyckeln Àr felaktig.",
+ "GetLepton": "Skaffa Lepton nu",
+ "MyOrganizations_Detail_LicenseStartDate": "Startdatum",
+ "MyOrganizations_Detail_LicenseExpiryDate": "UtgÄngsdatum",
+ "BlazoriseSupport": "Hur fÄr jag Blazorise-licensnyckeln och support frÄn Blazorise-teamet?",
+ "BlazoriseSupportExplanation": "Följ stegen nedan för att fÄ support frÄn Blazorise-teamet och fÄ din Blazorise-licensnyckel:",
+ "BlazoriseSupportExplanation1": "Registrera dig för ett nytt konto pÄ blazorise.com/support/register med samma e-postadress som ditt abp.io-konto. LÀmna posten \"Licensnyckel\" tom. Det mÄste vara samma e-postadress som ditt e-postkonto pÄ abp.io.",
+ "BlazoriseSupportExplanation2": "Verifiera din e-postadress genom att kolla din e-postlÄda. Kontrollera din skrÀppostlÄda om du inte ser ett e-postmeddelande i din inkorg!",
+ "BlazoriseSupportExplanation3": "Logga in pÄ Blazorise supportwebbplats pÄ blazorise.com/support/login.",
+ "BlazoriseSupportExplanation4": "Om du har en aktiv ABP Commercial License kommer du ocksÄ att ha en Blazorise PRO-licens. Du kan fÄ din Blazorise-licensnyckel pÄ blazorise.com/support/user/manage/license.",
+ "BlazoriseSupportExplanation5": "Du kan stÀlla dina frÄgor pÄ supportwebbplatsen och generera en produkttoken för din applikation.",
+ "AbpLiveTrainingPackages": "ABP Live utbildningspaket",
+ "Releases": "UtgÄvor",
+ "ReleasesDescription": "Den hÀr sidan innehÄller detaljerad information om varje release. Du kan se alla stÀngda pull requests för en specifik release. För övergripande milstolpsutvecklingar kan du kolla in sidan med kortfattade releaseanteckningar.",
+ "ReleaseDate": "Utgivningsdatum",
+ "Labels": "Etiketter",
+ "PreRelease": "Förhandsrelease",
+ "AllTypes": "Alla typer",
+ "Enhancement": "FörbÀttring",
+ "Bug": "Insekt",
+ "Feature": "Funktion",
+ "AllUIs": "Alla anvÀndargrÀnssnitt",
+ "MVC": "MVC",
+ "BlazorServer": "Blazor Server",
+ "MAUI": "MAUI",
+ "HowItWorks_Page_Title": "Hur fungerar det?",
+ "HowItWorks_Page_Description": "FörstÄ hur ABP Framework fungerar med detaljerad dokumentation, inklusive guider och bÀsta praxis.",
+ "HowItWorks_Description1": "ABP utökar .NET-plattformen. SÄ allt du kan göra med en vanlig .NET-lösning Àr redan möjligt med ABP. Det gör det enkelt att komma igÄng med en lÄg inlÀrningskurva.",
+ "HowItWorks_Description2": "NÀr du vÀl har börjat lÀra dig och anvÀnda ABP-funktionerna kommer det att bli mycket roligare Àn nÄgonsin att utveckla din programvara.",
+ "HowItWorks_Description3": "Den hÀr sidan förklarar i princip hur du anvÀnder ABP Platform som .NET-utvecklare.",
+ "CreateANewSolution_Description1": "Allt börjar med att skapa en ny ABP-integrerad .NET-lösning.",
+ "StartWithStartupTemplates": "Starta en av de förbyggda mallarna för startup-lösningar",
+ "SimpleMonolithApplicationTemplate": "Enkel mall för monolitisk applikation",
+ "LayeredApplicationTemplate": "ModulÀr monolitisk applikationsmall",
+ "MicroserviceSolutionTemplate": "Mall för mikroservicelösning",
+ "CreateEmptySolutionAndUseAbp": "Eller skapa en ny tom .NET-lösning och installera ABP NuGet & NPM packages sjÀlv.",
+ "CreatingSolutionWithMultipleOptions": "Det finns flera alternativ för anvÀndargrÀnssnitt och databas nÀr du skapar en ny lösning.",
+ "UIFrameworkOptions": "Alternativ för anvÀndargrÀnssnitt",
+ "DotnetSolutionWithoutDependency": "Nu har du en vanlig .NET-lösning i din lokala dator som inte Àr beroende av nÄgon molnplattform eller extern tjÀnst.",
+ "CheckTheDocumentForDetails": "Du kan kontrollera {1} dokumentet för detaljer.",
+ "UIAndDatabaseIndependent": "ABP kan fungera med alla anvÀndargrÀnssnitt och alla databasleverantörer som stöds av .NET.\n Dessa anvÀndargrÀnssnitt och databasleverantörer Àr dock förintegrerade och vÀldokumenterade.",
+ "InstallAbpModules": "Installera ABP-moduler",
+ "DevelopYourSolution": "Utveckla din lösning",
+ "DeployAnywhere": "Distribuera var som helst",
+ "InstallAbpModule_Description1": "ABP Àr ett modulÀrt ramverk för applikationsutveckling. Mallarna för startup-lösningar levereras redan med de viktigaste modulerna installerade.\n Men det finns fler applikationsmoduler som du kanske vill anvÀnda i din lösning.",
+ "InstallAbpModule_Description2": "Varje modul bestÄr av ett fÄtal NuGet- och NPM-paket och har ett installationsdokument. ABP Studio gör det mesta av arbetet automatiskt, sedan konfigurerar eller finjusterar du modulen manuellt baserat pÄ dess dokumentation.",
+ "DevelopYourSolution_Description1": "ABP:s infrastruktur gör att du kan fokusera pÄ din egen affÀrskod genom att automatisera det repetitiva arbetet och tillhandahÄlla förbyggd infrastruktur och applikationsfunktioner.",
+ "DevelopYourSolution_Description2": "I följande kodblock kan du se hur ABP sömlöst integreras i din kod och automatiserar de repetitiva uppgifterna Ät dig.",
+ "DevelopYourSolution_Description3": "Ăven i detta kortkodsblock gör ABP en hel del saker Ă„t dig.",
+ "DevelopYourSolution_Description4": "Det ger basklasser för att tillÀmpa konventioner, som\n dependency injection. Generiska\n repository tjÀnster ger ett bekvÀmt sÀtt att\n sÀtt att interagera med databasen. Deklarativ\n auktorisering arbetar med ett finjusterat behörighetssystem.",
+ "DevelopYourSolution_Description5": "ABP automatiserar helt och hÄllet\n arbetsenhet (för databasanslutning och transaktionshantering),\n undantagshantering,\n validering\n och auditloggning. Det ger mÄnga fler byggstenar för att förenkla dina dagliga utvecklingsuppgifter och fokusera pÄ din egen kod medan du skapar produktionsklara\n applikationer.",
+ "DevelopYourSolution_Description6": "Du kan förestÀlla dig hur lÄngt och komplicerat det kodblocket kan bli om du skulle göra allt manuellt.",
+ "SuiteCrudGenerationInFewSeconds": "Förutom att handkoda din lösning kan du skapa fullt fungerande avancerade CRUD-sidor pÄ nÄgra minuter med hjÀlp av ABP Suite-verktyget. Det genererar koden till din lösning, sÄ att du kan finjustera den utifrÄn dina anpassade krav.",
+ "DeployAnywhere_Description1": "I slutÀndan har du en ren .NET-lösning. Du kan distribuera din lösning till din egen server, till en molnplattform, till Kubernetes eller var du vill. Du kan distribuera till sÄ mÄnga servrar som du vill. ABP Àr ett agnostiskt verktyg för driftsÀttningsmiljöer.",
+ "ExpertiseAbpFramework": "Expertis ABP",
+ "ExpertiseAbpFramework_Description1": "Vill du gÄ lÀngre Àn grunderna och fÄ expertis med ABP Platform?",
+ "FreeDownload": "Fri nedladdning",
+ "HavingTrouble": "Har du problem?",
+ "HavingTrouble_Description1": "Har du problem med att utveckla din lösning? Vi finns hÀr för dig! AnvÀnd ABP:s supportplattform\n eller skicka ett e-postmeddelande för att fÄ hjÀlp direkt frÄn Core ABP-teammedlemmarna.",
+ "WeAreHereToHelp_Description1": "Du kan blÀddra bland vÄra hjÀlpÀmnen eller söka i vanliga frÄgor,\n eller sÄ kan du stÀlla en frÄga till oss genom att anvÀnda kontaktformulÀret.",
+ "OtherModules": "Ăvriga moduler",
+ "OtherModules_Description1": "Konto, Audit Logging, Chatt, CMS Kit, Filhantering, FormulÀr, GDPR, SprÄkhantering och mer...",
+ "HowItWorks_DatabaseProviderOptions": "Alternativ för databasleverantör",
+ "SeeFAQ": "Se vanliga frÄgor",
+ "ReleaseLogs": "Release Loggar",
+ "ReleaseLogs_Tag": "{0} Loggar för frislÀppande",
+ "ReleaseLogs_Pr": "Pull Request #{0} - {1}",
+ "NoLabels": "Inga etiketter",
+ "DoesTheSubscriptionRenewAutomatically": "Förnyas abonnemanget automatiskt?",
+ "DoesTheSubscriptionRenewAutomaticallyExplanation": "ABP-plattformen har inte en faktureringsmodell för automatisk förnyelse. DÀrför kommer din prenumeration inte att förnyas automatiskt i slutet av din licensperiod. Om du vill fortsÀtta att ha fördelarna med ABP-plattformen mÄste du förnya den manuellt pÄ sidan för organisationshantering. Om du har flera organisationer klickar du pÄ knappen \"Hantera\" pÄ din organisation som löper ut och klickar sedan pÄ knappen \"FörlÀng nu\" för att förnya din licens. Du kanske ocksÄ vill ta en titt pÄ avsnittet Vad hÀnder nÀr min licens gÄr ut?.",
+ "ExtraQuestionCreditsFaqTitle": "Kan jag köpa extra poÀng för supportfrÄgor?",
+ "ExtraQuestionCreditsFaqExplanation": "Ja, det kan du göra. För att köpa extra frÄgepoÀng, skicka ett e-postmeddelande till info@abp.io med din organisations namn. HÀr Àr prislistan för de extra frÄgekrediterna: - 50 frÄgor paket $999
- 25 frÄgor paket $625
- 15 frÄgor paket $450
",
+ "AlreadyBetaTester": "Du har redan gÄtt med i betatestarprogrammet.",
+ "AbpStudio": "ABP Studio",
+ "AbpStudio_Description": "ABP Studio Àr fortfarande under utveckling. Du kan fylla i formulÀret nedan för att bli en av de första anvÀndarna.",
+ "AbpStudio_Description1": "ABP Studio Àr en plattformsoberoende skrivbordsapplikation för ABP-utvecklare.",
+ "AbpStudio_Description2": "Det Àr vÀl integrerat i ABP-ramverket och syftar till att tillhandahÄlla en bekvÀm utvecklingsmiljö för dig genom att automatisera saker, ge insikter om din lösning, vilket gör det mycket enklare att utveckla, köra och distribuera dina lösningar.",
+ "AbpStudio_ComingSoon": "Kommer snart Planerat datum för betaversion: Q4 av 2023.",
+ "AbpStudio_PlannedPreviewDate": "Planerat utgivningsdatum för förhandsvisning: Q4 Är 2023.",
+ "BetaRequest": "Beta förfrÄgan",
+ "CreateNewSolutions": "Skapa nya lösningar",
+ "CreateNewSolutions_Description1": "Du kan enkelt skapa allt frÄn enkla applikationer till modulÀra monolit- eller mikroservicelösningar med mÄnga alternativ. Du fÄr en fullstÀndig produktionsfÀrdig basprogramvarulösning för ditt företag.",
+ "ArchitectYourSolutions": "Arkitekt för dina lösningar",
+ "ArchitectYourSolutions_Description1": "Bygg enklare monolitiskt modulÀra och mikrotjÀnstbaserade lösningsstrukturer genom att skapa moduler eller tjÀnster och upprÀtta relationer mellan dem. Du kan ocksÄ installera eller avinstallera förbyggda applikationsmoduler.",
+ "ExploreYourSolution": "Utforska din lösning",
+ "ExploreYourSolution_Description1": "ABP Studio visar en vy pÄ hög nivÄ av komponenterna i din lösning och de moduler som din lösning Àr beroende av. Du kan utforska entiteter, tjÀnster, HTTP API:er och mycket mer utan att behöva öppna din kodbas.",
+ "RunMultiApplicationOrMicroserviceSolutionsInABreeze": "Kör multiapplikations- eller microservice-lösningar pÄ ett kick",
+ "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description1": "Kör en, flera eller alla tjÀnster med ett enda klick. PÄ sÄ sÀtt Àr det mycket enkelt att stoppa en tjÀnst, köra den i Visual Studio för att testa eller debugga.",
+ "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description2": "Se en lista över tjÀnster, visa HTTP-begÀran i realtid och antal undantag för varje tjÀnst.",
+ "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description3": "Se alla detaljer om alla HTTP-begÀranden som kommer till en tjÀnst.",
+ "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description4": "Utforska undantagsdetaljer i realtid i alla tjÀnster, filtrera och sök enkelt.",
+ "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description5": "Visa applikationsloggar, filtrera efter loggnivÄ eller sök efter text.",
+ "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description6": "BlÀddra genom anvÀndargrÀnssnittet i din applikation utan att lÀmna solution runner.",
+ "IntegrateToYourKubernetesCluster": "Integrera med ditt Kubernetes-kluster",
+ "IntegrateToYourKubernetesCluster_Description1": "Koppla din lokala utvecklingsmiljö till ett lokalt eller avlÀgset Kubernetes-kluster, dÀr klustret redan kör din mikrotjÀnstlösning.",
+ "IntegrateToYourKubernetesCluster_Description2": "FÄ Ätkomst till alla tjÀnster i Kubernetes med deras tjÀnstenamn som DNS, precis som om de körs pÄ din lokala dator.",
+ "IntegrateToYourKubernetesCluster_Description3": "Interceptera vilken tjÀnst som helst i det klustret, sÄ att all trafik till den intercepterade tjÀnsten automatiskt omdirigeras till din tjÀnst som körs i din lokala maskin. NÀr din tjÀnst behöver anvÀnda nÄgon tjÀnst i Kubernetes omdirigeras trafiken tillbaka till klustret, precis som om din lokala tjÀnst körs inuti Kubernetes.",
+ "GetInformed": "Bli informerad",
+ "Studio_GetInformed_Description1": "LÀmna din kontaktinformation för att fÄ information och pröva först nÀr ABP Studio har lanserats.",
+ "Studio_GetInformed_Description2": "Planerat utgivningsdatum för förhandsvisning: Q3 Är 2023.",
+ "ThankYou!": "Tack sÄ mycket!",
+ "SendBetaRequest": "Skicka Beta förfrÄgan",
+ "YouJoinedTheBetaTesterProgram": "Du har gÄtt med i betatestarprogrammet för ABP Studio.",
+ "PricingExplanation2": "30 dagars pengarna tillbaka-garanti - LĂ€s mer",
+ "MoneyBackGuaranteeText": "* 30-dagars pengarna-tillbaka-garanti pÄ alla licenser! 100% Äterbetalning pÄ Team-, 60% Äterbetalning pÄ Business- och Enterprise-licenser inom 30 dagar.",
+ "MobileApplicationStartupTemplates": "Mallar för uppstart av mobilapplikationer",
+ "MobileApplicationStartupTemplates_Description1": "Integrerade startmallar för mobilapplikationer för dina ABP-projekt.",
+ "CreatePowerfulLineOfBusinessApplicationsUsingABPMobileStartupTemplates": "Bygg kraftfulla applikationer för olika branscher med hjÀlp av ABP Mobile Startup Templates",
+ "CreatePowerfulLineOfBusinessApplicationsUsingABPMobileStartupTemplates_Description1": "ABP tillhandahÄller tvÄ startmallar för mobilapplikationer som implementerats med React Native och .NET MAUI. NÀr du skapar din nya ABP-baserade lösning kommer du ocksÄ att ha grundlÀggande startapplikationer som Àr anslutna till dina backend-API:er.",
+ "CreatePowerfulLineOfBusinessApplicationsUsingABPMobileStartupTemplates_Description2": "Applikationen har en förbyggd autentiseringstokencykel, stöd för flera sprÄk, stöd för flera behörigheter, inloggning, glömt lösenord, profilhantering och en anvÀndarhanteringssida. Du kan lÀgga till din egen affÀrslogik och anpassa den utifrÄn dina krav.",
+ "TwoFrameworkOptions": "TvÄ alternativ för ramverk",
+ "TwoFrameworkOptions_Description": "ABP tillhandahÄller bÄde React Native och .NET MAUI mobila startup-mallar. PÄ sÄ sÀtt kan du vÀlja den som bÀst passar dina behov. BÄda apparna ÄteranvÀnder kod i den högsta graden mellan iOS- och Android-plattformarna.",
+ "PreIntegratedToYourBackend": "Förintegrerad till din backend",
+ "PreIntegratedToYourBackend_Description": "ABP Mobile-applikationer Àr förintegrerade med dina backend-API:er. Den fÄr en giltig autentiseringstoken frÄn servern och gör autentiserade förfrÄgningar.",
+ "MultiLanguage": "FlersprÄkig",
+ "MultiLanguage_Description": "Det stöder redan mer Àn 10 sprÄk ur lÄdan. Du kan ocksÄ lÀgga till ytterligare sprÄk.",
+ "Arabic": "Arabiska",
+ "Czech": "Tjeckien",
+ "English": "Engelska",
+ "Hungarian": "Ungerska",
+ "Finnish": "Finska",
+ "French": "Franska",
+ "Hindi": "Hindi",
+ "Portuguese": "Portugisiska",
+ "Italian": "Italienska",
+ "Russian": "Ryska",
+ "Slovak": "Slovakien",
+ "Turkish": "Turkiska",
+ "EngageAndRetainYourCustomersWithABPMobileApps": "Engagera och behÄll dina kunder med ABP:s mobilappar",
+ "EngageAndRetainYourCustomersWithABPMobileApps_Description1": "Dina kunder vill kunna hantera sina produkter och prenumerationer var som helst och nÀr som helst. Det krÀver att organisationer skapar mobilappar som gör det möjligt för kunderna att uppfylla sina önskemÄl snabbt och smidigt.",
+ "EngageAndRetainYourCustomersWithABPMobileApps_Description2": "Med ABP Mobile apps kan du skapa högkvalitativa native mobilappar för Android och iOS... med en enda kodbas och utan att kompromissa med sÀkerhet, kvalitet eller skalbarhet.",
+ "OneCodeBaseMultipleDevices": "En kodbas Flera enheter",
+ "OneCodeBaseMultipleDevices_Description": "ABP:s mobilapplikationer Àr plattformsoberoende. De Àr redo att installeras och köras pÄ iOS- och Android-enheter, och de anpassar sig till olika formfaktorer med hjÀlp av en enda kodbas. Utvecklare behöver bara skapa anvÀndargrÀnssnittet och front-end-koden en gÄng, det finns inget behov av att anpassa koden för varje enhet du vill stödja.",
+ "ComesWithTheSourceCode": "Levereras med kÀllkoden",
+ "ComesWithTheSourceCode_Description": "Mobilapparna Àr försedda med kÀllkod. Anpassa enkelt UX/UI för dina appar för att uppfylla riktlinjerna för varumÀrkesprofilering.",
+ "Purchase_OneYearPrice": "1 Är Pris",
+ "Purchase_DeveloperSeatCount": "Antal platser för utvecklare",
+ "Purchase_DevelopersAlreadyIncluded": "{0} utvecklare redan inkluderade",
+ "1Year": "1 Är",
+ "{0}Years": "{0} Är",
+ "1YearLicense": "1 Ärs licens",
+ "{0}YearsLicense": "{0} Ă
r Licens",
+ "1AdditionalDeveloper": "1 ytterligare utvecklare",
+ "{0}AdditionalDevelopers": "{0} Ytterligare utvecklare",
+ "Discount": "Rabatt ({0}%)",
+ "TrainingPack": "Utbildningspaket",
+ "TrainingPackDiscount": "Rabatt pÄ utbildningspaket",
+ "Purchase_OnboardingTraining_Description": "Denna liveutbildning Àr giltig för en klass med 8 elever och denna rabatt Àr endast giltig nÀr den köps med den nya licensen. LÀs mer ",
+ "Purchase_Save": "{0}% Spara {1}",
+ "RemoveBasket": "Ta bort frÄn korgen",
+ "WhyABPIOPlatform?": "Varför ABP Platform?",
+ "DocumentAim": "Detta dokument syftar till att besvara den stora frÄgan:",
+ "DocumentAim_Description": "\"Varför ska du anvÀnda ABP Platform istÀllet för att skapa en ny lösning frÄn grunden?\"",
+ "DocumentAim_Description2": "Dokumentet presenterar utmaningarna med att bygga en modern mjukvarulösning och förklarar hur ABP hanterar dessa utmaningar.",
+ "CreatingANewSolution": "Skapa en ny lösning",
+ "CreatingANewSolution_Description": "NÀr du ska starta en ny lösning finns det mÄnga frÄgor du mÄste stÀlla dig sjÀlv, och du bör lÀgga ner mycket tid innan du börjar skriva din allra första affÀrskod.",
+ "CreatingAnEmptySolution": "Skapa en tom lösning",
+ "THEPROBLEM": "PROBLEMET",
+ "CreatingAnEmptySolution_THEPROBLEM_Description": "Ăven att skapa en nĂ€stan tom lösning Ă€r en utmaning;",
+ "CreatingAnEmptySolution_THEPROBLEM_Description2": "Hur organiserar du din kodbas mellan olika projekt?",
+ "CreatingAnEmptySolution_THEPROBLEM_Description3": "Vilka Àr lagren och hur samverkar de?",
+ "CreatingAnEmptySolution_THEPROBLEM_Description4": "Hur integrerar ni med tredjepartsbibliotek?",
+ "CreatingAnEmptySolution_THEPROBLEM_Description5": "Hur stÀller man in automatiserade tester?",
+ "ABPSOLUTION": "ABP-LĂSNING",
+ "CreatingAnEmptySolution_ABPSOLUTION_Description": "ABP tillhandahÄller en vÀlarkitekterad, skiktad och produktionsklar startup-lösning baserad pÄ Domain Driven Design-principerna. Lösningen innehÄller ocksÄ en förkonfigurerad enhet och integration test -projekt för varje lager.",
+ "CommonLibraries": "Gemensamma bibliotek",
+ "CommonLibraries_THEPROBLEM_Description": "Vilka bibliotek bör du anvÀnda för att implementera gemensamma krav? Ekosystemet för programvaruutveckling Àr mycket dynamiskt, vilket gör det svÄrt att hÄlla jÀmna steg med de senaste verktygen, biblioteken, trenderna och metoderna.",
+ "CommonLibraries_ABPSOLUTION_Description": "ABP förintegrerar populÀra, mogna och uppdaterade bibliotek i lösningen. Du behöver inte lÀgga tid pÄ att integrera dem eller fÄ dem att kommunicera med varandra. De fungerar som de ska direkt frÄn start.",
+ "UITheme&Layout": "UI Tema & Layout",
+ "UITheme&Layout_THEPROBLEM_Description": "NÀr man tar itu med anvÀndargrÀnssnittet uppstÄr en rad olika utmaningar. Det handlar bland annat om att lÀgga grunden för ett responsivt, modernt och anpassningsbart UI-kit med ett konsekvent utseende och en mÀngd funktioner som navigeringsmenyer, rubriker, verktygsfÀlt, sidfötter, widgetar med mera.",
+ "UITheme&Layout_THEPROBLEM_Description2": "Ăven om du vĂ€ljer ett fördesignat tema kan det ta flera dagars utveckling att integrera det sömlöst i ditt projekt. Ett ytterligare hinder ligger i att uppgradera sĂ„dana teman. Ofta blir temats HTML/CSS-struktur sammanflĂ€tad med din UI-kod, vilket gör framtida temaförĂ€ndringar eller uppgraderingar till komplicerade uppgifter. Denna sammanvĂ€vning av kod och design komplicerar flexibiliteten att göra justeringar lĂ€ngs linjen.",
+ "UITheme&Layout_ABPSOLUTION_Description": "ABP erbjuder ett distinkt temasystem som frigör din UI-kod frĂ„n temabegrĂ€nsningar. Teman existerar isolerat, paketerade som NuGet- eller NPM-paket, vilket gör installation eller uppgradering av teman till en frĂ„ga om minuter. Ăven om du behĂ„ller möjligheten att utveckla ditt eget tema eller integrera ett befintligt, presenterar ABP en samling polerade och moderna teman.",
+ "UITheme&Layout_ABPSOLUTION_Description2": "Dessutom finns det leverantörer av UI-komponenter som Telerik och DevExpress. Dessa leverantörer tillhandahÄller dock frÀmst enskilda komponenter, vilket innebÀr att det Àr upp till dig att skapa ditt layoutsystem. NÀr du arbetar inom ABP-baserade projekt kan du sömlöst införliva dessa bibliotek, pÄ samma sÀtt som du skulle göra i alla andra projekt.",
+ "TestInfrastructure_THEPROBLEM_Description": "Att etablera en robust testmiljö Àr en tidskrÀvande uppgift. Det handlar om att skapa dedikerade testprojekt inom din lösning, noggrant vÀlja ut de verktyg som behövs, skapa mocks för tjÀnster och databaser, skapa viktiga basklasser och verktygstjÀnster för att minimera redundant kod i testerna och ta itu med olika relaterade uppgifter.",
+ "TestInfrastructure_ABPSOLUTION_Description": "ABP Startup Templates levereras fÀrdigutrustade med konfigurerade testprojekt, vilket effektiviserar processen för dig. Det innebÀr att du redan frÄn dag ett kan börja skriva din första enhets- eller integrationstestkod utan dröjsmÄl.",
+ "CodingStandards&Training": "Kodningsstandarder och utbildning",
+ "CodingStandards&Training_THEPROBLEM_Description": "NĂ€r du har konfigurerat lösningen för utveckling mĂ„ste du vanligtvis lĂ€ra utvecklarna hur systemet fungerar och hur man bygger det med hjĂ€lp av samma överenskomna metoder. Ăven om du ger dem utbildning kan det vara svĂ„rt att hĂ„lla dokumentationen uppdaterad. Med tiden kanske varje utvecklare skriver kod pĂ„ sitt eget sĂ€tt, vilket leder till att reglerna för att skriva kod skiljer sig frĂ„n varandra.",
+ "CodingStandards&Training_ABPSOLUTION_Description": "ABP-lösningen Àr redan snyggt organiserad och har tydliga förklaringar. Steg-för-steg-handledningar och guider visar exakt hur du ska arbeta med ett ABP-projekt.",
+ "KeepingYourSolutionUpToDate": "HÄll din lösning uppdaterad",
+ "KeepingYourSolutionUpToDate_THEPROBLEM_Description": "NÀr du har pÄbörjat din utveckling mÄste du hÄlla reda pÄ de nya versionerna av de bibliotek du anvÀnder för uppgraderingar och korrigeringar.",
+ "KeepingYourSolutionUpToDate_ABPSOLUTION_Description": "Vi uppdaterar regelbundet alla paket till de senaste versionerna och testar dem före den stabila utgÄvan. NÀr du uppdaterar ditt ABP-baserade projekt uppgraderas alla dess beroenden till den senaste tekniken.",
+ "KeepingYourSolutionUpToDate_ABPSOLUTION_Description2": "Abp update CLI-kommandot hittar och uppgraderar automatiskt alla ABP-beroende NuGet- och NPM-paket i en lösning. Med ABP Àr det enklare att hÄlla sig till de senaste versionerna.",
+ "DRY": "Upprepa inte dig sjÀlv!",
+ "DRY_Description": "Att skapa en baslösning tar lÄng tid och krÀver god erfarenhet av arkitektur. Men detta Àr bara början! NÀr du börjar utveckla kommer du sannolikt att behöva skriva massor av repetitiv kod; det skulle vara fantastiskt om allt detta kunde hanteras automatiskt.",
+ "DRY_Description2": "ABP automatiserar och förenklar upprepningskoden sÄ mycket som möjligt genom att följa principen om konvention framför konfiguration. Det begrÀnsar dig dock inte nÀr du behöver vÀxla till manuell vÀxel. Kontrollen ligger alltid i dina hÀnder.",
+ "Authentication": "Autentisering",
+ "Authentication_THEPROBLEM_Description": "Single Sign On, Active Directory / LDAP-integration, OpenIddict-integration, sociala inloggningar, tvÄfaktorsautentisering, glömt / ÄterstÀllt lösenord, e-postaktivering, ny anvÀndarregistrering, kontroll av lösenordskomplexitet, lÄsning av konto vid misslyckade försök, visning av misslyckade inloggningsförsök ... etc. Vi vet att alla dessa generiska krav Àr bekanta för dig. Du Àr inte ensam!",
+ "Authentication_ABPSOLUTION_Description": "ABP tillhandahÄller alla dessa standardgrejer förimplementerade för dig som en ÄteranvÀndbar kontomodul. Du aktiverar och konfigurerar bara det du behöver.",
+ "CrossCuttingConcerns_THEPROBLEM_Description": "Cross-Cutting Concerns Àr den grundlÀggande upprepningslogik som bör implementeras för varje anvÀndningsfall. NÄgra exempel;",
+ "CrossCuttingConcerns_THEPROBLEM_Description2": "Starta transaktioner, genomföra vid framgÄng och rulla tillbaka vid fel.",
+ "CrossCuttingConcerns_THEPROBLEM_Description3": "Hantera och rapportera undantag, returnera ett korrekt felsvar till klienterna och hantera felfall pÄ klientsidan.",
+ "CrossCuttingConcerns_THEPROBLEM_Description4": "Implementera auktorisering och validering, returnera korrekta svar och hantera dessa pÄ klientsidan.",
+ "CrossCuttingConcerns_ABPSOLUTION_Description": "ABP automatiserar eller förenklar alla vanliga övergripande problem. Du skriver bara kod som Àr viktig för din verksamhet, och ABP hanterar resten genom konventioner.",
+ "ArchitecturalInfrastructure": "Arkitektonisk infrastruktur",
+ "ArchitecturalInfrastructure_THEPROBLEM_Description": "Du behöver vanligtvis bygga infrastruktur för att implementera din arkitektur pÄ rÀtt sÀtt. Till exempel implementerar du i allmÀnhet Repository-mönstret. Du definierar nÄgra basklasser för att förenkla och standardisera skapandet av entiteter, tjÀnster, controllers och andra objekt.",
+ "ArchitecturalInfrastructure_ABPSOLUTION_Description": "ABP tillhandahÄller allt detta och mer dÀrtill direkt frÄn start. Det Àr moget och vÀldokumenterat.",
+ "EnterpriseApplicationRequirements": "Krav pÄ företagsapplikationer",
+ "EnterpriseApplicationRequirements_THEPROBLEM_Description": "Det finns mÄnga krav som du upprepade gÄnger mÄste implementera i varje affÀrsapplikation;",
+ "EnterpriseApplicationRequirements_THEPROBLEM_Description2": "Detaljerat behörighetssystem och hantering av behörigheter i anvÀndargrÀnssnittet baserat pÄ roller och anvÀndare.",
+ "EnterpriseApplicationRequirements_THEPROBLEM_Description3": "Skriva granskningsloggar och entitetshistorik för att spÄra nÀr en anvÀndare Àndrar en databaspost.",
+ "EnterpriseApplicationRequirements_THEPROBLEM_Description4": "Gör dina enheter mjukt raderade, sÄ att de markeras som raderade istÀllet för att fysiskt raderas frÄn databasen och automatiskt filtrera bort raderade enheter i dina frÄgor.",
+ "EnterpriseApplicationRequirements_THEPROBLEM_Description5": "Skapa abstraktioner och omslag för att konsumera dina backend-API:er frÄn frontend-koden.",
+ "EnterpriseApplicationRequirements_THEPROBLEM_Description6": "UppstÀllning i kö och utförande av bakgrundsjobb.",
+ "EnterpriseApplicationRequirements_THEPROBLEM_Description7": "Hantering av flera tidszoner i ett globalt system.",
+ "EnterpriseApplicationRequirements_THEPROBLEM_Description8": "Delning av validering, lokalisering och auktoriseringslogik mellan server och klient.",
+ "EnterpriseApplicationRequirements_ABPSOLUTION_Description": "ABP tillhandahĂ„ller en infrastruktur för att enkelt implementera sĂ„dana krav. Ă
terigen behöver du inte spendera din vÀrdefulla tid pÄ att implementera alla dessa om och om igen.",
+ "GeneratingInitialCode&Tooling": "Generering av initialkod och verktyg",
+ "GeneratingInitialCode&Tooling_THEPROBLEM_Description": "Du kommer att bygga mÄnga liknande sidor i en typisk webbapplikation. De flesta av dem kommer att utföra liknande CRUD-operationer. Det Àr mycket trÄkigt och Àven felbenÀget att upprepade gÄnger skapa sÄdana sidor.",
+ "GeneratingInitialCode&Tooling_ABPSOLUTION_Description": "ABP Suite kan generera en full-stack CRUD-sida för dina enheter pÄ nÄgra sekunder. Den genererade koden Àr skiktad och ren. Alla standardkrav för validering och auktorisering Àr implementerade. Dessutom genereras enhetstestklasser. NÀr du vÀl har fÄtt en helt fungerande sida kan du Àndra den enligt dina affÀrsbehov.",
+ "IntegratingTo3rdPartyLibrariesAndSystems": "Integrering med bibliotek och system frÄn tredje part",
+ "IntegratingTo3rdPartyLibrariesAndSystems_THEPROBLEM_Description": "De flesta bibliotek Àr utformade pÄ lÄg nivÄ och du mÄste vanligtvis göra en del arbete för att integrera dem pÄ rÀtt sÀtt utan att upprepa samma integrations- och konfigurationskod överallt i din lösning. Anta till exempel att du mÄste anvÀnda RabbitMQ för att implementera din distribuerade hÀndelsebuss. Allt du vill göra Àr att skicka ett meddelande till en kö och hantera de inkommande meddelandena. Men du mÄste förstÄ meddelandemönster, köer och utbytesdetaljer. För att skriva effektiv kod mÄste du skapa en pool för att hantera anslutningar, klienter och kanaler. Du mÄste ocksÄ hantera undantag, ACK-meddelanden, Äteranslutning till RabbitMQ vid misslyckanden och mer.",
+ "IntegratingTo3rdPartyLibrariesAndSystems_ABPSOLUTION_Description": "Till exempel abstraherar ABP:s RabbitMQ Distributed Event Bus-integration alla dessa detaljer. Du skickar och tar emot meddelanden utan krÄngel. Behöver du skriva kod pÄ lÄg nivÄ? Inga problem, det kan du alltid göra. ABP begrÀnsar dig inte nÀr du behöver anvÀnda lÄgnivÄfunktioner i det bibliotek du anvÀnder.",
+ "WhyNotBuildYourOwnFramework?": "Varför inte bygga ditt eget ramverk?",
+ "WhyNotBuildYourOwnFramework_THEPROBLEM_Description": "All infrastruktur, Àven pÄ det enklaste sÀttet, tar mycket tid att bygga, underhÄlla och dokumentera. Den blir större med tiden och det blir svÄrt att underhÄlla den i din lösning. Att separera dessa i ett ÄteranvÀndbart projekt Àr utgÄngspunkten för att bygga ditt eget interna ramverk.",
+ "WhyNotBuildYourOwnFramework_THEPROBLEM_Description2": "Att bygga, dokumentera, utbilda och underhĂ„lla ett internt ramverk Ă€r verkligen svĂ„rt. Om du inte har ett erfaret, dedikerat ramverksteam blir ditt interna ramverk snabbt en odokumenterad Ă€ldre kod som ingen lĂ€ngre kan förstĂ„ och underhĂ„lla. Ă
andra sidan utvecklas dessa ramverk i allmÀnhet av en eller tvÄ utvecklare i teamet. Och dessa medarbetare hÄller pÄ att bli en kunskapssilo. Det Àr bra för dem men dÄligt för företaget eftersom de Àr projektets enda punkt för misslyckande -SPOF-. NÀr de lÀmnar företaget gÄr projektet dramatiskt ner.",
+ "WhyNotBuildYourOwnFramework_ABPSOLUTION_Description": "ABP Àr ett community-drivet, vÀldokumenterat, moget och generiskt applikationsramverk. Ett team av mycket erfarna utvecklare arbetar hÄrt för att hÄlla det uppdaterat, lÀtt att förstÄ och bekvÀmt att anvÀnda. Att anvÀnda ett sÄ stabilt ramverk gör att du kan fokusera pÄ din egen affÀrskod och fÄ hjÀlp med ramverket frÄn experter nÀr du behöver det.",
+ "ArchitecturalInfrastructure_Description": "SaaS-applikationer, modulÀra system eller mikroservicesystem Àr de mest anvÀnda modellerna för företagsprogramvara. Att bygga sÄdana system krÀver inte bara en god förstÄelse och erfarenhet utan ocksÄ en stark mjukvaruinfrastruktur. Annars kommer du att fÄ lÀgga ner mycket arbete pÄ att stödja dessa arkitektoniska detaljer i din kodbas.",
+ "Modularity_THEPROBLEM_Description": "Att bygga ett verkligt modulÀrt system Àr inte lÀtt! Alla aspekter av systemet (databas, entiteter, API:er, UI-sidor/komponenter) kan delas upp i moduler, och varje modul kan ÄteranvÀndas utan andra. Den vanliga ASP.NET Core ger inte en sÄdan modulÀr arkitektur. Om du behöver det bör du tÀnka pÄ det frÄn grunden.",
+ "Modularity_ABPSOLUTION_Description": "ABP Àr skapat för att vara en modulÀr struktur för applikationsutveckling. Varje funktion i ramverket Àr utvecklad för att vara kompatibel med modularitet. Dokumentation och guider förklarar hur man utvecklar ÄteranvÀndbara moduler pÄ ett standardiserat sÀtt.",
+ "SaaSMultiTenancy": "SaaS / Multi-tenancy",
+ "SaaSMultiTenancy_THEPROBLEM_Description": "Multi-tenancy Àr ett vanligt sÀtt att implementera SaaS-system. Att implementera en konsekvent multi-tenant infrastruktur kan dock bli komplicerat.",
+ "SaaSMultiTenancy_ABPSOLUTION_Description": "ABP tillhandahÄller en komplett infrastruktur för flera hyresgÀster och abstraherar komplexiteten frÄn din företagskod. Din applikationskod kommer att vara mestadels multi-tenancy medveten, medan ABP automatiskt isolerar databasen, cache och andra detaljer om hyresgÀsterna frÄn varandra. Den stöder en enda databas, per hyresgÀstdatabas och hybridmetoder. Den konfigurerar korrekt bibliotek som Microsoft Identity och OpenIddict, som normalt inte Àr kompatibla med multi-tenancy.",
+ "Microservices": "MikrotjÀnster",
+ "Microservices_THEPROBLEM_Description": "Att bygga ett mikrotjÀnstsystem krÀver mÄnga infrastrukturdetaljer: Autentisering och auktorisering av applikationer och mikrotjÀnster samt implementering av asynkrona meddelanden och synkrona (Rest/GRPC) kommunikationsmönster mellan mikrotjÀnster Àr de mest grundlÀggande frÄgorna.",
+ "Microservices_ABPSOLUTION_Description": "ABP tillhandahÄller tjÀnster, guider och exempel som hjÀlper dig att implementera din microservice-lösning med hjÀlp av branschens standardverktyg.",
+ "Microservices_ABPSOLUTION_Description2": "ABP:s kommersiella licenser gÄr till och med ett steg lÀngre och tillhandahÄller en komplett startmall för att kickstarta din mikroservicelösning.",
+ "PreBuiltModules": "Förbyggda moduler",
+ "PreBuiltModules_THEPROBLEM_Description": "Alla har vi liknande men lite olika affÀrskrav. Men vi mÄste alla uppfinna hjulet pÄ nytt eftersom ingen annans kod kan fungera direkt i vÄr lösning. De Àr alla inbÀddade delar av en större lösning.",
+ "PreBuiltModules_ABPSOLUTION_Description": "ABP modules tillhandahÄller mÄnga ÄteranvÀndbara applikationsmoduler som betalning, chatt, filhantering, revisionsloggrapportering ... etc. Alla dessa moduler installeras enkelt i din lösning och fungerar direkt. Vi lÀgger stÀndigt till fler moduler.",
+ "PreBuiltModules_ABPSOLUTION_Description2": "Alla moduler Àr utformade sÄ att de kan anpassas efter dina affÀrsbehov. Om du behöver fullstÀndig kontroll kan du ladda ner den fullstÀndiga kÀllkoden för alla moduler och anpassa dem helt utifrÄn dina specifika affÀrskrav.",
+ "ABPCommunity": "ABP Gemenskap",
+ "ABPCommunity_Description": "Slutligen, att vara en del av en stor gemenskap dÀr alla följer liknande kodningsstilar och principer och delar en gemensam infrastruktur ger kraft nÀr du har problem eller behöver hjÀlp med designbeslut. Eftersom vi skriver kod pÄ liknande sÀtt kan vi hjÀlpa varandra mycket bÀttre. ABP Àr ett community-stöttat projekt med mer Àn 10K stjÀrnor pÄ GitHub.",
+ "ABPCommunity_Description2": "Det Àr lÀtt att dela kod eller till och med ÄteranvÀndbara bibliotek mellan ABP-utvecklare. En kodsnutt som fungerar för dig kommer ocksÄ att fungera för andra. Det finns mÄnga exempel och handledningar som du direkt kan implementera i din applikation.",
+ "ABPCommunity_Description3": "NÀr du anlitar en utvecklare som tidigare arbetat med ABP-arkitekturen kommer denne omedelbart att förstÄ din lösning och pÄbörja utvecklingen pÄ mycket kort tid.",
+ "WhyAbpIo_Page_Title": "Varför ABP Platform?",
+ "AbpStudio_Page_Title": "ABP Studio",
+ "AbpStudio_Page_Description": "Utforska ABP Studio, en integrerad utvecklingsmiljö för ABP Platform, som förbÀttrar din utvecklingsprocess.",
+ "CampaignInfo": "Köp en ny licens eller förnya din befintliga licens och fÄ ytterligare 2 mÄnader utan extra kostnad! Detta erbjudande gÀller för alla licensplaner. Se till att du utnyttjar denna tidsbegrÀnsade kampanj för att utöka din tillgÄng till premiumfunktioner och uppgraderingar.",
+ "HurryUpLastDay": "Skynda pÄ! Sista dagen: {0}",
+ "CreatingCRUDPagesWithABPSuite": "Skapa CRUD-sidor med ABP Suite",
+ "MultipleYearDiscount": "Rabatt för flera Är",
+ "CampaignDiscountText": "Rabatt pÄ ny plattform",
+ "CampaignDiscountName": "Ny plattform",
+ "CampaignName:BlackFriday": "Svart fredag",
+ "MultipleOrganizationInfo": "Se alla dina organisationer",
+ "AbpStudioBetaAccessInfoTitle": "ABP Studio Beta Access",
+ "AbpStudioBetaAccessInfoText": "Vi Àr glada över att kunna dela med oss av beta-versionen av ABP Studio! Den hÀr versionen markerar en viktig milstolpe i vÄr utvecklingsresa, och vi Àr angelÀgna om att samla in din feedback för att göra applikationen Ànnu bÀttre.",
+ "YouAreNotAuthorizedToDownloadStudio": "Du Àr inte behörig att ladda ner ABP Studio.",
+ "OrganizationHasNoDefaultCreditCard": "Din organisation har inget standardkreditkort. LÀgg till ett kreditkort för din organisation.",
+ "YouAreNotAuthorizedToPayThisPaymentRequest": "Du Àr inte behörig att betala denna betalningsbegÀran.",
+ "YouAreNotAuthorizedToCreateBillingInfoForThisPaymentRequest": "Du Àr inte behörig att skapa faktureringsinformation för denna betalningsbegÀran.",
+ "OrganizationNotFound": "Organisationen hittades inte.",
+ "CannotDeleteDefaultCardBecauseAutoRenewalEnabled": "Du kan inte ta bort kortet just nu eftersom funktionen Auto-Renewal Àr aktiverad. För att ta bort kortet mÄste du först avaktivera Auto-Renewal.",
+ "AreYouSureWantToDeleteThisCard": "Ăr du sĂ€ker pĂ„ att du vill ta bort det hĂ€r kortet?",
+ "AreYouSureWantToSetThisCardAsDefault": "Ăr du sĂ€ker pĂ„ att du vill anvĂ€nda det hĂ€r kortet som standard?",
+ "OrganizationBillingInfoIsNotSuitableForIyzicoPayment": "Din organisations faktureringsinformation Àr inte lÀmplig för iyzico-betalning.",
+ "AutomaticRenewal": "Automatisk förnyelse",
+ "AutomaticRenewal_Description": "Om du förnyar en licens innan den gÄr ut fÄr du en rabatt pÄ upp till 40 %. Med den automatiska förnyelseprocessen kan du förnya din licens utan att förlora denna rabatt, och din utveckling kommer aldrig att avbrytas. Automatisk förnyelse Àr endast tillgÀnglig för kreditkortsbetalning. Du kan inaktivera automatisk förnyelse nÀr som helst genom att gÄ till din organisationshanteringssida. ABP sparar inte din kreditkortsinformation, men vÄra globala betalningsgateways sÀkrar besparingar.",
+ "CardNotFoundMessage": "Vill du lÀgga till ett nytt kort?",
+ "CardNotFoundTitle": "Kortet hittades inte",
+ "AutoRenewalEnabled": "Automatisk förnyelse aktiverad",
+ "AutoRenewalDisabled": "Automatisk förnyelse Avaktiverad",
+ "PaymentRequestIdIsNotProvided": "BetalningsförfrÄgans ID anges inte.",
+ "PaymentFailedInfo": "TyvÀrr, betalningen misslyckades! Detta kan bero pÄ otillrÀckliga medel, ogiltigt kreditkortsnummer eller ogiltig pinkod",
+ "UsedPayment": "Denna betalning har redan anvÀnts",
+ "ManageLicense": "Hantera licens",
+ "AbpPlatformLeptonXTheme": "LeptonX Theme för din administrativa instrumentpanel av ABP Platform",
+ "NoActiveLicence": "Du Àr inte berÀttigad till denna ÄtgÀrd! Du har ingen aktiv licens.",
+ "ABPStudioBetaTester": "För att kunna skicka in din begÀran mÄste du logga in",
+ "ABPStudioBetaAccess": "ABP Studio Beta Access",
+ "VisitABPStudio": "Besök ABP Studio",
+ "EditBillingInformation": "Redigera faktureringsinformation",
+ "Organization": "Organisation",
+ "E-Book": "E-bok",
+ "CreditCards": "Kreditkort",
+ "BillingInformation": "Faktureringsinformation",
+ "AddNewCreditCard": "LĂ€gg till nytt kreditkort",
+ "MyOrganizations_LearnMorePlan": "LÀs mer om planer pÄ prissÀttningssidan",
+ "AutoLicenseRenewalIsNotEnabled": "Automatisk licensförnyelse Àr inte aktiverad.",
+ "SetAsDefaultPaymentMethod": "Ange som standardbetalningsmetod",
+ "{0}PerAdditionalDeveloper": "${0} per ytterligare utvecklare",
+ "CardAlias": "Alias för kort (valfritt)",
+ "AbpDoesNotSaveYourPaymentDetails_Description": "Betalningsuppgifterna kommer att sparas i {2} sÀkerhetsvalv och du kan ta bort lagrade uppgifter nÀr som helst. Aktivering av automatisk förnyelse sÀkerstÀller att din ABP-prenumeration automatiskt förnyas innan den löper ut, förutsatt att du har ett giltigt kreditkort. Om du avaktiverar automatisk förnyelse mÄste du förnya din prenumeration manuellt. Om du vill fortsÀtta din projektutveckling utan avbrott föreslÄr vi att du aktiverar alternativet Automatisk förnyelse.",
+ "AddBillingInformation": "LĂ€gg till faktureringsinformation",
+ "YouHaveNoCardsSaved": "Kortet Àr inte sparat Ànnu.",
+ "CreateCreditCardModal_BillingDetails_Description": "Du mÄste spara dina faktureringsuppgifter för att kunna lÀgga till ditt kreditkort.",
+ "TaxNo": "Skatt Nej",
+ "CardNumber": "Kortnummer",
+ "NameOnCard": "Namn pÄ kortet",
+ "BillingDetails": "Faktureringsinformation",
+ "ThereIsNoDeveloper": "Ingen utvecklare tillagd.",
+ "CardDetails": "Debit-/Kreditkortsuppgifter",
+ "YearCantBeNull": "Ă
rsfÀltet fÄr inte vara tomt.",
+ "CardHolderName": "Namn pÄ kortet",
+ "ExpireDate": "UtgÄngsdatum",
+ "DisplayName:ExpireDate": "UtgÄngsdatum",
+ "DisplayName:CardHolderName": "Namn pÄ kortet",
+ "CreditCardNumberLengthWarning": "Ogiltigt kortnummer",
+ "ExpirationWarning": "Ogiltigt utgÄngsdatum",
+ "CreateCreditCardModal_Description": "NÀr du sparar ditt betalkort/kreditkort kommer en tillfÀllig avgift pÄ 1 USD att godkÀnnas för verifiering och Äterbetalas omedelbart.",
+ "ReturnOnInvestmentTitle": "Avkastning pÄ investeringar.",
+ "ReduceYourDevelopmentCostsDescription": "Minska dina utvecklingskostnader med mer Àn 50 % med ABP Platform.",
+ "SettingUpTheArchitectureTitle": "UppsÀttning av arkitekturen",
+ "DoingEverythingFromScratch": "Att göra allt frÄn början",
+ "SettingUpTheArchitecture_Description1": "Organisera kodbas och lösningsstruktur",
+ "SettingUpTheArchitecture_Description2": "Identifiera, installera och konfigurera viktiga tredjepartsbibliotek",
+ "SettingUpTheArchitecture_Description3": "UpprÀtta infrastruktur för automatiserad integration och enhetstest",
+ "SettingUpTheArchitecture_Description4": "FaststÀlla och dokumentera kodstandarder, utbilda utvecklingsteamet",
+ "UsingTheABPFramework": "AnvÀnda ABP-plattformen",
+ "UseABPSettingUpTheArchitecture_Description": "AnvÀnd ABP:s mallar för startup-lösningar",
+ "ReduceCostsWithABP": "Minska kostnaderna med ABP genom att",
+ "ReduceCostsBy": "80 % till 100 %.",
+ "DesigningTheUserInterfaceTitle": "Utformning av anvÀndargrÀnssnittet",
+ "DesigningTheUserInterface_Description1": "Skapa eller köp ett UI-tema",
+ "DesigningTheUserInterface_Description2": "Anpassa anvÀndargrÀnssnittets tema till lösningen",
+ "DesigningTheUserInterface_Description3": "Bygga de viktigaste delarna av anvÀndargrÀnssnittet (layout, meny, sidhuvud, sidfot med responsiv design)",
+ "DesigningTheUserInterface_Description4": "Se till att designen Àr konsekvent pÄ alla applikationssidor",
+ "UseABPDesigningTheUserInterface_Description": "AnvÀnd ABP:s LeptonX UI Theme",
+ "DevelopingApplicationFeaturesTitle": "Utveckling av applikationsfunktioner",
+ "DevelopingApplicationFeatures_Description1": "Utveckla din egen affÀrslogik",
+ "DevelopingApplicationFeatures_Description2": "Utveckla varje sida en efter en",
+ "DevelopingApplicationFeatures_Description3": "Utveckla gemensamma affÀrsmoduler sjÀlv",
+ "DevelopingApplicationFeatures_Description4": "Utveckla autentiseringssystemet (enkel inloggning, 2-faktor autentisering, sociala inloggningar, ÄterstÀllning av lösenord, e-postaktivering etc...)",
+ "DevelopingApplicationFeatures_Description5": "TillÀmpa övergripande frÄgor i varje anvÀndningsfall (DB-transaktioner, auktorisering, validering, undantagshantering etc.)",
+ "DevelopingApplicationFeatures_Description6": "Utveckla gemensamma basklasser och nyttotjÀnster",
+ "DevelopingApplicationFeatures_Description7": "Utveckla gemensamma icke-affÀrsmÀssiga krav (revisionsloggning, soft-delete, bakgrundsjobb, behörighetssystem etc.)",
+ "UseABPDevelopingApplicationFeatures_Description1": "Utveckla din egen affÀrslogik",
+ "UseABPDevelopingApplicationFeatures_Description2": "AnvÀnd ABP Suite för att automatiskt generera CRUD-liknande sidor",
+ "UseABPDevelopingApplicationFeatures_Description3": "AnvÀnd direkt ABP:s förbyggda gemensamma applikationsmoduler och anpassa dem utifrÄn dina unika krav",
+ "ReduceCostsBy_2": "40-60 procent",
+ "WhyABPIoPlatform": "Varför ABP Platform?",
+ "WhyShouldYouUsetheABPIOPlatform": "Varför ska du anvÀnda ABP Platform istÀllet för att skapa en ny lösning frÄn grunden?",
+ "ExploreMore": "Utforska mer",
+ "DocumentIntroducesDescription": "Om du vill veta mer om varför du ska anvÀnda ABP Platform istÀllet för att skapa en ny lösning frÄn grunden kan du lÀsa följande dokument.",
+ "ReturnOnInvestmentPageAbout": "PÄ den hÀr sidan beskrivs de grundlÀggande stegen i utvecklingen av en programvarulösning och hur ABP Platform minskar utvecklingskostnaderna i varje steg.",
+ "LearnMore": "LĂ€r dig mer",
+ "ReturnOfInvestment": "Avkastning pÄ investeringar",
+ "ReturnOnInvestment_Description": "LÀr dig hur du kan minska dina utvecklingskostnader med mer Àn 50 %.",
+ "PricingDiscount": "Spara",
+ "PricingTeamTitle": "Team",
+ "PricingBusinessTitle": "Företag",
+ "PricingEnterpriseTitle": "Företag",
+ "SpecialDiscount": "SĂ€rskild rabatt",
+ "YourOrganizationOverview": "Ăversikt över din organisation",
+ "TrainingDetailsHeaderInfo_TrainingHourSingular": "{0} timme",
+ "ContactPageError": "VĂ€nligen skicka ditt meddelande via e-post till info@abp.io
HÀr Àr vad du skrev :",
+ "GoBack": "GĂ„ tillbaka",
+ "HereWhatYouWrote": "HÀr Àr vad du skrev:",
+ "Sales": "FörsÀljning",
+ "LicensingPricing": "Licensiering/prissÀttning",
+ "TrialDemo": "Testversion / Demo",
+ "TrainingOnboarding": "Utbildning / Onboarding",
+ "Resellers": "Ă
terförsÀljare",
+ "Others": "Ăvriga",
+ "Characters": "KaraktÀrer",
+ "Topic": "Ămne",
+ "SendUsEmail": "Skicka e-post till oss",
+ "ErrorExceptionMessage": "Ett fel intrÀffade under behandlingen av din begÀran",
+ "WatchTakeCodeGeneration": "Titta pÄ videon \"Utforska potentialen med kodgenerering: ABP Suite\" Video!",
+ "StartupTemplatesUser": "AnvÀndare",
+ "StartupSingleSignOn": "Enkel inloggning",
+ "Application{0}": "TillÀmpning {0}",
+ "PreBuiltApplicationModulesTitle": "FĂ€rdigbyggda applikationer Moduler.",
+ "RegisterDemo": "Registrera",
+ "TrainingDescription": "AnmÀl dig till ABP:s utbildningar för att förbÀttra dina fÀrdigheter och kunskaper och hÄlla dig uppdaterad med den senaste utvecklingen.",
+ "PurchaseDevelopers": "Utvecklare",
+ "LinkExpiredMessage": "BetalningslÀnken har löpt ut! Kontakta oss pÄ sales@volosoft.com för att uppdatera lÀnken eller klicka hÀr för att navigera till kontaktsidan.",
+ "YourAccountDisabled": "Ditt anvÀndarkonto Àr inaktiverat!",
+ "WhyChooseAbpTitle": "Varför vÀlja ABP? | ABP.IO",
+ "WhyChooseAbpDescription": "UpptÀck fördelarna med ABP Commercial: modulÀr arkitektur, moduler redo för mikrotjÀnster, produktivitetsverktyg och robusta funktioner för moderna webbappar för affÀrsomrÄden.",
+ "AbpIo_Modern_Title": "ABP.IO - Modern ASP.NET Core plattform för webbapplikationer",
+ "AbpIo_Modern_Description": "ABP Platform tillhandahÄller ett ramverk med öppen kÀllkod ovanpÄ ASP.NET Core med Angular-, Blazor- och MVC-grÀnssnittsalternativ för att skapa skalbara webbappar för företag.",
+ "My_Organizations_Page_Title": "Mina organisationer",
+ "My_Organizations_Page_Description": "Se dina ABP Platform-organisationer för att hantera dina utvecklare, licensförnyelser och uppgraderingar.",
+ "Members_Page_Title": "{0} - Medlem i gemenskapen | ABP.IO",
+ "Members_Page_Description": "{0} Àr medlem i ABP-communityn. Kolla in bidragen och dra nytta av denna erfarenhet.",
+ "Framework_Page_Title": "ABP-ramverk",
+ "Framework_Page_Description": "ABP Framework Àr det mest okomplicerade sÀttet att kickstarta ditt projekt! LÀr dig mer om ABP Framework's robusta funktioner.",
+ "CLI_Page_Title": "ABP CLI",
+ "CLI_Page_Description": "AnvÀnd det globala verktyget ABP CLI dotnet för att skapa ett nytt ABP-projekt, uppdatera det, hantera paket och fÄ tillgÄng till kÀllkoden för ABP-moduler.",
+ "Mobile_Page_Title": "ABP:s mobila klient",
+ "Mobile_Page_Description": "Utveckla kraftfulla mobila applikationer med ABP:s funktioner för mobil utveckling, vilket sÀkerstÀller kompatibilitet mellan plattformar.",
+ "ReleasesPageTitle": "ABP Kommersiella meddelanden",
+ "ReleasesPageDescription": "HÄll dig uppdaterad med de senaste funktionerna och uppdateringarna i ABP Commercial Releases, sÄ att dina applikationer Àr toppmoderna.",
+ "GetStartedPageTitle": "Kom snabbt igÄng med ABP Framework med hjÀlp av vÄr omfattande guide som Àr utformad för nya anvÀndare.",
+ "Community_Page_Title": "ABP Gemenskap",
+ "Community_Page_Description": "Anslut och samarbeta med andra utvecklare i ABP Community, dela kunskap och resurser.",
+ "Services_Page_Title": "Ytterligare tjÀnster",
+ "Services_Page_Description": "FÄ professionell utveckling och supporttjÀnster frÄn ABP-teamet eller dess lösningspartners, vilket sÀkerstÀller att ditt projekt blir framgÄngsrikt.",
+ "Contributors_Page_Title": "Bidragsgivare till ABP",
+ "Contributors_Page_Description": "Möt bidragsgivarna i ABP Community och lÀr dig mer om deras roller och bidrag till ramverket.",
+ "PackagesDetailTitle": "{0} - Paketdetaljer | ABP Framework",
+ "PackagesDetailDescription": "FÄ detaljerad information om paketet {0}, inklusive funktioner och anvÀndning.",
+ "Raffle_Page_Title": "Utlottning - {0}",
+ "Raffle_Page_Description": "Delta i ABP:s utlottningar och ha chansen att vinna spÀnnande priser genom att engagera dig i ABP:s community.",
+ "Docs_Page_Title": "ABP-dokumentation",
+ "Docs_Page_Description": "FÄ tillgÄng till omfattande guider och API-referenser i ABP Documentation, vilket underlÀttar utveckling och felsökning.",
+ "Videos_Page_Title": "{0} - VideoinlÀgg | ABP.IO",
+ "AskQuestionsOnSupport": "Du kan stÀlla frÄgor pÄ ABP Support.",
+ "MicroserviceApplicationExplanation1": "Skapar en distribuerad lösning.",
+ "MicroserviceApplicationExplanation2": "Rekommenderas för stora team för att skapa komplexa och skalbara system.",
+ "CancellationSupport": "Stöd för avbokning",
+ "CancellationSupportExplanation": "ABP möjliggör en elegant avslutning av asynkrona operationer i applikationer, vilket sÀkerstÀller korrekt resursrensning och en responsiv anvÀndarupplevelse.",
+ "DistributedLocking": "Distribuerad lÄsning",
+ "DistributedLockingExplanation": "ABP:s distribuerade lÄssystem sÀkerstÀller att resurser nÄs pÄ ett ömsesidigt exklusivt sÀtt över olika noder i en distribuerad miljö, vilket förhindrar samtidiga konflikter och sÀkerstÀller datakonsistens.",
+ "EncryptionDecryptionServices": "TjÀnster för kryptering och dekryptering",
+ "EncryptionDecryptionServicesExplanation": "ABP tillhandahÄller strÀngkrypteringsfunktion som gör det möjligt att Encrypt och Decrypt strÀngar.",
+ "BackgroundWorkers": "Bakgrund Arbetstagare",
+ "BackgroundWorkersExplanation": "Definiera operationer som ska köras i en separat, dedikerad trÄd. AnvÀnd de inbyggda bakgrundsarbetarna eller integrera dina egna. Hangfire och Quartz integrationer Àr redan tillgÀngliga.",
+ "ConcurrencyCheck": "Kontroll av samtidighet",
+ "ConcurrencyCheckExplanation": "ABP tillhandahÄller en optimistisk mekanism för samtidighetskontroll för att sÀkerstÀlla datakonsistens i din applikation och förhindrar att anvÀndare kommer Ät eller Àndrar samma data i en databas samtidigt."
+ }
+}
\ No newline at end of file
diff --git a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-helm-charts.png b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-helm-charts.png
index 6f078b2fd5..edc9118d9c 100644
Binary files a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-helm-charts.png and b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-helm-charts.png differ
diff --git a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-license-comparison-table.png b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-license-comparison-table.png
index 3c8a155eb7..f0ca19268e 100644
Binary files a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-license-comparison-table.png and b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-license-comparison-table.png differ
diff --git a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-solution-runner-overall.png b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-solution-runner-overall.png
index 96902b24a6..02a2ba1076 100644
Binary files a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-solution-runner-overall.png and b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-solution-runner-overall.png differ
diff --git a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-solution-runner-start-apps.png b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-solution-runner-start-apps.png
index c08fe0f69d..87dbb07a41 100644
Binary files a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-solution-runner-start-apps.png and b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-solution-runner-start-apps.png differ
diff --git a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-suite-in-abp-studio.png b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-suite-in-abp-studio.png
index a88dff06cd..572cf40956 100644
Binary files a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-suite-in-abp-studio.png and b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-suite-in-abp-studio.png differ
diff --git a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-suite-open-in-abp-studio.png b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-suite-open-in-abp-studio.png
index cedd33aa6f..e09cfb2ddd 100644
Binary files a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-suite-open-in-abp-studio.png and b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-suite-open-in-abp-studio.png differ
diff --git a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/suite-generated-entity.png b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/suite-generated-entity.png
index d50c0813d0..2f3342d573 100644
Binary files a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/suite-generated-entity.png and b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/suite-generated-entity.png differ
diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cms-kit-faq.png b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cms-kit-faq.png
new file mode 100644
index 0000000000..be73de4d8f
Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cms-kit-faq.png differ
diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cmskit-module-comments-settings.png b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cmskit-module-comments-settings.png
new file mode 100644
index 0000000000..c0b1a4fe48
Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cmskit-module-comments-settings.png differ
diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cmskit-module-markedItems.png b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cmskit-module-markedItems.png
new file mode 100644
index 0000000000..52eb61f285
Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cmskit-module-markedItems.png differ
diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cover-image.png b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cover-image.png
new file mode 100644
index 0000000000..875be518af
Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/cover-image.png differ
diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/docs-google-search.png b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/docs-google-search.png
new file mode 100644
index 0000000000..9398fa1070
Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/docs-google-search.png differ
diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/faq-section-public-web.png b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/faq-section-public-web.png
new file mode 100644
index 0000000000..2f45635782
Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/faq-section-public-web.png differ
diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/google-search-results.png b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/google-search-results.png
new file mode 100644
index 0000000000..082c567f8c
Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/google-search-results.png differ
diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/new-abp-cli-cover-image.png b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/new-abp-cli-cover-image.png
new file mode 100644
index 0000000000..d92621f403
Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/new-abp-cli-cover-image.png differ
diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/new-platform-cover-image.png b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/new-platform-cover-image.png
new file mode 100644
index 0000000000..95265fea29
Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/new-platform-cover-image.png differ
diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/post.md b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/post.md
new file mode 100644
index 0000000000..2d8a767568
--- /dev/null
+++ b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/post.md
@@ -0,0 +1,177 @@
+# ABP Platform 8.3 RC Has Been Released
+
+
+
+Today, we are happy to release [ABP](https://abp.io) version **8.3 RC** (Release Candidate). This blog post introduces the new features and important changes in this new version.
+
+Try this version and provide feedback for a more stable version of ABP v8.3! Thanks to you in advance.
+
+## Get Started with the 8.3 RC
+
+You can check the [Get Started page](https://abp.io/get-started) to see how to get started with ABP. You can either download [ABP Studio](https://abp.io/get-started#abp-studio-tab) (**recommended**, if you prefer a user-friendly GUI application - desktop application) or use the [ABP CLI](https://abp.io/docs/latest/cli).
+
+By default, ABP Studio uses stable versions to create solutions. Therefore, if you want to create a solution with a preview version, first you need to create a solution and then switch your solution to the preview version from the ABP Studio UI:
+
+
+
+## Migration Guide
+
+There are a few breaking changes in this version that may affect your application. Please read the migration guide carefully, if you are upgrading from v8.2 or earlier: [ABP Version 8.3 Migration Guide](https://abp.io/docs/8.3/release-info/migration-guides/abp-8-3)
+
+## What's New with ABP v8.3?
+
+In this section, I will introduce some major features released in this version.
+Here is a brief list of titles explained in the next sections:
+
+* CMS Kit: Marked Items/Favorites
+* CMS Kit: Approvement System for Comments
+* Docs: Added Google Translation Support & Introducing the Single Project Mode
+* Using DBFunction for Global Query Filters
+* CMS Kit (PRO): FAQ
+* Package Updates (NuGet & NPM)
+
+### CMS Kit: Marked Items/Favorites
+
+CMS Kit provides a marking system to mark any kind of resource, like a blog post or a product, as a favorite, starred, flagged, or bookmarked.
+
+
+
+This system is especially useful if you need to highlight some resources and differentiate them from other items. To use the marking system, you need to define an entity type with the icon name, by configuring the `CmsKitMarkedItemOptions`:
+
+```csharp
+Configure(options =>
+{
+ options.EntityTypes.Add(
+ new MarkedItemEntityTypeDefinition(
+ entityType: "product",
+ icon: StandardMarkedItems.Favorite
+ )
+ );
+});
+```
+
+You can select any of the standard marked item icons (as used in the example above) or easily customize the icons shown in the toggling components.
+
+> Read the [CMS Kit: Marked Item System](https://abp.io/docs/8.3/modules/cms-kit/marked-items) documentation to learn more.
+
+### CMS Kit: Approvement System for Comments
+
+CMS Kit Module has been provided a [Commenting System](https://abp.io/docs/8.3/modules/cms-kit/comments) for a while. This system allows you to add the comment feature to any kind of resource, like blog posts, or products. However, this system wasn't providing an approvement system, that allows system administrations to review the comments before publishing them in their application.
+
+In this version, we have introduced the [Approvement System](https://abp.io/docs/8.3/modules/cms-kit/comments#settings), which allows you to _require approval for comments to be published_. It's disabled by default, but you can make it enabled by simply checking the related setting on the settings page:
+
+
+
+When you enable it, whenever a user submits a comment, it can be directly seen on the back-office application (in the _cms/comments_ page), and you can determine if the comment should be approved or rejected. If you approve the comment, then it will be shown in the comment section for the related resource.
+
+> Read the [CMS Kit: Comments](https://abp.io/docs/8.3/modules/cms-kit/comments) documentation to learn more.
+
+### Docs: Added Google Translation Support & Introducing the Single Project Mode
+
+In this version, we made some improvements in the [Docs Module](https://abp.io/docs/8.3/modules/docs), added Google Translation support for better findings in the documentation, and introduced a single project mode to align our needs in the documentation system with [the unification of the ABP Platform](https://abp.io/blog/new-abp-platform-is-live).
+
+The single project mode allows you to use a single name as a project name in your application. If you are not considering supporting multiple projects with their multiple docs and instead if you have a single project and want to have documentation for it, it's especially useful for you. You just need to configure the `DocsUiOptions`, set the single project mode as **enabled** and also define a constant project name:
+
+```csharp
+Configure(options =>
+{
+ options.SingleProjectMode.Enable = true;
+ options.SingleProjectMode.ProjectName = "abp";
+});
+```
+
+In addition to this feature, we also introduced Google Translation support for the documentation system and even integrated it into our [abp.io/docs](https://abp.io/docs/) website:
+
+
+
+
+
+Thanks to this system, you can either translate your documentation into your own language by Google Translation System or search specific keywords to easily find the related topic in the documentation.
+
+### Using DBFunction for Global Query Filters
+
+In this version, ABP has started using [User-defined function mapping](https://learn.microsoft.com/en-us/ef/core/querying/user-defined-function-mapping) for global filters to gain performance improvements and let EF Core generate more precise SQL commands under the hook.
+
+> See the documentation for more info: [Using User-defined function mapping for global filters](https://abp.io/docs/8.3/framework/infrastructure/data-filtering#using-user-defined-function-mapping-for-global-filters)
+
+### CMS Kit: FAQ
+
+CMS Kit provides a [FAQ System](https://abp.io/docs/8.3/modules/cms-kit-pro/faq) to allow users to create, edit, and delete FAQs. Here is an example screenshot from the FAQ page on the admin side:
+
+
+
+You can list, create, update, and delete sections and their questions on the admin side of your solution. Then, by using the `FaqViewComponent` in your public-web application, you can display FAQs, section by section:
+
+
+
+> Read the [CMS Kit: FAQ System](https://abp.io/docs/8.3/modules/cms-kit-pro/faq) documentation to learn more.
+
+### Package Updates
+
+In this version, we also updated some of the core NuGet and NPM package versions. All of the removed or deprecated methods have already been updated at the framework level. However, if you used any methods from these packages, you should be aware of the change and update it in your code accordingly.
+
+You can see the following list of the package version changes:
+
+* [Updated Markdig.Signed from v0.33.0 to v0.37.0](https://github.com/abpframework/abp/pull/20195) - [NuGet](https://www.nuget.org/packages/Markdig.Signed)
+* [Updated Hangfire from v1.8.6 to v1.8.12](https://github.com/abpframework/abp/pull/20009) - [NuGet](https://www.nuget.org/packages/Hangfire.AspNetCore)
+* [Updated SixLabors.ImageSharp from v3.0.2 to v3.1.4](https://github.com/abpframework/abp/pull/19643) - [NuGet](https://www.nuget.org/packages/SixLabors.ImageSharp)
+* [Updated Blazorise from v1.5.0 to v1.5.2](https://github.com/abpframework/abp/pull/19841) - [NuGet](https://www.nuget.org/packages/Blazorise)
+* [Updated datatables.net from v1.11.4 to v2.0.2](https://github.com/abpframework/abp/pull/19340) - [NPM](https://www.npmjs.com/package/datatables.net)
+
+## Community News
+
+### The New ABP Platform Is Live!
+
+
+
+We're thrilled to announce that the **new ABP.IO Platform** is now live! Our team has been hard at unifying and enhancing the entire platform to deliver a seamless, user-friendly experience. We consolidated all our services under a single domain: [abp.io](https://abp.io/); added a new mega menu that makes finding what you need much easier and faster, and also improved the UX of our application and combined both ABP (open-source) and ABP Commercial (paid) documents into a single comprehensive resource.
+
+> Read the blog post to learn more about this unification đ [The new ABP Platform is live!](https://abp.io/blog/new-abp-platform-is-live)
+
+### Announcing ABP Studio (Beta) General Availability
+
+We're really excited to announce that the **ABP Studio (beta)** is generally available to everyone. It is now downloadable on the [get started page](https://abp.io/get-started) of the [new ABP Platform website](https://abp.io/blog/new-abp-platform-is-live).
+
+
+
+> Read the blog post to learn more about the ABP Studio (Beta) đ [Announcing ABP Studio (beta) General Availability](https://abp.io/blog/announcing-abp-studio-general-availability)
+
+### Introducing the New ABP CLI
+
+As described above, we recently [unified the ABP platform in a single domain (abp.io)](https://abp.io/blog/new-abp-platform-is-live) and made some changes in our templating system to simplify your development. Also, we released more stable **ABP Studio** versions, which can dramatically improve and speed up your development time.
+
+Besides all of these changes, we have also introduced a [new ABP CLI](https://abp.io/docs/latest/cli/index) to bring you a more streamlined and efficient experience, which also extends the current commands.
+
+
+
+The new ABP CLI extends the old ABP CLI, adds more features that are used by ABP Studio behind the scenes, and is also fully compatible with the new templating system. We created a blog post, which you can read at [https://abp.io/blog/introducing-the-new-abp-cli](https://abp.io/blog/introducing-the-new-abp-cli) to highlight the reason behind this change and insights into the new ABP CLI, you can check it out if you want to learn more.
+
+### New ABP Community Articles
+
+There are exciting articles contributed by the ABP community as always. I will highlight some of them here:
+
+* [Ahmed Tarek](https://twitter.com/AhmedTarekHasa1) has created **three** new community articles:
+ * [đ§Ș Unit Testing Best Practices In .NET C# đ€·ââïž](https://abp.io/community/articles/-unit-testing-best-practices-in-.net-c--mnx65npu)
+ * [Memory Management In .NET](https://abp.io/community/articles/memory-management-in-.net-rqwbtzvl)
+ * [đ§” How String In .NET C# Works đ€·ââïž](https://abp.io/community/articles/-how-string-in-.net-c-works--vj6d2pnm)
+
+* [Anto Subash](https://twitter.com/antosubash) has created **two** new community videos:
+ * [ABP React Template V2](https://abp.io/community/videos/abp-react-template-v2-ilc4cyqr)
+ * [Migrating Tye to Aspire - .NET Microservice with ABP](https://abp.io/community/videos/migrating-tye-to-aspire-.net-microservice-with-abp-ga1t4ckr)
+
+* [HeadChannel Team](https://headchannel.co.uk/) has created **two** new community articles:
+ * [Managing Baseline Creation in Applications Based on ABP Framework](https://abp.io/community/articles/managing-baseline-creation-in-applications-based-on-abp-framework-yiacte5c)
+ * [How to Test The System Using PostgreSQL and TestContainers](https://abp.io/community/articles/how-to-test-the-system-using-postgresql-and-testcontainers-8yh8t0j8)
+
+* [Create a Generic HTTP Service to Consume a Web API](https://abp.io/community/articles/create-a-generic-http-service-to-consume-a-web-api-yidme2kq) by [Bart Van Hoey](https://github.com/bartvanhoey)
+* [Use User-Defined Function Mapping for Global Filter](https://abp.io/community/articles/use-userdefined-function-mapping-for-global-filter-pht26l07) by [Liming Ma](https://github.com/maliming)
+* [How to use .NET Aspire with ABP framework](https://abp.io/community/articles/how-to-use-.net-aspire-with-abp-framework-h29km4kk) by [Berkan ĆaĆmaz](https://twitter.com/berkansasmazz)
+* [Exciting New Feature in ABP.IO CMS Kit: Marked Item System](https://abp.io/community/articles/exciting-new-feature-in-abp.io-cms-kit-marked-item-system.-2hvpq0me) by [Suhaib Mousa](https://abp.io/community/members/suhaibmousa032@gmail.com)
+
+Thanks to the ABP Community for all the content they have published. You can also [post your ABP-related (text or video) content](https://abp.io/community/posts/submit) to the ABP Community.
+
+## Conclusion
+
+This version comes with some new features and a lot of enhancements to the existing features. You can see the [Road Map](https://abp.io/docs/8.3/release-info/road-map) documentation to learn about the release schedule and planned features for the next releases. Please try ABP v8.3 RC and provide feedback to help us release a more stable version.
+
+Thanks for being a part of this community!
\ No newline at end of file
diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/studio-beta-cover-image.png b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/studio-beta-cover-image.png
new file mode 100644
index 0000000000..cc468d4bf3
Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/studio-beta-cover-image.png differ
diff --git a/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/studio-switch-to-preview.png b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/studio-switch-to-preview.png
new file mode 100644
index 0000000000..32f6d01edb
Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-31 v8_3_Preview/studio-switch-to-preview.png differ
diff --git a/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/0.png b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/0.png
new file mode 100644
index 0000000000..ccfe417544
Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/0.png differ
diff --git a/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/1.png b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/1.png
new file mode 100644
index 0000000000..e6bb3f64b6
Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/1.png differ
diff --git a/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/2.png b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/2.png
new file mode 100644
index 0000000000..1bb1b0e9dd
Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/2.png differ
diff --git a/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/3.png b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/3.png
new file mode 100644
index 0000000000..5dd64da53e
Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/3.png differ
diff --git a/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/POST.md b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/POST.md
new file mode 100644
index 0000000000..3a29539a51
--- /dev/null
+++ b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/POST.md
@@ -0,0 +1,490 @@
+# Switching Between Organization Units
+
+In most companies, a user belongs to more than one organization. Also, in some applications, we need to filter the data shown depending on the logged-in user's organization. For such scenarios, allowing users to select one of the organizations they belong to is a good practice.
+
+
+
+## Creating a Data Filter with Organization Units
+
+### IHasOrganization
+
+First, we need to create a data filter that filters data based on the organization unit.
+
+The `IHasOrganization` interface is used to define the organization unit property in the entity classes, and used to filter the data based on the organization unit.
+
+```csharp
+public interface IHasOrganization
+{
+ public Guid? OrganizationId { get; set; }
+}
+```
+
+```csharp
+public class Book : AggregateRoot, IHasOrganization
+{
+ public string Name { get; set; }
+
+ public string Isbn { get; set; }
+
+ public Guid? OrganizationId { get; set; }
+}
+```
+
+### Entity Framework Core DbContext Implementation
+
+We will override the `ShouldFilterEntity` and `CreateFilterExpression` methods in the `BookStoreDbContext` class to configure the data filter for the entity that implements the `IHasOrganization` interface.
+
+```csharp
+public class BookStoreDbContext : AbpDbContext
+{
+ // Your others DbSet properties...
+
+ public DbSet Books { get; set; }
+
+ protected override void OnModelCreating(ModelBuilder builder)
+ {
+ base.OnModelCreating(builder);
+
+ // Your configure code...
+
+ builder.Entity(b =>
+ {
+ b.ToTable(BookStoreConsts.DbTablePrefix + "Book", BookStoreConsts.DbSchema);
+ b.ConfigureByConvention();
+ });
+ }
+
+ public CurrentOrganizationIdProvider CurrentOrganizationIdProvider => LazyServiceProvider.LazyGetRequiredService();
+
+ protected override bool ShouldFilterEntity(IMutableEntityType entityType)
+ {
+ if (typeof(IHasOrganization).IsAssignableFrom(typeof(TEntity)))
+ {
+ return true;
+ }
+
+ return base.ShouldFilterEntity(entityType);
+ }
+
+ protected override Expression> CreateFilterExpression(ModelBuilder modelBuilder)
+ {
+ var expression = base.CreateFilterExpression(modelBuilder);
+
+ if (typeof(IHasOrganization).IsAssignableFrom(typeof(TEntity)))
+ {
+ Expression> hasOrganizationIdFilter = e => EF.Property(e, "OrganizationId") == CurrentOrganizationIdProvider.CurrentOrganizationId;
+ expression = expression == null ? hasOrganizationIdFilter : QueryFilterExpressionHelper.CombineExpressions(expression, hasOrganizationIdFilter);
+ }
+
+ return expression;
+ }
+}
+```
+
+### The CurrentOrganizationIdProvider
+
+This class is used to get the current `organization id`, We will use the `AsyncLocal` class to store the current `organization id`, The `Change` method is used to change the current `organization id`. This service is registered as a singleton service.
+
+```csharp
+public class CurrentOrganizationIdProvider : ISingletonDependency
+{
+ private readonly AsyncLocal _currentOrganizationId = new AsyncLocal();
+
+ public Guid? CurrentOrganizationId => _currentOrganizationId.Value;
+
+ public virtual IDisposable Change(Guid? organizationId)
+ {
+ var parent = CurrentOrganizationId;
+ _currentOrganizationId.Value = organizationId;
+ return new DisposeAction(() =>
+ {
+ _currentOrganizationId.Value = parent;
+ });
+ }
+}
+```
+
+## Domain Service Implementation
+
+We will store the current `organization id` in the cache for the logged-in user. at the same time, we want to store it per browser. So we also add the different browser info for every logged-in user.
+
+In the `BrowserInfoClaimsPrincipalContributor` class, We add a random `BrowserInfo` claim to the logged-in user. And we will use `user id` and `browser info `as a cache key.
+
+```csharp
+public static class CurrentUserExtensions
+{
+ public static Guid? GetBrowserInfo(this ICurrentUser currentUser)
+ {
+ var claimValue = currentUser.FindClaimValue("BrowserInfo");
+ if (claimValue != null && Guid.TryParse(claimValue, out var result))
+ {
+ return result;
+ }
+ return null;
+ }
+}
+
+public class BrowserInfoClaimsPrincipalContributor : IAbpClaimsPrincipalContributor, ITransientDependency
+{
+ public Task ContributeAsync(AbpClaimsPrincipalContributorContext context)
+ {
+ var identity = context.ClaimsPrincipal.Identities.FirstOrDefault();
+ identity?.AddClaim(new Claim("BrowserInfo", Guid.NewGuid().ToString()));
+ return Task.CompletedTask;
+ }
+}
+```
+
+## Application Service Implementation
+
+The `CurrentOrganizationAppService` to get/change the current organization for the logged-in user. `BookAppService` to get the books based on the current `organization id`.
+
+```csharp
+[Authorize]
+public class CurrentOrganizationAppService : BookStoreAppService, ICurrentOrganizationAppService
+{
+ private readonly IdentityUserManager _identityUserManager;
+ private readonly IDistributedCache _cache;
+
+ public CurrentOrganizationAppService(IdentityUserManager identityUserManager, IDistributedCache cache)
+ {
+ _identityUserManager = identityUserManager;
+ _cache = cache;
+ }
+
+ public virtual async Task> GetOrganizationListAsync()
+ {
+ var user = await _identityUserManager.FindByIdAsync(CurrentUser.GetId().ToString());
+ var organizationUnits = await _identityUserManager.GetOrganizationUnitsAsync(user);
+ return organizationUnits.Select(ou => new OrganizationDto
+ {
+ Id = ou.Id,
+ DisplayName = ou.DisplayName
+ }).ToList();
+ }
+
+ public virtual async Task GetCurrentOrganizationIdAsync()
+ {
+ var cacheKey = CurrentUser.Id.ToString() + ":" + CurrentUser.GetBrowserInfo();
+ return (await _cache.GetAsync(cacheKey))?.OrganizationId;
+ }
+
+ public virtual async Task ChangeAsync(Guid? organizationId)
+ {
+ var cacheKey = CurrentUser.Id.ToString() + ":" + CurrentUser.GetBrowserInfo();
+ await _cache.SetAsync(cacheKey, new CurrentOrganizationIdCacheItem
+ {
+ OrganizationId = organizationId
+ });
+ }
+}
+```
+
+```csharp
+[Authorize]
+public class BookAppService : BookStoreAppService, IBookAppService
+{
+ private readonly IBasicRepository _bookRepository;
+
+ public BookAppService(IBasicRepository bookRepository)
+ {
+ _bookRepository = bookRepository;
+ }
+
+ public virtual async Task> GetListAsync()
+ {
+ var books = await _bookRepository.GetListAsync();
+ return books.Select(book => new BookDto
+ {
+ Id = book.Id,
+ Name = book.Name,
+ Isbn = book.Isbn,
+ OrganizationId = book.OrganizationId
+ }).ToList();
+ }
+}
+```
+
+## Seed Sample Data
+
+Let's seed some sample data for the `Book` and `Organization` entities.
+
+We added two organization units, `USA Branch` and `Turkey Branch`, and some books to each organization unit. Also, we added the `admin` user to both organization units.
+
+```csharp
+public class BooksDataSeedContributor : IDataSeedContributor, ITransientDependency
+{
+ public Guid UsaBranchId = Guid.Parse("00000000-0000-0000-0000-000000000001");
+ public Guid TurkeyBranchId = Guid.Parse("00000000-0000-0000-0000-000000000002");
+
+ private readonly IBasicRepository _bookRepository;
+ private readonly OrganizationUnitManager _organizationUnitManager;
+ private readonly IOrganizationUnitRepository _organizationUnitRepository;
+ private readonly IdentityUserManager _identityUserManager;
+ private readonly IUnitOfWorkManager _unitOfWorkManager;
+
+ public BooksDataSeedContributor(
+ IBasicRepository bookRepository,
+ OrganizationUnitManager organizationUnitManager,
+ IOrganizationUnitRepository organizationUnitRepository,
+ IdentityUserManager identityUserManager,
+ IUnitOfWorkManager unitOfWorkManager)
+ {
+ _bookRepository = bookRepository;
+ _organizationUnitManager = organizationUnitManager;
+ _organizationUnitRepository = organizationUnitRepository;
+ _identityUserManager = identityUserManager;
+ _unitOfWorkManager = unitOfWorkManager;
+ }
+
+ public virtual async Task SeedAsync(DataSeedContext context)
+ {
+ using (var uow = _unitOfWorkManager.Begin())
+ {
+ var usa = await _organizationUnitRepository.FindAsync(UsaBranchId);
+ if (usa == null)
+ {
+ await _organizationUnitManager.CreateAsync(new OrganizationUnit(UsaBranchId, "USA Branch"));
+ }
+
+ var turkey = await _organizationUnitRepository.FindAsync(TurkeyBranchId);
+ if (turkey == null)
+ {
+ await _organizationUnitManager.CreateAsync(new OrganizationUnit(TurkeyBranchId, "Turkey Branch"));
+ }
+
+ await uow.SaveChangesAsync();
+
+ var admin = await _identityUserManager.FindByNameAsync("admin");
+ Check.NotNull(admin, "admin");
+
+ await _identityUserManager.AddToOrganizationUnitAsync(admin.Id, UsaBranchId);
+ await _identityUserManager.AddToOrganizationUnitAsync(admin.Id, TurkeyBranchId);
+
+ if (await _bookRepository.GetCountAsync() <= 0)
+ {
+ await _bookRepository.InsertAsync(new Book
+ {
+ Name = "1984",
+ Isbn = "978-0451524935",
+ OrganizationId = UsaBranchId
+ });
+
+ await _bookRepository.InsertAsync(new Book
+ {
+ Name = "Animal Farm",
+ Isbn = "978-0451526342",
+ OrganizationId = UsaBranchId
+ });
+
+ await _bookRepository.InsertAsync(new Book
+ {
+ Name = "Brave New World",
+ Isbn = "978-0060850524",
+ OrganizationId = UsaBranchId
+ });
+
+ await _bookRepository.InsertAsync(new Book
+ {
+ Name = "Fahrenheit 451",
+ Isbn = "978-1451673319",
+ OrganizationId = TurkeyBranchId
+ });
+
+ await _bookRepository.InsertAsync(new Book
+ {
+ Name = "The Catcher in the Rye",
+ Isbn = "978-0316769488",
+ OrganizationId = TurkeyBranchId
+ });
+
+ await _bookRepository.InsertAsync(new Book
+ {
+ Name = "To Kill a Mockingbird",
+ Isbn = "978-0061120084",
+ OrganizationId = TurkeyBranchId
+ });
+ }
+
+ await uow.CompleteAsync();
+ }
+ }
+}
+```
+
+## Web Page Implementation
+
+We will add a dropdown list to the top right corner of the page to allow users to select the organization they belong to. When the dropdown list changes, we will call the application service api to change the current `organization id`.
+
+```csharp
+public class OrganizationUnitComponent : AbpViewComponent
+{
+ public async Task InvokeAsync()
+ {
+ var currentOrganizationAppService = LazyServiceProvider.GetRequiredService();
+ var organizationDtos = await currentOrganizationAppService.GetOrganizationListAsync();
+ var currentOrganizationId = await currentOrganizationAppService.GetCurrentOrganizationIdAsync();
+ return View("/Components/OrganizationUnits/Default.cshtml", new OrganizationUnitComponentModel
+ {
+ CurrentOrganizationId = currentOrganizationId,
+ OrganizationDtos = organizationDtos
+ });
+ }
+}
+
+public class OrganizationUnitComponentModel
+{
+ public Guid? CurrentOrganizationId { get; set; }
+
+ public List OrganizationDtos { get; set; }
+}
+```
+
+```html
+@using Microsoft.AspNetCore.Mvc.TagHelpers
+@using Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers
+@model BookStore.Web.Components.OrganizationUnits.OrganizationUnitComponentModel
+
+
+
+
+```
+
+Add the `OrganizationUnitComponent` to the toolbar.
+
+```csharp
+public class BookStoreToolbarContributor : IToolbarContributor
+{
+ public virtual Task ConfigureToolbarAsync(IToolbarConfigurationContext context)
+ {
+ // ...
+
+ if (context.Toolbar.Name == StandardToolbars.Main)
+ {
+ context.Toolbar.Items.Add(new ToolbarItem(typeof(OrganizationUnitComponent)).RequireAuthenticated());
+ }
+
+ return Task.CompletedTask;
+ }
+}
+```
+
+In addition, we also need to add a middleware after `UseAuthorization` to change the current `organization id`.
+
+```csharp
+app.UseAuthorization();
+app.Use(async (httpContext, next) =>
+{
+ var currentUser = httpContext.RequestServices.GetRequiredService();
+ var cacheKey = currentUser.Id.ToString() + ":" + currentUser.GetBrowserInfo();
+ var cache = httpContext.RequestServices.GetRequiredService>();
+ var cacheItem = await cache.GetAsync(cacheKey);
+ if (cacheItem != null)
+ {
+ var currentOrganizationIdProvider = httpContext.RequestServices.GetRequiredService();
+ currentOrganizationIdProvider.Change(cacheItem.OrganizationId);
+ }
+ await next(httpContext);
+});
+// ...
+```
+
+The `Index` page will show the books based on the current `organization id`.
+
+```cshtml
+public class IndexModel : BookStorePageModel
+{
+ public List Books { get; set; } = new List();
+ public string? OrganizationName { get; set; }
+
+ protected readonly IBookAppService BookAppService;
+ protected readonly ICurrentOrganizationAppService CurrentOrganizationAppService;
+ protected readonly IOrganizationUnitRepository OrganizationUnitRepository;
+
+ public IndexModel(
+ IBookAppService bookAppService,
+ ICurrentOrganizationAppService currentOrganizationAppService,
+ IOrganizationUnitRepository organizationUnitRepository)
+ {
+ BookAppService = bookAppService;
+ CurrentOrganizationAppService = currentOrganizationAppService;
+ OrganizationUnitRepository = organizationUnitRepository;
+ }
+
+ public async Task OnGetAsync()
+ {
+ if (CurrentUser.IsAuthenticated)
+ {
+ var currentOrganizationId = await CurrentOrganizationAppService.GetCurrentOrganizationIdAsync();
+ if (currentOrganizationId.HasValue)
+ {
+ OrganizationName = (await OrganizationUnitRepository.GetAsync(currentOrganizationId.Value)).DisplayName;
+ }
+
+ Books = await BookAppService.GetListAsync();
+ }
+ }
+}
+```
+
+```html
+@page
+@model BookStore.Web.Pages.IndexModel
+@using Microsoft.AspNetCore.Mvc.Localization
+@using BookStore.Localization
+@inject IHtmlLocalizer L
+
+@if (!Model.OrganizationName.IsNullOrEmpty())
+{
+ The books belonging to @Model.OrganizationName organization
+}
+
+
+ @foreach(var book in Model.Books)
+ {
+ - Book Name: @book.Name, ISBN: @book.Isbn
+ }
+
+```
+
+### Final UI
+
+The final UI will look like this:
+
+The index page will show empty if the current organization id is not set.
+After selecting the organization unit, the index page will show the books based on the selected organization unit.
+
+
+
+
+
+
+
+## Summary
+
+In this blog post. We showd simple implementation of switching between organization units. You can extend this implementation to meet your requirements.
+
+After [ABP 8.3](https://github.com/abpframework/abp/pull/20065) we introduced [User-defined function mapping](https://learn.microsoft.com/en-us/ef/core/querying/user-defined-function-mapping) feature for global filters which will gain performance improvements.
+
+## References
+
+- [Data Filtering](https://abp.io/docs/latest/framework/infrastructure/data-filtering)
+- [Claims Principal Factory](https://abp.io/docs/latest/framework/fundamentals/authorization#claims-principal-factory)
diff --git a/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/cover.jpg b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/cover.jpg
new file mode 100644
index 0000000000..3503744fbc
Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-01-switching-between-organization-units/cover.jpg differ
diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/POST.md b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/POST.md
new file mode 100644
index 0000000000..69da89f2c0
--- /dev/null
+++ b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/POST.md
@@ -0,0 +1,78 @@
+# New ABP Documentation System: Everything You Need In One Place đŁ
+
+We have combined the ABP (open-source) and ABP Commercial (paid) documents into a single, comprehensive resource. This unification brings you a better experience in the documentation system, helps you find what you're looking for more easily, allows you to read the documents that are related to each other one after the other, and also provides Google Search and Google Translation support for the documents.
+
+
+
+Let's see what's new with the unified documentation system in detail:
+
+## All Documentation In One Place đ
+
+We decided to combine the ABP (open-source) and ABP Commercial (paid) documents into a single place, along with [the new ABP Platform Unification](https://abp.io/blog/new-abp-platform-is-live).
+
+The new documentation address is [abp.io/docs](https://abp.io/docs) and seen like below:
+
+
+
+This unified documentation brings you a better search capability with Google Search support, allows you to not need to switch between documentation websites to read both framework and commercial features, look what you are looking for more easily from the unified menu structure, following new features and their documentation in a more stable and easier way.
+
+## Accessing Documents with Older Versionsđïž
+
+From v8.2, with the new documentation system, since we merged all documents into a single place, you don't need to select if you want to show a framework or commercial document. However, if you want to access an old document, for example, if you are using an older version of ABP or don't want to create the solutions from ABP Studio and instead prefer ABP CLI (in the getting started and startup template docs, ABP Studio is shown for project creation and other features, for instance), you can change the version from the version select-box (prior to v8.2), and select which document type (framework or commercial) you want to read and then find/choose the document that you want:
+
+
+
+You can access any old-version document as you would before, by specifying the version. But we suggest you update your solution to v8.2+ and start using ABP Studio! By doing that, you can get more benefits from the new features, and edge-cutting features of ABP Studio and easily manage your application from development to production!
+
+## Documentation Updates đ
+
+With the [announcement of ABP Studio (beta) General Availability](https://abp.io/blog/announcing-abp-studio-general-availability), we made some improvements in our documents. Starting from v8.2, since ABP Studio is the suggested way to create and manage your applications, we updated the [Get started](https://abp.io/docs/latest/get-started) documentation and some other documents along with, and explained project creation via ABP Studio. If you prefer [creating a new solution with the ABP CLI](https://abp.io/docs/latest/cli), you can use the new ABP CLI as you did the old one before.
+
+Besides that, we revised all of our documents, updated most of them according to the [new ABP Platform unification](https://abp.io/blog/new-abp-platform-is-live). For example, we merged our migration guide documents into single documents for each version and categorized the related topics you need to do when updating your solutions under the **open-source** and **pro** sections, so either you are an open-source template user or a license owner, you can easily jump to the related section and read them easily and accordingly:
+
+
+
+Since we combined ABP (framework) and ABP Commercial documents, we added information notes in each document that indicate if the related feature is in your license plan or not. An example screenshot from ABP Suite documentation can be seen as follow:
+
+
+
+Also, for the application modules, we added **(PRO)** postfixes in the navigation menu for you to easily understand if the module is for license owners or open-source users. Thanks to that you can easily distinguish the related application modules and read the related module documentation to understand it:
+
+
+
+
+## New Navigation Tree đ
+
+With the documentation unification, we re-structured the navigation tree of the documents:
+
+
+
+The new navigation tree allows you to find any document you want in a more desired way, in the related sub-menu. For example, if you want to learn more about *modularity*, you can find under the **Framework > Architecture > Modularity** menu items, or if you want to learn more about the ABP Studio, you can find the all related docs under the root **Tools** menu.
+
+## Google Translate & Search Capabilities đ
+
+In ABP v8.3, we made some improvements in the [Docs Module](https://abp.io/docs/8.3/modules/docs), added Google Search support for better findings in the documentation, and introduced Google Translation for the documentation system. After implementing these features, we integrated them into our documentation system and removed the languages select box from the menu:
+
+
+
+From now on, we will provide documents in English only. The reason behind that is, that with the new Google Translate support, you can directly translate any documentation to the desired language (of course, must be one of the supported languages). Thanks to the Google Translate feature, you can read the official documentation in your own language, and we as the core team, don't need to synchronize the documentation between different languages, it was really hard to keep them up to date, and now they all will be available all the time in the all supported languages.
+
+
+
+Also, thanks to Google Search, now you can search specific keywords to easily find the related topic in the documentation. For example, if you search the **Validation** keyword, Google will list all related documents according to their importance and relevancy:
+
+## Feedbacks đ
+
+Besides all changes, we also added a **feedback section** at the end of each document. You can share your thoughts, suggestions, or criticism for specific documentation. We would like to hear more from you about our documentation quality and get suggestions from each one of you to improve our documents and platform, so it will be much appreciated if you share your feedback for any documentation you want, please don't hesitate!
+
+
+
+You can either directly scroll down to the bottom directly for a certain document, or click the **Feedback** action button to navigate to the feedbacks section, and provide feedback:
+
+
+
+## Conclusion đŻ
+
+To see the new ABP documentation system, please visit the [abp.io/docs](https://abp.io/docs/latest/) website. Check out the new navigation tree, read the documents you want, provide feedback to help us improve our documents, and more...
+
+We look forward to your feedback and continued support as we grow together! Thanks in advance đ
diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/abp-docs.png b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/abp-docs.png
new file mode 100644
index 0000000000..7dbf8f7912
Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/abp-docs.png differ
diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/blog-cover.png b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/blog-cover.png
new file mode 100644
index 0000000000..4aa3bd0222
Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/blog-cover.png differ
diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/docs-feedback-section.png b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/docs-feedback-section.png
new file mode 100644
index 0000000000..68dddcad64
Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/docs-feedback-section.png differ
diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/docs-feedbacks.png b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/docs-feedbacks.png
new file mode 100644
index 0000000000..6584dfc015
Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/docs-feedbacks.png differ
diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/google-search-result.png b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/google-search-result.png
new file mode 100644
index 0000000000..082c567f8c
Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/google-search-result.png differ
diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/google-translate-and-search.png b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/google-translate-and-search.png
new file mode 100644
index 0000000000..9398fa1070
Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/google-translate-and-search.png differ
diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/in-this-document.png b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/in-this-document.png
new file mode 100644
index 0000000000..46c8de76da
Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/in-this-document.png differ
diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/navigation-menu.png b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/navigation-menu.png
new file mode 100644
index 0000000000..7b4fdbba8e
Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/navigation-menu.png differ
diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/old-docs.png b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/old-docs.png
new file mode 100644
index 0000000000..269159c651
Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/old-docs.png differ
diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/pro-modules.png b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/pro-modules.png
new file mode 100644
index 0000000000..8556ff38af
Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/pro-modules.png differ
diff --git a/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/suite-license-note.png b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/suite-license-note.png
new file mode 100644
index 0000000000..3459635322
Binary files /dev/null and b/docs/en/Blog-Posts/2024-08-13 New-ABP-Documentation-System/suite-license-note.png differ
diff --git a/docs/en/Blog-Posts/2024-09-06 v8_3_Release_Stable/POST.md b/docs/en/Blog-Posts/2024-09-06 v8_3_Release_Stable/POST.md
new file mode 100644
index 0000000000..e69fbb86ea
--- /dev/null
+++ b/docs/en/Blog-Posts/2024-09-06 v8_3_Release_Stable/POST.md
@@ -0,0 +1,77 @@
+# ABP.IO Platform 8.3 Final Has Been Released!
+
+
+
+[ABP](https://abp.io/) 8.3 stable version has been released today.
+
+## What's New With Version 8.3?
+
+All the new features were explained in detail in the [8.3 RC Announcement Post](https://blog.abp.io/abp/announcing-abp-8-3-release-candidate), so there is no need to review them again. You can check it out for more details.
+
+## Getting Started with 8.3
+
+### Creating New Solutions
+
+You can check the [Get Started page](https://abp.io/get-started) to see how to get started with ABP. You can either download [ABP Studio](https://abp.io/get-started#abp-studio-tab) (**recommended**, if you prefer a user-friendly GUI application - desktop application) or use the [ABP CLI](https://abp.io/docs/latest/cli) to create new solutions.
+
+By default, ABP Studio uses stable versions to create solutions. Therefore, it will be creating the solution with the latest stable version, which is v8.3 for now, so you don't need to specify the version.
+
+### How to Upgrade an Existing Solution
+
+You can upgrade your existing solutions with either ABP Studio or ABP CLI. In the following sections, both approaches are explained:
+
+### Upgrading via ABP Studio
+
+If you are already using the ABP Studio, you can upgrade it to the latest version to align it with ABP v8.3. ABP Studio periodically checks for updates in the background, and when a new version of ABP Studio is available, you will be notified through a modal. Then, you can update it by confirming the opened modal. See [the documentation](https://abp.io/docs/latest/studio/installation#upgrading) for more info.
+
+After upgrading the ABP Studio, then you can open your solution in the application, and simply click the **Switch to stable** action button to instantly upgrade your solution:
+
+
+
+### Upgrading via ABP CLI
+
+Alternatively, you can upgrade your existing solution via ABP CLI. First, you need to install the ABP CLI or upgrade it to the latest version.
+
+If you haven't installed it yet, you can run the following command:
+
+```bash
+dotnet tool install -g Volo.Abp.Studio.Cli
+```
+
+Or to update the existing CLI, you can run the following command:
+
+```bash
+dotnet tool update -g Volo.Abp.Studio.Cli
+```
+
+After installing/updating the ABP CLI, you can use the [`update` command](https://abp.io/docs/latest/CLI#update) to update all the ABP related NuGet and NPM packages in your solution as follows:
+
+```bash
+abp update
+```
+
+> You can run this command in the root folder of your solution.
+
+## Migration Guides
+
+There are a few breaking changes in this version that may affect your application. Please read the migration guide carefully, if you are upgrading from v8.2 or earlier: [ABP Version 8.3 Migration Guide](https://abp.io/docs/8.3/release-info/migration-guides/abp-8-3)
+
+## Community News
+
+### New ABP Community Posts
+
+As always, exciting articles have been contributed by the ABP community. I will highlight some of them here:
+
+* [Alper Ebicoglu](https://twitter.com/alperebicoglu) has created **three** new community articles:
+ * [Do You Really Need Multi-tenancy?](https://abp.io/community/articles/do-you-really-need-multitenancy-hpwn44r3)
+ * [What is Angular Schematics?](https://abp.io/community/articles/what-is-angular-schematics-2z4jusf5)
+ * [Understanding Angular AOT vs JIT Compilations](https://abp.io/community/articles/understanding-angular-aot-vs-jit-compilations-0r0a0a3f)
+* [Dynamic Widget Communication](https://abp.io/community/articles/dynamic-widget-communication-uvun7q23) by [Suhaib Mousa](https://suhaibmousa.com/)
+* [Introducing the Google Cloud Storage BLOB Provider](https://abp.io/community/articles/introducing-the-google-cloud-storage-blob-provider-yrt6azc0) by [Engincan Veske](https://twitter.com/EngincanVeske)
+* [Switching Between Organization Units](https://abp.io/community/articles/switching-between-organization-units-i5tokpzt) by [Liming Ma](https://github.com/maliming)
+
+Thanks to the ABP Community for all the content they have published. You can also [post your ABP-related (text or video) content](https://abp.io/community/posts/submit) to the ABP Community.
+
+## About the Next Version
+
+The next feature version will be 9.0. You can follow the [release planning here](https://github.com/abpframework/abp/milestones). Please [submit an issue](https://github.com/abpframework/abp/issues/new) if you have any problems with this version.
\ No newline at end of file
diff --git a/docs/en/Blog-Posts/2024-09-06 v8_3_Release_Stable/cover-image.png b/docs/en/Blog-Posts/2024-09-06 v8_3_Release_Stable/cover-image.png
new file mode 100644
index 0000000000..875be518af
Binary files /dev/null and b/docs/en/Blog-Posts/2024-09-06 v8_3_Release_Stable/cover-image.png differ
diff --git a/docs/en/Blog-Posts/2024-09-06 v8_3_Release_Stable/switch-to-stable.png b/docs/en/Blog-Posts/2024-09-06 v8_3_Release_Stable/switch-to-stable.png
new file mode 100644
index 0000000000..30883ebf92
Binary files /dev/null and b/docs/en/Blog-Posts/2024-09-06 v8_3_Release_Stable/switch-to-stable.png differ
diff --git a/docs/en/Community-Articles/2024-08-28-Understanding-AOT-vs-JIT/POST.md b/docs/en/Community-Articles/2024-08-28-Understanding-AOT-vs-JIT/POST.md
new file mode 100644
index 0000000000..c28a80af5e
--- /dev/null
+++ b/docs/en/Community-Articles/2024-08-28-Understanding-AOT-vs-JIT/POST.md
@@ -0,0 +1,64 @@
+
+
+
+
+Ahead-of-Time (AOT) compilation and Just-in-Time (JIT) compilation are two different methods for compiling Angular applications. Here's a breakdown of the differences between them:
+
+### **Ahead-of-Time (AOT) Compilation**
+
+**What is AOT?**
+
+- AOT compilation refers to the process of compiling your Angular application during the build phase, before the application is served to the browser.
+- The Angular compiler converts your TypeScript and HTML templates into efficient JavaScript code ahead of time.
+
+**Advantages:**
+
+1. **Faster Rendering:** Since the compilation is done beforehand, the browser receives precompiled code, leading to faster rendering and better performance when the app loads.
+2. **Smaller Bundle Size:** AOT eliminates the need for the Angular compiler in the client-side bundle, which reduces the overall bundle size.
+3. **Improved Security:** AOT compilation checks your templates and bindings during the build process, catching errors early and reducing the risk of injection attacks.
+4. **Early Error Detection:** Errors related to templates and bindings are caught during the build time rather than at runtime, leading to more robust and error-free applications.
+
+**When to Use:**
+
+- AOT is typically used in production builds because it provides better performance, smaller bundles, and more secure applications.
+
+**How to Use:**
+
+- AOT is the default when you run `ng build --prod` in an Angular project.
+
+### **Just-in-Time (JIT) Compilation**
+
+**What is JIT?**
+
+- JIT compilation occurs in the browser at runtime. The Angular compiler translates the TypeScript and HTML templates into JavaScript code just before the application runs in the browser.
+- The application is compiled on the fly as the user interacts with it.
+
+**Advantages:**
+
+1. **Faster Build Time:** Since thereâs no pre-compilation step, the build process is faster during development.
+2. **More Flexible Development:** JIT allows for rapid iteration during development, as changes can be quickly reflected without needing to rebuild the entire application.
+3. **Dynamic Components:** JIT allows for more flexibility in scenarios where components need to be dynamically created or compiled at runtime.
+
+**When to Use:**
+
+- JIT is typically used in development environments because it allows for quicker build times and easier debugging.
+
+**How to Use:**
+
+- JIT is the default compilation method when you run `ng serve` for development builds in Angular.
+
+### **Comparison Summary:**
+
+| Feature | AOT (Ahead-of-Time) | JIT (Just-in-Time) |
+| ---------------------- | ----------------------------- | ---------------------------------- |
+| **Compilation Timing** | At build time | At runtime |
+| **Performance** | Faster application startup | Slower application startup |
+| **Bundle Size** | Smaller (no Angular compiler) | Larger (includes Angular compiler) |
+| **Error Detection** | Catches template errors early | Errors caught at runtime |
+| **Use Case** | Production | Development |
+| **Dynamic Components** | Less flexible | More flexible |
+
+### **Best Practices:**
+
+- **Use AOT** for production builds to ensure faster load times, smaller bundle sizes, and more secure applications.
+- **Use JIT** during development to take advantage of quicker builds and easier debugging.
\ No newline at end of file
diff --git a/docs/en/Community-Articles/2024-08-28-Understanding-AOT-vs-JIT/images/book.jpg b/docs/en/Community-Articles/2024-08-28-Understanding-AOT-vs-JIT/images/book.jpg
new file mode 100644
index 0000000000..a34fd1ff87
Binary files /dev/null and b/docs/en/Community-Articles/2024-08-28-Understanding-AOT-vs-JIT/images/book.jpg differ
diff --git a/docs/en/Community-Articles/2024-08-28-Understanding-AOT-vs-JIT/images/cover.png b/docs/en/Community-Articles/2024-08-28-Understanding-AOT-vs-JIT/images/cover.png
new file mode 100644
index 0000000000..418eb5ff22
Binary files /dev/null and b/docs/en/Community-Articles/2024-08-28-Understanding-AOT-vs-JIT/images/cover.png differ
diff --git a/docs/en/Community-Articles/2024-08-29-What-is-Angular-Schematics/Post.md b/docs/en/Community-Articles/2024-08-29-What-is-Angular-Schematics/Post.md
new file mode 100644
index 0000000000..c13c5ab345
--- /dev/null
+++ b/docs/en/Community-Articles/2024-08-29-What-is-Angular-Schematics/Post.md
@@ -0,0 +1,85 @@
+# What is Angular Schematics?
+
+
+
+**Angular Schematics** is a powerful tool which is part of the Angular CLI that allows developers to automate various development tasks by **generating and modifying code**. Schematics provides a way to create **templates and boilerplate code** for Angular applications or libraries, enabling consistency and reducing the amount of repetitive work.
+
+### Key Concepts of Angular Schematics:
+
+1. **Code Generation:**
+ - Schematics can generate boilerplate code for various Angular artifacts, such as components, services, modules, pipes... For example, when you run a command like `ng generate component my-component`, Angular uses a schematic to create the component files and update the necessary modules.
+
+2. **Code Modification:**
+ - Schematics can also modify existing code in your project. This includes tasks like updating configuration files, adding new routes, or modifying Angular modules. They can be very useful when upgrading projects to a new version of Angular or adding new features that require changes to the existing codebase.
+
+3. **Custom Schematics:**
+ - Developers can create their own custom schematics to automate repetitive tasks specific to their projects. For example, if your team frequently needs to set up a certain type of service or configure specific libraries, you can create a schematic that automates these steps. In [ABP Suite](https://abp.io/suite), we use the custom schematics templates to generate CRUD pages for Angular UI.
+
+4. **Collection of Schematics:**
+ - Schematics are often grouped into collections. The Angular CLI itself is a collection of schematics. You can create your own collection or use third-party schematic collections created by the Angular community.
+
+5. **Integration with Angular CLI:**
+ - Schematics is integrated with the Angular CLI. The `ng generate` and `ng add` commands are examples of how schematics are used in everyday Angular development. When you use these commands, the Angular CLI runs the corresponding schematic to perform the desired operation.
+
+6. **Upgrade Tasks:**
+ - Schematics can be used to automate the process of upgrading Angular applications. For example, the Angular Update command (`ng update`) uses schematics to automatically apply necessary changes to your project when upgrading to a new version of Angular.
+
+### Common Use Cases:
+
+- **Generating Components, Services, Modules.:** Easily create Angular building blocks with commands like `ng generate component`, `ng generate service`, or `ng generate module`.
+
+- **Adding Libraries:** Automatically set up and configure third-party libraries with `ng add`. For example, `ng add @angular/material` uses a schematic to install and configure Angular Material in your project.
+
+- **Automating Project Upgrades:** Simplify the process of upgrading Angular versions by running `ng update`, which uses schematics to make necessary code changes.
+
+- **Custom Project Scaffolding:** Create custom schematics to enforce your team's development standards and best practices by automating the creation of specific project structures.
+
+### How to Create a Custom Schematic:
+
+Creating a custom schematic involves several steps:
+1. **Install the Schematics CLI:**
+ ```bash
+ npm install -g @angular-devkit/schematics-cli
+ ```
+
+2. **Create a New Schematic Project:**
+ ```bash
+ schematics blank --name=my-schematic
+ cd my-schematic
+ ```
+
+3. **Define Your Schematic:** Modify the files in the schematic project to define what your schematic will generate or modify.
+
+4. **Test Your Schematic:** You can run your schematic locally using the `schematics` command.
+
+5. **Publish Your Schematic (Optional):** Once your schematic is ready, you can publish it to npm or include it in your Angular projects.
+
+#### Example:
+If you want to create a custom component with specific settings or styles, you can create a schematic to automate this. Every time a developer on your team needs to create this type of component, they can run the schematic, ensuring consistency across the project.
+
+
+
+### Helpful Links
+
+Here are the direct links for the Angular Schematics resources:
+
+- [Angular Official Documentation: Schematics Overview â angular.io](https://angular.io/guide/schematics)
+
+- [Creating Custom Schematics â angular.io](https://angular.io/guide/schematics-for-libraries)
+
+- [CLI Schematic Command â angular.io](https://angular.io/cli/schematic)
+
+- [Devkit Schematicsâ github.com](https://github.com/angular/angular-cli/tree/main/packages/angular_devkit/schematics)
+
+- [Schematics Examples â github.com](https://github.com/angular/angular-cli/tree/main/packages/schematics/angular)
+
+- [Debugging Angular Schematics â dev.to](https://dev.to/nikolasleblanc/debugging-angular-schematics-1ne0)
+
+- [Using Schematics with Nx â nx.dev](https://nx.dev/guides/using-angular-schematics)
+
+- [Schematics API â angular.io](https://angular.io/api/schematics)
+
+
+
+### Conclusion:
+Angular Schematics is a powerful tool for automating repetitive tasks, generating consistent code, and managing project upgrades. By leveraging schematics, Angular developers can save time, reduce errors, and enforce best practices across their projects.
\ No newline at end of file
diff --git a/docs/en/Community-Articles/2024-08-29-What-is-Angular-Schematics/cover.png b/docs/en/Community-Articles/2024-08-29-What-is-Angular-Schematics/cover.png
new file mode 100644
index 0000000000..3e155996e8
Binary files /dev/null and b/docs/en/Community-Articles/2024-08-29-What-is-Angular-Schematics/cover.png differ
diff --git a/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/Post.md b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/Post.md
new file mode 100644
index 0000000000..b80917f4c4
--- /dev/null
+++ b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/Post.md
@@ -0,0 +1,123 @@
+# Do You Really Need Multi-tenancy?
+
+This article discusses whether you need a multi-tenancy architecture for your next project. Answer my critical questions to decide if multi-tenancy suits your application or not!
+
+
+
+## Whatâs Multi-tenancy?
+
+Itâs an architectural approach to building SaaS solutions. In this model, the hardware and software resources are shared between tenants, and application data is virtually or physically isolated between tenants. Here, **the main goal is minimizing costs and maximizing customer count**.
+
+**An ideal multi-tenant application should be;**
+
+- A multi-tenancy system should be designed to **work seamlessly** and make your application code **multi-tenancy aware** as much as possible.
+- When a customer wants to separate their database, it **should also be deployable to on-premise**.
+
+
+
+
+
+---
+
+
+
+## Multi-tenant Development is Hard - Reconsider!
+
+**Developing a multi-tenant application is harder** compared to non-multi-tenant applications. You add `TenandId` to all your shared entities. And each time you make a query, you need to filter by `TenantId`. There is an increased risk of security breaches if one tenant's data is compromised. Multi-tenancy can limit the extent of customization available to each tenant since they all operate on the same core infrastructure. Also, in a microservice environment, things get two times more complicated. So you should carefully consider if you need multi-tenancy or not. Sometimes, I got questions like;
+
+
+
+**No! These are not multi-tenant applications.** It just needs a simple filtering by your different branches/faculties/departments/holding sub-companies/ groups or whatever hierarchy isâŠ
+**You are confusing "grouping" with "resource sharing".**
+
+---
+
+
+
+## Do I Really Need Multi-tenancy?
+
+Ask yourself the following questions if you cannot decide whether your app needs multi-tenancy or not;
+
+1. Can a user be shared among other tenants?
+2. Any tenant needs to see other tenant's data?
+3. Does your application break when you physically move one of the tenants?
+4. Do your customers need higher security and better GDPR enforcement?
+5. Do you need cumulative queries over your tenants?
+
+
+
+Let's answer these questions;
+
+
+
+##### **1. Can a user be shared among other tenants?**
+
+If you need to *share a user among other tenants, or in other words, users can be members of different tenants,* then **your application is definitely not multi-tenant**! Multi-tenancy means a tenantâs data is always isolated, even if itâs logically separated. **You cannot share a user among your tenants.** The reason is simple: In the future, if you move a tenant to on-premise, then your application will break!
+
+
+
+##### **2. Does any tenant need to see other tenants' data?**
+
+If your answer is **YES**, **then** **your application is not multi-tenant**. In multi-tenant apps, the tenant's data cannot be shared in any circumstances among the other tenants. Business decision-makers sometimes want to share some entities with other tenants. If there's this requirement, you shouldn't start a multi-tenant architecture. You can simply group these tenants manually. Again, reply to this question; **In the future, if I move a tenant physically to another environment, will my app still work properly?** In this case, it will not!
+
+
+
+Let's say your app is *Amazon.com* and you have a product entity *iPhone* that you want to share with other sellers. This requirement violates the multi-tenant rule. While your *Amazon.com* is still SaaS, it shouldn't be multi-tenant.
+
+On the other hand, if you serve several online shopping websites dedicated to different brands. Let's say Nike and Adidas want to have their own e-commerce websites. And your ***Amazon.com* provides these companies with their own subdomains: *nike.amazon.com* and *adidas.amazon.com***. In this architecture, these companies will have their own user, roles, settings. Also these companies will have their own branding like custom login screen, custom logo, different theme layouts, menu items, language options, payment gateways etc... Hence, **this is %100 multi-tenant.**
+
+
+
+##### **3. Does your application break when you physically move one of the tenants?**
+
+If your answer is **YES**, you should **stop making it multi-tenant**. It is **not a multi-tenant app**! This means your tenants are tightly coupled with the application's infrastructure or database, and this requirement prevents you from making it multi-tenant because it disrupts the entire system when you take out a tenant.
+
+
+
+
+##### **4. Do your customers need higher security and better GDPR enforcement?**
+
+If your answer is **YES**, you **should not make it multi-tenancy.** When a **hacker** gets into your server, he can **steal all your client data**. Also, if you have a security hole, **a tenant can gain access** to other tenants' data. Especially your tenants' data is being shared in the same database... On the other hand, some customers, for example, government agencies or banks, may be required to locate the database in their own geo-location and make it unreachable from the main application. In this case, you should go with a single-tenant architecture. Another difficulty is that some tenants may have **different data retention policies**, so you must implement different strategies for each tenant. In this case, you should also consider making it a single-tenant.
+
+
+
+##### **5. Do you need cumulative queries over your tenants?**
+
+This question is not a clear decision parameter for multi-tenancy. But it can be a supportive parameter for your decision. Actually, this is a common feature in multi-tenant systems where aggregated reporting or analytics across tenants is required. In a virtually isolated multi-tenant environment, you can easily do this by just disabling the multi-tenancy filter. However, when some of your tenants have separate databases or application instances, it becomes harder to get aggregate reports.
+
+Do you need cumulative queries over your tenants? If your answer is YES, then you should keep all your tenants' data in a shared database to easily query them. But if you still need to physically move some of the tenants, then you have the following strategies:
+
+* First, all your databases need to be on the same network so that you can gather data from different databases.
+* Second, in some cases, according to the GDPR requirements or government agency regulations, you must locate the database in their geo-location. And you cannot connect to these databases. In this case, you can create a Web API in your application that gives you a report for this specific tenant. Later, you'll gather the reports from all your tenants like this and merge them.
+* Third; When the tenant databases are in different geo-location (inaccessible), then each tenant can send their report to your central server. So you can generate cumulative reports.
+
+
+
+## Conclusion
+
+- It's important to decide on the first day whether your application needs to be multi-tenant. To decide this, consider these topics;
+
+ - **Do my tenants really have a relationship with each other?** No, they have nothing to do in common; **OK, go with multi-tenancy**.
+ - **My tenants don't have a relationship** with each other, and the only thing they have in common is sharing my application. **OK, go with multi-tenancy**.
+ - **When a tenant leaves the system (by removing their data), the other tenants also stop working** This means that the tenants are coupled. **Do not do multi-tenancy!**
+
+
+
+---
+
+
+
+
+
+Weâve been working for a long time on multi-tenancy, microservices, modular development topics, and developing tools and frameworks for repetitive development tasks. Check out the amazing open-source [ABP Framework](https://github.com/abpframework/abp), which provides all the alternative solutions to implement a multi-tenant architecture. The multi-tenancy logic is seamlessly done at the core level, and you can simply focus on your business code. Keep it simple, nice and neat with ABP.
+
+
+```bash
+ABP.IO: The Modern Way of Developing Web Apps for .NET Developers!
+```
+
+
+
+Alper Ebicoglu / [x.com/alperebicoglu](https://x.com/alperebicoglu)
+
+â ABP Team
diff --git a/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/coupled-tenants.png b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/coupled-tenants.png
new file mode 100644
index 0000000000..5dbe089084
Binary files /dev/null and b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/coupled-tenants.png differ
diff --git a/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/cover.png b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/cover.png
new file mode 100644
index 0000000000..0946615495
Binary files /dev/null and b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/cover.png differ
diff --git a/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/questions.png b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/questions.png
new file mode 100644
index 0000000000..d75731dbef
Binary files /dev/null and b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/questions.png differ
diff --git a/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/security-gdpr-db-retention.png b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/security-gdpr-db-retention.png
new file mode 100644
index 0000000000..ae38dae0e2
Binary files /dev/null and b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/security-gdpr-db-retention.png differ
diff --git a/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/shared-entity.png b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/shared-entity.png
new file mode 100644
index 0000000000..bb9b5d979d
Binary files /dev/null and b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/shared-entity.png differ
diff --git a/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/tenancy-schema.png b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/tenancy-schema.png
new file mode 100644
index 0000000000..952aca7266
Binary files /dev/null and b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/tenancy-schema.png differ
diff --git a/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/user-multiple-membership.png b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/user-multiple-membership.png
new file mode 100644
index 0000000000..9cd6bcfb48
Binary files /dev/null and b/docs/en/Community-Articles/2024-09-01-Do-You-Need-MultiTenancy/user-multiple-membership.png differ
diff --git a/docs/en/ambient-context-pattern.md b/docs/en/ambient-context-pattern.md
index 09f57c6cd7..411db43789 100644
--- a/docs/en/ambient-context-pattern.md
+++ b/docs/en/ambient-context-pattern.md
@@ -1,3 +1,3 @@
-## Ambient Context Pattern
+# Ambient Context Pattern
This document is planned to be written later.
\ No newline at end of file
diff --git a/docs/en/aspect-oriented-programming.md b/docs/en/aspect-oriented-programming.md
index 64f0fdb256..c578f1e89c 100644
--- a/docs/en/aspect-oriented-programming.md
+++ b/docs/en/aspect-oriented-programming.md
@@ -1,3 +1,3 @@
-## Dynamic Proxying / Interceptors
+# Dynamic Proxying / Interceptors
This document is planned to be written later.
\ No newline at end of file
diff --git a/docs/en/cli/index.md b/docs/en/cli/index.md
index 7b4dbd9502..ba3e6aabf8 100644
--- a/docs/en/cli/index.md
+++ b/docs/en/cli/index.md
@@ -3,6 +3,8 @@
ABP CLI (Command Line Interface) is a command line tool to perform some common operations for ABP based solutions or ABP Studio features.
> đ With **v8.2+**, the old/legacy ABP CLI has been replaced with a new CLI system to align with the new templating system and [ABP Studio](../studio/index.md). The new ABP CLI commands are explained in this documentation. However, if you want to learn more about the differences between the old and new CLIs, want to learn the reason for the change, or need guidance to use the old ABP CLI, please refer to the [Old vs New CLI](differences-between-old-and-new-cli.md) documentation.
+>
+> You may need to remove the Old CLI before installing the New CLI, by running the following command: `dotnet tool uninstall -g Volo.Abp.Cli`
## Installation
@@ -67,6 +69,7 @@ Here, is the list of all available commands before explaining their details:
* **`install-libs`**: Install NPM Packages for MVC / Razor Pages and Blazor Server UI types.
* **`clear-download-cache`**: Clears the templates download cache.
* **`check-extensions`**: Checks the latest version of the ABP CLI extensions.
+* **`install-old-cli`**: Installs old ABP CLI.
### help
@@ -102,6 +105,8 @@ abp cli update
abp cli update --preview
abp cli update --version 1.0.0
abp cli remove
+abp cli check-version
+abp cli clear-cache
````
### new
@@ -130,22 +135,22 @@ For more samples, go to [ABP CLI Create Solution Samples](new-command-samples.md
* `--template` or `-t`: Specifies the template name. Default template name is `app`, which generates a application solution. Available templates:
* **`empty`**: Empty solution template.
* **`app`**: Application template. Additional options:
- * `--ui` or `-u`: Specifies the UI framework. Default framework is `mvc`. Available frameworks:
+ * `--ui-framework` or `-u`: Specifies the UI framework. Default framework is `mvc`. Available frameworks:
* `mvc`: ASP.NET Core MVC. There are some additional options for this template:
* `--tiered`: Creates a tiered solution where Web and Http API layers are physically separated. If not specified, it creates a layered solution which is less complex and suitable for most scenarios. (*Available for* ***Team*** *or higher licenses*)
* `angular`: Angular UI. There are some additional options for this template:
* `--tiered`: The Auth Server project comes as a separate project and runs at a different endpoint. It separates the Auth Server from the API Host application. If not specified, you will have a single endpoint in the server side. (*Available for* ***Team*** *or higher licenses*)
- * `--pwa`: Specifies the project as Progressive Web Application.
+ * `--progressive-web-app` or `-pwa`: Specifies the project as Progressive Web Application.
* `blazor`: Blazor UI. There are some additional options for this template:
* `--tiered`The Auth Server project comes as a separate project and runs at a different endpoint. It separates the Auth Server from the API Host application. If not specified, you will have a single endpoint in the server side. (*Available for* ***Team*** *or higher licenses*)
- * `--pwa`: Specifies the project as Progressive Web Application.
+ * `--progressive-web-app` or `-pwa`: Specifies the project as Progressive Web Application.
* `blazor-server`: Blazor Server UI. There are some additional options for this template:
* `--tiered`: The Auth Server and the API Host project comes as separate projects and run at different endpoints. It has 3 startup projects: *HttpApi.Host*, *AuthServer* and *Blazor* and and each runs on different endpoints. If not specified, you will have a single endpoint for your web project. (*Available for* ***Team*** *or higher licenses*)
* `maui-blazor`: Blazor Maui UI (*Available for* ***Team*** *or higher licenses*). There are some additional options for this template:
* `--tiered`: The Auth Server and the API Host project comes as separate projects and run at different endpoints. It has 3 startup projects: *HttpApi.Host*, *AuthServer* and *Blazor* and and each runs on different endpoints. If not specified, you will have a single endpoint for your web project.
* `no-ui`: Without UI. No front-end layer will be created. There are some additional options for this template:
* `--tiered`: The Auth Server project comes as a separate project and runs at a different endpoint. It separates the Auth Server from the API Host application. If not specified, you will have a single endpoint in the server side. (*Available for* ***Team*** *or higher licenses*)
- * `--mobile` or `-m`: Specifies the mobile application framework. Default value is `react-native`. Available frameworks:
+ * `--mobile` or `-m`: Specifies the mobile application framework. Default value is `none`. Available frameworks:
* `none`: Without any mobile application.
* `react-native`: React Native.
* `maui`: MAUI. This mobile option is only available for ABP. (*Available for* ***Team*** *or higher licenses*)
@@ -153,15 +158,19 @@ For more samples, go to [ABP CLI Create Solution Samples](new-command-samples.md
* `ef`: Entity Framework Core.
* `mongodb`: MongoDB.
* `--connection-string` or `-cs`: Overwrites the default connection strings in all `appsettings.json` files. The default connection string is `Server=localhost;Database=MyProjectName;Trusted_Connection=True` for EF Core and it is configured to use the SQL Server. If you want to use the EF Core, but need to change the DBMS, you can change it as [described here](../framework/data/entity-framework-core/other-dbms.md) (after creating the solution).
+ * `--skip-migrations` or `-sm`: Skips the creating initial database migration step.
+ * `--skip-migrator` or `-smr`: Skips the run database migrator step.
* `--public-website`: Public Website is a front-facing website for describing your project, listing your products and doing SEO for marketing purposes. Users can login and register on your website with this website. This option is only included in PRO templates.
+ * `--without-cms-kit`: When you add a public website to your solution, it automatically includes the [CmsKit](./../modules/cms-kit-pro/index.md) module. If you don't want to include *CmsKit*, you can use this parameter.
* `--separate-tenant-schema`: Creates a different DbContext for tenant schema. If not specified, the tenant schema is shared with the host schema. This option is only included in PRO templates.
+ * `--sample-crud-page` or `-scp`: It adds the [BookStore](./../tutorials/book-store/index.md) sample to your solution.
* `--theme` or `-th`: Specifes the theme. Default theme is `leptonx`. Available themes:
* `leptonx`: LeptonX Theme. (*Available for* ***Team*** *or higher licenses*)
* `leptonx-lite`: LeptonX-Lite Theme.
* `basic`: Basic Theme.
* `--use-open-source-template`or `-uost`: Uses the open-source template. (*Available for* ***Team*** *or higher licenses*)
* **`app-nolayers`**: Single-layer application template. Additional options:
- * `--ui` or `-u`: Specifies the UI framework. Default framework is `mvc`. Available frameworks:
+ * `--ui-framework` or `-u`: Specifies the UI framework. Default framework is `mvc`. Available frameworks:
* `mvc`: ASP.NET Core MVC. There are some additional options for this template:
* `angular`: Angular UI. There are some additional options for this template:
* `blazor`: Blazor UI. There are some additional options for this template:
@@ -171,20 +180,23 @@ For more samples, go to [ABP CLI Create Solution Samples](new-command-samples.md
* `ef`: Entity Framework Core.
* `mongodb`: MongoDB.
* `--connection-string` or `-cs`: Overwrites the default connection strings in all `appsettings.json` files. The default connection string is `Server=localhost;Database=MyProjectName;Trusted_Connection=True` for EF Core and it is configured to use the SQL Server. If you want to use the EF Core, but need to change the DBMS, you can change it as [described here](../framework/data/entity-framework-core/other-dbms.md) (after creating the solution).
+ * `--skip-migrations` or `-sm`: Skips the creating initial database migration step.
+ * `--skip-migrator` or `-smr`: Skips the run database migrator step.
+ * `--sample-crud-page` or `-scp`: It adds the [BookStore](./../tutorials/book-store/index.md) sample to your solution.
* `--theme`: Specifes the theme. Default theme is `leptonx`. Available themes:
* `leptonx`: LeptonX Theme. (*Available for* ***Team*** *or higher licenses*)
* `leptonx-lite`: LeptonX-Lite Theme.
* `basic`: Basic Theme.
* `--use-open-source-template`or `-uost`: Uses the open-source template. (*Available for* ***Team*** *or higher licenses*)
* **`microservice`**: Microservice solution template (*Available for* ***Business*** *or higher licenses*). Additional options:
- * `--ui` or `-u`: Specifies the UI framework. Default framework is `mvc`. Available frameworks:
+ * `--ui-framework` or `-u`: Specifies the UI framework. Default framework is `mvc`. Available frameworks:
* `mvc`: ASP.NET Core MVC. There are some additional options for this template:
* `angular`: Angular UI. There are some additional options for this template:
* `blazor`: Blazor UI. There are some additional options for this template:
* `blazor-server`: Blazor Server UI. There are some additional options for this template:
* `maui-blazor`: Blazor Maui UI. There are some additional options for this template:
* `no-ui`: Without UI. No front-end layer will be created. There are some additional options for this template:
- * `--mobile` or `-m`: Specifies the mobile application framework. Default value is `react-native`. Available frameworks:
+ * `--mobile` or `-m`: Specifies the mobile application framework. Default value is `none`. Available frameworks:
* `none`: Without any mobile application.
* `react-native`: React Native.
* `maui`: MAUI.
@@ -208,6 +220,7 @@ For more samples, go to [ABP CLI Create Solution Samples](new-command-samples.md
* `--dont-run-install-libs`: Skip installing client side packages.
* `--dont-run-bundling`: Skip bundling for Blazor packages.
* `--no-kubernetes-configuration` or `-nkc`: Skips the Kubernetes configuration files.
+* `--no-social-logins` or `-nsl`: Skipts the social login configuration.
* *Module Options*: You can skip some modules if you don't want to add them to your solution (*Available for* ***Team*** *or higher licenses*). Available commands:
* `-no-saas`: Skips the Saas module.
* `-no-gdpr`: Skips the GDPR module.
@@ -779,6 +792,7 @@ abp switch-to-local --paths "D:\Github\abp|D:\Github\my-repo"
### upgrade
Upgrades the ABP modules to pro modules, such as upgrading [Identity](../modules/identity.md) to [Identity Pro](../modules/identity-pro.md). You can use this for [Single Layer Web Application](../solution-templates/single-layer-web-application/index.md) and [Layered Web Application](../solution-templates/layered-web-application/index.md) templates.
+This command is specially designed for users who already started their development before having a license. Therefore this command requires license.
Usage:
@@ -790,12 +804,19 @@ Examples:
````bash
abp upgrade -t app
+abp upgrade -t app --language-management --gdpr --audit-logging-ui --text-template-management --openiddict-pro
+abp upgrade -t app-nolayers --audit-logging-ui
abp upgrade -t app-nolayers -p D:\MyProjects\MyProject
````
#### Options
* `--path` or `-p`: Specifies the module path. The module should be in that directory. If not specified, the default is the current directory.
+* `--gdpr`: Installs GDPR module too.
+* `--language-management`: Installs Language Management module too.
+* `--audit-logging-ui`: Installs Audit Logging Pro (UI) module too.
+* `--text-template-management`: Installs Text Template Management module too.
+* `--openiddict-pro`: Installs OpenIddict Pro (UI) module too.
### translate
@@ -903,6 +924,7 @@ abp bundle [options]
* ```--project-type``` or ```-t```: Specifies the project type. Default type is `webassembly`. Available types:
* `webassembly`
* `maui-blazor`
+* `--version` or `-v`: Specifies the ABP Framework version that the project is using. This is helpful for those who use central package management.
`bundle` command reads the `appsettings.json` file inside the Blazor and MAUI Blazor project for bundling options. For more details about managing style and script references in Blazor or MAUI Blazor apps, see [Managing Global Scripts & Styles](../framework/ui/blazor/global-scripts-styles.md)
@@ -932,6 +954,20 @@ Usage:
abp check-extensions
````
+### install-old-cli
+
+This command installs the old ABP CLI with a specific version if it's specified. Otherwise, it installs the old ABP CLI with the latest stable version. Then, [you can directly use the old ABP CLI by simply passing the `--old` parameter at the end of the command or using the `abp-old` as the executing command](./differences-between-old-and-new-cli.md#using-the-old-abp-cli).
+
+Usage:
+
+```bash
+abp install-old-cli [options]
+```
+
+#### Options
+
+* ```--version``` or ```-v```: Specifies the version for ABP CLI to be installed.
+
## See Also
* [Examples for the new command](./new-command-samples.md)
diff --git a/docs/en/cli/new-command-samples.md b/docs/en/cli/new-command-samples.md
index 0e6796a8ca..06099a3e29 100644
--- a/docs/en/cli/new-command-samples.md
+++ b/docs/en/cli/new-command-samples.md
@@ -36,6 +36,12 @@ The following commands are for creating Angular UI projects:
abp new Acme.BookStore -t app -u angular -m none --separate-auth-server --database-provider mongodb -csf
```
+* **No DB migration!**, the DB migration will not be generated
+
+ ```bash
+ abp new Acme.BookStore -u angular --skip-migrations --skip-migrator
+ ```
+
## MVC
The following commands are for creating MVC UI projects:
@@ -72,7 +78,12 @@ The following commands are for creating MVC UI projects:
_Note that Public Website is only included in PRO templates._
+* **No initial configuration!**, the DB migration will not be generated, client-side scripts will not be installed and bundling will not run
+ ```bash
+ abp new Acme.BookStore -u mvc --skip-migrations --skip-migrator --dont-run-install-libs --dont-run-bundling
+ ```
+
## Blazor WebAssembly
The following commands are for creating Blazor WASM projects:
@@ -94,6 +105,12 @@ The following commands are for creating Blazor WASM projects:
```bash
abp new Acme.BookStore -u blazor --database-provider mongodb --mobile none -csf
```
+
+* **Client-side libraries are not loaded automatically!**, the libs folder will not be installed from ([NPM](https://www.npmjs.com/))
+
+ ```bash
+ abp new Acme.BookStore -u blazor --dont-run-install-libs
+ ```
## Blazor Server
@@ -116,6 +133,12 @@ The following commands are for creating Blazor projects:
```bash
abp new Acme.BookStore -u blazor --database-provider mongodb --mobile none -csf
```
+
+* **Skip bundling for the packages**,
+
+ ```bash
+ abp new Acme.BookStore -u blazor --dont-run-bundling
+ ```
## No UI
diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json
index 28adea175d..b3d2b55678 100644
--- a/docs/en/docs-nav.json
+++ b/docs/en/docs-nav.json
@@ -2,8 +2,11 @@
"items": [
{
"text": "Get started",
- "path": "get-started",
"items": [
+ {
+ "text": "Overview",
+ "path": "get-started"
+ },
{
"text": "Single-layer solution",
"path": "get-started/single-layer-web-application.md"
@@ -42,10 +45,17 @@
{
"text": "Tutorials",
"items": [
+ {
+ "text": "Overview",
+ "path": "tutorials"
+ },
{
"text": "TODO application",
- "path": "tutorials/todo",
"items": [
+ {
+ "text": "Overview",
+ "path": "tutorials/todo"
+ },
{
"text": "Single-layer solution",
"path": "tutorials/todo/single-layer"
@@ -58,8 +68,11 @@
},
{
"text": "Book Store application",
- "path": "tutorials/book-store/index.md",
"items": [
+ {
+ "text": "Overview",
+ "path": "tutorials/book-store"
+ },
{
"text": "1: Creating the server side",
"path": "tutorials/book-store/part-01.md"
@@ -111,10 +124,17 @@
{
"text": "Tools",
"items": [
+ {
+ "text": "Overview",
+ "path": "tools.md"
+ },
{
"text": "ABP CLI",
- "path": "cli",
"items": [
+ {
+ "text": "Overview",
+ "path": "cli"
+ },
{
"text": "Examples for the new command",
"path": "cli/new-command-samples.md"
@@ -123,19 +143,22 @@
},
{
"text": "ABP Studio",
- "path": "studio",
"items": [
{
- "text": "Installation",
- "path": "studio/installation.md"
+ "text": "Overview",
+ "path": "studio"
},
{
- "text": "Overview",
- "path": "studio/overview.md"
+ "text": "Installation",
+ "path": "studio/installation.md"
},
{
"text": "Fundamentals",
"items": [
+ {
+ "text": "Overview",
+ "path": "studio/overview.md"
+ },
{
"text": "Solution Explorer",
"path": "studio/solution-explorer.md"
@@ -161,6 +184,14 @@
{
"text": "Concepts",
"path": "studio/concepts.md"
+ },
+ {
+ "text": "Version Compatibility",
+ "path": "studio/version-compatibility.md"
+ },
+ {
+ "text": "Release Notes",
+ "path": "studio/release-notes.md"
}
]
},
@@ -168,7 +199,7 @@
"text": "ABP Suite",
"items": [
{
- "text": "Overall",
+ "text": "Overview",
"path": "suite"
},
{
@@ -189,8 +220,11 @@
},
{
"text": "Generating CRUD Page",
- "path": "suite/generating-crud-page.md",
"items": [
+ {
+ "text": "Overview",
+ "path": "suite/generating-crud-page.md"
+ },
{
"text": "Creating Many-To-Many Relationship",
"path": "suite/creating-many-to-many-relationship.md"
@@ -239,14 +273,21 @@
{
"text": "Fundamentals",
"items": [
+ {
+ "text": "Overview",
+ "path": "framework/fundamentals"
+ },
{
"text": "Application Startup",
"path": "framework/fundamentals/application-startup.md"
},
{
"text": "Authorization",
- "path": "framework/fundamentals/authorization.md",
"items": [
+ {
+ "text": "Overview",
+ "path": "framework/fundamentals/authorization.md"
+ },
{
"text": "Dynamic Claims",
"path": "framework/fundamentals/dynamic-claims.md"
@@ -255,8 +296,11 @@
},
{
"text": "Caching",
- "path": "framework/fundamentals/caching.md",
"items": [
+ {
+ "text": "Overview",
+ "path": "framework/fundamentals/caching.md"
+ },
{
"text": "Redis Cache",
"path": "framework/fundamentals/redis-cache.md"
@@ -273,8 +317,11 @@
},
{
"text": "Dependency Injection",
- "path": "framework/fundamentals/dependency-injection.md",
"items": [
+ {
+ "text": "Overview",
+ "path": "framework/fundamentals/dependency-injection.md"
+ },
{
"text": "AutoFac Integration",
"path": "framework/fundamentals/autofac-integration.md"
@@ -303,8 +350,11 @@
},
{
"text": "Validation",
- "path": "framework/fundamentals/validation.md",
"items": [
+ {
+ "text": "Overview",
+ "path": "framework/fundamentals/validation.md"
+ },
{
"text": "FluentValidation Integration",
"path": "framework/fundamentals/fluent-validation.md"
@@ -316,14 +366,21 @@
{
"text": "Infrastructure",
"items": [
+ {
+ "text": "Overview",
+ "path": "framework/infrastructure"
+ },
{
"text": "Audit Logging",
"path": "framework/infrastructure/audit-logging.md"
},
{
"text": "Background Jobs",
- "path": "framework/infrastructure/background-jobs",
"items": [
+ {
+ "text": "Overview",
+ "path": "framework/infrastructure/background-jobs"
+ },
{
"text": "Hangfire Integration",
"path": "framework/infrastructure/background-jobs/hangfire.md"
@@ -340,8 +397,11 @@
},
{
"text": "Background Workers",
- "path": "framework/infrastructure/background-workers",
"items": [
+ {
+ "text": "Overview",
+ "path": "framework/infrastructure/background-workers"
+ },
{
"text": "Quartz Integration",
"path": "framework/infrastructure/background-workers/quartz.md"
@@ -356,7 +416,7 @@
"text": "BLOB Storing",
"items": [
{
- "text": "BLOB Storing System",
+ "text": "Overview",
"path": "framework/infrastructure/blob-storing"
},
{
@@ -386,6 +446,10 @@
"text": "AWS Provider",
"path": "framework/infrastructure/blob-storing/aws.md"
},
+ {
+ "text": "Google Cloud Storage Provider",
+ "path": "framework/infrastructure/blob-storing/google.md"
+ },
{
"text": "Create a Custom Provider",
"path": "framework/infrastructure/blob-storing/custom-provider.md"
@@ -426,7 +490,7 @@
"text": "Email Sending",
"items": [
{
- "text": "Email Sending System",
+ "text": "Overview",
"path": "framework/infrastructure/emailing.md"
},
{
@@ -443,7 +507,7 @@
"text": "Event Bus",
"items": [
{
- "text": "Overall",
+ "text": "Overview",
"path": "framework/infrastructure/event-bus"
},
{
@@ -452,8 +516,11 @@
},
{
"text": "Distributed Event Bus",
- "path": "framework/infrastructure/event-bus/distributed",
"items": [
+ {
+ "text": "Overview",
+ "path": "framework/infrastructure/event-bus/distributed"
+ },
{
"text": "Azure Service Bus Integration",
"path": "framework/infrastructure/event-bus/distributed/azure.md"
@@ -516,8 +583,11 @@
},
{
"text": "Text Templating",
- "path": "framework/infrastructure/text-templating",
"items": [
+ {
+ "text": "Overview",
+ "path": "framework/infrastructure/text-templating"
+ },
{
"text": "Razor Integration",
"path": "framework/infrastructure/text-templating/razor.md"
@@ -540,13 +610,16 @@
},
{
"text": "Architecture",
- "path": "framework/architecture",
"items": [
+ {
+ "text": "Overview",
+ "path": "framework/architecture"
+ },
{
"text": "Best Practices",
"items": [
{
- "text": "Overall",
+ "text": "Overview",
"path": "framework/architecture/best-practices"
},
{
@@ -556,6 +629,10 @@
{
"text": "Domain Layer",
"items": [
+ {
+ "text": "Overview",
+ "path": "framework/architecture/best-practices/domain-layer-overview.md"
+ },
{
"text": "Entities",
"path": "framework/architecture/best-practices/entities.md"
@@ -573,6 +650,10 @@
{
"text": "Application Layer",
"items": [
+ {
+ "text": "Overview",
+ "path": "framework/architecture/best-practices/application-layer-overview.md"
+ },
{
"text": "Application Services",
"path": "framework/architecture/best-practices/application-services.md"
@@ -586,6 +667,10 @@
{
"text": "Data Access",
"items": [
+ {
+ "text": "Overview",
+ "path": "framework/architecture/best-practices/data-access-overview.md"
+ },
{
"text": "Entity Framework Core Integration",
"path": "framework/architecture/best-practices/entity-framework-core-integration.md"
@@ -602,7 +687,7 @@
"text": "Modularity",
"items": [
{
- "text": "Basics",
+ "text": "Overview",
"path": "framework/architecture/modularity/basics.md"
},
{
@@ -613,7 +698,7 @@
"text": "Customizing/Extending Modules",
"items": [
{
- "text": "Overall",
+ "text": "Overview",
"path": "framework/architecture/modularity/extending/customizing-application-modules-guide.md"
},
{
@@ -636,12 +721,16 @@
"text": "Domain Driven Design",
"items": [
{
- "text": "Overall",
+ "text": "Overview",
"path": "framework/architecture/domain-driven-design"
},
{
"text": "Domain Layer",
"items": [
+ {
+ "text": "Overview",
+ "path": "framework/architecture/domain-driven-design/domain-layer.md"
+ },
{
"text": "Entities & Aggregate Roots",
"path": "framework/architecture/domain-driven-design/entities.md"
@@ -667,6 +756,10 @@
{
"text": "Application Layer",
"items": [
+ {
+ "text": "Overview",
+ "path": "framework/architecture/domain-driven-design/application-layer.md"
+ },
{
"text": "Application Services",
"path": "framework/architecture/domain-driven-design/application-services.md"
@@ -700,9 +793,17 @@
{
"text": "API Development",
"items": [
+ {
+ "text": "Overview",
+ "path": "framework/api-development"
+ },
{
"text": "ABP Endpoints",
"items": [
+ {
+ "text": "Overview",
+ "path": "framework/api-development/standard-apis"
+ },
{
"text": "Application Configuration",
"path": "framework/api-development/standard-apis/configuration.md"
@@ -742,12 +843,16 @@
{
"text": "User Interface",
"items": [
+ {
+ "text": "Overview",
+ "path": "framework/ui"
+ },
{
"text": "MVC / Razor Pages",
"items": [
{
- "text": "Overall",
- "path": "framework/ui/mvc-razor-pages/overall.md"
+ "text": "Overview",
+ "path": "framework/ui/mvc-razor-pages/overall"
},
{
"text": "Navigation / Menus",
@@ -791,8 +896,11 @@
},
{
"text": "Tag Helpers",
- "path": "framework/ui/mvc-razor-pages/tag-helpers",
"items": [
+ {
+ "text": "Overview",
+ "path": "framework/ui/mvc-razor-pages/tag-helpers"
+ },
{
"text": "Form Elements",
"path": "framework/ui/mvc-razor-pages/tag-helpers/form-elements.md"
@@ -829,8 +937,11 @@
},
{
"text": "Theming",
- "path": "framework/ui/mvc-razor-pages/theming.md",
"items": [
+ {
+ "text": "Overview",
+ "path": "framework/ui/mvc-razor-pages/theming.md"
+ },
{
"text": "The Basic Theme",
"path": "framework/ui/mvc-razor-pages/basic-theme.md"
@@ -845,7 +956,7 @@
"text": "JavaScript API",
"items": [
{
- "text": "Overall",
+ "text": "Overview",
"path": "framework/ui/mvc-razor-pages/javascript-api"
},
{
@@ -906,7 +1017,7 @@
"text": "Customize/Extend the UI",
"items": [
{
- "text": "Overall",
+ "text": "Overview",
"path": "framework/ui/mvc-razor-pages/customization-user-interface.md"
},
{
@@ -938,7 +1049,7 @@
"text": "Blazor",
"items": [
{
- "text": "Overall",
+ "text": "Overview",
"path": "framework/ui/blazor/overall.md"
},
{
@@ -957,7 +1068,7 @@
"text": "Theming",
"items": [
{
- "text": "Overall",
+ "text": "Overview",
"path": "framework/ui/blazor/theming.md"
},
{
@@ -1269,7 +1380,7 @@
"text": "Theming",
"items": [
{
- "text": "Overall",
+ "text": "Overview",
"path": "framework/ui/angular/theming.md"
},
{
@@ -1302,7 +1413,7 @@
"text": "Extensions",
"items": [
{
- "text": "Overall",
+ "text": "Overview",
"path": "framework/ui/angular/extensions-overall.md"
},
{
@@ -1352,7 +1463,7 @@
"text": "React Native",
"items": [
{
- "text": "Overall",
+ "text": "Overview",
"path": "framework/ui/react-native"
}
]
@@ -1361,7 +1472,7 @@
"text": "MAUI",
"items": [
{
- "text": "Overall",
+ "text": "Overview",
"path": "framework/ui/maui"
}
]
@@ -1390,13 +1501,16 @@
"text": "Data Access",
"items": [
{
- "text": "Overall",
+ "text": "Overview",
"path": "framework/data"
},
{
"text": "Entity Framework Core",
- "path": "framework/data/entity-framework-core",
"items": [
+ {
+ "text": "Overview",
+ "path": "framework/data/entity-framework-core"
+ },
{
"text": "Database Migrations",
"path": "framework/data/entity-framework-core/migrations.md"
@@ -1464,7 +1578,7 @@
"text": "Solution Templates",
"items": [
{
- "text": "Overall",
+ "text": "Overview",
"path": "solution-templates"
},
{
@@ -1489,7 +1603,7 @@
"text": "Application Modules",
"items": [
{
- "text": "Overall",
+ "text": "Overview",
"path": "modules"
},
{
@@ -1554,8 +1668,11 @@
},
{
"text": "IdentityServer",
- "path": "modules/identity-server.md",
"items": [
+ {
+ "text": "Overview",
+ "path": "modules/identity-server.md"
+ },
{
"text": "IdentityServer Migration Guide",
"path": "release-info/migration-guides/identityserver4-step-by-step.md"
@@ -1572,8 +1689,11 @@
},
{
"text": "OpenIddict",
- "path": "modules/openiddict.md",
"items": [
+ {
+ "text": "Overview",
+ "path": "modules/openiddict.md"
+ },
{
"text": "OpenIddict Migration Guide",
"path": "release-info/migration-guides/openiddict-step-by-step.md"
@@ -1630,13 +1750,17 @@
{
"text": "UI Themes",
"items": [
+ {
+ "text": "Overview",
+ "path": "ui-themes"
+ },
{
"text": "The Basic Theme",
"path": "framework/ui/mvc-razor-pages/basic-theme.md"
},
{
"text": "LeptonX Theme",
- "path": "ui-themes/lepton-x/index.md"
+ "path": "ui-themes/lepton-x"
}
]
},
@@ -1644,7 +1768,7 @@
"text": "Testing",
"items": [
{
- "text": "Overall",
+ "text": "Overview",
"path": "testing/overall.md"
},
{
@@ -1663,8 +1787,11 @@
},
{
"text": "Deployment",
- "path": "deployment",
"items": [
+ {
+ "text": "Overview",
+ "path": "deployment"
+ },
{
"text": "Configuring SSL certificate(HTTPS)",
"path": "deployment/ssl.md"
@@ -1695,7 +1822,7 @@
"text": "Samples",
"items": [
{
- "text": "All Samples",
+ "text": "Overview",
"path": "samples"
},
{
@@ -1715,6 +1842,10 @@
{
"text": "Books",
"items": [
+ {
+ "text": "Overview",
+ "path": "https://abp.io/books"
+ },
{
"text": "Mastering ABP Framework",
"path": "https://abp.io/books/mastering-abp-framework"
@@ -1728,6 +1859,10 @@
{
"text": "Release Information",
"items": [
+ {
+ "text": "Overview",
+ "path": "release-info"
+ },
{
"text": "Release Notes",
"path": "release-info/release-notes.md"
@@ -1800,4 +1935,4 @@
]
}
]
-}
\ No newline at end of file
+}
diff --git a/docs/en/dynamic-proxying-interceptors.md b/docs/en/dynamic-proxying-interceptors.md
index 34c9c69b67..722eadc249 100644
--- a/docs/en/dynamic-proxying-interceptors.md
+++ b/docs/en/dynamic-proxying-interceptors.md
@@ -1,4 +1,4 @@
-## Dynamic Proxying / Interceptors
+# Dynamic Proxying / Interceptors
This document is planned to be written later.
diff --git a/docs/en/framework/api-development/index.md b/docs/en/framework/api-development/index.md
new file mode 100644
index 0000000000..2f55487b1c
--- /dev/null
+++ b/docs/en/framework/api-development/index.md
@@ -0,0 +1,11 @@
+## API Development
+
+The following documents explain the concepts, infrastructure and integrations to build HTTP APIs with ABP:
+
+* [ABP Endpoints](./standard-apis)
+* [API Versioning](./versioning.md)
+* [Auto API Controllers](./auto-controllers.md)
+* [Dynamic C# API Clients](./dynamic-csharp-clients.md)
+* [Integration Services](./integration-services.md)
+* [Static C# API Clients](./static-csharp-clients.md)
+* [Swagger Integration](./swagger.md)
diff --git a/docs/en/framework/api-development/standard-apis/index.md b/docs/en/framework/api-development/standard-apis/index.md
new file mode 100644
index 0000000000..3dd4a284f5
--- /dev/null
+++ b/docs/en/framework/api-development/standard-apis/index.md
@@ -0,0 +1,6 @@
+## Standard HTTP API Endpoints
+
+ABP provides some pre-built and standard endpoints that contains useful information about the application or service, such as localization entries and settings. Here, is the list of the pre-built endpoints:
+
+* [Application Configuration](./configuration.md)
+* [Application Localization](./localization.md)
\ No newline at end of file
diff --git a/docs/en/framework/architecture/best-practices/application-layer-overview.md b/docs/en/framework/architecture/best-practices/application-layer-overview.md
new file mode 100644
index 0000000000..10afeeb9ca
--- /dev/null
+++ b/docs/en/framework/architecture/best-practices/application-layer-overview.md
@@ -0,0 +1,6 @@
+## Best Practices: Application Layer
+
+The following documents suggest some best-practices that you can use while implementing the application layer of your solution by following the Domain Driven Design principles:
+
+* [Application Services](./application-services.md)
+* [Data Transfer Objects](./data-transfer-objects.md)
\ No newline at end of file
diff --git a/docs/en/framework/architecture/best-practices/application-services.md b/docs/en/framework/architecture/best-practices/application-services.md
index e3fd00f782..d3ad44ca54 100644
--- a/docs/en/framework/architecture/best-practices/application-services.md
+++ b/docs/en/framework/architecture/best-practices/application-services.md
@@ -1,4 +1,4 @@
-## Application Services Best Practices & Conventions
+# Application Services Best Practices & Conventions
* **Do** create an application service for each **aggregate root**.
diff --git a/docs/en/framework/architecture/best-practices/data-access-overview.md b/docs/en/framework/architecture/best-practices/data-access-overview.md
new file mode 100644
index 0000000000..1369a21e32
--- /dev/null
+++ b/docs/en/framework/architecture/best-practices/data-access-overview.md
@@ -0,0 +1,6 @@
+## Best Practices: Data Access
+
+The following documents suggest some best-practices that you can use while implementing the database integration layer of your solution by following Domain Driven Design principles:
+
+* [Entity Framework Core](./entity-framework-core-integration.md)
+* [MongoDB](./mongodb-integration.md)
\ No newline at end of file
diff --git a/docs/en/framework/architecture/best-practices/data-transfer-objects.md b/docs/en/framework/architecture/best-practices/data-transfer-objects.md
index cd3a34513a..e4caa6ed66 100644
--- a/docs/en/framework/architecture/best-practices/data-transfer-objects.md
+++ b/docs/en/framework/architecture/best-practices/data-transfer-objects.md
@@ -1,4 +1,4 @@
-## Data Transfer Objects Best Practices & Conventions
+# Data Transfer Objects Best Practices & Conventions
* **Do** define DTOs in the **application contracts** package.
* **Do** inherit from the pre-built **base DTO classes** where possible and necessary (like `EntityDto`, `CreationAuditedEntityDto`, `AuditedEntityDto`, `FullAuditedEntityDto` and so on).
diff --git a/docs/en/framework/architecture/best-practices/domain-layer-overview.md b/docs/en/framework/architecture/best-practices/domain-layer-overview.md
new file mode 100644
index 0000000000..b20ae1b208
--- /dev/null
+++ b/docs/en/framework/architecture/best-practices/domain-layer-overview.md
@@ -0,0 +1,7 @@
+## Best Practices: Domain Layer
+
+The following documents suggest some best-practices that you can use while implementing the domain layer of your solution by following the Domain Driven Design principles:
+
+* [Entities](./entities.md)
+* [Repositories](./repositories.md)
+* [Domain Services](./domain-services.md)
\ No newline at end of file
diff --git a/docs/en/framework/architecture/best-practices/domain-services.md b/docs/en/framework/architecture/best-practices/domain-services.md
index b1081d7ebc..565a67a715 100644
--- a/docs/en/framework/architecture/best-practices/domain-services.md
+++ b/docs/en/framework/architecture/best-practices/domain-services.md
@@ -1,4 +1,4 @@
-## Domain Services Best Practices & Conventions
+# Domain Services Best Practices & Conventions
### Domain Service
diff --git a/docs/en/framework/architecture/best-practices/entities.md b/docs/en/framework/architecture/best-practices/entities.md
index b16234d52b..319f1648ff 100644
--- a/docs/en/framework/architecture/best-practices/entities.md
+++ b/docs/en/framework/architecture/best-practices/entities.md
@@ -1,4 +1,4 @@
-## Entity Best Practices & Conventions
+# Entity Best Practices & Conventions
### Entities
diff --git a/docs/en/framework/architecture/best-practices/entity-framework-core-integration.md b/docs/en/framework/architecture/best-practices/entity-framework-core-integration.md
index efa622445c..9a2081e4e5 100644
--- a/docs/en/framework/architecture/best-practices/entity-framework-core-integration.md
+++ b/docs/en/framework/architecture/best-practices/entity-framework-core-integration.md
@@ -1,4 +1,4 @@
-## Entity Framework Core Integration Best Practices
+# Entity Framework Core Integration Best Practices
> See [Entity Framework Core Integration document](../../data/entity-framework-core) for the basics of the EF Core integration.
diff --git a/docs/en/framework/architecture/best-practices/index.md b/docs/en/framework/architecture/best-practices/index.md
index 85e00a0b51..49b1e5ec0f 100644
--- a/docs/en/framework/architecture/best-practices/index.md
+++ b/docs/en/framework/architecture/best-practices/index.md
@@ -1,4 +1,4 @@
-## Module Development Best Practices & Conventions
+# Module Development Best Practices & Conventions
### Introduction
diff --git a/docs/en/framework/architecture/best-practices/module-architecture.md b/docs/en/framework/architecture/best-practices/module-architecture.md
index 0b9a4a282f..d050094656 100644
--- a/docs/en/framework/architecture/best-practices/module-architecture.md
+++ b/docs/en/framework/architecture/best-practices/module-architecture.md
@@ -1,4 +1,4 @@
-## Module Architecture Best Practices & Conventions
+# Module Architecture Best Practices & Conventions
### Solution Structure
@@ -11,7 +11,7 @@
The following diagram shows the packages of a well-layered module and dependencies of those packages between them:
-
+
The ultimate goal is to allow an application to use the module in a flexible manner. Example applications:
diff --git a/docs/en/framework/architecture/best-practices/mongodb-integration.md b/docs/en/framework/architecture/best-practices/mongodb-integration.md
index 16a6a7d58f..36b037c967 100644
--- a/docs/en/framework/architecture/best-practices/mongodb-integration.md
+++ b/docs/en/framework/architecture/best-practices/mongodb-integration.md
@@ -1,4 +1,4 @@
-## MongoDB Integration
+# MongoDB Integration
* Do define a separated `MongoDbContext` interface and class for each module.
diff --git a/docs/en/framework/architecture/best-practices/repositories.md b/docs/en/framework/architecture/best-practices/repositories.md
index 32da1ecee9..5e491ecb80 100644
--- a/docs/en/framework/architecture/best-practices/repositories.md
+++ b/docs/en/framework/architecture/best-practices/repositories.md
@@ -1,4 +1,4 @@
-## Repository Best Practices & Conventions
+# Repository Best Practices & Conventions
### Repository Interfaces
diff --git a/docs/en/framework/architecture/domain-driven-design/application-layer.md b/docs/en/framework/architecture/domain-driven-design/application-layer.md
new file mode 100644
index 0000000000..03b83fb038
--- /dev/null
+++ b/docs/en/framework/architecture/domain-driven-design/application-layer.md
@@ -0,0 +1,7 @@
+## Domain Driven Design: Application Layer
+
+Application Layer mediates between the Presentation and Domain Layers. Orchestrates business objects to perform specific application tasks and implements use cases as the application logic. Here, is the list of the building blocks of the Application Layer:
+
+* [Application Services](./application-services.md)
+* [Data Transfer Objects](./data-transfer-objects.md)
+* [Unit of Work](./unit-of-work.md)
\ No newline at end of file
diff --git a/docs/en/framework/architecture/domain-driven-design/domain-layer.md b/docs/en/framework/architecture/domain-driven-design/domain-layer.md
new file mode 100644
index 0000000000..9ce7519810
--- /dev/null
+++ b/docs/en/framework/architecture/domain-driven-design/domain-layer.md
@@ -0,0 +1,9 @@
+## Domain Driven Design: Domain Layer
+
+Domain Layer contains business objects and the core (domain) business rules of the application and it's the heart of the application. Here, is the list of building blocks of the Domain Layer:
+
+* [Entities & Aggregate Roots](./entities.md)
+* [Value Objects](./value-objects.md)
+* [Repositories](./repositories.md)
+* [Domain Services](./domain-services.md)
+* [Specifications](./specifications.md)
\ No newline at end of file
diff --git a/docs/en/framework/fundamentals/application-startup.md b/docs/en/framework/fundamentals/application-startup.md
index 920e1f78cc..e985048714 100644
--- a/docs/en/framework/fundamentals/application-startup.md
+++ b/docs/en/framework/fundamentals/application-startup.md
@@ -1,4 +1,4 @@
-## ABP Application Startup
+# ABP Application Startup
You typically use the [ABP CLI](../../cli)'s `abp new` command to [get started](../../get-started/layered-web-application.md) with one of the pre-built [startup solution templates](../../solution-templates). When you do that, you generally don't need to know the details of how the ABP is integrated with your application or how it is configured and initialized. The startup template also comes with the fundamental ABP packages and [application modules](../../modules) are pre-installed and configured for you.
diff --git a/docs/en/framework/fundamentals/index.md b/docs/en/framework/fundamentals/index.md
new file mode 100644
index 0000000000..7ce2c59f7b
--- /dev/null
+++ b/docs/en/framework/fundamentals/index.md
@@ -0,0 +1,16 @@
+## ABP Fundamentals: Overview
+
+The following documents explains the fundamental building blocks to create ABP solutions:
+
+* [Application Startup](./application-startup.md)
+* [Authorization](./authorization.md)
+* [Caching](./caching.md)
+* [Configuration](./configuration.md)
+* [Connection Strings](./connection-strings.md)
+* [Dependency Injection](./dependency-injection.md)
+* [Exception Handling](./exception-handling.md)
+* [Localization](./localization.md)
+* [Logging](./logging.md)
+* [Object Extensions](./object-extensions.md)
+* [Options](./options.md)
+* [Validation](./validation.md)
\ No newline at end of file
diff --git a/docs/en/framework/infrastructure/background-jobs/hangfire.md b/docs/en/framework/infrastructure/background-jobs/hangfire.md
index 8d5a76509b..396c7498b5 100644
--- a/docs/en/framework/infrastructure/background-jobs/hangfire.md
+++ b/docs/en/framework/infrastructure/background-jobs/hangfire.md
@@ -154,3 +154,72 @@ app.UseAbpHangfireDashboard("/hangfire", options =>
**Important**: `UseAbpHangfireDashboard` should be called after the authentication and authorization middlewares in your `Startup` class (probably at the last line). Otherwise,
authorization will always fail!
+
+#### Dashboard Authorization In API Projects
+
+If you use the hangfire dashboard in an API project that uses non-cookie authentication (like JWT Bearers), The `/hangfire` page can't authenticate the user.
+
+In this case, you can add a cookies authorization scheme to authenticate the user. The best way to do this is to use the `Cookie` and `OpenIdConnect` authentication schemes. This requires creating a new OAuth2 client and adding the `ClientId`, and `ClientSecret` properties to the `AuthServer` section in the `appsettings.json` file.
+
+The final code should look like below:
+
+```csharp
+private void ConfigureAuthentication(ServiceConfigurationContext context, IConfiguration configuration)
+{
+ context.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
+ .AddAbpJwtBearer(options =>
+ {
+ options.Authority = configuration["AuthServer:Authority"];
+ options.RequireHttpsMetadata = configuration.GetValue("AuthServer:RequireHttpsMetadata");
+ options.Audience = "MyProjectName";
+ });
+
+ context.Services.AddAuthentication()
+ .AddCookie("Cookies")
+ .AddOpenIdConnect("oidc", options =>
+ {
+ options.Authority = configuration["AuthServer:Authority"];
+ options.RequireHttpsMetadata = configuration.GetValue("AuthServer:RequireHttpsMetadata");
+ options.ResponseType = OpenIdConnectResponseType.CodeIdToken;
+
+ options.ClientId = configuration["AuthServer:ClientId"];
+ options.ClientSecret = configuration["AuthServer:ClientSecret"];
+
+ options.UsePkce = true;
+ options.SaveTokens = true;
+ options.GetClaimsFromUserInfoEndpoint = true;
+
+ options.Scope.Add("roles");
+ options.Scope.Add("email");
+ options.Scope.Add("phone");
+ options.Scope.Add("MyProjectName");
+ });
+}
+```
+
+```csharp
+app.Use(async (httpContext, next) =>
+{
+ if (httpContext.Request.Path.StartsWithSegments("/hangfire"))
+ {
+ var result = await httpContext.AuthenticateAsync("Cookies");
+ if (result.Succeeded)
+ {
+ httpContext.User = result.Principal;
+ await next(httpContext);
+ return;
+ }
+
+ await httpContext.ChallengeAsync("oidc");
+ }
+ else
+ {
+ await next(httpContext);
+ }
+});
+
+app.UseAbpHangfireDashboard("/hangfire", options =>
+{
+ options.AsyncAuthorization = new[] {new AbpHangfireAuthorizationFilter()};
+});
+```
diff --git a/docs/en/framework/infrastructure/blob-storing/google.md b/docs/en/framework/infrastructure/blob-storing/google.md
new file mode 100644
index 0000000000..a90152b4f0
--- /dev/null
+++ b/docs/en/framework/infrastructure/blob-storing/google.md
@@ -0,0 +1,70 @@
+# BLOB Storing Google Provider
+
+BLOB Storing Google Provider can store BLOBs in [Google Cloud Storage](https://cloud.google.com/storage).
+
+> Read the [BLOB Storing document](../blob-storing) to understand how to use the BLOB storing system. This document only covers how to configure containers to use a Google Cloud Storage as the storage provider.
+
+## Installation
+
+Use the ABP CLI to add [Volo.Abp.BlobStoring.Google](https://www.nuget.org/packages/Volo.Abp.BlobStoring.Google) NuGet package to your project:
+
+* Install the [ABP CLI](../../../cli) if you haven't installed before.
+* Open a command line (terminal) in the directory of the `.csproj` file you want to add the `Volo.Abp.BlobStoring.Google` package.
+* Run `abp add-package Volo.Abp.BlobStoring.Google` command.
+
+If you want to do it manually, install the [Volo.Abp.BlobStoring.Google](https://www.nuget.org/packages/Volo.Abp.BlobStoring.Google) NuGet package to your project and add `[DependsOn(typeof(AbpBlobStoringGoogleModule))]` to the [ABP module](../../architecture/modularity/basics.md) class inside your project.
+
+## Configuration
+
+Configuration is done in the `ConfigureServices` method of your [module](../../architecture/modularity/basics.md) class, as explained in the [BLOB Storing document](../blob-storing).
+
+**Example: Configure to use the Google storage provider by default**
+
+````csharp
+Configure(options =>
+{
+ options.Containers.ConfigureDefault(container =>
+ {
+ container.UseGoogle(google =>
+ {
+ google.ClientEmail = "your coogle client email";
+ google.ProjectId = "your coogle project id";
+ google.PrivateKey = "your coogle private key";
+ google.Scopes = "your coogle scopes";
+ google.ContainerName = "your coogle container name";
+ google.CreateContainerIfNotExists = true;
+ //google.UseApplicationDefaultCredentials = true; // If you want to use application default credentials
+ });
+ });
+});
+````
+
+> See the [BLOB Storing document](../blob-storing) to learn how to configure this provider for a specific container.
+
+### Options
+
+* **ClientEmail** (string): The client email of the Google service account. You can create a service account and get the client email. Please refer to Google documentation: https://cloud.google.com/iam/docs/service-account-overview
+* **ProjectId** (string): The project ID of the Google service account.
+* **PrivateKey** (string): The private key of the Google service account. You can create a service account and get the private key. Please refer to Google documentation: https://cloud.google.com/iam/docs/keys-create-delete
+* **Scopes** (string): The scopes of the Google service account.
+* **UseApplicationDefaultCredentials** (bool): If `true`, it uses the application default credentials(ADC). Default value is `false`. Please refer to Google documentation: https://cloud.google.com/docs/authentication/provide-credentials-adc
+* **ContainerName** (string): You can specify the container name in Google. If this is not specified, it uses the name of the BLOB container defined with the `BlobContainerName` attribute (see the [BLOB storing document](../blob-storing)). Please note that Google has some **rules for naming containers**. A container name must be a valid DNS name, conforming to the [following naming rules](https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata#container-names):
+ * Container names must start or end with a letter or number, and can contain only letters, numbers, and the dash (-) character.
+ * Every dash (-) character must be immediately preceded and followed by a letter or number; consecutive dashes are not permitted in container names.
+ * All letters in a container name must be **lowercase**.
+ * Container names must be from **3** through **63** characters long.
+* **CreateContainerIfNotExists** (bool): Default value is `false`, If a container does not exist in Google, `GoogleBlobProvider` will try to create it.
+
+
+## Google Blob Name Calculator
+
+Google Blob Provider organizes BLOB name and implements some conventions. The full name of a BLOB is determined by the following rules by default:
+
+* Appends `host` string if [current tenant](../../architecture/multi-tenancy) is `null` (or multi-tenancy is disabled for the container - see the [BLOB Storing document](../blob-storing) to learn how to disable multi-tenancy for a container).
+* Appends `tenants/` string if current tenant is not `null`.
+* Appends the BLOB name.
+
+## Other Services
+
+* `GoogleBlobProvider` is the main service that implements the Google BLOB storage provider, if you want to override/replace it via [dependency injection](../../fundamentals/dependency-injection.md) (don't replace `IBlobProvider` interface, but replace `GoogleBlobProvider` class).
+* `IGoogleBlobNameCalculator` is used to calculate the full BLOB name (that is explained above). It is implemented by the `DefaultGoogleBlobNameCalculator` by default.
diff --git a/docs/en/framework/infrastructure/blob-storing/index.md b/docs/en/framework/infrastructure/blob-storing/index.md
index 61a05c65c0..f95a90e410 100644
--- a/docs/en/framework/infrastructure/blob-storing/index.md
+++ b/docs/en/framework/infrastructure/blob-storing/index.md
@@ -22,6 +22,7 @@ The ABP has already the following storage provider implementations:
* [Aliyun](./aliyun.md): Stores BLOBs on the [Aliyun Storage Service](https://help.aliyun.com/product/31815.html).
* [Minio](./minio.md): Stores BLOBs on the [MinIO Object storage](https://min.io/).
* [Aws](./aws.md): Stores BLOBs on the [Amazon Simple Storage Service](https://aws.amazon.com/s3/).
+* [Google](./google.md): Stores BLOBs on the [Google Cloud Storage](https://cloud.google.com/storage).
More providers will be implemented by the time. You can [request](https://github.com/abpframework/abp/issues/new) it for your favorite provider or [create it yourself](./custom-provider.md) and [contribute](../../../contribution) to the ABP.
diff --git a/docs/en/framework/infrastructure/concurrency-check.md b/docs/en/framework/infrastructure/concurrency-check.md
index 03e5aafc90..731750f306 100644
--- a/docs/en/framework/infrastructure/concurrency-check.md
+++ b/docs/en/framework/infrastructure/concurrency-check.md
@@ -1,4 +1,4 @@
-## Concurrency Check
+# Concurrency Check
### Introduction
diff --git a/docs/en/framework/infrastructure/data-filtering.md b/docs/en/framework/infrastructure/data-filtering.md
index 584099b681..38844f2079 100644
--- a/docs/en/framework/infrastructure/data-filtering.md
+++ b/docs/en/framework/infrastructure/data-filtering.md
@@ -320,6 +320,81 @@ public override string GetCompiledQueryCacheKey()
}
````
+##### Make User-defined function mapping compatible with [DevExtreme.AspNet.Data's](https://github.com/DevExpress/DevExtreme.AspNet.Data) `IAsyncAdapter`
+
+If you are using [DevExtreme.AspNet.Data](https://github.com/DevExpress/DevExtreme.AspNet.Data) and `User-defined function mapping`, You need to create a custom adapter to compatible with `IAsyncAdapter`.
+
+````csharp
+var adapter = new AbpDevExtremeAsyncAdapter();
+CustomAsyncAdapters.RegisterAdapter(typeof(AbpEntityQueryProvider), adapter);
+````
+
+````csharp
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Reflection;
+using System.Threading;
+using System.Threading.Tasks;
+using DevExtreme.AspNet.Data.Async;
+
+namespace Abp.EntityFrameworkCore;
+
+public class AbpDevExtremeAsyncAdapter : IAsyncAdapter
+{
+ private readonly MethodInfo _countAsyncMethod;
+ private readonly MethodInfo _toListAsyncMethod;
+
+ public AbpDevExtremeAsyncAdapter()
+ {
+ var extensionsType = Type.GetType("Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions, Microsoft.EntityFrameworkCore");
+ _countAsyncMethod = FindQueryExtensionMethod(extensionsType, "CountAsync");
+ _toListAsyncMethod = FindQueryExtensionMethod(extensionsType, "ToListAsync");
+ }
+
+ public Task CountAsync(IQueryProvider provider, Expression expr, CancellationToken cancellationToken)
+ {
+ return InvokeCountAsync(_countAsyncMethod, provider, expr, cancellationToken);
+ }
+
+ public Task> ToEnumerableAsync(IQueryProvider provider, Expression expr, CancellationToken cancellationToken)
+ {
+ return InvokeToListAsync(_toListAsyncMethod, provider, expr, cancellationToken);
+ }
+
+ static MethodInfo FindQueryExtensionMethod(Type extensionsType, string name)
+ {
+ return extensionsType.GetMethods().First(m =>
+ {
+ if (!m.IsGenericMethod || m.Name != name)
+ {
+ return false;
+ }
+ var parameters = m.GetParameters();
+ return parameters.Length == 2 && parameters[1].ParameterType == typeof(CancellationToken);
+ });
+ }
+
+ static Task InvokeCountAsync(MethodInfo method, IQueryProvider provider, Expression expr, CancellationToken cancellationToken)
+ {
+ var countArgument = ((MethodCallExpression)expr).Arguments[0];
+ var query = provider.CreateQuery(countArgument);
+ return (Task)InvokeQueryExtensionMethod(method, query.ElementType, query, cancellationToken);
+ }
+
+ static async Task> InvokeToListAsync(MethodInfo method, IQueryProvider provider, Expression expr, CancellationToken cancellationToken)
+ {
+ return await (Task>)InvokeQueryExtensionMethod(method, typeof(T), provider.CreateQuery(expr), cancellationToken);
+ }
+
+ static object InvokeQueryExtensionMethod(MethodInfo method, Type elementType, IQueryable query, CancellationToken cancellationToken)
+ {
+ return method.MakeGenericMethod(elementType).Invoke(null, new object[] { query, cancellationToken });
+ }
+}
+````
+
### MongoDB
ABP abstracts the `IMongoDbRepositoryFilterer` interface to implement data filtering for the [MongoDB Integration](../data/mongodb), it works only if you use the repositories properly. Otherwise, you should manually filter the data.
diff --git a/docs/en/framework/infrastructure/index.md b/docs/en/framework/infrastructure/index.md
new file mode 100644
index 0000000000..f9524216c3
--- /dev/null
+++ b/docs/en/framework/infrastructure/index.md
@@ -0,0 +1,31 @@
+## ABP Infrastructure
+
+ABP provides a complete infrastructure for creating real world software solutions with modern architectures based on the .NET platform. Each of the following documents explains an infrastructure feature:
+
+* [Audit Logging](./audit-logging.md)
+* [Background Jobs](./background-jobs/index.md)
+* [Background Workers](./background-workers/index.md)
+* [BLOB Storing](./blob-storing/index.md)
+* [Cancellation Token Provider](./cancellation-token-provider.md)
+* [CSRF/XSRF & Anti Forgery](./csrf-anti-forgery.md)
+* [Concurrency Check](./concurrency-check.md)
+* [Current User](./current-user.md)
+* [Data Filtering](./data-filtering.md)
+* [Data Seeding](./data-seeding.md)
+* [Distributing Locking](./distributed-locking.md)
+* [Email Sending](./emailing.md)
+* [Entity Cache](./entity-cache.md)
+* [Event Bus](./event-bus/index.md)
+* [Features](./features.md)
+* [Global Features](./global-features.md)
+* [GUID Generation](./guid-generation.md)
+* [Image Manipulation](./image-manipulation.md)
+* [JSON](./json.md)
+* [Object to Object Mapping](./object-to-object-mapping.md)
+* [Settings](./settings.md)
+* [Simple State Checker](./simple-state-checker.md)
+* [SMS Sending](./sms-sending.md)
+* [String Encryption](./string-encryption.md)
+* [Text Templating](./text-templating/index.md)
+* [Timing](./timing.md)
+* [Virtual File System](./virtual-file-system.md)
\ No newline at end of file
diff --git a/docs/en/framework/ui/angular/authorization.md b/docs/en/framework/ui/angular/authorization.md
index 04bc9ab991..dcf6e0c67d 100644
--- a/docs/en/framework/ui/angular/authorization.md
+++ b/docs/en/framework/ui/angular/authorization.md
@@ -1,4 +1,4 @@
-## Authorization in Angular UI
+# Authorization in Angular UI
OAuth is preconfigured in Angular application templates. So, when you start a project using the CLI (or Suite, for that matter), authorization already works. ABP Angular UI packages are using [angular-oauth2-oidc library](https://github.com/manfredsteyer/angular-oauth2-oidc#logging-in) for managing OAuth in the Angular client.
You can find **OAuth configuration** in the _environment.ts_ files.
diff --git a/docs/en/framework/ui/angular/breadcrumb.md b/docs/en/framework/ui/angular/breadcrumb.md
index 77351b8236..1a26975c96 100644
--- a/docs/en/framework/ui/angular/breadcrumb.md
+++ b/docs/en/framework/ui/angular/breadcrumb.md
@@ -1,4 +1,4 @@
-## Breadcrumb Component
+# Breadcrumb Component
ABP provides a component that listens to the angular router's `NavigationEnd`
event and creates inputs for `BreadcrumbItemsComponent`. This component is used in
diff --git a/docs/en/framework/ui/angular/extensions-overall.md b/docs/en/framework/ui/angular/extensions-overall.md
index bba922461b..4776198001 100644
--- a/docs/en/framework/ui/angular/extensions-overall.md
+++ b/docs/en/framework/ui/angular/extensions-overall.md
@@ -1,4 +1,4 @@
-## Angular UI Extensions
+# Angular UI Extensions
Angular UI extensions system allows you to add a new action to the actions menu, a new column to the data table, a new action to the toolbar of a page, and add a new field to the create and/or edit forms.
diff --git a/docs/en/framework/ui/angular/how-replaceable-components-work-with-extensions.md b/docs/en/framework/ui/angular/how-replaceable-components-work-with-extensions.md
index 39c1f00cfe..11a7f6dfb8 100644
--- a/docs/en/framework/ui/angular/how-replaceable-components-work-with-extensions.md
+++ b/docs/en/framework/ui/angular/how-replaceable-components-work-with-extensions.md
@@ -18,7 +18,8 @@ Open the generated `src/app/my-roles/my-roles.component.ts` file and replace its
```js
import { ListService, PagedAndSortedResultRequestDto, PagedResultDto } from '@abp/ng.core';
-import { eIdentityComponents, IdentityRoleDto, IdentityRoleService, RolesComponent } from '@abp/ng.identity';
+import { eIdentityComponents, RolesComponent } from '@abp/ng.identity';
+import { IdentityRoleDto, IdentityRoleService } from '@abp/ng.identity/proxy';
import { ePermissionManagementComponents } from '@abp/ng.permission-management';
import { Confirmation, ConfirmationService } from '@abp/ng.theme.shared';
import {
@@ -232,7 +233,7 @@ We have added the `abp-page-toolbar`, `abp-extensible-table`, and `abp-extensibl
You should import the required modules for the `MyRolesComponent` to `MyRolesModule`. Open the `src/my-roles/my-roles.module.ts` file and replace the content with the following:
```js
-import { UiExtensionsModule } from '@abp/ng.theme.shared/extensions';
+import { ExtensibleModule } from '@abp/ng.components/extensible';
import { NgModule } from '@angular/core';
import { SharedModule } from '../shared/shared.module';
import { MyRolesComponent } from './my-roles.component';
@@ -240,13 +241,13 @@ import { PermissionManagementModule } from '@abp/ng.permission-management';
@NgModule({
declarations: [MyRolesComponent],
- imports: [SharedModule, UiExtensionsModule, PermissionManagementModule],
+ imports: [SharedModule, ExtensibleModule, PermissionManagementModule],
exports: [MyRolesComponent],
})
export class MyRolesModule {}
```
-- `UiExtensionsModule` imported to be able to use the extension components in your component.
+- `ExtensionsModule` imported to be able to use the extension components in your component.
- `PermissionManagementModule` imported to be able to use the `abp-permission-*management` in your component.
As the last step, it is needs to be replaced the `RolesComponent` with the `MyRolesComponent`. Open the `app.component.ts` and modify its content as shown below:
diff --git a/docs/en/framework/ui/angular/quick-start.md b/docs/en/framework/ui/angular/quick-start.md
index 2a8986f965..df2d6331b9 100644
--- a/docs/en/framework/ui/angular/quick-start.md
+++ b/docs/en/framework/ui/angular/quick-start.md
@@ -4,8 +4,8 @@
Please follow the steps below to prepare your development environment for Angular.
-1. **Install Node.js:** Please visit [Node.js downloads page](https://nodejs.org/en/download/) and download proper Node.js v16 or v18 installer for your OS. An alternative is to install [NVM](https://github.com/nvm-sh/nvm) and use it to have multiple versions of Node.js in your operating system.
-2. **[Optional] Install Yarn:** You may install Yarn v1 (not v2) following the instructions on [the installation page](https://classic.yarnpkg.com/en/docs/install). Yarn v1 delivers an arguably better developer experience compared to npm v6 and below. You may skip this step and work with npm, which is built-in in Node.js, instead.
+1. **Install Node.js:** Please visit [Node.js downloads page](https://nodejs.org/en/download/) and download proper Node.js `v18.19+` installer for your OS. An alternative is to install [NVM](https://github.com/nvm-sh/nvm) and use it to have multiple versions of Node.js in your operating system.
+2. **[Optional] Install Yarn:** You may install Yarn v1.22+ (not v2) following the instructions on [the installation page](https://classic.yarnpkg.com/en/docs/install). Yarn v1 delivers an arguably better developer experience compared to npm v10 and below. You may skip this step and work with npm, which is built-in in Node.js, instead.
3. **[Optional] Install VS Code:** [VS Code](https://code.visualstudio.com/) is a free, open-source IDE which works seamlessly with TypeScript. Although you can use any IDE including Visual Studio or Rider, VS Code will most likely deliver the best developer experience when it comes to Angular projects. ABP project templates even contain plugin recommendations for VS Code users, which VS Code will ask you to install when you open the Angular project folder. Here is a list of recommended extensions:
- [Angular Language Service](https://marketplace.visualstudio.com/items?itemName=angular.ng-template)
- [Prettier - Code formatter](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode)
diff --git a/docs/en/framework/ui/angular/service-proxies.md b/docs/en/framework/ui/angular/service-proxies.md
index 99e6e781c2..695e3027c4 100644
--- a/docs/en/framework/ui/angular/service-proxies.md
+++ b/docs/en/framework/ui/angular/service-proxies.md
@@ -1,4 +1,4 @@
-## Service Proxies
+# Service Proxies
Calling a REST endpoint from Angular applications is common. We usually create **services** matching server-side controllers and **interfaces** matching [DTOs](../../architecture/domain-driven-design/data-transfer-objects.md) to interact with the server. This often results in manually transforming C# code into TypeScript equivalents and that is unfortunate, if not intolerable.
diff --git a/docs/en/framework/ui/angular/theming.md b/docs/en/framework/ui/angular/theming.md
index 58323bb661..1940fc331b 100644
--- a/docs/en/framework/ui/angular/theming.md
+++ b/docs/en/framework/ui/angular/theming.md
@@ -20,7 +20,7 @@ Currently, three themes are **officially provided**:
* The [Basic Theme](basic-theme.md) is the minimalist theme with the plain Bootstrap style. It is **open source and free**.
* The [Lepton Theme](https://abp.io/themes) is a **commercial** theme developed by the core ABP team and is a part of the [ABP](https://abp.io/) license.
-* The [LeptonX Theme](https://x.leptontheme.com/) is a theme that has both [commercial](https://docs.abp.io/en/commercial/latest/themes/lepton-x/angular) and [lite](../../../ui-themes/lepton-x-lite/angular.md) choices.
+* The [LeptonX Theme](https://x.leptontheme.com/) is a theme that has both [commercial](../../../ui-themes/lepton-x/angular.md) and [lite](../../../ui-themes/lepton-x-lite/angular.md) choices.
## Overall
diff --git a/docs/en/framework/ui/index.md b/docs/en/framework/ui/index.md
new file mode 100644
index 0000000000..760a2616b0
--- /dev/null
+++ b/docs/en/framework/ui/index.md
@@ -0,0 +1,9 @@
+## ABP UI Options
+
+ABP provides several options for building the user interface (UI) in your applications. Here are some of the officially supported UI options you can use with ABP:
+
+* [MVC / Razor Pages](./mvc-razor-pages/overall.md)
+* [Blazor](./blazor/overall.md)
+* [Angular](./angular/quick-start.md)
+* [React Native](./react-native/index.md)
+* [MAUI](./maui/index.md)
\ No newline at end of file
diff --git a/docs/en/framework/ui/maui/index.md b/docs/en/framework/ui/maui/index.md
index 2c940b8b90..69f9518e92 100644
--- a/docs/en/framework/ui/maui/index.md
+++ b/docs/en/framework/ui/maui/index.md
@@ -64,19 +64,19 @@ The MAUI template consists of four pages:
### Homepage
-
+
### Users Page
-
+
### Tenants Page
-
+
### Settings Page
-
+
## Run the Mobile Application
@@ -100,4 +100,4 @@ There is no custom step for publishing your app. You can follow the official doc
- [Windows](https://learn.microsoft.com/en-us/dotnet/maui/windows/deployment/overview?view=net-maui-8.0)
ABP template uses **Secure Storage** to store access & refresh tokens. So, make sure you have completed the following section for each platform to use it in production:
-- [Secure Storage - Get Started](https://learn.microsoft.com/en-us/dotnet/maui/platform-integration/storage/secure-storage?view=net-maui-8.0&tabs=android#get-started)
\ No newline at end of file
+- [Secure Storage - Get Started](https://learn.microsoft.com/en-us/dotnet/maui/platform-integration/storage/secure-storage?view=net-maui-8.0&tabs=android#get-started)
diff --git a/docs/en/framework/ui/mvc-razor-pages/client-side-package-management.md b/docs/en/framework/ui/mvc-razor-pages/client-side-package-management.md
index 2e7515884a..bb984a001f 100644
--- a/docs/en/framework/ui/mvc-razor-pages/client-side-package-management.md
+++ b/docs/en/framework/ui/mvc-razor-pages/client-side-package-management.md
@@ -1,5 +1,5 @@
-## ASP.NET Core MVC Client Side Package Management
+# ASP.NET Core MVC Client Side Package Management
ABP can work with any type of client side package management systems. You can even decide to use no package management system and manage your dependencies manually.
diff --git a/docs/en/framework/ui/mvc-razor-pages/overall.md b/docs/en/framework/ui/mvc-razor-pages/overall.md
index b6e85bfd15..657fb42df7 100644
--- a/docs/en/framework/ui/mvc-razor-pages/overall.md
+++ b/docs/en/framework/ui/mvc-razor-pages/overall.md
@@ -36,7 +36,7 @@ Currently, three themes are **officially provided**:
* The [Basic Theme](Basic-Theme.md) is the minimalist theme with the plain Bootstrap style. It is **open source and free**.
* The [Lepton Theme](https://abp.io/themes) is a **commercial** theme developed by the core ABP team and is a part of the [ABP](https://abp.io/) license.
-* The [LeptonX Theme](https://x.leptontheme.com/) is a theme that has both [commercial](https://docs.abp.io/en/commercial/latest/themes/lepton-x/mvc) and [lite](../../../ui-themes/lepton-x-lite/asp-net-core.md) choices.
+* The [LeptonX Theme](https://x.leptontheme.com/) is a theme that has both [commercial](../../../ui-themes/lepton-x/mvc.md) and [lite](../../../ui-themes/lepton-x-lite/asp-net-core.md) choices.
There are also some community-driven themes for the ABP (you can search on the web).
diff --git a/docs/en/framework/ui/mvc-razor-pages/security-headers.md b/docs/en/framework/ui/mvc-razor-pages/security-headers.md
index 56cde05005..a54697aca4 100644
--- a/docs/en/framework/ui/mvc-razor-pages/security-headers.md
+++ b/docs/en/framework/ui/mvc-razor-pages/security-headers.md
@@ -38,7 +38,7 @@ Security Headers middleware is an ASP.NET Core request pipeline [middleware](htt
app.UseAbpSecurityHeaders();
```
-> You can add this middleware after `app.UseRouting()` in your module class's `OnApplicationInitialization` method to register it to the request pipeline. This middleware is already configured in the [ABP Commercial Startup Templates](https://docs.abp.io/en/commercial/latest/startup-templates/index), so you don't need to manually add it if you are using one of these startup templates.
+> You can add this middleware after `app.UseRouting()` in your module class's `OnApplicationInitialization` method to register it to the request pipeline. This middleware is already configured in the [ABP Commercial Startup Templates](../../../solution-templates/index.md), so you don't need to manually add it if you are using one of these startup templates.
After that, you have registered the `UseAbpSecurityHeaders` middleware into the request pipeline, the defined security headers will be shown in the response headers as in the figure below:
diff --git a/docs/en/framework/ui/mvc-razor-pages/theming.md b/docs/en/framework/ui/mvc-razor-pages/theming.md
index 9cddf1ba96..895032f1d7 100644
--- a/docs/en/framework/ui/mvc-razor-pages/theming.md
+++ b/docs/en/framework/ui/mvc-razor-pages/theming.md
@@ -21,7 +21,7 @@ Currently, four themes are **officially provided**:
* The [Basic Theme](basic-theme.md) is the minimalist theme with the plain Bootstrap style. It is **open source and free**.
* The [LeptonX Lite Theme](../../../ui-themes/lepton-x-lite/asp-net-core.md) is modern and stylish Bootstrap UI theme. It is ideal if you want to have a production ready UI theme. It is also **open source and free**.
* The [Lepton Theme](https://abp.io/themes) is a **commercial** theme developed by the core ABP team and is a part of the [ABP](https://abp.io/) license.
-* The [LeptonX Theme](https://docs.abp.io/en/commercial/latest/themes/lepton-x/index) is also a **commercial** theme developed by the core ABP theme and is a part of the [ABP](https://abp.io/) license. This is the default theme after ABP v6.0.0.
+* The [LeptonX Theme](../../../ui-themes/lepton-x/index.md) is also a **commercial** theme developed by the core ABP theme and is a part of the [ABP](https://abp.io/) license. This is the default theme after ABP v6.0.0.
There are also some community-driven themes for the ABP (you can search on the web).
diff --git a/docs/en/get-started/images/abp-studio-created-new-solution.png b/docs/en/get-started/images/abp-studio-created-new-solution.png
index 4a7d4f0b01..c089c276f6 100644
Binary files a/docs/en/get-started/images/abp-studio-created-new-solution.png and b/docs/en/get-started/images/abp-studio-created-new-solution.png differ
diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-additional-options-microservice.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-additional-options-microservice.png
index 87bd86755c..9f9df8991f 100644
Binary files a/docs/en/get-started/images/abp-studio-new-solution-dialog-additional-options-microservice.png and b/docs/en/get-started/images/abp-studio-new-solution-dialog-additional-options-microservice.png differ
diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-additional-options.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-additional-options.png
new file mode 100644
index 0000000000..4a2d3c2dd2
Binary files /dev/null and b/docs/en/get-started/images/abp-studio-new-solution-dialog-additional-options.png differ
diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-database-configurations-efcore.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-database-configurations-efcore.png
index e71cbb7036..e9a5bcee19 100644
Binary files a/docs/en/get-started/images/abp-studio-new-solution-dialog-database-configurations-efcore.png and b/docs/en/get-started/images/abp-studio-new-solution-dialog-database-configurations-efcore.png differ
diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-database-configurations-mongo.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-database-configurations-mongo.png
index f0b0ed136b..4b00156e3f 100644
Binary files a/docs/en/get-started/images/abp-studio-new-solution-dialog-database-configurations-mongo.png and b/docs/en/get-started/images/abp-studio-new-solution-dialog-database-configurations-mongo.png differ
diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-database-provider-efcore.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-database-provider-efcore.png
index 6f8e937b09..138d1904f5 100644
Binary files a/docs/en/get-started/images/abp-studio-new-solution-dialog-database-provider-efcore.png and b/docs/en/get-started/images/abp-studio-new-solution-dialog-database-provider-efcore.png differ
diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-database-provider-mongo.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-database-provider-mongo.png
index a1175b81bf..1e3f54a9d8 100644
Binary files a/docs/en/get-started/images/abp-studio-new-solution-dialog-database-provider-mongo.png and b/docs/en/get-started/images/abp-studio-new-solution-dialog-database-provider-mongo.png differ
diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-mobile-framework-microservice.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-mobile-framework-microservice.png
index b7ccfb2976..7e43e784f3 100644
Binary files a/docs/en/get-started/images/abp-studio-new-solution-dialog-mobile-framework-microservice.png and b/docs/en/get-started/images/abp-studio-new-solution-dialog-mobile-framework-microservice.png differ
diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-mobile-framework.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-mobile-framework.png
index 20b89c059d..f773d887d8 100644
Binary files a/docs/en/get-started/images/abp-studio-new-solution-dialog-mobile-framework.png and b/docs/en/get-started/images/abp-studio-new-solution-dialog-mobile-framework.png differ
diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-optional-modules.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-optional-modules.png
new file mode 100644
index 0000000000..992760e3fc
Binary files /dev/null and b/docs/en/get-started/images/abp-studio-new-solution-dialog-optional-modules.png differ
diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-public-website.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-public-website.png
new file mode 100644
index 0000000000..e10d4a965c
Binary files /dev/null and b/docs/en/get-started/images/abp-studio-new-solution-dialog-public-website.png differ
diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-solution-properties.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-solution-properties.png
index 93b3154e7c..7412b4b6e1 100644
Binary files a/docs/en/get-started/images/abp-studio-new-solution-dialog-solution-properties.png and b/docs/en/get-started/images/abp-studio-new-solution-dialog-solution-properties.png differ
diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-solution-structure.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-solution-structure.png
index 3cdd22f555..310488c1bc 100644
Binary files a/docs/en/get-started/images/abp-studio-new-solution-dialog-solution-structure.png and b/docs/en/get-started/images/abp-studio-new-solution-dialog-solution-structure.png differ
diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-ui-framework.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-ui-framework.png
index 228c711a1a..d373a55344 100644
Binary files a/docs/en/get-started/images/abp-studio-new-solution-dialog-ui-framework.png and b/docs/en/get-started/images/abp-studio-new-solution-dialog-ui-framework.png differ
diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-ui-theme.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-ui-theme.png
index d17d1d766d..8594f02d58 100644
Binary files a/docs/en/get-started/images/abp-studio-new-solution-dialog-ui-theme.png and b/docs/en/get-started/images/abp-studio-new-solution-dialog-ui-theme.png differ
diff --git a/docs/en/get-started/images/abp-studio-quick-start-application-solution-runner.png b/docs/en/get-started/images/abp-studio-quick-start-application-solution-runner.png
index 2e4a9aa583..f5ca4c97e7 100644
Binary files a/docs/en/get-started/images/abp-studio-quick-start-application-solution-runner.png and b/docs/en/get-started/images/abp-studio-quick-start-application-solution-runner.png differ
diff --git a/docs/en/get-started/images/abp-studio-quick-start-browse-command.png b/docs/en/get-started/images/abp-studio-quick-start-browse-command.png
index 186ff2d55d..c97b3c9700 100644
Binary files a/docs/en/get-started/images/abp-studio-quick-start-browse-command.png and b/docs/en/get-started/images/abp-studio-quick-start-browse-command.png differ
diff --git a/docs/en/get-started/images/abp-studio-quick-start-browse.png b/docs/en/get-started/images/abp-studio-quick-start-browse.png
index d63c20c8ac..47b4bf29cf 100644
Binary files a/docs/en/get-started/images/abp-studio-quick-start-browse.png and b/docs/en/get-started/images/abp-studio-quick-start-browse.png differ
diff --git a/docs/en/get-started/images/abp-studio-quick-start-example-applications-in-solution-runner.png b/docs/en/get-started/images/abp-studio-quick-start-example-applications-in-solution-runner.png
index 46adf8bfc0..44cef603fb 100644
Binary files a/docs/en/get-started/images/abp-studio-quick-start-example-applications-in-solution-runner.png and b/docs/en/get-started/images/abp-studio-quick-start-example-applications-in-solution-runner.png differ
diff --git a/docs/en/get-started/images/solution-runner-public-website.png b/docs/en/get-started/images/solution-runner-public-website.png
index a00368ee79..b1e76a4ce6 100644
Binary files a/docs/en/get-started/images/solution-runner-public-website.png and b/docs/en/get-started/images/solution-runner-public-website.png differ
diff --git a/docs/en/get-started/layered-web-application.md b/docs/en/get-started/layered-web-application.md
index 76afeb6dab..0b051b9681 100644
--- a/docs/en/get-started/layered-web-application.md
+++ b/docs/en/get-started/layered-web-application.md
@@ -11,6 +11,34 @@
In this quick start guide, you will learn how to create and run a layered (and potentially modular) web application using [ABP Studio](../studio/index.md).
+## Setup your development environment
+
+First things first! Let's setup your development environment before creating the first project.
+
+### Pre-requirements
+
+The following tools should be installed on your development machine:
+
+* [Visual Studio 2022](https://visualstudio.microsoft.com/vs/) (v17.3+) for Windows / [Visual Studio for Mac](https://visualstudio.microsoft.com/vs/mac/). [1](#f-editor)
+* [.NET 8.0+](https://dotnet.microsoft.com/en-us/download/dotnet)
+{{ if UI != "Blazor" }}
+* [Node v18.19+](https://nodejs.org/)
+* [Yarn v1.22+ (not v2)](https://classic.yarnpkg.com/en/docs/install) [2](#f-yarn) or npm v10+ (already installed with Node)
+{{ end }}
+{{ if Tiered == "Yes" }}
+* [Redis](https://redis.io/) (as the [distributed cache](../framework/fundamentals/caching.md)).
+{{ else }}
+* [Redis](https://redis.io/) (as the [distributed cache](../framework/fundamentals/caching.md)) is required if you select the Public website option.
+{{ end }}
+
+1 _You can use another editor instead of Visual Studio as long as it supports .NET Core and ASP.NET Core._ [â©](#a-editor)
+
+{{ if UI != "Blazor" }}
+
+2 _Yarn v2 works differently and is not supported._ [â©](#a-yarn)
+
+{{ end }}
+
## Creating a New Solution
> đ This document uses [ABP Studio](../studio/index.md) to create new ABP solutions. **ABP Studio** is in the beta version now. If you have any issues, you can use the [ABP CLI](../cli/index.md) to create new solutions. You can also use the [getting started page](https://abp.io/get-started) to easily build ABP CLI commands for new project creations.
@@ -49,17 +77,25 @@ LeptonX is the suggested UI theme that is proper for production usage. Select on
Here, you see all the mobile applications available in that startup solution template. These mobile applications are well-integrated into your solution and can use the same backend with your web application. They are simple (do not have pre-built features as much as the web application) but a very good starting point to build your mobile application.
-Pick the one best for you, or select the *None* if you don't want a mobile application in your solution, then click Next to navigate to the *Additional UI options* screen:
+Pick the one best for you, or select the *None* if you don't want a mobile application in your solution, then click Next to navigate to the *Public website* screen:
-
+
That startup solution template also provides an option to create a second web application inside the solution. The second application is called the Public website, an ASP.NET Core MVC / Razor Page application. It can be used to create a public landing/promotion for your product. It is well integrated into the solution (can share the same services, entities, database, and the same authentication logic, for example). If you want, you can also include the [CMS Kit module](../modules/cms-kit) to your solution to add dynamic content features to your web application.
-So, either select the *Public website* or skip it and click the Next button for the *Solution Structure* selection:
+So, either select the *Public website* or skip it and click the Next button for the *Optional Modules* selection:
+
+
+
+Each item in that list is a pre-built application module. You can click the blue icon near to the module name to get more information about the module. You can leave the list as is (so, it installs the most common and used modules for you) or customize based on your preference.
+
+Installing a module after creating the solution may require manual steps. So, it is better to decide the modules in the beginning. You can create an example solutions before your real solution to explore the solution and modules.
+
+Once you select the desired modules, click the *Next* button for the *Solution Structure* screen:

-The *Tiered* option is used to physically separate the web application (the UI part) from the backend HTTP APIs. It creates a separate host application that only serves the HTTP (REST) APIs. The web application then performs remote HTTP calls to that application for every operation. If the *Tiered* option is not selected, then the web and HTTP APIs are hosted in a single application, and the calls from the UI layer to the API layer are performed in-process.
+It creates a separate host application that only serves the HTTP (REST) APIs. The web application then performs remote HTTP calls to that application for every operation. If the *Tiered* option is not selected, then the web and HTTP APIs are hosted in a single application, and the calls from the UI layer to the API layer are performed in-process.
The tiered architecture allows you to host the web (UI) application in a server that can not access to your database server. However, it brings a slight loss of performance (because of the HTTP calls between UI and HTTP API applications) and makes your architecture, development, and deployment more complex. If you don't understand the tiered structure, just skip it.
@@ -79,9 +115,13 @@ On that screen, you can decide on your database provider by selecting one of the

{{ end }}
-Here, you can select the database management systems (DBMS){{ if DB == "EF" }} and the connection string{{ end }}. Now, we are ready to allow ABP Studio to create our solution. Just click the *Create* button and let the ABP Studio do the rest for you.
+Here, you can select the database management systems (DBMS){{ if DB == "EF" }} and the connection string{{ end }}. Click *Next* button to see the *Additional Options*.
+
+
+
+If you uncheck the *Kubernetes Configuration* option, the solution will not include the Kubernetes configuration files, such as Helm charts and other Kubernetes-related files. You can also specify *Social Logins*; if you uncheck this option, the solution will not be configured for social login.
-After clicking the Create button, the dialog is closed and your solution is loaded into ABP Studio:
+Now, we are ready to allow ABP Studio to create our solution. Just click the *Create* button and let the ABP Studio do the rest for you. After clicking the Create button, the dialog is closed and your solution is loaded into ABP Studio:

@@ -101,7 +141,7 @@ Open the [Solution Runner](../studio/running-applications.md) section on the lef
Once you click the *Play* icon on the left side, the section is open in the same place as the Solution Explorer section. ABP Studio also opens the *Application Monitor* view on the main content area. *Application Monitor* shows useful insights for your applications (e.g. *HTTP Request*, *Events* and *Exceptions*) in real-time. You can use it to see the happenings in your applications, so you can easily track errors and many helpful details.
-In the Solution Runner section (on the left side) you can see all the runnable applications in the current solution. For the MVC with public website example, we have three applications:
+In the Solution Runner section (on the left side) you can see all the runnable applications in the current solution. For the MVC with public website and MAUI mobile example, we have four applications:

@@ -202,4 +242,4 @@ Before starting the mobile application, ensure that you configure it for [react-
> For example in non-tiered MVC with public website application:
-
+
\ No newline at end of file
diff --git a/docs/en/get-started/microservice.md b/docs/en/get-started/microservice.md
index 9a90be00da..47f1091b14 100644
--- a/docs/en/get-started/microservice.md
+++ b/docs/en/get-started/microservice.md
@@ -71,7 +71,7 @@ Click the Next button to see *Additional Options* selection:

-If you unchecked the *Kubernetes Configuration* option, the solution will not include the Kubernetes configuration files which include the Helm charts and other Kubernetes related files.
+If you unchecked the *Kubernetes Configuration* option, the solution will not include the Kubernetes configuration files which include the Helm charts and other Kubernetes related files. You can also specify *Social Logins*; if you uncheck this option, the solution will not be configured for social login.
Now, we are ready to allow ABP Studio to create our solution. Just click the *Create* button and let the ABP Studio do the rest for you. After clicking the Create button, the dialog is closed and your solution is loaded into ABP Studio:
@@ -125,6 +125,8 @@ In the *Solution Runner* section (on the left side) you can see all the runnable
> All the leaf items in the *Solution Runner* is called as an *Application* as they are executable applications.
+> For a faster start process, first start the *Docker-Dependencies*, then you can start all applications.
+
As shown in the figure above, the executable applications are grouped into folders like `apps`, `gateways`, `infrastructure`, and `services`. You can start/stop them all, a group (folder) of them, or one by one.
Before running the applications, it is good to be sure that all applications are built. To do that, right-click the root item in the *Solution Runner* and select *Build* -> *Build All* action.
diff --git a/docs/en/get-started/single-layer-web-application.md b/docs/en/get-started/single-layer-web-application.md
index ff9868eff9..319fb19c9a 100644
--- a/docs/en/get-started/single-layer-web-application.md
+++ b/docs/en/get-started/single-layer-web-application.md
@@ -10,6 +10,34 @@
In this quick start guide, you will learn how to create and run a single layer web application using [ABP Studio](../studio/index.md).
+## Setup your development environment
+
+First things first! Let's setup your development environment before creating the first project.
+
+### Pre-requirements
+
+The following tools should be installed on your development machine:
+
+* [Visual Studio 2022](https://visualstudio.microsoft.com/vs/) (v17.3+) for Windows / [Visual Studio for Mac](https://visualstudio.microsoft.com/vs/mac/). [1](#f-editor)
+* [.NET 8.0+](https://dotnet.microsoft.com/en-us/download/dotnet)
+{{ if UI != "Blazor" }}
+* [Node v18.19+](https://nodejs.org/)
+* [Yarn v1.22+ (not v2)](https://classic.yarnpkg.com/en/docs/install) [2](#f-yarn) or npm v10+ (already installed with Node)
+{{ end }}
+{{ if Tiered == "Yes" }}
+* [Redis](https://redis.io/) (as the [distributed cache](../framework/fundamentals/caching.md)).
+{{ else }}
+* [Redis](https://redis.io/) (as the [distributed cache](../framework/fundamentals/caching.md)) is required if you select the Public website option.
+{{ end }}
+
+1 _You can use another editor instead of Visual Studio as long as it supports .NET Core and ASP.NET Core._ [â©](#a-editor)
+
+{{ if UI != "Blazor" }}
+
+2 _Yarn v2 works differently and is not supported._ [â©](#a-yarn)
+
+{{ end }}
+
## Creating a New Solution
> đ This document uses [ABP Studio](../studio/index.md) to create new ABP solutions. **ABP Studio** is in the beta version now. If you have any issues, you can use the [ABP CLI](../cli/index.md) to create new solutions. You can also use the [getting started page](https://abp.io/get-started) to easily build ABP CLI commands for new project creations.
diff --git a/docs/en/guides/migrating-from-open-source.md b/docs/en/guides/migrating-from-open-source.md
index 82ea2ba65c..5340e4212a 100644
--- a/docs/en/guides/migrating-from-open-source.md
+++ b/docs/en/guides/migrating-from-open-source.md
@@ -1,483 +1,57 @@
# Migrating from Open Source Templates
-````json
-//[doc-params]
-{
- "DB": ["EF", "Mongo"]
-}
-````
+ABP Studio provides a way for users, who already started the development before purchasing a license, to auto-upgrade their solutions with Pro modules. You can use this functionality through ABP Studio UI or ABP Studio CLI:
-This guide provides you a step-by-step guidance to migrating your existing application (that uses the ABP) to ABP. Since ABP uses the main structure of the ABP and is built on top of that, this process is pretty straightforward, you can apply the steps mentioned in each step and easily migrate your project to ABP.
+* A new button labeled `Upgrade to Pro` will be visible if you have a license but the current solution is created with open-source (free) license.
-> After following this documentation, you should be able to migrate your project to ABP. However, if you have any problems or cannot migrate your project, we are providing paid consultancy, which you can find details at [https://abp.io/additional-services](https://abp.io/additional-services). On this page, you can find related pieces of information about our trainings, custom project development, and porting existing projects services, and you can fill-out the contact form, so we can reach out to you.
+
-## ABP Migration Steps
+* Alternatively, you can use the following ABP Studio CLI command to achieve the same functionality:
-In this guide, we assume that you have a middle-complex ABP based solution and want to migrate to ABP. Throughout this documentation, `Acme.BookStore` application will be used as a reference solution (example application that is described in ABP's tutorial documents){{if DB == "EF"}}, which you can find at [https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore){{end}} but all of these steps are applicable for your own applications, only some of them can be changed according to your project choose and structure. However, the migration flow is the same.
+ ```bash
+ abp upgrade [-t ] [options]
+
+ Examples:
+
+ abp upgrade -t app
+ abp upgrade -t app --language-management --gdpr --audit-logging-ui --text-template-management --openiddict-pro
+ abp upgrade -t app-nolayers --audit-logging-ui
+ abp upgrade -t app-nolayers -p D:\MyProjects\MyProject
+ ```
-There are 4 main steps to migrating from ABP to ABP, and each one of them is explained in the following sections, step-by-step and project-based:
+## Changes in the solution
-### 1. License Transition
+### Module changes
-The first step is to obtain the necessary license for ABP to be able to get the benefit of the pro modules and unlock the additional features. To do that, you should first get your `ApiKey` from the [organization's detail page](https://abp.io/my-organizations).
+This command will remove the following modules from your solution:
-You can update the **NuGet.Config** file in the root directory of your solution and add the *packageSource* as follows (don't forget to replace `` placeholder):
+- Volo.Abp.Account
+- Volo.Abp.Identity
+- Volo.Abp.TenantManagement
+- Volo.Abp.LeptonXLiteTheme
-```diff
-
-
-
-
-+
-
-
-```
+And install the following modules to your solution:
-After that, you can obtain an `AbpLicenseCode` by creating a startup template and copying the code from the `appsettings.secrets.json` file. Then, you can open the `appsettings.secrets.json` files under the `*.DbMigrator` and `*.Domain` projects and add your `AbpLicenseCode`:
+- Volo.Abp.Account.Pro
+- Volo.Abp.Identity.Pro
+- Volo.Abp.LeptonXTheme
+- Volo.Saas
+- Volo.Abp.OpenIddict.Pro (*Optional*)
+- Volo.Abp.AuditLogging.Pro (*Optional*)
+- Volo.Abp.LanguageManagement (*Optional*)
+- Volo.Abp.TextTemplateManagement (*Optional*)
+- Volo.Abp.Gdpr (*Optional*)
-```json
-{
- //...
-
- "AbpLicenseCode": ""
-}
+### Other changes
-```
+The command will also do the following changes in your solution:
-> `ApiKey` is needed to be able to use ABP's NuGet packages and `AbpLicenseCode` is needed for license checks per module.
+- It will add `nuget.abp.io` NuGet source to `NuGet.config` file.
+- It will create or update `appsettings.secrets.json` files to place the license key needed for Pro module usage.
+- It will update the database. (And it will create a new migration if the solution uses EntityFramework Core)
+- It will run `install-libs` command at the end.
-### 2. Installing the ABP Modules
+## Things to pay attention before using
-After, you have added the `ApiKey` and `AbpLicenseCode` to the relevant places, now you can add [ABP's modules](../modules) to your solution. ABP provides plenty of modules that extend the ABP modules, such as the `Account Pro` module over the `Account` module or the `Identity Pro` module over the `Identity` module.
-
-To replace these modules and also add the additional modules provided by ABP, you can use the `abp add-module` command (and then remove the free modules as described in the next section). This command finds all packages of the specified module, finds the related projects in the solution, and adds each package to the corresponding project in the solution. Therefore, by using this command, you don't need to manually add the package references to the `*.csproj` files and add related `[DependsOn(typeof(<>))]` statements to the module classes, instead, this command does this on behalf of you.
-
-You can run the following commands one after another in your solution directory and add all the related modules into your solution as you would have started with [one of the startup templates of ABP](../solution-templates):
-
-1. `abp add-module Volo.Identity.Pro --skip-db-migrations` â [Identity Module](../modules/identity.md)
-2. `abp add-module Volo.OpenIddict.Pro --skip-db-migrations` â [OpenIddict Module](../modules/openiddict.md)
-3. `abp add-module Volo.Saas --skip-db-migrations` â [SaaS Module](../modules/saas.md)
-4. `abp add-module Volo.AuditLogging.Ui --skip-db-migrations` â [Audit Logging UI Module](../modules/audit-logging.md)
-5. `abp add-module Volo.Account.Pro --skip-db-migrations` â [Account Module](../modules/account.md)
-6. `abp add-module Volo.TextTemplateManagement --skip-db-migrations` â [Text Template Management Module](../modules/text-template-management.md)
-7. `abp add-module Volo.LanguageManagement --skip-db-migrations` â [Language Management Module](../modules/language-management.md)
-8. `abp add-module Volo.Gdpr --skip-db-migrations` â [GDPR Module](../modules/gdpr.md)
-9. `abp add-module Volo.Abp.BlobStoring.Database --skip-db-migrations` â [Blob Storing - Database Provider](../framework/infrastructure/blob-storing/database.md)
-
-> These 9 modules are pre-installed on the [startup templates of ABP](../solution-templates). Therefore, you can install all of them if you want to align your project with the startup templates, but it's totally optional, so you can skip running the command above for a module that you don't want to add to your solution.
-
-After running the commands above, all of the related commercial packages and their dependencies will be added to your solution. In addition to these module packages, you can add `Volo.Abp.Commercial.SuiteTemplates` package into your domain application to be able to use ABP Suite later on. By doing that you will be able to add your solution from [ABP Suite UI](../suite) and generate CRUD pages for your applications whenever you want.
-
-So, open your `*Domain.csproj` file and add the line below (don't forget to replace the `` placeholder):
-
-```xml
-
-```
-
-Then, for the final step, you need to add the related `DependsOn` statement to the `*DomainModule.cs` file as follows:
-
-```cs
-using Volo.Abp.Commercial.SuiteTemplates;
-
-// ...
-
-[DependsOn(typeof(VoloAbpCommercialSuiteTemplatesModule))]
-public class BookStoreDomainModule : AbpModule
-{
- //omited for code abbreviation...
-}
-```
-
-### 3. Removing the ABP Module References & Updating Configurations
-
-After the license transition and installing the ABP Modules, now you can remove the unnecessary free modules. For example, now you don't need the `Identity` module in your solution, because you have added the `Identity PRO` module in the previous section and it already has dependency on the free module and extends it.
-
-You should remove various dependencies and references in different projects in your solution. All of the required changes are listed below in different sections, please apply the following steps to remove the unnecessary ABP Modules:
-
-#### 3.1 - Domain.Shared Project
-
-Remove the unnecessary references from the `*Domain.Shared.csproj`:
-
-```diff
--
--
--
-```
-
-Remove the unnecessary namespaces, and **DependsOn** statements from `*DomainSharedModule.cs`:
-
-```diff
-- using Volo.Abp.TenantManagement;
-
-- typeof(AbpIdentityDomainSharedModule),
-- typeof(AbpOpenIddictDomainSharedModule),
-- typeof(AbpTenantManagementDomainSharedModule)
-```
-
-#### 3.2 - Domain Project
-
-Remove the unnecessary references from the `*Domain.csproj`:
-
-```diff
--
--
--
-```
-
-Remove the unnecessary namespaces, and **DependsOn** statements from `*DomainModule.cs`:
-
-```diff
-- using Volo.Abp.TenantManagement;
-
-- typeof(AbpIdentityDomainModule),
-- typeof(AbpOpenIddictDomainModule),
-- typeof(AbpTenantManagementDomainModule),
-```
-
-After removing the unnecessary references, we should update the namespaces in the `BookStoreDbMigrationService` class under the **Data** folder:
-
-```diff
-- using Volo.Abp.TenantManagement;
-+ using Volo.Saas.Tenants;
-```
-
-{{ if DB == "EF" }}
-
-#### 3.3 - EntityFrameworkCore Project
-
-Remove the unnecessary references from the `*EntityFrameworkCore.csproj`:
-
-```diff
--
--
--
-```
-
-Remove the unnecessary namespaces from `*EntityFrameworkCoreModule.cs`:
-
-```diff
-- using Volo.Abp.TenantManagement.EntityFrameworkCore;
-
-- typeof(AbpIdentityEntityFrameworkCoreModule),
-- typeof(AbpOpenIddictEntityFrameworkCoreModule),
-- typeof(AbpTenantManagementEntityFrameworkCoreModule)
-```
-
-Then, update the`*DbContext.cs` and make the related configurations:
-
-```diff
-- using Volo.Abp.TenantManagement;
-- using Volo.Abp.TenantManagement.EntityFrameworkCore;
-+ using Volo.Saas.Editions;
-+ using Volo.Saas.EntityFrameworkCore;
-+ using Volo.Saas.Tenants;
-+ using Volo.Abp.LanguageManagement.EntityFrameworkCore;
-
-[ReplaceDbContext(typeof(IIdentityDbContext))]
-- [ReplaceDbContext(typeof(ITenantManagementDbContext))]
-+ [ReplaceDbContext(typeof(ISaasDbContext))]
-[ConnectionStringName("Default")]
-public class BookStoreDbContext :
- AbpDbContext,
- IIdentityDbContext,
-- ITenantManagementDbContext
-+ ISaasDbContext
-{
- //...
-
-- // Tenant Management
-- public DbSet Tenants { get; set; }
-- public DbSet TenantConnectionStrings { get; set; }
-
-+ // SaaS
-+ public DbSet Tenants { get; set; }
-+ public DbSet Editions { get; set; }
-+ public DbSet TenantConnectionStrings { get; set; }
-
- //...
-
- protected override void OnModelCreating(ModelBuilder builder)
- {
- base.OnModelCreating(builder);
-
- //...
-
-- builder.ConfigureIdentity();
-+ builder.ConfigureIdentityPro();
-- builder.ConfigureOpenIddict();
-+ builder.ConfigureOpenIddictPro();
-- builder.ConfigureTenantManagement();
-+ builder.ConfigureSaas();
-
-+ builder.ConfigureLanguageManagement();
-
- }
-}
-```
-
-{{ else }}
-
-#### 3.3 - MongoDB Project
-
-Remove the unnecessary references from the `*MongoDb.csproj`:
-
-```diff
--
--
--
-```
-
-Remove the unnecessary namespaces from `*MongoDbModule.cs`:
-
-```diff
-- using Volo.Abp.TenantManagement.MongoDb;
-
-- typeof(AbpIdentityMongoDbModule),
-- typeof(AbpOpenIddictMongoDbModule),
-- typeof(AbpTenantManagementMongoDbModule)
-```
-
-{{ end }}
-
-#### 3.4 - Application.Contracts Project
-
-Remove the unnecessary references from the `*Application.Contracts.csproj`:
-
-```diff
--
--
--
-```
-
-Remove the unnecessary namespaces, and **DependsOn** statements from `*ApplicationContractsModule.cs`:
-
-```diff
-- using Volo.Abp.TenantManagement;
-
-- typeof(AbpAccountApplicationContractsModule),
-- typeof(AbpTenantManagementApplicationContractsModule),
-```
-
-#### 3.5 - Application Project
-
-Remove the unnecessary references from the `*Application.csproj`:
-
-```diff
--
--
--
-```
-
-Remove the unnecessary namespaces, and **DependsOn** statements from `*ApplicationModule.cs`:
-
-```diff
-- using Volo.Abp.TenantManagement;
-
-- typeof(AbpAccountApplicationModule),
-- typeof(AbpTenantManagementApplicationModule),
-```
-
-#### 3.6 - HttpApi Project
-
-Remove the unnecessary references from the `*HttpApi.csproj`:
-
-```diff
--
--
--
-```
-
-Remove the unnecessary namespaces, and **DependsOn** statements from `*HttpApiModule.cs`:
-
-```diff
-- using Volo.Abp.TenantManagement;
-
-- typeof(AbpAccountHttpApiModule),
-- typeof(AbpTenantManagementHttpApiModule),
-```
-
-#### 3.7 - HttpApi.Client Project
-
-Remove the unnecessary references from the `*HttpApi.Client.csproj`:
-
-```diff
--
--
--
-```
-
-Remove the unnecessary namespaces, and **DependsOn** statements from `*HttpApiClientModule.cs`:
-
-```diff
-- using Volo.Abp.TenantManagement;
-
-- typeof(AbpAccountHttpApiClientModule),
-- typeof(AbpTenantManagementHttpApiClientModule),
-```
-
-#### 3.8 - Web Project
-
-Remove the unnecessary references from the `*Web.csproj`:
-
-```diff
--
-+
-
--
--
-
--
-+
-
-```
-
-> Notice, that you have also changed the LeptonXLite theme reference with the [LeptonX Theme](../ui-themes/lepton-x), which is a commercial theme provided by ABP and has superior features to the LeptonX Lite theme.
-
-Update namespaces for the `*WebModule.cs`:
-
-```diff
-- using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite;
-- using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite.Bundling;
-+ using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonX;
-+ using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonX.Bundling;
-
-- using Volo.Abp.TenantManagement.Web;
-+ using Volo.Abp.Gdpr.Web.Extensions;
-+ using Volo.Abp.LeptonX.Shared;
-+ using Volo.Abp.PermissionManagement;
-```
-
-Then, we can update the configurations and add missing middlewares to the request pipeline in the same file, as follows:
-
-```diff
-- typeof(AbpAccountWebOpenIddictModule),
-+ typeof(AbpAccountPublicWebOpenIddictModule),
-- typeof(AbpTenantManagementWebModule),
-- typeof(AbpAspNetCoreMvcUiLeptonXLiteThemeModule),
-+ typeof(AbpAspNetCoreMvcUiLeptonXThemeModule),
-
- public override void ConfigureServices(ServiceConfigurationContext context)
- {
- //other configurations...
-
-+ context.Services.AddAbpCookieConsent(options =>
-+ {
-+ options.IsEnabled = true;
-+ options.CookiePolicyUrl = "/CookiePolicy";
-+ options.PrivacyPolicyUrl = "/PrivacyPolicy";
-+ });
-
-+ Configure(options =>
-+ {
-+ options.DefaultStyle = LeptonXStyleNames.System;
-+ });
-
-+ Configure(options =>
-+ {
-+ options.ApplicationLayout = LeptonXMvcLayouts.SideMenu;
-+ });
-
-+ Configure(options =>
-+ {
-+ options.IsDynamicPermissionStoreEnabled = true;
-+ });
- }
-
- //...
-
- Configure(options =>
- {
- options.StyleBundles.Configure(
-- LeptonXLiteThemeBundles.Styles.Global,
-+ LeptonXThemeBundles.Styles.Global,
- bundle =>
- {
- bundle.AddFiles("/global-styles.css");
- }
- );
- });
-
- public override void OnApplicationInitialization(ApplicationInitializationContext context)
- {
- var app = context.GetApplicationBuilder();
- var env = context.GetEnvironment();
-
- //...
-
-+ app.UseAbpCookieConsent();
- app.UseCorrelationId();
-+ app.UseAbpSecurityHeaders();
- app.UseStaticFiles();
-
- //...
- }
-```
-
-> **Note:** In the startup templates of ABP, besides these configurations, there are some additional configurations, such as [configuring impersonation](../modules/account/impersonation.md), [configuring external providers](https://docs.abp.io/en/abp/latest/Modules/Account#configure-the-provider), and configuring health checks. These configurations are optional, and for the sake of simplicity, in this documentation, we did not mention them. You can apply the related configurations by checking the related documentation and from the default startup templates.
-
-Update the namespaces in the `BookStoreMenuContributor` file as follows:
-
-```diff
-- using Volo.Abp.TenantManagement.Web.Navigation;
-+ using Volo.Abp.TextTemplateManagement.Web.Navigation;
-+ using Volo.Abp.AuditLogging.Web.Navigation;
-+ using Volo.Abp.LanguageManagement.Navigation;
-+ using Volo.Abp.OpenIddict.Pro.Web.Menus;
-```
-
-Then, we can update the `ConfigureMainMenuAsync` method in this file to specify the order of the menu items:
-
-```csharp
-private Task ConfigureMainMenuAsync(MenuConfigurationContext context)
-{
- //other configurations for menu items...
-
- //Administration
- var administration = context.Menu.GetAdministration();
- administration.Order = 5;
-
- //Administration->Identity
- administration.SetSubItemOrder(IdentityMenuNames.GroupName, 1);
-
- //Administration->OpenIddict
- administration.SetSubItemOrder(OpenIddictProMenus.GroupName, 2);
-
- //Administration->Language Management
- administration.SetSubItemOrder(LanguageManagementMenuNames.GroupName, 3);
-
- //Administration->Text Template Management
- administration.SetSubItemOrder(TextTemplateManagementMainMenuNames.GroupName, 4);
-
- //Administration->Audit Logs
- administration.SetSubItemOrder(AbpAuditLoggingMainMenuNames.GroupName, 5);
-
- //Administration->Settings
- administration.SetSubItemOrder(SettingManagementMenuNames.GroupName, 6);
-
- return Task.CompletedTask;
-}
-```
-
-Replace LeptonX Lite npm package with LeptonX package in `package.json` file:
-```diff
-- "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "~3.0.3",
-+ "@volo/abp.aspnetcore.mvc.ui.theme.leptonx": "~3.0.3",
-```
-
-### 4. Creating Migrations & Running Application
-
-That's it, you have applied the all related steps to migrate your application from ABP to ABP. Now, you can create a new migration, apply it to your database, and run your application!
-
-To create a new migration, open a terminal in your {{ if DB == "EF" }}`*.EntityFrameworkCore`{{else}}`*.MongoDb`{{end}} project directory, and run the following command:
-
-```bash
-dotnet ef migrations add Migrated_To_ABP_Commercial
-```
-
-Then, to apply the database into your database and seed the initial data, you can run the `*.DbMigrator` project. After it's completed, you can run the `*.Web` project to see your application as working.
-
-> **Note:** If you have an existing database, then creating a new migration and applying it to the database may not happen correctly. At that point, if it's possible you can drop the existing database and create a new one, or you can have a backup of your existing db, and after applying the new migration, you can synchronize the database with the backup.
-
-## Consultancy
-
-If you find the migration process challenging or prefer professional assistance, we offer a [paid consultancy service](https://abp.io/additional-services). Our experienced consultants can help ensure a smooth transition to ABP, addressing any specific needs or challenges your project may encounter. For detailed guidance and support, feel free to [reach out](https://abp.io/contact).
+- The command covers the most common scenarios, but there is still a possibility that it can mess up something in your solution. Therefore, we strongly recommend a version control system (like [Git](https://git-scm.com)) to track what is changed in your solution and revert if needed.
+- The command will not remove your custom codes that may be related with the removed modules listed above. So there may be build errors if you referenced one of those modules. You can clear them manually.
diff --git a/docs/en/images/abp-book.png b/docs/en/images/abp-book.png
index 7fd6c34c90..28a933349c 100644
Binary files a/docs/en/images/abp-book.png and b/docs/en/images/abp-book.png differ
diff --git a/docs/en/images/angular-template-structure-diagram.png b/docs/en/images/angular-template-structure-diagram.png
index 0715a8e2df..dd7a4e5cc7 100644
Binary files a/docs/en/images/angular-template-structure-diagram.png and b/docs/en/images/angular-template-structure-diagram.png differ
diff --git a/docs/en/images/auditlog-object-diagram.png b/docs/en/images/auditlog-object-diagram.png
index f89c110147..cfca7cd46b 100644
Binary files a/docs/en/images/auditlog-object-diagram.png and b/docs/en/images/auditlog-object-diagram.png differ
diff --git a/docs/en/images/deployment-clustered.png b/docs/en/images/deployment-clustered.png
index f640d55957..2697b9e7a1 100644
Binary files a/docs/en/images/deployment-clustered.png and b/docs/en/images/deployment-clustered.png differ
diff --git a/docs/en/images/deployment-single-instance.png b/docs/en/images/deployment-single-instance.png
index 50b904baf8..4224ce53ac 100644
Binary files a/docs/en/images/deployment-single-instance.png and b/docs/en/images/deployment-single-instance.png differ
diff --git a/docs/en/images/docs-referencing.png b/docs/en/images/docs-referencing.png
new file mode 100644
index 0000000000..2bc3f5da3c
Binary files /dev/null and b/docs/en/images/docs-referencing.png differ
diff --git a/docs/en/images/generic-repositories.png b/docs/en/images/generic-repositories.png
index 676ddb7976..6287afc56c 100644
Binary files a/docs/en/images/generic-repositories.png and b/docs/en/images/generic-repositories.png differ
diff --git a/docs/en/images/implementing-domain-driven-design-book.png b/docs/en/images/implementing-domain-driven-design-book.png
index 6568b46f66..15de3f814d 100644
Binary files a/docs/en/images/implementing-domain-driven-design-book.png and b/docs/en/images/implementing-domain-driven-design-book.png differ
diff --git a/docs/en/images/integration-services.png b/docs/en/images/integration-services.png
index 31e95a96d9..edd3a0b517 100644
Binary files a/docs/en/images/integration-services.png and b/docs/en/images/integration-services.png differ
diff --git a/docs/en/images/issuemanagement-module-solution.png b/docs/en/images/issuemanagement-module-solution.png
index 3e01ff1b92..b224045596 100644
Binary files a/docs/en/images/issuemanagement-module-solution.png and b/docs/en/images/issuemanagement-module-solution.png differ
diff --git a/docs/en/images/layered-project-dependencies-blazor-server.png b/docs/en/images/layered-project-dependencies-blazor-server.png
index 8b47243226..747c5e4f0a 100644
Binary files a/docs/en/images/layered-project-dependencies-blazor-server.png and b/docs/en/images/layered-project-dependencies-blazor-server.png differ
diff --git a/docs/en/images/layered-project-dependencies-blazor-wasm.png b/docs/en/images/layered-project-dependencies-blazor-wasm.png
index fc9bb227c5..54678b3c3e 100644
Binary files a/docs/en/images/layered-project-dependencies-blazor-wasm.png and b/docs/en/images/layered-project-dependencies-blazor-wasm.png differ
diff --git a/docs/en/images/layered-project-dependencies-module.png b/docs/en/images/layered-project-dependencies-module.png
index c036cadea6..68dc214ee9 100644
Binary files a/docs/en/images/layered-project-dependencies-module.png and b/docs/en/images/layered-project-dependencies-module.png differ
diff --git a/docs/en/images/layered-project-dependencies.png b/docs/en/images/layered-project-dependencies.png
index 6729c78a75..1d5c4f1195 100644
Binary files a/docs/en/images/layered-project-dependencies.png and b/docs/en/images/layered-project-dependencies.png differ
diff --git a/docs/en/images/module-layers-and-packages.jpg b/docs/en/images/module-layers-and-packages.jpg
deleted file mode 100644
index f71a91eb8d..0000000000
Binary files a/docs/en/images/module-layers-and-packages.jpg and /dev/null differ
diff --git a/docs/en/images/module-layers-and-packages.png b/docs/en/images/module-layers-and-packages.png
new file mode 100644
index 0000000000..0a7a95fc75
Binary files /dev/null and b/docs/en/images/module-layers-and-packages.png differ
diff --git a/docs/en/images/multiple-database-usage.png b/docs/en/images/multiple-database-usage.png
index aa5d7595a7..24655fb746 100644
Binary files a/docs/en/images/multiple-database-usage.png and b/docs/en/images/multiple-database-usage.png differ
diff --git a/docs/en/images/payment-module-flow.png b/docs/en/images/payment-module-flow.png
index befda82b20..a24e530d70 100644
Binary files a/docs/en/images/payment-module-flow.png and b/docs/en/images/payment-module-flow.png differ
diff --git a/docs/en/images/payment-module-subscription-flow.png b/docs/en/images/payment-module-subscription-flow.png
index af345e51ba..080559e5af 100644
Binary files a/docs/en/images/payment-module-subscription-flow.png and b/docs/en/images/payment-module-subscription-flow.png differ
diff --git a/docs/en/images/react-native-navigation-structure.png b/docs/en/images/react-native-navigation-structure.png
index 816b556600..0b499257fc 100644
Binary files a/docs/en/images/react-native-navigation-structure.png and b/docs/en/images/react-native-navigation-structure.png differ
diff --git a/docs/en/images/single-database-usage.png b/docs/en/images/single-database-usage.png
index 4015cd1d75..286c816a50 100644
Binary files a/docs/en/images/single-database-usage.png and b/docs/en/images/single-database-usage.png differ
diff --git a/docs/en/images/studio-upgrade-to-pro.png b/docs/en/images/studio-upgrade-to-pro.png
new file mode 100644
index 0000000000..118e8b41b1
Binary files /dev/null and b/docs/en/images/studio-upgrade-to-pro.png differ
diff --git a/docs/en/images/tiered-solution-applications-authserver.png b/docs/en/images/tiered-solution-applications-authserver.png
index c46cdc2314..1b79af73d0 100644
Binary files a/docs/en/images/tiered-solution-applications-authserver.png and b/docs/en/images/tiered-solution-applications-authserver.png differ
diff --git a/docs/en/images/tiered-solution-applications.png b/docs/en/images/tiered-solution-applications.png
index bad5284819..77eb23752e 100644
Binary files a/docs/en/images/tiered-solution-applications.png and b/docs/en/images/tiered-solution-applications.png differ
diff --git a/docs/en/images/tiered-solution-servers.png b/docs/en/images/tiered-solution-servers.png
index 8585a350bd..77233195d3 100644
Binary files a/docs/en/images/tiered-solution-servers.png and b/docs/en/images/tiered-solution-servers.png differ
diff --git a/docs/en/modules/account/authority-delegation.md b/docs/en/modules/account/authority-delegation.md
index 9a973d65e0..fafe297677 100644
--- a/docs/en/modules/account/authority-delegation.md
+++ b/docs/en/modules/account/authority-delegation.md
@@ -77,6 +77,8 @@ You can click the `Delegate New User` button to delegate a new user:
* You can specify a time range to ensure the delegation is only available within the time range.
* You can make multiple delegates to the same user and set different delegate time ranges.
+> You have to enter the full username to query and delegate a user.
+
> The delegation has three states: `Expired`, `Active`, and `Future`. These states are set automatically by checking the specified time interval.
### My delegated users
@@ -87,4 +89,4 @@ You can see a list of users who delegated you to login on their behalf of them,
You can click the `Login` button to log in to the application as a delegated user and go back to your account by clicking the `Back to my account` icon:
-
\ No newline at end of file
+
diff --git a/docs/en/modules/audit-logging-pro.md b/docs/en/modules/audit-logging-pro.md
index 1719bf51a5..ef609e5422 100644
--- a/docs/en/modules/audit-logging-pro.md
+++ b/docs/en/modules/audit-logging-pro.md
@@ -115,7 +115,7 @@ To see `AbpAuditingOptions` properties, please see its [documentation](../framew
### ExpiredAuditLogDeleterOptions
-`ExpiredAuditLogDeleterOptions` can be configured in the UI layer, within the `ConfigureServices` method of your [module](https://docs.abp.io/en/abp/latest/Module-Development-Basics). Example:
+`ExpiredAuditLogDeleterOptions` can be configured in the UI layer, within the `ConfigureServices` method of your [module](../framework/architecture/modularity/basics.md). Example:
```csharp
Configure(options =>
@@ -241,7 +241,7 @@ You can modify the look and behavior of the module pages by passing the followin
#### Services / Models
-Audit Logging module services and models are generated via `generate-proxy` command of the [ABP CLI](https://docs.abp.io/en/abp/latest/CLI). If you need the module's proxies, you can run the following command in the Angular project directory:
+Audit Logging module services and models are generated via `generate-proxy` command of the [ABP CLI](../cli/index.md). If you need the module's proxies, you can run the following command in the Angular project directory:
```bash
abp generate-proxy --module auditLogging
diff --git a/docs/en/modules/cms-kit-pro/index.md b/docs/en/modules/cms-kit-pro/index.md
index 14bce30381..af3559ec7e 100644
--- a/docs/en/modules/cms-kit-pro/index.md
+++ b/docs/en/modules/cms-kit-pro/index.md
@@ -17,6 +17,7 @@ The following features are provided by the open-source CMS Kit module:
- [**Menu**](../cms-kit/menus.md) system to manage public menus dynamically.
- [**Global resources**](../cms-kit/global-resources.md) system to add global styles and scripts dynamically.
- [**Dynamic widget**](../cms-kit/dynamic-widget.md) system to create dynamic widgets for page and blog posts.
+- [**Marked Item**](../cms-kit/marked-items.md) system to flag favorites or important items with icons or emojis.
The following features are provided by the CMS Kit Pro version:
diff --git a/docs/en/modules/database-tables.md b/docs/en/modules/database-tables.md
index 0fce394470..ad8c66d684 100644
--- a/docs/en/modules/database-tables.md
+++ b/docs/en/modules/database-tables.md
@@ -248,7 +248,7 @@ This table stores the values of the features for different providers. You can us
### FmDirectoryDescriptors
-This table is utilized by the [File Management system](file-management.md) to manage directories by using the [BlobStoring](https://docs.abp.io/en/abp/latest/Blob-Storing) module.
+This table is utilized by the [File Management system](file-management.md) to manage directories by using the [BlobStoring](../framework/infrastructure/blob-storing/index.md) module.
#### Foreign Keys
diff --git a/docs/en/modules/docs.md b/docs/en/modules/docs.md
index 6aaf1f2f0a..6ab4f566c0 100644
--- a/docs/en/modules/docs.md
+++ b/docs/en/modules/docs.md
@@ -666,9 +666,61 @@ See the following examples:
```
```
----
+## Referencing Next & Previous Documents
+The **Docs Module** supports referencing previous and next documents. It's useful if you have a series of documents that are strictly related to each other and need to be followed one after the other.
+To reference the previous and next documents from a document, you should specify the documentation titles and their paths as follows:
+
+```
+
+ ````json
+ //[doc-nav]
+ {
+ "Previous": {
+ "Name": "Overall",
+ "Path": "testing/overall"
+ },
+ "Next": {
+ "Name": "Integration tests",
+ "Path": "testing/integration-tests"
+ }
+ }
+ ````
+
+```
+
+After you specify the next & previous documents, they will appear at the end of the current documentation like in the following figure:
+
+
+
+## Single Project Mode
+
+The **single project mode** allows you to use a single name as a project name in your application. If you are not considering supporting multiple projects with their multiple docs and instead if you have a single project and want to have documentation only for it, it's especially useful for you.
+
+You just need to configure the `DocsUiOptions`, set the single project mode as **enabled** and also define a constant project name:
+
+```csharp
+Configure(options =>
+{
+ options.RoutePrefix = "docs";
+ options.SingleProjectMode.Enable = true;
+ options.SingleProjectMode.ProjectName = "abp";
+});
+```
+
+## Multi Language Mode
+
+The **multi language mode** allows you to show a combobox that lists and shows all documentation languages and configures the related languages in routes.
+
+It's enabled by default and supports multiple languages, but if you are considering only supporting a single language, and don't want to show the language combobox in the sidebar of your docs system, you can configure the `DocsUiOptions` and set the multi language mode support as **false** to disable it:
+
+```csharp
+Configure(options =>
+{
+ options.MultiLanguageMode = false;
+});
+```
## See Also
diff --git a/docs/en/modules/identity.md b/docs/en/modules/identity.md
index b9c19fe198..46c6a671c1 100644
--- a/docs/en/modules/identity.md
+++ b/docs/en/modules/identity.md
@@ -252,7 +252,7 @@ Following custom repositories are defined for this module:
##### Claim type manager
-`IdenityClaimTypeManager` is used to perform some operations for the `IdentityClaimType` aggregate root.
+`IdentityClaimTypeManager` is used to perform some operations for the `IdentityClaimType` aggregate root.
##### Organization unit manager
diff --git a/docs/en/modules/identity/session-management.md b/docs/en/modules/identity/session-management.md
index c68f034c18..e911146081 100644
--- a/docs/en/modules/identity/session-management.md
+++ b/docs/en/modules/identity/session-management.md
@@ -53,4 +53,5 @@ This feature depends on the [Dynamic Claims](https://docs.abp.io/en/abp/latest/D
* The module will remove the session when logging out.
* The `IdentitySessionCleanupBackgroundWorker` will remove the inactive sessions.
* Once a new session has been created, we will remove the other sessions based on the `PreventConcurrentLogin` setting.
-* The `IdentitySessionManager` is used to manage/maintain the sessions. Please use this class instead of directly using the repository.
\ No newline at end of file
+* The `IdentitySessionManager` is used to manage/maintain the sessions. Please use this class instead of directly using the repository.
+* The `UpdateSessionAfterCacheHit(10 times by default)` property of `IdentitySessionCheckerOptions` is used to configure the `IdentitySessionChecker` that will update session in the database when cache hits reach this value. This is to reduce the database update frequency and improve performance.
diff --git a/docs/en/modules/payment.md b/docs/en/modules/payment.md
index c868f7b02a..b3fb6de84b 100644
--- a/docs/en/modules/payment.md
+++ b/docs/en/modules/payment.md
@@ -15,7 +15,7 @@ Payment module is not installed in [the startup templates](../solution-templates
### Using ABP CLI
-ABP CLI allows adding a module to a solution using ```add-module``` command. You can check its [documentation](https://docs.abp.io/en/abp/latest/CLI#add-module) for more information. So, payment module can be added using the command below;
+ABP CLI allows adding a module to a solution using ```add-module``` command. You can check its [documentation](../cli#add-module) for more information. So, payment module can be added using the command below;
```bash
abp add-module Volo.Payment
diff --git a/docs/en/modules/text-template-management.md b/docs/en/modules/text-template-management.md
index 46b3784f5d..9b2235314f 100644
--- a/docs/en/modules/text-template-management.md
+++ b/docs/en/modules/text-template-management.md
@@ -2,7 +2,7 @@
> You must have an ABP Team or a higher license to use this module.
-This module is used to store and edit template contents for [the text templating system](https://docs.abp.io/en/abp/latest/Text-Templating) of the ABP. So, you may need to understand it to better understand the purpose of this module.
+This module is used to store and edit template contents for [the text templating system](../framework/infrastructure/text-templating/index.md) of the ABP. So, you may need to understand it to better understand the purpose of this module.
There are different use cases of the text templating system. For example, [the Account Module](account.md) is using it to define templates for sending emails when it needs to send emails to users (like sending "password reset link" email). This module provides UI to easily edit these email templates.
diff --git a/docs/en/release-info/index.md b/docs/en/release-info/index.md
new file mode 100644
index 0000000000..eb6a4ef602
--- /dev/null
+++ b/docs/en/release-info/index.md
@@ -0,0 +1,9 @@
+## Release Information
+
+* [Release Notes](./release-notes.md)
+* [Migration Guides](./migration-guides/index.md)
+* [Road Map](./road-map.md)
+* [Upgrading](./upgrading.md)
+* [Preview Releases](./previews.md)
+* [Nightly Releases](./nightly-builds.md)
+* [Official Packages](https://abp.io/packages)
\ No newline at end of file
diff --git a/docs/en/release-info/migration-guides/abp-8-2.md b/docs/en/release-info/migration-guides/abp-8-2.md
new file mode 100644
index 0000000000..cd904f052e
--- /dev/null
+++ b/docs/en/release-info/migration-guides/abp-8-2.md
@@ -0,0 +1,63 @@
+# ABP Version 8.2 Migration Guide
+
+This document is a guide for upgrading ABP v8.x solutions to ABP v8.2. There are some changes in this version that may affect your applications, please read it carefully and apply the necessary changes to your application.
+
+## Updated target frameworks to net8.0 for template projects
+
+`TargetFrameworks` of the following template projects are upgraded to **net8.0**:
+
+* `*.Application.Contracts`
+* `*.Domain.Shared`
+* `*.Domain`
+* `*.MongoDB`
+* `*.HttpApi.Client`
+* `*.Host.Shared` (for module template)
+
+Before this version, all of the projects above were targeting multiple frameworks (**netstandard2.0**, **netstandard2.1** and **net8.0**), with this version, we started to only target **net8.0** for these template projects. Note that, all other shared libraries still target multiple frameworks.
+
+> This change should not affect your pre-existing solutions and you don't need to make any changes in your application. See the PR for more info: https://github.com/abpframework/abp/pull/19565
+## Upgraded AutoMapper to 13.0.1
+
+In this version, **AutoMapper** library version upgraded to 13.0.1. See [the release notes of AutoMapper v13.0.1](https://github.com/AutoMapper/AutoMapper/releases/tag/v13.0.1) for more information.
+
+## Added default padding to `.tab-content` class for Basic Theme
+
+In this version, default padding (padding-top: 1.5rem and padding-bottom: 1.5rem) has been added to the tab-content for the Basic Theme. See [#19475](https://github.com/abpframework/abp/pull/19475) for more information.
+
+## Moved members page directory for Blogging Module
+
+With this version on, ABP Framework allows you to use single blog mode, without needing to define a blog and a prefix. With this change, the following namespace changes were done:
+* `Volo.Blogging.Pages.Blog` -> `Volo.Blogging.Pages.Blogs`
+* `Volo.Blogging.Pages.Members` -> `Volo.Blogging.Pages.Blogs.Members` (members folder)
+
+> If you haven't overridden the pages above, then you don't need to make any additional changes. See [#19418](https://github.com/abpframework/abp/pull/19418) for more information.
+## Removed `FlagIcon` property from the `ILanguageInfo`
+
+The `FlagIcon` property has been removed from the `ILanguageInfo` interface since we removed the flag icon library in the earlier versions from all of our themes and none of them using it now.
+
+If the flag icon has been specified while defining the localization languages, then it should be removed:
+
+```diff
+ Configure(options =>
+ {
+- options.Languages.Add(new LanguageInfo("hi", "hi", "Hindi", "in"));
++ options.Languages.Add(new LanguageInfo("hi", "hi", "Hindi"));
+ //...
+ }
+```
+
+## Blazor Full-Stack Web UI
+
+In this version, ABP Framework provides a new UI option called **Blazor Full-Stack WebApp**. We have already created an introduction/migration guide for you to check it: [Migrating to Blazor Web App](abp-8-2-blazor-web-app.md)
+
+> Please read the documentation carefully if you are considering migrating your existing **Blazor** project to **Blazor WebApp**.
+
+## Angular UI
+
+In this version, the Angular UI has been updated to use the Angular version 17.3.0 and Nx version to 19.0.0. See the PR for more information: [#19915](https://github.com/abpframework/abp/pull/19915/)
+
+## Session Management Infrastructure
+
+The **Session Management** feature allows you to prevent concurrent login and manage user sessions.
+
+In this version, a new entity called `IdentitySession` has been added to the framework and you should create a new migration and apply it to your database.
\ No newline at end of file
diff --git a/docs/en/release-info/migration-guides/abp-8-3.md b/docs/en/release-info/migration-guides/abp-8-3.md
index bc726e68d8..50a7f274a4 100644
--- a/docs/en/release-info/migration-guides/abp-8-3.md
+++ b/docs/en/release-info/migration-guides/abp-8-3.md
@@ -49,6 +49,10 @@ However, notice this package is used by the `@abp/aspnetcore.mvc.ui.theme.shared
See the PR for more info: https://github.com/abpframework/abp/pull/19340
+### Angular UI
+
+We wish to formally inform you that ABP version 8.3 has been upgraded to incorporate Angular version 18. Consequently, we recommend migrating your application to [Angular v18](https://angular.dev/update-guide) to ensure compatibility.
+
## PRO
> Please check the **Open-Source (Framework)** section before reading this section. The listed topics might affect your application and you might need to take care of them.
diff --git a/docs/en/release-info/migration-guides/index.md b/docs/en/release-info/migration-guides/index.md
index 7ff07eda10..804b17b376 100644
--- a/docs/en/release-info/migration-guides/index.md
+++ b/docs/en/release-info/migration-guides/index.md
@@ -3,6 +3,7 @@
The following documents explain how to migrate your existing ABP applications. We write migration documents only if you need to take an action while upgrading your solution. Otherwise, you can easily upgrade your solution using the [abp update command](../upgrading.md).
- [8.x to 8.3](abp-8-3.md)
+- [8.1 to 8.2](abp-8-2.md)
- [8.0 to 8.1](abp-8-1.md)
- [7.x to 8.0](abp-8-0.md)
- [7.3 to 7.4](abp-7-4.md)
diff --git a/docs/en/release-info/migration-guides/openiddict-step-by-step.md b/docs/en/release-info/migration-guides/openiddict-step-by-step.md
index e174f0dfb5..04866180ad 100644
--- a/docs/en/release-info/migration-guides/openiddict-step-by-step.md
+++ b/docs/en/release-info/migration-guides/openiddict-step-by-step.md
@@ -9,8 +9,8 @@ On the other hand, Identity Server ends support for the open-source Identity Ser
## Commercial Template
-If you are using a commercial template, please check [Migrating from IdentityServer to OpenIddict for the Commercial Templates](https://docs.abp.io/en/commercial/6.0/migration-guides/openIddict-step-by-step) guide.
-If you are using the microservice template, please check [Migrating the Microservice Template from IdentityServer to OpenIddict](https://docs.abp.io/en/commercial/6.0/migration-guides/openIddict-microservice) guide.
+If you are using a commercial template, please check [Migrating from IdentityServer to OpenIddict for the Commercial Templates](https://abp.io/docs/commercial/6.0/migration-guides/openIddict-step-by-step) guide.
+If you are using the microservice template, please check [Migrating the Microservice Template from IdentityServer to OpenIddict](https://abp.io/docs/commercial/6.0/migration-guides/openIddict-microservice) guide.
## OpenIddict Migration Steps
@@ -258,7 +258,7 @@ for creating the host builder.
## Source code of samples and module
* [Open source tiered & separate auth server application migrate Identity Server to OpenIddict](https://github.com/abpframework/abp-samples/tree/master/Ids2OpenId)
-* [OpenIddict module document](https://docs.abp.io/en/abp/6.0/Modules/OpenIddict)
+* [OpenIddict module document](../../modules/openiddict.md)
* [OpenIddict module source code](https://github.com/abpframework/abp/tree/rel-6.0/modules/openiddict)
## See Also
diff --git a/docs/en/release-info/release-notes.md b/docs/en/release-info/release-notes.md
index 8d9491e2bb..a94ed9d0b8 100644
--- a/docs/en/release-info/release-notes.md
+++ b/docs/en/release-info/release-notes.md
@@ -4,11 +4,20 @@ This document contains **brief release notes** for each release. Release notes o
> If you want to read detailed release posts for each version, please see the [official ABP blog](https://abp.io/blog).
-## 8.2 (2024-05-25)
+## 8.3.0-rc.1 (2024-07-31)
-> This version is currently in preview. The final release date is planned for July, 2024.
+> This version is currently in preview. The final release date is planned for August, 2024.
-See the detailed **[blog post / announcement](https://abp.io/blog/announcing-abp-8-2-release-candidate)** for the v8.2 release.
+See the detailed **[blog post / announcement](https://abp.io/blog/announcing-abp-8-3-release-candidate)** for the v8.3 release.
+
+* CMS Kit: Marked Items & Approvement System for Commenting Feature
+* Enhancements on the Docs Module (Google Translation support & new single project mode)
+* Using DbFunction for generating more precise SQL commands for Global Query Filters
+* CMS Kit (Pro): FAQ System
+
+## 8.2 (2024-06-26)
+
+See the detailed **[blog post / announcement](https://abp.io/blog/announcing-abp-8-2-stable-release)** for the v8.2 release.
* Blazor Full-Stack Web App UI.
* Introducing the `IBlockUiService` for Blazor UI (disables/blocks the page or a part of the page).
@@ -295,7 +304,7 @@ See the detailed **[blog post / announcement](https://abp.io/blog/ABP-Framework-
* Performance improvements (pre-compiling razor pages).
* New **Organization Unit** Management UI for the [Identity Module](https://abp.io/modules/Volo.Identity.Pro) to create hierarchical organization units and manage their members and roles.
* Created **Angular UI** for the [Chat Module](https://abp.io/modules/Volo.Chat).
-* Implemented **Angular UI** for the [Easy CRM](https://docs.abp.io/en/commercial/latest/samples/easy-crm) application.
+* Implemented **Angular UI** for the [Easy CRM](../samples/easy-crm.md) application.
* [ABP Suite](https://abp.io/tools/suite) code generation support for **module development**.
* New [leptontheme.com](http://leptontheme.com/) web site to show the **[Lepton Theme](https://abp.io/themes) components**.
diff --git a/docs/en/release-info/road-map.md b/docs/en/release-info/road-map.md
index 7bba375001..82da0a0b8e 100644
--- a/docs/en/release-info/road-map.md
+++ b/docs/en/release-info/road-map.md
@@ -4,56 +4,119 @@ This document provides a road map, release schedule, and planned features for th
## Next Versions
-### v8.2
-
-The next version will be 8.2 and planned to release the stable 8.2 version in June 2024. We will be mostly working on the following topics:
-
-* ABP Studio Community Edition
-* Blazor Full-Stack UI ([#18289](https://github.com/abpframework/abp/issues/18289))
-* Angular Universal ([#15782](https://github.com/abpframework/abp/issues/15782))
-* Upgrading React Native template to the latest major release 0.72.7 ([#18191](https://github.com/abpframework/abp/issues/18191))
-* Deployment Documents Improvements ([#15034](https://github.com/abpframework/abp/issues/15034))
-* Improvements on the existing features and provide more guides.
-
-See the [8.2 milestone](https://github.com/abpframework/abp/milestone/95) for all the issues we've planned to work on.
+### v9.0
+
+The next version will be 9.0 and planned to release the stable 9.0 version in November 2024. We will be mostly working on the following topics:
+
+* Framework
+ * Upgrading to .NET 9.0
+ * Google Cloud Storage BLOB Provider
+ * Better handling localization resources in a microservice scenario
+ * SSR support for the Angular UI
+ * Upgrading 3rd-party dependencies
+
+* ABP Suite
+ * Multiple navigation properties to the same target entity
+ * Define navigation properties without target string property dependency
+ * Improvements one-to-many scenarios
+ * Access to default code generation templates for customized templates
+
+* ABP Studio
+ * Blazor WebApp UI option for the new startup templates
+ * Execution order (dependency management) for Solution Runner
+ * Automate more details on new service creation for a microservice solution
+ * Support multiple concurrent Kubernetes deployment/integration scenarios
+ * Show the README file when you create a new solution or open an existing solution
+ * Improve ABP Suite code-generation possibilities for microservice solutions
+ * Improve the module installation experience
+ * Auto-install 3rd-party dependencies
+ * Better handle long log files
+ * Allow to directly create new solutions with ABP's RC (Release Candidate) versions
+ * Support Intel processors for Mac computers, support ARM chipset for Windows and support Linux OS
+ * Improve client proxy generation experience
+
+* Application modules
+ * Account module: Support mixed social/local login scenarios
+ * UI/UX improvements on existing application modules
+
+* New tutorials
+ * Modular monolith development
+ * Microservice development
## Backlog Items
-The *Next Versions* section above shows the main focus of the planned versions. However, in each release, we add new features to the core framework and the [application modules](../modules).
-
-Here is a list of major items in the backlog we are considering working on in the next versions.
+The *Next Versions* section above shows the main focus of the planned versions. However, in each release, we add new features to the ABP platform.
### Framework
-* [#86](https://github.com/abpframework/abp/issues/86) / GrapQL Integration
+The ABP framework is [open source](https://github.com/abpframework/abp) and free for everyone. You can see its [public backlog](https://github.com/abpframework/abp/milestone/2). Here, are some of the important features you can expect from next versions:
+
* [#236](https://github.com/abpframework/abp/issues/236) / Resource based authorization system
-* [#2882](https://github.com/abpframework/abp/issues/2882) / Providing a gRPC integration infrastructure (while it is [already possible](https://github.com/abpframework/abp-samples/tree/master/GrpcDemo) to create or consume gRPC endpoints for your application, we plan to create endpoints for the [standard application modules](../modules))
+* [#2882](https://github.com/abpframework/abp/issues/2882) / Providing a gRPC integration infrastructure (while it is [already possible](https://github.com/abpframework/abp-samples/tree/master/GrpcDemo) to create or consume gRPC endpoints for your application, we plan to create endpoints for the [standard application modules](../modules/index.md))
* [#57](https://github.com/abpframework/abp/issues/57) / Built-in CQRS infrastructure
+* [#58](https://github.com/abpframework/abp/issues/58) / Content localization system (multilingual entities)
* [#4223](https://github.com/abpframework/abp/issues/4223) / WebHook system
* [#162](https://github.com/abpframework/abp/issues/162) / Azure ElasticDB Integration for multitenancy
* [#2296](https://github.com/abpframework/abp/issues/2296) / Feature toggling infrastructure
-* [#16342](https://github.com/abpframework/abp/issues/16342) / CMS Kit: Meta information for SEO
-* [#16260](https://github.com/abpframework/abp/issues/16260) / GCP Blob Storage Provider
* [#15932](https://github.com/abpframework/abp/issues/15932) / Introduce ABP Diagnostics Module
-* [#16756](https://github.com/abpframework/abp/issues/16756) / Blob Storing - Provider configuration UI
* [#16744](https://github.com/abpframework/abp/issues/16744) / State Management API
-
-### Modules / Themes
-
-* New styles, components and features for the LeptonX theme.
-* Payment module: Invoice system.
-* Dynamic dashboard system.
-* User guiding module.
-* gRPC integration and implementation for all the pre-built modules.
-* Chat Module: Deleting messages & conversations
-
-### Tooling
-
-* Suite: File, DateOnly and TimeOnly types
-* Suite: Export child/detail entity records
-* CMS Kit features, including FAQ, spam protection, social media feeds, multi-language support, and so on.
-
-You can always check the milestone planning and the prioritized backlog issues on [the GitHub repository](https://github.com/abpframework/abp/milestones) for a detailed road map. The backlog items are subject to change. We are adding new items and changing priorities based on the community feedbacks and goals of the project.
+* [#17815](https://github.com/abpframework/abp/issues/17815) / Operation Rate Limiting
+
+### Application Modules / UI Themes
+
+ABP Platform provides many (free and commercial) [pre-built application modules](../modules/index.md) and modern [UI themes](../ui-themes/index.md). In every release, many enhancements and bugfixes are already done on the existing modules. In addition, here some of the planned features for next versions:
+
+* LeptonX theme: New layouts, styles and components
+* CMS Kit module: Meta information for SEO, media gallery, RSS feed, content versioning, social media streams
+* Identity module: Idle session warning
+* Payment module: Invoice system
+* New module: User notification
+* New module: Dynamic dashboard
+* New module: User guiding
+* New module: Keycloak integration
+
+### ABP Studio
+
+[ABP Studio](../studio/index.md) is a cross-platform desktop application for ABP and .NET developers to simplify and automate daily tasks of developers. It has a community (free) edition as well as commercial editions. It is released and versioned independently from the ABP platform and frequently released.
+
+Here, are some of the important planned features for next ABP Studio versions:
+
+* Theme builder for the LeptonX theme
+* Analyze user solutions to explore entities, domain services, application services, pages and other fundamental objects.
+* Add status bar to the built-in browser to easily see errors
+* Swagger authentication support for the built-in browser
+* Show related requests/events (traces) together in the solution runner panel
+* Integrate common tool dashboards into ABP Studio (such a Garana, Redis, RabbitMQ, Kibana, etc)
+* Built-in command terminal
+* Automate all steps of new service creation for microservice solutions
+* Container application type support for Solution Runner (to individually control docker dependencies)
+* More options while creating new solutions
+* Downloading samples in ABP studio
+* Built-in ABP documentation experience
+* Auto-execute terminal commands in markdown files
+* Compare changed on the startup templates when a new ABP version is published
+* Remove unused projects while downloading source code of an existing module
+* Testing/hosting applications for module templates
+* Easily explore all module and package dependencies of a large solution
+* Built-in deployment options
+* Rapid application development features
+* ABP support integration
+
+### ABP Suite
+
+[ABP Suite](../suite/index.md) is a GUI application that is mainly used to generate CRUD style pages in your application. You define your entity and it can generate all the code from the database layer to the UI layer. The generated code is clean and a perfect starting point to implement your custom requirements on top of it.
+
+Here, are some of the important planned features for next ABP Suite versions:
+
+* Handle image properties for entities
+* Allow to define extra properties for DTOs those are not a part of the entity
+* Allow to create pages instead of modals for CRUD page generation
+* View-only (detail view) modal/page for an entity
+* Export child/detail entity records as a part of export operation for a main (master) entity
+* Allow to accept attachments (files) for an entity
+* Allow to add custom entity actions for an entity
+* Allow to inherit from an existing entity class
+* Custom form layouts on CRUD page generation
## Feature Requests
diff --git a/docs/en/samples/index.md b/docs/en/samples/index.md
index 5adf0ac6a8..619eb81484 100644
--- a/docs/en/samples/index.md
+++ b/docs/en/samples/index.md
@@ -27,13 +27,13 @@ A simple CRUD application to show basic principles of developing an application
The following samples uses only the open source (free) modules.
* **Book Store: Razor Pages UI & Entity Framework Core**
- * [Tutorial](https://docs.abp.io/en/abp/latest/Tutorials/Part-1?UI=MVC&DB=EF)
+ * [Tutorial](../tutorials/book-store/part-01.md?UI=MVC&DB=EF)
* [Source code](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore)
* **Book Store: Blazor UI & Entity Framework Core**
- * [Tutorial](https://docs.abp.io/en/abp/latest/Tutorials/Part-1?UI=Blazor&DB=EF)
+ * [Tutorial](../tutorials/book-store/part-01.md?UI=Blazor&DB=EF)
* [Source code](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore)
* **Book Store: Angular UI & MongoDB**
- * [Tutorial](https://docs.abp.io/en/abp/latest/Tutorials/Part-1?UI=NG&DB=Mongo)
+ * [Tutorial](../tutorials/book-store/part-01.md?UI=NG&DB=Mongo)
* [Source code](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb)
* **Book Store: Modular application (Razor Pages UI & EF Core)**
* [Source code](https://github.com/abpframework/abp-samples/tree/master/BookStore-Modular)
@@ -43,13 +43,13 @@ The following samples uses only the open source (free) modules.
The following samples uses the pro modules.
- **Book Store: Razor Pages (MVC) UI & Entity Framework Core**
- - [Tutorial](https://docs.abp.io/en/commercial/latest/tutorials/book-store/part-1?UI=MVC&DB=EF)
+ - [Tutorial](../tutorials/book-store/part-01.md?UI=MVC&DB=EF)
- [Download the source code](https://abp.io/Account/Login?returnUrl=/api/download/samples/bookstore-mvc-ef)
- **Book Store: Blazor UI & Entity Framework Core**
- - [Tutorial](https://docs.abp.io/en/commercial/latest/tutorials/book-store/part-1?UI=Blazor&DB=EF)
+ - [Tutorial](../tutorials/book-store/part-01.md?UI=Blazor&DB=EF)
- [Download the source code](https://abp.io/Account/Login?returnUrl=/api/download/samples/bookstore-blazor-efcore)
- **Book Store: Angular UI & MongoDB**
- - [Tutorial](https://docs.abp.io/en/commercial/latest/tutorials/book-store/part-1?UI=NG&DB=Mongo)
+ - [Tutorial](../tutorials/book-store/part-01.md?UI=NG&DB=Mongo)
- [Download the source code](https://abp.io/Account/Login?returnUrl=/api/download/samples/bookstore-angular-mongodb)
## Other Samples
diff --git a/docs/en/solution-templates/application-module/index.md b/docs/en/solution-templates/application-module/index.md
index f8e2d7adb6..60f53a7018 100644
--- a/docs/en/solution-templates/application-module/index.md
+++ b/docs/en/solution-templates/application-module/index.md
@@ -15,17 +15,25 @@ dotnet tool install -g Volo.Abp.Studio.Cli
Then use the `abp new` command in an empty folder to create a new solution:
```bash
-abp new Acme.IssueManagement -t module
+abp new-module Acme.BookStore
```
- `Acme.IssueManagement` is the solution name, like *YourCompany.YourProduct*. You can use single level, two-levels or three-levels naming.
-### Without User Interface
+### Specifying the User Interface
-The template comes with MVC, Blazor & Angular user interfaces by default. You can use `--no-ui` option to not include any of these UI layers.
+The template comes without a user interface by default. You can use the `mvc`, `blazor`, `blazor-server`, or `angular` options to include any of these UI layers. You can also combine them. For example, you can use `mvc,angular` to include both MVC and Angular UI. To create a module without a user interface, don't specify any value.
````bash
-abp new Acme.IssueManagement -t module --no-ui
+abp new-module Acme.IssueManagement -u mvc,angular
+````
+
+#### Specifying the Database Provider
+
+The template comes with the *EntityFrameworkCore* database provider by default. You can use the `ef` or `mongodb` options to include either of these providers. You can also combine them. For example, you can use `ef,mongodb` to include both EntityFrameworkCore and MongoDB.
+
+````bash
+abp new-module Acme.IssueManagement -d ef,mongodb
````
## Solution Structure
@@ -34,11 +42,10 @@ Based on the options you've specified, you will get a slightly different solutio

-Projects are organized as `src`, `test` and `host` folders:
+Projects are organized as `src` and`test` folders:
* `src` folder contains the actual module which is layered based on [DDD](../../framework/architecture/domain-driven-design) principles.
* `test` folder contains unit & integration tests.
-* `host` folder contains applications with different configurations to demonstrate how to host the module in an application. These are not a part of the module, but useful on development.
The diagram below shows the layers & project dependencies of the module:
@@ -105,8 +112,6 @@ The solution has multiple test projects, one for each layer:
- `.MongoDB.Tests` is used to test MongoDB configuration and custom repositories.
- `.TestBase` is a base (shared) project for all tests.
-In addition, `.HttpApi.Client.ConsoleTestApp` is a console application (not an automated test project) which demonstrate the usage of HTTP APIs from a Dotnet application.
-
Test projects are prepared for integration testing;
- It is fully integrated to ABP and all services in your application.
@@ -117,49 +122,9 @@ You can still create unit tests for your classes which will be harder to write (
> Domain & Application tests are using EF Core. If you remove EF Core integration or you want to use MongoDB for testing these layers, you should manually change project references & module dependencies.
-### Host Projects
-
-The solution has a few host applications to run your module. Host applications are used to run your module in a fully configured application. It is useful on development. Host applications includes some other modules in addition to the module being developed:
-
-Host applications support two types of scenarios.
-
-#### Single (Unified) Application Scenario
-
-If your module has a UI, then `.Web.Unified` application is used to host the UI and API on a single point. It has its own `appsettings.json` file (that includes the database connection string) and EF Core database migrations.
-
-For the `.Web.Unified` application, there is a single database, named `YourProjectName_Unified` (like *IssueManagement_Unified* for this sample).
-
-> If you've selected the `--no-ui` option, this project will not be in your solution.
-
-##### How to Run?
-
-Set `host/YourProjectName.Web.Unified` as the startup project, run `Update-Database` command for the EF Core from Package Manager Console and run your application. Default username is `admin` and password is `1q2w3E*`.
-
-#### Separated Deployment & Databases Scenario
-
-In this scenario, there are three applications;
-
-* `.AuthServer` application is an authentication server used by other applications. It has its own `appsettings.json` that contains database connection and other configurations.
-* `.HttpApi.Host` hosts the HTTP API of the module. It has its own `appsettings.json` that contains database connections and other configurations.
-* `.Web.Host` host the UI of the module. This project contains an `appsettings.json` file, but it does not have a connection string because it never connects to the database. Instead, it mainly contains endpoint of the remote API server and the authentication server.
-
-The diagram below shows the relation of the applications:
-
-
-
-`.Web.Host` project uses OpenId Connect Authentication to get identity and access tokens for the current user from the `.AuthServer`. Then uses the access token to call the `.HttpApi.Host`. HTTP API server uses bearer token authentication to obtain claims from the access token to authorize the current user.
-
-##### Pre-requirements
-
-* [Redis](https://redis.io/): The applications use Redis as as distributed cache. So, you need to have Redis installed & running.
-
-##### How to Run?
-
-You should run the application with the given order:
+### Host Project
-- First, run the `.AuthServer` since other applications depends on it.
-- Then run the `.HttpApi.Host` since it is used by the `.Web.Host` application.
-- Finally, you can run the `.Web.Host` project and login to the application using `admin` as the username and `1q2w3E*` as the password.
+The solution doesn't have a host application to run your module. However, you can create a [single-layer](../../get-started/single-layer-web-application.md) or [layered](../../get-started/layered-web-application.md) application and [import](../../studio/solution-explorer.md#imports) the created module into the host application.
## UI
@@ -172,7 +137,7 @@ The solution will have a folder called `angular` in it. This is where the Angula
* _angular/projects/issue-management_ folder contains the Angular module project.
* _angular/projects/dev-app_ folder contains a development application that runs your module.
-The server-side is similar to the solution described above. `*.HttpApi.Host` project serves the API and the `Angular` demo application consumes it. You will not need to run the `.Web.Host` project though.
+The server-side is similar to the solution described above. After you create a *Host* application, the API and the `Angular` demo application consume it.
#### How to Run the Angular Development App
@@ -195,9 +160,10 @@ The module you will develop depends on two of these ABP packages: _@abp/ng.core_
Once all dependencies are installed, follow the steps below to serve your development app:
-1. Make sure `.AuthServer` and `*.HttpApi.Host` projects are up and running.
-2. Open your terminal at the root folder, i.e. `angular`.
-3. Run `yarn start` or `npm start`.
+1. Make sure *Host* application project is up and running.
+2. Change the `environment.ts` file in the `angular/projects/dev-app/src/environments` folder to match your *Host* application URL.
+3. Open your terminal at the root folder, i.e. `angular`.
+4. Run `yarn start` or `npm start`.

diff --git a/docs/en/solution-templates/microservice/adding-new-api-gateways.md b/docs/en/solution-templates/microservice/adding-new-api-gateways.md
index a026f6e884..415452a3bd 100644
--- a/docs/en/solution-templates/microservice/adding-new-api-gateways.md
+++ b/docs/en/solution-templates/microservice/adding-new-api-gateways.md
@@ -155,12 +155,6 @@ We should configure the AuthServer for **CORS** and **RedirectAllowedUrls**.
}
```
-### Add the New Gateway to the Solution Runner
-
-We should add the new gateway to the solution runner [profile](../../studio/running-applications.md#profile) for running applications in the ABP Studio. You can follow the steps explained in the [Solution Runner](../../studio/running-applications.md#c-application) document to add the new gateway to the solution runner profile. Afterwards, you can start the new gateway by selecting it in the solution runner.
-
-
-
## Creating Helm Chart for the New Gateway
If you want to deploy the new gateway to Kubernetes, you should create a Helm chart for the new application.
diff --git a/docs/en/solution-templates/microservice/adding-new-applications.md b/docs/en/solution-templates/microservice/adding-new-applications.md
index 7e3a53cbae..352b18f763 100644
--- a/docs/en/solution-templates/microservice/adding-new-applications.md
+++ b/docs/en/solution-templates/microservice/adding-new-applications.md
@@ -120,12 +120,6 @@ Add the new application URL to the `appsettings.json` file in the `Identity` ser
}
```
-### Add the New Application to the Solution Runner
-
-We should add the new application to the solution runner [profile](../../studio/running-applications.md#profile) for running applications in the ABP Studio. You can follow the steps explained in the [Solution Runner](../../studio/running-applications.md#c-application) document to add the new application to the solution runner profile. Afterwards, you can start the new application by selecting it in the solution runner.
-
-
-
## Docker Configuration for Prometheus
If you want to monitor the new application with Prometheus when you debug the solution, you should add the new application to the `prometheus.yml` file in the `etc/docker/prometheus` folder. You can copy the configurations from the existing applications and modify them according to the new application. Below is an example of the `prometheus.yml` file for the `WebPublic` application.
diff --git a/docs/en/solution-templates/microservice/adding-new-microservices.md b/docs/en/solution-templates/microservice/adding-new-microservices.md
index 2ff864cd0d..4a82ee6a55 100644
--- a/docs/en/solution-templates/microservice/adding-new-microservices.md
+++ b/docs/en/solution-templates/microservice/adding-new-microservices.md
@@ -16,6 +16,8 @@ This document explains how to add new microservices to the microservice solution
Additionally, there is a folder named `_templates` in the root directory. This folder contains templates you can use to create new microservices, API gateways, and applications. These templates can be customized according to your needs.
+
+
## Adding a New Microservice
To add a new microservice to the solution, you can use the `service_nolayers` template. This template creates a new ASP.NET Core application with the necessary configurations and dependencies. Follow the steps below to add a new microservice:
@@ -39,14 +41,12 @@ The new microservice is created and added to the solution. You can see the new m
### Configuring the appsettings.json
The new microservice is created with the necessary configurations and dependencies. We should configure several sections by modifying the `appsettings.json` file:
- * Set the `Administration` & `AbpBlobStoring` connection strings.
- * Set the correct `StringEncryption` key.
* Set the `CorsOrigins` to allow the web gateway to access the microservice.
* Set the `AuthServer` configurations to enable the microservice to authenticate and authorize users.
You can copy the configurations from the existing microservices and modify them according to the new microservice. Below is an example of the `appsettings.json` file for the `ProductService` microservice.
-```json
+```diff
{
"ConnectionStrings": {
"Administration": "Server=localhost,1434; User Id=sa; Password=myPassw@rd; Database=Bookstore_Administration; TrustServerCertificate=true",
@@ -54,15 +54,18 @@ You can copy the configurations from the existing microservices and modify them
"ProductService": "Server=localhost,1434; User Id=sa; Password=myPassw@rd; Database=Bookstore_ProductService; TrustServerCertificate=true"
},
"App": {
- "CorsOrigins": "http://localhost:44333",
+- "CorsOrigins": "http://localhost:webgateway_port",
++ "CorsOrigins": "http://localhost:44333",
"EnablePII": false
},
"Swagger": {
"IsEnabled": true
},
"AuthServer": {
- "Authority": "http://localhost:44387",
- "MetaAddress": "http://localhost:44387",
+- "Authority": "http://localhost:authserver_port",
+- "MetaAddress": "http://localhost:authserver_port",
++ "Authority": "http://localhost:44387",
++ "MetaAddress": "http://localhost:44387",
"RequireHttpsMetadata": "false",
"SwaggerClientId": "SwaggerTestUI",
"Audience": "ProductService"
@@ -93,24 +96,24 @@ You can copy the configurations from the existing microservices and modify them
"Url": "http://localhost:9200"
},
"StringEncryption": {
- "DefaultPassPhrase": "PDAWjbshpwlOwNB6"
+ "DefaultPassPhrase": "PDAWjbshpwlOwNB6"
}
}
```
### Configuring the OpenId Options
-We should configure the OpenId options by modifying the `OpenIddictDataSeeder` in the `Identity` service. Below is an example of the `OpenIddictDataSeeder` options for the `ProductService` microservice.
+We should configure the OpenId options by modifying the `OpenIddictDataSeeder` in the `Identity` service. Below is an example of the `OpenIddictDataSeeder` options for the `Product` microservice.
Create API scopes and add the required API scope for Swagger clients in the `CreateApiScopesAsync` and `CreateSwaggerClientsAsync` methods in the `OpenIddictDataSeeder` class.
-```csharp
+```diff
private async Task CreateApiScopesAsync()
{
await CreateScopesAsync("AuthServer");
await CreateScopesAsync("IdentityService");
await CreateScopesAsync("AdministrationService");
- await CreateScopesAsync("ProductService"); // new service
++ await CreateScopesAsync("ProductService");
}
private async Task CreateSwaggerClientsAsync()
@@ -120,21 +123,21 @@ private async Task CreateSwaggerClientsAsync()
"AuthServer",
"IdentityService",
"AdministrationService",
- "ProductService" // new service
++ "ProductService"
});
}
```
Add the redirect URL for the new service in the `CreateSwaggerClientAsync` method.
-```csharp
+```diff
private async Task CreateSwaggerClientAsync(string clientId, string[] scopes)
{
...
...
...
var administrationServiceRootUrl = _configuration["OpenIddict:Resources:AdministrationService:RootUrl"]!.TrimEnd('/');
- var productServiceServiceRootUrl = _configuration["OpenIddict:Resources:ProductService:RootUrl"]!.TrimEnd('/'); // new service
++ var productServiceRootUrl = _configuration["OpenIddict:Resources:ProductService:RootUrl"]!.TrimEnd('/');
await CreateOrUpdateApplicationAsync(
name: clientId,
@@ -152,15 +155,15 @@ private async Task CreateSwaggerClientAsync(string clientId, string[] scopes)
$"{authServerRootUrl}/swagger/oauth2-redirect.html",
$"{identityServiceRootUrl}/swagger/oauth2-redirect.html",
$"{administrationServiceRootUrl}/swagger/oauth2-redirect.html",
- $"{productServiceServiceRootUrl}/swagger/oauth2-redirect.html", // new service
++ $"{productServiceRootUrl}/swagger/oauth2-redirect.html"
}
);
}
```
-Add the allowed scope for the web (front-end) application(s) in the `CreateClientsAsync` method. You might have different clients for different UI applications such as web, Angular, React, etc. Ensure you add the new service to the allowed scopes of these clients.
+Add the allowed scope for the web (front-end) application(s) in the `CreateClientsAsync` method. You might have different clients for different UI applications such as web, Angular, React, etc. Ensure you add the new microservice to the allowed scopes of these clients.
-```csharp
+```diff
private async Task CreateClientsAsync()
{
var commonScopes = new List
@@ -192,7 +195,7 @@ private async Task CreateClientsAsync()
"SaasService",
"AuditLoggingService",
"AdministrationService",
- "ProductService" // new service
++ "ProductService"
}).ToList(),
redirectUris: new List { $"{webClientRootUrl}signin-oidc" },
postLogoutRedirectUris: new List() { $"{webClientRootUrl}signout-callback-oidc" },
@@ -202,110 +205,130 @@ private async Task CreateClientsAsync()
}
```
-Add the new service URL to the `appsettings.json` file in the `Identity` service.
+Add the new service URL to the `appsettings.json` file in the `Identity` microservice. In this example we're gonna edit the *Acme.Bookstore.IdentityService* project `appsettings.json` file.
-```json
+```diff
"OpenIddict": {
"Applications": {
...
},
"Resources": {
...
- "ProductService": {
- "RootUrl": "http://localhost:44350"
- }
++ "ProductService": {
++ "RootUrl": "http://localhost:44350"
++ }
}
}
```
### Configuring the AuthServer
-We should configure the AuthServer for **CORS** and **RedirectAllowedUrls**.
+We should configure the *AuthServer* application `appsettings.json` file for the **CorsOrigins** and **RedirectAllowedUrls** sections.
-```json
+```diff
+...
"App": {
"SelfUrl": "http://localhost:***",
- "CorsOrigins": "...... ,http://localhost:44350",
+- "CorsOrigins": "http://localhost:44358,..",
++ "CorsOrigins": "http://localhost:44358,..,http://localhost:44350",
"EnablePII": false,
- "RedirectAllowedUrls": "...... ,http://localhost:44350"
-}
+- "RedirectAllowedUrls": "http://localhost:44358,..",
++ "RedirectAllowedUrls": "http://localhost:44358,..,http://localhost:44350"
+},
+...
```
### Configuring the API Gateway
-We should configure the API Gateway to allow the web gateway to access the new microservice. First, we should add the **ProductService** sections to the `appsettings.json` file in the `WebGateway` project.
+We should configure the API Gateway to access the new microservice. First, add the **Product** sections to the `appsettings.json` file in the `WebGateway` project. In this example we're gonna edit the *Acme.Bookstore.WebGateway* project `appsettings.json` file.
-```json
+```diff
"ReverseProxy": {
"Routes": {
...
- "ProductService": {
- "ClusterId": "ProductService",
- "Match": {
- "Path": "/api/productservice/{**catch-all}"
- }
- },
- "ProductServiceSwagger": {
- "ClusterId": "ProductService",
- "Match": {
- "Path": "/swagger-json/ProductService/swagger/v1/swagger.json"
- },
- "Transforms": [
- { "PathRemovePrefix": "/swagger-json/ProductService" }
- ]
- }
++ "Product": {
++ "ClusterId": "Product",
++ "Match": {
++ "Path": "/api/product/{**catch-all}"
++ }
++ },
++ "ProductSwagger": {
++ "ClusterId": "Product",
++ "Match": {
++ "Path": "/swagger-json/Product/swagger/v1/swagger.json"
++ },
++ "Transforms": [
++ { "PathRemovePrefix": "/swagger-json/Product" }
++ ]
++ }
},
"Clusters": {
...
- "ProductService": {
- "Destinations": {
- "ProductService": {
- "Address": "http://localhost:44350/"
- }
- }
- }
++ "Product": {
++ "Destinations": {
++ "Product": {
++ "Address": "http://localhost:44350/"
++ }
++ }
++ }
}
}
```
-Afterwards, open the `ProjectNameWebGatewayModule` class in the `WebGateway` and add the `ProductService` to the `ConfigureSwaggerUI` method.
+Afterwards, open the `ProjectNameWebGatewayModule` class in the `WebGateway` project and add the `ProductService` to the `ConfigureSwaggerUI` method. In this example we're gonna edit the `BookstoreWebGatewayModule` file.
-```csharp
-options.OAuthScopes(
- "AdministrationService",
- "AuthServer",
- "IdentityService",
- "ProductService" // new service
-);
+```diff
+private static void ConfigureSwaggerUI(
+ IProxyConfig proxyConfig,
+ SwaggerUIOptions options,
+ IConfiguration configuration)
+{
+ foreach (var cluster in proxyConfig.Clusters)
+ {
+ options.SwaggerEndpoint($"/swagger-json/{cluster.ClusterId}/swagger/v1/swagger.json", $"{cluster.ClusterId} API");
+ }
+
+ options.OAuthClientId(configuration["AuthServer:SwaggerClientId"]);
+ options.OAuthScopes(
+ "AdministrationService",
+ "AuthServer",
+ ...,
++ "ProductService"
+ );
+}
```
### Configuring the UI Services
-We should configure the UI application(s) to allow the new microservice to access through the web gateway. To do this, we should add the new service scope to the `ConfigureAuthentication` method in the `ProjectName...Module` class in the `Web` or `Blazor` application.
+We should configure the UI application(s) to allow the new microservice to access through the web gateway. To do this, we should add the new microservice scope to the `ConfigureAuthentication` method in the `ProjectName...Module` class in the `Web` or `Blazor` application. In this example we're gonna edit the `BookstoreWebModule` file.
-```csharp
-context.Services.AddAuthentication(options =>
-{
- options.DefaultScheme = "Cookies";
- options.DefaultChallengeScheme = "oidc";
-})
-.AddCookie("Cookies", options =>
+```diff
+private void ConfigureAuthentication(ServiceConfigurationContext context, IConfiguration configuration)
{
- options.ExpireTimeSpan = TimeSpan.FromDays(365);
-})
-.AddAbpOpenIdConnect("oidc", options =>
-{
- ...
- options.Scope.Add("AuthServer");
- options.Scope.Add("IdentityService");
- options.Scope.Add("AdministrationService");
- options.Scope.Add("ProductService"); // new servie
-});
+ context.Services.AddAuthentication(options =>
+ {
+ options.DefaultScheme = "Cookies";
+ options.DefaultChallengeScheme = "oidc";
+ })
+ .AddCookie("Cookies", options =>
+ {
+ options.ExpireTimeSpan = TimeSpan.FromDays(365);
+ })
+ .AddAbpOpenIdConnect("oidc", options =>
+ {
+ ...
+ options.Scope.Add("AuthServer");
+ options.Scope.Add("IdentityService");
+ options.Scope.Add("AdministrationService");
++ options.Scope.Add("ProductService");
+ });
+ ...
+}
```
Similarly, if you have an Angular application, you should add the new service scope to the `oAuthConfig` in `environment.ts`:
-```typescript
+```diff
const baseUrl = 'http://localhost:4200';
const oAuthConfig = {
@@ -313,69 +336,83 @@ const oAuthConfig = {
redirectUri: baseUrl,
clientId: 'Angular',
responseType: 'code',
- scope: 'openid profile email roles AuthServer IdentityService AdministrationService ProductService', // new service
+- scope: 'openid profile email roles AuthServer IdentityService AdministrationService',
++ scope: 'openid profile email roles AuthServer IdentityService AdministrationService ProductService',
requireHttps: false
};
```
-### Add the New Microservice to the Solution Runner
-
-We should add the new microservice to the solution runner [profile](../../studio/running-applications.md#profile) for running applications in the ABP Studio. You can follow the steps explained in the [Solution Runner](../../studio/running-applications.md#c-application) document to add the new microservice to the solution runner profile. Afterwards, you can start the new microservice by selecting it in the solution runner.
-
-
-
## Docker Configuration for Prometheus
-If you want to monitor the new microservice with Prometheus when you debug the solution, you should add the new microservice to the `prometheus.yml` file in the `etc/docker/prometheus` folder. You can copy the configurations from the existing microservices and modify them according to the new microservice. Below is an example of the `prometheus.yml` file for the `ProductService` microservice.
+If you want to monitor the new microservice with Prometheus when you debug the solution, you should add the new microservice to the `prometheus.yml` file in the `etc/docker/prometheus` folder. You can copy the configurations from the existing microservices and modify them according to the new microservice. Below is an example of the `prometheus.yml` file for the `Product` microservice.
-```yml
- - job_name: 'product'
+```diff
+ - job_name: 'authserver'
scheme: http
metrics_path: 'metrics'
static_configs:
- - targets: ['host.docker.internal:44350']
+ - targets: ['host.docker.internal:44398']
+ ...
++ - job_name: 'product'
++ scheme: http
++ metrics_path: 'metrics'
++ static_configs:
++ - targets: ['host.docker.internal:44350']
```
## Creating Helm Chart for the New Microservice
If you want to deploy the new microservice to Kubernetes, you should create a Helm chart for the new microservice.
-First, we need to add the new microservice to the `build-all-images.ps1` script in the `etc/helm` folder. You can copy the configurations from the existing microservices and modify them according to the new microservice. Below is an example of the `build-all-images.ps1` script for the `ProductService` microservice.
+First, we need to add the new microservice to the `build-all-images.ps1` script in the `etc/helm` folder. You can copy the configurations from the existing microservices and modify them according to the new microservice. Below is an example of the `build-all-images.ps1` script for the `Product` microservice.
-```powershell
-./build-image.ps1 -ProjectPath "../../services/product/Acme.Bookstore.ProductService/Acme.Bookstore.ProductService.csproj" -ImageName bookstore/productservice
+```diff
+...
+ ./build-image.ps1 -ProjectPath "../../apps/auth-server/Acme.Bookstore.AuthServer/Acme.Bookstore.AuthServer.csproj" -ImageName bookstore/authserver
++ ./build-image.ps1 -ProjectPath "../../services/product/Acme.Bookstore.ProductService/Acme.Bookstore.ProductService.csproj" -ImageName bookstore/product
```
-Then, we need to add the connection string to the `values.projectname-local.yaml` file in the `etc/helm/projectname` folder. Below is an example of the `values.bookstore-local.yaml` file for the `ProductService` microservice.
+Then, we need to add the connection string to the `values.projectname-local.yaml` file in the `etc/helm/projectname` folder. Below is an example of the `values.bookstore-local.yaml` file for the `Product` microservice.
-```yaml
+```diff
global:
...
connectionStrings:
...
- productService: "Server=[RELEASE_NAME]-sqlserver,1433; Database=Bookstore_ProductService; User Id=sa; Password=myPassw@rd; TrustServerCertificate=True"
++ product: "Server=[RELEASE_NAME]-sqlserver,1433; Database=Bookstore_ProductService; User Id=sa; Password=myPassw@rd; TrustServerCertificate=True"
```
-Afterwards, we need to create a new Helm chart for the new microservice. You can copy the configurations from the existing microservices and modify them according to the new microservice. Below is an example of the `productservice` Helm chart for the `ProductService` microservice.
+Afterwards, we need to create a new Helm chart for the new microservice. You can copy the configurations from the existing microservices and modify them according to the new microservice. Below is an example of the `product` Helm chart for the `Product` microservice.
+
+Product microservice `values.yaml` file.
{%{
```yaml
-# values.yaml
image:
- repository: "bookstore/productservice"
+ repository: "bookstore/product"
tag: "latest"
pullPolicy: IfNotPresent
swagger:
isEnabled: "true"
+```
+}%}
+
+Product microservice `Chart.yaml` file.
-# Chart.yaml
+{%{
+```yaml
apiVersion: v2
-name: productservice
+name: product
version: 1.0.0
appVersion: "1.0"
description: Bookstore Product Service
+```
+}%}
-# product.yaml
+Product microservice `product.yaml` file.
+
+{%{
+```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
@@ -404,10 +441,15 @@ spec:
- name: "ConnectionStrings__AbpBlobStoring"
value: "{{ .Values.global.connectionStrings.blobStoring | replace "[RELEASE_NAME]" .Release.Name }}"
- name: "ConnectionStrings__ProductService"
- value: "{{ .Values.global.connectionStrings.productService | replace "[RELEASE_NAME]" .Release.Name }}"
+ value: "{{ .Values.global.connectionStrings.product | replace "[RELEASE_NAME]" .Release.Name }}"
...
+```
+}%}
+
+Product microservice `product-service.yaml` file.
-# product-service.yaml
+{%{
+```yaml
apiVersion: v1
kind: Service
metadata:
@@ -427,32 +469,113 @@ After creating the Helm chart, you can *Refresh Sub Charts* in the ABP Studio.

-Then, update *Metadata* information right-click the *microservicename* [sub-chart](../../studio/kubernetes.md#subchart), select *Properties* it open *Chart Properties* window. You can edit in the *Metadata* tab.
+Then, update *Metadata* information right-click the *microservicename* [sub-chart](../../studio/kubernetes.md#subchart), select *Properties* it open *Chart Properties* window. You should add the following keys in the *Metadata* tab.

+- `projectPath`: The path to the microservice host application project. In the bookstore example, this value is `../../services/product/Acme.Bookstore.ProductService/Acme.Bookstore.ProductService.csproj`.
+- `imageName`: When we build the Docker image, it uses this value as the Docker image name. We're going to use it in the Helm chart values.
+- `projectType`: You can add a Helm chart for Angular and .NET projects, which is why we should explicitly specify the project type.
+
Add the *Kubernetes Services* in the *Chart Properties* -> *Kubernetes Services* tab.

+> This value should be the same as the [solution runner application](./../../studio/running-applications.md#properties) *Kubernetes service* value. It's necessary for browsing because when we connect to the Kubernetes cluster, we should browse the Kubernetes services instead of using the Launch URL.
+
Last but not least, we need to configure the helm chart environments for identity, auth-server, and gateway applications.
+Below is an example of the *Identity* microservice `identity.yaml` file.
+
{%{
-```yaml
-# identity.yaml
-# Add this line to the "env:" section
-- name: "OpenIddict__Resources__ProductService__RootUrl"
- value: "http://{{ .Release.Name }}-productservice"
-
-# authserver.yaml
-# Concat the following lines for "App__CorsOrigins" section
-- name: "App__CorsOrigins"
- value: "...,http://{{ .Release.Name }}-administration,http://{{ .Release.Name }}-productservice"
-
-# webapigateway.yaml
-# Add this line to the "env:" section
-- name: "ReverseProxy__Clusters__ProductService__Destinations__ProductService__Address"
- value: "http://{{ .Release.Name }}-productservice"
+```diff
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: "{{ .Release.Name }}-{{ .Chart.Name }}"
+spec:
+ selector:
+ matchLabels:
+ app: "{{ .Release.Name }}-{{ .Chart.Name }}"
+ template:
+ metadata:
+ labels:
+ app: "{{ .Release.Name }}-{{ .Chart.Name }}"
+ spec:
+ containers:
+ - image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
+ imagePullPolicy: "{{ .Values.image.pullPolicy }}"
+ name: "{{ .Release.Name }}-{{ .Chart.Name }}"
+ ports:
+ - name: "http"
+ containerPort: 80
+ env:
+ ...
++ - name: "OpenIddict__Resources__ProductService__RootUrl"
++ value: "http://{{ .Release.Name }}-product"
+```
+}%}
+
+Below is an example of the *AuthServer* application `authserver.yaml` file.
+
+{%{
+```diff
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: "{{ .Release.Name }}-{{ .Chart.Name }}"
+spec:
+ selector:
+ matchLabels:
+ app: "{{ .Release.Name }}-{{ .Chart.Name }}"
+ template:
+ metadata:
+ labels:
+ app: "{{ .Release.Name }}-{{ .Chart.Name }}"
+ spec:
+ containers:
+ - image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
+ imagePullPolicy: "{{ .Values.image.pullPolicy }}"
+ name: "{{ .Release.Name }}-{{ .Chart.Name }}"
+ ports:
+ - name: "http"
+ containerPort: 80
+ env:
+ ...
+ - name: "App__CorsOrigins"
+- value: "...,http://{{ .Release.Name }}-administration"
++ value: "...,http://{{ .Release.Name }}-administration,http://{{ .Release.Name }}-product"
+```
+}%}
+
+Below is an example of the *WebApiGateway* application `webapigateway.yaml` file.
+
+{%{
+```diff
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: "{{ .Release.Name }}-{{ .Chart.Name }}"
+spec:
+ selector:
+ matchLabels:
+ app: "{{ .Release.Name }}-{{ .Chart.Name }}"
+ template:
+ metadata:
+ labels:
+ app: "{{ .Release.Name }}-{{ .Chart.Name }}"
+ spec:
+ containers:
+ - image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
+ imagePullPolicy: "{{ .Values.image.pullPolicy }}"
+ name: "{{ .Release.Name }}-{{ .Chart.Name }}"
+ ports:
+ - name: "http"
+ containerPort: 80
+ env:
+ ...
++ - name: "ReverseProxy__Clusters__Product__Destinations__Product__Address"
++ value: "http://{{ .Release.Name }}-product"
```
}%}
@@ -465,11 +588,11 @@ You can customize the microservice template if needed. Add new configurations, d
After adding the new microservice to the solution, you can develop the UI for the new microservice. For .NET applications, you can add the microservice *Contracts* package to the UI application(s) to access the services provided by the new microservice. Afterwards, you can use the [generate-proxy](../../cli/index.md#generate-proxy) command to generate the proxy classes for the new microservice.
```bash
-abp generate-proxy -t csharp -url http://localhost:44333/ -m productService --without-contracts
+abp generate-proxy -t csharp -url http://localhost:44333/ -m product --without-contracts
```
Next, start creating *Pages* and *Components* for the new microservice in the UI application(s). Similarly, if you have an Angular application, you can use the [generate-proxy](../../cli/index.md#generate-proxy) command to generate the proxy classes for the new microservice and start developing the UI.
```bash
-abp generate-proxy -t ng -url http://localhost:44333/ -m productService
+abp generate-proxy -t ng -url http://localhost:44333/ -m product
```
\ No newline at end of file
diff --git a/docs/en/solution-templates/microservice/images/folder-structure.png b/docs/en/solution-templates/microservice/images/folder-structure.png
new file mode 100644
index 0000000000..926bfaa3d5
Binary files /dev/null and b/docs/en/solution-templates/microservice/images/folder-structure.png differ
diff --git a/docs/en/studio/concepts.md b/docs/en/studio/concepts.md
index 5f23150cf1..995519e191 100644
--- a/docs/en/studio/concepts.md
+++ b/docs/en/studio/concepts.md
@@ -5,7 +5,7 @@
{
"Next": {
"Name": "Overview",
- "Path": "studio/overview.md"
+ "Path": "studio/overview"
}
}
````
@@ -46,4 +46,4 @@ Some ABP Studio terms may seem conflict with .NET and Visual Studio. To make the
| Module | Solution |
| Package | Project |
-In essence, ABP Studio uses the solution term to cover all the .NET solutions and other components of your product. ABP Studio is used to build and manage the relations of these multiple .NET solutions and provides a high-level view of the whole system.
\ No newline at end of file
+In essence, ABP Studio uses the solution term to cover all the .NET solutions and other components of your product. ABP Studio is used to build and manage the relations of these multiple .NET solutions and provides a high-level view of the whole system.
diff --git a/docs/en/studio/images/abp-studio-switch-to-preview.png b/docs/en/studio/images/abp-studio-switch-to-preview.png
new file mode 100644
index 0000000000..32f6d01edb
Binary files /dev/null and b/docs/en/studio/images/abp-studio-switch-to-preview.png differ
diff --git a/docs/en/studio/installation.md b/docs/en/studio/installation.md
index 11f390f9f3..4dc158e464 100644
--- a/docs/en/studio/installation.md
+++ b/docs/en/studio/installation.md
@@ -8,7 +8,7 @@
Before you begin the installation process for ABP Studio, ensure that your system meets the following pre-requirements:
### Node
-Make sure [Node.js](https://nodejs.org/en) is installed on your system. If you have not installed Node.js, you can download the `v16` or `v18` version from the official [Node.js website](https://nodejs.org/en/download/prebuilt-installer).
+Make sure [Node.js](https://nodejs.org/en) is installed on your system. If you have not installed Node.js, you can download the `v18.19+` version from the official [Node.js website](https://nodejs.org/en/download/prebuilt-installer).
### WireGuard (Optional)
ABP Studio needs [WireGuard](https://www.wireguard.com/) for Kubernetes operations. You can find the installation instructions for your specific operating system below:
diff --git a/docs/en/studio/monitoring-applications.md b/docs/en/studio/monitoring-applications.md
index b7a67e2f63..645df15418 100644
--- a/docs/en/studio/monitoring-applications.md
+++ b/docs/en/studio/monitoring-applications.md
@@ -5,7 +5,7 @@
{
"Next": {
"Name": "Working with Kubernetes",
- "Path": "studio/kubernetes.md"
+ "Path": "studio/kubernetes"
}
}
````
diff --git a/docs/en/studio/overview.md b/docs/en/studio/overview.md
index 15f6615883..ecfdda52bc 100644
--- a/docs/en/studio/overview.md
+++ b/docs/en/studio/overview.md
@@ -35,13 +35,14 @@ The top menu is the main menu bar in ABP Studio. It offers access to various fun
### ABP Suite
-[ABP Suite](https://abp.io/tools/suite) is a complementary tool to the ABP Platform, designed to enable the rapid construction of web pages in just a few minutes. With the ABP Suite button in the Top Menu, you can access the Suite from the browser embedded in ABP Studio.
+[ABP Suite](https://abp.io/suite) is a complementary tool to the ABP Platform, designed to enable the rapid construction of web pages in just a few minutes. With the ABP Suite button in the Top Menu, you can access the Suite from the browser embedded in ABP Studio.
### Tools Menu
- **Options**
- - **Theme:**Â Allows to change UI theme.
-- **Extensions:**Â Opens the extension management window.
+ - **Theme:**Â Allows to change UI theme.
+- **Global secrets**: Allows to add global secrets.
+- **Global metadata**: Allows to add global metadata.
### Help Menu
@@ -50,6 +51,7 @@ The top menu is the main menu bar in ABP Studio. It offers access to various fun
- **Community:**Â Opens the official [ABP Community](https://abp.io/community) website in your browser.
- **Support:**Â Opens the official [Support](https://abp.io/support/questions) website in your browser.
- **My Support Questions:**Â Opens the page on the official Support website in your browser showing the tickets you have opened.
+- **Check for updates:** Checks for new version of ABP Studio.
- **About:**Â Opens the about window of ABP Studio where you can get more information about it.
## Welcome Screen
diff --git a/docs/en/studio/release-notes.md b/docs/en/studio/release-notes.md
new file mode 100644
index 0000000000..211786cacb
--- /dev/null
+++ b/docs/en/studio/release-notes.md
@@ -0,0 +1,105 @@
+# ABP Studio Release Notes
+
+This document contains **brief release notes** for each ABP Studio release. Release notes only include **major features** and **visible enhancements**. Therefore, they don't include all the development done in the related version.
+
+## 0.8.1 (2024-09-12)
+
+* Fixed MySQL connection problem for nolayers template
+* Ignored failed solution runner profiles while loading
+* Added required ModalBuilder extensions for the imported/installed modules for EF Core
+
+## 0.8.0 (2024-09-11)
+
+* Added `Blazor WebApp UI` to **app-nolayers** and **microservice** templates
+* Fixed version problem for bundle command
+* Fixed optional module integrations
+* Added **LeptonX Theme** to module-list
+* Fixed bug related to Kubernetes user-specified connection
+
+## 0.7.9 (2024-08-29)
+
+* Opened Readme.md file after module creation or opening a solution
+* Refactor & made enhancements to microservice template
+* Fixed some bugs that occur while creating a new module
+* Synchronized new templates with the old templates
+* Angular: Fixed logo problem in templates
+
+## 0.7.8 (2024-08-23)
+
+* Revised the new solution creation wizard and improved for UX
+* Fixed bugs on the Blazor WebApp template
+* Reduced logs count per application
+
+## 0.7.7 (2024-08-14)
+
+* Updated LeptonX logos in new templates
+* ABP Suite: Opened modules with .sln path instead of directory (fixes some problems in Suite integration)
+* Enhancements on Solution Runner
+
+## 0.7.6 (2024-08-12)
+
+* Removed redundant helm repo installation
+* Made enhancements to the Welcome Page area
+* Microservice Template: Enabled `DynamicPermissionStore` in AuthServer
+* Added Blazor WebApp option for Application template
+* Added **Solution Creation Info** action for identifying the solution
+
+## 0.7.5 (2024-08-06)
+
+* Fixed ABP Suite integration for macOS
+* Fixed build errors after upgrading to ABP 8.2.1
+* ABP Suite: Detected version inconsistencies and notified users to fix them automatically
+
+## 0.7.4 (2024-07-31)
+
+* Allowed creating open-source templates for active license owners
+* Fixed basic theme problems in angular templates
+* Handled docker related errors in solution runner
+* Fixed versions of Chat Module packages
+
+## 0.7.3 (2024-07-27)
+
+* Added administrator mode indicator on the application title
+* Made enhancements for aligning application title on macOS
+
+## 0.7.2 (2024-07-26)
+
+* Added `Blazor.Client` packages for alignment with new hosting logic
+* Updated Microsoft packages to v8.0.4
+* Revised application upgrade process
+* Fixed profile photo problem in tiered projects
+* Removed **LinkedAccounts** and **AuthorityDelegation** menu from templates
+
+## 0.7.1 (2024-07-24)
+
+* Fixed restart problem after installing extensions on macOS
+* Provided a model for sharing the same Kubernetes cluster between developers
+* Fixed the **Text Template Management** Module build problem in the app template
+* Fixed login problem for the community edition
+* Fixed all reported bugs & made enhancements
+
+## 0.7.0 (2024-07-17)
+
+* Added an option for building & starting C# applications directly
+* Disabled redis on migrator when the solution is tiered
+* Allowed Generating Static Proxies on ABP Studio UI
+
+## 0.6.9 (2024-06-27)
+
+* Allowed to open ABP Studio by clicking on a `*.abpsln` file
+* Fixed solution runner multiple instance problem
+* Allowed to install an NPM package to a package
+
+## 0.6.8 (2024-06-13)
+
+* Added free to pro upgrade option
+* Fixed microservice template helm chart bugs
+* Made enhancements to the new CLI
+
+## 0.6.7 (2024-05-31)
+
+* Added free option to app templates
+* Made social login optional for the app template
+* Added open-source (free) templates
+* Started showing angular projects on the browser tab
+* Introduced the Community Edition
\ No newline at end of file
diff --git a/docs/en/studio/solution-explorer.md b/docs/en/studio/solution-explorer.md
index 3575659c88..76e3543269 100644
--- a/docs/en/studio/solution-explorer.md
+++ b/docs/en/studio/solution-explorer.md
@@ -117,6 +117,7 @@ A [module](./concepts.md#module) is a sub-solution that can contains zero, one o
- `JetBrains Rider`: Opens the module in JetBrains Rider. This option is only available if you have JetBrains Rider installed.
- `Terminal`: Opens the terminal in the module directory.
- `Explorer`: Opens the file explorer in the module directory.
+- `Upgrade to Pro`: This will be visible only when you purchased a license but still using the modules came with open-source (free) license. For more details, check out [Migrating from Open Source Templates](../guides/migrating-from-open-source.md) document. This is not shown in the screenshot above.
### Adding a New Empty Module
@@ -156,7 +157,7 @@ ABP modules have their own file extension `.abpmdl`, and they are located in the
### Difference Between ABP Module Template and ABP Studio Module Approach
-In ABP, creating a module solution using the [CLI](https://docs.abp.io/en/commercial/latest/startup-templates/module/creating-a-new-solution) results in a solution with numerous projects, some of which may not be necessary for a specific use case. The ABP Studio module approach differs from the ABP module template, offering greater flexibility. With ABP Studio, we can create a module containing only the required projects; for example, an empty module with only the `Domain` and `Application` projects. In this approach, the term [Package](./concepts.md#package) is used for module projects.
+In ABP, creating a module solution using the [CLI](../cli/index.md) results in a solution with numerous projects, some of which may not be necessary for a specific use case. The ABP Studio module approach differs from the ABP module template, offering greater flexibility. With ABP Studio, we can create a module containing only the required projects; for example, an empty module with only the `Domain` and `Application` projects. In this approach, the term [Package](./concepts.md#package) is used for module projects.
Furthermore, it's important to mention that we can create not just DDD-principled modules. The [Modularity](../framework/architecture/modularity/basics.md) document clarifies the difference between *Framework* and *Application* modules. Basically, every C# project refers to the `Volo.Abp.Core` package and defines the *Module* class as an ABP Class Library. We have the option to develop an infrastructure module using only the *ABP Class Library* packages and provide a module reference to other modules.
diff --git a/docs/en/studio/version-compatibility.md b/docs/en/studio/version-compatibility.md
new file mode 100644
index 0000000000..bd19eb563d
--- /dev/null
+++ b/docs/en/studio/version-compatibility.md
@@ -0,0 +1,17 @@
+# ABP Studio and ABP Solution Templates Version Compatibility
+
+This document provides an overview of the compatibility between various versions of ABP Studio and [ABP Solution Templates](../solution-templates/index.md). Use this reference to ensure that you are using the correct versions of ABP Studio and ABP for your projects.
+
+| **ABP Studio Version** | **ABP Version** |
+|------------------------|---------------------------|
+| 0.8.1 | 8.3.0 |
+| 0.8.0 | 8.2.3 |
+| 0.7.8 - 0.7.9 | 8.2.2 |
+| 0.7.4 to 0.7.7 | 8.2.1 |
+| 0.7.0 to 0.7.3 | 8.2.0 |
+| 0.6.8 - 0.6.9 | 8.1.3 |
+| 0.6.7 | 8.1.1 |
+
+By default, ABP Studio uses stable versions to create solutions. Therefore, if you want to create a solution with a preview version, first you need to create a solution and then switch your solution to the preview version from the ABP Studio UI:
+
+
\ No newline at end of file
diff --git a/docs/en/suite/generating-crud-page.md b/docs/en/suite/generating-crud-page.md
index a4a2fcfd6e..8d98bb7df9 100644
--- a/docs/en/suite/generating-crud-page.md
+++ b/docs/en/suite/generating-crud-page.md
@@ -93,7 +93,7 @@ To create a new entity, make sure the *-New entity-* is selected in the **Entity
* **Customizable code**: Specifies hook-points to allow adding custom code blocks. Then, the code blocks that were written by you will not be overridden in the next entity generation and will be respected.
-* **Multi-tenant**: For your multi-tenant application, you can set an entity as multi-tenant which means the data will be isolated between the tenants. To make an entity multi-tenant, ABP Suite adds the `IMultiTenant` interface to the entity. Further information see [Multi-Tenancy](https://docs.abp.io/{{Document_Language_Code}}/abp/{{Document_Version}}/Multi-Tenancy)
+* **Multi-tenant**: For your multi-tenant application, you can set an entity as multi-tenant which means the data will be isolated between the tenants. To make an entity multi-tenant, ABP Suite adds the `IMultiTenant` interface to the entity. Further information see [Multi-Tenancy](../framework/architecture/multi-tenancy/index.md)
* If you created your application with *Separated tenant schema* support, then when you enable the multi-tenancy for the entity, database configurations (DbSet definitions and model configurations) will be defined in both `MyProjectNameDbContext` and `MyProjectNameTenantDbContext` (can be used for tenant-specific configurations) classes. Otherwise, the database configurations will only be defined in the `MyProjectNameDbContext` class for the host.
diff --git a/docs/en/tools.md b/docs/en/tools.md
new file mode 100644
index 0000000000..356db9f639
--- /dev/null
+++ b/docs/en/tools.md
@@ -0,0 +1,7 @@
+## Tools
+
+ABP provides a comprehensive set of tools designed to enhance the development experience and improve productivity:
+
+* [ABP CLI](./cli/index.md): Command line tool to perform some common operations for ABP based solutions.
+* [ABP Suite](./suite/index.md): A complementary tool that allows you to build web pages in a matter of minutes.
+* [ABP Studio](./studio/index.md): A cross-platform desktop application for ABP and .NET developers. Aims to provide a comfortable development environment for you by automating things, providing insights about your solution, making develop, run, browse, monitor, trace and deploy your solutions much easier.
\ No newline at end of file
diff --git a/docs/en/tutorials/book-store/images/blazor-add-books-component-client.png b/docs/en/tutorials/book-store/images/blazor-add-books-component-client.png
new file mode 100644
index 0000000000..be509ab06c
Binary files /dev/null and b/docs/en/tutorials/book-store/images/blazor-add-books-component-client.png differ
diff --git a/docs/en/tutorials/book-store/index.md b/docs/en/tutorials/book-store/index.md
index f3f24c8a3c..c3161d2331 100644
--- a/docs/en/tutorials/book-store/index.md
+++ b/docs/en/tutorials/book-store/index.md
@@ -35,3 +35,21 @@ This tutorial is organized as the following parts:
- [Part 8: Authors: Application Layer](part-08.md)
- [Part 9: Authors: User Interface](part-09.md)
- [Part 10: Book to Author Relation](part-10.md)
+
+### Download the Source Code
+
+This tutorial has multiple versions based on your **UI** and **Database** preferences. We've prepared a few combinations of the source code to be downloaded:
+
+* [MVC (Razor Pages) UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore)
+* [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore)
+* [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb)
+
+> If you encounter the "filename too long" or "unzip" error on Windows, please see [this guide](../../kb/windows-path-too-long-fix.md).
+
+{{if UI == "MVC" && DB == "EF"}}
+
+### Video Tutorial
+
+This part is also recorded as a video tutorial and **published on YouTube**.
+
+{{end}}
diff --git a/docs/en/tutorials/book-store/part-01.md b/docs/en/tutorials/book-store/part-01.md
index 327233c42b..8f1d5df346 100644
--- a/docs/en/tutorials/book-store/part-01.md
+++ b/docs/en/tutorials/book-store/part-01.md
@@ -16,46 +16,6 @@
}
````
-## About This Tutorial
-
-In this tutorial series, you will build an ABP based web application named `Acme.BookStore`. This application is used to manage a list of books and their authors. It is developed using the following technologies:
-
-* **{{DB_Value}}** as the database provider.
-* **{{UI_Value}}** as the UI Framework.
-
-This tutorial is organized as the following parts:
-
-- **Part 1: Creating the server side (this part)**
-- [Part 2: The book list page](part-02.md)
-- [Part 3: Creating, updating and deleting books](part-03.md)
-- [Part 4: Integration tests](part-04.md)
-- [Part 5: Authorization](part-05.md)
-- [Part 6: Authors: Domain layer](part-06.md)
-- [Part 7: Authors: Database Integration](part-07.md)
-- [Part 8: Authors: Application Layer](part-08.md)
-- [Part 9: Authors: User Interface](part-09.md)
-- [Part 10: Book to Author Relation](part-10.md)
-
-### Download the Source Code
-
-This tutorial has multiple versions based on your **UI** and **Database** preferences. We've prepared a few combinations of the source code to be downloaded:
-
-* [MVC (Razor Pages) UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore)
-* [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore)
-* [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb)
-
-> If you encounter the "filename too long" or "unzip" error on Windows, please see [this guide](../../kb/windows-path-too-long-fix.md).
-
-> After downloading the source code, you might need to run some commands before running the application. See the _After Creating the Solution_ section below for more information.
-
-{{if UI == "MVC" && DB == "EF"}}
-
-### Video Tutorial
-
-This part is also recorded as a video tutorial and **published on YouTube**.
-
-{{end}}
-
## Creating the Solution
Before starting the development, create a new solution named `Acme.BookStore` and run it by following the [getting started tutorial](../../get-started/layered-web-application.md).
@@ -480,7 +440,7 @@ ABP can [**automagically**](../../framework/api-development/auto-controllers.md)
### Swagger UI
-The startup template is configured to run the [Swagger UI](https://swagger.io/tools/swagger-ui/) using the [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) library. Run the application ({{if UI=="MVC"}}`Acme.BookStore.Web`{{else}}`Acme.BookStore.HttpApi.Host`{{end}}) by pressing `CTRL+F5` and navigate to `https://localhost:/swagger/` on your browser. Replace `` with your own port number.
+The startup template is configured to run the [Swagger UI](https://swagger.io/tools/swagger-ui/) using the [Swashbuckle.AspNetCore](https://github.com/domaindrivendev/Swashbuckle.AspNetCore) library. Run the application ({{if UI=="MVC"}}`Acme.BookStore.Web`{{else if UI=="BlazorServer"}}`Acme.BookStore.Blazor`{{else}}`Acme.BookStore.HttpApi.Host`{{end}}) by pressing `CTRL+F5` and navigate to `https://localhost:/swagger/` on your browser. Replace `` with your own port number.
You will see some built-in service endpoints as well as the `Book` service and its REST-style endpoints:
diff --git a/docs/en/tutorials/book-store/part-02.md b/docs/en/tutorials/book-store/part-02.md
index 6ac190710b..df5a5ac598 100644
--- a/docs/en/tutorials/book-store/part-02.md
+++ b/docs/en/tutorials/book-store/part-02.md
@@ -20,44 +20,6 @@
}
````
-## About This Tutorial
-
-In this tutorial series, you will build an ABP based web application named `Acme.BookStore`. This application is used to manage a list of books and their authors. It is developed using the following technologies:
-
-* **{{DB_Value}}** as the ORM provider.
-* **{{UI_Value}}** as the UI Framework.
-
-This tutorial is organized as the following parts:
-
-- [Part 1: Creating the server side](part-01.md)
-- **Part 2: The book list page (this part)**
-- [Part 3: Creating, updating and deleting books](part-03.md)
-- [Part 4: Integration tests](part-04.md)
-- [Part 5: Authorization](part-05.md)
-- [Part 6: Authors: Domain layer](part-06.md)
-- [Part 7: Authors: Database Integration](part-07.md)
-- [Part 8: Authors: Application Layer](part-08.md)
-- [Part 9: Authors: User Interface](part-09.md)
-- [Part 10: Book to Author Relation](part-10.md)
-
-### Download the Source Code
-
-This tutorial has multiple versions based on your **UI** and **Database** preferences. We've prepared a few combinations of the source code to be downloaded:
-
-* [MVC (Razor Pages) UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore)
-* [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore)
-* [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb)
-
-> If you encounter the "filename too long" or "unzip" error on Windows, please see [this guide](../../kb/windows-path-too-long-fix.md).
-
-{{if UI == "MVC" && DB == "EF"}}
-
-### Video Tutorial
-
-This part is also recorded as a video tutorial and **published on YouTube**.
-
-{{end}}
-
{{if UI == "MVC"}}
## Dynamic JavaScript Proxies
@@ -556,9 +518,13 @@ Now you can see the final result on your browser:
## Create a Books Page
-It's time to create something visible and usable! Right click on the `Pages` folder under the `Acme.BookStore.Blazor.Client` project and add a new **razor component**, named `Books.razor`:
+It's time to create something visible and usable! Right click on the `Pages` folder under the {{ if UI == "Blazor"}}`Acme.BookStore.Blazor.Client`{{ else }}`Acme.BookStore.Blazor`{{ end }} project and add a new **razor component**, named `Books.razor`:
+{{ if UI == "Blazor"}}
+
+{{ else }}

+{{ end }}
Replace the contents of this component as shown below:
@@ -574,7 +540,7 @@ Replace the contents of this component as shown below:
### Add the Books Page to the Main Menu
-Open the `BookStoreMenuContributor` class in the `Blazor.Client` project add the following code to the end of the `ConfigureMainMenuAsync` method:
+Open the `BookStoreMenuContributor` class in the {{ if UI == "Blazor"}}`Acme.BookStore.Blazor.Client`{{ else }}`Acme.BookStore.Blazor`{{ end }} project add the following code to the end of the `ConfigureMainMenuAsync` method:
````csharp
context.Menu.AddItem(
diff --git a/docs/en/tutorials/book-store/part-03.md b/docs/en/tutorials/book-store/part-03.md
index 7665cf4354..a770d62f29 100644
--- a/docs/en/tutorials/book-store/part-03.md
+++ b/docs/en/tutorials/book-store/part-03.md
@@ -21,44 +21,6 @@
}
````
-## About This Tutorial
-
-In this tutorial series, you will build an ABP based web application named `Acme.BookStore`. This application is used to manage a list of books and their authors. It is developed using the following technologies:
-
-* **{{DB_Value}}** as the ORM provider.
-* **{{UI_Value}}** as the UI Framework.
-
-This tutorial is organized as the following parts:
-
-- [Part 1: Creating the server side](part-01.md)
-- [Part 2: The book list page](part-02.md)
-- **Part 3: Creating, updating and deleting books (this part)**
-- [Part 4: Integration tests](part-04.md)
-- [Part 5: Authorization](part-05.md)
-- [Part 6: Authors: Domain layer](part-06.md)
-- [Part 7: Authors: Database Integration](part-07.md)
-- [Part 8: Authors: Application Layer](part-08.md)
-- [Part 9: Authors: User Interface](part-09.md)
-- [Part 10: Book to Author Relation](part-10.md)
-
-### Download the Source Code
-
-This tutorial has multiple versions based on your **UI** and **Database** preferences. We've prepared a few combinations of the source code to be downloaded:
-
-* [MVC (Razor Pages) UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore)
-* [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore)
-* [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb)
-
-> If you encounter the "filename too long" or "unzip" error on Windows, please see [this guide](../../kb/windows-path-too-long-fix.md).
-
-{{if UI == "MVC" && DB == "EF"}}
-
-### Video Tutorial
-
-This part is also recorded as a video tutorial and **published on YouTube**.
-
-{{end}}
-
{{if UI == "MVC"}}
## Creating a New Book
diff --git a/docs/en/tutorials/book-store/part-04.md b/docs/en/tutorials/book-store/part-04.md
index 0dc79dc75b..b529748efb 100644
--- a/docs/en/tutorials/book-store/part-04.md
+++ b/docs/en/tutorials/book-store/part-04.md
@@ -21,44 +21,6 @@
}
````
-## About This Tutorial
-
-In this tutorial series, you will build an ABP based web application named `Acme.BookStore`. This application is used to manage a list of books and their authors. It is developed using the following technologies:
-
-* **{{DB_Value}}** as the ORM provider.
-* **{{UI_Value}}** as the UI Framework.
-
-This tutorial is organized as the following parts;
-
-- [Part 1: Creating the server side](part-01.md)
-- [Part 2: The book list page](part-02.md)
-- [Part 3: Creating, updating and deleting books](part-03.md)
-- **Part 4: Integration tests (this part)**
-- [Part 5: Authorization](part-05.md)
-- [Part 6: Authors: Domain layer](part-06.md)
-- [Part 7: Authors: Database Integration](part-07.md)
-- [Part 8: Authors: Application Layer](part-08.md)
-- [Part 9: Authors: User Interface](part-09.md)
-- [Part 10: Book to Author Relation](part-10.md)
-
-### Download the Source Code
-
-This tutorial has multiple versions based on your **UI** and **Database** preferences. We've prepared a few combinations of the source code to be downloaded:
-
-* [MVC (Razor Pages) UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore)
-* [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore)
-* [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb)
-
-> If you encounter the "filename too long" or "unzip" error on Windows, please see [this guide](../../kb/windows-path-too-long-fix.md).
-
-{{if UI == "MVC" && DB == "EF"}}
-
-### Video Tutorial
-
-This part is also recorded as a video tutorial and **published on YouTube**.
-
-{{end}}
-
## Test Projects in the Solution
This part covers the **server side** tests. There are several test projects in the solution:
diff --git a/docs/en/tutorials/book-store/part-05.md b/docs/en/tutorials/book-store/part-05.md
index d657997950..947eec65f0 100644
--- a/docs/en/tutorials/book-store/part-05.md
+++ b/docs/en/tutorials/book-store/part-05.md
@@ -21,44 +21,6 @@
}
````
-## About This Tutorial
-
-In this tutorial series, you will build an ABP based web application named `Acme.BookStore`. This application is used to manage a list of books and their authors. It is developed using the following technologies:
-
-* **{{DB_Value}}** as the ORM provider.
-* **{{UI_Value}}** as the UI Framework.
-
-This tutorial is organized as the following parts;
-
-- [Part 1: Creating the server side](part-01.md)
-- [Part 2: The book list page](part-02.md)
-- [Part 3: Creating, updating and deleting books](part-03.md)
-- [Part 4: Integration tests](part-04.md)
-- **Part 5: Authorization (this part)**
-- [Part 6: Authors: Domain layer](part-06.md)
-- [Part 7: Authors: Database Integration](part-07.md)
-- [Part 8: Authors: Application Layer](part-08.md)
-- [Part 9: Authors: User Interface](part-09.md)
-- [Part 10: Book to Author Relation](part-10.md)
-
-### Download the Source Code
-
-This tutorial has multiple versions based on your **UI** and **Database** preferences. We've prepared a few combinations of the source code to be downloaded:
-
-* [MVC (Razor Pages) UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore)
-* [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore)
-* [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb)
-
-> If you encounter the "filename too long" or "unzip" error on Windows, please see [this guide](../../kb/windows-path-too-long-fix.md).
-
-{{if UI == "MVC" && DB == "EF"}}
-
-### Video Tutorial
-
-This part is also recorded as a video tutorial and **published on YouTube**.
-
-{{end}}
-
## Permissions
ABP provides an [authorization system](../../framework/fundamentals/authorization.md) based on the ASP.NET Core's [authorization infrastructure](https://docs.microsoft.com/en-us/aspnet/core/security/authorization/introduction). One major feature added on top of the standard authorization infrastructure is the **permission system** which allows to define permissions and enable/disable per role, user or client.
@@ -67,7 +29,7 @@ ABP provides an [authorization system](../../framework/fundamentals/authorizatio
A permission must have a unique name (a `string`). The best way is to define it as a `const`, so we can reuse the permission name.
-Open the `BookStorePermissions` class inside the `Acme.BookStore.Application.Contracts` project (in the `Permissions` folder) and change the content as shown below:
+Open the `BookStorePermissions` class inside the `Acme.BookStore.Application.Contracts` project (in the `Permissions` folder) and add new permission names:
````csharp
namespace Acme.BookStore.Permissions;
@@ -75,7 +37,11 @@ namespace Acme.BookStore.Permissions;
public static class BookStorePermissions
{
public const string GroupName = "BookStore";
+
+ // other permissions...
+ // other permissions...
+ // *** ADDED a NEW NESTED CLASS ***
public static class Books
{
public const string Default = GroupName + ".Books";
diff --git a/docs/en/tutorials/book-store/part-06.md b/docs/en/tutorials/book-store/part-06.md
index d24ba5ea20..a19248ec64 100644
--- a/docs/en/tutorials/book-store/part-06.md
+++ b/docs/en/tutorials/book-store/part-06.md
@@ -21,36 +21,6 @@
}
````
-## About This Tutorial
-
-In this tutorial series, you will build an ABP based web application named `Acme.BookStore`. This application is used to manage a list of books and their authors. It is developed using the following technologies:
-
-* **{{DB_Value}}** as the ORM provider.
-* **{{UI_Value}}** as the UI Framework.
-
-This tutorial is organized as the following parts;
-
-- [Part 1: Creating the server side](part-01.md)
-- [Part 2: The book list page](part-02.md)
-- [Part 3: Creating, updating and deleting books](part-03.md)
-- [Part 4: Integration tests](part-04.md)
-- [Part 5: Authorization](part-05.md)
-- **Part 6: Authors: Domain layer (this part)**
-- [Part 7: Authors: Database Integration](part-07.md)
-- [Part 8: Authors: Application Layer](part-08.md)
-- [Part 9: Authors: User Interface](part-09.md)
-- [Part 10: Book to Author Relation](part-10.md)
-
-### Download the Source Code
-
-This tutorial has multiple versions based on your **UI** and **Database** preferences. We've prepared a few combinations of the source code to be downloaded:
-
-* [MVC (Razor Pages) UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore)
-* [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore)
-* [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb)
-
-> If you encounter the "filename too long" or "unzip" error on Windows, please see [this guide](../../kb/windows-path-too-long-fix.md).
-
## Introduction
In the previous parts, we've used the ABP infrastructure to easily build some services;
diff --git a/docs/en/tutorials/book-store/part-07.md b/docs/en/tutorials/book-store/part-07.md
index a3c7e2903c..70d73da97b 100644
--- a/docs/en/tutorials/book-store/part-07.md
+++ b/docs/en/tutorials/book-store/part-07.md
@@ -21,36 +21,6 @@
}
````
-## About This Tutorial
-
-In this tutorial series, you will build an ABP based web application named `Acme.BookStore`. This application is used to manage a list of books and their authors. It is developed using the following technologies:
-
-* **{{DB_Value}}** as the ORM provider.
-* **{{UI_Value}}** as the UI Framework.
-
-This tutorial is organized as the following parts;
-
-- [Part 1: Creating the server side](part-01.md)
-- [Part 2: The book list page](part-02.md)
-- [Part 3: Creating, updating and deleting books](part-03.md)
-- [Part 4: Integration tests](part-04.md)
-- [Part 5: Authorization](part-05.md)
-- [Part 6: Authors: Domain layer](part-06.md)
-- **Part 7: Authors: Database Integration (this part)**
-- [Part 8: Authors: Application Layer](part-08.md)
-- [Part 9: Authors: User Interface](part-09.md)
-- [Part 10: Book to Author Relation](part-10.md)
-
-### Download the Source Code
-
-This tutorial has multiple versions based on your **UI** and **Database** preferences. We've prepared a few combinations of the source code to be downloaded:
-
-* [MVC (Razor Pages) UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore)
-* [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore)
-* [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb)
-
-> If you encounter the "filename too long" or "unzip" error on Windows, please see [this guide](../../kb/windows-path-too-long-fix.md).
-
## Introduction
This part explains how to configure the database integration for the `Author` entity introduced in the previous part.
diff --git a/docs/en/tutorials/book-store/part-08.md b/docs/en/tutorials/book-store/part-08.md
index 3054cf3f5d..61412ba770 100644
--- a/docs/en/tutorials/book-store/part-08.md
+++ b/docs/en/tutorials/book-store/part-08.md
@@ -21,36 +21,6 @@
}
````
-## About This Tutorial
-
-In this tutorial series, you will build an ABP based web application named `Acme.BookStore`. This application is used to manage a list of books and their authors. It is developed using the following technologies:
-
-* **{{DB_Value}}** as the ORM provider.
-* **{{UI_Value}}** as the UI Framework.
-
-This tutorial is organized as the following parts;
-
-- [Part 1: Creating the server side](part-01.md)
-- [Part 2: The book list page](part-02.md)
-- [Part 3: Creating, updating and deleting books](part-03.md)
-- [Part 4: Integration tests](part-04.md)
-- [Part 5: Authorization](part-05.md)
-- [Part 6: Authors: Domain layer](part-06.md)
-- [Part 7: Authors: Database Integration](part-07.md)
-- **Part 8: Author: Application Layer (this part)**
-- [Part 9: Authors: User Interface](part-09.md)
-- [Part 10: Book to Author Relation](part-10.md)
-
-### Download the Source Code
-
-This tutorial has multiple versions based on your **UI** and **Database** preferences. We've prepared a few combinations of the source code to be downloaded:
-
-* [MVC (Razor Pages) UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore)
-* [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore)
-* [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb)
-
-> If you encounter the "filename too long" or "unzip" error on Windows, please see [this guide](../../kb/windows-path-too-long-fix.md).
-
## Introduction
This part explains to create an application layer for the `Author` entity created before.
@@ -333,7 +303,7 @@ public async Task DeleteAsync(Guid id)
You can't compile the code since it is expecting some constants declared in the `BookStorePermissions` class.
-Open the `BookStorePermissions` class inside the `Acme.BookStore.Application.Contracts` project (in the `Permissions` folder) and change the content as shown below:
+Open the `BookStorePermissions` class inside the `Acme.BookStore.Application.Contracts` project (in the `Permissions` folder) and add new permission names:
````csharp
namespace Acme.BookStore.Permissions;
@@ -342,13 +312,8 @@ public static class BookStorePermissions
{
public const string GroupName = "BookStore";
- public static class Books
- {
- public const string Default = GroupName + ".Books";
- public const string Create = Default + ".Create";
- public const string Edit = Default + ".Edit";
- public const string Delete = Default + ".Delete";
- }
+ // other permissions...
+ // other permissions...
// *** ADDED a NEW NESTED CLASS ***
public static class Authors
diff --git a/docs/en/tutorials/book-store/part-09.md b/docs/en/tutorials/book-store/part-09.md
index a162f24b5a..e8e0bd328f 100644
--- a/docs/en/tutorials/book-store/part-09.md
+++ b/docs/en/tutorials/book-store/part-09.md
@@ -21,36 +21,6 @@
}
````
-## About This Tutorial
-
-In this tutorial series, you will build an ABP based web application named `Acme.BookStore`. This application is used to manage a list of books and their authors. It is developed using the following technologies:
-
-* **{{DB_Value}}** as the ORM provider.
-* **{{UI_Value}}** as the UI Framework.
-
-This tutorial is organized as the following parts;
-
-- [Part 1: Creating the server side](part-01.md)
-- [Part 2: The book list page](part-02.md)
-- [Part 3: Creating, updating and deleting books](part-03.md)
-- [Part 4: Integration tests](part-04.md)
-- [Part 5: Authorization](part-05.md)
-- [Part 6: Authors: Domain layer](part-06.md)
-- [Part 7: Authors: Database Integration](part-07.md)
-- [Part 8: Authors: Application Layer](part-08.md)
-- **Part 9: Authors: User Interface (this part)**
-- [Part 10: Book to Author Relation](Part-10.md)
-
-### Download the Source Code
-
-This tutorial has multiple versions based on your **UI** and **Database** preferences. We've prepared a few combinations of the source code to be downloaded:
-
-* [MVC (Razor Pages) UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore)
-* [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore)
-* [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb)
-
-> If you encounter the "filename too long" or "unzip" error on Windows, please see [this guide](../../kb/windows-path-too-long-fix.md).
-
## Introduction
This part explains how to create a CRUD page for the `Author` entity introduced in the previous parts.
@@ -1236,7 +1206,7 @@ Open the `BookStoreMenuContributor.cs` in the `Acme.BookStore.Blazor.Client` pro
````csharp
if (await context.IsGrantedAsync(BookStorePermissions.Authors.Default))
{
- bookStoreMenu.AddItem(new ApplicationMenuItem(
+ context.Menu.AddItem(new ApplicationMenuItem(
"BooksStore.Authors",
l["Menu:Authors"],
url: "/authors"
diff --git a/docs/en/tutorials/book-store/part-10.md b/docs/en/tutorials/book-store/part-10.md
index b5b710146e..5a6acb752b 100644
--- a/docs/en/tutorials/book-store/part-10.md
+++ b/docs/en/tutorials/book-store/part-10.md
@@ -17,36 +17,6 @@
}
````
-## About This Tutorial
-
-In this tutorial series, you will build an ABP based web application named `Acme.BookStore`. This application is used to manage a list of books and their authors. It is developed using the following technologies:
-
-* **{{DB_Value}}** as the ORM provider.
-* **{{UI_Value}}** as the UI Framework.
-
-This tutorial is organized as the following parts;
-
-- [Part 1: Creating the server side](part-01.md)
-- [Part 2: The book list page](part-02.md)
-- [Part 3: Creating, updating and deleting books](part-03.md)
-- [Part 4: Integration tests](part-04.md)
-- [Part 5: Authorization](part-05.md)
-- [Part 6: Authors: Domain layer](part-06.md)
-- [Part 7: Authors: Database Integration](part-07.md)
-- [Part 8: Authors: Application Layer](part-08.md)
-- [Part 9: Authors: User Interface](part-09.md)
-- **Part 10: Book to Author Relation (this part)**
-
-### Download the Source Code
-
-This tutorial has multiple versions based on your **UI** and **Database** preferences. We've prepared a few combinations of the source code to be downloaded:
-
-* [MVC (Razor Pages) UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore)
-* [Blazor UI with EF Core](https://github.com/abpframework/abp-samples/tree/master/BookStore-Blazor-EfCore)
-* [Angular UI with MongoDB](https://github.com/abpframework/abp-samples/tree/master/BookStore-Angular-MongoDb)
-
-> If you encounter the "filename too long" or "unzip" error on Windows, please see [this guide](../../kb/windows-path-too-long-fix.md).
-
## Introduction
We have created `Book` and `Author` functionalities for the book store application. However, currently there is no relation between these entities.
diff --git a/docs/en/tutorials/index.md b/docs/en/tutorials/index.md
new file mode 100644
index 0000000000..aac3abfaed
--- /dev/null
+++ b/docs/en/tutorials/index.md
@@ -0,0 +1,6 @@
+## ABP Tutorials
+
+The following guides explains how to build ABP based applications:
+
+* [TODO Application](todo/index.md): This is a single-part, quick-start tutorial to build a simple application with ABP. Start with this tutorial if you want to quickly understand how ABP works.
+* [Book Store Application](book-store/overview.md): This is a multi-part, complete tutorial to build a bookstore application with ABP. Start with this tutorial if you want to create a layered solution with ABP and apply DDD best practices.
\ No newline at end of file
diff --git a/docs/en/tutorials/todo/layered/index.md b/docs/en/tutorials/todo/layered/index.md
index db25c826f1..b58d95a034 100644
--- a/docs/en/tutorials/todo/layered/index.md
+++ b/docs/en/tutorials/todo/layered/index.md
@@ -3,7 +3,7 @@
````json
//[doc-params]
{
- "UI": ["MVC", "Blazor", "BlazorServer", "NG"],
+ "UI": ["MVC", "Blazor", "BlazorServer", "BlazorWebApp" ,"NG"],
"DB": ["EF", "Mongo"]
}
````
@@ -53,7 +53,7 @@ This documentation has a video tutorial on **YouTube**!! You can watch it here:
## Pre-Requirements
* An IDE (e.g. [Visual Studio](https://visualstudio.microsoft.com/vs/)) that supports [.NET 8.0+](https://dotnet.microsoft.com/download/dotnet) development.
-* [Node v16.x](https://nodejs.org/)
+* [Node v18.19+](https://nodejs.org/)
{{if DB=="Mongo"}}
@@ -148,6 +148,10 @@ Ensure the `TodoApp.HttpApi.Host` project is the startup project, then run the a
You can explore and test your HTTP API with this UI. Now, we can set the `TodoApp.Blazor` as the startup project and run it to open the actual Blazor application UI:
+{{else if UI=="BlazorWebApp" }}
+
+It is good to run the application before starting the development. Ensure the `TodoApp.Blazor` project is the startup project, then run the application (Ctrl+F5 in Visual Studio) to see the initial UI:
+
{{else if UI=="NG"}}
It is good to run the application before starting the development. The solution has two main applications:
@@ -252,7 +256,7 @@ You can apply changes to the database using the following command, in the same c
dotnet ef database update
```
-> If you are using Visual Studio, you may want to use the `Add-Migration Added_TodoItem` and `Update-Database` commands in the *Package Manager Console (PMC)*. In this case, ensure that {{if UI=="MVC"}}`TodoApp.Web`{{else if UI=="BlazorServer"}}`TodoApp.Blazor`{{else if UI=="Blazor" || UI=="NG"}}`TodoApp.HttpApi.Host`{{end}} is the startup project and `TodoApp.EntityFrameworkCore` is the *Default Project* in PMC.
+> If you are using Visual Studio, you may want to use the `Add-Migration Added_TodoItem` and `Update-Database` commands in the *Package Manager Console (PMC)*. In this case, ensure that {{if UI=="MVC"}}`TodoApp.Web`{{else if UI=="BlazorServer" || UI=="Blazor" || UI=="BlazorWebApp"}}`TodoApp.Blazor`{{else if UI=="Blazor" || UI=="NG"}}`TodoApp.HttpApi.Host`{{end}} is the startup project and `TodoApp.EntityFrameworkCore` is the *Default Project* in PMC.
{{else if DB=="Mongo"}}
@@ -581,11 +585,11 @@ If you open the [Swagger UI](https://swagger.io/tools/swagger-ui/) by entering t

-{{else if UI=="Blazor" || UI=="BlazorServer"}}
+{{else if UI=="Blazor" || UI=="BlazorServer" || UI=="BlazorWebApp"}}
### Index.razor.cs
-Open the `Index.razor.cs` file in the `Pages` folder of the *TodoApp.Blazor* project and replace the content with the following code block:
+Open the `Index.razor.cs` file in the `Pages` folder of the {{if UI=="BlazorWebApp"}} *TodoApp.Blazor.Client* {{else}}*TodoApp.Blazor*{{end}} project and replace the content with the following code block:
```csharp
using Microsoft.AspNetCore.Components;
@@ -634,7 +638,7 @@ See the *Dynamic C# Proxies & Auto API Controllers* section below to learn how w
### Index.razor
-Open the `Index.razor` file in the `Pages` folder of the *TodoApp.Blazor* project and replace the content with the following code block:
+Open the `Index.razor` file in the `Pages` folder of the {{if UI=="BlazorWebApp"}} *TodoApp.Blazor.Client* {{else}} *TodoApp.Blazor* {{end}} project and replace the content with the following code block:
```xml
@page "/"
@@ -676,7 +680,7 @@ Open the `Index.razor` file in the `Pages` folder of the *TodoApp.Blazor* projec
### Index.razor.css
-As the final touch, open the `Index.razor.css` file in the `Pages` folder of the *TodoApp.Blazor* project and replace it with the following content:
+As the final touch, open the `Index.razor.css` file in the `Pages` folder of the {{if UI=="BlazorWebApp"}}*TodoApp.Blazor.Client*{{else}}*TodoApp.Blazor*{{end}} project and replace it with the following content:
```css
#TodoList{
diff --git a/docs/en/tutorials/todo/single-layer/index.md b/docs/en/tutorials/todo/single-layer/index.md
index 9afbbd8833..3b4f755c70 100644
--- a/docs/en/tutorials/todo/single-layer/index.md
+++ b/docs/en/tutorials/todo/single-layer/index.md
@@ -49,7 +49,7 @@ This documentation has a video tutorial on **YouTube**!! You can watch it here:
## Pre-Requirements
* An IDE (e.g. [Visual Studio](https://visualstudio.microsoft.com/vs/)) that supports [.NET 8.0+](https://dotnet.microsoft.com/download/dotnet) development.
-* [Node v16.x](https://nodejs.org/)
+* [Node v18.19+](https://nodejs.org/)
{{if DB=="Mongo"}}
diff --git a/docs/en/ui-themes/lepton-x/angular-customization.md b/docs/en/ui-themes/lepton-x/angular-customization.md
index 5c570478c2..71ee3761f2 100644
--- a/docs/en/ui-themes/lepton-x/angular-customization.md
+++ b/docs/en/ui-themes/lepton-x/angular-customization.md
@@ -1,4 +1,4 @@
-## Customization
+# Customization
### Layouts
diff --git a/docs/en/ui-themes/lepton-x/angular/how-to-add-a-new-variation-to-lepton-x-for-angular.md b/docs/en/ui-themes/lepton-x/angular/how-to-add-a-new-variation-to-lepton-x-for-angular.md
index 01ea39c5ec..afea2fd228 100644
--- a/docs/en/ui-themes/lepton-x/angular/how-to-add-a-new-variation-to-lepton-x-for-angular.md
+++ b/docs/en/ui-themes/lepton-x/angular/how-to-add-a-new-variation-to-lepton-x-for-angular.md
@@ -1,4 +1,4 @@
-## How to Add a New Appearance to LeptonX for Angular
+# How to Add a New Appearance to LeptonX for Angular
LeptonX has four appearances: light, dim, dark, and system. You can add a new appearance to LeptonX for Angular. In this document, we will show you how to add a new appearance to LeptonX for Angular.
### Step 1: Creating the New Theme Definition
diff --git a/docs/en/ui-themes/lepton-x/angular/how-to-change-default-theme-option.md b/docs/en/ui-themes/lepton-x/angular/how-to-change-default-theme-option.md
index 961cbc461e..4b58c4b106 100644
--- a/docs/en/ui-themes/lepton-x/angular/how-to-change-default-theme-option.md
+++ b/docs/en/ui-themes/lepton-x/angular/how-to-change-default-theme-option.md
@@ -1,4 +1,4 @@
-## Configuring the Default Theme for LeptonX
+# Configuring the Default Theme for LeptonX
The LeptonX theme offers multiple appearances to suit your application's visual style. You can easily configure the default theme for your application using the ThemeLeptonXModule provided by LeptonX.
### Configuration Code
diff --git a/docs/en/ui-themes/lepton-x/comparison-obsolete.md b/docs/en/ui-themes/lepton-x/comparison-obsolete.md
index 2870be0a8e..e14dcfc368 100644
--- a/docs/en/ui-themes/lepton-x/comparison-obsolete.md
+++ b/docs/en/ui-themes/lepton-x/comparison-obsolete.md
@@ -1,4 +1,4 @@
-## Feature Set
+# Feature Set
### Frontend Choices
diff --git a/docs/en/ui-themes/lepton-x/index.md b/docs/en/ui-themes/lepton-x/index.md
index 5fc1ee4fb1..3bfc769409 100644
--- a/docs/en/ui-themes/lepton-x/index.md
+++ b/docs/en/ui-themes/lepton-x/index.md
@@ -85,13 +85,13 @@ LeptonX Module doesn't define any permissions.
You can use the following CLI command to download the source-code:
```bash
-abp get-source Volo.Abp.LeptonXTheme.Pro
+abp get-source Volo.Abp.LeptonXTheme
```
If you want to download the source code of the preview version, you can use the following command:
```bash
-abp get-source Volo.Abp.LeptonXTheme.Pro --preview
+abp get-source Volo.Abp.LeptonXTheme --preview
```
> You can download the source code of a certain version by using the `--version` parameter. See the [ABP CLI documentation](../../cli/index#get-source) for other possible options.
diff --git a/docs/en/ui-themes/lepton-x/mvc.md b/docs/en/ui-themes/lepton-x/mvc.md
index 5e7aab2b7f..4627ccb727 100644
--- a/docs/en/ui-themes/lepton-x/mvc.md
+++ b/docs/en/ui-themes/lepton-x/mvc.md
@@ -152,7 +152,7 @@ Commonly used components in all layouts.

-Breadcrumbs can be customized by using the `IPageLayout` service. See [PageLayout - Breadcrumb](https://docs.abp.io/en/abp/7.2/UI%2FAspNetCore%2FPage-Header#breadcrumb) for more information.
+Breadcrumbs can be customized by using the `IPageLayout` service. See [PageLayout - Breadcrumb](../../framework/ui/mvc-razor-pages/page-header.md#breadcrumb) for more information.
If you need to replace the component, you can follow the steps below.
@@ -166,7 +166,7 @@ If you need to replace the component, you can follow the steps below.

-Page Titles can be customized by using the `IPageLayout` service. See [PageLayout - Page Title](https://docs.abp.io/en/abp/7.2/UI%2FAspNetCore%2FPage-Header#page-title) for more information.
+Page Titles can be customized by using the `IPageLayout` service. See [PageLayout - Page Title](../../framework/ui/mvc-razor-pages/page-header.md#page-title) for more information.
If you need to replace the component, you can follow the steps below.
diff --git a/framework/Volo.Abp.sln b/framework/Volo.Abp.sln
index 3373a239de..19fbf05df8 100644
--- a/framework/Volo.Abp.sln
+++ b/framework/Volo.Abp.sln
@@ -467,6 +467,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.RemoteServices.Tes
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.AspNetCore.Abstractions", "src\Volo.Abp.AspNetCore.Abstractions\Volo.Abp.AspNetCore.Abstractions.csproj", "{E1051CD0-9262-4869-832D-B951723F4DDE}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.BlobStoring.Google", "src\Volo.Abp.BlobStoring.Google\Volo.Abp.BlobStoring.Google.csproj", "{DEEB5200-BBF9-464D-9B7E-8FC035A27E94}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.BlobStoring.Google.Tests", "test\Volo.Abp.BlobStoring.Google.Tests\Volo.Abp.BlobStoring.Google.Tests.csproj", "{40FB8907-9CF7-44D0-8B5F-538AC6DAF8B9}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -1393,6 +1397,14 @@ Global
{E1051CD0-9262-4869-832D-B951723F4DDE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E1051CD0-9262-4869-832D-B951723F4DDE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E1051CD0-9262-4869-832D-B951723F4DDE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DEEB5200-BBF9-464D-9B7E-8FC035A27E94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DEEB5200-BBF9-464D-9B7E-8FC035A27E94}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DEEB5200-BBF9-464D-9B7E-8FC035A27E94}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DEEB5200-BBF9-464D-9B7E-8FC035A27E94}.Release|Any CPU.Build.0 = Release|Any CPU
+ {40FB8907-9CF7-44D0-8B5F-538AC6DAF8B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {40FB8907-9CF7-44D0-8B5F-538AC6DAF8B9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {40FB8907-9CF7-44D0-8B5F-538AC6DAF8B9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {40FB8907-9CF7-44D0-8B5F-538AC6DAF8B9}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -1628,6 +1640,8 @@ Global
{DFAF8763-D1D6-4EB4-B459-20E31007FE2F} = {447C8A77-E5F0-4538-8687-7383196D04EA}
{DACD4485-61BE-4DE5-ACAE-4FFABC122500} = {447C8A77-E5F0-4538-8687-7383196D04EA}
{E1051CD0-9262-4869-832D-B951723F4DDE} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6}
+ {DEEB5200-BBF9-464D-9B7E-8FC035A27E94} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6}
+ {40FB8907-9CF7-44D0-8B5F-538AC6DAF8B9} = {447C8A77-E5F0-4538-8687-7383196D04EA}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {BB97ECF4-9A84-433F-A80B-2A3285BDD1D5}
diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/Microsoft/Extensions/DependencyInjection/AbpOpenIdConnectExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/Microsoft/Extensions/DependencyInjection/AbpOpenIdConnectExtensions.cs
index d07cca857f..01e0dd7ae9 100644
--- a/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/Microsoft/Extensions/DependencyInjection/AbpOpenIdConnectExtensions.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Authentication.OpenIdConnect/Microsoft/Extensions/DependencyInjection/AbpOpenIdConnectExtensions.cs
@@ -3,11 +3,15 @@ using System.Threading.Tasks;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.OAuth.Claims;
using Microsoft.AspNetCore.Authentication.OpenIdConnect;
+using Microsoft.AspNetCore.Localization;
+using Microsoft.AspNetCore.RequestLocalization;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Microsoft.IdentityModel.Protocols.OpenIdConnect;
+using Volo.Abp;
using Volo.Abp.AspNetCore.Authentication.OpenIdConnect;
using Volo.Abp.AspNetCore.MultiTenancy;
+using Volo.Abp.Localization;
using Volo.Abp.Security.Claims;
namespace Microsoft.Extensions.DependencyInjection;
@@ -52,6 +56,7 @@ public static class AbpOpenIdConnectExtensions
options.Events.OnTokenValidated = async (context) =>
{
+ var logger = context.HttpContext.RequestServices.GetRequiredService>();
var client = context.HttpContext.RequestServices.GetRequiredService();
try
{
@@ -59,8 +64,28 @@ public static class AbpOpenIdConnectExtensions
}
catch (Exception ex)
{
- var logger = context.HttpContext.RequestServices.GetService>();
- logger?.LogException(ex);
+ logger.LogException(ex);
+ }
+
+ var culture = context.ProtocolMessage.GetParameter("culture");
+ var uiCulture = context.ProtocolMessage.GetParameter("ui-culture");
+ if (CultureHelper.IsValidCultureCode(culture) && CultureHelper.IsValidCultureCode(uiCulture))
+ {
+ context.Response.OnStarting(() =>
+ {
+ logger.LogInformation($"Setting culture and ui-culture to the response. culture: {culture}, ui-culture: {uiCulture}");
+
+ AbpRequestCultureCookieHelper.SetCultureCookie(
+ context.HttpContext,
+ new RequestCulture(culture, uiCulture)
+ );
+
+ return Task.CompletedTask;
+ });
+ }
+ else
+ {
+ logger.LogWarning($"Invalid culture or ui-culture parameter in the OpenIdConnect response. culture: {culture}, ui-culture: {uiCulture}");
}
};
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/AbpAspNetCoreMvcUiBundlingModule.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/AbpAspNetCoreMvcUiBundlingModule.cs
index bdd4cb2a27..f0f7f94439 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/AbpAspNetCoreMvcUiBundlingModule.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/AbpAspNetCoreMvcUiBundlingModule.cs
@@ -1,4 +1,6 @@
-ï»żusing Volo.Abp.AspNetCore.Mvc.UI.Bootstrap;
+ï»żusing Volo.Abp.AspNetCore.Mvc.Libs;
+using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap;
+using Volo.Abp.Data;
using Volo.Abp.Minify;
using Volo.Abp.Modularity;
@@ -11,5 +13,14 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling;
)]
public class AbpAspNetCoreMvcUiBundlingModule : AbpModule
{
-
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ if (!context.Services.IsDataMigrationEnvironment())
+ {
+ Configure(options =>
+ {
+ options.CheckLibs = true;
+ });
+ }
+ }
}
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/ScriptTagHelper.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/ScriptTagHelper.cs
index 452b726c96..69b4aac627 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/ScriptTagHelper.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/ScriptTagHelper.cs
@@ -10,6 +10,9 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers;
public class ScriptTagHelper : AbpTagHelper
{
protected AbpBundlingOptions Options { get; }
+
+ [HtmlAttributeName("deferred")]
+ public bool? Deferred { get; set; }
public ScriptTagHelper(IOptions options)
{
@@ -17,6 +20,16 @@ public class ScriptTagHelper : AbpTagHelper
}
public override void Process(TagHelperContext context, TagHelperOutput output)
{
+ if(Deferred == true)
+ {
+ output.Attributes.Add("defer", "");
+ return;
+ }
+ else if (Deferred == false)
+ {
+ return;
+ }
+
if (Options.DeferScriptsByDefault)
{
output.Attributes.Add("defer", "");
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/sv.json b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/sv.json
new file mode 100644
index 0000000000..66737dc8e1
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/sv.json
@@ -0,0 +1,13 @@
+{
+ "culture": "sv",
+ "texts": {
+ "GivenTenantIsNotExist": "Given hyresgÀst existerar inte: {0}",
+ "GivenTenantIsNotAvailable": "Angiven hyresgÀst Àr inte tillgÀnglig: {0}",
+ "Tenant": "HyresgÀst",
+ "Switch": "VĂ€xla",
+ "Name": "Namn",
+ "SwitchTenantHint": "LÀmna namnfÀltet tomt för att vÀxla till vÀrdsidan.",
+ "SwitchTenant": "Byta hyresgÀst",
+ "NotSelected": "Ej vald"
+ }
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js
index c9f7e09c07..3199900536 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/bootstrap/dom-event-handlers.js
@@ -210,7 +210,7 @@
abp.dom.initializers.initializeForms(args.$el.findWithSelf('form'), true);
abp.dom.initializers.initializeScript(args.$el);
abp.dom.initializers.initializeAutocompleteSelects(args.$el.findWithSelf('.auto-complete-select'));
- abp.dom.initializers.initializeAbpCspStyles($("link[abp-csp-style]"));
+ abp.dom.initializers.initializeAbpCspStyles(args.$el.findWithSelf("link[abp-csp-style]"));
});
abp.dom.onNodeRemoved(function (args) {
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/date-range-picker/date-range-picker-extensions.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/date-range-picker/date-range-picker-extensions.js
index 44615e5acd..01fe50dec3 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/date-range-picker/date-range-picker-extensions.js
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/date-range-picker/date-range-picker-extensions.js
@@ -613,7 +613,7 @@
});
$input.on('show.daterangepicker', function (ev, picker) {
- const today = moment();
+ const today = moment().startOf('day');
if(isEmptyDate(startDate, options)){
picker.setStartDate(today);
}else{
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs
index 7b68fca32d..379523b659 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs
@@ -32,6 +32,7 @@ using Volo.Abp.AspNetCore.Mvc.DataAnnotations;
using Volo.Abp.AspNetCore.Mvc.DependencyInjection;
using Volo.Abp.AspNetCore.Mvc.Infrastructure;
using Volo.Abp.AspNetCore.Mvc.Json;
+using Volo.Abp.AspNetCore.Mvc.Libs;
using Volo.Abp.AspNetCore.Mvc.Localization;
using Volo.Abp.AspNetCore.VirtualFileSystem;
using Volo.Abp.DependencyInjection;
@@ -231,6 +232,7 @@ public class AbpAspNetCoreMvcModule : AbpModule
public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
AddApplicationParts(context);
+ CheckLibs(context);
}
private static void AddApplicationParts(ApplicationInitializationContext context)
@@ -277,4 +279,9 @@ public class AbpAspNetCoreMvcModule : AbpModule
partManager.ApplicationParts.AddIfNotContains(moduleAssembly);
}
}
+
+ private static void CheckLibs(ApplicationInitializationContext context)
+ {
+ context.ServiceProvider.GetRequiredService().CheckLibs(context);
+ }
}
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs
index d2abae0902..3b60e74d78 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs
@@ -75,10 +75,18 @@ public class AbpExceptionFilter : IAsyncExceptionFilter, IAbpFilter, ITransientD
}
else
{
- context.HttpContext.Response.Headers.Add(AbpHttpConsts.AbpErrorFormat, "true");
- context.HttpContext.Response.StatusCode = (int)context
- .GetRequiredService()
- .GetStatusCode(context.HttpContext, context.Exception);
+ if (!context.HttpContext.Response.HasStarted)
+ {
+ context.HttpContext.Response.Headers.Add(AbpHttpConsts.AbpErrorFormat, "true");
+ context.HttpContext.Response.StatusCode = (int)context
+ .GetRequiredService()
+ .GetStatusCode(context.HttpContext, context.Exception);
+ }
+ else
+ {
+ var logger = context.GetService>(NullLogger.Instance)!;
+ logger.LogWarning("HTTP response has already started, cannot set headers and status code!");
+ }
context.Result = new ObjectResult(new RemoteServiceErrorResponse(remoteServiceErrorInfo));
}
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionPageFilter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionPageFilter.cs
index f404f52e5d..56814718b6 100644
--- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionPageFilter.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionPageFilter.cs
@@ -103,10 +103,17 @@ public class AbpExceptionPageFilter : IAsyncPageFilter, IAbpFilter, ITransientDe
}
else
{
- context.HttpContext.Response.Headers.Add(AbpHttpConsts.AbpErrorFormat, "true");
- context.HttpContext.Response.StatusCode = (int)context
- .GetRequiredService()
- .GetStatusCode(context.HttpContext, context.Exception!);
+ if (!context.HttpContext.Response.HasStarted)
+ {
+ context.HttpContext.Response.Headers.Add(AbpHttpConsts.AbpErrorFormat, "true");
+ context.HttpContext.Response.StatusCode = (int)context
+ .GetRequiredService()
+ .GetStatusCode(context.HttpContext, context.Exception!);
+ }
+ else
+ {
+ logger.LogWarning("HTTP response has already started, cannot set headers and status code!");
+ }
context.Result = new ObjectResult(new RemoteServiceErrorResponse(remoteServiceErrorInfo));
}
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/AbpMvcLibsOptions.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/AbpMvcLibsOptions.cs
new file mode 100644
index 0000000000..d166528a05
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/AbpMvcLibsOptions.cs
@@ -0,0 +1,6 @@
+namespace Volo.Abp.AspNetCore.Mvc.Libs;
+
+public class AbpMvcLibsOptions
+{
+ public bool CheckLibs { get; set; }
+}
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/AbpMvcLibsService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/AbpMvcLibsService.cs
new file mode 100644
index 0000000000..b59cbefa45
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/AbpMvcLibsService.cs
@@ -0,0 +1,100 @@
+using System;
+using System.Linq;
+using System.Net;
+using System.Text;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
+using Microsoft.Extensions.FileProviders;
+using Volo.Abp.DependencyInjection;
+
+namespace Volo.Abp.AspNetCore.Mvc.Libs;
+
+public class AbpMvcLibsService : IAbpMvcLibsService, ITransientDependency
+{
+ private Task? _checkLibsTask;
+
+ public virtual void CheckLibs(ApplicationInitializationContext context)
+ {
+ var options = context.ServiceProvider.GetRequiredService>().Value;
+ if (options.CheckLibs)
+ {
+ var app = context.GetApplicationBuilderOrNull();
+ if (app == null)
+ {
+ var logger = context.ServiceProvider.GetRequiredService>();
+ logger.LogWarning($"The {nameof(IApplicationBuilder)} is not available. The 'CheckLibs' feature is disabled!");
+ return;
+ }
+
+ app.Use(async (httpContext, next) =>
+ {
+ if (!await CheckLibsAsyncOnceAsync(httpContext))
+ {
+ httpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
+ httpContext.Response.ContentType = "text/html";
+ await httpContext.Response.WriteAsync(
+ "" +
+ " " +
+ " Error - The Libs folder is missing!" +
+ " " +
+ " " +
+ " ⚠️ The Libs folder under the wwwroot/libs directory is empty!
" +
+ " The Libs folder contains mandatory NPM Packages for running the project.
" +
+ " Make sure you run the abp install-libs CLI tool command.
" +
+ " For more information, check out the ABP CLI documentation
" +
+ " " +
+ "",
+ Encoding.UTF8
+ );
+ return;
+ }
+
+ await next(httpContext);
+ });
+ }
+ }
+
+ protected virtual Task CheckLibsAsyncOnceAsync(HttpContext httpContext)
+ {
+ if (_checkLibsTask == null)
+ {
+ _checkLibsTask = CheckLibsAsync(httpContext);
+ }
+
+ return _checkLibsTask;
+ }
+
+ protected virtual Task CheckLibsAsync(HttpContext httpContext)
+ {
+ var logger = httpContext.RequestServices.GetRequiredService>();
+ try
+ {
+ var webHostEnvironment = httpContext.RequestServices.GetRequiredService();
+ if (webHostEnvironment.WebRootPath.IsNullOrWhiteSpace())
+ {
+ logger.LogWarning("The 'WebRootPath' is not set! The 'CheckLibs' feature is disabled!");
+ return Task.FromResult(true);
+ }
+
+ var fileProvider = new PhysicalFileProvider(webHostEnvironment.WebRootPath);
+ var libsFolder = fileProvider.GetDirectoryContents("/libs");
+ if (!libsFolder.Exists || !libsFolder.Any())
+ {
+ logger.LogError("The 'wwwroot/libs' folder does not exist or empty!");
+ return Task.FromResult(false);
+ }
+ }
+ catch (Exception e)
+ {
+ // In case of any exception, log it and return true to prevent crashing the application.
+ logger.LogError(e, "An error occurred while checking the libs folder!");
+ }
+
+ return Task.FromResult(true);
+ }
+}
diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/IAbpMvcLibsService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/IAbpMvcLibsService.cs
new file mode 100644
index 0000000000..98a88184e8
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/IAbpMvcLibsService.cs
@@ -0,0 +1,6 @@
+namespace Volo.Abp.AspNetCore.Mvc.Libs;
+
+public interface IAbpMvcLibsService
+{
+ void CheckLibs(ApplicationInitializationContext context);
+}
diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/ApplicationInitializationContextExtensions.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/ApplicationInitializationContextExtensions.cs
index 045b293489..1f6e3c17bf 100644
--- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/ApplicationInitializationContextExtensions.cs
+++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/ApplicationInitializationContextExtensions.cs
@@ -12,7 +12,14 @@ public static class ApplicationInitializationContextExtensions
{
public static IApplicationBuilder GetApplicationBuilder(this ApplicationInitializationContext context)
{
- return context.ServiceProvider.GetRequiredService>().Value!;
+ var applicationBuilder = context.ServiceProvider.GetRequiredService>().Value;
+ Check.NotNull(applicationBuilder, nameof(applicationBuilder));
+ return applicationBuilder;
+ }
+
+ public static IApplicationBuilder? GetApplicationBuilderOrNull(this ApplicationInitializationContext context)
+ {
+ return context.ServiceProvider.GetRequiredService>().Value;
}
public static IWebHostEnvironment GetEnvironment(this ApplicationInitializationContext context)
diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Security/Claims/AbpDynamicClaimsMiddleware.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Security/Claims/AbpDynamicClaimsMiddleware.cs
index d2c328f2ae..b2bbb78e7b 100644
--- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Security/Claims/AbpDynamicClaimsMiddleware.cs
+++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Security/Claims/AbpDynamicClaimsMiddleware.cs
@@ -2,6 +2,7 @@ using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Http.Features.Authentication;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Volo.Abp.AspNetCore.Middleware;
@@ -18,9 +19,21 @@ public class AbpDynamicClaimsMiddleware : AbpMiddlewareBase, ITransientDependenc
{
if (context.RequestServices.GetRequiredService>().Value.IsDynamicClaimsEnabled)
{
- var authenticationType = context.User.Identity.AuthenticationType;
- var abpClaimsPrincipalFactory = context.RequestServices.GetRequiredService();
- context.User = await abpClaimsPrincipalFactory.CreateDynamicAsync(context.User);
+ var authenticateResultFeature = context.Features.Get();
+ var authenticationType = authenticateResultFeature?.AuthenticateResult?.Ticket?.AuthenticationScheme ?? context.User.Identity.AuthenticationType;
+
+ if (authenticateResultFeature != null && !authenticationType.IsNullOrWhiteSpace())
+ {
+ var abpClaimsPrincipalFactory = context.RequestServices.GetRequiredService();
+ var user = await abpClaimsPrincipalFactory.CreateDynamicAsync(context.User);
+
+ authenticateResultFeature.AuthenticateResult = AuthenticateResult.Success(new AuthenticationTicket(user, authenticationType));
+ var httpAuthenticationFeature = context.Features.Get();
+ if (httpAuthenticationFeature != null)
+ {
+ httpAuthenticationFeature.User = authenticateResultFeature.AuthenticateResult.Principal;
+ }
+ }
if (context.User.Identity?.IsAuthenticated == false)
{
diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/sv.json b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/sv.json
new file mode 100644
index 0000000000..eabdca7cd1
--- /dev/null
+++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/sv.json
@@ -0,0 +1,10 @@
+{
+ "culture": "sv",
+ "texts": {
+ "Volo.Authorization:010001": "Auktorisering misslyckades! Angiven policy har inte beviljats.",
+ "Volo.Authorization:010002": "Auktorisering misslyckades! Angiven policy har inte beviljat: {Policynamn}",
+ "Volo.Authorization:010003": "Auktorisering misslyckades! Given policy har inte beviljats för given resurs: {Resursnamn}",
+ "Volo.Authorization:010004": "Auktorisering misslyckades! Givet krav har inte beviljats för given resurs: {Resursnamn}",
+ "Volo.Authorization:010005": "Auktorisering misslyckades! Givet krav har inte beviljats för given resurs: {Resursnamn}"
+ }
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.BlobStoring.Google/Volo.Abp.BlobStoring.Google.csproj b/framework/src/Volo.Abp.BlobStoring.Google/Volo.Abp.BlobStoring.Google.csproj
new file mode 100644
index 0000000000..073c8c1891
--- /dev/null
+++ b/framework/src/Volo.Abp.BlobStoring.Google/Volo.Abp.BlobStoring.Google.csproj
@@ -0,0 +1,24 @@
+ï»ż
+
+
+
+
+
+ netstandard2.0;netstandard2.1;net8.0
+ enable
+ Nullable
+ Volo.Abp.BlobStoring.Google
+ Volo.Abp.BlobStoring.Google
+ $(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
+ false
+ false
+ false
+
+
+
+
+
+
+
+
+
diff --git a/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/AbpBlobStoringGoogleModule.cs b/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/AbpBlobStoringGoogleModule.cs
new file mode 100644
index 0000000000..f5243fda15
--- /dev/null
+++ b/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/AbpBlobStoringGoogleModule.cs
@@ -0,0 +1,9 @@
+using Volo.Abp.Modularity;
+
+namespace Volo.Abp.BlobStoring.Google;
+
+[DependsOn(typeof(AbpBlobStoringModule))]
+public class AbpBlobStoringGoogleModule : AbpModule
+{
+
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/DefaultGoogleBlobNameCalculator.cs b/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/DefaultGoogleBlobNameCalculator.cs
new file mode 100644
index 0000000000..fec52b44d1
--- /dev/null
+++ b/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/DefaultGoogleBlobNameCalculator.cs
@@ -0,0 +1,21 @@
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.MultiTenancy;
+
+namespace Volo.Abp.BlobStoring.Google;
+
+public class DefaultGoogleBlobNameCalculator : IGoogleBlobNameCalculator, ITransientDependency
+{
+ protected ICurrentTenant CurrentTenant { get; }
+
+ public DefaultGoogleBlobNameCalculator(ICurrentTenant currentTenant)
+ {
+ CurrentTenant = currentTenant;
+ }
+
+ public virtual string Calculate(BlobProviderArgs args)
+ {
+ return CurrentTenant.Id == null
+ ? $"host/{args.BlobName}"
+ : $"tenants/{CurrentTenant.Id.Value.ToString("D")}/{args.BlobName}";
+ }
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/GoogleBlobContainerConfigurationExtensions.cs b/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/GoogleBlobContainerConfigurationExtensions.cs
new file mode 100644
index 0000000000..3c0efd4c86
--- /dev/null
+++ b/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/GoogleBlobContainerConfigurationExtensions.cs
@@ -0,0 +1,24 @@
+using System;
+
+namespace Volo.Abp.BlobStoring.Google;
+
+public static class GoogleBlobContainerConfigurationExtensions
+{
+ public static GoogleBlobProviderConfiguration GetGoogleConfiguration(
+ this BlobContainerConfiguration containerConfiguration)
+ {
+ return new GoogleBlobProviderConfiguration(containerConfiguration);
+ }
+
+ public static BlobContainerConfiguration UseGoogle(
+ this BlobContainerConfiguration containerConfiguration,
+ Action googleConfigureAction)
+ {
+ containerConfiguration.ProviderType = typeof(GoogleBlobProvider);
+ containerConfiguration.NamingNormalizers.TryAdd();
+
+ googleConfigureAction(new GoogleBlobProviderConfiguration(containerConfiguration));
+
+ return containerConfiguration;
+ }
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/GoogleBlobNamingNormalizer.cs b/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/GoogleBlobNamingNormalizer.cs
new file mode 100644
index 0000000000..8dc840d805
--- /dev/null
+++ b/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/GoogleBlobNamingNormalizer.cs
@@ -0,0 +1,120 @@
+using System.Globalization;
+using System.Text.RegularExpressions;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Localization;
+
+namespace Volo.Abp.BlobStoring.Google;
+
+public class GoogleBlobNamingNormalizer : IBlobNamingNormalizer, ITransientDependency
+{
+ ///
+ /// https://cloud.google.com/storage/docs/buckets#naming
+ ///
+ public string NormalizeContainerName(string containerName)
+ {
+ using (CultureHelper.Use(CultureInfo.InvariantCulture))
+ {
+ // All letters in a Bucket name must be lowercase.
+ containerName = containerName.ToLower();
+
+ // Bucket names must contain 3-63 characters. Names containing dots can contain up to 222 characters, but each dot-separated component can be no longer than 63 characters.
+ if(containerName.Contains("."))
+ {
+ if (containerName.Length > 222)
+ {
+ containerName = containerName.Substring(0, 222);
+ }
+
+ var parts = containerName.Split('.');
+ for (var i = 0; i < parts.Length; i++)
+ {
+ if (parts[i].Length > 63)
+ {
+ parts[i] = parts[i].Substring(0, 63);
+ }
+ }
+
+ containerName = string.Join(".", parts);
+ }
+ else if (containerName.Length > 63)
+ {
+ containerName = containerName.Substring(0, 63);
+ }
+
+ //Bucket names can only contain lowercase letters, numeric characters, dashes (-), underscores (_), and dots (.). Spaces are not allowed. Names containing dots require verification.
+ containerName = Regex.Replace(containerName, "[^a-z0-9-_.]", string.Empty);
+
+ //Be a syntactically valid DNS name (for example, bucket..example.com is not valid because it contains two dots in a row).
+ containerName = Regex.Replace(containerName, "[.]{2,}", ".");
+
+ //Bucket names cannot be represented as an IP address in dotted-decimal notation (for example, 192.168.5.4).
+ containerName = Regex.Replace(containerName, "^(?:(?:^|\\.)(?:2(?:5[0-5]|[0-4]\\d)|1?\\d?\\d)){4}$", string.Empty);
+
+ //Bucket names cannot begin with the "goog" prefix.
+ containerName = Regex.Replace(containerName, "^goog", string.Empty);
+
+ //Bucket names cannot contain "google" or close misspellings, such as "g00gle".
+ containerName = Regex.Replace(containerName, "google", string.Empty);
+
+ //Bucket names must start and end with a number or letter.
+ containerName = RemoveInvalidStartEndCharacters(containerName);
+
+ // Bucket names must be from 3 through 63 characters long. Names containing dots can contain up to 222 characters.
+ if (containerName.Length < 3)
+ {
+ var length = containerName.Length;
+ for (var i = 0; i < 3 - length; i++)
+ {
+ containerName += "0";
+ }
+ }
+
+ return containerName;
+ }
+ }
+
+ protected virtual string RemoveInvalidStartEndCharacters(string containerName)
+ {
+ if (string.IsNullOrWhiteSpace(containerName))
+ {
+ return containerName;
+ }
+
+ if (!char.IsLetterOrDigit(containerName[0]))
+ {
+ containerName = containerName.Substring(1);
+ return RemoveInvalidStartEndCharacters(containerName);
+ }
+
+ if (!char.IsLetterOrDigit(containerName[containerName.Length - 1]))
+ {
+ containerName = containerName.Substring(0, containerName.Length - 1);
+ return RemoveInvalidStartEndCharacters(containerName);
+ }
+
+ return containerName;
+ }
+
+ ///
+ /// https://cloud.google.com/storage/docs/objects#naming
+ ///
+ public string NormalizeBlobName(string blobName)
+ {
+ //Object names can contain any sequence of valid Unicode characters, of length 1-1024 bytes when UTF-8 encoded
+ if (blobName.Length > 1024)
+ {
+ blobName = blobName.Substring(0, 1024);
+ }
+
+ //Object names cannot contain Carriage Return or Line Feed characters.
+ blobName = Regex.Replace(blobName, "[\r\n]", string.Empty);
+
+ //Object names cannot start with .well-known/acme-challenge/.
+ blobName = Regex.Replace(blobName, "^\\.well-known/acme-challenge/", string.Empty);
+
+ //Objects cannot be named . or ...
+ blobName = Regex.Replace(blobName, "^\\.\\.?$", string.Empty);
+
+ return blobName;
+ }
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/GoogleBlobProvider.cs b/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/GoogleBlobProvider.cs
new file mode 100644
index 0000000000..cd5dc21d7f
--- /dev/null
+++ b/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/GoogleBlobProvider.cs
@@ -0,0 +1,161 @@
+using System;
+using System.IO;
+using System.Net;
+using System.Threading.Tasks;
+using Google;
+using Google.Apis.Auth.OAuth2;
+using Google.Cloud.Storage.V1;
+using Volo.Abp.DependencyInjection;
+
+namespace Volo.Abp.BlobStoring.Google;
+
+public class GoogleBlobProvider : BlobProviderBase, ITransientDependency
+{
+ protected IGoogleBlobNameCalculator GoogleBlobNameCalculator { get; }
+ protected IBlobNormalizeNamingService BlobNormalizeNamingService { get; }
+
+ public GoogleBlobProvider(IGoogleBlobNameCalculator googleBlobNameCalculator, IBlobNormalizeNamingService blobNormalizeNamingService)
+ {
+ GoogleBlobNameCalculator = googleBlobNameCalculator;
+ BlobNormalizeNamingService = blobNormalizeNamingService;
+ }
+
+ public async override Task SaveAsync(BlobProviderSaveArgs args)
+ {
+ var configuration = args.Configuration.GetGoogleConfiguration();
+ var storageClient = await GetStorageClientClientAsync(args);
+ var blobName = GoogleBlobNameCalculator.Calculate(args);
+ var containerName = GetContainerName(args);
+
+ if (await BlobExistsAsync(args, blobName) && !args.OverrideExisting)
+ {
+ throw new BlobAlreadyExistsException($"Saving BLOB '{args.BlobName}' does already exists in the container '{GetContainerName(args)}'! Set {nameof(args.OverrideExisting)} if it should be overwritten.");
+ }
+
+ if (configuration.CreateContainerIfNotExists)
+ {
+ await CreateContainerIfNotExists(args);
+ }
+
+ await storageClient.UploadObjectAsync(containerName, blobName, contentType: "application/octet-stream", args.BlobStream);
+ }
+
+ public async override Task DeleteAsync(BlobProviderDeleteArgs args)
+ {
+ var storageClient = await GetStorageClientClientAsync(args);
+ var blobName = GoogleBlobNameCalculator.Calculate(args);
+ var containerName = GetContainerName(args);
+
+ try
+ {
+ await storageClient.DeleteObjectAsync(containerName, blobName);
+ }
+ catch (GoogleApiException e) when (e.HttpStatusCode == HttpStatusCode.NotFound)
+ {
+ return true;
+ }
+
+ return true;
+ }
+
+ public async override Task ExistsAsync(BlobProviderExistsArgs args)
+ {
+ var blobName = GoogleBlobNameCalculator.Calculate(args);
+ return await BlobExistsAsync(args, blobName);
+ }
+
+ public async override Task GetOrNullAsync(BlobProviderGetArgs args)
+ {
+ var storageClient = await GetStorageClientClientAsync(args);
+ var blobName = GoogleBlobNameCalculator.Calculate(args);
+ var containerName = GetContainerName(args);
+
+ if(!await BlobExistsAsync(args, blobName))
+ {
+ return null;
+ }
+
+ var stream = new MemoryStream();
+
+ await storageClient.DownloadObjectAsync(containerName, blobName, stream);
+
+ stream.Seek(0, SeekOrigin.Begin);
+
+ return stream;
+ }
+
+ protected virtual string GetContainerName(BlobProviderArgs args)
+ {
+ var configuration = args.Configuration.GetGoogleConfiguration();
+ return configuration.ContainerName.IsNullOrWhiteSpace()
+ ? args.ContainerName
+ : BlobNormalizeNamingService.NormalizeContainerName(args.Configuration, configuration.ContainerName!);
+ }
+
+ protected virtual async Task BlobExistsAsync(BlobProviderArgs args, string blobName)
+ {
+ var storageClient = await GetStorageClientClientAsync(args);
+ if(!await ContainerExistsAsync(args, storageClient))
+ {
+ return false;
+ }
+
+ try
+ {
+ await storageClient.GetObjectAsync(GetContainerName(args), blobName);
+ }
+ catch (GoogleApiException e) when (e.HttpStatusCode == HttpStatusCode.NotFound)
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ protected virtual async Task CreateContainerIfNotExists(BlobProviderArgs args)
+ {
+ var storageClient = await GetStorageClientClientAsync(args);
+ var configuration = args.Configuration.GetGoogleConfiguration();
+ if(await ContainerExistsAsync(args, storageClient))
+ {
+ return;
+ }
+
+ await storageClient.CreateBucketAsync(configuration.ProjectId, GetContainerName(args));
+ }
+
+ protected virtual async Task ContainerExistsAsync(BlobProviderArgs args, StorageClient client)
+ {
+ try
+ {
+ await client.GetBucketAsync(GetContainerName(args));
+ }
+ catch (GoogleApiException e) when (e.HttpStatusCode == HttpStatusCode.NotFound)
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ protected virtual async Task GetStorageClientClientAsync(BlobProviderArgs args)
+ {
+ var configuration = args.Configuration.GetGoogleConfiguration();
+ if (configuration.UseApplicationDefaultCredentials)
+ {
+ return await StorageClient.CreateAsync();
+ }
+
+ var googleCredential = GoogleCredential.FromServiceAccountCredential(
+ new ServiceAccountCredential(
+ new ServiceAccountCredential.Initializer(configuration.ClientEmail)
+ {
+ ProjectId = configuration.ProjectId,
+ Scopes = configuration.Scopes
+ }
+ .FromPrivateKey(configuration.PrivateKey)
+ ));
+
+ return await StorageClient.CreateAsync(googleCredential);
+ }
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/GoogleBlobProviderConfiguration.cs b/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/GoogleBlobProviderConfiguration.cs
new file mode 100644
index 0000000000..39db24f700
--- /dev/null
+++ b/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/GoogleBlobProviderConfiguration.cs
@@ -0,0 +1,79 @@
+using System.Collections.Generic;
+
+namespace Volo.Abp.BlobStoring.Google;
+
+public class GoogleBlobProviderConfiguration
+{
+ private readonly BlobContainerConfiguration _containerConfiguration;
+
+ public GoogleBlobProviderConfiguration(BlobContainerConfiguration containerConfiguration)
+ {
+ _containerConfiguration = containerConfiguration;
+ }
+
+ ///
+ /// Unique identifier for your project.
+ /// For more info see: https://cloud.google.com/resource-manager/docs/creating-managing-projects
+ ///
+ public string? ProjectId {
+ get => _containerConfiguration.GetConfigurationOrDefault(GoogleBlobProviderConfigurationNames.ProjectId);
+ set => _containerConfiguration.SetConfiguration(GoogleBlobProviderConfigurationNames.ProjectId, value);
+ }
+
+ ///
+ /// Email address that generated by the Google Cloud.
+ ///
+ public string? ClientEmail {
+ get => _containerConfiguration.GetConfigurationOrDefault(GoogleBlobProviderConfigurationNames.ClientEmail);
+ set => _containerConfiguration.SetConfiguration(GoogleBlobProviderConfigurationNames.ClientEmail, value);
+ }
+
+ ///
+ /// Private key that generated by Google Cloud.
+ /// Starts with '-----BEGIN PRIVATE KEY-----'
+ /// and ends with '-----END PRIVATE KEY-----'
+ ///
+ public string? PrivateKey {
+ get => _containerConfiguration.GetConfigurationOrDefault(GoogleBlobProviderConfigurationNames.PrivateKey);
+ set => _containerConfiguration.SetConfiguration(GoogleBlobProviderConfigurationNames.PrivateKey, value);
+ }
+
+ ///
+ /// Available OAuth 2.0 scopes.
+ ///
+ public List? Scopes {
+ get => _containerConfiguration.GetConfigurationOrDefault(GoogleBlobProviderConfigurationNames.Scopes, new List());
+ set => _containerConfiguration.SetConfiguration(GoogleBlobProviderConfigurationNames.Scopes, value);
+ }
+
+ ///
+ /// Use the application default credentials. https://cloud.google.com/docs/authentication/provide-credentials-adc
+ /// Default value: false.
+ ///
+ public bool UseApplicationDefaultCredentials {
+ get => _containerConfiguration.GetConfigurationOrDefault(GoogleBlobProviderConfigurationNames.UseApplicationDefaultCredentials, false);
+ set => _containerConfiguration.SetConfiguration(GoogleBlobProviderConfigurationNames.UseApplicationDefaultCredentials, value);
+ }
+
+ ///
+ /// The name can only contain lowercase letters, numeric characters, dashes (-), underscores (_), and dots (.). Spaces are not allowed. Names containing dots require verification.
+ /// Must start and end with a number or letter.
+ /// Must contain 3-63 characters. Names containing dots can contain up to 222 characters, but each dot-separated component can be no longer than 63 characters.
+ /// Cannot be represented as an IP address in dotted-decimal notation (for example, 192.168.5.4).
+ /// Cannot begin with the "goog" prefix.
+ /// Cannot contain "google" or close misspellings, such as "g00gle".
+ /// If this parameter is not specified, the ContainerName of the will be used.
+ ///
+ public string? ContainerName {
+ get => _containerConfiguration.GetConfigurationOrDefault(GoogleBlobProviderConfigurationNames.ContainerName);
+ set => _containerConfiguration.SetConfiguration(GoogleBlobProviderConfigurationNames.ContainerName, value);
+ }
+
+ ///
+ /// Default value: false.
+ ///
+ public bool CreateContainerIfNotExists {
+ get => _containerConfiguration.GetConfigurationOrDefault(GoogleBlobProviderConfigurationNames.CreateContainerIfNotExists, false);
+ set => _containerConfiguration.SetConfiguration(GoogleBlobProviderConfigurationNames.CreateContainerIfNotExists, value);
+ }
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/GoogleBlobProviderConfigurationNames.cs b/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/GoogleBlobProviderConfigurationNames.cs
new file mode 100644
index 0000000000..c682c693c8
--- /dev/null
+++ b/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/GoogleBlobProviderConfigurationNames.cs
@@ -0,0 +1,12 @@
+namespace Volo.Abp.BlobStoring.Google;
+
+public static class GoogleBlobProviderConfigurationNames
+{
+ public const string ProjectId = "Google.ProjectId";
+ public const string ClientEmail = "Google.ClientEmail";
+ public const string PrivateKey = "Google.PrivateKey";
+ public const string Scopes = "Google.Scopes";
+ public const string UseApplicationDefaultCredentials = "Google.ApplicationDefaultCredentials";
+ public const string ContainerName = "Google.ContainerName";
+ public const string CreateContainerIfNotExists = "Google.CreateContainerIfNotExists";
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/IGoogleBlobNameCalculator.cs b/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/IGoogleBlobNameCalculator.cs
new file mode 100644
index 0000000000..8099c6fa8c
--- /dev/null
+++ b/framework/src/Volo.Abp.BlobStoring.Google/Volo/Abp/BlobStoring/Google/IGoogleBlobNameCalculator.cs
@@ -0,0 +1,6 @@
+namespace Volo.Abp.BlobStoring.Google;
+
+public interface IGoogleBlobNameCalculator
+{
+ string Calculate(BlobProviderArgs args);
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Http/UrlHelpers.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Http/UrlHelpers.cs
new file mode 100644
index 0000000000..30e5e81be2
--- /dev/null
+++ b/framework/src/Volo.Abp.Core/Volo/Abp/Http/UrlHelpers.cs
@@ -0,0 +1,28 @@
+using System;
+
+namespace Volo.Abp.Http;
+
+public static class UrlHelpers
+{
+ private const string WildcardSubdomain = "*.";
+
+ public static bool IsSubdomainOf(string subdomain, string domain)
+ {
+ if (Uri.TryCreate(subdomain, UriKind.Absolute, out var subdomainUri) &&
+ Uri.TryCreate(domain.Replace(WildcardSubdomain, string.Empty), UriKind.Absolute, out var domainUri))
+ {
+ return domainUri == subdomainUri || IsSubdomainOf(subdomainUri, domainUri);
+ }
+
+ return false;
+ }
+
+ public static bool IsSubdomainOf(Uri subdomain, Uri domain)
+ {
+ return subdomain.IsAbsoluteUri
+ && domain.IsAbsoluteUri
+ && subdomain.Scheme == domain.Scheme
+ && subdomain.Port == domain.Port
+ && subdomain.Host.EndsWith($".{domain.Host}", StringComparison.Ordinal);
+ }
+}
diff --git a/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/sv.json b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/sv.json
new file mode 100644
index 0000000000..f77f85e6c9
--- /dev/null
+++ b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/sv.json
@@ -0,0 +1,6 @@
+{
+ "culture": "sv",
+ "texts": {
+ "MaxResultCountExceededExceptionMessage": "{0} kan inte vara mer Ă€n {1}! Ăka {2}.{3} pĂ„ serversidan för att tillĂ„ta fler resultat."
+ }
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/sv.json b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/sv.json
new file mode 100644
index 0000000000..f63a0177f1
--- /dev/null
+++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/sv.json
@@ -0,0 +1,25 @@
+{
+ "culture": "sv",
+ "texts": {
+ "DisplayName:Abp.Mailing.DefaultFromAddress": "Standard frÄn adress",
+ "DisplayName:Abp.Mailing.DefaultFromDisplayName": "Standard frÄn visningsnamn",
+ "DisplayName:Abp.Mailing.Smtp.Host": "VĂ€rd",
+ "DisplayName:Abp.Mailing.Smtp.Port": "Port",
+ "DisplayName:Abp.Mailing.Smtp.UserName": "AnvÀndarens namn",
+ "DisplayName:Abp.Mailing.Smtp.Password": "Lösenord",
+ "DisplayName:Abp.Mailing.Smtp.Domain": "DomÀn",
+ "DisplayName:Abp.Mailing.Smtp.EnableSsl": "Aktivera SSL",
+ "DisplayName:Abp.Mailing.Smtp.UseDefaultCredentials": "AnvÀnda standardautentiseringsuppgifter",
+ "Description:Abp.Mailing.DefaultFromAddress": "Standardadressen frÄn",
+ "Description:Abp.Mailing.DefaultFromDisplayName": "Standard frÄn visningsnamn",
+ "Description:Abp.Mailing.Smtp.Host": "Namnet pÄ eller IP-adressen till den vÀrd som anvÀnds för SMTP-transaktioner.",
+ "Description:Abp.Mailing.Smtp.Port": "Den port som anvÀnds för SMTP-transaktioner.",
+ "Description:Abp.Mailing.Smtp.UserName": "AnvÀndarnamn som Àr kopplat till autentiseringsuppgifterna.",
+ "Description:Abp.Mailing.Smtp.Password": "Lösenordet för det anvÀndarnamn som Àr kopplat till autentiseringsuppgifterna.",
+ "Description:Abp.Mailing.Smtp.Domain": "DomÀn- eller datornamnet som verifierar autentiseringsuppgifterna.",
+ "Description:Abp.Mailing.Smtp.EnableSsl": "Om SmtpClient anvÀnder SSL (Secure Sockets Layer) för att kryptera anslutningen.",
+ "Description:Abp.Mailing.Smtp.UseDefaultCredentials": "Om DefaultCredentials skickas med förfrÄgningar.",
+ "TextTemplate:StandardEmailTemplates.Layout": "Standardmall för e-postlayout",
+ "TextTemplate:StandardEmailTemplates.Message": "Enkel meddelandemall för e-post"
+ }
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs
index b46402e989..c471d89acf 100644
--- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs
+++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs
@@ -282,7 +282,7 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext,
finally
{
ChangeTracker.AutoDetectChangesEnabled = true;
- AbpEfCoreNavigationHelper.Clear();
+ AbpEfCoreNavigationHelper.RemoveChangedEntityEntries();
}
}
@@ -614,7 +614,19 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext,
return;
}
+ ExtraPropertyDictionary? originalExtraProperties = null;
+ if (entry.Entity is IHasExtraProperties)
+ {
+ originalExtraProperties = entry.OriginalValues.GetValue(nameof(IHasExtraProperties.ExtraProperties));
+ }
+
entry.Reload();
+
+ if (entry.Entity is IHasExtraProperties)
+ {
+ ObjectHelper.TrySetProperty(entry.Entity.As(), x => x.ExtraProperties, () => originalExtraProperties);
+ }
+
ObjectHelper.TrySetProperty(entry.Entity.As(), x => x.IsDeleted, () => true);
SetDeletionAuditProperties(entry);
}
diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ChangeTrackers/AbpEfCoreNavigationHelper.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ChangeTrackers/AbpEfCoreNavigationHelper.cs
index 5a5cbe3a94..d56660be57 100644
--- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ChangeTrackers/AbpEfCoreNavigationHelper.cs
+++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/ChangeTrackers/AbpEfCoreNavigationHelper.cs
@@ -199,7 +199,12 @@ public class AbpEfCoreNavigationHelper : ITransientDependency
return null;
}
- public void Clear()
+ public virtual void RemoveChangedEntityEntries()
+ {
+ EntityEntries.RemoveAll(x => x.Value.IsModified);
+ }
+
+ public virtual void Clear()
{
EntityEntries.Clear();
}
diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/sv.json b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/sv.json
new file mode 100644
index 0000000000..614fec5984
--- /dev/null
+++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/sv.json
@@ -0,0 +1,29 @@
+{
+ "culture": "sv",
+ "texts": {
+ "InternalServerErrorMessage": "Ett internt fel uppstod under din förfrÄgan!",
+ "ValidationErrorMessage": "Din begÀran Àr inte giltig!",
+ "ValidationNarrativeErrorMessageTitle": "Följande fel upptÀcktes under valideringen.",
+ "DefaultErrorMessage": "Ett fel har intrÀffat!",
+ "DefaultErrorMessageDetail": "Felinformationen skickades inte av servern.",
+ "DefaultErrorMessage401": "Du Àr inte autentiserad!",
+ "DefaultErrorMessage401Detail": "Du mÄste logga in för att utföra den hÀr ÄtgÀrden.",
+ "DefaultErrorMessage403": "Du Àr inte behörig!",
+ "DefaultErrorMessage403Detail": "Du fÄr inte utföra den hÀr operationen!",
+ "DefaultErrorMessage404": "Resurs hittades inte!",
+ "DefaultErrorMessage404Detail": "Den begÀrda resursen kunde inte hittas pÄ servern!",
+ "EntityNotFoundErrorMessage": "Det finns ingen entitet {0} med id = {1}!",
+ "AbpDbConcurrencyErrorMessage": "De uppgifter du har skickat har redan Àndrats av en annan anvÀndare. Kassera dina Àndringar och försök igen.",
+ "Error": "Fel",
+ "UnhandledException": "Obehandlat undantag!",
+ "401Message": "Obehörig",
+ "403Message": "Förbjudet",
+ "404Message": "Sidan hittades inte",
+ "500Message": "Internt serverfel",
+ "403MessageDetail": "Du Àr inte behörig att utföra denna operation!",
+ "404MessageDetail": "TyvÀrr, det finns inget pÄ den hÀr adressen.",
+ "Unauthorized": "Obehörig",
+ "invalid_token": "Ogiltig token",
+ "SessionExpired": "Din session har löpt ut. VÀnligen logga in igen för att fortsÀtta i applikationen."
+ }
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Features/Volo/Abp/Features/Localization/sv.json b/framework/src/Volo.Abp.Features/Volo/Abp/Features/Localization/sv.json
new file mode 100644
index 0000000000..1a9265526b
--- /dev/null
+++ b/framework/src/Volo.Abp.Features/Volo/Abp/Features/Localization/sv.json
@@ -0,0 +1,8 @@
+{
+ "culture": "sv",
+ "texts": {
+ "Volo.Feature:010001": "Funktionen Àr inte aktiverad: {Funktionsnamn}",
+ "Volo.Feature:010002": "Obligatoriska funktioner Àr inte aktiverade. Alla dessa funktioner mÄste vara aktiverade: {Funktionsnamn}",
+ "Volo.Feature:010003": "NödvĂ€ndiga funktioner Ă€r inte aktiverade. Ă
tminstone en av dessa funktioner mÄste vara aktiverad: {Funktionsnamn}"
+ }
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/Localization/sv.json b/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/Localization/sv.json
new file mode 100644
index 0000000000..1a40be4b57
--- /dev/null
+++ b/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/Localization/sv.json
@@ -0,0 +1,6 @@
+{
+ "culture": "sv",
+ "texts": {
+ "Volo.GlobalFeature:010001": "TjÀnsten '{ServiceName}' mÄste aktivera funktionen '{GlobalFeatureName}'."
+ }
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Ldap.Abstractions/Volo/Abp/Ldap/Localization/sv.json b/framework/src/Volo.Abp.Ldap.Abstractions/Volo/Abp/Ldap/Localization/sv.json
new file mode 100644
index 0000000000..975d036490
--- /dev/null
+++ b/framework/src/Volo.Abp.Ldap.Abstractions/Volo/Abp/Ldap/Localization/sv.json
@@ -0,0 +1,19 @@
+{
+ "culture": "sv",
+ "texts": {
+ "DisplayName:Abp.Ldap.Ldaps": "LDAP över SSL",
+ "Description:Abp.Ldap.Ldaps": "LDAP över SSL",
+ "DisplayName:Abp.Ldap.ServerHost": "ServervÀrd",
+ "Description:Abp.Ldap.ServerHost": "ServervÀrd",
+ "DisplayName:Abp.Ldap.ServerPort": "Serverport",
+ "Description:Abp.Ldap.ServerPort": "Serverport",
+ "DisplayName:Abp.Ldap.BaseDc": "Komponent för basdomÀn",
+ "Description:Abp.Ldap.BaseDc": "Komponent för basdomÀn",
+ "DisplayName:Abp.Ldap.Domain": "DomÀn",
+ "Description:Abp.Ldap.Domain": "DomÀn",
+ "DisplayName:Abp.Ldap.UserName": "AnvÀndarnamn",
+ "Description:Abp.Ldap.UserName": "AnvÀndarnamn",
+ "DisplayName:Abp.Ldap.Password": "Lösenord",
+ "Description:Abp.Ldap.Password": "Lösenord"
+ }
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/sv.json b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/sv.json
new file mode 100644
index 0000000000..684d38ee86
--- /dev/null
+++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/sv.json
@@ -0,0 +1,7 @@
+{
+ "culture": "sv",
+ "texts": {
+ "DisplayName:Abp.Localization.DefaultLanguage": "StandardsprÄk",
+ "Description:Abp.Localization.DefaultLanguage": "StandardsprÄket för programmet."
+ }
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/Localization/sv.json b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/Localization/sv.json
new file mode 100644
index 0000000000..e7f2743f71
--- /dev/null
+++ b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/Localization/sv.json
@@ -0,0 +1,9 @@
+{
+ "culture": "sv",
+ "texts": {
+ "TenantNotFoundMessage": "HyresgÀst inte hittad!",
+ "TenantNotFoundDetails": "Det finns ingen hyresgÀst med hyresgÀst-ID eller namn: {0}",
+ "TenantNotActiveMessage": "HyresgÀsten Àr inte aktiv!",
+ "TenantNotActiveDetails": "HyresgÀsten Àr inte aktiv med hyresgÀst-ID eller namn: {0}"
+ }
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/LocalizedTemplateContentReaderFactory.cs b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/LocalizedTemplateContentReaderFactory.cs
index e0ca815003..001717eb11 100644
--- a/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/LocalizedTemplateContentReaderFactory.cs
+++ b/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/VirtualFiles/LocalizedTemplateContentReaderFactory.cs
@@ -13,16 +13,23 @@ public class LocalizedTemplateContentReaderFactory : ILocalizedTemplateContentRe
protected IVirtualFileProvider VirtualFileProvider { get; }
protected ConcurrentDictionary ReaderCache { get; }
protected SemaphoreSlim SyncObj;
+ protected IAbpHostEnvironment AbpHostEnvironment { get; }
- public LocalizedTemplateContentReaderFactory(IVirtualFileProvider virtualFileProvider)
+ public LocalizedTemplateContentReaderFactory(IVirtualFileProvider virtualFileProvider, IAbpHostEnvironment abpHostEnvironment)
{
VirtualFileProvider = virtualFileProvider;
+ AbpHostEnvironment = abpHostEnvironment;
ReaderCache = new ConcurrentDictionary();
SyncObj = new SemaphoreSlim(1, 1);
}
public virtual async Task CreateAsync(TemplateDefinition templateDefinition)
{
+ if (AbpHostEnvironment.IsDevelopment())
+ {
+ return await CreateInternalAsync(templateDefinition);
+ }
+
if (ReaderCache.TryGetValue(templateDefinition.Name, out var reader))
{
return reader;
diff --git a/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/sv.json b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/sv.json
new file mode 100644
index 0000000000..c98fdf4ed5
--- /dev/null
+++ b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/sv.json
@@ -0,0 +1,7 @@
+{
+ "culture": "sv",
+ "texts": {
+ "DisplayName:Abp.Timing.Timezone": "Tidszon",
+ "Description:Abp.Timing.Timezone": "Tidszon för tillÀmpning"
+ }
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/sv.json b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/sv.json
new file mode 100644
index 0000000000..c63b74a9c7
--- /dev/null
+++ b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/sv.json
@@ -0,0 +1,6 @@
+{
+ "culture": "sv",
+ "texts": {
+ "Menu:Administration": "Administration"
+ }
+}
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/AppUrlProvider.cs b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/AppUrlProvider.cs
index e7b113c8b5..2991e84331 100644
--- a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/AppUrlProvider.cs
+++ b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Urls/AppUrlProvider.cs
@@ -7,6 +7,7 @@ using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Options;
using Volo.Abp.DependencyInjection;
+using Volo.Abp.Http;
using Volo.Abp.MultiTenancy;
namespace Volo.Abp.UI.Navigation.Urls;
@@ -43,7 +44,8 @@ public class AppUrlProvider : IAppUrlProvider, ITransientDependency
{
redirectAllowedUrls.Add((await NormalizeUrlAsync(redirectAllowedUrl))!);
}
- var allow = redirectAllowedUrls.Any(x => url.StartsWith(x, StringComparison.CurrentCultureIgnoreCase));
+ var allow = redirectAllowedUrls.Any(x => url.StartsWith(x, StringComparison.CurrentCultureIgnoreCase) ||
+ UrlHelpers.IsSubdomainOf(url, x));
if (!allow)
{
Logger.LogError($"Invalid RedirectUrl: {url}, Use {nameof(AppUrlProvider)} to configure it!");
diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/sv.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/sv.json
new file mode 100644
index 0000000000..40aaa0073f
--- /dev/null
+++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/sv.json
@@ -0,0 +1,64 @@
+{
+ "culture": "sv",
+ "texts": {
+ "Languages": "SprÄk",
+ "AreYouSure": "Ăr du sĂ€ker?",
+ "Cancel": "Avbryt",
+ "Clear": "Klart",
+ "Yes": "Ja",
+ "No": "Nej",
+ "Ok": "Ok",
+ "Close": "NĂ€ra",
+ "Save": "Spara",
+ "SavingWithThreeDot": "Sparar...",
+ "Actions": "Ă
tgÀrder",
+ "Delete": "Radera",
+ "CreatedSuccessfully": "Skapades framgÄngsrikt",
+ "SavedSuccessfully": "Sparades framgÄngsrikt",
+ "DeletedSuccessfully": "Raderad framgÄngsrikt",
+ "Edit": "Redigera",
+ "Refresh": "Uppdatera",
+ "Language": "SprÄk",
+ "LoadMore": "Ladda mer",
+ "ProcessingWithThreeDot": "Bearbetning...",
+ "LoadingWithThreeDot": "Laddar...",
+ "Welcome": "VĂ€lkommen",
+ "Login": "Logga in",
+ "Register": "Registrera",
+ "Logout": "Logga ut",
+ "Submit": "Skicka in",
+ "Back": "Tillbaka",
+ "PagerSearch": "Sök",
+ "PagerNext": "NĂ€sta",
+ "PagerPrevious": "FöregÄende",
+ "PagerFirst": "Första",
+ "PagerLast": "Sista",
+ "PagerInfo": "Visar _START_ till _Slut_ av _TOTAL_ poster",
+ "PagerInfo{0}{1}{2}": "Visar {0} till {1} av {2} poster",
+ "PagerInfoEmpty": "Visar 0 till 0 av 0 poster",
+ "PagerInfoFiltered": "(filtrerat frÄn _MAX_ totala poster)",
+ "NoDataAvailableInDatatable": "Inga uppgifter tillgÀngliga",
+ "Total": "totalt",
+ "Selected": "utvalda",
+ "PagerShowMenuEntries": "Visa _MENY_-poster",
+ "DatatableActionDropdownDefaultText": "Ă
tgÀrder",
+ "ChangePassword": "Ăndra lösenord",
+ "PersonalInfo": "Min profil",
+ "AreYouSureYouWantToCancelEditingWarningMessage": "Du har förÀndringar som inte Àr frÀlsta.",
+ "GoHomePage": "GĂ„ till startsidan",
+ "GoBack": "GĂ„ tillbaka",
+ "Search": "Sök",
+ "ItemWillBeDeletedMessageWithFormat": "{0} kommer att raderas!",
+ "ItemWillBeDeletedMessage": "Denna artikel kommer att raderas!",
+ "ManageYourAccount": "Hantera ditt konto",
+ "OthersGroup": "Ăvriga",
+ "Today": "Idag",
+ "Apply": "TillÀmpa",
+ "InternetConnectionInfo": "Ă
tgÀrden kunde inte utföras. Din internetanslutning Àr inte tillgÀnglig för tillfÀllet.",
+ "CopiedToTheClipboard": "Kopieras till urklipp",
+ "AddNew": "LĂ€gg till ny",
+ "ProfilePicture": "Profilbild",
+ "Theme": "Tema",
+ "NotAssigned": "Ej tilldelad"
+ }
+}
\ No newline at end of file
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 9ecba92ca0..77937eab9f 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
@@ -8,7 +8,7 @@
"The {0} field only accepts files with the following extensions: {1}": "El campo {0} sĂłlo acepta ficheros con la siguientes extensiones: {1}",
"The field {0} must be a string or array type with a maximum length of '{1}'.": "El campo {0} debe ser de tipo cadena o lista con una longitud mĂĄxima de '{1}'.",
"The field {0} must be a string or array type with a minimum length of '{1}'.": "El campo {0} debe ser de tipo cadena o lista con una longitud mĂĄxima de '{1}'.",
- "The {0} field is not a valid phone number.": "El campo no tiene un nĂșmero de telĂ©fono valido.",
+ "The {0} field is not a valid phone number.": "El campo {0} no tiene un nĂșmero de telĂ©fono valido.",
"The field {0} must be between {1} and {2}.": "El campo {0} debe estar entre {1} y {2}.",
"The field {0} must match the regular expression '{1}'.": "El campo {0} no coincide con el formato solicitado.",
"The {0} field is required.": "El campo {0} es requerido.",
@@ -23,17 +23,17 @@
"ThisFieldIsNotValid.": "Este campo no es valido.",
"ThisFieldIsNotAValidEmailAddress.": "Este campo no es una direcciĂłn de e-mail valida.",
"ThisFieldOnlyAcceptsFilesWithTheFollowingExtensions:{0}": "Este campo sĂłlo acepta ficheros con las siguientes extensiones: {0}",
- "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthOf{0}": "Este campo debe ser una cadena o lista con una longitud mĂĄxima de {1}.",
- "ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}": "Este campo debe ser una cadena o lista con una longitud mĂnima de {1}.",
+ "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthOf{0}": "Este campo debe ser una cadena o lista con una longitud mĂĄxima de {0}.",
+ "ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}": "Este campo debe ser una cadena o lista con una longitud mĂnima de {0}.",
"ThisFieldIsNotAValidPhoneNumber.": "Este campo no es un nĂșmero de telĂ©fono valido.",
"ThisFieldMustBeBetween{0}And{1}": "Este campo debe estar entre {0} y {1}.",
"ThisFieldMustBeGreaterThanOrEqual{0}": "Este campo debe ser mayor o igual a {0}.",
"ThisFieldMustBeLessOrEqual{0}": "Este campo debe ser menor o igual a {0}.",
"ThisFieldMustMatchTheRegularExpression{0}": "Este campo debe coincidir con la expresiĂłn regular '{0}'.",
"ThisFieldIsRequired.": "Este campo es requerido",
- "ThisFieldMustBeAStringWithAMaximumLengthOf{0}": "Este campo debe ser una cadena con una longitud mĂĄxima de {1}.",
- "ThisFieldMustBeAStringWithAMinimumLengthOf{1}AndAMaximumLengthOf{0}": "Este campo debe ser una cadena con una longitud mĂnima de {2} y mĂĄxima de {1}.",
- "ThisFieldIsNotAValidFullyQualifiedHttpHttpsOrFtpUrl": "El campo {0} no es una URL (http, https o ftp) valida.",
- "ThisFieldIsInvalid.": "Este en un campo no valido."
+ "ThisFieldMustBeAStringWithAMaximumLengthOf{0}": "Este campo debe ser una cadena con una longitud mĂĄxima de {0}.",
+ "ThisFieldMustBeAStringWithAMinimumLengthOf{1}AndAMaximumLengthOf{0}": "Este campo debe ser una cadena con una longitud mĂnima de {1} y mĂĄxima de {0}.",
+ "ThisFieldIsNotAValidFullyQualifiedHttpHttpsOrFtpUrl": "El campo no es una URL (http, https o ftp) valida.",
+ "ThisFieldIsInvalid.": "Este campo no es vĂĄlido."
}
-}
\ No newline at end of file
+}
diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/sv.json b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/sv.json
new file mode 100644
index 0000000000..c751837429
--- /dev/null
+++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/sv.json
@@ -0,0 +1,39 @@
+{
+ "culture": "sv",
+ "texts": {
+ "'{0}' and '{1}' do not match.": "'{0}' och '{1}' matchar inte varandra.",
+ "The {0} field is not a valid credit card number.": "FÀltet {0} Àr inte ett giltigt kreditkortsnummer.",
+ "{0} is not valid.": "{0} Àr inte giltig.",
+ "The {0} field is not a valid e-mail address.": "FÀltet {0} Àr inte en giltig e-postadress.",
+ "The {0} field only accepts files with the following extensions: {1}": "FÀltet {0} accepterar endast filer med följande tillÀgg: {1}",
+ "The field {0} must be a string or array type with a maximum length of '{1}'.": "FÀltet {0} mÄste vara en strÀng eller en matris med en maximal lÀngd av '{1}'.",
+ "The field {0} must be a string or array type with a minimum length of '{1}'.": "FÀltet {0} mÄste vara en strÀng eller en matris med en minsta lÀngd av '{1}'.",
+ "The {0} field is not a valid phone number.": "FÀltet {0} Àr inte ett giltigt telefonnummer.",
+ "The field {0} must be between {1} and {2}.": "FÀltet {0} mÄste ligga mellan {1} och {2}.",
+ "The field {0} must match the regular expression '{1}'.": "FÀltet {0} överensstÀmmer inte med det begÀrda formatet.",
+ "The {0} field is required.": "FÀltet {0} Àr obligatoriskt.",
+ "The field {0} must be a string with a maximum length of {1}.": "FÀltet {0} mÄste vara en strÀng med en maximal lÀngd av {1}.",
+ "The field {0} must be a string with a minimum length of {2} and a maximum length of {1}.": "FÀltet {0} mÄste vara en strÀng med en minsta lÀngd av {2} och en största lÀngd av {1}.",
+ "The {0} field is not a valid fully-qualified http, https, or ftp URL.": "FÀltet {0} Àr inte en giltig fullstÀndigt kvalificerad http-, https- eller ftp-URL.",
+ "The field {0} is invalid.": "FÀltet {0} Àr ogiltigt.",
+ "The value '{0}' is invalid.": "VÀrdet '{0}' Àr ogiltigt.",
+ "The field {0} must be a number.": "FÀltet {0} mÄste vara ett tal.",
+ "The field must be a number.": "FÀltet mÄste vara ett nummer.",
+ "ThisFieldIsNotAValidCreditCardNumber.": "Detta fÀlt Àr inte ett giltigt kreditkortsnummer.",
+ "ThisFieldIsNotValid.": "Detta fÀlt Àr inte giltigt.",
+ "ThisFieldIsNotAValidEmailAddress.": "Detta fÀlt Àr inte en giltig e-postadress.",
+ "ThisFieldOnlyAcceptsFilesWithTheFollowingExtensions:{0}": "Detta fÀlt accepterar endast filer med följande tillÀgg: {0}",
+ "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthOf{0}": "Detta fÀlt mÄste vara en strÀng eller en matris med en maximal lÀngd pÄ '{0}'.",
+ "ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}": "Detta fÀlt mÄste vara en strÀng eller en matris med en minsta lÀngd av \"{0}\".",
+ "ThisFieldIsNotAValidPhoneNumber.": "Det hÀr fÀltet Àr inte ett giltigt telefonnummer.",
+ "ThisFieldMustBeBetween{0}And{1}": "Detta fÀlt mÄste vara mellan {0} och {1}.",
+ "ThisFieldMustBeGreaterThanOrEqual{0}": "Detta fÀlt mÄste vara större Àn eller lika med {0}.",
+ "ThisFieldMustBeLessOrEqual{0}": "Detta fÀlt mÄste vara mindre Àn eller lika med {0}.",
+ "ThisFieldMustMatchTheRegularExpression{0}": "Detta fÀlt mÄste matcha det reguljÀra uttrycket \"{0}\".",
+ "ThisFieldIsRequired.": "Detta fÀlt Àr obligatoriskt.",
+ "ThisFieldMustBeAStringWithAMaximumLengthOf{0}": "Detta fÀlt mÄste vara en strÀng med en maximal lÀngd av {0}.",
+ "ThisFieldMustBeAStringWithAMinimumLengthOf{1}AndAMaximumLengthOf{0}": "Detta fÀlt mÄste vara en strÀng med en minsta lÀngd av {1} och en största lÀngd av {0}.",
+ "ThisFieldIsNotAValidFullyQualifiedHttpHttpsOrFtpUrl": "Det hÀr fÀltet Àr inte en giltig fullstÀndigt kvalificerad http-, https- eller ftp-URL.",
+ "ThisFieldIsInvalid.": "Detta fÀlt Àr ogiltigt."
+ }
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcTestModule.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcTestModule.cs
index 027403d226..0e13746d66 100644
--- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcTestModule.cs
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcTestModule.cs
@@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations;
using Volo.Abp.AspNetCore.Mvc.GlobalFeatures;
+using Volo.Abp.AspNetCore.Mvc.Libs;
using Volo.Abp.AspNetCore.Mvc.Localization;
using Volo.Abp.AspNetCore.Mvc.Localization.Resource;
using Volo.Abp.AspNetCore.Security.Claims;
@@ -140,6 +141,11 @@ public class AbpAspNetCoreMvcTestModule : AbpModule
});
context.Services.TransformAbpClaims();
+
+ Configure(options =>
+ {
+ options.CheckLibs = false;
+ });
}
public override void OnApplicationInitialization(ApplicationInitializationContext context)
diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/sv.json b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/sv.json
new file mode 100644
index 0000000000..8110f67e01
--- /dev/null
+++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/Localization/Resource/sv.json
@@ -0,0 +1,10 @@
+{
+ "culture": "sv",
+ "texts": {
+ "DisplayName:PersonModel:BirthDate1": "Födelsedatum1",
+ "DisplayName:BirthDate2": "Födelsedatum2",
+ "PersonModel:BirthDate3": "Födelsedatum3",
+ "BirthDate": "Födelsedatum",
+ "Value1": "VĂ€rde ett"
+ }
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo.Abp.BlobStoring.Google.Tests.csproj b/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo.Abp.BlobStoring.Google.Tests.csproj
new file mode 100644
index 0000000000..a36e26fade
--- /dev/null
+++ b/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo.Abp.BlobStoring.Google.Tests.csproj
@@ -0,0 +1,19 @@
+ï»ż
+
+
+
+
+ net8.0
+
+ 9f0d2c00-80c1-435b-bfab-2c39c8249091
+
+
+
+
+
+
+
+
+
+
+
diff --git a/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo/Abp/BlobStoring/Google/AbpBlobStoringGoogleTestBase.cs b/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo/Abp/BlobStoring/Google/AbpBlobStoringGoogleTestBase.cs
new file mode 100644
index 0000000000..709590f6ed
--- /dev/null
+++ b/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo/Abp/BlobStoring/Google/AbpBlobStoringGoogleTestBase.cs
@@ -0,0 +1,19 @@
+using Volo.Abp.Testing;
+
+namespace Volo.Abp.BlobStoring.Google;
+
+public class AbpBlobStoringGoogleTestCommonBase : AbpIntegratedTest
+{
+ protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options)
+ {
+ options.UseAutofac();
+ }
+}
+
+public class AbpBlobStoringGoogleTestBase : AbpIntegratedTest
+{
+ protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options)
+ {
+ options.UseAutofac();
+ }
+}
diff --git a/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo/Abp/BlobStoring/Google/AbpBlobStoringGoogleTestModule.cs b/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo/Abp/BlobStoring/Google/AbpBlobStoringGoogleTestModule.cs
new file mode 100644
index 0000000000..36a100a191
--- /dev/null
+++ b/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo/Abp/BlobStoring/Google/AbpBlobStoringGoogleTestModule.cs
@@ -0,0 +1,90 @@
+using System;
+using System.Threading.Tasks;
+using Google.Apis.Auth.OAuth2;
+using Google.Cloud.Storage.V1;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Volo.Abp.Modularity;
+
+namespace Volo.Abp.BlobStoring.Google;
+
+
+///
+/// This module will not try to connect to Google Cloud Storage.
+///
+[DependsOn(
+ typeof(AbpBlobStoringGoogleModule),
+ typeof(AbpBlobStoringTestModule)
+)]
+public class AbpBlobStoringGoogleTestCommonModule : AbpModule
+{
+
+}
+
+[DependsOn(
+ typeof(AbpBlobStoringGoogleTestCommonModule)
+)]
+public class AbpBlobStoringGoogleTestModule : AbpModule
+{
+ private const string UserSecretsId = "9f0d2c00-80c1-435b-bfab-2c39c8249091";
+
+ private string _clientEmail;
+ private string _projectId;
+ private string _privateKey;
+
+ private readonly string _randomContainerName = "abp-test-container-" + Guid.NewGuid().ToString("N");
+
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ context.Services.ReplaceConfiguration(ConfigurationHelper.BuildConfiguration(builderAction: builder =>
+ {
+ builder.AddUserSecrets(UserSecretsId);
+ }));
+
+ var configuration = context.Services.GetConfiguration();
+ _clientEmail = configuration["Google:ClientEmail"];
+ _projectId = configuration["Google:ProjectId"];
+ _privateKey = configuration["Google:PrivateKey"];
+
+ Configure(options =>
+ {
+ options.Containers.ConfigureAll((containerName, containerConfiguration) =>
+ {
+ containerConfiguration.UseGoogle(google =>
+ {
+ google.ClientEmail = _clientEmail;
+ google.ProjectId = _projectId;
+ google.PrivateKey = _privateKey;
+ google.ContainerName = _randomContainerName;
+ google.CreateContainerIfNotExists = true;
+ });
+ });
+ });
+ }
+
+ public override void OnApplicationShutdown(ApplicationShutdownContext context)
+ {
+ var googleCredential = GoogleCredential.FromServiceAccountCredential(
+ new ServiceAccountCredential(
+ new ServiceAccountCredential.Initializer(_clientEmail)
+ {
+ ProjectId = _projectId
+ }
+ .FromPrivateKey(_privateKey)
+ ));
+
+ var client = StorageClient.Create(googleCredential);
+
+ try
+ {
+ client.DeleteBucket(_randomContainerName, new DeleteBucketOptions
+ {
+ DeleteObjects = true
+ });
+ }
+ catch (Exception e)
+ {
+ // ignored
+ }
+ }
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo/Abp/BlobStoring/Google/DefaultGoogleBlobNamingNormalizerProvider_Tests.cs b/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo/Abp/BlobStoring/Google/DefaultGoogleBlobNamingNormalizerProvider_Tests.cs
new file mode 100644
index 0000000000..cfe43f8bcf
--- /dev/null
+++ b/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo/Abp/BlobStoring/Google/DefaultGoogleBlobNamingNormalizerProvider_Tests.cs
@@ -0,0 +1,94 @@
+using Shouldly;
+using Xunit;
+
+namespace Volo.Abp.BlobStoring.Google;
+
+public class DefaultGoogleBlobNamingNormalizerProvider_Tests: AbpBlobStoringGoogleTestCommonBase
+{
+ private readonly IBlobNamingNormalizer _blobNamingNormalizer;
+
+ public DefaultGoogleBlobNamingNormalizerProvider_Tests()
+ {
+ _blobNamingNormalizer = GetRequiredService();
+ }
+
+ [Fact]
+ public void NormalizeContainerName_Lowercase()
+ {
+ var filename = "ThisIsMyContainerName";
+ filename = _blobNamingNormalizer.NormalizeContainerName(filename);
+ filename.ShouldBe("thisismycontainername");
+ }
+
+ [Fact]
+ public void NormalizeContainerName_Only_Letters_Numbers_Dash_Dots_Underscores()
+ {
+ var filename = ",./this-i,/s-my-c,/ont,/ai+*/=!@#$n^&*er.name+/";
+ filename = _blobNamingNormalizer.NormalizeContainerName(filename);
+ filename.ShouldBe("this-is-my-container.name");
+ }
+
+ [Fact]
+ public void NormalizeContainerName_Only_Start_With_Letters_Or_Numbers()
+ {
+ var filename = "-this.--is-.-.-my--_container---name-";
+ filename = _blobNamingNormalizer.NormalizeContainerName(filename);
+ filename.ShouldBe("this.--is-.-.-my--_container---name");
+
+ filename = ".this.--is-.-.-my--container---name0._";
+ filename = _blobNamingNormalizer.NormalizeContainerName(filename);
+ filename.ShouldBe("this.--is-.-.-my--container---name0");
+ }
+
+ [Fact]
+ public void NormalizeContainerName_Min_Length()
+ {
+ var filename = "a";
+ filename = _blobNamingNormalizer.NormalizeContainerName(filename);
+ filename.Length.ShouldBeGreaterThanOrEqualTo(3);
+ }
+
+ [Fact]
+ public void NormalizeContainerName_Max_Length()
+ {
+ var filename = "abpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabp";
+ filename = _blobNamingNormalizer.NormalizeContainerName(filename);
+ filename.Length.ShouldBeLessThanOrEqualTo(63);
+ }
+
+ [Fact]
+ public void NormalizeContainerName_Must_Not_Be_Ip_Address()
+ {
+ var filename = "192.168.5.4";
+ filename = _blobNamingNormalizer.NormalizeContainerName(filename);
+ filename.ShouldBe("000");
+
+ filename = "a.192.168.5.4";
+ filename = _blobNamingNormalizer.NormalizeContainerName(filename);
+ filename.ShouldBe("a.192.168.5.4");
+ }
+
+ [Fact]
+ public void NormalizeContainerName_Dots()
+ {
+ var filename = ".this..is.my.container....name.";
+ filename = _blobNamingNormalizer.NormalizeContainerName(filename);
+ filename.ShouldBe("this.is.my.container.name");
+ }
+
+ [Fact]
+ public void NormalizeContainerName_DNS()
+ {
+ var filename = "bucket...example..com";
+ filename = _blobNamingNormalizer.NormalizeContainerName(filename);
+ filename.ShouldBe("bucket.example.com");
+ }
+
+ [Fact]
+ public void NormalizeContainerName_Max_Length_Dash()
+ {
+ var filename = "-this-is-my-container-name-abpabpabpabpabpabpabpabp-a-b-p-a--b-p-";
+ filename = _blobNamingNormalizer.NormalizeContainerName(filename);
+ filename.ShouldBe("this-is-my-container-name-abpabpabpabpabpabpabpabp-a-b-p-a--b");
+ }
+}
diff --git a/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo/Abp/BlobStoring/Google/GoogleBlobContainer_Tests.cs b/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo/Abp/BlobStoring/Google/GoogleBlobContainer_Tests.cs
new file mode 100644
index 0000000000..6a4405f7cd
--- /dev/null
+++ b/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo/Abp/BlobStoring/Google/GoogleBlobContainer_Tests.cs
@@ -0,0 +1,13 @@
+ï»żusing Xunit;
+
+namespace Volo.Abp.BlobStoring.Google;
+
+/*
+//Please set the correct connection string in secrets.json and continue the test.
+public class GoogleBlobContainer_Tests : BlobContainer_Tests
+{
+ public GoogleBlobContainer_Tests()
+ {
+ }
+}
+*/
diff --git a/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo/Abp/BlobStoring/Google/GoogleBlobNameCalculator_Tests.cs b/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo/Abp/BlobStoring/Google/GoogleBlobNameCalculator_Tests.cs
new file mode 100644
index 0000000000..781900ad81
--- /dev/null
+++ b/framework/test/Volo.Abp.BlobStoring.Google.Tests/Volo/Abp/BlobStoring/Google/GoogleBlobNameCalculator_Tests.cs
@@ -0,0 +1,56 @@
+using System;
+using Shouldly;
+using Volo.Abp.MultiTenancy;
+using Xunit;
+
+namespace Volo.Abp.BlobStoring.Google;
+
+public class GoogleBlobNameCalculator_Tests : AbpBlobStoringGoogleTestCommonBase
+{
+ private readonly IGoogleBlobNameCalculator _calculator;
+ private readonly ICurrentTenant _currentTenant;
+
+ private const string GoogleContainerName = "/";
+ private const string GoogleSeparator = "/";
+
+ public GoogleBlobNameCalculator_Tests()
+ {
+ _calculator = GetRequiredService();
+ _currentTenant = GetRequiredService();
+ }
+
+ [Fact]
+ public void Default_Settings()
+ {
+ _calculator.Calculate(
+ GetArgs("my-container", "my-blob")
+ ).ShouldBe($"host{GoogleSeparator}my-blob");
+ }
+
+ [Fact]
+ public void Default_Settings_With_TenantId()
+ {
+ var tenantId = Guid.NewGuid();
+
+ using (_currentTenant.Change(tenantId))
+ {
+ _calculator.Calculate(
+ GetArgs("my-container", "my-blob")
+ ).ShouldBe($"tenants{GoogleSeparator}{tenantId:D}{GoogleSeparator}my-blob");
+ }
+ }
+
+ private static BlobProviderArgs GetArgs(
+ string containerName,
+ string blobName)
+ {
+ return new BlobProviderGetArgs(
+ containerName,
+ new BlobContainerConfiguration().UseGoogle(x =>
+ {
+ x.ContainerName = containerName;
+ }),
+ blobName
+ );
+ }
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/Http/UrlHelpers_Tests.cs b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/Http/UrlHelpers_Tests.cs
new file mode 100644
index 0000000000..51251f84d4
--- /dev/null
+++ b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/Http/UrlHelpers_Tests.cs
@@ -0,0 +1,43 @@
+using Shouldly;
+using Xunit;
+
+namespace Volo.Abp.Http;
+
+public class UrlHelpers_Tests
+{
+ [Theory]
+ [InlineData(null)]
+ [InlineData("null")]
+ [InlineData("http://")]
+ [InlineData("http://*")]
+ [InlineData("http://.domain")]
+ [InlineData("http://.domain/hello")]
+ public void IsSubdomainOf_ReturnsFalseIfDomainIsMalformedUri(string domain)
+ {
+ var actual = UrlHelpers.IsSubdomainOf("http://*.domain", domain);
+ actual.ShouldBeFalse();
+ }
+
+ [Theory]
+ [InlineData("http://sub.domain", "http://domain")]
+ [InlineData("http://sub.domain", "http://*.domain")]
+ [InlineData("http://sub.sub.domain", "http://*.domain")]
+ [InlineData("http://sub.sub.domain", "http://*.sub.domain")]
+ [InlineData("http://sub.domain:4567", "http://*.domain:4567")]
+ public void IsSubdomainOf_ReturnsTrue_WhenASubdomain(string subdomain, string domain)
+ {
+ var actual = UrlHelpers.IsSubdomainOf(subdomain, domain);
+ actual.ShouldBeTrue();
+ }
+
+ [Theory]
+ [InlineData("http://sub.domain:1234", "http://*.domain:5678")]
+ [InlineData("http://sub.domain", "http://domain.*")]
+ [InlineData("http://sub.domain.hacker", "http://*.domain")]
+ [InlineData("https://sub.domain", "http://*.domain")]
+ public void IsSubdomainOf_ReturnsFalse_WhenNotASubdomain(string subdomain, string domain)
+ {
+ var actual = UrlHelpers.IsSubdomainOf(subdomain, domain);
+ actual.ShouldBeFalse();
+ }
+}
diff --git a/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/sv.json b/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/sv.json
new file mode 100644
index 0000000000..810af19db5
--- /dev/null
+++ b/framework/test/Volo.Abp.Emailing.Tests/Volo/Abp/Emailing/Localization/sv.json
@@ -0,0 +1,6 @@
+{
+ "culture": "sv",
+ "texts": {
+ "hello": "Hej"
+ }
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/ExtraProperties_Tests.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/ExtraProperties_Tests.cs
index 42b6ca2a67..59eaa367fa 100644
--- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/ExtraProperties_Tests.cs
+++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/Domain/ExtraProperties_Tests.cs
@@ -1,6 +1,7 @@
ï»żusing System;
using System.Linq;
using System.Threading.Tasks;
+using Microsoft.Extensions.DependencyInjection;
using Shouldly;
using Volo.Abp.Data;
using Volo.Abp.Domain.Repositories;
@@ -59,6 +60,27 @@ public class ExtraProperties_Tests : ExtraProperties_Tests("PhoneCode").ShouldBe("42");
+
+ await CityRepository.DeleteAsync(london);
+
+ london = await CityRepository.FindByNameAsync("London");
+ london.ShouldBeNull();
+
+ using (var uow = ServiceProvider.GetRequiredService().Disable())
+ {
+ london = await CityRepository.FindByNameAsync("London");
+ london.IsDeleted.ShouldBeTrue();
+ london.HasProperty("PhoneCode").ShouldBeTrue();
+ london.GetProperty("PhoneCode").ShouldBe("42");
+ }
+ }
+
public enum Color
{
Red = 0,
diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/DomainEvents/DomainEvents_Tests.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/DomainEvents/DomainEvents_Tests.cs
index 776e7d4766..f1b072c0ee 100644
--- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/DomainEvents/DomainEvents_Tests.cs
+++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/DomainEvents/DomainEvents_Tests.cs
@@ -27,7 +27,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase
protected readonly IRepository AppEntityWithNavigationsRepository;
protected readonly ILocalEventBus LocalEventBus;
protected readonly IRepository PersonRepository;
- protected bool _loadEntityWithDetails = false;
+ protected bool _loadEntityWithoutDetails = false;
public AbpEfCoreDomainEvents_Tests()
{
@@ -42,7 +42,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase
{
options.Entity(opt =>
{
- if (_loadEntityWithDetails)
+ if (_loadEntityWithoutDetails)
{
opt.DefaultWithDetailsFunc = q => q;
}
@@ -55,7 +55,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase
[Fact]
public async Task Should_Trigger_Domain_Events_For_Aggregate_Root_When_Navigation_Changes_Tests()
{
- _loadEntityWithDetails = false;
+ _loadEntityWithoutDetails = false;
var entityId = Guid.NewGuid();
@@ -77,6 +77,8 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase
await PersonRepository.InsertAsync(new Person(Guid.NewGuid(), Guid.NewGuid().ToString(), new Random().Next(1, 100)));
});
+ var unitOfWorkManager = ServiceProvider.GetRequiredService();
+
// Test with simple property
await WithUnitOfWorkAsync(async () =>
{
@@ -92,6 +94,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase
await WithUnitOfWorkAsync(async () =>
{
var entity = await AppEntityWithNavigationsRepository.GetAsync(entityId);
+ await unitOfWorkManager.Current.SaveChangesAsync();
entity.AppEntityWithValueObjectAddress = new AppEntityWithValueObjectAddress("Turkey");
await AppEntityWithNavigationsRepository.UpdateAsync(entity);
});
@@ -102,6 +105,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase
await WithUnitOfWorkAsync(async () =>
{
var entity = await AppEntityWithNavigationsRepository.GetAsync(entityId);
+ await unitOfWorkManager.Current.SaveChangesAsync();
entity.AppEntityWithValueObjectAddress.Country = "USA";
await AppEntityWithNavigationsRepository.UpdateAsync(entity);
});
@@ -117,6 +121,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase
await WithUnitOfWorkAsync(async () =>
{
var entity = await AppEntityWithNavigationsRepository.GetAsync(entityId);
+ await unitOfWorkManager.Current.SaveChangesAsync();
entity.AppEntityWithValueObjectAddress = null;
await AppEntityWithNavigationsRepository.UpdateAsync(entity);
});
@@ -128,6 +133,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase
await WithUnitOfWorkAsync(async () =>
{
var entity = await AppEntityWithNavigationsRepository.GetAsync(entityId);
+ await unitOfWorkManager.Current.SaveChangesAsync();
entity.OneToOne = new AppEntityWithNavigationChildOneToOne
{
ChildName = "ChildName",
@@ -157,6 +163,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase
await WithUnitOfWorkAsync(async () =>
{
var entity = await AppEntityWithNavigationsRepository.GetAsync(entityId);
+ await unitOfWorkManager.Current.SaveChangesAsync();
entity.OneToOne.ChildName = "ChildName2";
await AppEntityWithNavigationsRepository.UpdateAsync(entity);
});
@@ -171,6 +178,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase
await WithUnitOfWorkAsync(async () =>
{
var entity = await AppEntityWithNavigationsRepository.GetAsync(entityId);
+ await unitOfWorkManager.Current.SaveChangesAsync();
entity.OneToOne.OneToOne.ChildName = "OneToOne-ChildName2";
await AppEntityWithNavigationsRepository.UpdateAsync(entity);
});
@@ -188,6 +196,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase
await WithUnitOfWorkAsync(async () =>
{
var entity = await AppEntityWithNavigationsRepository.GetAsync(entityId);
+ await unitOfWorkManager.Current.SaveChangesAsync();
entity.OneToOne = null;
await AppEntityWithNavigationsRepository.UpdateAsync(entity);
});
@@ -199,6 +208,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase
await WithUnitOfWorkAsync(async () =>
{
var entity = await AppEntityWithNavigationsRepository.GetAsync(entityId);
+ await unitOfWorkManager.Current.SaveChangesAsync();
entity.OneToMany = new List()
{
new AppEntityWithNavigationChildOneToMany
@@ -235,6 +245,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase
await WithUnitOfWorkAsync(async () =>
{
var entity = await AppEntityWithNavigationsRepository.GetAsync(entityId);
+ await unitOfWorkManager.Current.SaveChangesAsync();
entity.OneToMany[0].ChildName = "ChildName2";
await AppEntityWithNavigationsRepository.UpdateAsync(entity);
});
@@ -249,6 +260,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase
await WithUnitOfWorkAsync(async () =>
{
var entity = await AppEntityWithNavigationsRepository.GetAsync(entityId);
+ await unitOfWorkManager.Current.SaveChangesAsync();
entity.OneToMany[0].OneToMany[0].ChildName = "OneToMany-ChildName2";
await AppEntityWithNavigationsRepository.UpdateAsync(entity);
});
@@ -266,6 +278,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase
await WithUnitOfWorkAsync(async () =>
{
var entity = await AppEntityWithNavigationsRepository.GetAsync(entityId);
+ await unitOfWorkManager.Current.SaveChangesAsync();
entity.OneToMany.Clear();
await AppEntityWithNavigationsRepository.UpdateAsync(entity);
});
@@ -277,6 +290,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase
await WithUnitOfWorkAsync(async () =>
{
var entity = await AppEntityWithNavigationsRepository.GetAsync(entityId);
+ await unitOfWorkManager.Current.SaveChangesAsync();
entity.ManyToMany = new List()
{
new AppEntityWithNavigationChildManyToMany
@@ -293,6 +307,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase
await WithUnitOfWorkAsync(async () =>
{
var entity = await AppEntityWithNavigationsRepository.GetAsync(entityId);
+ await unitOfWorkManager.Current.SaveChangesAsync();
entity.ManyToMany[0].ChildName = "ChildName2";
await AppEntityWithNavigationsRepository.UpdateAsync(entity);
});
@@ -303,6 +318,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase
await WithUnitOfWorkAsync(async () =>
{
var entity = await AppEntityWithNavigationsRepository.GetAsync(entityId);
+ await unitOfWorkManager.Current.SaveChangesAsync();
entity.ManyToMany.Clear();
await AppEntityWithNavigationsRepository.UpdateAsync(entity);
});
@@ -313,7 +329,7 @@ public class AbpEfCoreDomainEvents_Tests : EntityFrameworkCoreTestBase
[Fact]
public async Task Should_Trigger_Domain_Events_For_Aggregate_Root_When_EnsureCollectionLoaded_Navigation_Changes_Tests()
{
- _loadEntityWithDetails = true;
+ _loadEntityWithoutDetails = true;
var entityId = Guid.NewGuid();
diff --git a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Localization/sv.json b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Localization/sv.json
new file mode 100644
index 0000000000..62ea61f867
--- /dev/null
+++ b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/Localization/sv.json
@@ -0,0 +1,6 @@
+{
+ "culture": "sv",
+ "texts": {
+ "Volo.Abp.Http.DynamicProxying:10001": "Företagsundantag med data: {0}"
+ }
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.Imaging.Abstractions.Tests/Volo/Abp/Imaging/Files/abp.webp b/framework/test/Volo.Abp.Imaging.Abstractions.Tests/Volo/Abp/Imaging/Files/abp.webp
index c31bc80a82..70b613b8f2 100644
Binary files a/framework/test/Volo.Abp.Imaging.Abstractions.Tests/Volo/Abp/Imaging/Files/abp.webp and b/framework/test/Volo.Abp.Imaging.Abstractions.Tests/Volo/Abp/Imaging/Files/abp.webp differ
diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/sv.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/sv.json
new file mode 100644
index 0000000000..8ac7c07f27
--- /dev/null
+++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/CountryNames/sv.json
@@ -0,0 +1,7 @@
+{
+ "culture": "sv",
+ "texts": {
+ "USA": "Amerikas Förenta Stater",
+ "Brazil": "Brasilien"
+ }
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/sv.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/sv.json
new file mode 100644
index 0000000000..ee8b643b3f
--- /dev/null
+++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Base/Validation/sv.json
@@ -0,0 +1,12 @@
+{
+ "culture": "sv",
+ "texts": {
+ "ThisFieldIsRequired": "Detta fÀlt Àr obligatoriskt",
+ "MaxLenghtErrorMessage": "Detta fÀlt kan innehÄlla högst '{0}' tecken",
+ "Enum:BookType.Undefined": "Odefinierad frÄn ValidationResource",
+ "Enum:BookType.0": "Odefinierad med vÀrdet 0 frÄn ValidationResource",
+ "BookType.Adventure": "Ăventyr frĂ„n ValidationResource",
+ "BookType.1": "Ăventyr med vĂ€rde 1 frĂ„n ValidationResource",
+ "Biography": "Biografi frÄn ValidationResource"
+ }
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/sv.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/sv.json
new file mode 100644
index 0000000000..ddf4fc67e9
--- /dev/null
+++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/Source/sv.json
@@ -0,0 +1,16 @@
+{
+ "culture": "sv",
+ "texts": {
+ "Hello {0}.": "Hej {0}.",
+ "Car": "Bil",
+ "CarPlural": "Bilar",
+ "MaxLenghtErrorMessage": "LÀngden pÄ detta fÀlt kan vara högst '{0}' tecken",
+ "Universe": "Universum",
+ "FortyTwo": "FyrtiotvÄ",
+ "Enum:BookType.Undefined": "Odefinierad",
+ "Enum:BookType.0": "Odefinierad med vÀrde 0",
+ "BookType.Adventure": "Ăventyr",
+ "BookType.1": "Ăventyr med vĂ€rde 1",
+ "Biography": "Biografi"
+ }
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/sv.json b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/sv.json
new file mode 100644
index 0000000000..b5bceee203
--- /dev/null
+++ b/framework/test/Volo.Abp.Localization.Tests/Volo/Abp/Localization/TestResources/SourceExt/sv.json
@@ -0,0 +1,6 @@
+{
+ "culture": "sv",
+ "texts": {
+ "SeeYou": "Se dig sjÀlv"
+ }
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/City.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/City.cs
index 15ca147d91..50c3d32458 100644
--- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/City.cs
+++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/City.cs
@@ -5,12 +5,14 @@ using Volo.Abp.Domain.Entities;
namespace Volo.Abp.TestApp.Domain;
-public class City : AggregateRoot
+public class City : AggregateRoot, ISoftDelete
{
public string Name { get; set; }
public ICollection Districts { get; set; }
+ public bool IsDeleted { get; set; }
+
private City()
{
diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/ConcurrencyStamp_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/ConcurrencyStamp_Tests.cs
index 2f9f8c1257..2906431ff1 100644
--- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/ConcurrencyStamp_Tests.cs
+++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/ConcurrencyStamp_Tests.cs
@@ -1,5 +1,6 @@
ï»żusing System.Threading.Tasks;
using Volo.Abp.Data;
+using Volo.Abp.Domain.Repositories;
using Volo.Abp.Modularity;
using Volo.Abp.TestApp.Domain;
using Xunit;
@@ -49,7 +50,7 @@ public abstract class ConcurrencyStamp_Tests : TestAppTestBase(async () =>
{
- await CityRepository.DeleteAsync(london1);
+ await CityRepository.HardDeleteAsync(london1);
});
}
}
diff --git a/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorLocalizedTemplateContentReaderFactory_Tests.cs b/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorLocalizedTemplateContentReaderFactory_Tests.cs
index 97a3b7426e..1e50d5a86c 100644
--- a/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorLocalizedTemplateContentReaderFactory_Tests.cs
+++ b/framework/test/Volo.Abp.TextTemplating.Razor.Tests/Volo/Abp/TextTemplating/Razor/RazorLocalizedTemplateContentReaderFactory_Tests.cs
@@ -12,7 +12,8 @@ public class RazorLocalizedTemplateContentReaderFactory_Tests : LocalizedTemplat
LocalizedTemplateContentReaderFactory = new LocalizedTemplateContentReaderFactory(
new PhysicalFileVirtualFileProvider(
new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(),
- "Volo", "Abp", "TextTemplating", "Razor"))));
+ "Volo", "Abp", "TextTemplating", "Razor"))),
+ GetRequiredService());
WelcomeEmailEnglishContent = "@inherits Volo.Abp.TextTemplating.Razor.RazorTemplatePageBase" +
Environment.NewLine +
diff --git a/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/ScribanLocalizedTemplateContentReaderFactory_Tests.cs b/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/ScribanLocalizedTemplateContentReaderFactory_Tests.cs
index 35fecd093d..bbf0f99c56 100644
--- a/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/ScribanLocalizedTemplateContentReaderFactory_Tests.cs
+++ b/framework/test/Volo.Abp.TextTemplating.Scriban.Tests/Volo/Abp/TextTemplating/Scriban/ScribanLocalizedTemplateContentReaderFactory_Tests.cs
@@ -11,7 +11,8 @@ public class ScribanLocalizedTemplateContentReaderFactory_Tests : LocalizedTempl
LocalizedTemplateContentReaderFactory = new LocalizedTemplateContentReaderFactory(
new PhysicalFileVirtualFileProvider(
new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(),
- "Volo", "Abp", "TextTemplating", "Scriban"))));
+ "Volo", "Abp", "TextTemplating", "Scriban"))),
+ GetRequiredService());
WelcomeEmailEnglishContent = "Welcome {{model.name}} to the abp.io!";
WelcomeEmailTurkishContent = "Merhaba {{model.name}}, abp.io'ya hoĆgeldiniz!";
diff --git a/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/Localization/sv.json b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/Localization/sv.json
new file mode 100644
index 0000000000..c398b9a593
--- /dev/null
+++ b/framework/test/Volo.Abp.TextTemplating.Tests/Volo/Abp/TextTemplating/Localization/sv.json
@@ -0,0 +1,7 @@
+{
+ "culture": "sv",
+ "texts": {
+ "HelloText": "Hej",
+ "HowAreYou": "Hur Àr det med dig?"
+ }
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.UI.Navigation.Tests/Volo/Abp/Ui/Navigation/AppUrlProvider_Tests.cs b/framework/test/Volo.Abp.UI.Navigation.Tests/Volo/Abp/Ui/Navigation/AppUrlProvider_Tests.cs
index 5b448aa683..eb3698d23b 100644
--- a/framework/test/Volo.Abp.UI.Navigation.Tests/Volo/Abp/Ui/Navigation/AppUrlProvider_Tests.cs
+++ b/framework/test/Volo.Abp.UI.Navigation.Tests/Volo/Abp/Ui/Navigation/AppUrlProvider_Tests.cs
@@ -40,7 +40,8 @@ public class AppUrlProvider_Tests : AbpIntegratedTest
"https://wwww.volosoft.com",
"https://wwww.aspnetzero.com",
"https://{{tenantName}}.abp.io",
- "https://{{tenantId}}.abp.io"
+ "https://{{tenantId}}.abp.io",
+ "https://*.demo.myabp.io"
});
options.Applications["BLAZOR"].RootUrl = "https://{{tenantId}}.abp.io";
@@ -101,12 +102,16 @@ public class AppUrlProvider_Tests : AbpIntegratedTest
[Fact]
public async Task IsRedirectAllowedUrlAsync()
{
- (await _appUrlProvider.IsRedirectAllowedUrlAsync("https://community.abp.io")).ShouldBeFalse();
(await _appUrlProvider.IsRedirectAllowedUrlAsync("https://wwww.volosoft.com")).ShouldBeTrue();
+ (await _appUrlProvider.IsRedirectAllowedUrlAsync("https://wwww.demo.myabp.io")).ShouldBeTrue();
+ (await _appUrlProvider.IsRedirectAllowedUrlAsync("https://demo.myabp.io")).ShouldBeTrue();
+ (await _appUrlProvider.IsRedirectAllowedUrlAsync("https://api.demo.myabp.io")).ShouldBeTrue();
+ (await _appUrlProvider.IsRedirectAllowedUrlAsync("https://test.api.demo.myabp.io")).ShouldBeTrue();
+ (await _appUrlProvider.IsRedirectAllowedUrlAsync("https://volosoft.com/demo.myabp.io")).ShouldBeFalse();
+ (await _appUrlProvider.IsRedirectAllowedUrlAsync("https://wwww.myabp.io")).ShouldBeFalse();
using (_currentTenant.Change(null))
{
- (await _appUrlProvider.IsRedirectAllowedUrlAsync("https://www.abp.io")).ShouldBeFalse();
(await _appUrlProvider.IsRedirectAllowedUrlAsync("https://abp.io")).ShouldBeTrue();
}
diff --git a/latest-versions.json b/latest-versions.json
index 4649df25e4..f505ff8abd 100644
--- a/latest-versions.json
+++ b/latest-versions.json
@@ -1,6 +1,6 @@
[
{
- "version": "8.2.1",
+ "version": "8.3.0",
"releaseDate": "",
"type": "stable",
"message": ""
diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo.Abp.Account.Application.Contracts.abppkg.analyze.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo.Abp.Account.Application.Contracts.abppkg.analyze.json
index 9b8257a2f0..da04b6d001 100644
--- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo.Abp.Account.Application.Contracts.abppkg.analyze.json
+++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo.Abp.Account.Application.Contracts.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.Abp.Account.Application.Contracts",
- "hash": "392da50100d94bd18adbc7c41cd9efce",
+ "hash": "",
"contents": [
{
"namespace": "Volo.Abp.Account",
diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/sv.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/sv.json
new file mode 100644
index 0000000000..d06472ed7b
--- /dev/null
+++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/sv.json
@@ -0,0 +1,73 @@
+{
+ "culture": "sv",
+ "texts": {
+ "Menu:Account": "Konto",
+ "UserName": "AnvÀndarnamn",
+ "EmailAddress": "E-postadress",
+ "UserNameOrEmailAddress": "AnvÀndarnamn eller e-postadress",
+ "Password": "Lösenord",
+ "RememberMe": "Kom ihÄg mig",
+ "UseAnotherServiceToLogin": "AnvÀnd en annan tjÀnst för att logga in",
+ "UserLockedOutMessage": "AnvÀndarkontot har lÄsts pÄ grund av ogiltiga inloggningsförsök. VÀnligen vÀnta ett tag och försök igen.",
+ "InvalidUserNameOrPassword": "Ogiltigt anvÀndarnamn eller lösenord!",
+ "LoginIsNotAllowed": "Du kan inte logga in! Ditt konto Àr inaktivt eller sÄ behöver du bekrÀfta din e-postadress eller ditt telefonnummer.",
+ "SelfRegistrationDisabledMessage": "SjÀlvregistrering Àr inaktiverat för denna applikation. VÀnligen kontakta applikationsadministratören för att registrera en ny anvÀndare.",
+ "LocalLoginDisabledMessage": "Lokal inloggning Àr inaktiverad för denna applikation.",
+ "Login": "Logga in",
+ "Cancel": "Avbryt",
+ "Register": "Registrera",
+ "AreYouANewUser": "Ăr du en ny anvĂ€ndare?",
+ "AlreadyRegistered": "Ăr du redan registrerad?",
+ "InvalidLoginRequest": "Ogiltig inloggningsbegÀran",
+ "ThereAreNoLoginSchemesConfiguredForThisClient": "Det finns inga inloggningsscheman konfigurerade för den hÀr klienten.",
+ "LogInUsingYourProviderAccount": "Logga in med ditt {0}-konto",
+ "DisplayName:CurrentPassword": "Aktuellt lösenord",
+ "DisplayName:NewPassword": "Nytt lösenord",
+ "DisplayName:NewPasswordConfirm": "BekrÀfta nytt lösenord",
+ "PasswordChangedMessage": "Ditt lösenord har Àndrats framgÄngsrikt.",
+ "DisplayName:UserName": "AnvÀndarnamn",
+ "DisplayName:Email": "E-post",
+ "DisplayName:Name": "Namn",
+ "DisplayName:Surname": "Efternamn",
+ "DisplayName:Password": "Lösenord",
+ "DisplayName:EmailAddress": "E-postadress",
+ "DisplayName:PhoneNumber": "Telefonnummer",
+ "PersonalSettings": "Personliga instÀllningar",
+ "PersonalSettingsSaved": "Personliga instÀllningar sparade",
+ "PersonalSettingsChangedConfirmationModalTitle": "Personuppgifter Àndrade",
+ "PersonalSettingsChangedConfirmationModalDescription": "Ăndringarna kommer att Ă„terspeglas efter att du loggat in igen. Vill du logga ut nu?",
+ "PasswordChanged": "Lösenord Àndrat",
+ "NewPasswordConfirmFailed": "VÀnligen bekrÀfta det nya lösenordet.",
+ "NewPasswordSameAsOld": "Det nya lösenordet mÄste vara ett annat Àn det gamla.",
+ "Manage": "Hantera",
+ "MyAccount": "Mitt konto",
+ "DisplayName:Abp.Account.IsSelfRegistrationEnabled": "Ăr sjĂ€lvregistrering möjlig?",
+ "Description:Abp.Account.IsSelfRegistrationEnabled": "Om en anvÀndare kan registrera kontot sjÀlv.",
+ "DisplayName:Abp.Account.EnableLocalLogin": "Autentisera med ett lokalt konto",
+ "Description:Abp.Account.EnableLocalLogin": "Anger om servern tillÄter anvÀndare att autentisera sig med ett lokalt konto.",
+ "LoggedOutTitle": "Utregistrerad",
+ "LoggedOutText": "Du har blivit utloggad och kommer att omdirigeras inom kort.",
+ "ReturnToText": "Klicka hÀr för att komma tillbaka till ansökan",
+ "OrLoginWith": "Eller logga in med:",
+ "ForgotPassword": "Har du glömt lösenordet?",
+ "SendPasswordResetLink_Information": "En lÀnk för att ÄterstÀlla lösenordet kommer att skickas till din e-post för att ÄterstÀlla ditt lösenord. Om du inte fÄr ett e-postmeddelande inom nÄgra minuter, försök igen.",
+ "PasswordResetMailSentMessage": "E-postmeddelande om ÄterstÀllning av konto skickas till din e-postadress. Om du inte ser det hÀr e-postmeddelandet i din inkorg inom 15 minuter, leta efter det i din skrÀppostmapp. Om du hittar det dÀr, markera det som -Not Junk-.",
+ "ResetPassword": "Ă
terstÀll lösenord",
+ "ConfirmPassword": "BekrÀfta lösenordet",
+ "ResetPassword_Information": "Ange ditt nya lösenord.",
+ "YourPasswordIsSuccessfullyReset": "Ditt lösenord har ÄterstÀllts.",
+ "GoToTheApplication": "GĂ„ till applikationen",
+ "BackToLogin": "Tillbaka till inloggning",
+ "ProfileTab:Password": "Ăndra lösenord",
+ "ProfileTab:PersonalInfo": "Personlig information",
+ "ReturnToApplication": "Ă
tergÄ till ansökan",
+ "Volo.Account:InvalidEmailAddress": "Kan inte hitta den angivna e-postadressen: {0}",
+ "PasswordReset": "Ă
terstÀllning av lösenord",
+ "PasswordResetInfoInEmail": "Vi har fÄtt en begÀran om ÄterstÀllning av konto! Om du initierade denna begÀran, klicka pÄ följande lÀnk för att ÄterstÀlla ditt lösenord.",
+ "ResetMyPassword": "Ă
terstÀll mitt lösenord",
+ "AccessDenied": "Ă
tkomst nekad!",
+ "AccessDeniedMessage": "Du har inte tillgÄng till denna resurs.",
+ "OrRegisterWith": "Eller registrera dig med",
+ "RegisterUsingYourProviderAccount": "Registrera dig med ditt {0} konto"
+ }
+}
\ No newline at end of file
diff --git a/modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.abppkg.analyze.json b/modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.abppkg.analyze.json
index dbd55b0f21..d02c89e745 100644
--- a/modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.abppkg.analyze.json
+++ b/modules/account/src/Volo.Abp.Account.Application/Volo.Abp.Account.Application.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.Abp.Account.Application",
- "hash": "ebd6f98a2003938944d5a3790daf20af",
+ "hash": "",
"contents": [
{
"namespace": "Volo.Abp.Account",
@@ -141,6 +141,7 @@
"methods": [
{
"returnType": "IdentityUserDto",
+ "namespace": "Volo.Abp.Account",
"name": "RegisterAsync",
"summary": null,
"isAsync": true,
@@ -157,6 +158,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.Abp.Account",
"name": "SendPasswordResetCodeAsync",
"summary": null,
"isAsync": true,
@@ -173,6 +175,7 @@
},
{
"returnType": "Boolean",
+ "namespace": "Volo.Abp.Account",
"name": "VerifyPasswordResetTokenAsync",
"summary": null,
"isAsync": true,
@@ -189,6 +192,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.Abp.Account",
"name": "ResetPasswordAsync",
"summary": null,
"isAsync": true,
@@ -208,6 +212,87 @@
"name": "AccountAppService",
"summary": null
},
+ {
+ "namespace": "Volo.Abp.Account",
+ "baseClass": {
+ "name": "IdentityAppServiceBase",
+ "namespace": "Volo.Abp.Identity",
+ "declaringAssemblyName": "Volo.Abp.Identity.Application",
+ "fullName": "Volo.Abp.Identity.IdentityAppServiceBase"
+ },
+ "implementingInterfaces": [
+ {
+ "name": "IApplicationService",
+ "namespace": "Volo.Abp.Application.Services",
+ "declaringAssemblyName": "Volo.Abp.Ddd.Application.Contracts",
+ "fullName": "Volo.Abp.Application.Services.IApplicationService"
+ },
+ {
+ "name": "IRemoteService",
+ "namespace": "Volo.Abp",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.IRemoteService"
+ },
+ {
+ "name": "IAvoidDuplicateCrossCuttingConcerns",
+ "namespace": "Volo.Abp.Aspects",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.Aspects.IAvoidDuplicateCrossCuttingConcerns"
+ },
+ {
+ "name": "IValidationEnabled",
+ "namespace": "Volo.Abp.Validation",
+ "declaringAssemblyName": "Volo.Abp.Validation",
+ "fullName": "Volo.Abp.Validation.IValidationEnabled"
+ },
+ {
+ "name": "IUnitOfWorkEnabled",
+ "namespace": "Volo.Abp.Uow",
+ "declaringAssemblyName": "Volo.Abp.Uow",
+ "fullName": "Volo.Abp.Uow.IUnitOfWorkEnabled"
+ },
+ {
+ "name": "IAuditingEnabled",
+ "namespace": "Volo.Abp.Auditing",
+ "declaringAssemblyName": "Volo.Abp.Auditing.Contracts",
+ "fullName": "Volo.Abp.Auditing.IAuditingEnabled"
+ },
+ {
+ "name": "IGlobalFeatureCheckingEnabled",
+ "namespace": "Volo.Abp.GlobalFeatures",
+ "declaringAssemblyName": "Volo.Abp.GlobalFeatures",
+ "fullName": "Volo.Abp.GlobalFeatures.IGlobalFeatureCheckingEnabled"
+ },
+ {
+ "name": "ITransientDependency",
+ "namespace": "Volo.Abp.DependencyInjection",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.DependencyInjection.ITransientDependency"
+ },
+ {
+ "name": "IDynamicClaimsAppService",
+ "namespace": "Volo.Abp.Account",
+ "declaringAssemblyName": "Volo.Abp.Account.Application.Contracts",
+ "fullName": "Volo.Abp.Account.IDynamicClaimsAppService"
+ }
+ ],
+ "methods": [
+ {
+ "returnType": "Void",
+ "namespace": "Volo.Abp.Account",
+ "name": "RefreshAsync",
+ "summary": null,
+ "isAsync": true,
+ "isPublic": true,
+ "isPrivate": false,
+ "isStatic": false,
+ "parameters": []
+ }
+ ],
+ "contentType": "applicationService",
+ "name": "DynamicClaimsAppService",
+ "summary": null
+ },
{
"namespace": "Volo.Abp.Account",
"baseClass": {
@@ -275,6 +360,7 @@
"methods": [
{
"returnType": "ProfileDto",
+ "namespace": "Volo.Abp.Account",
"name": "GetAsync",
"summary": null,
"isAsync": true,
@@ -285,6 +371,7 @@
},
{
"returnType": "ProfileDto",
+ "namespace": "Volo.Abp.Account",
"name": "UpdateAsync",
"summary": null,
"isAsync": true,
@@ -301,6 +388,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.Abp.Account",
"name": "ChangePasswordAsync",
"summary": null,
"isAsync": true,
diff --git a/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/ProfileAppService.cs b/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/ProfileAppService.cs
index 9749a607d5..d2baae8393 100644
--- a/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/ProfileAppService.cs
+++ b/modules/account/src/Volo.Abp.Account.Application/Volo/Abp/Account/ProfileAppService.cs
@@ -68,8 +68,8 @@ public class ProfileAppService : IdentityAppServiceBase, IProfileAppService
(await UserManager.SetPhoneNumberAsync(user, input.PhoneNumber)).CheckErrors();
}
- user.Name = input.Name;
- user.Surname = input.Surname;
+ user.Name = input.Name?.Trim();
+ user.Surname = input.Surname?.Trim();
input.MapExtraPropertiesTo(user);
diff --git a/modules/account/src/Volo.Abp.Account.Blazor/Volo.Abp.Account.Blazor.abppkg.analyze.json b/modules/account/src/Volo.Abp.Account.Blazor/Volo.Abp.Account.Blazor.abppkg.analyze.json
index 0fe0981e1d..cba964b090 100644
--- a/modules/account/src/Volo.Abp.Account.Blazor/Volo.Abp.Account.Blazor.abppkg.analyze.json
+++ b/modules/account/src/Volo.Abp.Account.Blazor/Volo.Abp.Account.Blazor.abppkg.analyze.json
@@ -1,10 +1,25 @@
{
"name": "Volo.Abp.Account.Blazor",
- "hash": "caa7279a6d55f90db90b3ec2313a4e12",
+ "hash": "",
"contents": [
{
- "namespace": "Volo.Abp.Account.Blazor;",
+ "namespace": "Volo.Abp.Account.Blazor",
"dependsOnModules": [
+ {
+ "declaringAssemblyName": "Volo.Abp.AspNetCore.Components.Web.Theming",
+ "namespace": "Volo.Abp.AspNetCore.Components.Web.Theming",
+ "name": "AbpAspNetCoreComponentsWebThemingModule"
+ },
+ {
+ "declaringAssemblyName": "Volo.Abp.AutoMapper",
+ "namespace": "Volo.Abp.AutoMapper",
+ "name": "AbpAutoMapperModule"
+ },
+ {
+ "declaringAssemblyName": "Volo.Abp.Account.Application.Contracts",
+ "namespace": "Volo.Abp.Account",
+ "name": "AbpAccountApplicationContractsModule"
+ }
],
"implementingInterfaces": [
{
@@ -53,6 +68,12 @@
"contentType": "abpModule",
"name": "AbpAccountBlazorModule",
"summary": null
+ },
+ {
+ "namespace": "Volo.Abp.Account.Blazor.Pages.Account",
+ "contentType": "webPage",
+ "name": "AccountManage",
+ "summary": null
}
]
}
\ No newline at end of file
diff --git a/modules/account/src/Volo.Abp.Account.HttpApi.Client/Volo.Abp.Account.HttpApi.Client.abppkg.analyze.json b/modules/account/src/Volo.Abp.Account.HttpApi.Client/Volo.Abp.Account.HttpApi.Client.abppkg.analyze.json
index bed1809a98..d6313846ba 100644
--- a/modules/account/src/Volo.Abp.Account.HttpApi.Client/Volo.Abp.Account.HttpApi.Client.abppkg.analyze.json
+++ b/modules/account/src/Volo.Abp.Account.HttpApi.Client/Volo.Abp.Account.HttpApi.Client.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.Abp.Account.HttpApi.Client",
- "hash": "5a1716ad59fa19da3009381a4d0d3e1d",
+ "hash": "",
"contents": [
{
"namespace": "Volo.Abp.Account",
diff --git a/modules/account/src/Volo.Abp.Account.HttpApi/Volo.Abp.Account.HttpApi.abppkg.analyze.json b/modules/account/src/Volo.Abp.Account.HttpApi/Volo.Abp.Account.HttpApi.abppkg.analyze.json
index 2df3965fe7..3ee0c8975a 100644
--- a/modules/account/src/Volo.Abp.Account.HttpApi/Volo.Abp.Account.HttpApi.abppkg.analyze.json
+++ b/modules/account/src/Volo.Abp.Account.HttpApi/Volo.Abp.Account.HttpApi.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.Abp.Account.HttpApi",
- "hash": "caa7279a6d55f90db90b3ec2313a4e12",
+ "hash": "",
"contents": [
{
"namespace": "Volo.Abp.Account",
@@ -68,6 +68,107 @@
"contentType": "abpModule",
"name": "AbpAccountHttpApiModule",
"summary": null
+ },
+ {
+ "apis": [
+ {
+ "path": "api/account/register",
+ "method": "POST",
+ "groupName": "Account",
+ "responseType": "Volo.Abp.Identity.IdentityUserDto",
+ "responseTypeAsJson": "",
+ "parameterDescriptions": [
+ {
+ "name": "input",
+ "type": "RegisterDto"
+ }
+ ]
+ },
+ {
+ "path": "api/account/send-password-reset-code",
+ "method": "POST",
+ "groupName": "Account",
+ "responseType": "System.Void",
+ "responseTypeAsJson": "",
+ "parameterDescriptions": [
+ {
+ "name": "input",
+ "type": "SendPasswordResetCodeDto"
+ }
+ ]
+ },
+ {
+ "path": "api/account/verify-password-reset-token",
+ "method": "POST",
+ "groupName": "Account",
+ "responseType": "System.Boolean",
+ "responseTypeAsJson": "true",
+ "parameterDescriptions": [
+ {
+ "name": "input",
+ "type": "VerifyPasswordResetTokenInput"
+ }
+ ]
+ },
+ {
+ "path": "api/account/reset-password",
+ "method": "POST",
+ "groupName": "Account",
+ "responseType": "System.Void",
+ "responseTypeAsJson": "",
+ "parameterDescriptions": [
+ {
+ "name": "input",
+ "type": "ResetPasswordDto"
+ }
+ ]
+ },
+ {
+ "path": "api/account/dynamic-claims/refresh",
+ "method": "POST",
+ "groupName": "DynamicClaims",
+ "responseType": "System.Void",
+ "responseTypeAsJson": "",
+ "parameterDescriptions": []
+ },
+ {
+ "path": "api/account/my-profile",
+ "method": "GET",
+ "groupName": "Profile",
+ "responseType": "Volo.Abp.Account.ProfileDto",
+ "responseTypeAsJson": "",
+ "parameterDescriptions": []
+ },
+ {
+ "path": "api/account/my-profile",
+ "method": "PUT",
+ "groupName": "Profile",
+ "responseType": "Volo.Abp.Account.ProfileDto",
+ "responseTypeAsJson": "",
+ "parameterDescriptions": [
+ {
+ "name": "input",
+ "type": "UpdateProfileDto"
+ }
+ ]
+ },
+ {
+ "path": "api/account/my-profile/change-password",
+ "method": "POST",
+ "groupName": "Profile",
+ "responseType": "System.Void",
+ "responseTypeAsJson": "",
+ "parameterDescriptions": [
+ {
+ "name": "input",
+ "type": "ChangePasswordInput"
+ }
+ ]
+ }
+ ],
+ "contentType": "httpApi",
+ "name": "Defined Http Apis",
+ "summary": null
}
]
}
\ No newline at end of file
diff --git a/modules/account/src/Volo.Abp.Account.Web.OpenIddict/Volo.Abp.Account.Web.OpenIddict.abppkg.analyze.json b/modules/account/src/Volo.Abp.Account.Web.OpenIddict/Volo.Abp.Account.Web.OpenIddict.abppkg.analyze.json
index 2f22b0023e..5f73497d46 100644
--- a/modules/account/src/Volo.Abp.Account.Web.OpenIddict/Volo.Abp.Account.Web.OpenIddict.abppkg.analyze.json
+++ b/modules/account/src/Volo.Abp.Account.Web.OpenIddict/Volo.Abp.Account.Web.OpenIddict.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.Abp.Account.Web.OpenIddict",
- "hash": "29785246e5bdaa8010c7da236efe3ba1",
+ "hash": "",
"contents": [
{
"namespace": "Volo.Abp.Account.Web",
diff --git a/modules/account/src/Volo.Abp.Account.Web/Volo.Abp.Account.Web.abppkg.analyze.json b/modules/account/src/Volo.Abp.Account.Web/Volo.Abp.Account.Web.abppkg.analyze.json
index f346e062ae..af62c4f131 100644
--- a/modules/account/src/Volo.Abp.Account.Web/Volo.Abp.Account.Web.abppkg.analyze.json
+++ b/modules/account/src/Volo.Abp.Account.Web/Volo.Abp.Account.Web.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.Abp.Account.Web",
- "hash": "93b7e37fb41330719f0911b2c1b31cf0",
+ "hash": "",
"contents": [
{
"namespace": "Volo.Abp.Account.Web",
@@ -78,6 +78,107 @@
"contentType": "abpModule",
"name": "AbpAccountWebModule",
"summary": null
+ },
+ {
+ "apis": [
+ {
+ "path": "api/account/login",
+ "method": "POST",
+ "groupName": "Account",
+ "responseType": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult",
+ "responseTypeAsJson": "",
+ "parameterDescriptions": [
+ {
+ "name": "login",
+ "type": "UserLoginInfo"
+ }
+ ]
+ },
+ {
+ "path": "api/account/logout",
+ "method": "GET",
+ "groupName": "Account",
+ "responseType": "System.Void",
+ "responseTypeAsJson": "",
+ "parameterDescriptions": []
+ },
+ {
+ "path": "api/account/check-password",
+ "method": "POST",
+ "groupName": "Account",
+ "responseType": "Volo.Abp.Account.Web.Areas.Account.Controllers.Models.AbpLoginResult",
+ "responseTypeAsJson": "",
+ "parameterDescriptions": [
+ {
+ "name": "login",
+ "type": "UserLoginInfo"
+ }
+ ]
+ }
+ ],
+ "contentType": "httpApi",
+ "name": "Defined Http Apis",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.Abp.Account.Web.Pages.Account",
+ "contentType": "webPage",
+ "name": "AccessDeniedModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.Abp.Account.Web.Pages.Account",
+ "contentType": "webPage",
+ "name": "ForgotPasswordModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.Abp.Account.Web.Pages.Account",
+ "contentType": "webPage",
+ "name": "LoggedOutModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.Abp.Account.Web.Pages.Account",
+ "contentType": "webPage",
+ "name": "LoginModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.Abp.Account.Web.Pages.Account",
+ "contentType": "webPage",
+ "name": "LogoutModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.Abp.Account.Web.Pages.Account",
+ "contentType": "webPage",
+ "name": "ManageModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.Abp.Account.Web.Pages.Account",
+ "contentType": "webPage",
+ "name": "PasswordResetLinkSentModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.Abp.Account.Web.Pages.Account",
+ "contentType": "webPage",
+ "name": "RegisterModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.Abp.Account.Web.Pages.Account",
+ "contentType": "webPage",
+ "name": "ResetPasswordModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.Abp.Account.Web.Pages.Account",
+ "contentType": "webPage",
+ "name": "ResetPasswordConfirmationModel",
+ "summary": null
}
]
}
\ No newline at end of file
diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo.Abp.AuditLogging.Domain.Shared.abppkg.analyze.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo.Abp.AuditLogging.Domain.Shared.abppkg.analyze.json
index 459bd50c19..3dab2d3fe4 100644
--- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo.Abp.AuditLogging.Domain.Shared.abppkg.analyze.json
+++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo.Abp.AuditLogging.Domain.Shared.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.Abp.AuditLogging.Domain.Shared",
- "hash": "8e82f96ec1349d214e72c8fb4f902460",
+ "hash": "",
"contents": [
{
"namespace": "Volo.Abp.AuditLogging",
diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/sv.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/sv.json
new file mode 100644
index 0000000000..f0b8b1ebee
--- /dev/null
+++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain.Shared/Volo/Abp/AuditLogging/Localization/sv.json
@@ -0,0 +1,98 @@
+{
+ "culture": "sv",
+ "texts": {
+ "Permission:AuditLogging": "Granskning av loggning",
+ "Permission:AuditLogs": "Granskningsloggar",
+ "Menu:AuditLogging": "Granskningsloggar",
+ "AuditLogs": "Granskningsloggar",
+ "HttpStatus": "HTTP-status",
+ "HttpMethod": "HTTP-metod",
+ "HttpMethodFilter": "Filter för HTTP-metod",
+ "HttpRequest": "HTTP-förfrÄgan",
+ "User": "AnvÀndare",
+ "UserNameFilter": "AnvÀndarfilter",
+ "HasException": "Har undantag",
+ "IpAddress": "IP-adress",
+ "Time": "Tid",
+ "Date": "Datum",
+ "Duration": "Varaktighet",
+ "Detail": "Detalj",
+ "Overall": "Ăvergripande",
+ "Actions": "Ă
tgÀrder",
+ "ClientIpAddress": "Klientens IP-adress",
+ "ClientName": "Kundens namn",
+ "BrowserInfo": "Info om webblÀsare",
+ "Url": "URL",
+ "UserName": "AnvÀndarens namn",
+ "TenantImpersonator": "Imitation av hyresgÀst",
+ "UserImpersonator": "AnvÀndarimitatör",
+ "UrlFilter": "URL-filter",
+ "Exceptions": "Undantag",
+ "Comments": "Kommentarer",
+ "HttpStatusCode": "HTTP-statuskod",
+ "HttpStatusCodeFilter": "Filter för HTTP-statuskod",
+ "ServiceName": "Service",
+ "MethodName": "Metod",
+ "CorrelationId": "Korrelation Id",
+ "ApplicationName": "Applikationens namn",
+ "ExecutionDuration": "Varaktighet",
+ "ExtraProperties": "Extra egenskaper",
+ "MaxDuration": "Max. varaktighet",
+ "MinDuration": "Min. varaktighet",
+ "MinMaxDuration": "Varaktighet (min. - max.)",
+ "{0}Milliseconds": "{0} millisekunder",
+ "ExecutionTime": "Tid",
+ "Parameters": "Parametrar",
+ "EntityTypeFullName": "Entitetstyp FullstÀndigt namn",
+ "Entity": "Entitet",
+ "ChangeType": "Ăndra typ",
+ "ChangeTime": "Tid",
+ "NewValue": "Nytt vÀrde",
+ "OriginalValue": "Ursprungligt vÀrde",
+ "PropertyName": "Namn pÄ fastighet",
+ "PropertyTypeFullName": "Fastighetstyp FullstÀndigt namn",
+ "Yes": "Ja",
+ "No": "Nej",
+ "Changes": "FörÀndringar",
+ "AverageExecutionDurationInLogsPerDay": "Genomsnittlig exekveringstid",
+ "AverageExecutionDurationInMilliseconds": "Genomsnittlig exekveringstid i millisekunder",
+ "ErrorRateInLogs": "Felprocent i loggar",
+ "Success": "FramgÄng",
+ "Fault": "Fel",
+ "NoChanges": "Ingen förÀndring(ar)",
+ "EntityChanges": "FörÀndringar av enheter",
+ "EntityId": "Entitet Id",
+ "EntityChangeStartTime": "Min Àndringsdatum",
+ "EntityChangeEndTime": "Max Àndringsdatum",
+ "EntityHistory": "Enhetens historia",
+ "DaysAgoTitle": "{0} {1}.",
+ "DaysAgoWithUserTitle": "{0} {1} av {2}.",
+ "Created": "Skapad",
+ "Updated": "Uppdaterad",
+ "Deleted": "Borttagen",
+ "ChangeHistory": "Ăndra historik",
+ "FullChangeHistory": "FullstÀndig Àndringshistorik",
+ "ChangeDetails": "Ăndra detaljer",
+ "DurationMs": "Varaktighet (ms)",
+ "StartDate": "Startdatum",
+ "EndDate": "Slutdatum",
+ "Feature:AuditLoggingGroup": "Granskning av loggning",
+ "Feature:AuditLoggingEnable": "Aktivera granskningsloggning sida",
+ "Feature:AuditLoggingEnableDescription": "Aktivera sidan för granskningsloggning i programmet.",
+ "Feature:AuditLoggingSettingManagementEnable": "Aktivera hantering av instÀllningar för granskningslogg",
+ "Feature:AuditLoggingSettingManagementEnableDescription": "Aktivera konfigurationen av instÀllningshanteringen för granskningsloggen i programmet.",
+ "InvalidAuditLogDeletionSettings": "Ogiltiga instÀllningar för radering av revisionslogg. Om radering Àr aktiverad ska perioden vara större Àn 0 dagar.",
+ "AuditLogSettingsGeneral": "AllmÀnt",
+ "AuditLogSettingsGlobal": "Globalt",
+ "DisplayName:IsPeriodicDeleterEnabled": "Möjliggör uppstÀdning av hela systemet",
+ "Description:IsPeriodicDeleterEnabled": "Om detta alternativ Àr avaktiverat fungerar inte den periodiska raderingen. Granskningsloggar kommer inte att raderas automatiskt.",
+ "DisplayName:GlobalIsExpiredDeleterEnabled": "Aktivera stÀdservice för alla hyresgÀster och vÀrd",
+ "Description:GlobalIsExpiredDeleterEnabled": "Om det hÀr alternativet Àr aktiverat raderas alla förfallna objekt för hyresgÀster och vÀrd automatiskt om det inte har en specifik instÀllning.",
+ "DisplayName:IsExpiredDeleterEnabled": "Möjliggör stÀdning",
+ "Description:IsExpiredDeleterEnabled": "Om detta alternativ Àr aktiverat raderas de utgÄngna artiklarna automatiskt.",
+ "DisplayName:ExpiredDeleterPeriod": "UtgÄngen raderingsperiod för objekt",
+ "Description:ExpiredDeleterPeriod": "StÀll in antalet dagar efter vilka utgÄngna objekt automatiskt ska raderas.",
+ "ExpiredDeleterPeriodUnit": "dag(ar)",
+ "AuditLogsBeforeXWillBeDeleted": "Granskningsloggar före {0} kommer att raderas."
+ }
+}
\ No newline at end of file
diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo.Abp.AuditLogging.Domain.abppkg.analyze.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo.Abp.AuditLogging.Domain.abppkg.analyze.json
index 9d2726bc18..92016b016f 100644
--- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo.Abp.AuditLogging.Domain.abppkg.analyze.json
+++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo.Abp.AuditLogging.Domain.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.Abp.AuditLogging.Domain",
- "hash": "fa171768247503b44e7e57d4518d2ef8",
+ "hash": "",
"contents": [
{
"namespace": "Volo.Abp.AuditLogging",
@@ -274,7 +274,7 @@
{
"name": "IMultiTenant",
"namespace": "Volo.Abp.MultiTenancy",
- "declaringAssemblyName": "Volo.Abp.MultiTenancy",
+ "declaringAssemblyName": "Volo.Abp.MultiTenancy.Abstractions",
"fullName": "Volo.Abp.MultiTenancy.IMultiTenant"
}
],
@@ -486,6 +486,7 @@
"methods": [
{
"returnType": "List",
+ "namespace": "Volo.Abp.AuditLogging",
"name": "GetListAsync",
"summary": null,
"isAsync": true,
@@ -528,6 +529,11 @@
"name": "url",
"isOptional": true
},
+ {
+ "type": "String",
+ "name": "clientId",
+ "isOptional": true
+ },
{
"type": "Nullable",
"name": "userId",
@@ -587,6 +593,7 @@
},
{
"returnType": "Int64",
+ "namespace": "Volo.Abp.AuditLogging",
"name": "GetCountAsync",
"summary": null,
"isAsync": true,
@@ -614,6 +621,11 @@
"name": "url",
"isOptional": true
},
+ {
+ "type": "String",
+ "name": "clientId",
+ "isOptional": true
+ },
{
"type": "Nullable",
"name": "userId",
@@ -668,6 +680,7 @@
},
{
"returnType": "Dictionary",
+ "namespace": "Volo.Abp.AuditLogging",
"name": "GetAverageExecutionDurationPerDayAsync",
"summary": null,
"isAsync": true,
@@ -694,6 +707,7 @@
},
{
"returnType": "EntityChange",
+ "namespace": "Volo.Abp.AuditLogging",
"name": "GetEntityChange",
"summary": null,
"isAsync": true,
@@ -715,6 +729,7 @@
},
{
"returnType": "List",
+ "namespace": "Volo.Abp.AuditLogging",
"name": "GetEntityChangeListAsync",
"summary": null,
"isAsync": true,
@@ -781,6 +796,7 @@
},
{
"returnType": "Int64",
+ "namespace": "Volo.Abp.AuditLogging",
"name": "GetEntityChangeCountAsync",
"summary": null,
"isAsync": true,
@@ -827,6 +843,7 @@
},
{
"returnType": "EntityChangeWithUsername",
+ "namespace": "Volo.Abp.AuditLogging",
"name": "GetEntityChangeWithUsernameAsync",
"summary": null,
"isAsync": true,
@@ -848,6 +865,7 @@
},
{
"returnType": "List",
+ "namespace": "Volo.Abp.AuditLogging",
"name": "GetEntityChangesWithUsernameAsync",
"summary": null,
"isAsync": true,
diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo.Abp.AuditLogging.EntityFrameworkCore.abppkg.analyze.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo.Abp.AuditLogging.EntityFrameworkCore.abppkg.analyze.json
index 5e5f6b6373..5d090598d4 100644
--- a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo.Abp.AuditLogging.EntityFrameworkCore.abppkg.analyze.json
+++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo.Abp.AuditLogging.EntityFrameworkCore.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.Abp.AuditLogging.EntityFrameworkCore",
- "hash": "ce7134690167eded17ba2eac28d2d34e",
+ "hash": "",
"contents": [
{
"namespace": "Volo.Abp.AuditLogging.EntityFrameworkCore",
@@ -67,33 +67,27 @@
{
"namespace": "Volo.Abp.AuditLogging.EntityFrameworkCore",
"connectionStringName": "AbpAuditLogging",
- "databaseTables": [
- {
- "entityFullName": "Volo.Abp.AuditLogging.AuditLog",
- "contentType": "databaseTable",
- "name": "AbpAuditLogs",
- "summary": null
- },
- {
- "entityFullName": "Volo.Abp.AuditLogging.AuditLogAction",
- "contentType": "databaseTable",
- "name": "AbpAuditLogActions",
- "summary": null
- },
- {
- "entityFullName": "Volo.Abp.AuditLogging.EntityChange",
- "contentType": "databaseTable",
- "name": "AbpEntityChanges",
- "summary": null
- },
+ "databaseTables": [],
+ "replacedDbContexts": [],
+ "modelBuilderExtensionMethods": [
{
- "entityFullName": "Volo.Abp.AuditLogging.EntityPropertyChange",
- "contentType": "databaseTable",
- "name": "AbpEntityPropertyChanges",
- "summary": null
+ "returnType": "Void",
+ "namespace": "Volo.Abp.AuditLogging.EntityFrameworkCore",
+ "name": "ConfigureAuditLogging",
+ "summary": null,
+ "isAsync": false,
+ "isPublic": true,
+ "isPrivate": false,
+ "isStatic": true,
+ "parameters": [
+ {
+ "type": "ModelBuilder",
+ "name": "builder",
+ "isOptional": false
+ }
+ ]
}
],
- "replacedDbContexts": [],
"implementingInterfaces": [
{
"name": "IInfrastructure",
@@ -149,6 +143,12 @@
"declaringAssemblyName": "Volo.Abp.EntityFrameworkCore",
"fullName": "Volo.Abp.EntityFrameworkCore.IEfCoreDbContext"
},
+ {
+ "name": "IAbpEfCoreDbFunctionContext",
+ "namespace": "Volo.Abp.EntityFrameworkCore.GlobalFilters",
+ "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore",
+ "fullName": "Volo.Abp.EntityFrameworkCore.GlobalFilters.IAbpEfCoreDbFunctionContext"
+ },
{
"name": "ITransientDependency",
"namespace": "Volo.Abp.DependencyInjection",
diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo.Abp.AuditLogging.MongoDB.abppkg.analyze.json b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo.Abp.AuditLogging.MongoDB.abppkg.analyze.json
index 7b26febfce..93652f22ec 100644
--- a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo.Abp.AuditLogging.MongoDB.abppkg.analyze.json
+++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo.Abp.AuditLogging.MongoDB.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.Abp.AuditLogging.MongoDB",
- "hash": "ce6dfe92b247a77b0138c47e0da4a98c",
+ "hash": "",
"contents": [
{
"namespace": "Volo.Abp.AuditLogging.MongoDB",
@@ -71,7 +71,7 @@
{
"entityFullName": "Volo.Abp.AuditLogging.AuditLog",
"contentType": "databaseCollection",
- "name": "AbpAuditLogs",
+ "name": "AuditLogs",
"summary": null
}
],
diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/Volo.Abp.BackgroundJobs.Domain.Shared.abppkg.analyze.json b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/Volo.Abp.BackgroundJobs.Domain.Shared.abppkg.analyze.json
index c916e58771..40eeda286c 100644
--- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/Volo.Abp.BackgroundJobs.Domain.Shared.abppkg.analyze.json
+++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain.Shared/Volo.Abp.BackgroundJobs.Domain.Shared.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.Abp.BackgroundJobs.Domain.Shared",
- "hash": "ad745dc8f75ef6e5b391ee5eca14a895",
+ "hash": "",
"contents": [
{
"namespace": "Volo.Abp.BackgroundJobs",
diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.abppkg.analyze.json b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.abppkg.analyze.json
index e969d25819..f792712158 100644
--- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.abppkg.analyze.json
+++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo.Abp.BackgroundJobs.Domain.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.Abp.BackgroundJobs.Domain",
- "hash": "9135b4c99ca5f16a980041e8621fb415",
+ "hash": "",
"contents": [
{
"namespace": "Volo.Abp.BackgroundJobs",
@@ -222,6 +222,7 @@
"methods": [
{
"returnType": "List",
+ "namespace": "Volo.Abp.BackgroundJobs",
"name": "GetWaitingListAsync",
"summary": null,
"isAsync": true,
diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo.Abp.BackgroundJobs.EntityFrameworkCore.abppkg.analyze.json b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo.Abp.BackgroundJobs.EntityFrameworkCore.abppkg.analyze.json
index 41772a0d4f..fd7de5ddf3 100644
--- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo.Abp.BackgroundJobs.EntityFrameworkCore.abppkg.analyze.json
+++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo.Abp.BackgroundJobs.EntityFrameworkCore.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.Abp.BackgroundJobs.EntityFrameworkCore",
- "hash": "093b92974b3f005cca5e441d8cc1bafb",
+ "hash": "",
"contents": [
{
"namespace": "Volo.Abp.BackgroundJobs.EntityFrameworkCore",
@@ -67,15 +67,27 @@
{
"namespace": "Volo.Abp.BackgroundJobs.EntityFrameworkCore",
"connectionStringName": "AbpBackgroundJobs",
- "databaseTables": [
+ "databaseTables": [],
+ "replacedDbContexts": [],
+ "modelBuilderExtensionMethods": [
{
- "entityFullName": "Volo.Abp.BackgroundJobs.BackgroundJobRecord",
- "contentType": "databaseTable",
- "name": "AbpBackgroundJobs",
- "summary": null
+ "returnType": "Void",
+ "namespace": "Volo.Abp.BackgroundJobs.EntityFrameworkCore",
+ "name": "ConfigureBackgroundJobs",
+ "summary": null,
+ "isAsync": false,
+ "isPublic": true,
+ "isPrivate": false,
+ "isStatic": true,
+ "parameters": [
+ {
+ "type": "ModelBuilder",
+ "name": "builder",
+ "isOptional": false
+ }
+ ]
}
],
- "replacedDbContexts": [],
"implementingInterfaces": [
{
"name": "IInfrastructure",
@@ -131,6 +143,12 @@
"declaringAssemblyName": "Volo.Abp.EntityFrameworkCore",
"fullName": "Volo.Abp.EntityFrameworkCore.IEfCoreDbContext"
},
+ {
+ "name": "IAbpEfCoreDbFunctionContext",
+ "namespace": "Volo.Abp.EntityFrameworkCore.GlobalFilters",
+ "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore",
+ "fullName": "Volo.Abp.EntityFrameworkCore.GlobalFilters.IAbpEfCoreDbFunctionContext"
+ },
{
"name": "ITransientDependency",
"namespace": "Volo.Abp.DependencyInjection",
diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo.Abp.BackgroundJobs.MongoDB.abppkg.analyze.json b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo.Abp.BackgroundJobs.MongoDB.abppkg.analyze.json
index 3c333134f7..d6e11b2a6f 100644
--- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo.Abp.BackgroundJobs.MongoDB.abppkg.analyze.json
+++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo.Abp.BackgroundJobs.MongoDB.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.Abp.BackgroundJobs.MongoDB",
- "hash": "43dcde5f0f68f0b06ce3158a154b58e1",
+ "hash": "",
"contents": [
{
"namespace": "Volo.Abp.BackgroundJobs.MongoDB",
@@ -71,7 +71,7 @@
{
"entityFullName": "Volo.Abp.BackgroundJobs.BackgroundJobRecord",
"contentType": "databaseCollection",
- "name": "AbpBackgroundJobs",
+ "name": "BackgroundJobs",
"summary": null
}
],
diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.abppkg.analyze.json b/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.abppkg.analyze.json
index 0e1d29e0df..14797aa792 100644
--- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.abppkg.analyze.json
+++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic",
- "hash": "69ff20961072c952f3a841d6e783cba9",
+ "hash": "",
"contents": [
{
"namespace": "Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic",
diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json
index 75416ec342..634b99a3cb 100644
--- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json
+++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json
@@ -3,8 +3,8 @@
"name": "asp.net",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.shared": "~8.3.0-rc.1",
- "@abp/prismjs": "~8.3.0-rc.1",
- "@abp/highlight.js": "~8.3.0-rc.1"
+ "@abp/aspnetcore.mvc.ui.theme.shared": "~8.3.0",
+ "@abp/prismjs": "~8.3.0",
+ "@abp/highlight.js": "~8.3.0"
}
}
diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock
index 0d7bb87257..214c3a3fdd 100644
--- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock
+++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock
@@ -2,212 +2,212 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0-rc.1.tgz#cec5ca6c5a5f61a361425b9d55711beb0db4eb81"
- integrity sha512-qLAzDwiQvRB8xDs6bkeZ4YLMUuTb6Dz/GmWT61dSMUAhRCTPqPi6aWnt9fiM99HbkP7APLPb7d+o5ho6FoktNQ==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~8.3.0-rc.1"
- "@abp/bootstrap" "~8.3.0-rc.1"
- "@abp/bootstrap-datepicker" "~8.3.0-rc.1"
- "@abp/bootstrap-daterangepicker" "~8.3.0-rc.1"
- "@abp/datatables.net-bs5" "~8.3.0-rc.1"
- "@abp/font-awesome" "~8.3.0-rc.1"
- "@abp/jquery-form" "~8.3.0-rc.1"
- "@abp/jquery-validation-unobtrusive" "~8.3.0-rc.1"
- "@abp/lodash" "~8.3.0-rc.1"
- "@abp/luxon" "~8.3.0-rc.1"
- "@abp/malihu-custom-scrollbar-plugin" "~8.3.0-rc.1"
- "@abp/moment" "~8.3.0-rc.1"
- "@abp/select2" "~8.3.0-rc.1"
- "@abp/sweetalert2" "~8.3.0-rc.1"
- "@abp/timeago" "~8.3.0-rc.1"
- "@abp/toastr" "~8.3.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0-rc.1.tgz#7329e4878e64277dfed88eef5e9d1715d1af925f"
- integrity sha512-NPWrtJ+Il+SI0oPQ5gc1Lc9vfPZvHbe0d/5y5qGIdwKY1F5txIyRGesc0najOLIUe7Z66AInyfNuNeoaFNR0fg==
+"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0.tgz#5d6bb5181a62770e9cb967980b77e75c115c5ed7"
+ integrity sha512-o/0eh8jLS+YJiseTKzzioUz0vNnMFzyoz+mkyA4PlO1gqw2JFhzPhTBZ3cuyV9QlxUfEA8dWAkqAUX6vqiHwkw==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~8.3.0"
+ "@abp/bootstrap" "~8.3.0"
+ "@abp/bootstrap-datepicker" "~8.3.0"
+ "@abp/bootstrap-daterangepicker" "~8.3.0"
+ "@abp/datatables.net-bs5" "~8.3.0"
+ "@abp/font-awesome" "~8.3.0"
+ "@abp/jquery-form" "~8.3.0"
+ "@abp/jquery-validation-unobtrusive" "~8.3.0"
+ "@abp/lodash" "~8.3.0"
+ "@abp/luxon" "~8.3.0"
+ "@abp/malihu-custom-scrollbar-plugin" "~8.3.0"
+ "@abp/moment" "~8.3.0"
+ "@abp/select2" "~8.3.0"
+ "@abp/sweetalert2" "~8.3.0"
+ "@abp/timeago" "~8.3.0"
+ "@abp/toastr" "~8.3.0"
+
+"@abp/aspnetcore.mvc.ui@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0.tgz#d7ba0539bfcc6661a347dea7f952489010b3e816"
+ integrity sha512-OxgZhLKiXGFYYpNJ5O/IbhinsniiBPv9586e+1Soar0GckCMIIegJxnJb1Bo1O75blrcK2cIU6LqjRT1FXt2Lw==
dependencies:
ansi-colors "^4.1.3"
-"@abp/bootstrap-datepicker@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0-rc.1.tgz#d3bcb5f0063df631ad45c7f822195fc4e5c5b4e2"
- integrity sha512-oqbwh9dz8XNfh+eZou8GvcEUYA1J0qr3ABA1r72DJZ/nzfLQX7pUO8NkkaDLpVwrly64rfOlxV4LT7g5muoAsw==
+"@abp/bootstrap-datepicker@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0.tgz#8c1bf9efec37b671d8f28b8b1e89c1ac66684267"
+ integrity sha512-KCwMtm7x+cnKPeNMzhjDJUce0stwu4e57ibmvA6sMf1tmj+yB256O4E2hIDDohiT3vP/zV8HVHX6uATlcmGC9w==
dependencies:
bootstrap-datepicker "^1.10.0"
-"@abp/bootstrap-daterangepicker@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0-rc.1.tgz#33958a1806a070db4fb01eb40a0897bfd16cf1f5"
- integrity sha512-egtnxhRMCu56RV2bIRBLLTly2Y4W/2jwl9el+9Stjc8IN91j2UL5E4t5qn3zI3vXvVX4w5vP+TthQj0grFK0/Q==
+"@abp/bootstrap-daterangepicker@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0.tgz#2b8ed978333502677916f88cbb3e1d1b1c8a3a17"
+ integrity sha512-uQSfuCQogl4BujdqvtdAoSE+z32ci8FT5+i3gLfpqbgTaxvY/Kv5NxAUH5/1sjnuAE7SMWO+eVvI3V0pXgQohg==
dependencies:
bootstrap-daterangepicker "^3.1.0"
-"@abp/bootstrap@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0-rc.1.tgz#3ca994e4c003d056024dcd533221461cccd14f2a"
- integrity sha512-xrs0JOYFEPzi3V6s9d3SCj0CxY06bBmFUK5aETgKUiXBXa4vU2YoNbnrCtDUvV+mn517FRuA/j3RaFkTWYg48g==
+"@abp/bootstrap@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0.tgz#96d6ea7e6ac30f6e34e495a4224f56f7b2a1a7a3"
+ integrity sha512-5AmdTtakmWhZmHrb7ibvvf+KwF9OGadpAe7Kv9mNEE02K2qkp7Xw4r5o/bgVl7YfLC1FA6GZZXrV2s2t0gjHtg==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
bootstrap "^5.3.3"
-"@abp/clipboard@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-8.3.0-rc.1.tgz#65c6cd6672fc248097659908edd4a9fe92664475"
- integrity sha512-CVyO/8BK2WnegwrEvBJCNcbkI5l31U/pZBn7DBUGpiawlLiyYZOtGFUgu4sIUTEfyaRdLiCIPd0eMzDPKMVTgA==
+"@abp/clipboard@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-8.3.0.tgz#1b171e533f768cf42c8fc0c9c67fac1c636fee8c"
+ integrity sha512-T0O4OaMxLLYztAxyvEc3onEOpGHB/C8/jDcvJwd7mgpLoi9zXVfHwpnzkx/egfNJMzp49STD6Jc+jACi8Uq+CQ==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
clipboard "^2.0.11"
-"@abp/core@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0-rc.1.tgz#771c7ecd27319201a8236f0bc6b5601188059325"
- integrity sha512-IB8Baa3LIv3XYja6iBw6VSnITGcRseGyY8wBNEXRiB+ni21Bv//NMyohdOot6G+HlnHlrB7kFeCX+gWu+LuYkg==
+"@abp/core@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0.tgz#3a68f5a9549efcc3e13500e301f2576751b51445"
+ integrity sha512-zrxnZi4qij/Y4AZWaXuPqs3Dd7gBtU/onX7FkYxLgQDxYBfx+84QAnPRNRFKMWaD/wKbTUB0wA66U3t2aiQX9Q==
dependencies:
- "@abp/utils" "~8.3.0-rc.1"
+ "@abp/utils" "~8.3.0"
-"@abp/datatables.net-bs5@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0-rc.1.tgz#b53dc353f485952439ea10035df0851d520efe96"
- integrity sha512-89wpkG6u1YBR98OmuEbvs4VdR5n8L4n3Z8GiHwuKr2FpEOx7cAXYKsx/8ifmICMLPiMIvFrtOEBrrv5ZKANsAA==
+"@abp/datatables.net-bs5@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0.tgz#21822ae4912a561afe9112925185aece03fcd0eb"
+ integrity sha512-GOGYSSHp3iPUDFRX2Y3C0wkiCOJDuYuK/zUSzQLNpOvBMZO+I/oWBcZM+qkVowIzsoRlAGV9+CVV2B/B05qidA==
dependencies:
- "@abp/datatables.net" "~8.3.0-rc.1"
+ "@abp/datatables.net" "~8.3.0"
datatables.net-bs5 "^2.0.8"
-"@abp/datatables.net@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0-rc.1.tgz#bb70608994c4a52bd15331f76af718353c843f94"
- integrity sha512-G42D6W0Xb8NIQxJWGpcxLOjbZ4CHtrm9oBG5+GfVmQEPGfl8r+DYdrYDAkysDg483s+48POH7NC3L1LOlxlqRg==
+"@abp/datatables.net@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0.tgz#ff697758ce9309ba8311f23aec921c4722588c8b"
+ integrity sha512-4dIdv7eN1tVouOUrlF+MIdg8zQpecyH61waqLgy1q5jMZQivrTSFZ7UWMG3WVOAYjw5zSUZHZPbzA+ttnaOPkg==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
datatables.net "^2.0.8"
-"@abp/font-awesome@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0-rc.1.tgz#ea05d7e08395b1894eefe6f912ae0534fd75e69a"
- integrity sha512-GN1xZ76RzQC3aqU2m19vYsyfESCeoSsp8AtvilmeqsjlzhuLLdQ6UWSxMqRqE22TCWRXbA/d/7IAb12TB1mawg==
+"@abp/font-awesome@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0.tgz#9e4e9adc08dfca52c0a07d1608c5e5662675a4c9"
+ integrity sha512-NRxvM/dzvQC2Cj/F5i07XB/i6IVTmXcO9sOq6TWosWib0wGaPxRbCSjy8QUAYSD1QYaVQ30XMb3XXImaMGyd8A==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
"@fortawesome/fontawesome-free" "^6.5.2"
-"@abp/highlight.js@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-8.3.0-rc.1.tgz#14c1904f860543581440c67dc01fea109b61cccf"
- integrity sha512-lnJtMxTt9gkZ24ZZZ5bAMfK8T3Sbwe7QxyXfQ2+oEm2NosNNbug2hLOHtINdFThp1bDN/bD+h0yXAWNAxhDSPQ==
+"@abp/highlight.js@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-8.3.0.tgz#fabd11a8ef7cd0e379b4c9b359d66b4aa7585e30"
+ integrity sha512-SHvGXqQrZGuNmup32FisVHrWCdTJyEzHgp6y8Twx1FaP1e0hSN3QK6Jw4Do600ZKI9n5xCK+kMCpdJau8I6bIg==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
"@highlightjs/cdn-assets" "~11.9.0"
-"@abp/jquery-form@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0-rc.1.tgz#21025048f44028a5cb1ced7414cb48af00e91bff"
- integrity sha512-mVZzEJKbhiYmXK2yZRZAJwO5e7C2N0lj8ueOYPiFG6h4UKLbKPHQdIrkapyc88VirrELe1hnhJJbQ56dsQWeyg==
+"@abp/jquery-form@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0.tgz#fa2ad2fedbe3d3528ee94cbbd4f94d48f0cb5e4d"
+ integrity sha512-olP9FmpNVTbOIewsVua0moHVYXw4Sl3chFbvTDLG6vRBohLSjllUXfgY3UEIVWR1PCqnAg+iEJZl9NHB9iOLBg==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0-rc.1.tgz#63042715391ca63f273874ff66fca4b20330d31b"
- integrity sha512-EKQf733+HS9bIVQhMgAHYZfCY663GqNv8KUcCIuQOHPt5DWU49ygYhawkcYIzUKd2Gy9+ZtyWLkWmoBxTnwlmw==
+"@abp/jquery-validation-unobtrusive@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0.tgz#0992cdd33170df83c79aa3371038c0b30e451521"
+ integrity sha512-9hidjq8x8sTnP5O3K2b2x9NpxvPd9WB03ENR6OfvM89kfSmQapSvBZTlCu80YK9NaQJ6MLQRLYOCuc3GHcj3EQ==
dependencies:
- "@abp/jquery-validation" "~8.3.0-rc.1"
+ "@abp/jquery-validation" "~8.3.0"
jquery-validation-unobtrusive "^4.0.0"
-"@abp/jquery-validation@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0-rc.1.tgz#8c82189ba7c3614f7306c2bf958b3717a6a4e702"
- integrity sha512-Fr8AI//7iV743S6bw4ixE5qOu+af3HfZSivQJnYVVTbR/75gPqI/xRe6u/k82TJIBM7IaspQ4QdruMuvnJyBpQ==
+"@abp/jquery-validation@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0.tgz#bd6a72c6d86f116abe3b5d2adf3752bdbbcca887"
+ integrity sha512-6l5BZSa3N0Fou6Se7MfUSnI2dD4SYhZ2V988bgPJQ6p37XBOZ2OAj7LEIf5FSjtUzXjao/6/vqjkPNYreNikig==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
jquery-validation "^1.20.1"
-"@abp/jquery@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0-rc.1.tgz#a181c6749d58690b3265705959d8c818296896f3"
- integrity sha512-fXs35cDLAw66irfHsFIWD41RKzpLABkULLoMwxfB76nOVPdV7qlWrXoI2O/du3xhCqBqHR4fS8xjwE6kFvkdLQ==
+"@abp/jquery@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0.tgz#9be5ef2f769680226e6a1a981026590caf3b57ef"
+ integrity sha512-GsFY+n3EtS6B0pAoKd+xMnt5Dzi5bHvIbhLgDgfQfOBzAy3twGRWsPQ3nkuXXm8TppwujMNowU1oiLKPPm0AOA==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
jquery "~3.7.1"
-"@abp/lodash@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0-rc.1.tgz#32f8805031f73b9d5bdc338afe49739c4ebc3ce9"
- integrity sha512-UBGlG5+tFpyAPMuwpkY7K/g21c+d3Aq3HbFmcIilUEIsJ+yJqj95xhRh6t/LSwJCo5ntdSCgVC85q0kD0fQlQA==
+"@abp/lodash@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0.tgz#f5a0a496c999886f2d6999067bfac2e1f0c3969c"
+ integrity sha512-BiAsONbKR/RKG3WjRaMWVmhNe1ELEsykVq+ogG1Rhk3kwPbvze3TS8k2p0Lu/RC41/BmDUmJ5abg1pUMwkRT8w==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
lodash "^4.17.21"
-"@abp/luxon@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0-rc.1.tgz#df19773212502336c2caf6a8806b7647748f8f81"
- integrity sha512-1oPx0tGyFi58T0yv/pdqJpcIRWU6ej5Sv28fRgz3J6tHam3hVPtKJPK9Ajvn6+MNVDLuMUczgVtfWEOvO2Kqrg==
+"@abp/luxon@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0.tgz#7dd3f756be1605506e26f7ac76b80cc082a12d07"
+ integrity sha512-8gdI5BtXkVp0sFg89QVDe8AvgQ7Qfq4JCqz2PMrKPSATR3H8GD6BCaEYpRp6CNTCjVrQjGZdzKgUyea1D3dHbw==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
luxon "^3.4.4"
-"@abp/malihu-custom-scrollbar-plugin@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0-rc.1.tgz#b57086d708082ce45e1917aeca8c92029ebd805d"
- integrity sha512-4sa5e07EPW9IM7eQbvKtk78gd/bESYhTsl+BeWSKeqjj5wwwPYf4GIEvfJM7JVnhYwh1IPYDEkTv9QNYLczXKQ==
+"@abp/malihu-custom-scrollbar-plugin@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0.tgz#c88c132c3402bbb02054ca7d446051950f87a817"
+ integrity sha512-nd/mb6LJa6fMxal8PGcIjIRIoZ/UHCd01WDC9YI2H4wGCGx0CA0JyHso5oc/OEzJhUL8ujO/vYm9uLb7YahPtA==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/moment@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0-rc.1.tgz#0ba9d64ca6d7b454af7aaa63e54be267f333e1fe"
- integrity sha512-YbVEDg3m+D5KMcTCBEnor/tFgmk9IeL4pF/oChYQGXLeyohY7vfmK68owAnEDN61nCRXng9xykiZu2bLq829WA==
+"@abp/moment@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0.tgz#8e4f7a523ab76ef9e4cd96a399560bad38d38d1a"
+ integrity sha512-LywSsKuQ2GN/Btmle6CcTKa811zbvUWdC+RLQA792K9HyBs6LvN0qRRluEQZgplairRgh2pDOg8tdFlUERkv2w==
dependencies:
moment "^2.30.1"
-"@abp/prismjs@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-8.3.0-rc.1.tgz#82f98db7e3a5e5e535ecb0452c84a5fda57b5801"
- integrity sha512-kvO7fU9KfXNK44mL9QDtGuDD3ebiXTd5nKNxgrsneHhYsdNiWwXzqWpZlfs7t9nqSydLzqWkQZ7we01GoxeQ/g==
+"@abp/prismjs@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-8.3.0.tgz#0c87c63294d1452ed7152083d2fb6e70aa3aeae6"
+ integrity sha512-3wpwbqqlGRfQSLcBP+Qb2TKOoVGZVYYwOP6dP3So9ev8J5gFMDEizH9zLwRVHYrrsZZP8/etYnyZ0hn7ewuI5Q==
dependencies:
- "@abp/clipboard" "~8.3.0-rc.1"
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/clipboard" "~8.3.0"
+ "@abp/core" "~8.3.0"
prismjs "^1.29.0"
-"@abp/select2@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0-rc.1.tgz#3eb932e05987cc1e13f72decc9ae70d47801bf7d"
- integrity sha512-lZuJLiFcOEVj6cTPAA7ZfhE3v1LyivmMt8Tt7Dpvgybx2PDN1NtfLce2BCKb0MvsaTlfJMSK0ZLu3JpxCQ+Q/A==
+"@abp/select2@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0.tgz#ef4742fcd345394767f46180f61c6cabbd0b3867"
+ integrity sha512-bdLt2+ImxxpiZl4HGbYJpdDROQUT7/Z/+8A+6oJNacq3lNekdvufLYgTMxKru6zTbnd9j3HFKMOTE1eRjb9Xqg==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
select2 "^4.0.13"
-"@abp/sweetalert2@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0-rc.1.tgz#66d8b9ce287a71474ce37c217cd800e150a86138"
- integrity sha512-b6dZbc5/nYrUz5s+lAgi561XnsASa0ZJOn6f5W2Oakm9ULzqFndapKx5f+zHeJaNArpeGDh50AjQ+lcGGw83zQ==
+"@abp/sweetalert2@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0.tgz#a63020d57e44f7940817287d3d9676288bfb85aa"
+ integrity sha512-ooqPM4Z2v2scnMo5l8ycTmp6t/sW4sCsvIkJ4TyM876WLQJaZxJdOao4RQWuU+dVFr9zg8cOwqLH4q7UEiO6ww==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
sweetalert2 "^11.3.6"
-"@abp/timeago@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0-rc.1.tgz#d795b9cccb190f5d42f242727ac447fe03c30db3"
- integrity sha512-yJCA7PHmAxFxIvPq03iSx3LbIiDQls4AiVBO75103LEGokRUG9bg+iPA7GLkPpfNbnNgEJ7N7Gw6RQzMNRLCpA==
+"@abp/timeago@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0.tgz#b3b8d6927bf170f77af848bc1925e5ef6835bd55"
+ integrity sha512-Dd6xaUoF9Bp4F9WJnTsFBqY+Gt++UR7UmLvBZL/dvthkeNCu2I8MUsmshkUUjY0lIXpjZwefUOuyupQrgHXPMg==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
timeago "^1.6.7"
-"@abp/toastr@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0-rc.1.tgz#82c7f6566e604c2cf31555da3f9b0898df8a5541"
- integrity sha512-0nBM4nEvDlANVulk7EKoB4Lk/1fH+UgzPOyUOyemQZAWHgPhIpa4z5yiLkCeOxN1hu/CBEe+Jo7qJblsj+v7kQ==
+"@abp/toastr@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0.tgz#e68a2bd8f731e79034594bc2c736f7c66b3df1af"
+ integrity sha512-aWK/RaX/FmcEKhJLjsw1A0K2c04m2fRJkmo9NwzBCSscy6Msw9IMkqNWLiFDThMU8/qKzq7wq3Vmk/C0IpeAwA==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
toastr "^2.1.4"
-"@abp/utils@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0-rc.1.tgz#7db324059f8f9c64fbb5d5a6f0c2384896ca1928"
- integrity sha512-Eg4Lwv4DEDr5mfG/8ghwMPdphywZBZIxWTJCZnCWngDQ9fEn/bnYuL1WkvbVvKd10A6030wHEJXFJj2OuNdi3Q==
+"@abp/utils@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0.tgz#96ae9266ad4d833fd9d723acef7fc85fabf618d9"
+ integrity sha512-w/XAqza4Z8wBWRoj5uPNKbd1/bE9L/uUWk6EUSBKmljMRryWQBmaPkb1XgvrOMQIbyyF60tUvvipapQLPVh6hw==
dependencies:
just-compare "^2.3.0"
diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json
index 9f81d00783..3f9c9e79e8 100644
--- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json
+++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json
@@ -3,8 +3,8 @@
"name": "asp.net",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0-rc.1",
- "@abp/prismjs": "~8.3.0-rc.1"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0",
+ "@abp/prismjs": "~8.3.0"
},
"devDependencies": {}
}
diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock
index 894e32644a..62c9b5489d 100644
--- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock
+++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock
@@ -2,211 +2,211 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.basic@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-8.3.0-rc.1.tgz#7254b66019b99ac8a29385c1bb2c9c658a167bc7"
- integrity sha512-uMgO1VQgDOW9tMq9gl6idsBZZcL/voeMp0wkBTRORQHg0E+SyA8z0yQrg5S8hU/7zRwoZPm3K9R/Peu71jNTgQ==
- dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0-rc.1.tgz#cec5ca6c5a5f61a361425b9d55711beb0db4eb81"
- integrity sha512-qLAzDwiQvRB8xDs6bkeZ4YLMUuTb6Dz/GmWT61dSMUAhRCTPqPi6aWnt9fiM99HbkP7APLPb7d+o5ho6FoktNQ==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~8.3.0-rc.1"
- "@abp/bootstrap" "~8.3.0-rc.1"
- "@abp/bootstrap-datepicker" "~8.3.0-rc.1"
- "@abp/bootstrap-daterangepicker" "~8.3.0-rc.1"
- "@abp/datatables.net-bs5" "~8.3.0-rc.1"
- "@abp/font-awesome" "~8.3.0-rc.1"
- "@abp/jquery-form" "~8.3.0-rc.1"
- "@abp/jquery-validation-unobtrusive" "~8.3.0-rc.1"
- "@abp/lodash" "~8.3.0-rc.1"
- "@abp/luxon" "~8.3.0-rc.1"
- "@abp/malihu-custom-scrollbar-plugin" "~8.3.0-rc.1"
- "@abp/moment" "~8.3.0-rc.1"
- "@abp/select2" "~8.3.0-rc.1"
- "@abp/sweetalert2" "~8.3.0-rc.1"
- "@abp/timeago" "~8.3.0-rc.1"
- "@abp/toastr" "~8.3.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0-rc.1.tgz#7329e4878e64277dfed88eef5e9d1715d1af925f"
- integrity sha512-NPWrtJ+Il+SI0oPQ5gc1Lc9vfPZvHbe0d/5y5qGIdwKY1F5txIyRGesc0najOLIUe7Z66AInyfNuNeoaFNR0fg==
+"@abp/aspnetcore.mvc.ui.theme.basic@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-8.3.0.tgz#a2d17eb5da2c3abfad4bcc842cfcda0e58a130a4"
+ integrity sha512-T2dg7WlvNSrwTCfy5wk4gqiJ/15kIjMGM4wLXIJcMYn60yGY/YeX6Q4A3R/qJzfl4JdgW5rt3GpdKv86y/ADXg==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0"
+
+"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0.tgz#5d6bb5181a62770e9cb967980b77e75c115c5ed7"
+ integrity sha512-o/0eh8jLS+YJiseTKzzioUz0vNnMFzyoz+mkyA4PlO1gqw2JFhzPhTBZ3cuyV9QlxUfEA8dWAkqAUX6vqiHwkw==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~8.3.0"
+ "@abp/bootstrap" "~8.3.0"
+ "@abp/bootstrap-datepicker" "~8.3.0"
+ "@abp/bootstrap-daterangepicker" "~8.3.0"
+ "@abp/datatables.net-bs5" "~8.3.0"
+ "@abp/font-awesome" "~8.3.0"
+ "@abp/jquery-form" "~8.3.0"
+ "@abp/jquery-validation-unobtrusive" "~8.3.0"
+ "@abp/lodash" "~8.3.0"
+ "@abp/luxon" "~8.3.0"
+ "@abp/malihu-custom-scrollbar-plugin" "~8.3.0"
+ "@abp/moment" "~8.3.0"
+ "@abp/select2" "~8.3.0"
+ "@abp/sweetalert2" "~8.3.0"
+ "@abp/timeago" "~8.3.0"
+ "@abp/toastr" "~8.3.0"
+
+"@abp/aspnetcore.mvc.ui@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0.tgz#d7ba0539bfcc6661a347dea7f952489010b3e816"
+ integrity sha512-OxgZhLKiXGFYYpNJ5O/IbhinsniiBPv9586e+1Soar0GckCMIIegJxnJb1Bo1O75blrcK2cIU6LqjRT1FXt2Lw==
dependencies:
ansi-colors "^4.1.3"
-"@abp/bootstrap-datepicker@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0-rc.1.tgz#d3bcb5f0063df631ad45c7f822195fc4e5c5b4e2"
- integrity sha512-oqbwh9dz8XNfh+eZou8GvcEUYA1J0qr3ABA1r72DJZ/nzfLQX7pUO8NkkaDLpVwrly64rfOlxV4LT7g5muoAsw==
+"@abp/bootstrap-datepicker@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0.tgz#8c1bf9efec37b671d8f28b8b1e89c1ac66684267"
+ integrity sha512-KCwMtm7x+cnKPeNMzhjDJUce0stwu4e57ibmvA6sMf1tmj+yB256O4E2hIDDohiT3vP/zV8HVHX6uATlcmGC9w==
dependencies:
bootstrap-datepicker "^1.10.0"
-"@abp/bootstrap-daterangepicker@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0-rc.1.tgz#33958a1806a070db4fb01eb40a0897bfd16cf1f5"
- integrity sha512-egtnxhRMCu56RV2bIRBLLTly2Y4W/2jwl9el+9Stjc8IN91j2UL5E4t5qn3zI3vXvVX4w5vP+TthQj0grFK0/Q==
+"@abp/bootstrap-daterangepicker@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0.tgz#2b8ed978333502677916f88cbb3e1d1b1c8a3a17"
+ integrity sha512-uQSfuCQogl4BujdqvtdAoSE+z32ci8FT5+i3gLfpqbgTaxvY/Kv5NxAUH5/1sjnuAE7SMWO+eVvI3V0pXgQohg==
dependencies:
bootstrap-daterangepicker "^3.1.0"
-"@abp/bootstrap@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0-rc.1.tgz#3ca994e4c003d056024dcd533221461cccd14f2a"
- integrity sha512-xrs0JOYFEPzi3V6s9d3SCj0CxY06bBmFUK5aETgKUiXBXa4vU2YoNbnrCtDUvV+mn517FRuA/j3RaFkTWYg48g==
+"@abp/bootstrap@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0.tgz#96d6ea7e6ac30f6e34e495a4224f56f7b2a1a7a3"
+ integrity sha512-5AmdTtakmWhZmHrb7ibvvf+KwF9OGadpAe7Kv9mNEE02K2qkp7Xw4r5o/bgVl7YfLC1FA6GZZXrV2s2t0gjHtg==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
bootstrap "^5.3.3"
-"@abp/clipboard@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-8.3.0-rc.1.tgz#65c6cd6672fc248097659908edd4a9fe92664475"
- integrity sha512-CVyO/8BK2WnegwrEvBJCNcbkI5l31U/pZBn7DBUGpiawlLiyYZOtGFUgu4sIUTEfyaRdLiCIPd0eMzDPKMVTgA==
+"@abp/clipboard@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-8.3.0.tgz#1b171e533f768cf42c8fc0c9c67fac1c636fee8c"
+ integrity sha512-T0O4OaMxLLYztAxyvEc3onEOpGHB/C8/jDcvJwd7mgpLoi9zXVfHwpnzkx/egfNJMzp49STD6Jc+jACi8Uq+CQ==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
clipboard "^2.0.11"
-"@abp/core@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0-rc.1.tgz#771c7ecd27319201a8236f0bc6b5601188059325"
- integrity sha512-IB8Baa3LIv3XYja6iBw6VSnITGcRseGyY8wBNEXRiB+ni21Bv//NMyohdOot6G+HlnHlrB7kFeCX+gWu+LuYkg==
+"@abp/core@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0.tgz#3a68f5a9549efcc3e13500e301f2576751b51445"
+ integrity sha512-zrxnZi4qij/Y4AZWaXuPqs3Dd7gBtU/onX7FkYxLgQDxYBfx+84QAnPRNRFKMWaD/wKbTUB0wA66U3t2aiQX9Q==
dependencies:
- "@abp/utils" "~8.3.0-rc.1"
+ "@abp/utils" "~8.3.0"
-"@abp/datatables.net-bs5@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0-rc.1.tgz#b53dc353f485952439ea10035df0851d520efe96"
- integrity sha512-89wpkG6u1YBR98OmuEbvs4VdR5n8L4n3Z8GiHwuKr2FpEOx7cAXYKsx/8ifmICMLPiMIvFrtOEBrrv5ZKANsAA==
+"@abp/datatables.net-bs5@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0.tgz#21822ae4912a561afe9112925185aece03fcd0eb"
+ integrity sha512-GOGYSSHp3iPUDFRX2Y3C0wkiCOJDuYuK/zUSzQLNpOvBMZO+I/oWBcZM+qkVowIzsoRlAGV9+CVV2B/B05qidA==
dependencies:
- "@abp/datatables.net" "~8.3.0-rc.1"
+ "@abp/datatables.net" "~8.3.0"
datatables.net-bs5 "^2.0.8"
-"@abp/datatables.net@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0-rc.1.tgz#bb70608994c4a52bd15331f76af718353c843f94"
- integrity sha512-G42D6W0Xb8NIQxJWGpcxLOjbZ4CHtrm9oBG5+GfVmQEPGfl8r+DYdrYDAkysDg483s+48POH7NC3L1LOlxlqRg==
+"@abp/datatables.net@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0.tgz#ff697758ce9309ba8311f23aec921c4722588c8b"
+ integrity sha512-4dIdv7eN1tVouOUrlF+MIdg8zQpecyH61waqLgy1q5jMZQivrTSFZ7UWMG3WVOAYjw5zSUZHZPbzA+ttnaOPkg==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
datatables.net "^2.0.8"
-"@abp/font-awesome@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0-rc.1.tgz#ea05d7e08395b1894eefe6f912ae0534fd75e69a"
- integrity sha512-GN1xZ76RzQC3aqU2m19vYsyfESCeoSsp8AtvilmeqsjlzhuLLdQ6UWSxMqRqE22TCWRXbA/d/7IAb12TB1mawg==
+"@abp/font-awesome@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0.tgz#9e4e9adc08dfca52c0a07d1608c5e5662675a4c9"
+ integrity sha512-NRxvM/dzvQC2Cj/F5i07XB/i6IVTmXcO9sOq6TWosWib0wGaPxRbCSjy8QUAYSD1QYaVQ30XMb3XXImaMGyd8A==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
"@fortawesome/fontawesome-free" "^6.5.2"
-"@abp/jquery-form@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0-rc.1.tgz#21025048f44028a5cb1ced7414cb48af00e91bff"
- integrity sha512-mVZzEJKbhiYmXK2yZRZAJwO5e7C2N0lj8ueOYPiFG6h4UKLbKPHQdIrkapyc88VirrELe1hnhJJbQ56dsQWeyg==
+"@abp/jquery-form@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0.tgz#fa2ad2fedbe3d3528ee94cbbd4f94d48f0cb5e4d"
+ integrity sha512-olP9FmpNVTbOIewsVua0moHVYXw4Sl3chFbvTDLG6vRBohLSjllUXfgY3UEIVWR1PCqnAg+iEJZl9NHB9iOLBg==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0-rc.1.tgz#63042715391ca63f273874ff66fca4b20330d31b"
- integrity sha512-EKQf733+HS9bIVQhMgAHYZfCY663GqNv8KUcCIuQOHPt5DWU49ygYhawkcYIzUKd2Gy9+ZtyWLkWmoBxTnwlmw==
+"@abp/jquery-validation-unobtrusive@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0.tgz#0992cdd33170df83c79aa3371038c0b30e451521"
+ integrity sha512-9hidjq8x8sTnP5O3K2b2x9NpxvPd9WB03ENR6OfvM89kfSmQapSvBZTlCu80YK9NaQJ6MLQRLYOCuc3GHcj3EQ==
dependencies:
- "@abp/jquery-validation" "~8.3.0-rc.1"
+ "@abp/jquery-validation" "~8.3.0"
jquery-validation-unobtrusive "^4.0.0"
-"@abp/jquery-validation@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0-rc.1.tgz#8c82189ba7c3614f7306c2bf958b3717a6a4e702"
- integrity sha512-Fr8AI//7iV743S6bw4ixE5qOu+af3HfZSivQJnYVVTbR/75gPqI/xRe6u/k82TJIBM7IaspQ4QdruMuvnJyBpQ==
+"@abp/jquery-validation@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0.tgz#bd6a72c6d86f116abe3b5d2adf3752bdbbcca887"
+ integrity sha512-6l5BZSa3N0Fou6Se7MfUSnI2dD4SYhZ2V988bgPJQ6p37XBOZ2OAj7LEIf5FSjtUzXjao/6/vqjkPNYreNikig==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
jquery-validation "^1.20.1"
-"@abp/jquery@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0-rc.1.tgz#a181c6749d58690b3265705959d8c818296896f3"
- integrity sha512-fXs35cDLAw66irfHsFIWD41RKzpLABkULLoMwxfB76nOVPdV7qlWrXoI2O/du3xhCqBqHR4fS8xjwE6kFvkdLQ==
+"@abp/jquery@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0.tgz#9be5ef2f769680226e6a1a981026590caf3b57ef"
+ integrity sha512-GsFY+n3EtS6B0pAoKd+xMnt5Dzi5bHvIbhLgDgfQfOBzAy3twGRWsPQ3nkuXXm8TppwujMNowU1oiLKPPm0AOA==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
jquery "~3.7.1"
-"@abp/lodash@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0-rc.1.tgz#32f8805031f73b9d5bdc338afe49739c4ebc3ce9"
- integrity sha512-UBGlG5+tFpyAPMuwpkY7K/g21c+d3Aq3HbFmcIilUEIsJ+yJqj95xhRh6t/LSwJCo5ntdSCgVC85q0kD0fQlQA==
+"@abp/lodash@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0.tgz#f5a0a496c999886f2d6999067bfac2e1f0c3969c"
+ integrity sha512-BiAsONbKR/RKG3WjRaMWVmhNe1ELEsykVq+ogG1Rhk3kwPbvze3TS8k2p0Lu/RC41/BmDUmJ5abg1pUMwkRT8w==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
lodash "^4.17.21"
-"@abp/luxon@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0-rc.1.tgz#df19773212502336c2caf6a8806b7647748f8f81"
- integrity sha512-1oPx0tGyFi58T0yv/pdqJpcIRWU6ej5Sv28fRgz3J6tHam3hVPtKJPK9Ajvn6+MNVDLuMUczgVtfWEOvO2Kqrg==
+"@abp/luxon@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0.tgz#7dd3f756be1605506e26f7ac76b80cc082a12d07"
+ integrity sha512-8gdI5BtXkVp0sFg89QVDe8AvgQ7Qfq4JCqz2PMrKPSATR3H8GD6BCaEYpRp6CNTCjVrQjGZdzKgUyea1D3dHbw==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
luxon "^3.4.4"
-"@abp/malihu-custom-scrollbar-plugin@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0-rc.1.tgz#b57086d708082ce45e1917aeca8c92029ebd805d"
- integrity sha512-4sa5e07EPW9IM7eQbvKtk78gd/bESYhTsl+BeWSKeqjj5wwwPYf4GIEvfJM7JVnhYwh1IPYDEkTv9QNYLczXKQ==
+"@abp/malihu-custom-scrollbar-plugin@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0.tgz#c88c132c3402bbb02054ca7d446051950f87a817"
+ integrity sha512-nd/mb6LJa6fMxal8PGcIjIRIoZ/UHCd01WDC9YI2H4wGCGx0CA0JyHso5oc/OEzJhUL8ujO/vYm9uLb7YahPtA==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/moment@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0-rc.1.tgz#0ba9d64ca6d7b454af7aaa63e54be267f333e1fe"
- integrity sha512-YbVEDg3m+D5KMcTCBEnor/tFgmk9IeL4pF/oChYQGXLeyohY7vfmK68owAnEDN61nCRXng9xykiZu2bLq829WA==
+"@abp/moment@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0.tgz#8e4f7a523ab76ef9e4cd96a399560bad38d38d1a"
+ integrity sha512-LywSsKuQ2GN/Btmle6CcTKa811zbvUWdC+RLQA792K9HyBs6LvN0qRRluEQZgplairRgh2pDOg8tdFlUERkv2w==
dependencies:
moment "^2.30.1"
-"@abp/prismjs@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-8.3.0-rc.1.tgz#82f98db7e3a5e5e535ecb0452c84a5fda57b5801"
- integrity sha512-kvO7fU9KfXNK44mL9QDtGuDD3ebiXTd5nKNxgrsneHhYsdNiWwXzqWpZlfs7t9nqSydLzqWkQZ7we01GoxeQ/g==
+"@abp/prismjs@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-8.3.0.tgz#0c87c63294d1452ed7152083d2fb6e70aa3aeae6"
+ integrity sha512-3wpwbqqlGRfQSLcBP+Qb2TKOoVGZVYYwOP6dP3So9ev8J5gFMDEizH9zLwRVHYrrsZZP8/etYnyZ0hn7ewuI5Q==
dependencies:
- "@abp/clipboard" "~8.3.0-rc.1"
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/clipboard" "~8.3.0"
+ "@abp/core" "~8.3.0"
prismjs "^1.29.0"
-"@abp/select2@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0-rc.1.tgz#3eb932e05987cc1e13f72decc9ae70d47801bf7d"
- integrity sha512-lZuJLiFcOEVj6cTPAA7ZfhE3v1LyivmMt8Tt7Dpvgybx2PDN1NtfLce2BCKb0MvsaTlfJMSK0ZLu3JpxCQ+Q/A==
+"@abp/select2@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0.tgz#ef4742fcd345394767f46180f61c6cabbd0b3867"
+ integrity sha512-bdLt2+ImxxpiZl4HGbYJpdDROQUT7/Z/+8A+6oJNacq3lNekdvufLYgTMxKru6zTbnd9j3HFKMOTE1eRjb9Xqg==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
select2 "^4.0.13"
-"@abp/sweetalert2@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0-rc.1.tgz#66d8b9ce287a71474ce37c217cd800e150a86138"
- integrity sha512-b6dZbc5/nYrUz5s+lAgi561XnsASa0ZJOn6f5W2Oakm9ULzqFndapKx5f+zHeJaNArpeGDh50AjQ+lcGGw83zQ==
+"@abp/sweetalert2@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0.tgz#a63020d57e44f7940817287d3d9676288bfb85aa"
+ integrity sha512-ooqPM4Z2v2scnMo5l8ycTmp6t/sW4sCsvIkJ4TyM876WLQJaZxJdOao4RQWuU+dVFr9zg8cOwqLH4q7UEiO6ww==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
sweetalert2 "^11.3.6"
-"@abp/timeago@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0-rc.1.tgz#d795b9cccb190f5d42f242727ac447fe03c30db3"
- integrity sha512-yJCA7PHmAxFxIvPq03iSx3LbIiDQls4AiVBO75103LEGokRUG9bg+iPA7GLkPpfNbnNgEJ7N7Gw6RQzMNRLCpA==
+"@abp/timeago@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0.tgz#b3b8d6927bf170f77af848bc1925e5ef6835bd55"
+ integrity sha512-Dd6xaUoF9Bp4F9WJnTsFBqY+Gt++UR7UmLvBZL/dvthkeNCu2I8MUsmshkUUjY0lIXpjZwefUOuyupQrgHXPMg==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
timeago "^1.6.7"
-"@abp/toastr@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0-rc.1.tgz#82c7f6566e604c2cf31555da3f9b0898df8a5541"
- integrity sha512-0nBM4nEvDlANVulk7EKoB4Lk/1fH+UgzPOyUOyemQZAWHgPhIpa4z5yiLkCeOxN1hu/CBEe+Jo7qJblsj+v7kQ==
+"@abp/toastr@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0.tgz#e68a2bd8f731e79034594bc2c736f7c66b3df1af"
+ integrity sha512-aWK/RaX/FmcEKhJLjsw1A0K2c04m2fRJkmo9NwzBCSscy6Msw9IMkqNWLiFDThMU8/qKzq7wq3Vmk/C0IpeAwA==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
toastr "^2.1.4"
-"@abp/utils@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0-rc.1.tgz#7db324059f8f9c64fbb5d5a6f0c2384896ca1928"
- integrity sha512-Eg4Lwv4DEDr5mfG/8ghwMPdphywZBZIxWTJCZnCWngDQ9fEn/bnYuL1WkvbVvKd10A6030wHEJXFJj2OuNdi3Q==
+"@abp/utils@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0.tgz#96ae9266ad4d833fd9d723acef7fc85fabf618d9"
+ integrity sha512-w/XAqza4Z8wBWRoj5uPNKbd1/bE9L/uUWk6EUSBKmljMRryWQBmaPkb1XgvrOMQIbyyF60tUvvipapQLPVh6hw==
dependencies:
just-compare "^2.3.0"
diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo.Abp.BlobStoring.Database.Domain.Shared.abppkg.analyze.json b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo.Abp.BlobStoring.Database.Domain.Shared.abppkg.analyze.json
index ad923a8ce3..6deba88b34 100644
--- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo.Abp.BlobStoring.Database.Domain.Shared.abppkg.analyze.json
+++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo.Abp.BlobStoring.Database.Domain.Shared.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.Abp.BlobStoring.Database.Domain.Shared",
- "hash": "ca71bff6138a518c84899353b3d88f2e",
+ "hash": "",
"contents": [
{
"namespace": "Volo.Abp.BlobStoring.Database",
@@ -11,6 +11,50 @@
"name": "AbpValidationModule"
}
],
+ "implementingInterfaces": [
+ {
+ "name": "IAbpModule",
+ "namespace": "Volo.Abp.Modularity",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.Modularity.IAbpModule"
+ },
+ {
+ "name": "IOnPreApplicationInitialization",
+ "namespace": "Volo.Abp.Modularity",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.Modularity.IOnPreApplicationInitialization"
+ },
+ {
+ "name": "IOnApplicationInitialization",
+ "namespace": "Volo.Abp",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.IOnApplicationInitialization"
+ },
+ {
+ "name": "IOnPostApplicationInitialization",
+ "namespace": "Volo.Abp.Modularity",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.Modularity.IOnPostApplicationInitialization"
+ },
+ {
+ "name": "IOnApplicationShutdown",
+ "namespace": "Volo.Abp",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.IOnApplicationShutdown"
+ },
+ {
+ "name": "IPreConfigureServices",
+ "namespace": "Volo.Abp.Modularity",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.Modularity.IPreConfigureServices"
+ },
+ {
+ "name": "IPostConfigureServices",
+ "namespace": "Volo.Abp.Modularity",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.Modularity.IPostConfigureServices"
+ }
+ ],
"contentType": "abpModule",
"name": "BlobStoringDatabaseDomainSharedModule",
"summary": null
diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/Localization/sv.json b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/Localization/sv.json
new file mode 100644
index 0000000000..c091214de8
--- /dev/null
+++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/Localization/sv.json
@@ -0,0 +1,6 @@
+{
+ "culture": "sv",
+ "texts": {
+ "MyAccount": "Mitt konto"
+ }
+}
\ No newline at end of file
diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo.Abp.BlobStoring.Database.Domain.abppkg.analyze.json b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo.Abp.BlobStoring.Database.Domain.abppkg.analyze.json
index 44aa7327f7..cd919d1727 100644
--- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo.Abp.BlobStoring.Database.Domain.abppkg.analyze.json
+++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo.Abp.BlobStoring.Database.Domain.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.Abp.BlobStoring.Database.Domain",
- "hash": "4c72530134504ee1792b7e24248dc384",
+ "hash": "",
"contents": [
{
"namespace": "Volo.Abp.BlobStoring.Database",
@@ -21,6 +21,50 @@
"name": "BlobStoringDatabaseDomainSharedModule"
}
],
+ "implementingInterfaces": [
+ {
+ "name": "IAbpModule",
+ "namespace": "Volo.Abp.Modularity",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.Modularity.IAbpModule"
+ },
+ {
+ "name": "IOnPreApplicationInitialization",
+ "namespace": "Volo.Abp.Modularity",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.Modularity.IOnPreApplicationInitialization"
+ },
+ {
+ "name": "IOnApplicationInitialization",
+ "namespace": "Volo.Abp",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.IOnApplicationInitialization"
+ },
+ {
+ "name": "IOnPostApplicationInitialization",
+ "namespace": "Volo.Abp.Modularity",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.Modularity.IOnPostApplicationInitialization"
+ },
+ {
+ "name": "IOnApplicationShutdown",
+ "namespace": "Volo.Abp",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.IOnApplicationShutdown"
+ },
+ {
+ "name": "IPreConfigureServices",
+ "namespace": "Volo.Abp.Modularity",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.Modularity.IPreConfigureServices"
+ },
+ {
+ "name": "IPostConfigureServices",
+ "namespace": "Volo.Abp.Modularity",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.Modularity.IPostConfigureServices"
+ }
+ ],
"contentType": "abpModule",
"name": "BlobStoringDatabaseDomainModule",
"summary": null
@@ -29,56 +73,69 @@
"baseClass": {
"name": "AggregateRoot",
"namespace": "Volo.Abp.Domain.Entities",
- "declaringAssemblyName": "Volo.Abp.Ddd.Domain"
+ "declaringAssemblyName": "Volo.Abp.Ddd.Domain",
+ "fullName": "Volo.Abp.Domain.Entities.AggregateRoot"
},
"implementingInterfaces": [
{
"name": "IEntity",
"namespace": "Volo.Abp.Domain.Entities",
- "declaringAssemblyName": "Volo.Abp.Ddd.Domain"
+ "declaringAssemblyName": "Volo.Abp.Ddd.Domain",
+ "fullName": "Volo.Abp.Domain.Entities.IEntity"
},
{
"name": "IEntity",
"namespace": "Volo.Abp.Domain.Entities",
- "declaringAssemblyName": "Volo.Abp.Ddd.Domain"
+ "declaringAssemblyName": "Volo.Abp.Ddd.Domain",
+ "fullName": "Volo.Abp.Domain.Entities.IEntity"
},
{
"name": "IAggregateRoot",
"namespace": "Volo.Abp.Domain.Entities",
- "declaringAssemblyName": "Volo.Abp.Ddd.Domain"
+ "declaringAssemblyName": "Volo.Abp.Ddd.Domain",
+ "fullName": "Volo.Abp.Domain.Entities.IAggregateRoot"
},
{
"name": "IAggregateRoot",
"namespace": "Volo.Abp.Domain.Entities",
- "declaringAssemblyName": "Volo.Abp.Ddd.Domain"
+ "declaringAssemblyName": "Volo.Abp.Ddd.Domain",
+ "fullName": "Volo.Abp.Domain.Entities.IAggregateRoot"
},
{
"name": "IGeneratesDomainEvents",
"namespace": "Volo.Abp.Domain.Entities",
- "declaringAssemblyName": "Volo.Abp.Ddd.Domain"
+ "declaringAssemblyName": "Volo.Abp.Ddd.Domain",
+ "fullName": "Volo.Abp.Domain.Entities.IGeneratesDomainEvents"
},
{
"name": "IHasExtraProperties",
"namespace": "Volo.Abp.Data",
- "declaringAssemblyName": "Volo.Abp.ObjectExtending"
+ "declaringAssemblyName": "Volo.Abp.ObjectExtending",
+ "fullName": "Volo.Abp.Data.IHasExtraProperties"
},
{
"name": "IHasConcurrencyStamp",
"namespace": "Volo.Abp.Domain.Entities",
- "declaringAssemblyName": "Volo.Abp.Data"
+ "declaringAssemblyName": "Volo.Abp.Data",
+ "fullName": "Volo.Abp.Domain.Entities.IHasConcurrencyStamp"
},
{
"name": "IMultiTenant",
"namespace": "Volo.Abp.MultiTenancy",
- "declaringAssemblyName": "Volo.Abp.MultiTenancy"
+ "declaringAssemblyName": "Volo.Abp.MultiTenancy.Abstractions",
+ "fullName": "Volo.Abp.MultiTenancy.IMultiTenant"
}
],
"methods": [
{
"returnType": "Void",
- "isAsync": false,
+ "namespace": "Volo.Abp.BlobStoring.Database",
"name": "SetContent",
"summary": null,
+ "isAsync": false,
+ "isPublic": true,
+ "isPrivate": false,
+ "isStatic": false,
"parameters": [
{
"type": "Byte[]",
@@ -88,10 +145,32 @@
]
}
],
- "namespace": "Volo.Abp.BlobStoring.Database",
- "primaryKeyType": "Guid",
"collectionProperties": {},
"navigationProperties": {},
+ "namespace": "Volo.Abp.BlobStoring.Database",
+ "primaryKeyType": "Guid",
+ "properties": [
+ {
+ "type": "System.Guid",
+ "name": "ContainerId",
+ "summary": null
+ },
+ {
+ "type": "System.Nullable`1[System.Guid]",
+ "name": "TenantId",
+ "summary": null
+ },
+ {
+ "type": "System.String",
+ "name": "Name",
+ "summary": null
+ },
+ {
+ "type": "System.Byte[]",
+ "name": "Content",
+ "summary": null
+ }
+ ],
"contentType": "aggregateRoot",
"name": "DatabaseBlob",
"summary": null
@@ -100,55 +179,76 @@
"baseClass": {
"name": "AggregateRoot",
"namespace": "Volo.Abp.Domain.Entities",
- "declaringAssemblyName": "Volo.Abp.Ddd.Domain"
+ "declaringAssemblyName": "Volo.Abp.Ddd.Domain",
+ "fullName": "Volo.Abp.Domain.Entities.AggregateRoot"
},
"implementingInterfaces": [
{
"name": "IEntity",
"namespace": "Volo.Abp.Domain.Entities",
- "declaringAssemblyName": "Volo.Abp.Ddd.Domain"
+ "declaringAssemblyName": "Volo.Abp.Ddd.Domain",
+ "fullName": "Volo.Abp.Domain.Entities.IEntity"
},
{
"name": "IEntity",
"namespace": "Volo.Abp.Domain.Entities",
- "declaringAssemblyName": "Volo.Abp.Ddd.Domain"
+ "declaringAssemblyName": "Volo.Abp.Ddd.Domain",
+ "fullName": "Volo.Abp.Domain.Entities.IEntity"
},
{
"name": "IAggregateRoot",
"namespace": "Volo.Abp.Domain.Entities",
- "declaringAssemblyName": "Volo.Abp.Ddd.Domain"
+ "declaringAssemblyName": "Volo.Abp.Ddd.Domain",
+ "fullName": "Volo.Abp.Domain.Entities.IAggregateRoot"
},
{
"name": "IAggregateRoot",
"namespace": "Volo.Abp.Domain.Entities",
- "declaringAssemblyName": "Volo.Abp.Ddd.Domain"
+ "declaringAssemblyName": "Volo.Abp.Ddd.Domain",
+ "fullName": "Volo.Abp.Domain.Entities.IAggregateRoot"
},
{
"name": "IGeneratesDomainEvents",
"namespace": "Volo.Abp.Domain.Entities",
- "declaringAssemblyName": "Volo.Abp.Ddd.Domain"
+ "declaringAssemblyName": "Volo.Abp.Ddd.Domain",
+ "fullName": "Volo.Abp.Domain.Entities.IGeneratesDomainEvents"
},
{
"name": "IHasExtraProperties",
"namespace": "Volo.Abp.Data",
- "declaringAssemblyName": "Volo.Abp.ObjectExtending"
+ "declaringAssemblyName": "Volo.Abp.ObjectExtending",
+ "fullName": "Volo.Abp.Data.IHasExtraProperties"
},
{
"name": "IHasConcurrencyStamp",
"namespace": "Volo.Abp.Domain.Entities",
- "declaringAssemblyName": "Volo.Abp.Data"
+ "declaringAssemblyName": "Volo.Abp.Data",
+ "fullName": "Volo.Abp.Domain.Entities.IHasConcurrencyStamp"
},
{
"name": "IMultiTenant",
"namespace": "Volo.Abp.MultiTenancy",
- "declaringAssemblyName": "Volo.Abp.MultiTenancy"
+ "declaringAssemblyName": "Volo.Abp.MultiTenancy.Abstractions",
+ "fullName": "Volo.Abp.MultiTenancy.IMultiTenant"
}
],
"methods": [],
- "namespace": "Volo.Abp.BlobStoring.Database",
- "primaryKeyType": "Guid",
"collectionProperties": {},
"navigationProperties": {},
+ "namespace": "Volo.Abp.BlobStoring.Database",
+ "primaryKeyType": "Guid",
+ "properties": [
+ {
+ "type": "System.Nullable`1[System.Guid]",
+ "name": "TenantId",
+ "summary": null
+ },
+ {
+ "type": "System.String",
+ "name": "Name",
+ "summary": null
+ }
+ ],
"contentType": "aggregateRoot",
"name": "DatabaseBlobContainer",
"summary": null
@@ -158,12 +258,67 @@
"entityAnalyzeModel": {
"namespace": "Volo.Abp.BlobStoring.Database",
"primaryKeyType": "Guid",
- "collectionProperties": {},
- "navigationProperties": {},
+ "properties": [],
"contentType": "entity",
"name": "DatabaseBlobContainer",
"summary": null
},
+ "implementingInterfaces": [
+ {
+ "name": "IBasicRepository",
+ "namespace": "Volo.Abp.Domain.Repositories",
+ "declaringAssemblyName": "Volo.Abp.Ddd.Domain",
+ "fullName": "Volo.Abp.Domain.Repositories.IBasicRepository"
+ },
+ {
+ "name": "IBasicRepository",
+ "namespace": "Volo.Abp.Domain.Repositories",
+ "declaringAssemblyName": "Volo.Abp.Ddd.Domain",
+ "fullName": "Volo.Abp.Domain.Repositories.IBasicRepository"
+ },
+ {
+ "name": "IReadOnlyBasicRepository",
+ "namespace": "Volo.Abp.Domain.Repositories",
+ "declaringAssemblyName": "Volo.Abp.Ddd.Domain",
+ "fullName": "Volo.Abp.Domain.Repositories.IReadOnlyBasicRepository"
+ },
+ {
+ "name": "IRepository",
+ "namespace": "Volo.Abp.Domain.Repositories",
+ "declaringAssemblyName": "Volo.Abp.Ddd.Domain",
+ "fullName": "Volo.Abp.Domain.Repositories.IRepository"
+ },
+ {
+ "name": "IReadOnlyBasicRepository",
+ "namespace": "Volo.Abp.Domain.Repositories",
+ "declaringAssemblyName": "Volo.Abp.Ddd.Domain",
+ "fullName": "Volo.Abp.Domain.Repositories.IReadOnlyBasicRepository"
+ }
+ ],
+ "methods": [
+ {
+ "returnType": "DatabaseBlobContainer",
+ "namespace": "Volo.Abp.BlobStoring.Database",
+ "name": "FindAsync",
+ "summary": null,
+ "isAsync": true,
+ "isPublic": true,
+ "isPrivate": false,
+ "isStatic": false,
+ "parameters": [
+ {
+ "type": "String",
+ "name": "name",
+ "isOptional": false
+ },
+ {
+ "type": "CancellationToken",
+ "name": "cancellationToken",
+ "isOptional": true
+ }
+ ]
+ }
+ ],
"contentType": "repositoryInterface",
"name": "IDatabaseBlobContainerRepository",
"summary": null
@@ -173,12 +328,131 @@
"entityAnalyzeModel": {
"namespace": "Volo.Abp.BlobStoring.Database",
"primaryKeyType": "Guid",
- "collectionProperties": {},
- "navigationProperties": {},
+ "properties": [],
"contentType": "entity",
"name": "DatabaseBlob",
"summary": null
},
+ "implementingInterfaces": [
+ {
+ "name": "IBasicRepository",
+ "namespace": "Volo.Abp.Domain.Repositories",
+ "declaringAssemblyName": "Volo.Abp.Ddd.Domain",
+ "fullName": "Volo.Abp.Domain.Repositories.IBasicRepository"
+ },
+ {
+ "name": "IBasicRepository",
+ "namespace": "Volo.Abp.Domain.Repositories",
+ "declaringAssemblyName": "Volo.Abp.Ddd.Domain",
+ "fullName": "Volo.Abp.Domain.Repositories.IBasicRepository"
+ },
+ {
+ "name": "IReadOnlyBasicRepository",
+ "namespace": "Volo.Abp.Domain.Repositories",
+ "declaringAssemblyName": "Volo.Abp.Ddd.Domain",
+ "fullName": "Volo.Abp.Domain.Repositories.IReadOnlyBasicRepository"
+ },
+ {
+ "name": "IRepository",
+ "namespace": "Volo.Abp.Domain.Repositories",
+ "declaringAssemblyName": "Volo.Abp.Ddd.Domain",
+ "fullName": "Volo.Abp.Domain.Repositories.IRepository"
+ },
+ {
+ "name": "IReadOnlyBasicRepository",
+ "namespace": "Volo.Abp.Domain.Repositories",
+ "declaringAssemblyName": "Volo.Abp.Ddd.Domain",
+ "fullName": "Volo.Abp.Domain.Repositories.IReadOnlyBasicRepository"
+ }
+ ],
+ "methods": [
+ {
+ "returnType": "DatabaseBlob",
+ "namespace": "Volo.Abp.BlobStoring.Database",
+ "name": "FindAsync",
+ "summary": null,
+ "isAsync": true,
+ "isPublic": true,
+ "isPrivate": false,
+ "isStatic": false,
+ "parameters": [
+ {
+ "type": "Guid",
+ "name": "containerId",
+ "isOptional": false
+ },
+ {
+ "type": "String",
+ "name": "name",
+ "isOptional": false
+ },
+ {
+ "type": "CancellationToken",
+ "name": "cancellationToken",
+ "isOptional": true
+ }
+ ]
+ },
+ {
+ "returnType": "Boolean",
+ "namespace": "Volo.Abp.BlobStoring.Database",
+ "name": "ExistsAsync",
+ "summary": null,
+ "isAsync": true,
+ "isPublic": true,
+ "isPrivate": false,
+ "isStatic": false,
+ "parameters": [
+ {
+ "type": "Guid",
+ "name": "containerId",
+ "isOptional": false
+ },
+ {
+ "type": "String",
+ "name": "name",
+ "isOptional": false
+ },
+ {
+ "type": "CancellationToken",
+ "name": "cancellationToken",
+ "isOptional": true
+ }
+ ]
+ },
+ {
+ "returnType": "Boolean",
+ "namespace": "Volo.Abp.BlobStoring.Database",
+ "name": "DeleteAsync",
+ "summary": null,
+ "isAsync": true,
+ "isPublic": true,
+ "isPrivate": false,
+ "isStatic": false,
+ "parameters": [
+ {
+ "type": "Guid",
+ "name": "containerId",
+ "isOptional": false
+ },
+ {
+ "type": "String",
+ "name": "name",
+ "isOptional": false
+ },
+ {
+ "type": "Boolean",
+ "name": "autoSave",
+ "isOptional": true
+ },
+ {
+ "type": "CancellationToken",
+ "name": "cancellationToken",
+ "isOptional": true
+ }
+ ]
+ }
+ ],
"contentType": "repositoryInterface",
"name": "IDatabaseBlobRepository",
"summary": null
diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.abppkg.analyze.json b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.abppkg.analyze.json
index 132618f5a1..4cad523863 100644
--- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.abppkg.analyze.json
+++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo.Abp.BlobStoring.Database.EntityFrameworkCore.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.Abp.BlobStoring.Database.EntityFrameworkCore",
- "hash": "0c136e999f8d28fc3b27414e0ff5aef7",
+ "hash": "",
"contents": [
{
"namespace": "Volo.Abp.BlobStoring.Database.EntityFrameworkCore",
@@ -16,6 +16,50 @@
"name": "AbpEntityFrameworkCoreModule"
}
],
+ "implementingInterfaces": [
+ {
+ "name": "IAbpModule",
+ "namespace": "Volo.Abp.Modularity",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.Modularity.IAbpModule"
+ },
+ {
+ "name": "IOnPreApplicationInitialization",
+ "namespace": "Volo.Abp.Modularity",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.Modularity.IOnPreApplicationInitialization"
+ },
+ {
+ "name": "IOnApplicationInitialization",
+ "namespace": "Volo.Abp",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.IOnApplicationInitialization"
+ },
+ {
+ "name": "IOnPostApplicationInitialization",
+ "namespace": "Volo.Abp.Modularity",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.Modularity.IOnPostApplicationInitialization"
+ },
+ {
+ "name": "IOnApplicationShutdown",
+ "namespace": "Volo.Abp",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.IOnApplicationShutdown"
+ },
+ {
+ "name": "IPreConfigureServices",
+ "namespace": "Volo.Abp.Modularity",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.Modularity.IPreConfigureServices"
+ },
+ {
+ "name": "IPostConfigureServices",
+ "namespace": "Volo.Abp.Modularity",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.Modularity.IPostConfigureServices"
+ }
+ ],
"contentType": "abpModule",
"name": "BlobStoringDatabaseEntityFrameworkCoreModule",
"summary": null
@@ -23,18 +67,99 @@
{
"namespace": "Volo.Abp.BlobStoring.Database.EntityFrameworkCore",
"connectionStringName": "AbpBlobStoring",
- "databaseTables": [
+ "databaseTables": [],
+ "replacedDbContexts": [],
+ "modelBuilderExtensionMethods": [
+ {
+ "returnType": "Void",
+ "namespace": "Volo.Abp.BlobStoring.Database.EntityFrameworkCore",
+ "name": "ConfigureBlobStoring",
+ "summary": null,
+ "isAsync": false,
+ "isPublic": true,
+ "isPrivate": false,
+ "isStatic": true,
+ "parameters": [
+ {
+ "type": "ModelBuilder",
+ "name": "builder",
+ "isOptional": false
+ }
+ ]
+ }
+ ],
+ "implementingInterfaces": [
+ {
+ "name": "IInfrastructure",
+ "namespace": "Microsoft.EntityFrameworkCore.Infrastructure",
+ "declaringAssemblyName": "Microsoft.EntityFrameworkCore",
+ "fullName": "Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure"
+ },
+ {
+ "name": "IDbContextDependencies",
+ "namespace": "Microsoft.EntityFrameworkCore.Internal",
+ "declaringAssemblyName": "Microsoft.EntityFrameworkCore",
+ "fullName": "Microsoft.EntityFrameworkCore.Internal.IDbContextDependencies"
+ },
+ {
+ "name": "IDbSetCache",
+ "namespace": "Microsoft.EntityFrameworkCore.Internal",
+ "declaringAssemblyName": "Microsoft.EntityFrameworkCore",
+ "fullName": "Microsoft.EntityFrameworkCore.Internal.IDbSetCache"
+ },
+ {
+ "name": "IDbContextPoolable",
+ "namespace": "Microsoft.EntityFrameworkCore.Internal",
+ "declaringAssemblyName": "Microsoft.EntityFrameworkCore",
+ "fullName": "Microsoft.EntityFrameworkCore.Internal.IDbContextPoolable"
+ },
+ {
+ "name": "IResettableService",
+ "namespace": "Microsoft.EntityFrameworkCore.Infrastructure",
+ "declaringAssemblyName": "Microsoft.EntityFrameworkCore",
+ "fullName": "Microsoft.EntityFrameworkCore.Infrastructure.IResettableService"
+ },
+ {
+ "name": "IDisposable",
+ "namespace": "System",
+ "declaringAssemblyName": "System.Private.CoreLib",
+ "fullName": "System.IDisposable"
+ },
+ {
+ "name": "IAsyncDisposable",
+ "namespace": "System",
+ "declaringAssemblyName": "System.Private.CoreLib",
+ "fullName": "System.IAsyncDisposable"
+ },
+ {
+ "name": "IAbpEfCoreDbContext",
+ "namespace": "Volo.Abp.EntityFrameworkCore",
+ "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore",
+ "fullName": "Volo.Abp.EntityFrameworkCore.IAbpEfCoreDbContext"
+ },
+ {
+ "name": "IEfCoreDbContext",
+ "namespace": "Volo.Abp.EntityFrameworkCore",
+ "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore",
+ "fullName": "Volo.Abp.EntityFrameworkCore.IEfCoreDbContext"
+ },
+ {
+ "name": "IAbpEfCoreDbFunctionContext",
+ "namespace": "Volo.Abp.EntityFrameworkCore.GlobalFilters",
+ "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore",
+ "fullName": "Volo.Abp.EntityFrameworkCore.GlobalFilters.IAbpEfCoreDbFunctionContext"
+ },
{
- "entityFullName": "Volo.Abp.BlobStoring.Database.DatabaseBlob",
- "contentType": "databaseTable",
- "name": "AbpBlobs",
- "summary": null
+ "name": "ITransientDependency",
+ "namespace": "Volo.Abp.DependencyInjection",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.DependencyInjection.ITransientDependency"
},
{
- "entityFullName": "Volo.Abp.BlobStoring.Database.DatabaseBlobContainer",
- "contentType": "databaseTable",
- "name": "AbpBlobContainers",
- "summary": null
+ "name": "IBlobStoringDbContext",
+ "namespace": "Volo.Abp.BlobStoring.Database.EntityFrameworkCore",
+ "declaringAssemblyName": "Volo.Abp.BlobStoring.Database.EntityFrameworkCore",
+ "fullName": "Volo.Abp.BlobStoring.Database.EntityFrameworkCore.IBlobStoringDbContext"
}
],
"contentType": "efCoreDbContext",
diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo.Abp.BlobStoring.Database.MongoDB.abppkg.analyze.json b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo.Abp.BlobStoring.Database.MongoDB.abppkg.analyze.json
index 888f20c52a..207bff6963 100644
--- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo.Abp.BlobStoring.Database.MongoDB.abppkg.analyze.json
+++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo.Abp.BlobStoring.Database.MongoDB.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.Abp.BlobStoring.Database.MongoDB",
- "hash": "d0d45fc623e9180d60e60935449cb69b",
+ "hash": "",
"contents": [
{
"namespace": "Volo.Abp.BlobStoring.Database.MongoDB",
@@ -16,6 +16,50 @@
"name": "AbpMongoDbModule"
}
],
+ "implementingInterfaces": [
+ {
+ "name": "IAbpModule",
+ "namespace": "Volo.Abp.Modularity",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.Modularity.IAbpModule"
+ },
+ {
+ "name": "IOnPreApplicationInitialization",
+ "namespace": "Volo.Abp.Modularity",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.Modularity.IOnPreApplicationInitialization"
+ },
+ {
+ "name": "IOnApplicationInitialization",
+ "namespace": "Volo.Abp",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.IOnApplicationInitialization"
+ },
+ {
+ "name": "IOnPostApplicationInitialization",
+ "namespace": "Volo.Abp.Modularity",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.Modularity.IOnPostApplicationInitialization"
+ },
+ {
+ "name": "IOnApplicationShutdown",
+ "namespace": "Volo.Abp",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.IOnApplicationShutdown"
+ },
+ {
+ "name": "IPreConfigureServices",
+ "namespace": "Volo.Abp.Modularity",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.Modularity.IPreConfigureServices"
+ },
+ {
+ "name": "IPostConfigureServices",
+ "namespace": "Volo.Abp.Modularity",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.Modularity.IPostConfigureServices"
+ }
+ ],
"contentType": "abpModule",
"name": "BlobStoringDatabaseMongoDbModule",
"summary": null
@@ -27,16 +71,36 @@
{
"entityFullName": "Volo.Abp.BlobStoring.Database.DatabaseBlobContainer",
"contentType": "databaseCollection",
- "name": "AbpBlobContainers",
+ "name": "BlobContainers",
"summary": null
},
{
"entityFullName": "Volo.Abp.BlobStoring.Database.DatabaseBlob",
"contentType": "databaseCollection",
- "name": "AbpBlobs",
+ "name": "Blobs",
"summary": null
}
],
+ "implementingInterfaces": [
+ {
+ "name": "IAbpMongoDbContext",
+ "namespace": "Volo.Abp.MongoDB",
+ "declaringAssemblyName": "Volo.Abp.MongoDB",
+ "fullName": "Volo.Abp.MongoDB.IAbpMongoDbContext"
+ },
+ {
+ "name": "ITransientDependency",
+ "namespace": "Volo.Abp.DependencyInjection",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.DependencyInjection.ITransientDependency"
+ },
+ {
+ "name": "IBlobStoringMongoDbContext",
+ "namespace": "Volo.Abp.BlobStoring.Database.MongoDB",
+ "declaringAssemblyName": "Volo.Abp.BlobStoring.Database.MongoDB",
+ "fullName": "Volo.Abp.BlobStoring.Database.MongoDB.IBlobStoringMongoDbContext"
+ }
+ ],
"contentType": "mongoDbContext",
"name": "BlobStoringMongoDbContext",
"summary": null
diff --git a/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Volo.BloggingTestApp.EntityFrameworkCore.abppkg.analyze.json b/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Volo.BloggingTestApp.EntityFrameworkCore.abppkg.analyze.json
index 0933dd25b5..ca0db01eb2 100644
--- a/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Volo.BloggingTestApp.EntityFrameworkCore.abppkg.analyze.json
+++ b/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Volo.BloggingTestApp.EntityFrameworkCore.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.BloggingTestApp.EntityFrameworkCore",
- "hash": "1ae906cf0026320e50077986287d66ac",
+ "hash": "",
"contents": [
{
"namespace": "Volo.BloggingTestApp.EntityFrameworkCore",
@@ -89,6 +89,7 @@
"connectionStringName": null,
"databaseTables": [],
"replacedDbContexts": [],
+ "modelBuilderExtensionMethods": [],
"implementingInterfaces": [
{
"name": "IInfrastructure",
@@ -144,6 +145,12 @@
"declaringAssemblyName": "Volo.Abp.EntityFrameworkCore",
"fullName": "Volo.Abp.EntityFrameworkCore.IEfCoreDbContext"
},
+ {
+ "name": "IAbpEfCoreDbFunctionContext",
+ "namespace": "Volo.Abp.EntityFrameworkCore.GlobalFilters",
+ "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore",
+ "fullName": "Volo.Abp.EntityFrameworkCore.GlobalFilters.IAbpEfCoreDbFunctionContext"
+ },
{
"name": "ITransientDependency",
"namespace": "Volo.Abp.DependencyInjection",
diff --git a/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.abppkg.analyze.json b/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.abppkg.analyze.json
index bb074e1d10..c5a0eb3244 100644
--- a/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.abppkg.analyze.json
+++ b/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.BloggingTestApp.MongoDB",
- "hash": "f3aae951c5c4cd55de2a949848c2a755",
+ "hash": "",
"contents": [
{
"namespace": "Volo.BloggingTestApp.MongoDB",
diff --git a/modules/blogging/app/Volo.BloggingTestApp/package.json b/modules/blogging/app/Volo.BloggingTestApp/package.json
index 0c2d03f213..a7d225a033 100644
--- a/modules/blogging/app/Volo.BloggingTestApp/package.json
+++ b/modules/blogging/app/Volo.BloggingTestApp/package.json
@@ -3,7 +3,7 @@
"name": "volo.blogtestapp",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0-rc.1",
- "@abp/blogging": "~8.3.0-rc.1"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0",
+ "@abp/blogging": "~8.3.0"
}
}
diff --git a/modules/blogging/app/Volo.BloggingTestApp/yarn.lock b/modules/blogging/app/Volo.BloggingTestApp/yarn.lock
index d2af14a195..a1ee3f6aea 100644
--- a/modules/blogging/app/Volo.BloggingTestApp/yarn.lock
+++ b/modules/blogging/app/Volo.BloggingTestApp/yarn.lock
@@ -2,237 +2,237 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.basic@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-8.3.0-rc.1.tgz#7254b66019b99ac8a29385c1bb2c9c658a167bc7"
- integrity sha512-uMgO1VQgDOW9tMq9gl6idsBZZcL/voeMp0wkBTRORQHg0E+SyA8z0yQrg5S8hU/7zRwoZPm3K9R/Peu71jNTgQ==
- dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0-rc.1.tgz#cec5ca6c5a5f61a361425b9d55711beb0db4eb81"
- integrity sha512-qLAzDwiQvRB8xDs6bkeZ4YLMUuTb6Dz/GmWT61dSMUAhRCTPqPi6aWnt9fiM99HbkP7APLPb7d+o5ho6FoktNQ==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~8.3.0-rc.1"
- "@abp/bootstrap" "~8.3.0-rc.1"
- "@abp/bootstrap-datepicker" "~8.3.0-rc.1"
- "@abp/bootstrap-daterangepicker" "~8.3.0-rc.1"
- "@abp/datatables.net-bs5" "~8.3.0-rc.1"
- "@abp/font-awesome" "~8.3.0-rc.1"
- "@abp/jquery-form" "~8.3.0-rc.1"
- "@abp/jquery-validation-unobtrusive" "~8.3.0-rc.1"
- "@abp/lodash" "~8.3.0-rc.1"
- "@abp/luxon" "~8.3.0-rc.1"
- "@abp/malihu-custom-scrollbar-plugin" "~8.3.0-rc.1"
- "@abp/moment" "~8.3.0-rc.1"
- "@abp/select2" "~8.3.0-rc.1"
- "@abp/sweetalert2" "~8.3.0-rc.1"
- "@abp/timeago" "~8.3.0-rc.1"
- "@abp/toastr" "~8.3.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0-rc.1.tgz#7329e4878e64277dfed88eef5e9d1715d1af925f"
- integrity sha512-NPWrtJ+Il+SI0oPQ5gc1Lc9vfPZvHbe0d/5y5qGIdwKY1F5txIyRGesc0najOLIUe7Z66AInyfNuNeoaFNR0fg==
+"@abp/aspnetcore.mvc.ui.theme.basic@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-8.3.0.tgz#a2d17eb5da2c3abfad4bcc842cfcda0e58a130a4"
+ integrity sha512-T2dg7WlvNSrwTCfy5wk4gqiJ/15kIjMGM4wLXIJcMYn60yGY/YeX6Q4A3R/qJzfl4JdgW5rt3GpdKv86y/ADXg==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0"
+
+"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0.tgz#5d6bb5181a62770e9cb967980b77e75c115c5ed7"
+ integrity sha512-o/0eh8jLS+YJiseTKzzioUz0vNnMFzyoz+mkyA4PlO1gqw2JFhzPhTBZ3cuyV9QlxUfEA8dWAkqAUX6vqiHwkw==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~8.3.0"
+ "@abp/bootstrap" "~8.3.0"
+ "@abp/bootstrap-datepicker" "~8.3.0"
+ "@abp/bootstrap-daterangepicker" "~8.3.0"
+ "@abp/datatables.net-bs5" "~8.3.0"
+ "@abp/font-awesome" "~8.3.0"
+ "@abp/jquery-form" "~8.3.0"
+ "@abp/jquery-validation-unobtrusive" "~8.3.0"
+ "@abp/lodash" "~8.3.0"
+ "@abp/luxon" "~8.3.0"
+ "@abp/malihu-custom-scrollbar-plugin" "~8.3.0"
+ "@abp/moment" "~8.3.0"
+ "@abp/select2" "~8.3.0"
+ "@abp/sweetalert2" "~8.3.0"
+ "@abp/timeago" "~8.3.0"
+ "@abp/toastr" "~8.3.0"
+
+"@abp/aspnetcore.mvc.ui@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0.tgz#d7ba0539bfcc6661a347dea7f952489010b3e816"
+ integrity sha512-OxgZhLKiXGFYYpNJ5O/IbhinsniiBPv9586e+1Soar0GckCMIIegJxnJb1Bo1O75blrcK2cIU6LqjRT1FXt2Lw==
dependencies:
ansi-colors "^4.1.3"
-"@abp/blogging@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-8.3.0-rc.1.tgz#6a7644aac90a1cc87b6182b8bd7a4d3708057d82"
- integrity sha512-aJc31WDzfC2kJgB3PmVg6PcWNqDP2V88Shewb+bImsU9hBM2sr6t7/M4Fxb/zUCPuRjAo5AyLspwzTEnwwCW0g==
+"@abp/blogging@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-8.3.0.tgz#2559f67b961ce3987a1dd59c138c223e19f36d51"
+ integrity sha512-z9ntHhxgDYxX31OpGbPVsy9eY3/zLJiCpEtRpvNYKrKAVsS4fZSxfaywvma8owBpYmwyw4uNHVLr4EXpq0oX2Q==
dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0-rc.1"
- "@abp/owl.carousel" "~8.3.0-rc.1"
- "@abp/prismjs" "~8.3.0-rc.1"
- "@abp/tui-editor" "~8.3.0-rc.1"
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0"
+ "@abp/owl.carousel" "~8.3.0"
+ "@abp/prismjs" "~8.3.0"
+ "@abp/tui-editor" "~8.3.0"
-"@abp/bootstrap-datepicker@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0-rc.1.tgz#d3bcb5f0063df631ad45c7f822195fc4e5c5b4e2"
- integrity sha512-oqbwh9dz8XNfh+eZou8GvcEUYA1J0qr3ABA1r72DJZ/nzfLQX7pUO8NkkaDLpVwrly64rfOlxV4LT7g5muoAsw==
+"@abp/bootstrap-datepicker@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0.tgz#8c1bf9efec37b671d8f28b8b1e89c1ac66684267"
+ integrity sha512-KCwMtm7x+cnKPeNMzhjDJUce0stwu4e57ibmvA6sMf1tmj+yB256O4E2hIDDohiT3vP/zV8HVHX6uATlcmGC9w==
dependencies:
bootstrap-datepicker "^1.10.0"
-"@abp/bootstrap-daterangepicker@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0-rc.1.tgz#33958a1806a070db4fb01eb40a0897bfd16cf1f5"
- integrity sha512-egtnxhRMCu56RV2bIRBLLTly2Y4W/2jwl9el+9Stjc8IN91j2UL5E4t5qn3zI3vXvVX4w5vP+TthQj0grFK0/Q==
+"@abp/bootstrap-daterangepicker@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0.tgz#2b8ed978333502677916f88cbb3e1d1b1c8a3a17"
+ integrity sha512-uQSfuCQogl4BujdqvtdAoSE+z32ci8FT5+i3gLfpqbgTaxvY/Kv5NxAUH5/1sjnuAE7SMWO+eVvI3V0pXgQohg==
dependencies:
bootstrap-daterangepicker "^3.1.0"
-"@abp/bootstrap@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0-rc.1.tgz#3ca994e4c003d056024dcd533221461cccd14f2a"
- integrity sha512-xrs0JOYFEPzi3V6s9d3SCj0CxY06bBmFUK5aETgKUiXBXa4vU2YoNbnrCtDUvV+mn517FRuA/j3RaFkTWYg48g==
+"@abp/bootstrap@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0.tgz#96d6ea7e6ac30f6e34e495a4224f56f7b2a1a7a3"
+ integrity sha512-5AmdTtakmWhZmHrb7ibvvf+KwF9OGadpAe7Kv9mNEE02K2qkp7Xw4r5o/bgVl7YfLC1FA6GZZXrV2s2t0gjHtg==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
bootstrap "^5.3.3"
-"@abp/clipboard@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-8.3.0-rc.1.tgz#65c6cd6672fc248097659908edd4a9fe92664475"
- integrity sha512-CVyO/8BK2WnegwrEvBJCNcbkI5l31U/pZBn7DBUGpiawlLiyYZOtGFUgu4sIUTEfyaRdLiCIPd0eMzDPKMVTgA==
+"@abp/clipboard@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-8.3.0.tgz#1b171e533f768cf42c8fc0c9c67fac1c636fee8c"
+ integrity sha512-T0O4OaMxLLYztAxyvEc3onEOpGHB/C8/jDcvJwd7mgpLoi9zXVfHwpnzkx/egfNJMzp49STD6Jc+jACi8Uq+CQ==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
clipboard "^2.0.11"
-"@abp/core@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0-rc.1.tgz#771c7ecd27319201a8236f0bc6b5601188059325"
- integrity sha512-IB8Baa3LIv3XYja6iBw6VSnITGcRseGyY8wBNEXRiB+ni21Bv//NMyohdOot6G+HlnHlrB7kFeCX+gWu+LuYkg==
+"@abp/core@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0.tgz#3a68f5a9549efcc3e13500e301f2576751b51445"
+ integrity sha512-zrxnZi4qij/Y4AZWaXuPqs3Dd7gBtU/onX7FkYxLgQDxYBfx+84QAnPRNRFKMWaD/wKbTUB0wA66U3t2aiQX9Q==
dependencies:
- "@abp/utils" "~8.3.0-rc.1"
+ "@abp/utils" "~8.3.0"
-"@abp/datatables.net-bs5@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0-rc.1.tgz#b53dc353f485952439ea10035df0851d520efe96"
- integrity sha512-89wpkG6u1YBR98OmuEbvs4VdR5n8L4n3Z8GiHwuKr2FpEOx7cAXYKsx/8ifmICMLPiMIvFrtOEBrrv5ZKANsAA==
+"@abp/datatables.net-bs5@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0.tgz#21822ae4912a561afe9112925185aece03fcd0eb"
+ integrity sha512-GOGYSSHp3iPUDFRX2Y3C0wkiCOJDuYuK/zUSzQLNpOvBMZO+I/oWBcZM+qkVowIzsoRlAGV9+CVV2B/B05qidA==
dependencies:
- "@abp/datatables.net" "~8.3.0-rc.1"
+ "@abp/datatables.net" "~8.3.0"
datatables.net-bs5 "^2.0.8"
-"@abp/datatables.net@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0-rc.1.tgz#bb70608994c4a52bd15331f76af718353c843f94"
- integrity sha512-G42D6W0Xb8NIQxJWGpcxLOjbZ4CHtrm9oBG5+GfVmQEPGfl8r+DYdrYDAkysDg483s+48POH7NC3L1LOlxlqRg==
+"@abp/datatables.net@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0.tgz#ff697758ce9309ba8311f23aec921c4722588c8b"
+ integrity sha512-4dIdv7eN1tVouOUrlF+MIdg8zQpecyH61waqLgy1q5jMZQivrTSFZ7UWMG3WVOAYjw5zSUZHZPbzA+ttnaOPkg==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
datatables.net "^2.0.8"
-"@abp/font-awesome@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0-rc.1.tgz#ea05d7e08395b1894eefe6f912ae0534fd75e69a"
- integrity sha512-GN1xZ76RzQC3aqU2m19vYsyfESCeoSsp8AtvilmeqsjlzhuLLdQ6UWSxMqRqE22TCWRXbA/d/7IAb12TB1mawg==
+"@abp/font-awesome@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0.tgz#9e4e9adc08dfca52c0a07d1608c5e5662675a4c9"
+ integrity sha512-NRxvM/dzvQC2Cj/F5i07XB/i6IVTmXcO9sOq6TWosWib0wGaPxRbCSjy8QUAYSD1QYaVQ30XMb3XXImaMGyd8A==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
"@fortawesome/fontawesome-free" "^6.5.2"
-"@abp/jquery-form@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0-rc.1.tgz#21025048f44028a5cb1ced7414cb48af00e91bff"
- integrity sha512-mVZzEJKbhiYmXK2yZRZAJwO5e7C2N0lj8ueOYPiFG6h4UKLbKPHQdIrkapyc88VirrELe1hnhJJbQ56dsQWeyg==
+"@abp/jquery-form@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0.tgz#fa2ad2fedbe3d3528ee94cbbd4f94d48f0cb5e4d"
+ integrity sha512-olP9FmpNVTbOIewsVua0moHVYXw4Sl3chFbvTDLG6vRBohLSjllUXfgY3UEIVWR1PCqnAg+iEJZl9NHB9iOLBg==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0-rc.1.tgz#63042715391ca63f273874ff66fca4b20330d31b"
- integrity sha512-EKQf733+HS9bIVQhMgAHYZfCY663GqNv8KUcCIuQOHPt5DWU49ygYhawkcYIzUKd2Gy9+ZtyWLkWmoBxTnwlmw==
+"@abp/jquery-validation-unobtrusive@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0.tgz#0992cdd33170df83c79aa3371038c0b30e451521"
+ integrity sha512-9hidjq8x8sTnP5O3K2b2x9NpxvPd9WB03ENR6OfvM89kfSmQapSvBZTlCu80YK9NaQJ6MLQRLYOCuc3GHcj3EQ==
dependencies:
- "@abp/jquery-validation" "~8.3.0-rc.1"
+ "@abp/jquery-validation" "~8.3.0"
jquery-validation-unobtrusive "^4.0.0"
-"@abp/jquery-validation@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0-rc.1.tgz#8c82189ba7c3614f7306c2bf958b3717a6a4e702"
- integrity sha512-Fr8AI//7iV743S6bw4ixE5qOu+af3HfZSivQJnYVVTbR/75gPqI/xRe6u/k82TJIBM7IaspQ4QdruMuvnJyBpQ==
+"@abp/jquery-validation@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0.tgz#bd6a72c6d86f116abe3b5d2adf3752bdbbcca887"
+ integrity sha512-6l5BZSa3N0Fou6Se7MfUSnI2dD4SYhZ2V988bgPJQ6p37XBOZ2OAj7LEIf5FSjtUzXjao/6/vqjkPNYreNikig==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
jquery-validation "^1.20.1"
-"@abp/jquery@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0-rc.1.tgz#a181c6749d58690b3265705959d8c818296896f3"
- integrity sha512-fXs35cDLAw66irfHsFIWD41RKzpLABkULLoMwxfB76nOVPdV7qlWrXoI2O/du3xhCqBqHR4fS8xjwE6kFvkdLQ==
+"@abp/jquery@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0.tgz#9be5ef2f769680226e6a1a981026590caf3b57ef"
+ integrity sha512-GsFY+n3EtS6B0pAoKd+xMnt5Dzi5bHvIbhLgDgfQfOBzAy3twGRWsPQ3nkuXXm8TppwujMNowU1oiLKPPm0AOA==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
jquery "~3.7.1"
-"@abp/lodash@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0-rc.1.tgz#32f8805031f73b9d5bdc338afe49739c4ebc3ce9"
- integrity sha512-UBGlG5+tFpyAPMuwpkY7K/g21c+d3Aq3HbFmcIilUEIsJ+yJqj95xhRh6t/LSwJCo5ntdSCgVC85q0kD0fQlQA==
+"@abp/lodash@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0.tgz#f5a0a496c999886f2d6999067bfac2e1f0c3969c"
+ integrity sha512-BiAsONbKR/RKG3WjRaMWVmhNe1ELEsykVq+ogG1Rhk3kwPbvze3TS8k2p0Lu/RC41/BmDUmJ5abg1pUMwkRT8w==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
lodash "^4.17.21"
-"@abp/luxon@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0-rc.1.tgz#df19773212502336c2caf6a8806b7647748f8f81"
- integrity sha512-1oPx0tGyFi58T0yv/pdqJpcIRWU6ej5Sv28fRgz3J6tHam3hVPtKJPK9Ajvn6+MNVDLuMUczgVtfWEOvO2Kqrg==
+"@abp/luxon@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0.tgz#7dd3f756be1605506e26f7ac76b80cc082a12d07"
+ integrity sha512-8gdI5BtXkVp0sFg89QVDe8AvgQ7Qfq4JCqz2PMrKPSATR3H8GD6BCaEYpRp6CNTCjVrQjGZdzKgUyea1D3dHbw==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
luxon "^3.4.4"
-"@abp/malihu-custom-scrollbar-plugin@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0-rc.1.tgz#b57086d708082ce45e1917aeca8c92029ebd805d"
- integrity sha512-4sa5e07EPW9IM7eQbvKtk78gd/bESYhTsl+BeWSKeqjj5wwwPYf4GIEvfJM7JVnhYwh1IPYDEkTv9QNYLczXKQ==
+"@abp/malihu-custom-scrollbar-plugin@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0.tgz#c88c132c3402bbb02054ca7d446051950f87a817"
+ integrity sha512-nd/mb6LJa6fMxal8PGcIjIRIoZ/UHCd01WDC9YI2H4wGCGx0CA0JyHso5oc/OEzJhUL8ujO/vYm9uLb7YahPtA==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/moment@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0-rc.1.tgz#0ba9d64ca6d7b454af7aaa63e54be267f333e1fe"
- integrity sha512-YbVEDg3m+D5KMcTCBEnor/tFgmk9IeL4pF/oChYQGXLeyohY7vfmK68owAnEDN61nCRXng9xykiZu2bLq829WA==
+"@abp/moment@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0.tgz#8e4f7a523ab76ef9e4cd96a399560bad38d38d1a"
+ integrity sha512-LywSsKuQ2GN/Btmle6CcTKa811zbvUWdC+RLQA792K9HyBs6LvN0qRRluEQZgplairRgh2pDOg8tdFlUERkv2w==
dependencies:
moment "^2.30.1"
-"@abp/owl.carousel@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-8.3.0-rc.1.tgz#14942323ff52f10165bb695b7a7805b81c394549"
- integrity sha512-vz08jsxbsG7L9PbQzjbfhzGuGdJgU2uBB7dqmk4A3l6D5c46L9UEoQZ7FsXXQxz/f9bLq73F6XCmviq0MYwo/Q==
+"@abp/owl.carousel@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-8.3.0.tgz#4a1128e7eb98511b890fb91ef7658b6d8d3381e7"
+ integrity sha512-nVBPb00XOInGNUFQgzNEN/ASZGJPl1FTxPXkg6aQQPPAQMz3ZJXByZrvej56zUR550M831XtRNmWoulI+/yVGQ==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
owl.carousel "^2.3.4"
-"@abp/prismjs@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-8.3.0-rc.1.tgz#82f98db7e3a5e5e535ecb0452c84a5fda57b5801"
- integrity sha512-kvO7fU9KfXNK44mL9QDtGuDD3ebiXTd5nKNxgrsneHhYsdNiWwXzqWpZlfs7t9nqSydLzqWkQZ7we01GoxeQ/g==
+"@abp/prismjs@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-8.3.0.tgz#0c87c63294d1452ed7152083d2fb6e70aa3aeae6"
+ integrity sha512-3wpwbqqlGRfQSLcBP+Qb2TKOoVGZVYYwOP6dP3So9ev8J5gFMDEizH9zLwRVHYrrsZZP8/etYnyZ0hn7ewuI5Q==
dependencies:
- "@abp/clipboard" "~8.3.0-rc.1"
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/clipboard" "~8.3.0"
+ "@abp/core" "~8.3.0"
prismjs "^1.29.0"
-"@abp/select2@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0-rc.1.tgz#3eb932e05987cc1e13f72decc9ae70d47801bf7d"
- integrity sha512-lZuJLiFcOEVj6cTPAA7ZfhE3v1LyivmMt8Tt7Dpvgybx2PDN1NtfLce2BCKb0MvsaTlfJMSK0ZLu3JpxCQ+Q/A==
+"@abp/select2@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0.tgz#ef4742fcd345394767f46180f61c6cabbd0b3867"
+ integrity sha512-bdLt2+ImxxpiZl4HGbYJpdDROQUT7/Z/+8A+6oJNacq3lNekdvufLYgTMxKru6zTbnd9j3HFKMOTE1eRjb9Xqg==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
select2 "^4.0.13"
-"@abp/sweetalert2@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0-rc.1.tgz#66d8b9ce287a71474ce37c217cd800e150a86138"
- integrity sha512-b6dZbc5/nYrUz5s+lAgi561XnsASa0ZJOn6f5W2Oakm9ULzqFndapKx5f+zHeJaNArpeGDh50AjQ+lcGGw83zQ==
+"@abp/sweetalert2@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0.tgz#a63020d57e44f7940817287d3d9676288bfb85aa"
+ integrity sha512-ooqPM4Z2v2scnMo5l8ycTmp6t/sW4sCsvIkJ4TyM876WLQJaZxJdOao4RQWuU+dVFr9zg8cOwqLH4q7UEiO6ww==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
sweetalert2 "^11.3.6"
-"@abp/timeago@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0-rc.1.tgz#d795b9cccb190f5d42f242727ac447fe03c30db3"
- integrity sha512-yJCA7PHmAxFxIvPq03iSx3LbIiDQls4AiVBO75103LEGokRUG9bg+iPA7GLkPpfNbnNgEJ7N7Gw6RQzMNRLCpA==
+"@abp/timeago@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0.tgz#b3b8d6927bf170f77af848bc1925e5ef6835bd55"
+ integrity sha512-Dd6xaUoF9Bp4F9WJnTsFBqY+Gt++UR7UmLvBZL/dvthkeNCu2I8MUsmshkUUjY0lIXpjZwefUOuyupQrgHXPMg==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
timeago "^1.6.7"
-"@abp/toastr@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0-rc.1.tgz#82c7f6566e604c2cf31555da3f9b0898df8a5541"
- integrity sha512-0nBM4nEvDlANVulk7EKoB4Lk/1fH+UgzPOyUOyemQZAWHgPhIpa4z5yiLkCeOxN1hu/CBEe+Jo7qJblsj+v7kQ==
+"@abp/toastr@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0.tgz#e68a2bd8f731e79034594bc2c736f7c66b3df1af"
+ integrity sha512-aWK/RaX/FmcEKhJLjsw1A0K2c04m2fRJkmo9NwzBCSscy6Msw9IMkqNWLiFDThMU8/qKzq7wq3Vmk/C0IpeAwA==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
toastr "^2.1.4"
-"@abp/tui-editor@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-8.3.0-rc.1.tgz#ce37f6456f9fc1964a9b6bd8358608ce9defbe9d"
- integrity sha512-jBCCM8iThBdYPRQpW56gdY5Z3hUlmiXSTiVixBfGT8vadznD8kbvIJ8Zo4c/CJNs71ybceiCi3WzRQYiE0hTew==
+"@abp/tui-editor@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-8.3.0.tgz#188360644140f3173b0347c1ce883612a5eb9e18"
+ integrity sha512-GNFuKvAlwihuzg91dekGZ5s5aLKySROHbLujanzaco1nfRvWehx+J+oCP0rHzQ3++DpxEXhlz05qW9I1gCEAKA==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
- "@abp/prismjs" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
+ "@abp/prismjs" "~8.3.0"
-"@abp/utils@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0-rc.1.tgz#7db324059f8f9c64fbb5d5a6f0c2384896ca1928"
- integrity sha512-Eg4Lwv4DEDr5mfG/8ghwMPdphywZBZIxWTJCZnCWngDQ9fEn/bnYuL1WkvbVvKd10A6030wHEJXFJj2OuNdi3Q==
+"@abp/utils@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0.tgz#96ae9266ad4d833fd9d723acef7fc85fabf618d9"
+ integrity sha512-w/XAqza4Z8wBWRoj5uPNKbd1/bE9L/uUWk6EUSBKmljMRryWQBmaPkb1XgvrOMQIbyyF60tUvvipapQLPVh6hw==
dependencies:
just-compare "^2.3.0"
diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo.Blogging.Admin.Application.Contracts.abppkg.analyze.json b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo.Blogging.Admin.Application.Contracts.abppkg.analyze.json
index 3c721cbb8f..238d602da6 100644
--- a/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo.Blogging.Admin.Application.Contracts.abppkg.analyze.json
+++ b/modules/blogging/src/Volo.Blogging.Admin.Application.Contracts/Volo.Blogging.Admin.Application.Contracts.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.Blogging.Admin.Application.Contracts",
- "hash": "765deda9c2ad81c60686d163f8856cde",
+ "hash": "",
"contents": [
{
"namespace": "Volo.Blogging.Admin",
diff --git a/modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.abppkg.analyze.json b/modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.abppkg.analyze.json
index b247ffa372..473750d55d 100644
--- a/modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.abppkg.analyze.json
+++ b/modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.Blogging.Admin.Application",
- "hash": "f36b44743b8df7a8d4cc013570d044a2",
+ "hash": "",
"contents": [
{
"namespace": "Volo.Blogging.Admin",
@@ -146,6 +146,7 @@
"methods": [
{
"returnType": "ListResultDto",
+ "namespace": "Volo.Blogging.Admin.Blogs",
"name": "GetListAsync",
"summary": null,
"isAsync": true,
@@ -156,6 +157,7 @@
},
{
"returnType": "BlogDto",
+ "namespace": "Volo.Blogging.Admin.Blogs",
"name": "GetAsync",
"summary": null,
"isAsync": true,
@@ -172,6 +174,7 @@
},
{
"returnType": "BlogDto",
+ "namespace": "Volo.Blogging.Admin.Blogs",
"name": "CreateAsync",
"summary": null,
"isAsync": true,
@@ -188,6 +191,7 @@
},
{
"returnType": "BlogDto",
+ "namespace": "Volo.Blogging.Admin.Blogs",
"name": "UpdateAsync",
"summary": null,
"isAsync": true,
@@ -209,6 +213,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.Blogging.Admin.Blogs",
"name": "DeleteAsync",
"summary": null,
"isAsync": true,
@@ -225,6 +230,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.Blogging.Admin.Blogs",
"name": "ClearCacheAsync",
"summary": null,
"isAsync": true,
diff --git a/modules/blogging/src/Volo.Blogging.Admin.HttpApi.Client/Volo.Blogging.Admin.HttpApi.Client.abppkg.analyze.json b/modules/blogging/src/Volo.Blogging.Admin.HttpApi.Client/Volo.Blogging.Admin.HttpApi.Client.abppkg.analyze.json
index 294df5e147..851a0316da 100644
--- a/modules/blogging/src/Volo.Blogging.Admin.HttpApi.Client/Volo.Blogging.Admin.HttpApi.Client.abppkg.analyze.json
+++ b/modules/blogging/src/Volo.Blogging.Admin.HttpApi.Client/Volo.Blogging.Admin.HttpApi.Client.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.Blogging.Admin.HttpApi.Client",
- "hash": "3c18ac9eda422806cb4bba72a39ad229",
+ "hash": "",
"contents": [
{
"namespace": "Volo.Blogging.Admin",
diff --git a/modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo.Blogging.Admin.HttpApi.abppkg.analyze.json b/modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo.Blogging.Admin.HttpApi.abppkg.analyze.json
index a93621f41c..1a6a317bd2 100644
--- a/modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo.Blogging.Admin.HttpApi.abppkg.analyze.json
+++ b/modules/blogging/src/Volo.Blogging.Admin.HttpApi/Volo.Blogging.Admin.HttpApi.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.Blogging.Admin.HttpApi",
- "hash": "689f6b3f8cc4a2e9e75308df5a58b588",
+ "hash": "",
"contents": [
{
"namespace": "Volo.Blogging.Admin",
@@ -63,6 +63,90 @@
"contentType": "abpModule",
"name": "BloggingAdminHttpApiModule",
"summary": null
+ },
+ {
+ "apis": [
+ {
+ "path": "api/blogging/blogs/admin",
+ "method": "GET",
+ "groupName": "BlogManagement",
+ "responseType": "Volo.Abp.Application.Dtos.ListResultDto`1[Volo.Blogging.Blogs.Dtos.BlogDto]",
+ "responseTypeAsJson": "{\r\n \"items\": [\r\n {\r\n \"name\": \"string\",\r\n \"shortName\": \"string\",\r\n \"description\": \"string\",\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n ]\r\n}",
+ "parameterDescriptions": []
+ },
+ {
+ "path": "api/blogging/blogs/admin/{id}",
+ "method": "GET",
+ "groupName": "BlogManagement",
+ "responseType": "Volo.Blogging.Blogs.Dtos.BlogDto",
+ "responseTypeAsJson": "{\r\n \"name\": \"string\",\r\n \"shortName\": \"string\",\r\n \"description\": \"string\",\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n}",
+ "parameterDescriptions": [
+ {
+ "name": "id",
+ "type": "Guid"
+ }
+ ]
+ },
+ {
+ "path": "api/blogging/blogs/admin",
+ "method": "POST",
+ "groupName": "BlogManagement",
+ "responseType": "Volo.Blogging.Blogs.Dtos.BlogDto",
+ "responseTypeAsJson": "{\r\n \"name\": \"string\",\r\n \"shortName\": \"string\",\r\n \"description\": \"string\",\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n}",
+ "parameterDescriptions": [
+ {
+ "name": "input",
+ "type": "CreateBlogDto"
+ }
+ ]
+ },
+ {
+ "path": "api/blogging/blogs/admin/{id}",
+ "method": "PUT",
+ "groupName": "BlogManagement",
+ "responseType": "Volo.Blogging.Blogs.Dtos.BlogDto",
+ "responseTypeAsJson": "{\r\n \"name\": \"string\",\r\n \"shortName\": \"string\",\r\n \"description\": \"string\",\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n}",
+ "parameterDescriptions": [
+ {
+ "name": "id",
+ "type": "Guid"
+ },
+ {
+ "name": "input",
+ "type": "UpdateBlogDto"
+ }
+ ]
+ },
+ {
+ "path": "api/blogging/blogs/admin/{id}",
+ "method": "DELETE",
+ "groupName": "BlogManagement",
+ "responseType": "System.Void",
+ "responseTypeAsJson": "",
+ "parameterDescriptions": [
+ {
+ "name": "id",
+ "type": "Guid"
+ }
+ ]
+ },
+ {
+ "path": "api/blogging/blogs/admin/clear-cache/{id}",
+ "method": "GET",
+ "groupName": "BlogManagement",
+ "responseType": "System.Void",
+ "responseTypeAsJson": "",
+ "parameterDescriptions": [
+ {
+ "name": "id",
+ "type": "Guid"
+ }
+ ]
+ }
+ ],
+ "contentType": "httpApi",
+ "name": "Defined Http Apis",
+ "summary": null
}
]
}
\ No newline at end of file
diff --git a/modules/blogging/src/Volo.Blogging.Admin.Web/Volo.Blogging.Admin.Web.abppkg.analyze.json b/modules/blogging/src/Volo.Blogging.Admin.Web/Volo.Blogging.Admin.Web.abppkg.analyze.json
index 258c5ec139..bfadd4006b 100644
--- a/modules/blogging/src/Volo.Blogging.Admin.Web/Volo.Blogging.Admin.Web.abppkg.analyze.json
+++ b/modules/blogging/src/Volo.Blogging.Admin.Web/Volo.Blogging.Admin.Web.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.Blogging.Admin.Web",
- "hash": "f00cd39c07130843c7103cc1f6caf9a2",
+ "hash": "",
"contents": [
{
"namespace": "Volo.Blogging.Admin",
@@ -73,6 +73,24 @@
"contentType": "abpModule",
"name": "BloggingAdminWebModule",
"summary": null
+ },
+ {
+ "namespace": "Volo.Blogging.Admin.Pages.Blogging.Admin.Blogs",
+ "contentType": "webPage",
+ "name": "CreateModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.Blogging.Admin.Pages.Blogging.Admin.Blogs",
+ "contentType": "webPage",
+ "name": "EditModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.Blogging.Admin.Pages.Blogging.Admin.Blogs",
+ "contentType": "webPage",
+ "name": "IndexModel",
+ "summary": null
}
]
}
\ No newline at end of file
diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo.Blogging.Application.Contracts.abppkg.analyze.json b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo.Blogging.Application.Contracts.abppkg.analyze.json
index 233c9594ac..6d09472ac6 100644
--- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo.Blogging.Application.Contracts.abppkg.analyze.json
+++ b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo.Blogging.Application.Contracts.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.Blogging.Application.Contracts",
- "hash": "90bed1d4c7274bff6059309df9800b27",
+ "hash": "",
"contents": [
{
"namespace": "Volo.Blogging",
diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.abppkg.analyze.json b/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.abppkg.analyze.json
index 97dc91e6d7..b332019e6d 100644
--- a/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.abppkg.analyze.json
+++ b/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.Blogging.Application",
- "hash": "0119e0d4243cd5f865bda1dc7115637f",
+ "hash": "",
"contents": [
{
"namespace": "Volo.Blogging",
@@ -151,6 +151,7 @@
"methods": [
{
"returnType": "List",
+ "namespace": "Volo.Blogging.Tagging",
"name": "GetPopularTagsAsync",
"summary": null,
"isAsync": true,
@@ -242,6 +243,7 @@
"methods": [
{
"returnType": "ListResultDto",
+ "namespace": "Volo.Blogging.Posts",
"name": "GetListByBlogIdAndTagNameAsync",
"summary": null,
"isAsync": true,
@@ -263,6 +265,7 @@
},
{
"returnType": "ListResultDto",
+ "namespace": "Volo.Blogging.Posts",
"name": "GetTimeOrderedListAsync",
"summary": null,
"isAsync": true,
@@ -279,6 +282,7 @@
},
{
"returnType": "PostWithDetailsDto",
+ "namespace": "Volo.Blogging.Posts",
"name": "GetForReadingAsync",
"summary": null,
"isAsync": true,
@@ -295,6 +299,7 @@
},
{
"returnType": "PostWithDetailsDto",
+ "namespace": "Volo.Blogging.Posts",
"name": "GetAsync",
"summary": null,
"isAsync": true,
@@ -311,6 +316,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.Blogging.Posts",
"name": "DeleteAsync",
"summary": null,
"isAsync": true,
@@ -327,6 +333,7 @@
},
{
"returnType": "PostWithDetailsDto",
+ "namespace": "Volo.Blogging.Posts",
"name": "UpdateAsync",
"summary": null,
"isAsync": true,
@@ -346,8 +353,48 @@
}
]
},
+ {
+ "returnType": "List",
+ "namespace": "Volo.Blogging.Posts",
+ "name": "GetListByUserIdAsync",
+ "summary": null,
+ "isAsync": true,
+ "isPublic": true,
+ "isPrivate": false,
+ "isStatic": false,
+ "parameters": [
+ {
+ "type": "Guid",
+ "name": "userId",
+ "isOptional": false
+ }
+ ]
+ },
+ {
+ "returnType": "List",
+ "namespace": "Volo.Blogging.Posts",
+ "name": "GetLatestBlogPostsAsync",
+ "summary": null,
+ "isAsync": true,
+ "isPublic": true,
+ "isPrivate": false,
+ "isStatic": false,
+ "parameters": [
+ {
+ "type": "Guid",
+ "name": "blogId",
+ "isOptional": false
+ },
+ {
+ "type": "Int32",
+ "name": "count",
+ "isOptional": false
+ }
+ ]
+ },
{
"returnType": "PostWithDetailsDto",
+ "namespace": "Volo.Blogging.Posts",
"name": "CreateAsync",
"summary": null,
"isAsync": true,
@@ -367,6 +414,110 @@
"name": "PostAppService",
"summary": null
},
+ {
+ "namespace": "Volo.Blogging.Members",
+ "baseClass": {
+ "name": "BloggingAppServiceBase",
+ "namespace": "Volo.Blogging",
+ "declaringAssemblyName": "Volo.Blogging.Application",
+ "fullName": "Volo.Blogging.BloggingAppServiceBase"
+ },
+ "implementingInterfaces": [
+ {
+ "name": "IApplicationService",
+ "namespace": "Volo.Abp.Application.Services",
+ "declaringAssemblyName": "Volo.Abp.Ddd.Application.Contracts",
+ "fullName": "Volo.Abp.Application.Services.IApplicationService"
+ },
+ {
+ "name": "IRemoteService",
+ "namespace": "Volo.Abp",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.IRemoteService"
+ },
+ {
+ "name": "IAvoidDuplicateCrossCuttingConcerns",
+ "namespace": "Volo.Abp.Aspects",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.Aspects.IAvoidDuplicateCrossCuttingConcerns"
+ },
+ {
+ "name": "IValidationEnabled",
+ "namespace": "Volo.Abp.Validation",
+ "declaringAssemblyName": "Volo.Abp.Validation",
+ "fullName": "Volo.Abp.Validation.IValidationEnabled"
+ },
+ {
+ "name": "IUnitOfWorkEnabled",
+ "namespace": "Volo.Abp.Uow",
+ "declaringAssemblyName": "Volo.Abp.Uow",
+ "fullName": "Volo.Abp.Uow.IUnitOfWorkEnabled"
+ },
+ {
+ "name": "IAuditingEnabled",
+ "namespace": "Volo.Abp.Auditing",
+ "declaringAssemblyName": "Volo.Abp.Auditing.Contracts",
+ "fullName": "Volo.Abp.Auditing.IAuditingEnabled"
+ },
+ {
+ "name": "IGlobalFeatureCheckingEnabled",
+ "namespace": "Volo.Abp.GlobalFeatures",
+ "declaringAssemblyName": "Volo.Abp.GlobalFeatures",
+ "fullName": "Volo.Abp.GlobalFeatures.IGlobalFeatureCheckingEnabled"
+ },
+ {
+ "name": "ITransientDependency",
+ "namespace": "Volo.Abp.DependencyInjection",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.DependencyInjection.ITransientDependency"
+ },
+ {
+ "name": "IMemberAppService",
+ "namespace": "Volo.Blogging.Members",
+ "declaringAssemblyName": "Volo.Blogging.Application.Contracts",
+ "fullName": "Volo.Blogging.Members.IMemberAppService"
+ }
+ ],
+ "methods": [
+ {
+ "returnType": "BlogUserDto",
+ "namespace": "Volo.Blogging.Members",
+ "name": "FindAsync",
+ "summary": null,
+ "isAsync": true,
+ "isPublic": true,
+ "isPrivate": false,
+ "isStatic": false,
+ "parameters": [
+ {
+ "type": "String",
+ "name": "username",
+ "isOptional": false
+ }
+ ]
+ },
+ {
+ "returnType": "Void",
+ "namespace": "Volo.Blogging.Members",
+ "name": "UpdateUserProfileAsync",
+ "summary": null,
+ "isAsync": true,
+ "isPublic": true,
+ "isPrivate": false,
+ "isStatic": false,
+ "parameters": [
+ {
+ "type": "CustomIdentityBlogUserUpdateDto",
+ "name": "input",
+ "isOptional": false
+ }
+ ]
+ }
+ ],
+ "contentType": "applicationService",
+ "name": "MemberAppService",
+ "summary": null
+ },
{
"namespace": "Volo.Blogging.Files",
"baseClass": {
@@ -434,6 +585,7 @@
"methods": [
{
"returnType": "RawFileDto",
+ "namespace": "Volo.Blogging.Files",
"name": "GetAsync",
"summary": null,
"isAsync": true,
@@ -450,6 +602,7 @@
},
{
"returnType": "IRemoteStreamContent",
+ "namespace": "Volo.Blogging.Files",
"name": "GetFileAsync",
"summary": null,
"isAsync": true,
@@ -466,6 +619,7 @@
},
{
"returnType": "FileUploadOutputDto",
+ "namespace": "Volo.Blogging.Files",
"name": "CreateAsync",
"summary": null,
"isAsync": true,
@@ -552,6 +706,7 @@
"methods": [
{
"returnType": "List",
+ "namespace": "Volo.Blogging.Comments",
"name": "GetHierarchicalListOfPostAsync",
"summary": null,
"isAsync": true,
@@ -568,6 +723,7 @@
},
{
"returnType": "CommentWithDetailsDto",
+ "namespace": "Volo.Blogging.Comments",
"name": "CreateAsync",
"summary": null,
"isAsync": true,
@@ -584,6 +740,7 @@
},
{
"returnType": "CommentWithDetailsDto",
+ "namespace": "Volo.Blogging.Comments",
"name": "UpdateAsync",
"summary": null,
"isAsync": true,
@@ -605,6 +762,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.Blogging.Comments",
"name": "DeleteAsync",
"summary": null,
"isAsync": true,
@@ -691,6 +849,7 @@
"methods": [
{
"returnType": "ListResultDto",
+ "namespace": "Volo.Blogging.Blogs",
"name": "GetListAsync",
"summary": null,
"isAsync": true,
@@ -701,6 +860,7 @@
},
{
"returnType": "BlogDto",
+ "namespace": "Volo.Blogging.Blogs",
"name": "GetByShortNameAsync",
"summary": null,
"isAsync": true,
@@ -717,6 +877,7 @@
},
{
"returnType": "BlogDto",
+ "namespace": "Volo.Blogging.Blogs",
"name": "GetAsync",
"summary": null,
"isAsync": true,
diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs
index d1825f4475..0d612dfb0c 100644
--- a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs
+++ b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs
@@ -308,7 +308,7 @@ namespace Volo.Blogging.Posts
foreach (var newTag in newTags)
{
- var tag = tags.FirstOrDefault(t => t.Name == newTag);
+ var tag = tags.FirstOrDefault(t => t.Name.Equals(newTag, StringComparison.OrdinalIgnoreCase));
if (tag == null)
{
diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo.Blogging.Domain.Shared.abppkg.analyze.json b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo.Blogging.Domain.Shared.abppkg.analyze.json
index 54e8d52f5f..2b2ee467f7 100644
--- a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo.Blogging.Domain.Shared.abppkg.analyze.json
+++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo.Blogging.Domain.Shared.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.Blogging.Domain.Shared",
- "hash": "416d1bef921b5bb0eb443877eb8af5a6",
+ "hash": "",
"contents": [
{
"namespace": "Volo.Blogging",
diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/sv.json b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/sv.json
new file mode 100644
index 0000000000..9703219c04
--- /dev/null
+++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/sv.json
@@ -0,0 +1,92 @@
+{
+ "culture": "sv",
+ "texts": {
+ "Menu:Blogs": "Blogg",
+ "Menu:BlogManagement": "Bloggande",
+ "Permission:Management": "Förvaltning",
+ "Permission:Edit": "Redigera",
+ "Permission:Create": "Skapa",
+ "Permission:Delete": "Radera",
+ "Permission:Blogging": "Blogg",
+ "Permission:Blogs": "Blogg",
+ "Permission:Posts": "InlÀgg",
+ "Permission:Tags": "Etiketter",
+ "Permission:Comments": "Kommentarer",
+ "Permission:ClearCache": "Rensa cache",
+ "Title": "Titel",
+ "Delete": "Radera",
+ "Reply": "Svar",
+ "ReplyTo": "Svara pÄ {0}",
+ "ContinueReading": "FortsÀtta lÀsa",
+ "DaysAgo": "{0} dagar sedan",
+ "DayAgo": "{0} dag sedan",
+ "YearsAgo": "{0} Är sedan",
+ "YearAgo": "{0} Är sedan",
+ "MonthsAgo": "{0} mÄnader sedan",
+ "MonthAgo": "{0} mÄnad sedan",
+ "WeeksAgo": "{0} veckor sedan",
+ "WeekAgo": "{0} vecka sedan",
+ "MinutesAgo": "{0} minuter sedan",
+ "MinuteAgo": "{0} minut sedan",
+ "SecondsAgo": "{0} sekunder sedan",
+ "SecondAgo": "{0} för en sekund sedan",
+ "HoursAgo": "för {0} timmar sedan",
+ "HourAgo": "{0} timme sedan",
+ "Now": "nu",
+ "Content": "InnehÄll",
+ "SeeAll": "Se alla",
+ "PopularTags": "PopulÀra taggar",
+ "WiewsWithCount": "{0} visningar",
+ "LastPosts": "Senaste inlÀgg",
+ "LeaveComment": "LĂ€mna kommentar",
+ "TagsInThisArticle": "Taggar i denna artikel",
+ "Posts": "InlÀgg",
+ "Edit": "Redigera",
+ "BLOG": "BLOGG",
+ "CommentDeletionWarningMessage": "Kommentaren kommer att raderas.",
+ "PostDeletionWarningMessage": "InlÀgget kommer att raderas.",
+ "BlogDeletionWarningMessage": "Bloggen kommer att raderas.",
+ "AreYouSure": "Ăr du sĂ€ker?",
+ "CommentWithCount": "{0} kommentarer",
+ "Comment": "Hur gör man",
+ "ShareOnTwitter": "Dela pÄ Twitter",
+ "CoverImage": "Omslagsbild",
+ "CreateANewPost": "Skapa ett nytt inlÀgg",
+ "CreateANewBlog": "Skapa en ny blogg",
+ "WhatIsNew": "Vad Àr nytt?",
+ "Name": "Namn",
+ "ShortName": "Kort namn",
+ "CreationTime": "Skapelsetid",
+ "Description": "Beskrivning",
+ "Blogs": "Blogg",
+ "Tags": "Etiketter",
+ "ShareOn": "Dela pÄ",
+ "TitleLengthWarning": "HÄll din titelstorlek under 60 tecken för att vara SEO-vÀnlig!",
+ "ClearCache": "Rensa cache",
+ "ClearCacheConfirmationMessage": "Ăr du sĂ€ker pĂ„ att du vill rensa cacheminnet?",
+ "MarkdownSupported": "Markdown stöds",
+ "FileUploadInfo": "Dra, slÀpp eller klistra in en kopierad bild.",
+ "PostDescriptionHint": "* Kommer att Äterges i förhandsgranskningen av artikellÀnken, stöder HTML",
+ "ReadMore": "FortsÀtta lÀsa",
+ "MemberNotPublishedPostYet": "Inga inlÀgg Ànnu!",
+ "UpdateUserWebSiteInfo": "Exempel: https://johndoe.com",
+ "UpdateUserTwitterInfo": "Exempel: johndoe",
+ "UpdateUserGithubInfo": "Exempel: johndoe",
+ "UpdateUserLinkedinInfo": "Exempel: https://www.linkedin.com/...",
+ "UpdateUserCompanyInfo": "Exempel: Volosoft",
+ "UpdateUserJobTitleInfo": "Exempel: Programvaruutvecklare",
+ "WebSite": "Webbplats",
+ "UserName": "AnvÀndarnamn",
+ "FullURL": "Full URL",
+ "JobTitle": "Befattning",
+ "PersonalWebsite": "PERSONLIG WEBBPLATS",
+ "EditProfile": "Redigera profil",
+ "MoreFromBlog": "Mer frÄn bloggen",
+ "MoreFromUser": "Mer frÄn {0}",
+ "BlogPosts": "InlÀgg",
+ "Views": "utsikt",
+ "Biography": "Biografi",
+ "Social": "Sociala",
+ "NewBlogPost": "Nytt blogginlÀgg"
+ }
+}
\ No newline at end of file
diff --git a/modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.abppkg.analyze.json b/modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.abppkg.analyze.json
index 4ca41ac00d..64b65921d1 100644
--- a/modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.abppkg.analyze.json
+++ b/modules/blogging/src/Volo.Blogging.Domain/Volo.Blogging.Domain.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.Blogging.Domain",
- "hash": "6ef78d68d0b8c8fe7a3f43214e572d5d",
+ "hash": "",
"contents": [
{
"namespace": "Volo.Blogging",
@@ -152,7 +152,7 @@
{
"name": "IMultiTenant",
"namespace": "Volo.Abp.MultiTenancy",
- "declaringAssemblyName": "Volo.Abp.MultiTenancy",
+ "declaringAssemblyName": "Volo.Abp.MultiTenancy.Abstractions",
"fullName": "Volo.Abp.MultiTenancy.IMultiTenant"
},
{
@@ -165,6 +165,7 @@
"methods": [
{
"returnType": "Boolean",
+ "namespace": "Volo.Blogging.Users",
"name": "Update",
"summary": null,
"isAsync": false,
@@ -229,6 +230,41 @@
"type": "System.Boolean",
"name": "PhoneNumberConfirmed",
"summary": null
+ },
+ {
+ "type": "System.String",
+ "name": "WebSite",
+ "summary": null
+ },
+ {
+ "type": "System.String",
+ "name": "Twitter",
+ "summary": null
+ },
+ {
+ "type": "System.String",
+ "name": "Github",
+ "summary": null
+ },
+ {
+ "type": "System.String",
+ "name": "Linkedin",
+ "summary": null
+ },
+ {
+ "type": "System.String",
+ "name": "Company",
+ "summary": null
+ },
+ {
+ "type": "System.String",
+ "name": "JobTitle",
+ "summary": null
+ },
+ {
+ "type": "System.String",
+ "name": "Biography",
+ "summary": null
}
],
"contentType": "aggregateRoot",
@@ -349,6 +385,7 @@
"methods": [
{
"returnType": "Void",
+ "namespace": "Volo.Blogging.Tagging",
"name": "SetName",
"summary": null,
"isAsync": false,
@@ -365,6 +402,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.Blogging.Tagging",
"name": "IncreaseUsageCount",
"summary": null,
"isAsync": false,
@@ -381,6 +419,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.Blogging.Tagging",
"name": "DecreaseUsageCount",
"summary": null,
"isAsync": false,
@@ -397,6 +436,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.Blogging.Tagging",
"name": "SetDescription",
"summary": null,
"isAsync": false,
@@ -556,6 +596,7 @@
"methods": [
{
"returnType": "Post",
+ "namespace": "Volo.Blogging.Posts",
"name": "IncreaseReadCount",
"summary": null,
"isAsync": false,
@@ -566,6 +607,7 @@
},
{
"returnType": "Post",
+ "namespace": "Volo.Blogging.Posts",
"name": "SetTitle",
"summary": null,
"isAsync": false,
@@ -582,6 +624,7 @@
},
{
"returnType": "Post",
+ "namespace": "Volo.Blogging.Posts",
"name": "SetUrl",
"summary": null,
"isAsync": false,
@@ -598,6 +641,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.Blogging.Posts",
"name": "AddTag",
"summary": null,
"isAsync": false,
@@ -614,6 +658,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.Blogging.Posts",
"name": "RemoveTag",
"summary": null,
"isAsync": false,
@@ -800,6 +845,7 @@
"methods": [
{
"returnType": "Void",
+ "namespace": "Volo.Blogging.Comments",
"name": "SetText",
"summary": null,
"isAsync": false,
@@ -954,6 +1000,7 @@
"methods": [
{
"returnType": "Blog",
+ "namespace": "Volo.Blogging.Blogs",
"name": "SetName",
"summary": null,
"isAsync": false,
@@ -970,6 +1017,7 @@
},
{
"returnType": "Blog",
+ "namespace": "Volo.Blogging.Blogs",
"name": "SetShortName",
"summary": null,
"isAsync": false,
@@ -1061,6 +1109,7 @@
"methods": [
{
"returnType": "List",
+ "namespace": "Volo.Blogging.Users",
"name": "GetUsersAsync",
"summary": null,
"isAsync": true,
@@ -1135,6 +1184,7 @@
"methods": [
{
"returnType": "List",
+ "namespace": "Volo.Blogging.Tagging",
"name": "GetListAsync",
"summary": null,
"isAsync": true,
@@ -1156,6 +1206,7 @@
},
{
"returnType": "Tag",
+ "namespace": "Volo.Blogging.Tagging",
"name": "GetByNameAsync",
"summary": null,
"isAsync": true,
@@ -1182,6 +1233,7 @@
},
{
"returnType": "Tag",
+ "namespace": "Volo.Blogging.Tagging",
"name": "FindByNameAsync",
"summary": null,
"isAsync": true,
@@ -1208,6 +1260,7 @@
},
{
"returnType": "List",
+ "namespace": "Volo.Blogging.Tagging",
"name": "GetListAsync",
"summary": null,
"isAsync": true,
@@ -1229,6 +1282,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.Blogging.Tagging",
"name": "DecreaseUsageCountOfTagsAsync",
"summary": null,
"isAsync": true,
@@ -1298,6 +1352,7 @@
"methods": [
{
"returnType": "List",
+ "namespace": "Volo.Blogging.Posts",
"name": "GetPostsByBlogId",
"summary": null,
"isAsync": true,
@@ -1319,6 +1374,7 @@
},
{
"returnType": "Boolean",
+ "namespace": "Volo.Blogging.Posts",
"name": "IsPostUrlInUseAsync",
"summary": null,
"isAsync": true,
@@ -1350,6 +1406,7 @@
},
{
"returnType": "Post",
+ "namespace": "Volo.Blogging.Posts",
"name": "GetPostByUrl",
"summary": null,
"isAsync": true,
@@ -1376,6 +1433,7 @@
},
{
"returnType": "List",
+ "namespace": "Volo.Blogging.Posts",
"name": "GetOrderedList",
"summary": null,
"isAsync": true,
@@ -1399,6 +1457,55 @@
"isOptional": true
}
]
+ },
+ {
+ "returnType": "List",
+ "namespace": "Volo.Blogging.Posts",
+ "name": "GetListByUserIdAsync",
+ "summary": null,
+ "isAsync": true,
+ "isPublic": true,
+ "isPrivate": false,
+ "isStatic": false,
+ "parameters": [
+ {
+ "type": "Guid",
+ "name": "userId",
+ "isOptional": false
+ },
+ {
+ "type": "CancellationToken",
+ "name": "cancellationToken",
+ "isOptional": true
+ }
+ ]
+ },
+ {
+ "returnType": "List",
+ "namespace": "Volo.Blogging.Posts",
+ "name": "GetLatestBlogPostsAsync",
+ "summary": null,
+ "isAsync": true,
+ "isPublic": true,
+ "isPrivate": false,
+ "isStatic": false,
+ "parameters": [
+ {
+ "type": "Guid",
+ "name": "blogId",
+ "isOptional": false
+ },
+ {
+ "type": "Int32",
+ "name": "count",
+ "isOptional": false
+ },
+ {
+ "type": "CancellationToken",
+ "name": "cancellationToken",
+ "isOptional": true
+ }
+ ]
}
],
"contentType": "repositoryInterface",
@@ -1450,6 +1557,7 @@
"methods": [
{
"returnType": "List",
+ "namespace": "Volo.Blogging.Comments",
"name": "GetListOfPostAsync",
"summary": null,
"isAsync": true,
@@ -1471,6 +1579,7 @@
},
{
"returnType": "Int32",
+ "namespace": "Volo.Blogging.Comments",
"name": "GetCommentCountOfPostAsync",
"summary": null,
"isAsync": true,
@@ -1492,6 +1601,7 @@
},
{
"returnType": "List",
+ "namespace": "Volo.Blogging.Comments",
"name": "GetRepliesOfComment",
"summary": null,
"isAsync": true,
@@ -1513,6 +1623,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.Blogging.Comments",
"name": "DeleteOfPost",
"summary": null,
"isAsync": true,
@@ -1582,6 +1693,7 @@
"methods": [
{
"returnType": "Blog",
+ "namespace": "Volo.Blogging.Blogs",
"name": "FindByShortNameAsync",
"summary": null,
"isAsync": true,
diff --git a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo.Blogging.EntityFrameworkCore.abppkg.analyze.json b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo.Blogging.EntityFrameworkCore.abppkg.analyze.json
index 7fb2558e8c..c891a76071 100644
--- a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo.Blogging.EntityFrameworkCore.abppkg.analyze.json
+++ b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo.Blogging.EntityFrameworkCore.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.Blogging.EntityFrameworkCore",
- "hash": "6a38802ee4510532b9dd8879c2b2b7ff",
+ "hash": "",
"contents": [
{
"namespace": "Volo.Blogging.EntityFrameworkCore",
@@ -67,45 +67,27 @@
{
"namespace": "Volo.Blogging.EntityFrameworkCore",
"connectionStringName": "Blogging",
- "databaseTables": [
- {
- "entityFullName": "Volo.Blogging.Blogs.Blog",
- "contentType": "databaseTable",
- "name": "BlgBlogs",
- "summary": null
- },
- {
- "entityFullName": "Volo.Blogging.Comments.Comment",
- "contentType": "databaseTable",
- "name": "BlgComments",
- "summary": null
- },
- {
- "entityFullName": "Volo.Blogging.Posts.Post",
- "contentType": "databaseTable",
- "name": "BlgPosts",
- "summary": null
- },
- {
- "entityFullName": "Volo.Blogging.Posts.PostTag",
- "contentType": "databaseTable",
- "name": "BlgPostTags",
- "summary": null
- },
- {
- "entityFullName": "Volo.Blogging.Tagging.Tag",
- "contentType": "databaseTable",
- "name": "BlgTags",
- "summary": null
- },
+ "databaseTables": [],
+ "replacedDbContexts": [],
+ "modelBuilderExtensionMethods": [
{
- "entityFullName": "Volo.Blogging.Users.BlogUser",
- "contentType": "databaseTable",
- "name": "BlgUsers",
- "summary": null
+ "returnType": "Void",
+ "namespace": "Volo.Blogging.EntityFrameworkCore",
+ "name": "ConfigureBlogging",
+ "summary": null,
+ "isAsync": false,
+ "isPublic": true,
+ "isPrivate": false,
+ "isStatic": true,
+ "parameters": [
+ {
+ "type": "ModelBuilder",
+ "name": "builder",
+ "isOptional": false
+ }
+ ]
}
],
- "replacedDbContexts": [],
"implementingInterfaces": [
{
"name": "IInfrastructure",
@@ -161,6 +143,12 @@
"declaringAssemblyName": "Volo.Abp.EntityFrameworkCore",
"fullName": "Volo.Abp.EntityFrameworkCore.IEfCoreDbContext"
},
+ {
+ "name": "IAbpEfCoreDbFunctionContext",
+ "namespace": "Volo.Abp.EntityFrameworkCore.GlobalFilters",
+ "declaringAssemblyName": "Volo.Abp.EntityFrameworkCore",
+ "fullName": "Volo.Abp.EntityFrameworkCore.GlobalFilters.IAbpEfCoreDbFunctionContext"
+ },
{
"name": "ITransientDependency",
"namespace": "Volo.Abp.DependencyInjection",
diff --git a/modules/blogging/src/Volo.Blogging.HttpApi.Client/Volo.Blogging.HttpApi.Client.abppkg.analyze.json b/modules/blogging/src/Volo.Blogging.HttpApi.Client/Volo.Blogging.HttpApi.Client.abppkg.analyze.json
index fab3946f08..4fde803ba1 100644
--- a/modules/blogging/src/Volo.Blogging.HttpApi.Client/Volo.Blogging.HttpApi.Client.abppkg.analyze.json
+++ b/modules/blogging/src/Volo.Blogging.HttpApi.Client/Volo.Blogging.HttpApi.Client.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.Blogging.HttpApi.Client",
- "hash": "3ca2666acad094da483790ffe3497ae0",
+ "hash": "",
"contents": [
{
"namespace": "Volo.Blogging",
diff --git a/modules/blogging/src/Volo.Blogging.HttpApi/Volo.Blogging.HttpApi.abppkg.analyze.json b/modules/blogging/src/Volo.Blogging.HttpApi/Volo.Blogging.HttpApi.abppkg.analyze.json
index e9fa020357..7b15b827b0 100644
--- a/modules/blogging/src/Volo.Blogging.HttpApi/Volo.Blogging.HttpApi.abppkg.analyze.json
+++ b/modules/blogging/src/Volo.Blogging.HttpApi/Volo.Blogging.HttpApi.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.Blogging.HttpApi",
- "hash": "3e6f3a5c72fe4dd10117f387c5a28255",
+ "hash": "",
"contents": [
{
"namespace": "Volo.Blogging",
@@ -63,6 +63,300 @@
"contentType": "abpModule",
"name": "BloggingHttpApiModule",
"summary": null
+ },
+ {
+ "apis": [
+ {
+ "path": "api/blogging/files/{name}",
+ "method": "GET",
+ "groupName": "BlogFiles",
+ "responseType": "Volo.Blogging.Files.RawFileDto",
+ "responseTypeAsJson": "",
+ "parameterDescriptions": [
+ {
+ "name": "name",
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "path": "api/blogging/files/www/{name}",
+ "method": "GET",
+ "groupName": "BlogFiles",
+ "responseType": "Volo.Abp.Content.IRemoteStreamContent",
+ "responseTypeAsJson": "",
+ "parameterDescriptions": [
+ {
+ "name": "name",
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "path": "api/blogging/files/images/upload",
+ "method": "POST",
+ "groupName": "BlogFiles",
+ "responseType": "Volo.Blogging.Files.FileUploadOutputDto",
+ "responseTypeAsJson": "{\r\n \"name\": \"string\",\r\n \"webUrl\": \"string\"\r\n}",
+ "parameterDescriptions": [
+ {
+ "name": "File",
+ "type": "IRemoteStreamContent"
+ },
+ {
+ "name": "Name",
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "path": "api/blogging/blogs",
+ "method": "GET",
+ "groupName": "Blogs",
+ "responseType": "Volo.Abp.Application.Dtos.ListResultDto`1[Volo.Blogging.Blogs.Dtos.BlogDto]",
+ "responseTypeAsJson": "{\r\n \"items\": [\r\n {\r\n \"name\": \"string\",\r\n \"shortName\": \"string\",\r\n \"description\": \"string\",\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n ]\r\n}",
+ "parameterDescriptions": []
+ },
+ {
+ "path": "api/blogging/blogs/by-shortname/{shortName}",
+ "method": "GET",
+ "groupName": "Blogs",
+ "responseType": "Volo.Blogging.Blogs.Dtos.BlogDto",
+ "responseTypeAsJson": "{\r\n \"name\": \"string\",\r\n \"shortName\": \"string\",\r\n \"description\": \"string\",\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n}",
+ "parameterDescriptions": [
+ {
+ "name": "shortName",
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "path": "api/blogging/blogs/{id}",
+ "method": "GET",
+ "groupName": "Blogs",
+ "responseType": "Volo.Blogging.Blogs.Dtos.BlogDto",
+ "responseTypeAsJson": "{\r\n \"name\": \"string\",\r\n \"shortName\": \"string\",\r\n \"description\": \"string\",\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n}",
+ "parameterDescriptions": [
+ {
+ "name": "id",
+ "type": "Guid"
+ }
+ ]
+ },
+ {
+ "path": "api/blogging/comments/hierarchical/{postId}",
+ "method": "GET",
+ "groupName": "Comments",
+ "responseType": "System.Collections.Generic.List`1[Volo.Blogging.Comments.Dtos.CommentWithRepliesDto]",
+ "responseTypeAsJson": "[\r\n {\r\n \"comment\": {\r\n \"repliedCommentId\": null,\r\n \"text\": \"string\",\r\n \"writer\": {\r\n \"tenantId\": null,\r\n \"name\": \"string\",\r\n \"surname\": \"string\",\r\n \"userName\": \"string\",\r\n \"email\": \"string\",\r\n \"emailConfirmed\": false,\r\n \"phoneNumber\": \"string\",\r\n \"phoneNumberConfirmed\": false,\r\n \"webSite\": \"string\",\r\n \"twitter\": \"string\",\r\n \"github\": \"string\",\r\n \"linkedin\": \"string\",\r\n \"company\": \"string\",\r\n \"jobTitle\": \"string\",\r\n \"biography\": \"string\",\r\n \"extraProperties\": {\r\n \"string\": \"object\"\r\n },\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n },\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n },\r\n \"replies\": [\r\n {\r\n \"repliedCommentId\": null,\r\n \"text\": \"string\",\r\n \"writer\": {\r\n \"tenantId\": null,\r\n \"name\": \"string\",\r\n \"surname\": \"string\",\r\n \"userName\": \"string\",\r\n \"email\": \"string\",\r\n \"emailConfirmed\": false,\r\n \"phoneNumber\": \"string\",\r\n \"phoneNumberConfirmed\": false,\r\n \"webSite\": \"string\",\r\n \"twitter\": \"string\",\r\n \"github\": \"string\",\r\n \"linkedin\": \"string\",\r\n \"company\": \"string\",\r\n \"jobTitle\": \"string\",\r\n \"biography\": \"string\",\r\n \"extraProperties\": {\r\n \"string\": \"object\"\r\n },\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n },\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n ]\r\n }\r\n]",
+ "parameterDescriptions": [
+ {
+ "name": "postId",
+ "type": "Guid"
+ }
+ ]
+ },
+ {
+ "path": "api/blogging/comments",
+ "method": "POST",
+ "groupName": "Comments",
+ "responseType": "Volo.Blogging.Comments.Dtos.CommentWithDetailsDto",
+ "responseTypeAsJson": "{\r\n \"repliedCommentId\": null,\r\n \"text\": \"string\",\r\n \"writer\": {\r\n \"tenantId\": null,\r\n \"name\": \"string\",\r\n \"surname\": \"string\",\r\n \"userName\": \"string\",\r\n \"email\": \"string\",\r\n \"emailConfirmed\": false,\r\n \"phoneNumber\": \"string\",\r\n \"phoneNumberConfirmed\": false,\r\n \"webSite\": \"string\",\r\n \"twitter\": \"string\",\r\n \"github\": \"string\",\r\n \"linkedin\": \"string\",\r\n \"company\": \"string\",\r\n \"jobTitle\": \"string\",\r\n \"biography\": \"string\",\r\n \"extraProperties\": {\r\n \"string\": \"object\"\r\n },\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n },\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n}",
+ "parameterDescriptions": [
+ {
+ "name": "input",
+ "type": "CreateCommentDto"
+ }
+ ]
+ },
+ {
+ "path": "api/blogging/comments/{id}",
+ "method": "PUT",
+ "groupName": "Comments",
+ "responseType": "Volo.Blogging.Comments.Dtos.CommentWithDetailsDto",
+ "responseTypeAsJson": "{\r\n \"repliedCommentId\": null,\r\n \"text\": \"string\",\r\n \"writer\": {\r\n \"tenantId\": null,\r\n \"name\": \"string\",\r\n \"surname\": \"string\",\r\n \"userName\": \"string\",\r\n \"email\": \"string\",\r\n \"emailConfirmed\": false,\r\n \"phoneNumber\": \"string\",\r\n \"phoneNumberConfirmed\": false,\r\n \"webSite\": \"string\",\r\n \"twitter\": \"string\",\r\n \"github\": \"string\",\r\n \"linkedin\": \"string\",\r\n \"company\": \"string\",\r\n \"jobTitle\": \"string\",\r\n \"biography\": \"string\",\r\n \"extraProperties\": {\r\n \"string\": \"object\"\r\n },\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n },\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n}",
+ "parameterDescriptions": [
+ {
+ "name": "id",
+ "type": "Guid"
+ },
+ {
+ "name": "input",
+ "type": "UpdateCommentDto"
+ }
+ ]
+ },
+ {
+ "path": "api/blogging/comments/{id}",
+ "method": "DELETE",
+ "groupName": "Comments",
+ "responseType": "System.Void",
+ "responseTypeAsJson": "",
+ "parameterDescriptions": [
+ {
+ "name": "id",
+ "type": "Guid"
+ }
+ ]
+ },
+ {
+ "path": "api/blogging/posts/{blogId}/all",
+ "method": "GET",
+ "groupName": "Posts",
+ "responseType": "Volo.Abp.Application.Dtos.ListResultDto`1[Volo.Blogging.Posts.PostWithDetailsDto]",
+ "responseTypeAsJson": "{\r\n \"items\": [\r\n {\r\n \"blogId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"title\": \"string\",\r\n \"coverImage\": \"string\",\r\n \"url\": \"string\",\r\n \"content\": \"string\",\r\n \"description\": \"string\",\r\n \"readCount\": 0,\r\n \"commentCount\": 0,\r\n \"writer\": {\r\n \"tenantId\": null,\r\n \"name\": \"string\",\r\n \"surname\": \"string\",\r\n \"userName\": \"string\",\r\n \"email\": \"string\",\r\n \"emailConfirmed\": false,\r\n \"phoneNumber\": \"string\",\r\n \"phoneNumberConfirmed\": false,\r\n \"webSite\": \"string\",\r\n \"twitter\": \"string\",\r\n \"github\": \"string\",\r\n \"linkedin\": \"string\",\r\n \"company\": \"string\",\r\n \"jobTitle\": \"string\",\r\n \"biography\": \"string\",\r\n \"extraProperties\": {\r\n \"string\": \"object\"\r\n },\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n },\r\n \"tags\": [\r\n {\r\n \"name\": \"string\",\r\n \"description\": \"string\",\r\n \"usageCount\": 0,\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n ],\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n ]\r\n}",
+ "parameterDescriptions": [
+ {
+ "name": "blogId",
+ "type": "Guid"
+ },
+ {
+ "name": "tagName",
+ "type": "String"
+ }
+ ]
+ },
+ {
+ "path": "api/blogging/posts/{blogId}/all/by-time",
+ "method": "GET",
+ "groupName": "Posts",
+ "responseType": "Volo.Abp.Application.Dtos.ListResultDto`1[Volo.Blogging.Posts.PostWithDetailsDto]",
+ "responseTypeAsJson": "{\r\n \"items\": [\r\n {\r\n \"blogId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"title\": \"string\",\r\n \"coverImage\": \"string\",\r\n \"url\": \"string\",\r\n \"content\": \"string\",\r\n \"description\": \"string\",\r\n \"readCount\": 0,\r\n \"commentCount\": 0,\r\n \"writer\": {\r\n \"tenantId\": null,\r\n \"name\": \"string\",\r\n \"surname\": \"string\",\r\n \"userName\": \"string\",\r\n \"email\": \"string\",\r\n \"emailConfirmed\": false,\r\n \"phoneNumber\": \"string\",\r\n \"phoneNumberConfirmed\": false,\r\n \"webSite\": \"string\",\r\n \"twitter\": \"string\",\r\n \"github\": \"string\",\r\n \"linkedin\": \"string\",\r\n \"company\": \"string\",\r\n \"jobTitle\": \"string\",\r\n \"biography\": \"string\",\r\n \"extraProperties\": {\r\n \"string\": \"object\"\r\n },\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n },\r\n \"tags\": [\r\n {\r\n \"name\": \"string\",\r\n \"description\": \"string\",\r\n \"usageCount\": 0,\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n ],\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n ]\r\n}",
+ "parameterDescriptions": [
+ {
+ "name": "blogId",
+ "type": "Guid"
+ }
+ ]
+ },
+ {
+ "path": "api/blogging/posts/read",
+ "method": "GET",
+ "groupName": "Posts",
+ "responseType": "Volo.Blogging.Posts.PostWithDetailsDto",
+ "responseTypeAsJson": "{\r\n \"blogId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"title\": \"string\",\r\n \"coverImage\": \"string\",\r\n \"url\": \"string\",\r\n \"content\": \"string\",\r\n \"description\": \"string\",\r\n \"readCount\": 0,\r\n \"commentCount\": 0,\r\n \"writer\": {\r\n \"tenantId\": null,\r\n \"name\": \"string\",\r\n \"surname\": \"string\",\r\n \"userName\": \"string\",\r\n \"email\": \"string\",\r\n \"emailConfirmed\": false,\r\n \"phoneNumber\": \"string\",\r\n \"phoneNumberConfirmed\": false,\r\n \"webSite\": \"string\",\r\n \"twitter\": \"string\",\r\n \"github\": \"string\",\r\n \"linkedin\": \"string\",\r\n \"company\": \"string\",\r\n \"jobTitle\": \"string\",\r\n \"biography\": \"string\",\r\n \"extraProperties\": {\r\n \"string\": \"object\"\r\n },\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n },\r\n \"tags\": [\r\n {\r\n \"name\": \"string\",\r\n \"description\": \"string\",\r\n \"usageCount\": 0,\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n ],\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n}",
+ "parameterDescriptions": [
+ {
+ "name": "Url",
+ "type": "String"
+ },
+ {
+ "name": "BlogId",
+ "type": "Guid"
+ }
+ ]
+ },
+ {
+ "path": "api/blogging/posts/{id}",
+ "method": "GET",
+ "groupName": "Posts",
+ "responseType": "Volo.Blogging.Posts.PostWithDetailsDto",
+ "responseTypeAsJson": "{\r\n \"blogId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"title\": \"string\",\r\n \"coverImage\": \"string\",\r\n \"url\": \"string\",\r\n \"content\": \"string\",\r\n \"description\": \"string\",\r\n \"readCount\": 0,\r\n \"commentCount\": 0,\r\n \"writer\": {\r\n \"tenantId\": null,\r\n \"name\": \"string\",\r\n \"surname\": \"string\",\r\n \"userName\": \"string\",\r\n \"email\": \"string\",\r\n \"emailConfirmed\": false,\r\n \"phoneNumber\": \"string\",\r\n \"phoneNumberConfirmed\": false,\r\n \"webSite\": \"string\",\r\n \"twitter\": \"string\",\r\n \"github\": \"string\",\r\n \"linkedin\": \"string\",\r\n \"company\": \"string\",\r\n \"jobTitle\": \"string\",\r\n \"biography\": \"string\",\r\n \"extraProperties\": {\r\n \"string\": \"object\"\r\n },\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n },\r\n \"tags\": [\r\n {\r\n \"name\": \"string\",\r\n \"description\": \"string\",\r\n \"usageCount\": 0,\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n ],\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n}",
+ "parameterDescriptions": [
+ {
+ "name": "id",
+ "type": "Guid"
+ }
+ ]
+ },
+ {
+ "path": "api/blogging/posts",
+ "method": "POST",
+ "groupName": "Posts",
+ "responseType": "Volo.Blogging.Posts.PostWithDetailsDto",
+ "responseTypeAsJson": "{\r\n \"blogId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"title\": \"string\",\r\n \"coverImage\": \"string\",\r\n \"url\": \"string\",\r\n \"content\": \"string\",\r\n \"description\": \"string\",\r\n \"readCount\": 0,\r\n \"commentCount\": 0,\r\n \"writer\": {\r\n \"tenantId\": null,\r\n \"name\": \"string\",\r\n \"surname\": \"string\",\r\n \"userName\": \"string\",\r\n \"email\": \"string\",\r\n \"emailConfirmed\": false,\r\n \"phoneNumber\": \"string\",\r\n \"phoneNumberConfirmed\": false,\r\n \"webSite\": \"string\",\r\n \"twitter\": \"string\",\r\n \"github\": \"string\",\r\n \"linkedin\": \"string\",\r\n \"company\": \"string\",\r\n \"jobTitle\": \"string\",\r\n \"biography\": \"string\",\r\n \"extraProperties\": {\r\n \"string\": \"object\"\r\n },\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n },\r\n \"tags\": [\r\n {\r\n \"name\": \"string\",\r\n \"description\": \"string\",\r\n \"usageCount\": 0,\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n ],\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n}",
+ "parameterDescriptions": [
+ {
+ "name": "input",
+ "type": "CreatePostDto"
+ }
+ ]
+ },
+ {
+ "path": "api/blogging/posts/{id}",
+ "method": "PUT",
+ "groupName": "Posts",
+ "responseType": "Volo.Blogging.Posts.PostWithDetailsDto",
+ "responseTypeAsJson": "{\r\n \"blogId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"title\": \"string\",\r\n \"coverImage\": \"string\",\r\n \"url\": \"string\",\r\n \"content\": \"string\",\r\n \"description\": \"string\",\r\n \"readCount\": 0,\r\n \"commentCount\": 0,\r\n \"writer\": {\r\n \"tenantId\": null,\r\n \"name\": \"string\",\r\n \"surname\": \"string\",\r\n \"userName\": \"string\",\r\n \"email\": \"string\",\r\n \"emailConfirmed\": false,\r\n \"phoneNumber\": \"string\",\r\n \"phoneNumberConfirmed\": false,\r\n \"webSite\": \"string\",\r\n \"twitter\": \"string\",\r\n \"github\": \"string\",\r\n \"linkedin\": \"string\",\r\n \"company\": \"string\",\r\n \"jobTitle\": \"string\",\r\n \"biography\": \"string\",\r\n \"extraProperties\": {\r\n \"string\": \"object\"\r\n },\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n },\r\n \"tags\": [\r\n {\r\n \"name\": \"string\",\r\n \"description\": \"string\",\r\n \"usageCount\": 0,\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n ],\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n}",
+ "parameterDescriptions": [
+ {
+ "name": "id",
+ "type": "Guid"
+ },
+ {
+ "name": "input",
+ "type": "UpdatePostDto"
+ }
+ ]
+ },
+ {
+ "path": "api/blogging/posts/user/{userId}",
+ "method": "GET",
+ "groupName": "Posts",
+ "responseType": "System.Collections.Generic.List`1[Volo.Blogging.Posts.PostWithDetailsDto]",
+ "responseTypeAsJson": "[\r\n {\r\n \"blogId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"title\": \"string\",\r\n \"coverImage\": \"string\",\r\n \"url\": \"string\",\r\n \"content\": \"string\",\r\n \"description\": \"string\",\r\n \"readCount\": 0,\r\n \"commentCount\": 0,\r\n \"writer\": {\r\n \"tenantId\": null,\r\n \"name\": \"string\",\r\n \"surname\": \"string\",\r\n \"userName\": \"string\",\r\n \"email\": \"string\",\r\n \"emailConfirmed\": false,\r\n \"phoneNumber\": \"string\",\r\n \"phoneNumberConfirmed\": false,\r\n \"webSite\": \"string\",\r\n \"twitter\": \"string\",\r\n \"github\": \"string\",\r\n \"linkedin\": \"string\",\r\n \"company\": \"string\",\r\n \"jobTitle\": \"string\",\r\n \"biography\": \"string\",\r\n \"extraProperties\": {\r\n \"string\": \"object\"\r\n },\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n },\r\n \"tags\": [\r\n {\r\n \"name\": \"string\",\r\n \"description\": \"string\",\r\n \"usageCount\": 0,\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n ],\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n]",
+ "parameterDescriptions": [
+ {
+ "name": "userId",
+ "type": "Guid"
+ }
+ ]
+ },
+ {
+ "path": "api/blogging/posts/{blogId}/latest/{count}",
+ "method": "GET",
+ "groupName": "Posts",
+ "responseType": "System.Collections.Generic.List`1[Volo.Blogging.Posts.PostWithDetailsDto]",
+ "responseTypeAsJson": "[\r\n {\r\n \"blogId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"title\": \"string\",\r\n \"coverImage\": \"string\",\r\n \"url\": \"string\",\r\n \"content\": \"string\",\r\n \"description\": \"string\",\r\n \"readCount\": 0,\r\n \"commentCount\": 0,\r\n \"writer\": {\r\n \"tenantId\": null,\r\n \"name\": \"string\",\r\n \"surname\": \"string\",\r\n \"userName\": \"string\",\r\n \"email\": \"string\",\r\n \"emailConfirmed\": false,\r\n \"phoneNumber\": \"string\",\r\n \"phoneNumberConfirmed\": false,\r\n \"webSite\": \"string\",\r\n \"twitter\": \"string\",\r\n \"github\": \"string\",\r\n \"linkedin\": \"string\",\r\n \"company\": \"string\",\r\n \"jobTitle\": \"string\",\r\n \"biography\": \"string\",\r\n \"extraProperties\": {\r\n \"string\": \"object\"\r\n },\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n },\r\n \"tags\": [\r\n {\r\n \"name\": \"string\",\r\n \"description\": \"string\",\r\n \"usageCount\": 0,\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n ],\r\n \"concurrencyStamp\": \"string\",\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n]",
+ "parameterDescriptions": [
+ {
+ "name": "blogId",
+ "type": "Guid"
+ },
+ {
+ "name": "count",
+ "type": "Int32"
+ }
+ ]
+ },
+ {
+ "path": "api/blogging/posts/{id}",
+ "method": "DELETE",
+ "groupName": "Posts",
+ "responseType": "System.Void",
+ "responseTypeAsJson": "",
+ "parameterDescriptions": [
+ {
+ "name": "id",
+ "type": "Guid"
+ }
+ ]
+ },
+ {
+ "path": "api/blogging/tags/popular/{blogId}",
+ "method": "GET",
+ "groupName": "Tags",
+ "responseType": "System.Collections.Generic.List`1[Volo.Blogging.Tagging.Dtos.TagDto]",
+ "responseTypeAsJson": "[\r\n {\r\n \"name\": \"string\",\r\n \"description\": \"string\",\r\n \"usageCount\": 0,\r\n \"isDeleted\": false,\r\n \"deleterId\": null,\r\n \"deletionTime\": null,\r\n \"lastModificationTime\": null,\r\n \"lastModifierId\": null,\r\n \"creationTime\": \"0001-01-01T00:00:00\",\r\n \"creatorId\": null,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\"\r\n }\r\n]",
+ "parameterDescriptions": [
+ {
+ "name": "blogId",
+ "type": "Guid"
+ },
+ {
+ "name": "ResultCount",
+ "type": "Int32"
+ },
+ {
+ "name": "MinimumPostCount",
+ "type": "Nullable"
+ }
+ ]
+ }
+ ],
+ "contentType": "httpApi",
+ "name": "Defined Http Apis",
+ "summary": null
}
]
}
\ No newline at end of file
diff --git a/modules/blogging/src/Volo.Blogging.MongoDB/Volo.Blogging.MongoDB.abppkg.analyze.json b/modules/blogging/src/Volo.Blogging.MongoDB/Volo.Blogging.MongoDB.abppkg.analyze.json
index f72236e318..3c45d3118e 100644
--- a/modules/blogging/src/Volo.Blogging.MongoDB/Volo.Blogging.MongoDB.abppkg.analyze.json
+++ b/modules/blogging/src/Volo.Blogging.MongoDB/Volo.Blogging.MongoDB.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.Blogging.MongoDB",
- "hash": "4487b4df01fcd98b0ce2e7d2d11c9ba5",
+ "hash": "",
"contents": [
{
"namespace": "Volo.Blogging.MongoDB",
@@ -74,33 +74,33 @@
"connectionStringName": "Blogging",
"databaseCollections": [
{
- "entityFullName": "Volo.Blogging.Blogs.Blog",
+ "entityFullName": "Volo.Blogging.Users.BlogUser",
"contentType": "databaseCollection",
- "name": "BlgBlogs",
+ "name": "Users",
"summary": null
},
{
- "entityFullName": "Volo.Blogging.Comments.Comment",
+ "entityFullName": "Volo.Blogging.Blogs.Blog",
"contentType": "databaseCollection",
- "name": "BlgComments",
+ "name": "Blogs",
"summary": null
},
{
- "entityFullName": "Volo.Blogging.Users.BlogUser",
+ "entityFullName": "Volo.Blogging.Posts.Post",
"contentType": "databaseCollection",
- "name": "BlgUsers",
+ "name": "Posts",
"summary": null
},
{
"entityFullName": "Volo.Blogging.Tagging.Tag",
"contentType": "databaseCollection",
- "name": "BlgTags",
+ "name": "Tags",
"summary": null
},
{
- "entityFullName": "Volo.Blogging.Posts.Post",
+ "entityFullName": "Volo.Blogging.Comments.Comment",
"contentType": "databaseCollection",
- "name": "BlgPosts",
+ "name": "Comments",
"summary": null
}
],
diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml.cs b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml.cs
index de1f9dfdb0..f13936a5af 100644
--- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml.cs
+++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml.cs
@@ -98,7 +98,9 @@ namespace Volo.Blogging.Pages.Blogs.Posts
await GetData();
- return Page();
+ // PRG pattern
+ // Redirect to the same page to prevent form resubmission
+ return RedirectToPage();
}
private async Task GetData()
diff --git a/modules/blogging/src/Volo.Blogging.Web/Volo.Blogging.Web.abppkg.analyze.json b/modules/blogging/src/Volo.Blogging.Web/Volo.Blogging.Web.abppkg.analyze.json
index 27a396bd9e..895ffb1675 100644
--- a/modules/blogging/src/Volo.Blogging.Web/Volo.Blogging.Web.abppkg.analyze.json
+++ b/modules/blogging/src/Volo.Blogging.Web/Volo.Blogging.Web.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.Blogging.Web",
- "hash": "d4c82263439a4a663a6b98ee502d02f4",
+ "hash": "",
"contents": [
{
"namespace": "Volo.Blogging",
@@ -73,6 +73,42 @@
"contentType": "abpModule",
"name": "BloggingWebModule",
"summary": null
+ },
+ {
+ "namespace": "Volo.Blogging.Pages.Blogs",
+ "contentType": "webPage",
+ "name": "IndexModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.Blogging.Pages.Blogs.Posts",
+ "contentType": "webPage",
+ "name": "DetailModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.Blogging.Pages.Blogs.Posts",
+ "contentType": "webPage",
+ "name": "EditModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.Blogging.Pages.Blogs.Posts",
+ "contentType": "webPage",
+ "name": "IndexModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.Blogging.Pages.Blogs.Posts",
+ "contentType": "webPage",
+ "name": "NewModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.Blogging.Pages.Blogs.Members",
+ "contentType": "webPage",
+ "name": "IndexModel",
+ "summary": null
}
]
}
\ No newline at end of file
diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json
index 73b6824832..f218cbad11 100644
--- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json
+++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json
@@ -3,6 +3,6 @@
"name": "client-simulation-web",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0-rc.1"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0"
}
}
diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock
index f8b5af47ca..d19b65bc24 100644
--- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock
+++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock
@@ -2,194 +2,194 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.basic@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-8.3.0-rc.1.tgz#7254b66019b99ac8a29385c1bb2c9c658a167bc7"
- integrity sha512-uMgO1VQgDOW9tMq9gl6idsBZZcL/voeMp0wkBTRORQHg0E+SyA8z0yQrg5S8hU/7zRwoZPm3K9R/Peu71jNTgQ==
- dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0-rc.1.tgz#cec5ca6c5a5f61a361425b9d55711beb0db4eb81"
- integrity sha512-qLAzDwiQvRB8xDs6bkeZ4YLMUuTb6Dz/GmWT61dSMUAhRCTPqPi6aWnt9fiM99HbkP7APLPb7d+o5ho6FoktNQ==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~8.3.0-rc.1"
- "@abp/bootstrap" "~8.3.0-rc.1"
- "@abp/bootstrap-datepicker" "~8.3.0-rc.1"
- "@abp/bootstrap-daterangepicker" "~8.3.0-rc.1"
- "@abp/datatables.net-bs5" "~8.3.0-rc.1"
- "@abp/font-awesome" "~8.3.0-rc.1"
- "@abp/jquery-form" "~8.3.0-rc.1"
- "@abp/jquery-validation-unobtrusive" "~8.3.0-rc.1"
- "@abp/lodash" "~8.3.0-rc.1"
- "@abp/luxon" "~8.3.0-rc.1"
- "@abp/malihu-custom-scrollbar-plugin" "~8.3.0-rc.1"
- "@abp/moment" "~8.3.0-rc.1"
- "@abp/select2" "~8.3.0-rc.1"
- "@abp/sweetalert2" "~8.3.0-rc.1"
- "@abp/timeago" "~8.3.0-rc.1"
- "@abp/toastr" "~8.3.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0-rc.1.tgz#7329e4878e64277dfed88eef5e9d1715d1af925f"
- integrity sha512-NPWrtJ+Il+SI0oPQ5gc1Lc9vfPZvHbe0d/5y5qGIdwKY1F5txIyRGesc0najOLIUe7Z66AInyfNuNeoaFNR0fg==
+"@abp/aspnetcore.mvc.ui.theme.basic@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-8.3.0.tgz#a2d17eb5da2c3abfad4bcc842cfcda0e58a130a4"
+ integrity sha512-T2dg7WlvNSrwTCfy5wk4gqiJ/15kIjMGM4wLXIJcMYn60yGY/YeX6Q4A3R/qJzfl4JdgW5rt3GpdKv86y/ADXg==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0"
+
+"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0.tgz#5d6bb5181a62770e9cb967980b77e75c115c5ed7"
+ integrity sha512-o/0eh8jLS+YJiseTKzzioUz0vNnMFzyoz+mkyA4PlO1gqw2JFhzPhTBZ3cuyV9QlxUfEA8dWAkqAUX6vqiHwkw==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~8.3.0"
+ "@abp/bootstrap" "~8.3.0"
+ "@abp/bootstrap-datepicker" "~8.3.0"
+ "@abp/bootstrap-daterangepicker" "~8.3.0"
+ "@abp/datatables.net-bs5" "~8.3.0"
+ "@abp/font-awesome" "~8.3.0"
+ "@abp/jquery-form" "~8.3.0"
+ "@abp/jquery-validation-unobtrusive" "~8.3.0"
+ "@abp/lodash" "~8.3.0"
+ "@abp/luxon" "~8.3.0"
+ "@abp/malihu-custom-scrollbar-plugin" "~8.3.0"
+ "@abp/moment" "~8.3.0"
+ "@abp/select2" "~8.3.0"
+ "@abp/sweetalert2" "~8.3.0"
+ "@abp/timeago" "~8.3.0"
+ "@abp/toastr" "~8.3.0"
+
+"@abp/aspnetcore.mvc.ui@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0.tgz#d7ba0539bfcc6661a347dea7f952489010b3e816"
+ integrity sha512-OxgZhLKiXGFYYpNJ5O/IbhinsniiBPv9586e+1Soar0GckCMIIegJxnJb1Bo1O75blrcK2cIU6LqjRT1FXt2Lw==
dependencies:
ansi-colors "^4.1.3"
-"@abp/bootstrap-datepicker@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0-rc.1.tgz#d3bcb5f0063df631ad45c7f822195fc4e5c5b4e2"
- integrity sha512-oqbwh9dz8XNfh+eZou8GvcEUYA1J0qr3ABA1r72DJZ/nzfLQX7pUO8NkkaDLpVwrly64rfOlxV4LT7g5muoAsw==
+"@abp/bootstrap-datepicker@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0.tgz#8c1bf9efec37b671d8f28b8b1e89c1ac66684267"
+ integrity sha512-KCwMtm7x+cnKPeNMzhjDJUce0stwu4e57ibmvA6sMf1tmj+yB256O4E2hIDDohiT3vP/zV8HVHX6uATlcmGC9w==
dependencies:
bootstrap-datepicker "^1.10.0"
-"@abp/bootstrap-daterangepicker@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0-rc.1.tgz#33958a1806a070db4fb01eb40a0897bfd16cf1f5"
- integrity sha512-egtnxhRMCu56RV2bIRBLLTly2Y4W/2jwl9el+9Stjc8IN91j2UL5E4t5qn3zI3vXvVX4w5vP+TthQj0grFK0/Q==
+"@abp/bootstrap-daterangepicker@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0.tgz#2b8ed978333502677916f88cbb3e1d1b1c8a3a17"
+ integrity sha512-uQSfuCQogl4BujdqvtdAoSE+z32ci8FT5+i3gLfpqbgTaxvY/Kv5NxAUH5/1sjnuAE7SMWO+eVvI3V0pXgQohg==
dependencies:
bootstrap-daterangepicker "^3.1.0"
-"@abp/bootstrap@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0-rc.1.tgz#3ca994e4c003d056024dcd533221461cccd14f2a"
- integrity sha512-xrs0JOYFEPzi3V6s9d3SCj0CxY06bBmFUK5aETgKUiXBXa4vU2YoNbnrCtDUvV+mn517FRuA/j3RaFkTWYg48g==
+"@abp/bootstrap@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0.tgz#96d6ea7e6ac30f6e34e495a4224f56f7b2a1a7a3"
+ integrity sha512-5AmdTtakmWhZmHrb7ibvvf+KwF9OGadpAe7Kv9mNEE02K2qkp7Xw4r5o/bgVl7YfLC1FA6GZZXrV2s2t0gjHtg==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
bootstrap "^5.3.3"
-"@abp/core@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0-rc.1.tgz#771c7ecd27319201a8236f0bc6b5601188059325"
- integrity sha512-IB8Baa3LIv3XYja6iBw6VSnITGcRseGyY8wBNEXRiB+ni21Bv//NMyohdOot6G+HlnHlrB7kFeCX+gWu+LuYkg==
+"@abp/core@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0.tgz#3a68f5a9549efcc3e13500e301f2576751b51445"
+ integrity sha512-zrxnZi4qij/Y4AZWaXuPqs3Dd7gBtU/onX7FkYxLgQDxYBfx+84QAnPRNRFKMWaD/wKbTUB0wA66U3t2aiQX9Q==
dependencies:
- "@abp/utils" "~8.3.0-rc.1"
+ "@abp/utils" "~8.3.0"
-"@abp/datatables.net-bs5@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0-rc.1.tgz#b53dc353f485952439ea10035df0851d520efe96"
- integrity sha512-89wpkG6u1YBR98OmuEbvs4VdR5n8L4n3Z8GiHwuKr2FpEOx7cAXYKsx/8ifmICMLPiMIvFrtOEBrrv5ZKANsAA==
+"@abp/datatables.net-bs5@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0.tgz#21822ae4912a561afe9112925185aece03fcd0eb"
+ integrity sha512-GOGYSSHp3iPUDFRX2Y3C0wkiCOJDuYuK/zUSzQLNpOvBMZO+I/oWBcZM+qkVowIzsoRlAGV9+CVV2B/B05qidA==
dependencies:
- "@abp/datatables.net" "~8.3.0-rc.1"
+ "@abp/datatables.net" "~8.3.0"
datatables.net-bs5 "^2.0.8"
-"@abp/datatables.net@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0-rc.1.tgz#bb70608994c4a52bd15331f76af718353c843f94"
- integrity sha512-G42D6W0Xb8NIQxJWGpcxLOjbZ4CHtrm9oBG5+GfVmQEPGfl8r+DYdrYDAkysDg483s+48POH7NC3L1LOlxlqRg==
+"@abp/datatables.net@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0.tgz#ff697758ce9309ba8311f23aec921c4722588c8b"
+ integrity sha512-4dIdv7eN1tVouOUrlF+MIdg8zQpecyH61waqLgy1q5jMZQivrTSFZ7UWMG3WVOAYjw5zSUZHZPbzA+ttnaOPkg==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
datatables.net "^2.0.8"
-"@abp/font-awesome@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0-rc.1.tgz#ea05d7e08395b1894eefe6f912ae0534fd75e69a"
- integrity sha512-GN1xZ76RzQC3aqU2m19vYsyfESCeoSsp8AtvilmeqsjlzhuLLdQ6UWSxMqRqE22TCWRXbA/d/7IAb12TB1mawg==
+"@abp/font-awesome@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0.tgz#9e4e9adc08dfca52c0a07d1608c5e5662675a4c9"
+ integrity sha512-NRxvM/dzvQC2Cj/F5i07XB/i6IVTmXcO9sOq6TWosWib0wGaPxRbCSjy8QUAYSD1QYaVQ30XMb3XXImaMGyd8A==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
"@fortawesome/fontawesome-free" "^6.5.2"
-"@abp/jquery-form@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0-rc.1.tgz#21025048f44028a5cb1ced7414cb48af00e91bff"
- integrity sha512-mVZzEJKbhiYmXK2yZRZAJwO5e7C2N0lj8ueOYPiFG6h4UKLbKPHQdIrkapyc88VirrELe1hnhJJbQ56dsQWeyg==
+"@abp/jquery-form@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0.tgz#fa2ad2fedbe3d3528ee94cbbd4f94d48f0cb5e4d"
+ integrity sha512-olP9FmpNVTbOIewsVua0moHVYXw4Sl3chFbvTDLG6vRBohLSjllUXfgY3UEIVWR1PCqnAg+iEJZl9NHB9iOLBg==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0-rc.1.tgz#63042715391ca63f273874ff66fca4b20330d31b"
- integrity sha512-EKQf733+HS9bIVQhMgAHYZfCY663GqNv8KUcCIuQOHPt5DWU49ygYhawkcYIzUKd2Gy9+ZtyWLkWmoBxTnwlmw==
+"@abp/jquery-validation-unobtrusive@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0.tgz#0992cdd33170df83c79aa3371038c0b30e451521"
+ integrity sha512-9hidjq8x8sTnP5O3K2b2x9NpxvPd9WB03ENR6OfvM89kfSmQapSvBZTlCu80YK9NaQJ6MLQRLYOCuc3GHcj3EQ==
dependencies:
- "@abp/jquery-validation" "~8.3.0-rc.1"
+ "@abp/jquery-validation" "~8.3.0"
jquery-validation-unobtrusive "^4.0.0"
-"@abp/jquery-validation@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0-rc.1.tgz#8c82189ba7c3614f7306c2bf958b3717a6a4e702"
- integrity sha512-Fr8AI//7iV743S6bw4ixE5qOu+af3HfZSivQJnYVVTbR/75gPqI/xRe6u/k82TJIBM7IaspQ4QdruMuvnJyBpQ==
+"@abp/jquery-validation@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0.tgz#bd6a72c6d86f116abe3b5d2adf3752bdbbcca887"
+ integrity sha512-6l5BZSa3N0Fou6Se7MfUSnI2dD4SYhZ2V988bgPJQ6p37XBOZ2OAj7LEIf5FSjtUzXjao/6/vqjkPNYreNikig==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
jquery-validation "^1.20.1"
-"@abp/jquery@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0-rc.1.tgz#a181c6749d58690b3265705959d8c818296896f3"
- integrity sha512-fXs35cDLAw66irfHsFIWD41RKzpLABkULLoMwxfB76nOVPdV7qlWrXoI2O/du3xhCqBqHR4fS8xjwE6kFvkdLQ==
+"@abp/jquery@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0.tgz#9be5ef2f769680226e6a1a981026590caf3b57ef"
+ integrity sha512-GsFY+n3EtS6B0pAoKd+xMnt5Dzi5bHvIbhLgDgfQfOBzAy3twGRWsPQ3nkuXXm8TppwujMNowU1oiLKPPm0AOA==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
jquery "~3.7.1"
-"@abp/lodash@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0-rc.1.tgz#32f8805031f73b9d5bdc338afe49739c4ebc3ce9"
- integrity sha512-UBGlG5+tFpyAPMuwpkY7K/g21c+d3Aq3HbFmcIilUEIsJ+yJqj95xhRh6t/LSwJCo5ntdSCgVC85q0kD0fQlQA==
+"@abp/lodash@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0.tgz#f5a0a496c999886f2d6999067bfac2e1f0c3969c"
+ integrity sha512-BiAsONbKR/RKG3WjRaMWVmhNe1ELEsykVq+ogG1Rhk3kwPbvze3TS8k2p0Lu/RC41/BmDUmJ5abg1pUMwkRT8w==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
lodash "^4.17.21"
-"@abp/luxon@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0-rc.1.tgz#df19773212502336c2caf6a8806b7647748f8f81"
- integrity sha512-1oPx0tGyFi58T0yv/pdqJpcIRWU6ej5Sv28fRgz3J6tHam3hVPtKJPK9Ajvn6+MNVDLuMUczgVtfWEOvO2Kqrg==
+"@abp/luxon@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0.tgz#7dd3f756be1605506e26f7ac76b80cc082a12d07"
+ integrity sha512-8gdI5BtXkVp0sFg89QVDe8AvgQ7Qfq4JCqz2PMrKPSATR3H8GD6BCaEYpRp6CNTCjVrQjGZdzKgUyea1D3dHbw==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
luxon "^3.4.4"
-"@abp/malihu-custom-scrollbar-plugin@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0-rc.1.tgz#b57086d708082ce45e1917aeca8c92029ebd805d"
- integrity sha512-4sa5e07EPW9IM7eQbvKtk78gd/bESYhTsl+BeWSKeqjj5wwwPYf4GIEvfJM7JVnhYwh1IPYDEkTv9QNYLczXKQ==
+"@abp/malihu-custom-scrollbar-plugin@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0.tgz#c88c132c3402bbb02054ca7d446051950f87a817"
+ integrity sha512-nd/mb6LJa6fMxal8PGcIjIRIoZ/UHCd01WDC9YI2H4wGCGx0CA0JyHso5oc/OEzJhUL8ujO/vYm9uLb7YahPtA==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/moment@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0-rc.1.tgz#0ba9d64ca6d7b454af7aaa63e54be267f333e1fe"
- integrity sha512-YbVEDg3m+D5KMcTCBEnor/tFgmk9IeL4pF/oChYQGXLeyohY7vfmK68owAnEDN61nCRXng9xykiZu2bLq829WA==
+"@abp/moment@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0.tgz#8e4f7a523ab76ef9e4cd96a399560bad38d38d1a"
+ integrity sha512-LywSsKuQ2GN/Btmle6CcTKa811zbvUWdC+RLQA792K9HyBs6LvN0qRRluEQZgplairRgh2pDOg8tdFlUERkv2w==
dependencies:
moment "^2.30.1"
-"@abp/select2@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0-rc.1.tgz#3eb932e05987cc1e13f72decc9ae70d47801bf7d"
- integrity sha512-lZuJLiFcOEVj6cTPAA7ZfhE3v1LyivmMt8Tt7Dpvgybx2PDN1NtfLce2BCKb0MvsaTlfJMSK0ZLu3JpxCQ+Q/A==
+"@abp/select2@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0.tgz#ef4742fcd345394767f46180f61c6cabbd0b3867"
+ integrity sha512-bdLt2+ImxxpiZl4HGbYJpdDROQUT7/Z/+8A+6oJNacq3lNekdvufLYgTMxKru6zTbnd9j3HFKMOTE1eRjb9Xqg==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
select2 "^4.0.13"
-"@abp/sweetalert2@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0-rc.1.tgz#66d8b9ce287a71474ce37c217cd800e150a86138"
- integrity sha512-b6dZbc5/nYrUz5s+lAgi561XnsASa0ZJOn6f5W2Oakm9ULzqFndapKx5f+zHeJaNArpeGDh50AjQ+lcGGw83zQ==
+"@abp/sweetalert2@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0.tgz#a63020d57e44f7940817287d3d9676288bfb85aa"
+ integrity sha512-ooqPM4Z2v2scnMo5l8ycTmp6t/sW4sCsvIkJ4TyM876WLQJaZxJdOao4RQWuU+dVFr9zg8cOwqLH4q7UEiO6ww==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
sweetalert2 "^11.3.6"
-"@abp/timeago@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0-rc.1.tgz#d795b9cccb190f5d42f242727ac447fe03c30db3"
- integrity sha512-yJCA7PHmAxFxIvPq03iSx3LbIiDQls4AiVBO75103LEGokRUG9bg+iPA7GLkPpfNbnNgEJ7N7Gw6RQzMNRLCpA==
+"@abp/timeago@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0.tgz#b3b8d6927bf170f77af848bc1925e5ef6835bd55"
+ integrity sha512-Dd6xaUoF9Bp4F9WJnTsFBqY+Gt++UR7UmLvBZL/dvthkeNCu2I8MUsmshkUUjY0lIXpjZwefUOuyupQrgHXPMg==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
timeago "^1.6.7"
-"@abp/toastr@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0-rc.1.tgz#82c7f6566e604c2cf31555da3f9b0898df8a5541"
- integrity sha512-0nBM4nEvDlANVulk7EKoB4Lk/1fH+UgzPOyUOyemQZAWHgPhIpa4z5yiLkCeOxN1hu/CBEe+Jo7qJblsj+v7kQ==
+"@abp/toastr@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0.tgz#e68a2bd8f731e79034594bc2c736f7c66b3df1af"
+ integrity sha512-aWK/RaX/FmcEKhJLjsw1A0K2c04m2fRJkmo9NwzBCSscy6Msw9IMkqNWLiFDThMU8/qKzq7wq3Vmk/C0IpeAwA==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
toastr "^2.1.4"
-"@abp/utils@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0-rc.1.tgz#7db324059f8f9c64fbb5d5a6f0c2384896ca1928"
- integrity sha512-Eg4Lwv4DEDr5mfG/8ghwMPdphywZBZIxWTJCZnCWngDQ9fEn/bnYuL1WkvbVvKd10A6030wHEJXFJj2OuNdi3Q==
+"@abp/utils@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0.tgz#96ae9266ad4d833fd9d723acef7fc85fabf618d9"
+ integrity sha512-w/XAqza4Z8wBWRoj5uPNKbd1/bE9L/uUWk6EUSBKmljMRryWQBmaPkb1XgvrOMQIbyyF60tUvvipapQLPVh6hw==
dependencies:
just-compare "^2.3.0"
diff --git a/modules/client-simulation/src/Volo.ClientSimulation.Web/Volo.ClientSimulation.Web.abppkg.analyze.json b/modules/client-simulation/src/Volo.ClientSimulation.Web/Volo.ClientSimulation.Web.abppkg.analyze.json
index 907c063ea6..e0da5e658e 100644
--- a/modules/client-simulation/src/Volo.ClientSimulation.Web/Volo.ClientSimulation.Web.abppkg.analyze.json
+++ b/modules/client-simulation/src/Volo.ClientSimulation.Web/Volo.ClientSimulation.Web.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.ClientSimulation.Web",
- "hash": "219a88f8096628953238e9590f6a5e56",
+ "hash": "",
"contents": [
{
"namespace": "Volo.ClientSimulation",
diff --git a/modules/cms-kit/angular/package.json b/modules/cms-kit/angular/package.json
index 2ae723fb04..3ee27697d0 100644
--- a/modules/cms-kit/angular/package.json
+++ b/modules/cms-kit/angular/package.json
@@ -15,11 +15,11 @@
},
"private": true,
"dependencies": {
- "@abp/ng.account": "~8.3.0-rc.1",
- "@abp/ng.identity": "~8.3.0-rc.1",
- "@abp/ng.setting-management": "~8.3.0-rc.1",
- "@abp/ng.tenant-management": "~8.3.0-rc.1",
- "@abp/ng.theme.basic": "~8.3.0-rc.1",
+ "@abp/ng.account": "~8.3.0",
+ "@abp/ng.identity": "~8.3.0",
+ "@abp/ng.setting-management": "~8.3.0",
+ "@abp/ng.tenant-management": "~8.3.0",
+ "@abp/ng.theme.basic": "~8.3.0",
"@angular/animations": "~10.0.0",
"@angular/common": "~10.0.0",
"@angular/compiler": "~10.0.0",
diff --git a/modules/cms-kit/angular/projects/cms-kit/package.json b/modules/cms-kit/angular/projects/cms-kit/package.json
index e3270b0963..d2cfd7941b 100644
--- a/modules/cms-kit/angular/projects/cms-kit/package.json
+++ b/modules/cms-kit/angular/projects/cms-kit/package.json
@@ -4,8 +4,8 @@
"peerDependencies": {
"@angular/common": "^9.1.11",
"@angular/core": "^9.1.11",
- "@abp/ng.core": ">=8.3.0-rc.1",
- "@abp/ng.theme.shared": ">=8.3.0-rc.1"
+ "@abp/ng.core": ">=8.3.0",
+ "@abp/ng.theme.shared": ">=8.3.0"
},
"dependencies": {
"tslib": "^2.0.0"
diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json
index 63cf058897..31f6d4b511 100644
--- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json
+++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json
@@ -3,6 +3,6 @@
"name": "my-app-identityserver",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0-rc.1"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0"
}
}
diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock
index f8b5af47ca..d19b65bc24 100644
--- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock
+++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock
@@ -2,194 +2,194 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.basic@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-8.3.0-rc.1.tgz#7254b66019b99ac8a29385c1bb2c9c658a167bc7"
- integrity sha512-uMgO1VQgDOW9tMq9gl6idsBZZcL/voeMp0wkBTRORQHg0E+SyA8z0yQrg5S8hU/7zRwoZPm3K9R/Peu71jNTgQ==
- dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0-rc.1.tgz#cec5ca6c5a5f61a361425b9d55711beb0db4eb81"
- integrity sha512-qLAzDwiQvRB8xDs6bkeZ4YLMUuTb6Dz/GmWT61dSMUAhRCTPqPi6aWnt9fiM99HbkP7APLPb7d+o5ho6FoktNQ==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~8.3.0-rc.1"
- "@abp/bootstrap" "~8.3.0-rc.1"
- "@abp/bootstrap-datepicker" "~8.3.0-rc.1"
- "@abp/bootstrap-daterangepicker" "~8.3.0-rc.1"
- "@abp/datatables.net-bs5" "~8.3.0-rc.1"
- "@abp/font-awesome" "~8.3.0-rc.1"
- "@abp/jquery-form" "~8.3.0-rc.1"
- "@abp/jquery-validation-unobtrusive" "~8.3.0-rc.1"
- "@abp/lodash" "~8.3.0-rc.1"
- "@abp/luxon" "~8.3.0-rc.1"
- "@abp/malihu-custom-scrollbar-plugin" "~8.3.0-rc.1"
- "@abp/moment" "~8.3.0-rc.1"
- "@abp/select2" "~8.3.0-rc.1"
- "@abp/sweetalert2" "~8.3.0-rc.1"
- "@abp/timeago" "~8.3.0-rc.1"
- "@abp/toastr" "~8.3.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0-rc.1.tgz#7329e4878e64277dfed88eef5e9d1715d1af925f"
- integrity sha512-NPWrtJ+Il+SI0oPQ5gc1Lc9vfPZvHbe0d/5y5qGIdwKY1F5txIyRGesc0najOLIUe7Z66AInyfNuNeoaFNR0fg==
+"@abp/aspnetcore.mvc.ui.theme.basic@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-8.3.0.tgz#a2d17eb5da2c3abfad4bcc842cfcda0e58a130a4"
+ integrity sha512-T2dg7WlvNSrwTCfy5wk4gqiJ/15kIjMGM4wLXIJcMYn60yGY/YeX6Q4A3R/qJzfl4JdgW5rt3GpdKv86y/ADXg==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0"
+
+"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0.tgz#5d6bb5181a62770e9cb967980b77e75c115c5ed7"
+ integrity sha512-o/0eh8jLS+YJiseTKzzioUz0vNnMFzyoz+mkyA4PlO1gqw2JFhzPhTBZ3cuyV9QlxUfEA8dWAkqAUX6vqiHwkw==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~8.3.0"
+ "@abp/bootstrap" "~8.3.0"
+ "@abp/bootstrap-datepicker" "~8.3.0"
+ "@abp/bootstrap-daterangepicker" "~8.3.0"
+ "@abp/datatables.net-bs5" "~8.3.0"
+ "@abp/font-awesome" "~8.3.0"
+ "@abp/jquery-form" "~8.3.0"
+ "@abp/jquery-validation-unobtrusive" "~8.3.0"
+ "@abp/lodash" "~8.3.0"
+ "@abp/luxon" "~8.3.0"
+ "@abp/malihu-custom-scrollbar-plugin" "~8.3.0"
+ "@abp/moment" "~8.3.0"
+ "@abp/select2" "~8.3.0"
+ "@abp/sweetalert2" "~8.3.0"
+ "@abp/timeago" "~8.3.0"
+ "@abp/toastr" "~8.3.0"
+
+"@abp/aspnetcore.mvc.ui@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0.tgz#d7ba0539bfcc6661a347dea7f952489010b3e816"
+ integrity sha512-OxgZhLKiXGFYYpNJ5O/IbhinsniiBPv9586e+1Soar0GckCMIIegJxnJb1Bo1O75blrcK2cIU6LqjRT1FXt2Lw==
dependencies:
ansi-colors "^4.1.3"
-"@abp/bootstrap-datepicker@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0-rc.1.tgz#d3bcb5f0063df631ad45c7f822195fc4e5c5b4e2"
- integrity sha512-oqbwh9dz8XNfh+eZou8GvcEUYA1J0qr3ABA1r72DJZ/nzfLQX7pUO8NkkaDLpVwrly64rfOlxV4LT7g5muoAsw==
+"@abp/bootstrap-datepicker@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0.tgz#8c1bf9efec37b671d8f28b8b1e89c1ac66684267"
+ integrity sha512-KCwMtm7x+cnKPeNMzhjDJUce0stwu4e57ibmvA6sMf1tmj+yB256O4E2hIDDohiT3vP/zV8HVHX6uATlcmGC9w==
dependencies:
bootstrap-datepicker "^1.10.0"
-"@abp/bootstrap-daterangepicker@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0-rc.1.tgz#33958a1806a070db4fb01eb40a0897bfd16cf1f5"
- integrity sha512-egtnxhRMCu56RV2bIRBLLTly2Y4W/2jwl9el+9Stjc8IN91j2UL5E4t5qn3zI3vXvVX4w5vP+TthQj0grFK0/Q==
+"@abp/bootstrap-daterangepicker@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0.tgz#2b8ed978333502677916f88cbb3e1d1b1c8a3a17"
+ integrity sha512-uQSfuCQogl4BujdqvtdAoSE+z32ci8FT5+i3gLfpqbgTaxvY/Kv5NxAUH5/1sjnuAE7SMWO+eVvI3V0pXgQohg==
dependencies:
bootstrap-daterangepicker "^3.1.0"
-"@abp/bootstrap@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0-rc.1.tgz#3ca994e4c003d056024dcd533221461cccd14f2a"
- integrity sha512-xrs0JOYFEPzi3V6s9d3SCj0CxY06bBmFUK5aETgKUiXBXa4vU2YoNbnrCtDUvV+mn517FRuA/j3RaFkTWYg48g==
+"@abp/bootstrap@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0.tgz#96d6ea7e6ac30f6e34e495a4224f56f7b2a1a7a3"
+ integrity sha512-5AmdTtakmWhZmHrb7ibvvf+KwF9OGadpAe7Kv9mNEE02K2qkp7Xw4r5o/bgVl7YfLC1FA6GZZXrV2s2t0gjHtg==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
bootstrap "^5.3.3"
-"@abp/core@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0-rc.1.tgz#771c7ecd27319201a8236f0bc6b5601188059325"
- integrity sha512-IB8Baa3LIv3XYja6iBw6VSnITGcRseGyY8wBNEXRiB+ni21Bv//NMyohdOot6G+HlnHlrB7kFeCX+gWu+LuYkg==
+"@abp/core@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0.tgz#3a68f5a9549efcc3e13500e301f2576751b51445"
+ integrity sha512-zrxnZi4qij/Y4AZWaXuPqs3Dd7gBtU/onX7FkYxLgQDxYBfx+84QAnPRNRFKMWaD/wKbTUB0wA66U3t2aiQX9Q==
dependencies:
- "@abp/utils" "~8.3.0-rc.1"
+ "@abp/utils" "~8.3.0"
-"@abp/datatables.net-bs5@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0-rc.1.tgz#b53dc353f485952439ea10035df0851d520efe96"
- integrity sha512-89wpkG6u1YBR98OmuEbvs4VdR5n8L4n3Z8GiHwuKr2FpEOx7cAXYKsx/8ifmICMLPiMIvFrtOEBrrv5ZKANsAA==
+"@abp/datatables.net-bs5@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0.tgz#21822ae4912a561afe9112925185aece03fcd0eb"
+ integrity sha512-GOGYSSHp3iPUDFRX2Y3C0wkiCOJDuYuK/zUSzQLNpOvBMZO+I/oWBcZM+qkVowIzsoRlAGV9+CVV2B/B05qidA==
dependencies:
- "@abp/datatables.net" "~8.3.0-rc.1"
+ "@abp/datatables.net" "~8.3.0"
datatables.net-bs5 "^2.0.8"
-"@abp/datatables.net@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0-rc.1.tgz#bb70608994c4a52bd15331f76af718353c843f94"
- integrity sha512-G42D6W0Xb8NIQxJWGpcxLOjbZ4CHtrm9oBG5+GfVmQEPGfl8r+DYdrYDAkysDg483s+48POH7NC3L1LOlxlqRg==
+"@abp/datatables.net@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0.tgz#ff697758ce9309ba8311f23aec921c4722588c8b"
+ integrity sha512-4dIdv7eN1tVouOUrlF+MIdg8zQpecyH61waqLgy1q5jMZQivrTSFZ7UWMG3WVOAYjw5zSUZHZPbzA+ttnaOPkg==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
datatables.net "^2.0.8"
-"@abp/font-awesome@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0-rc.1.tgz#ea05d7e08395b1894eefe6f912ae0534fd75e69a"
- integrity sha512-GN1xZ76RzQC3aqU2m19vYsyfESCeoSsp8AtvilmeqsjlzhuLLdQ6UWSxMqRqE22TCWRXbA/d/7IAb12TB1mawg==
+"@abp/font-awesome@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0.tgz#9e4e9adc08dfca52c0a07d1608c5e5662675a4c9"
+ integrity sha512-NRxvM/dzvQC2Cj/F5i07XB/i6IVTmXcO9sOq6TWosWib0wGaPxRbCSjy8QUAYSD1QYaVQ30XMb3XXImaMGyd8A==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
"@fortawesome/fontawesome-free" "^6.5.2"
-"@abp/jquery-form@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0-rc.1.tgz#21025048f44028a5cb1ced7414cb48af00e91bff"
- integrity sha512-mVZzEJKbhiYmXK2yZRZAJwO5e7C2N0lj8ueOYPiFG6h4UKLbKPHQdIrkapyc88VirrELe1hnhJJbQ56dsQWeyg==
+"@abp/jquery-form@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0.tgz#fa2ad2fedbe3d3528ee94cbbd4f94d48f0cb5e4d"
+ integrity sha512-olP9FmpNVTbOIewsVua0moHVYXw4Sl3chFbvTDLG6vRBohLSjllUXfgY3UEIVWR1PCqnAg+iEJZl9NHB9iOLBg==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0-rc.1.tgz#63042715391ca63f273874ff66fca4b20330d31b"
- integrity sha512-EKQf733+HS9bIVQhMgAHYZfCY663GqNv8KUcCIuQOHPt5DWU49ygYhawkcYIzUKd2Gy9+ZtyWLkWmoBxTnwlmw==
+"@abp/jquery-validation-unobtrusive@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0.tgz#0992cdd33170df83c79aa3371038c0b30e451521"
+ integrity sha512-9hidjq8x8sTnP5O3K2b2x9NpxvPd9WB03ENR6OfvM89kfSmQapSvBZTlCu80YK9NaQJ6MLQRLYOCuc3GHcj3EQ==
dependencies:
- "@abp/jquery-validation" "~8.3.0-rc.1"
+ "@abp/jquery-validation" "~8.3.0"
jquery-validation-unobtrusive "^4.0.0"
-"@abp/jquery-validation@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0-rc.1.tgz#8c82189ba7c3614f7306c2bf958b3717a6a4e702"
- integrity sha512-Fr8AI//7iV743S6bw4ixE5qOu+af3HfZSivQJnYVVTbR/75gPqI/xRe6u/k82TJIBM7IaspQ4QdruMuvnJyBpQ==
+"@abp/jquery-validation@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0.tgz#bd6a72c6d86f116abe3b5d2adf3752bdbbcca887"
+ integrity sha512-6l5BZSa3N0Fou6Se7MfUSnI2dD4SYhZ2V988bgPJQ6p37XBOZ2OAj7LEIf5FSjtUzXjao/6/vqjkPNYreNikig==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
jquery-validation "^1.20.1"
-"@abp/jquery@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0-rc.1.tgz#a181c6749d58690b3265705959d8c818296896f3"
- integrity sha512-fXs35cDLAw66irfHsFIWD41RKzpLABkULLoMwxfB76nOVPdV7qlWrXoI2O/du3xhCqBqHR4fS8xjwE6kFvkdLQ==
+"@abp/jquery@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0.tgz#9be5ef2f769680226e6a1a981026590caf3b57ef"
+ integrity sha512-GsFY+n3EtS6B0pAoKd+xMnt5Dzi5bHvIbhLgDgfQfOBzAy3twGRWsPQ3nkuXXm8TppwujMNowU1oiLKPPm0AOA==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
jquery "~3.7.1"
-"@abp/lodash@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0-rc.1.tgz#32f8805031f73b9d5bdc338afe49739c4ebc3ce9"
- integrity sha512-UBGlG5+tFpyAPMuwpkY7K/g21c+d3Aq3HbFmcIilUEIsJ+yJqj95xhRh6t/LSwJCo5ntdSCgVC85q0kD0fQlQA==
+"@abp/lodash@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0.tgz#f5a0a496c999886f2d6999067bfac2e1f0c3969c"
+ integrity sha512-BiAsONbKR/RKG3WjRaMWVmhNe1ELEsykVq+ogG1Rhk3kwPbvze3TS8k2p0Lu/RC41/BmDUmJ5abg1pUMwkRT8w==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
lodash "^4.17.21"
-"@abp/luxon@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0-rc.1.tgz#df19773212502336c2caf6a8806b7647748f8f81"
- integrity sha512-1oPx0tGyFi58T0yv/pdqJpcIRWU6ej5Sv28fRgz3J6tHam3hVPtKJPK9Ajvn6+MNVDLuMUczgVtfWEOvO2Kqrg==
+"@abp/luxon@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0.tgz#7dd3f756be1605506e26f7ac76b80cc082a12d07"
+ integrity sha512-8gdI5BtXkVp0sFg89QVDe8AvgQ7Qfq4JCqz2PMrKPSATR3H8GD6BCaEYpRp6CNTCjVrQjGZdzKgUyea1D3dHbw==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
luxon "^3.4.4"
-"@abp/malihu-custom-scrollbar-plugin@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0-rc.1.tgz#b57086d708082ce45e1917aeca8c92029ebd805d"
- integrity sha512-4sa5e07EPW9IM7eQbvKtk78gd/bESYhTsl+BeWSKeqjj5wwwPYf4GIEvfJM7JVnhYwh1IPYDEkTv9QNYLczXKQ==
+"@abp/malihu-custom-scrollbar-plugin@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0.tgz#c88c132c3402bbb02054ca7d446051950f87a817"
+ integrity sha512-nd/mb6LJa6fMxal8PGcIjIRIoZ/UHCd01WDC9YI2H4wGCGx0CA0JyHso5oc/OEzJhUL8ujO/vYm9uLb7YahPtA==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/moment@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0-rc.1.tgz#0ba9d64ca6d7b454af7aaa63e54be267f333e1fe"
- integrity sha512-YbVEDg3m+D5KMcTCBEnor/tFgmk9IeL4pF/oChYQGXLeyohY7vfmK68owAnEDN61nCRXng9xykiZu2bLq829WA==
+"@abp/moment@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0.tgz#8e4f7a523ab76ef9e4cd96a399560bad38d38d1a"
+ integrity sha512-LywSsKuQ2GN/Btmle6CcTKa811zbvUWdC+RLQA792K9HyBs6LvN0qRRluEQZgplairRgh2pDOg8tdFlUERkv2w==
dependencies:
moment "^2.30.1"
-"@abp/select2@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0-rc.1.tgz#3eb932e05987cc1e13f72decc9ae70d47801bf7d"
- integrity sha512-lZuJLiFcOEVj6cTPAA7ZfhE3v1LyivmMt8Tt7Dpvgybx2PDN1NtfLce2BCKb0MvsaTlfJMSK0ZLu3JpxCQ+Q/A==
+"@abp/select2@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0.tgz#ef4742fcd345394767f46180f61c6cabbd0b3867"
+ integrity sha512-bdLt2+ImxxpiZl4HGbYJpdDROQUT7/Z/+8A+6oJNacq3lNekdvufLYgTMxKru6zTbnd9j3HFKMOTE1eRjb9Xqg==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
select2 "^4.0.13"
-"@abp/sweetalert2@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0-rc.1.tgz#66d8b9ce287a71474ce37c217cd800e150a86138"
- integrity sha512-b6dZbc5/nYrUz5s+lAgi561XnsASa0ZJOn6f5W2Oakm9ULzqFndapKx5f+zHeJaNArpeGDh50AjQ+lcGGw83zQ==
+"@abp/sweetalert2@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0.tgz#a63020d57e44f7940817287d3d9676288bfb85aa"
+ integrity sha512-ooqPM4Z2v2scnMo5l8ycTmp6t/sW4sCsvIkJ4TyM876WLQJaZxJdOao4RQWuU+dVFr9zg8cOwqLH4q7UEiO6ww==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
sweetalert2 "^11.3.6"
-"@abp/timeago@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0-rc.1.tgz#d795b9cccb190f5d42f242727ac447fe03c30db3"
- integrity sha512-yJCA7PHmAxFxIvPq03iSx3LbIiDQls4AiVBO75103LEGokRUG9bg+iPA7GLkPpfNbnNgEJ7N7Gw6RQzMNRLCpA==
+"@abp/timeago@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0.tgz#b3b8d6927bf170f77af848bc1925e5ef6835bd55"
+ integrity sha512-Dd6xaUoF9Bp4F9WJnTsFBqY+Gt++UR7UmLvBZL/dvthkeNCu2I8MUsmshkUUjY0lIXpjZwefUOuyupQrgHXPMg==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
timeago "^1.6.7"
-"@abp/toastr@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0-rc.1.tgz#82c7f6566e604c2cf31555da3f9b0898df8a5541"
- integrity sha512-0nBM4nEvDlANVulk7EKoB4Lk/1fH+UgzPOyUOyemQZAWHgPhIpa4z5yiLkCeOxN1hu/CBEe+Jo7qJblsj+v7kQ==
+"@abp/toastr@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0.tgz#e68a2bd8f731e79034594bc2c736f7c66b3df1af"
+ integrity sha512-aWK/RaX/FmcEKhJLjsw1A0K2c04m2fRJkmo9NwzBCSscy6Msw9IMkqNWLiFDThMU8/qKzq7wq3Vmk/C0IpeAwA==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
toastr "^2.1.4"
-"@abp/utils@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0-rc.1.tgz#7db324059f8f9c64fbb5d5a6f0c2384896ca1928"
- integrity sha512-Eg4Lwv4DEDr5mfG/8ghwMPdphywZBZIxWTJCZnCWngDQ9fEn/bnYuL1WkvbVvKd10A6030wHEJXFJj2OuNdi3Q==
+"@abp/utils@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0.tgz#96ae9266ad4d833fd9d723acef7fc85fabf618d9"
+ integrity sha512-w/XAqza4Z8wBWRoj5uPNKbd1/bE9L/uUWk6EUSBKmljMRryWQBmaPkb1XgvrOMQIbyyF60tUvvipapQLPVh6hw==
dependencies:
just-compare "^2.3.0"
diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json b/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json
index 01201f86ab..7dad1fc3e2 100644
--- a/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json
+++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json
@@ -3,6 +3,6 @@
"name": "my-app",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0-rc.1"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0"
}
}
diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock
index f8b5af47ca..d19b65bc24 100644
--- a/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock
+++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock
@@ -2,194 +2,194 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.basic@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-8.3.0-rc.1.tgz#7254b66019b99ac8a29385c1bb2c9c658a167bc7"
- integrity sha512-uMgO1VQgDOW9tMq9gl6idsBZZcL/voeMp0wkBTRORQHg0E+SyA8z0yQrg5S8hU/7zRwoZPm3K9R/Peu71jNTgQ==
- dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0-rc.1.tgz#cec5ca6c5a5f61a361425b9d55711beb0db4eb81"
- integrity sha512-qLAzDwiQvRB8xDs6bkeZ4YLMUuTb6Dz/GmWT61dSMUAhRCTPqPi6aWnt9fiM99HbkP7APLPb7d+o5ho6FoktNQ==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~8.3.0-rc.1"
- "@abp/bootstrap" "~8.3.0-rc.1"
- "@abp/bootstrap-datepicker" "~8.3.0-rc.1"
- "@abp/bootstrap-daterangepicker" "~8.3.0-rc.1"
- "@abp/datatables.net-bs5" "~8.3.0-rc.1"
- "@abp/font-awesome" "~8.3.0-rc.1"
- "@abp/jquery-form" "~8.3.0-rc.1"
- "@abp/jquery-validation-unobtrusive" "~8.3.0-rc.1"
- "@abp/lodash" "~8.3.0-rc.1"
- "@abp/luxon" "~8.3.0-rc.1"
- "@abp/malihu-custom-scrollbar-plugin" "~8.3.0-rc.1"
- "@abp/moment" "~8.3.0-rc.1"
- "@abp/select2" "~8.3.0-rc.1"
- "@abp/sweetalert2" "~8.3.0-rc.1"
- "@abp/timeago" "~8.3.0-rc.1"
- "@abp/toastr" "~8.3.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0-rc.1.tgz#7329e4878e64277dfed88eef5e9d1715d1af925f"
- integrity sha512-NPWrtJ+Il+SI0oPQ5gc1Lc9vfPZvHbe0d/5y5qGIdwKY1F5txIyRGesc0najOLIUe7Z66AInyfNuNeoaFNR0fg==
+"@abp/aspnetcore.mvc.ui.theme.basic@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-8.3.0.tgz#a2d17eb5da2c3abfad4bcc842cfcda0e58a130a4"
+ integrity sha512-T2dg7WlvNSrwTCfy5wk4gqiJ/15kIjMGM4wLXIJcMYn60yGY/YeX6Q4A3R/qJzfl4JdgW5rt3GpdKv86y/ADXg==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0"
+
+"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0.tgz#5d6bb5181a62770e9cb967980b77e75c115c5ed7"
+ integrity sha512-o/0eh8jLS+YJiseTKzzioUz0vNnMFzyoz+mkyA4PlO1gqw2JFhzPhTBZ3cuyV9QlxUfEA8dWAkqAUX6vqiHwkw==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~8.3.0"
+ "@abp/bootstrap" "~8.3.0"
+ "@abp/bootstrap-datepicker" "~8.3.0"
+ "@abp/bootstrap-daterangepicker" "~8.3.0"
+ "@abp/datatables.net-bs5" "~8.3.0"
+ "@abp/font-awesome" "~8.3.0"
+ "@abp/jquery-form" "~8.3.0"
+ "@abp/jquery-validation-unobtrusive" "~8.3.0"
+ "@abp/lodash" "~8.3.0"
+ "@abp/luxon" "~8.3.0"
+ "@abp/malihu-custom-scrollbar-plugin" "~8.3.0"
+ "@abp/moment" "~8.3.0"
+ "@abp/select2" "~8.3.0"
+ "@abp/sweetalert2" "~8.3.0"
+ "@abp/timeago" "~8.3.0"
+ "@abp/toastr" "~8.3.0"
+
+"@abp/aspnetcore.mvc.ui@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0.tgz#d7ba0539bfcc6661a347dea7f952489010b3e816"
+ integrity sha512-OxgZhLKiXGFYYpNJ5O/IbhinsniiBPv9586e+1Soar0GckCMIIegJxnJb1Bo1O75blrcK2cIU6LqjRT1FXt2Lw==
dependencies:
ansi-colors "^4.1.3"
-"@abp/bootstrap-datepicker@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0-rc.1.tgz#d3bcb5f0063df631ad45c7f822195fc4e5c5b4e2"
- integrity sha512-oqbwh9dz8XNfh+eZou8GvcEUYA1J0qr3ABA1r72DJZ/nzfLQX7pUO8NkkaDLpVwrly64rfOlxV4LT7g5muoAsw==
+"@abp/bootstrap-datepicker@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0.tgz#8c1bf9efec37b671d8f28b8b1e89c1ac66684267"
+ integrity sha512-KCwMtm7x+cnKPeNMzhjDJUce0stwu4e57ibmvA6sMf1tmj+yB256O4E2hIDDohiT3vP/zV8HVHX6uATlcmGC9w==
dependencies:
bootstrap-datepicker "^1.10.0"
-"@abp/bootstrap-daterangepicker@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0-rc.1.tgz#33958a1806a070db4fb01eb40a0897bfd16cf1f5"
- integrity sha512-egtnxhRMCu56RV2bIRBLLTly2Y4W/2jwl9el+9Stjc8IN91j2UL5E4t5qn3zI3vXvVX4w5vP+TthQj0grFK0/Q==
+"@abp/bootstrap-daterangepicker@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0.tgz#2b8ed978333502677916f88cbb3e1d1b1c8a3a17"
+ integrity sha512-uQSfuCQogl4BujdqvtdAoSE+z32ci8FT5+i3gLfpqbgTaxvY/Kv5NxAUH5/1sjnuAE7SMWO+eVvI3V0pXgQohg==
dependencies:
bootstrap-daterangepicker "^3.1.0"
-"@abp/bootstrap@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0-rc.1.tgz#3ca994e4c003d056024dcd533221461cccd14f2a"
- integrity sha512-xrs0JOYFEPzi3V6s9d3SCj0CxY06bBmFUK5aETgKUiXBXa4vU2YoNbnrCtDUvV+mn517FRuA/j3RaFkTWYg48g==
+"@abp/bootstrap@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0.tgz#96d6ea7e6ac30f6e34e495a4224f56f7b2a1a7a3"
+ integrity sha512-5AmdTtakmWhZmHrb7ibvvf+KwF9OGadpAe7Kv9mNEE02K2qkp7Xw4r5o/bgVl7YfLC1FA6GZZXrV2s2t0gjHtg==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
bootstrap "^5.3.3"
-"@abp/core@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0-rc.1.tgz#771c7ecd27319201a8236f0bc6b5601188059325"
- integrity sha512-IB8Baa3LIv3XYja6iBw6VSnITGcRseGyY8wBNEXRiB+ni21Bv//NMyohdOot6G+HlnHlrB7kFeCX+gWu+LuYkg==
+"@abp/core@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0.tgz#3a68f5a9549efcc3e13500e301f2576751b51445"
+ integrity sha512-zrxnZi4qij/Y4AZWaXuPqs3Dd7gBtU/onX7FkYxLgQDxYBfx+84QAnPRNRFKMWaD/wKbTUB0wA66U3t2aiQX9Q==
dependencies:
- "@abp/utils" "~8.3.0-rc.1"
+ "@abp/utils" "~8.3.0"
-"@abp/datatables.net-bs5@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0-rc.1.tgz#b53dc353f485952439ea10035df0851d520efe96"
- integrity sha512-89wpkG6u1YBR98OmuEbvs4VdR5n8L4n3Z8GiHwuKr2FpEOx7cAXYKsx/8ifmICMLPiMIvFrtOEBrrv5ZKANsAA==
+"@abp/datatables.net-bs5@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0.tgz#21822ae4912a561afe9112925185aece03fcd0eb"
+ integrity sha512-GOGYSSHp3iPUDFRX2Y3C0wkiCOJDuYuK/zUSzQLNpOvBMZO+I/oWBcZM+qkVowIzsoRlAGV9+CVV2B/B05qidA==
dependencies:
- "@abp/datatables.net" "~8.3.0-rc.1"
+ "@abp/datatables.net" "~8.3.0"
datatables.net-bs5 "^2.0.8"
-"@abp/datatables.net@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0-rc.1.tgz#bb70608994c4a52bd15331f76af718353c843f94"
- integrity sha512-G42D6W0Xb8NIQxJWGpcxLOjbZ4CHtrm9oBG5+GfVmQEPGfl8r+DYdrYDAkysDg483s+48POH7NC3L1LOlxlqRg==
+"@abp/datatables.net@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0.tgz#ff697758ce9309ba8311f23aec921c4722588c8b"
+ integrity sha512-4dIdv7eN1tVouOUrlF+MIdg8zQpecyH61waqLgy1q5jMZQivrTSFZ7UWMG3WVOAYjw5zSUZHZPbzA+ttnaOPkg==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
datatables.net "^2.0.8"
-"@abp/font-awesome@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0-rc.1.tgz#ea05d7e08395b1894eefe6f912ae0534fd75e69a"
- integrity sha512-GN1xZ76RzQC3aqU2m19vYsyfESCeoSsp8AtvilmeqsjlzhuLLdQ6UWSxMqRqE22TCWRXbA/d/7IAb12TB1mawg==
+"@abp/font-awesome@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0.tgz#9e4e9adc08dfca52c0a07d1608c5e5662675a4c9"
+ integrity sha512-NRxvM/dzvQC2Cj/F5i07XB/i6IVTmXcO9sOq6TWosWib0wGaPxRbCSjy8QUAYSD1QYaVQ30XMb3XXImaMGyd8A==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
"@fortawesome/fontawesome-free" "^6.5.2"
-"@abp/jquery-form@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0-rc.1.tgz#21025048f44028a5cb1ced7414cb48af00e91bff"
- integrity sha512-mVZzEJKbhiYmXK2yZRZAJwO5e7C2N0lj8ueOYPiFG6h4UKLbKPHQdIrkapyc88VirrELe1hnhJJbQ56dsQWeyg==
+"@abp/jquery-form@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0.tgz#fa2ad2fedbe3d3528ee94cbbd4f94d48f0cb5e4d"
+ integrity sha512-olP9FmpNVTbOIewsVua0moHVYXw4Sl3chFbvTDLG6vRBohLSjllUXfgY3UEIVWR1PCqnAg+iEJZl9NHB9iOLBg==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0-rc.1.tgz#63042715391ca63f273874ff66fca4b20330d31b"
- integrity sha512-EKQf733+HS9bIVQhMgAHYZfCY663GqNv8KUcCIuQOHPt5DWU49ygYhawkcYIzUKd2Gy9+ZtyWLkWmoBxTnwlmw==
+"@abp/jquery-validation-unobtrusive@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0.tgz#0992cdd33170df83c79aa3371038c0b30e451521"
+ integrity sha512-9hidjq8x8sTnP5O3K2b2x9NpxvPd9WB03ENR6OfvM89kfSmQapSvBZTlCu80YK9NaQJ6MLQRLYOCuc3GHcj3EQ==
dependencies:
- "@abp/jquery-validation" "~8.3.0-rc.1"
+ "@abp/jquery-validation" "~8.3.0"
jquery-validation-unobtrusive "^4.0.0"
-"@abp/jquery-validation@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0-rc.1.tgz#8c82189ba7c3614f7306c2bf958b3717a6a4e702"
- integrity sha512-Fr8AI//7iV743S6bw4ixE5qOu+af3HfZSivQJnYVVTbR/75gPqI/xRe6u/k82TJIBM7IaspQ4QdruMuvnJyBpQ==
+"@abp/jquery-validation@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0.tgz#bd6a72c6d86f116abe3b5d2adf3752bdbbcca887"
+ integrity sha512-6l5BZSa3N0Fou6Se7MfUSnI2dD4SYhZ2V988bgPJQ6p37XBOZ2OAj7LEIf5FSjtUzXjao/6/vqjkPNYreNikig==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
jquery-validation "^1.20.1"
-"@abp/jquery@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0-rc.1.tgz#a181c6749d58690b3265705959d8c818296896f3"
- integrity sha512-fXs35cDLAw66irfHsFIWD41RKzpLABkULLoMwxfB76nOVPdV7qlWrXoI2O/du3xhCqBqHR4fS8xjwE6kFvkdLQ==
+"@abp/jquery@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0.tgz#9be5ef2f769680226e6a1a981026590caf3b57ef"
+ integrity sha512-GsFY+n3EtS6B0pAoKd+xMnt5Dzi5bHvIbhLgDgfQfOBzAy3twGRWsPQ3nkuXXm8TppwujMNowU1oiLKPPm0AOA==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
jquery "~3.7.1"
-"@abp/lodash@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0-rc.1.tgz#32f8805031f73b9d5bdc338afe49739c4ebc3ce9"
- integrity sha512-UBGlG5+tFpyAPMuwpkY7K/g21c+d3Aq3HbFmcIilUEIsJ+yJqj95xhRh6t/LSwJCo5ntdSCgVC85q0kD0fQlQA==
+"@abp/lodash@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0.tgz#f5a0a496c999886f2d6999067bfac2e1f0c3969c"
+ integrity sha512-BiAsONbKR/RKG3WjRaMWVmhNe1ELEsykVq+ogG1Rhk3kwPbvze3TS8k2p0Lu/RC41/BmDUmJ5abg1pUMwkRT8w==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
lodash "^4.17.21"
-"@abp/luxon@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0-rc.1.tgz#df19773212502336c2caf6a8806b7647748f8f81"
- integrity sha512-1oPx0tGyFi58T0yv/pdqJpcIRWU6ej5Sv28fRgz3J6tHam3hVPtKJPK9Ajvn6+MNVDLuMUczgVtfWEOvO2Kqrg==
+"@abp/luxon@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0.tgz#7dd3f756be1605506e26f7ac76b80cc082a12d07"
+ integrity sha512-8gdI5BtXkVp0sFg89QVDe8AvgQ7Qfq4JCqz2PMrKPSATR3H8GD6BCaEYpRp6CNTCjVrQjGZdzKgUyea1D3dHbw==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
luxon "^3.4.4"
-"@abp/malihu-custom-scrollbar-plugin@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0-rc.1.tgz#b57086d708082ce45e1917aeca8c92029ebd805d"
- integrity sha512-4sa5e07EPW9IM7eQbvKtk78gd/bESYhTsl+BeWSKeqjj5wwwPYf4GIEvfJM7JVnhYwh1IPYDEkTv9QNYLczXKQ==
+"@abp/malihu-custom-scrollbar-plugin@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0.tgz#c88c132c3402bbb02054ca7d446051950f87a817"
+ integrity sha512-nd/mb6LJa6fMxal8PGcIjIRIoZ/UHCd01WDC9YI2H4wGCGx0CA0JyHso5oc/OEzJhUL8ujO/vYm9uLb7YahPtA==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/moment@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0-rc.1.tgz#0ba9d64ca6d7b454af7aaa63e54be267f333e1fe"
- integrity sha512-YbVEDg3m+D5KMcTCBEnor/tFgmk9IeL4pF/oChYQGXLeyohY7vfmK68owAnEDN61nCRXng9xykiZu2bLq829WA==
+"@abp/moment@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0.tgz#8e4f7a523ab76ef9e4cd96a399560bad38d38d1a"
+ integrity sha512-LywSsKuQ2GN/Btmle6CcTKa811zbvUWdC+RLQA792K9HyBs6LvN0qRRluEQZgplairRgh2pDOg8tdFlUERkv2w==
dependencies:
moment "^2.30.1"
-"@abp/select2@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0-rc.1.tgz#3eb932e05987cc1e13f72decc9ae70d47801bf7d"
- integrity sha512-lZuJLiFcOEVj6cTPAA7ZfhE3v1LyivmMt8Tt7Dpvgybx2PDN1NtfLce2BCKb0MvsaTlfJMSK0ZLu3JpxCQ+Q/A==
+"@abp/select2@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0.tgz#ef4742fcd345394767f46180f61c6cabbd0b3867"
+ integrity sha512-bdLt2+ImxxpiZl4HGbYJpdDROQUT7/Z/+8A+6oJNacq3lNekdvufLYgTMxKru6zTbnd9j3HFKMOTE1eRjb9Xqg==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
select2 "^4.0.13"
-"@abp/sweetalert2@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0-rc.1.tgz#66d8b9ce287a71474ce37c217cd800e150a86138"
- integrity sha512-b6dZbc5/nYrUz5s+lAgi561XnsASa0ZJOn6f5W2Oakm9ULzqFndapKx5f+zHeJaNArpeGDh50AjQ+lcGGw83zQ==
+"@abp/sweetalert2@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0.tgz#a63020d57e44f7940817287d3d9676288bfb85aa"
+ integrity sha512-ooqPM4Z2v2scnMo5l8ycTmp6t/sW4sCsvIkJ4TyM876WLQJaZxJdOao4RQWuU+dVFr9zg8cOwqLH4q7UEiO6ww==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
sweetalert2 "^11.3.6"
-"@abp/timeago@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0-rc.1.tgz#d795b9cccb190f5d42f242727ac447fe03c30db3"
- integrity sha512-yJCA7PHmAxFxIvPq03iSx3LbIiDQls4AiVBO75103LEGokRUG9bg+iPA7GLkPpfNbnNgEJ7N7Gw6RQzMNRLCpA==
+"@abp/timeago@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0.tgz#b3b8d6927bf170f77af848bc1925e5ef6835bd55"
+ integrity sha512-Dd6xaUoF9Bp4F9WJnTsFBqY+Gt++UR7UmLvBZL/dvthkeNCu2I8MUsmshkUUjY0lIXpjZwefUOuyupQrgHXPMg==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
timeago "^1.6.7"
-"@abp/toastr@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0-rc.1.tgz#82c7f6566e604c2cf31555da3f9b0898df8a5541"
- integrity sha512-0nBM4nEvDlANVulk7EKoB4Lk/1fH+UgzPOyUOyemQZAWHgPhIpa4z5yiLkCeOxN1hu/CBEe+Jo7qJblsj+v7kQ==
+"@abp/toastr@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0.tgz#e68a2bd8f731e79034594bc2c736f7c66b3df1af"
+ integrity sha512-aWK/RaX/FmcEKhJLjsw1A0K2c04m2fRJkmo9NwzBCSscy6Msw9IMkqNWLiFDThMU8/qKzq7wq3Vmk/C0IpeAwA==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
toastr "^2.1.4"
-"@abp/utils@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0-rc.1.tgz#7db324059f8f9c64fbb5d5a6f0c2384896ca1928"
- integrity sha512-Eg4Lwv4DEDr5mfG/8ghwMPdphywZBZIxWTJCZnCWngDQ9fEn/bnYuL1WkvbVvKd10A6030wHEJXFJj2OuNdi3Q==
+"@abp/utils@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0.tgz#96ae9266ad4d833fd9d723acef7fc85fabf618d9"
+ integrity sha512-w/XAqza4Z8wBWRoj5uPNKbd1/bE9L/uUWk6EUSBKmljMRryWQBmaPkb1XgvrOMQIbyyF60tUvvipapQLPVh6hw==
dependencies:
just-compare "^2.3.0"
diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json
index 1c378e7dd0..bad9a5bd0d 100644
--- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json
+++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json
@@ -3,7 +3,7 @@
"name": "my-app",
"private": true,
"dependencies": {
- "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0-rc.1",
- "@abp/cms-kit": "8.3.0-rc.1"
+ "@abp/aspnetcore.mvc.ui.theme.basic": "~8.3.0",
+ "@abp/cms-kit": "8.3.0"
}
}
diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock
index 82d4a1d36d..2b5adef665 100644
--- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock
+++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock
@@ -2,302 +2,302 @@
# yarn lockfile v1
-"@abp/aspnetcore.mvc.ui.theme.basic@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-8.3.0-rc.1.tgz#7254b66019b99ac8a29385c1bb2c9c658a167bc7"
- integrity sha512-uMgO1VQgDOW9tMq9gl6idsBZZcL/voeMp0wkBTRORQHg0E+SyA8z0yQrg5S8hU/7zRwoZPm3K9R/Peu71jNTgQ==
- dependencies:
- "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0-rc.1.tgz#cec5ca6c5a5f61a361425b9d55711beb0db4eb81"
- integrity sha512-qLAzDwiQvRB8xDs6bkeZ4YLMUuTb6Dz/GmWT61dSMUAhRCTPqPi6aWnt9fiM99HbkP7APLPb7d+o5ho6FoktNQ==
- dependencies:
- "@abp/aspnetcore.mvc.ui" "~8.3.0-rc.1"
- "@abp/bootstrap" "~8.3.0-rc.1"
- "@abp/bootstrap-datepicker" "~8.3.0-rc.1"
- "@abp/bootstrap-daterangepicker" "~8.3.0-rc.1"
- "@abp/datatables.net-bs5" "~8.3.0-rc.1"
- "@abp/font-awesome" "~8.3.0-rc.1"
- "@abp/jquery-form" "~8.3.0-rc.1"
- "@abp/jquery-validation-unobtrusive" "~8.3.0-rc.1"
- "@abp/lodash" "~8.3.0-rc.1"
- "@abp/luxon" "~8.3.0-rc.1"
- "@abp/malihu-custom-scrollbar-plugin" "~8.3.0-rc.1"
- "@abp/moment" "~8.3.0-rc.1"
- "@abp/select2" "~8.3.0-rc.1"
- "@abp/sweetalert2" "~8.3.0-rc.1"
- "@abp/timeago" "~8.3.0-rc.1"
- "@abp/toastr" "~8.3.0-rc.1"
-
-"@abp/aspnetcore.mvc.ui@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0-rc.1.tgz#7329e4878e64277dfed88eef5e9d1715d1af925f"
- integrity sha512-NPWrtJ+Il+SI0oPQ5gc1Lc9vfPZvHbe0d/5y5qGIdwKY1F5txIyRGesc0najOLIUe7Z66AInyfNuNeoaFNR0fg==
+"@abp/aspnetcore.mvc.ui.theme.basic@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-8.3.0.tgz#a2d17eb5da2c3abfad4bcc842cfcda0e58a130a4"
+ integrity sha512-T2dg7WlvNSrwTCfy5wk4gqiJ/15kIjMGM4wLXIJcMYn60yGY/YeX6Q4A3R/qJzfl4JdgW5rt3GpdKv86y/ADXg==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0"
+
+"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0.tgz#5d6bb5181a62770e9cb967980b77e75c115c5ed7"
+ integrity sha512-o/0eh8jLS+YJiseTKzzioUz0vNnMFzyoz+mkyA4PlO1gqw2JFhzPhTBZ3cuyV9QlxUfEA8dWAkqAUX6vqiHwkw==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~8.3.0"
+ "@abp/bootstrap" "~8.3.0"
+ "@abp/bootstrap-datepicker" "~8.3.0"
+ "@abp/bootstrap-daterangepicker" "~8.3.0"
+ "@abp/datatables.net-bs5" "~8.3.0"
+ "@abp/font-awesome" "~8.3.0"
+ "@abp/jquery-form" "~8.3.0"
+ "@abp/jquery-validation-unobtrusive" "~8.3.0"
+ "@abp/lodash" "~8.3.0"
+ "@abp/luxon" "~8.3.0"
+ "@abp/malihu-custom-scrollbar-plugin" "~8.3.0"
+ "@abp/moment" "~8.3.0"
+ "@abp/select2" "~8.3.0"
+ "@abp/sweetalert2" "~8.3.0"
+ "@abp/timeago" "~8.3.0"
+ "@abp/toastr" "~8.3.0"
+
+"@abp/aspnetcore.mvc.ui@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0.tgz#d7ba0539bfcc6661a347dea7f952489010b3e816"
+ integrity sha512-OxgZhLKiXGFYYpNJ5O/IbhinsniiBPv9586e+1Soar0GckCMIIegJxnJb1Bo1O75blrcK2cIU6LqjRT1FXt2Lw==
dependencies:
ansi-colors "^4.1.3"
-"@abp/bootstrap-datepicker@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0-rc.1.tgz#d3bcb5f0063df631ad45c7f822195fc4e5c5b4e2"
- integrity sha512-oqbwh9dz8XNfh+eZou8GvcEUYA1J0qr3ABA1r72DJZ/nzfLQX7pUO8NkkaDLpVwrly64rfOlxV4LT7g5muoAsw==
+"@abp/bootstrap-datepicker@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0.tgz#8c1bf9efec37b671d8f28b8b1e89c1ac66684267"
+ integrity sha512-KCwMtm7x+cnKPeNMzhjDJUce0stwu4e57ibmvA6sMf1tmj+yB256O4E2hIDDohiT3vP/zV8HVHX6uATlcmGC9w==
dependencies:
bootstrap-datepicker "^1.10.0"
-"@abp/bootstrap-daterangepicker@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0-rc.1.tgz#33958a1806a070db4fb01eb40a0897bfd16cf1f5"
- integrity sha512-egtnxhRMCu56RV2bIRBLLTly2Y4W/2jwl9el+9Stjc8IN91j2UL5E4t5qn3zI3vXvVX4w5vP+TthQj0grFK0/Q==
+"@abp/bootstrap-daterangepicker@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0.tgz#2b8ed978333502677916f88cbb3e1d1b1c8a3a17"
+ integrity sha512-uQSfuCQogl4BujdqvtdAoSE+z32ci8FT5+i3gLfpqbgTaxvY/Kv5NxAUH5/1sjnuAE7SMWO+eVvI3V0pXgQohg==
dependencies:
bootstrap-daterangepicker "^3.1.0"
-"@abp/bootstrap@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0-rc.1.tgz#3ca994e4c003d056024dcd533221461cccd14f2a"
- integrity sha512-xrs0JOYFEPzi3V6s9d3SCj0CxY06bBmFUK5aETgKUiXBXa4vU2YoNbnrCtDUvV+mn517FRuA/j3RaFkTWYg48g==
+"@abp/bootstrap@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0.tgz#96d6ea7e6ac30f6e34e495a4224f56f7b2a1a7a3"
+ integrity sha512-5AmdTtakmWhZmHrb7ibvvf+KwF9OGadpAe7Kv9mNEE02K2qkp7Xw4r5o/bgVl7YfLC1FA6GZZXrV2s2t0gjHtg==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
bootstrap "^5.3.3"
-"@abp/clipboard@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-8.3.0-rc.1.tgz#65c6cd6672fc248097659908edd4a9fe92664475"
- integrity sha512-CVyO/8BK2WnegwrEvBJCNcbkI5l31U/pZBn7DBUGpiawlLiyYZOtGFUgu4sIUTEfyaRdLiCIPd0eMzDPKMVTgA==
+"@abp/clipboard@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-8.3.0.tgz#1b171e533f768cf42c8fc0c9c67fac1c636fee8c"
+ integrity sha512-T0O4OaMxLLYztAxyvEc3onEOpGHB/C8/jDcvJwd7mgpLoi9zXVfHwpnzkx/egfNJMzp49STD6Jc+jACi8Uq+CQ==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
clipboard "^2.0.11"
-"@abp/cms-kit.admin@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/cms-kit.admin/-/cms-kit.admin-8.3.0-rc.1.tgz#c3607094caf2d5d1c57dbb08679c63e1ecf66490"
- integrity sha512-s/vMuyMO7RHQ2yeDSc1f/MJPaEbniC4VA+nc8pjnbE9SByNtZau2CuhXDumLxpN27ncEW/e2NSx6dl7yJfVkLg==
+"@abp/cms-kit.admin@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/cms-kit.admin/-/cms-kit.admin-8.3.0.tgz#9601f8b8e391a1b19b53fa04f0ea7ffb8358ab45"
+ integrity sha512-Bwk505jNh4bthmSemsvsc2eaSppaUyctHCX2of+ZEwkbB4uc9S4ctbeV9VmeO45AUIm055/GnttfXbMKvte7ng==
dependencies:
- "@abp/codemirror" "~8.3.0-rc.1"
- "@abp/jstree" "~8.3.0-rc.1"
- "@abp/markdown-it" "~8.3.0-rc.1"
- "@abp/slugify" "~8.3.0-rc.1"
- "@abp/tui-editor" "~8.3.0-rc.1"
- "@abp/uppy" "~8.3.0-rc.1"
+ "@abp/codemirror" "~8.3.0"
+ "@abp/jstree" "~8.3.0"
+ "@abp/markdown-it" "~8.3.0"
+ "@abp/slugify" "~8.3.0"
+ "@abp/tui-editor" "~8.3.0"
+ "@abp/uppy" "~8.3.0"
-"@abp/cms-kit.public@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/cms-kit.public/-/cms-kit.public-8.3.0-rc.1.tgz#6f382975d8afd4b93201acd547411402bef0f6d7"
- integrity sha512-tJhppsRitCPgdGDao3+pqvxB4VyH5wormf48FLptBB9SRVYuSYoLeS8oJ8DmuiEmelb7VaIyeYmHJA3y7AVtXw==
+"@abp/cms-kit.public@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/cms-kit.public/-/cms-kit.public-8.3.0.tgz#cec3a67e223f951ceb6863ef62b7a487794d7253"
+ integrity sha512-K8azk9SGEIzE4F+Zcb9tltZezyNP9Yzkq4bDRysv5EAyfa+zNQbyftaA6LcysEhhHbiJ8Gzvtxl93sNUiCluFg==
dependencies:
- "@abp/highlight.js" "~8.3.0-rc.1"
- "@abp/star-rating-svg" "~8.3.0-rc.1"
+ "@abp/highlight.js" "~8.3.0"
+ "@abp/star-rating-svg" "~8.3.0"
-"@abp/cms-kit@8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/cms-kit/-/cms-kit-8.3.0-rc.1.tgz#5d19ed4d026fb694c7179f95f9e2d582a098175c"
- integrity sha512-oLdtA624tZw2ZYPnMkxHa4uYOYJD6T7VY3rf9vZKA+WGC0OAF8oEEnOSz/O2PeOEqiQMz7PRVqoiF1I9Hb9Kig==
+"@abp/cms-kit@8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/cms-kit/-/cms-kit-8.3.0.tgz#7ac7ebcb43b1633ea337e5e6f5b447ef4e000992"
+ integrity sha512-XBunhRVZE4cKyTx1L9Ieh3SUw4rn0+GPGHarUmdK4oiK2q3zRZHnmAQ9w0Pb34yNcAlbPVvcqU0zE2lz2k2sSQ==
dependencies:
- "@abp/cms-kit.admin" "~8.3.0-rc.1"
- "@abp/cms-kit.public" "~8.3.0-rc.1"
+ "@abp/cms-kit.admin" "~8.3.0"
+ "@abp/cms-kit.public" "~8.3.0"
-"@abp/codemirror@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-8.3.0-rc.1.tgz#14a06f118cb0144b1019157473f854f71fffba66"
- integrity sha512-Nx1Oywgq4Y9NlRAOOa6Z07+GSmmL/9Q9R6oATFD+Dxn+WF7sONnoXf/bNhUcdwxJzPho8QmKY70gu90Q4rQszA==
+"@abp/codemirror@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-8.3.0.tgz#e5b631154ab9900ba01128b4f8d2d5d16b74566f"
+ integrity sha512-1Mi9wT/Nl1c7VS4q/OVFilbyhAkUTy+o4WRA1OMvLd9c4pJXflmJk6CT7XODmB38ePp3kygLB7nxvNN+GLu70A==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
codemirror "^6.0.1"
-"@abp/core@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0-rc.1.tgz#771c7ecd27319201a8236f0bc6b5601188059325"
- integrity sha512-IB8Baa3LIv3XYja6iBw6VSnITGcRseGyY8wBNEXRiB+ni21Bv//NMyohdOot6G+HlnHlrB7kFeCX+gWu+LuYkg==
+"@abp/core@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0.tgz#3a68f5a9549efcc3e13500e301f2576751b51445"
+ integrity sha512-zrxnZi4qij/Y4AZWaXuPqs3Dd7gBtU/onX7FkYxLgQDxYBfx+84QAnPRNRFKMWaD/wKbTUB0wA66U3t2aiQX9Q==
dependencies:
- "@abp/utils" "~8.3.0-rc.1"
+ "@abp/utils" "~8.3.0"
-"@abp/datatables.net-bs5@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0-rc.1.tgz#b53dc353f485952439ea10035df0851d520efe96"
- integrity sha512-89wpkG6u1YBR98OmuEbvs4VdR5n8L4n3Z8GiHwuKr2FpEOx7cAXYKsx/8ifmICMLPiMIvFrtOEBrrv5ZKANsAA==
+"@abp/datatables.net-bs5@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0.tgz#21822ae4912a561afe9112925185aece03fcd0eb"
+ integrity sha512-GOGYSSHp3iPUDFRX2Y3C0wkiCOJDuYuK/zUSzQLNpOvBMZO+I/oWBcZM+qkVowIzsoRlAGV9+CVV2B/B05qidA==
dependencies:
- "@abp/datatables.net" "~8.3.0-rc.1"
+ "@abp/datatables.net" "~8.3.0"
datatables.net-bs5 "^2.0.8"
-"@abp/datatables.net@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0-rc.1.tgz#bb70608994c4a52bd15331f76af718353c843f94"
- integrity sha512-G42D6W0Xb8NIQxJWGpcxLOjbZ4CHtrm9oBG5+GfVmQEPGfl8r+DYdrYDAkysDg483s+48POH7NC3L1LOlxlqRg==
+"@abp/datatables.net@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0.tgz#ff697758ce9309ba8311f23aec921c4722588c8b"
+ integrity sha512-4dIdv7eN1tVouOUrlF+MIdg8zQpecyH61waqLgy1q5jMZQivrTSFZ7UWMG3WVOAYjw5zSUZHZPbzA+ttnaOPkg==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
datatables.net "^2.0.8"
-"@abp/font-awesome@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0-rc.1.tgz#ea05d7e08395b1894eefe6f912ae0534fd75e69a"
- integrity sha512-GN1xZ76RzQC3aqU2m19vYsyfESCeoSsp8AtvilmeqsjlzhuLLdQ6UWSxMqRqE22TCWRXbA/d/7IAb12TB1mawg==
+"@abp/font-awesome@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0.tgz#9e4e9adc08dfca52c0a07d1608c5e5662675a4c9"
+ integrity sha512-NRxvM/dzvQC2Cj/F5i07XB/i6IVTmXcO9sOq6TWosWib0wGaPxRbCSjy8QUAYSD1QYaVQ30XMb3XXImaMGyd8A==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
"@fortawesome/fontawesome-free" "^6.5.2"
-"@abp/highlight.js@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-8.3.0-rc.1.tgz#14c1904f860543581440c67dc01fea109b61cccf"
- integrity sha512-lnJtMxTt9gkZ24ZZZ5bAMfK8T3Sbwe7QxyXfQ2+oEm2NosNNbug2hLOHtINdFThp1bDN/bD+h0yXAWNAxhDSPQ==
+"@abp/highlight.js@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-8.3.0.tgz#fabd11a8ef7cd0e379b4c9b359d66b4aa7585e30"
+ integrity sha512-SHvGXqQrZGuNmup32FisVHrWCdTJyEzHgp6y8Twx1FaP1e0hSN3QK6Jw4Do600ZKI9n5xCK+kMCpdJau8I6bIg==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
"@highlightjs/cdn-assets" "~11.9.0"
-"@abp/jquery-form@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0-rc.1.tgz#21025048f44028a5cb1ced7414cb48af00e91bff"
- integrity sha512-mVZzEJKbhiYmXK2yZRZAJwO5e7C2N0lj8ueOYPiFG6h4UKLbKPHQdIrkapyc88VirrELe1hnhJJbQ56dsQWeyg==
+"@abp/jquery-form@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0.tgz#fa2ad2fedbe3d3528ee94cbbd4f94d48f0cb5e4d"
+ integrity sha512-olP9FmpNVTbOIewsVua0moHVYXw4Sl3chFbvTDLG6vRBohLSjllUXfgY3UEIVWR1PCqnAg+iEJZl9NHB9iOLBg==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
jquery-form "^4.3.0"
-"@abp/jquery-validation-unobtrusive@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0-rc.1.tgz#63042715391ca63f273874ff66fca4b20330d31b"
- integrity sha512-EKQf733+HS9bIVQhMgAHYZfCY663GqNv8KUcCIuQOHPt5DWU49ygYhawkcYIzUKd2Gy9+ZtyWLkWmoBxTnwlmw==
+"@abp/jquery-validation-unobtrusive@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0.tgz#0992cdd33170df83c79aa3371038c0b30e451521"
+ integrity sha512-9hidjq8x8sTnP5O3K2b2x9NpxvPd9WB03ENR6OfvM89kfSmQapSvBZTlCu80YK9NaQJ6MLQRLYOCuc3GHcj3EQ==
dependencies:
- "@abp/jquery-validation" "~8.3.0-rc.1"
+ "@abp/jquery-validation" "~8.3.0"
jquery-validation-unobtrusive "^4.0.0"
-"@abp/jquery-validation@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0-rc.1.tgz#8c82189ba7c3614f7306c2bf958b3717a6a4e702"
- integrity sha512-Fr8AI//7iV743S6bw4ixE5qOu+af3HfZSivQJnYVVTbR/75gPqI/xRe6u/k82TJIBM7IaspQ4QdruMuvnJyBpQ==
+"@abp/jquery-validation@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0.tgz#bd6a72c6d86f116abe3b5d2adf3752bdbbcca887"
+ integrity sha512-6l5BZSa3N0Fou6Se7MfUSnI2dD4SYhZ2V988bgPJQ6p37XBOZ2OAj7LEIf5FSjtUzXjao/6/vqjkPNYreNikig==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
jquery-validation "^1.20.1"
-"@abp/jquery@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0-rc.1.tgz#a181c6749d58690b3265705959d8c818296896f3"
- integrity sha512-fXs35cDLAw66irfHsFIWD41RKzpLABkULLoMwxfB76nOVPdV7qlWrXoI2O/du3xhCqBqHR4fS8xjwE6kFvkdLQ==
+"@abp/jquery@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0.tgz#9be5ef2f769680226e6a1a981026590caf3b57ef"
+ integrity sha512-GsFY+n3EtS6B0pAoKd+xMnt5Dzi5bHvIbhLgDgfQfOBzAy3twGRWsPQ3nkuXXm8TppwujMNowU1oiLKPPm0AOA==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
jquery "~3.7.1"
-"@abp/jstree@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/jstree/-/jstree-8.3.0-rc.1.tgz#d9ad6511c403341464f1afeff5ab7c9ab39e0d53"
- integrity sha512-/nsP+RAlAWIkg23On6CA3bcDSU9dCjNDmNoHLa+ysMzCExpjn5zTuuA9jxPCgy1qkOmAwcExF2PrnyBbslWdzw==
+"@abp/jstree@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jstree/-/jstree-8.3.0.tgz#48054d14cd2f5ad255e5ddfb11facfae5902256a"
+ integrity sha512-9+0cLxIPo1pZJvYsmvo/lWWDI/yH2e9p7iQg/QukQsavvfZ/QNTDweCTI4o407lu66s6921UEZ+KnozvFvuAfg==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
jstree "^3.3.16"
-"@abp/lodash@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0-rc.1.tgz#32f8805031f73b9d5bdc338afe49739c4ebc3ce9"
- integrity sha512-UBGlG5+tFpyAPMuwpkY7K/g21c+d3Aq3HbFmcIilUEIsJ+yJqj95xhRh6t/LSwJCo5ntdSCgVC85q0kD0fQlQA==
+"@abp/lodash@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0.tgz#f5a0a496c999886f2d6999067bfac2e1f0c3969c"
+ integrity sha512-BiAsONbKR/RKG3WjRaMWVmhNe1ELEsykVq+ogG1Rhk3kwPbvze3TS8k2p0Lu/RC41/BmDUmJ5abg1pUMwkRT8w==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
lodash "^4.17.21"
-"@abp/luxon@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0-rc.1.tgz#df19773212502336c2caf6a8806b7647748f8f81"
- integrity sha512-1oPx0tGyFi58T0yv/pdqJpcIRWU6ej5Sv28fRgz3J6tHam3hVPtKJPK9Ajvn6+MNVDLuMUczgVtfWEOvO2Kqrg==
+"@abp/luxon@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0.tgz#7dd3f756be1605506e26f7ac76b80cc082a12d07"
+ integrity sha512-8gdI5BtXkVp0sFg89QVDe8AvgQ7Qfq4JCqz2PMrKPSATR3H8GD6BCaEYpRp6CNTCjVrQjGZdzKgUyea1D3dHbw==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
luxon "^3.4.4"
-"@abp/malihu-custom-scrollbar-plugin@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0-rc.1.tgz#b57086d708082ce45e1917aeca8c92029ebd805d"
- integrity sha512-4sa5e07EPW9IM7eQbvKtk78gd/bESYhTsl+BeWSKeqjj5wwwPYf4GIEvfJM7JVnhYwh1IPYDEkTv9QNYLczXKQ==
+"@abp/malihu-custom-scrollbar-plugin@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0.tgz#c88c132c3402bbb02054ca7d446051950f87a817"
+ integrity sha512-nd/mb6LJa6fMxal8PGcIjIRIoZ/UHCd01WDC9YI2H4wGCGx0CA0JyHso5oc/OEzJhUL8ujO/vYm9uLb7YahPtA==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
malihu-custom-scrollbar-plugin "^3.1.5"
-"@abp/markdown-it@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-8.3.0-rc.1.tgz#09a7eefbd82d73ef7c9837d7dc9cceb5712c968a"
- integrity sha512-7Np5ilN8hTloHPFF440apMKAVt4ambqLhGOSZvyoU0Bg2YoU8oAAPGfBLHwxlKZ4x4gKJY2S0bs1/kuFysfLqw==
+"@abp/markdown-it@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-8.3.0.tgz#d8ca44d277dbce804b2240371cbd4d01e7bfeb55"
+ integrity sha512-hrwh1M/KbOmZ826EbllU/bQFcQq+YskZMpKTIDhPj8FQTXsOIjsvlcNjaBcSCGwE3hHyiUG8h3qw1VjjTE/PmA==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
markdown-it "^14.1.0"
-"@abp/moment@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0-rc.1.tgz#0ba9d64ca6d7b454af7aaa63e54be267f333e1fe"
- integrity sha512-YbVEDg3m+D5KMcTCBEnor/tFgmk9IeL4pF/oChYQGXLeyohY7vfmK68owAnEDN61nCRXng9xykiZu2bLq829WA==
+"@abp/moment@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0.tgz#8e4f7a523ab76ef9e4cd96a399560bad38d38d1a"
+ integrity sha512-LywSsKuQ2GN/Btmle6CcTKa811zbvUWdC+RLQA792K9HyBs6LvN0qRRluEQZgplairRgh2pDOg8tdFlUERkv2w==
dependencies:
moment "^2.30.1"
-"@abp/prismjs@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-8.3.0-rc.1.tgz#82f98db7e3a5e5e535ecb0452c84a5fda57b5801"
- integrity sha512-kvO7fU9KfXNK44mL9QDtGuDD3ebiXTd5nKNxgrsneHhYsdNiWwXzqWpZlfs7t9nqSydLzqWkQZ7we01GoxeQ/g==
+"@abp/prismjs@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-8.3.0.tgz#0c87c63294d1452ed7152083d2fb6e70aa3aeae6"
+ integrity sha512-3wpwbqqlGRfQSLcBP+Qb2TKOoVGZVYYwOP6dP3So9ev8J5gFMDEizH9zLwRVHYrrsZZP8/etYnyZ0hn7ewuI5Q==
dependencies:
- "@abp/clipboard" "~8.3.0-rc.1"
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/clipboard" "~8.3.0"
+ "@abp/core" "~8.3.0"
prismjs "^1.29.0"
-"@abp/select2@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0-rc.1.tgz#3eb932e05987cc1e13f72decc9ae70d47801bf7d"
- integrity sha512-lZuJLiFcOEVj6cTPAA7ZfhE3v1LyivmMt8Tt7Dpvgybx2PDN1NtfLce2BCKb0MvsaTlfJMSK0ZLu3JpxCQ+Q/A==
+"@abp/select2@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0.tgz#ef4742fcd345394767f46180f61c6cabbd0b3867"
+ integrity sha512-bdLt2+ImxxpiZl4HGbYJpdDROQUT7/Z/+8A+6oJNacq3lNekdvufLYgTMxKru6zTbnd9j3HFKMOTE1eRjb9Xqg==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
select2 "^4.0.13"
-"@abp/slugify@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/slugify/-/slugify-8.3.0-rc.1.tgz#937f00193834d0cf2259d789f3ec532c2af5f2af"
- integrity sha512-4AY4tck6T5F+6apG+qSIJSkq7kfa9vETIZPx0Kbu36Dd5YE9z87b7fOTWlpDKsaoclhEipK3Ec5iRJo5vhmBqg==
+"@abp/slugify@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/slugify/-/slugify-8.3.0.tgz#ac061a40268437a10defef48045ddce8eb109035"
+ integrity sha512-YCNg+wiyx2Y+pQesQvsZKQBYj9kVc5041opCFRuwos3IbbHUCtOdzvrc11ZAIAaUOfN5EfGZ2MfVD3v18OH3DQ==
dependencies:
slugify "^1.6.6"
-"@abp/star-rating-svg@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/star-rating-svg/-/star-rating-svg-8.3.0-rc.1.tgz#db2d4799e1554fc5ae0c99dd202ea6e8a10c8a6c"
- integrity sha512-ClQJZCVlQOKzcwII6cBTiORgJ3FdoeGhmLphq0Kd1i0lIY1ebg9bDVpPcW2EcAwuDMLyCmYQQ4royGyN0sJG0A==
+"@abp/star-rating-svg@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/star-rating-svg/-/star-rating-svg-8.3.0.tgz#5a8d62eca5158a4bc9f827a610db5c93e6fc9e78"
+ integrity sha512-W7ds+IYw45M+HNVBPSBMH7Tn7edrxQ+elUgE8eEYdz9MzYoGxwIW97lzwDjr30LMR45+ITzcc6v8GwwF4jSR6w==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
star-rating-svg "^3.5.0"
-"@abp/sweetalert2@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0-rc.1.tgz#66d8b9ce287a71474ce37c217cd800e150a86138"
- integrity sha512-b6dZbc5/nYrUz5s+lAgi561XnsASa0ZJOn6f5W2Oakm9ULzqFndapKx5f+zHeJaNArpeGDh50AjQ+lcGGw83zQ==
+"@abp/sweetalert2@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0.tgz#a63020d57e44f7940817287d3d9676288bfb85aa"
+ integrity sha512-ooqPM4Z2v2scnMo5l8ycTmp6t/sW4sCsvIkJ4TyM876WLQJaZxJdOao4RQWuU+dVFr9zg8cOwqLH4q7UEiO6ww==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
sweetalert2 "^11.3.6"
-"@abp/timeago@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0-rc.1.tgz#d795b9cccb190f5d42f242727ac447fe03c30db3"
- integrity sha512-yJCA7PHmAxFxIvPq03iSx3LbIiDQls4AiVBO75103LEGokRUG9bg+iPA7GLkPpfNbnNgEJ7N7Gw6RQzMNRLCpA==
+"@abp/timeago@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0.tgz#b3b8d6927bf170f77af848bc1925e5ef6835bd55"
+ integrity sha512-Dd6xaUoF9Bp4F9WJnTsFBqY+Gt++UR7UmLvBZL/dvthkeNCu2I8MUsmshkUUjY0lIXpjZwefUOuyupQrgHXPMg==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
timeago "^1.6.7"
-"@abp/toastr@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0-rc.1.tgz#82c7f6566e604c2cf31555da3f9b0898df8a5541"
- integrity sha512-0nBM4nEvDlANVulk7EKoB4Lk/1fH+UgzPOyUOyemQZAWHgPhIpa4z5yiLkCeOxN1hu/CBEe+Jo7qJblsj+v7kQ==
+"@abp/toastr@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0.tgz#e68a2bd8f731e79034594bc2c736f7c66b3df1af"
+ integrity sha512-aWK/RaX/FmcEKhJLjsw1A0K2c04m2fRJkmo9NwzBCSscy6Msw9IMkqNWLiFDThMU8/qKzq7wq3Vmk/C0IpeAwA==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
toastr "^2.1.4"
-"@abp/tui-editor@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-8.3.0-rc.1.tgz#ce37f6456f9fc1964a9b6bd8358608ce9defbe9d"
- integrity sha512-jBCCM8iThBdYPRQpW56gdY5Z3hUlmiXSTiVixBfGT8vadznD8kbvIJ8Zo4c/CJNs71ybceiCi3WzRQYiE0hTew==
+"@abp/tui-editor@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-8.3.0.tgz#188360644140f3173b0347c1ce883612a5eb9e18"
+ integrity sha512-GNFuKvAlwihuzg91dekGZ5s5aLKySROHbLujanzaco1nfRvWehx+J+oCP0rHzQ3++DpxEXhlz05qW9I1gCEAKA==
dependencies:
- "@abp/jquery" "~8.3.0-rc.1"
- "@abp/prismjs" "~8.3.0-rc.1"
+ "@abp/jquery" "~8.3.0"
+ "@abp/prismjs" "~8.3.0"
-"@abp/uppy@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/uppy/-/uppy-8.3.0-rc.1.tgz#bdcc90c5aa83bf07608175285c48aad4f2c2e028"
- integrity sha512-cC9f8rMSQ14gk/G8d29qHtORUyyYR6F7IXARHDYRlDPI6IxZ58eGMDR0PeE3ZBOpuqltX1muwqKo9R3uwe0img==
+"@abp/uppy@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/uppy/-/uppy-8.3.0.tgz#4b19ae7ed431276415195c19e94a24841232a7aa"
+ integrity sha512-ob9dVKxCnnxP3VarSIivx5++7KzKpUGA8qFI+tOpTiL2uPI71ERo4neOnCC1USa03bWDEo24cLWz3/CNGVIWrA==
dependencies:
- "@abp/core" "~8.3.0-rc.1"
+ "@abp/core" "~8.3.0"
uppy "^3.27.0"
-"@abp/utils@~8.3.0-rc.1":
- version "8.3.0-rc.1"
- resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0-rc.1.tgz#7db324059f8f9c64fbb5d5a6f0c2384896ca1928"
- integrity sha512-Eg4Lwv4DEDr5mfG/8ghwMPdphywZBZIxWTJCZnCWngDQ9fEn/bnYuL1WkvbVvKd10A6030wHEJXFJj2OuNdi3Q==
+"@abp/utils@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0.tgz#96ae9266ad4d833fd9d723acef7fc85fabf618d9"
+ integrity sha512-w/XAqza4Z8wBWRoj5uPNKbd1/bE9L/uUWk6EUSBKmljMRryWQBmaPkb1XgvrOMQIbyyF60tUvvipapQLPVh6hw==
dependencies:
just-compare "^2.3.0"
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo.CmsKit.Admin.Application.Contracts.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo.CmsKit.Admin.Application.Contracts.abppkg.analyze.json
index b89faf42fe..1be9d68e1d 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo.CmsKit.Admin.Application.Contracts.abppkg.analyze.json
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo.CmsKit.Admin.Application.Contracts.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.CmsKit.Admin.Application.Contracts",
- "hash": "ff0f4d058f512abcca9b3b61a7bb300e",
+ "hash": "",
"contents": [
{
"namespace": "Volo.CmsKit.Admin",
@@ -60,7 +60,7 @@
"summary": null
},
{
- "displayName": "Comment Management",
+ "displayName": "Comment management",
"isEnabled": true,
"contentType": "permission",
"name": "CmsKit.Comments",
@@ -74,7 +74,21 @@
"summary": null
},
{
- "displayName": "Tag Management",
+ "displayName": "Permission:Comments.Update",
+ "isEnabled": true,
+ "contentType": "permission",
+ "name": "CmsKit.Comments.Update",
+ "summary": null
+ },
+ {
+ "displayName": "Permission:Comments.SettingManagement",
+ "isEnabled": true,
+ "contentType": "permission",
+ "name": "CmsKit.Comments.SettingManagement",
+ "summary": null
+ },
+ {
+ "displayName": "Tag management",
"isEnabled": true,
"contentType": "permission",
"name": "CmsKit.Tags",
@@ -102,7 +116,7 @@
"summary": null
},
{
- "displayName": "Page Management",
+ "displayName": "Page management",
"isEnabled": true,
"contentType": "permission",
"name": "CmsKit.Pages",
@@ -130,14 +144,14 @@
"summary": null
},
{
- "displayName": "Set As Home Page",
+ "displayName": "Set as home page",
"isEnabled": true,
"contentType": "permission",
"name": "CmsKit.Pages.SetAsHomePage",
"summary": null
},
{
- "displayName": "Blog Management",
+ "displayName": "Blog management",
"isEnabled": true,
"contentType": "permission",
"name": "CmsKit.Blogs",
@@ -172,7 +186,7 @@
"summary": null
},
{
- "displayName": "Blog Post Management",
+ "displayName": "Blog post management",
"isEnabled": true,
"contentType": "permission",
"name": "CmsKit.BlogPosts",
@@ -207,7 +221,7 @@
"summary": null
},
{
- "displayName": "Menu Management",
+ "displayName": "Menu management",
"isEnabled": true,
"contentType": "permission",
"name": "CmsKit.Menus",
@@ -235,7 +249,7 @@
"summary": null
},
{
- "displayName": "Global Resources",
+ "displayName": "Global resources",
"isEnabled": true,
"contentType": "permission",
"name": "CmsKit.GlobalResources",
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo.CmsKit.Admin.Application.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo.CmsKit.Admin.Application.abppkg.analyze.json
index e58e8fb34a..cb49ddb813 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo.CmsKit.Admin.Application.abppkg.analyze.json
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo.CmsKit.Admin.Application.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.CmsKit.Admin.Application",
- "hash": "1cf0db9a201c7d8143e4f8efb6218d59",
+ "hash": "",
"contents": [
{
"namespace": "Volo.CmsKit.Admin",
@@ -136,6 +136,7 @@
"methods": [
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Admin.Tags",
"name": "AddTagToEntityAsync",
"summary": null,
"isAsync": true,
@@ -152,6 +153,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Admin.Tags",
"name": "RemoveTagFromEntityAsync",
"summary": null,
"isAsync": true,
@@ -168,6 +170,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Admin.Tags",
"name": "SetEntityTagsAsync",
"summary": null,
"isAsync": true,
@@ -296,6 +299,7 @@
"methods": [
{
"returnType": "TagDto",
+ "namespace": "Volo.CmsKit.Admin.Tags",
"name": "CreateAsync",
"summary": null,
"isAsync": true,
@@ -312,6 +316,7 @@
},
{
"returnType": "TagDto",
+ "namespace": "Volo.CmsKit.Admin.Tags",
"name": "UpdateAsync",
"summary": null,
"isAsync": true,
@@ -333,6 +338,7 @@
},
{
"returnType": "List",
+ "namespace": "Volo.CmsKit.Admin.Tags",
"name": "GetTagDefinitionsAsync",
"summary": null,
"isAsync": true,
@@ -343,6 +349,7 @@
},
{
"returnType": "TagDto",
+ "namespace": "Volo.CmsKit.Admin.Tags",
"name": "GetAsync",
"summary": null,
"isAsync": true,
@@ -359,6 +366,7 @@
},
{
"returnType": "PagedResultDto",
+ "namespace": "Volo.CmsKit.Admin.Tags",
"name": "GetListAsync",
"summary": null,
"isAsync": true,
@@ -375,6 +383,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Admin.Tags",
"name": "DeleteAsync",
"summary": null,
"isAsync": true,
@@ -497,6 +506,7 @@
"methods": [
{
"returnType": "PageDto",
+ "namespace": "Volo.CmsKit.Admin.Pages",
"name": "GetAsync",
"summary": null,
"isAsync": true,
@@ -513,6 +523,7 @@
},
{
"returnType": "PagedResultDto",
+ "namespace": "Volo.CmsKit.Admin.Pages",
"name": "GetListAsync",
"summary": null,
"isAsync": true,
@@ -529,6 +540,7 @@
},
{
"returnType": "PageDto",
+ "namespace": "Volo.CmsKit.Admin.Pages",
"name": "CreateAsync",
"summary": null,
"isAsync": true,
@@ -545,6 +557,7 @@
},
{
"returnType": "PageDto",
+ "namespace": "Volo.CmsKit.Admin.Pages",
"name": "UpdateAsync",
"summary": null,
"isAsync": true,
@@ -566,6 +579,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Admin.Pages",
"name": "DeleteAsync",
"summary": null,
"isAsync": true,
@@ -582,6 +596,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Admin.Pages",
"name": "SetAsHomePageAsync",
"summary": null,
"isAsync": true,
@@ -668,6 +683,7 @@
"methods": [
{
"returnType": "ListResultDto",
+ "namespace": "Volo.CmsKit.Admin.Menus",
"name": "GetListAsync",
"summary": null,
"isAsync": true,
@@ -677,7 +693,8 @@
"parameters": []
},
{
- "returnType": "MenuItemDto",
+ "returnType": "MenuItemWithDetailsDto",
+ "namespace": "Volo.CmsKit.Admin.Menus",
"name": "GetAsync",
"summary": null,
"isAsync": true,
@@ -694,6 +711,7 @@
},
{
"returnType": "MenuItemDto",
+ "namespace": "Volo.CmsKit.Admin.Menus",
"name": "CreateAsync",
"summary": null,
"isAsync": true,
@@ -710,6 +728,7 @@
},
{
"returnType": "MenuItemDto",
+ "namespace": "Volo.CmsKit.Admin.Menus",
"name": "UpdateAsync",
"summary": null,
"isAsync": true,
@@ -731,6 +750,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Admin.Menus",
"name": "DeleteAsync",
"summary": null,
"isAsync": true,
@@ -747,6 +767,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Admin.Menus",
"name": "MoveMenuItemAsync",
"summary": null,
"isAsync": true,
@@ -768,6 +789,7 @@
},
{
"returnType": "PagedResultDto",
+ "namespace": "Volo.CmsKit.Admin.Menus",
"name": "GetPageLookupAsync",
"summary": null,
"isAsync": true,
@@ -854,6 +876,7 @@
"methods": [
{
"returnType": "MediaDescriptorDto",
+ "namespace": "Volo.CmsKit.Admin.MediaDescriptors",
"name": "CreateAsync",
"summary": null,
"isAsync": true,
@@ -875,6 +898,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Admin.MediaDescriptors",
"name": "DeleteAsync",
"summary": null,
"isAsync": true,
@@ -961,6 +985,7 @@
"methods": [
{
"returnType": "GlobalResourcesDto",
+ "namespace": "Volo.CmsKit.Admin.GlobalResources",
"name": "GetAsync",
"summary": null,
"isAsync": true,
@@ -971,6 +996,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Admin.GlobalResources",
"name": "SetGlobalResourcesAsync",
"summary": null,
"isAsync": true,
@@ -1057,6 +1083,7 @@
"methods": [
{
"returnType": "PagedResultDto",
+ "namespace": "Volo.CmsKit.Admin.Comments",
"name": "GetListAsync",
"summary": null,
"isAsync": true,
@@ -1073,6 +1100,7 @@
},
{
"returnType": "CommentWithAuthorDto",
+ "namespace": "Volo.CmsKit.Admin.Comments",
"name": "GetAsync",
"summary": null,
"isAsync": true,
@@ -1089,6 +1117,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Admin.Comments",
"name": "DeleteAsync",
"summary": null,
"isAsync": true,
@@ -1102,6 +1131,56 @@
"isOptional": false
}
]
+ },
+ {
+ "returnType": "Void",
+ "namespace": "Volo.CmsKit.Admin.Comments",
+ "name": "UpdateApprovalStatusAsync",
+ "summary": null,
+ "isAsync": true,
+ "isPublic": true,
+ "isPrivate": false,
+ "isStatic": false,
+ "parameters": [
+ {
+ "type": "Guid",
+ "name": "id",
+ "isOptional": false
+ },
+ {
+ "type": "CommentApprovalDto",
+ "name": "input",
+ "isOptional": false
+ }
+ ]
+ },
+ {
+ "returnType": "Void",
+ "namespace": "Volo.CmsKit.Admin.Comments",
+ "name": "UpdateSettingsAsync",
+ "summary": null,
+ "isAsync": true,
+ "isPublic": true,
+ "isPrivate": false,
+ "isStatic": false,
+ "parameters": [
+ {
+ "type": "CommentSettingsDto",
+ "name": "input",
+ "isOptional": false
+ }
+ ]
+ },
+ {
+ "returnType": "Int32",
+ "namespace": "Volo.CmsKit.Admin.Comments",
+ "name": "GetWaitingCountAsync",
+ "summary": null,
+ "isAsync": true,
+ "isPublic": true,
+ "isPrivate": false,
+ "isStatic": false,
+ "parameters": []
}
],
"contentType": "applicationService",
@@ -1217,6 +1296,7 @@
"methods": [
{
"returnType": "BlogDto",
+ "namespace": "Volo.CmsKit.Admin.Blogs",
"name": "GetAsync",
"summary": null,
"isAsync": true,
@@ -1233,6 +1313,7 @@
},
{
"returnType": "PagedResultDto",
+ "namespace": "Volo.CmsKit.Admin.Blogs",
"name": "GetListAsync",
"summary": null,
"isAsync": true,
@@ -1249,6 +1330,7 @@
},
{
"returnType": "BlogDto",
+ "namespace": "Volo.CmsKit.Admin.Blogs",
"name": "CreateAsync",
"summary": null,
"isAsync": true,
@@ -1265,6 +1347,7 @@
},
{
"returnType": "BlogDto",
+ "namespace": "Volo.CmsKit.Admin.Blogs",
"name": "UpdateAsync",
"summary": null,
"isAsync": true,
@@ -1286,6 +1369,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Admin.Blogs",
"name": "DeleteAsync",
"summary": null,
"isAsync": true,
@@ -1372,6 +1456,7 @@
"methods": [
{
"returnType": "List",
+ "namespace": "Volo.CmsKit.Admin.Blogs",
"name": "GetListAsync",
"summary": null,
"isAsync": true,
@@ -1388,6 +1473,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Admin.Blogs",
"name": "SetAsync",
"summary": null,
"isAsync": true,
@@ -1515,6 +1601,7 @@
"methods": [
{
"returnType": "BlogPostDto",
+ "namespace": "Volo.CmsKit.Admin.Blogs",
"name": "CreateAsync",
"summary": null,
"isAsync": true,
@@ -1531,6 +1618,7 @@
},
{
"returnType": "BlogPostDto",
+ "namespace": "Volo.CmsKit.Admin.Blogs",
"name": "UpdateAsync",
"summary": null,
"isAsync": true,
@@ -1552,6 +1640,7 @@
},
{
"returnType": "BlogPostDto",
+ "namespace": "Volo.CmsKit.Admin.Blogs",
"name": "GetAsync",
"summary": null,
"isAsync": true,
@@ -1568,6 +1657,7 @@
},
{
"returnType": "PagedResultDto",
+ "namespace": "Volo.CmsKit.Admin.Blogs",
"name": "GetListAsync",
"summary": null,
"isAsync": true,
@@ -1584,6 +1674,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Admin.Blogs",
"name": "DeleteAsync",
"summary": null,
"isAsync": true,
@@ -1600,6 +1691,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Admin.Blogs",
"name": "PublishAsync",
"summary": null,
"isAsync": true,
@@ -1616,6 +1708,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Admin.Blogs",
"name": "DraftAsync",
"summary": null,
"isAsync": true,
@@ -1632,6 +1725,7 @@
},
{
"returnType": "BlogPostDto",
+ "namespace": "Volo.CmsKit.Admin.Blogs",
"name": "CreateAndPublishAsync",
"summary": null,
"isAsync": true,
@@ -1648,6 +1742,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Admin.Blogs",
"name": "SendToReviewAsync",
"summary": null,
"isAsync": true,
@@ -1664,6 +1759,7 @@
},
{
"returnType": "BlogPostDto",
+ "namespace": "Volo.CmsKit.Admin.Blogs",
"name": "CreateAndSendToReviewAsync",
"summary": null,
"isAsync": true,
@@ -1680,6 +1776,7 @@
},
{
"returnType": "Boolean",
+ "namespace": "Volo.CmsKit.Admin.Blogs",
"name": "HasBlogPostWaitingForReviewAsync",
"summary": null,
"isAsync": true,
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/Volo.CmsKit.Admin.HttpApi.Client.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/Volo.CmsKit.Admin.HttpApi.Client.abppkg.analyze.json
index 5f9d12dd8c..15d3a881b5 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/Volo.CmsKit.Admin.HttpApi.Client.abppkg.analyze.json
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/Volo.CmsKit.Admin.HttpApi.Client.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.CmsKit.Admin.HttpApi.Client",
- "hash": "ef3894ffa45c8acb929d4feba96f8075",
+ "hash": "",
"contents": [
{
"namespace": "Volo.CmsKit.Admin",
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo.CmsKit.Admin.HttpApi.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo.CmsKit.Admin.HttpApi.abppkg.analyze.json
index a616d94e35..e18611bd30 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo.CmsKit.Admin.HttpApi.abppkg.analyze.json
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo.CmsKit.Admin.HttpApi.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.CmsKit.Admin.HttpApi",
- "hash": "5d180189476676a5483931264591c077",
+ "hash": "",
"contents": [
{
"namespace": "Volo.CmsKit.Admin",
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Volo.CmsKit.Admin.Web.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Volo.CmsKit.Admin.Web.abppkg.analyze.json
index 87cdbecc70..b8b9d3e51e 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Volo.CmsKit.Admin.Web.abppkg.analyze.json
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Volo.CmsKit.Admin.Web.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.CmsKit.Admin.Web",
- "hash": "fa6d7b5a529c2c76386141dc3cb12bba",
+ "hash": "",
"contents": [
{
"namespace": "Volo.CmsKit.Admin.Web",
@@ -63,6 +63,132 @@
"contentType": "abpModule",
"name": "CmsKitAdminWebModule",
"summary": null
+ },
+ {
+ "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Tags",
+ "contentType": "webPage",
+ "name": "CreateModalModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Tags",
+ "contentType": "webPage",
+ "name": "EditModalModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Tags",
+ "contentType": "webPage",
+ "name": "IndexModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Pages",
+ "contentType": "webPage",
+ "name": "CreateModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Pages",
+ "contentType": "webPage",
+ "name": "IndexModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Pages",
+ "contentType": "webPage",
+ "name": "UpdateModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems",
+ "contentType": "webPage",
+ "name": "CreateModalModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems",
+ "contentType": "webPage",
+ "name": "IndexModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems",
+ "contentType": "webPage",
+ "name": "UpdateModalModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.GlobalResources",
+ "contentType": "webPage",
+ "name": "IndexModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Contents",
+ "contentType": "webPage",
+ "name": "AddWidgetModal",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Comments",
+ "contentType": "webPage",
+ "name": "DetailsModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Comments",
+ "contentType": "webPage",
+ "name": "IndexModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Comments.Approve",
+ "contentType": "webPage",
+ "name": "IndexModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Blogs",
+ "contentType": "webPage",
+ "name": "CreateModalModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Blogs",
+ "contentType": "webPage",
+ "name": "FeaturesModalModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Blogs",
+ "contentType": "webPage",
+ "name": "IndexModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.Blogs",
+ "contentType": "webPage",
+ "name": "UpdateModalModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.BlogPosts",
+ "contentType": "webPage",
+ "name": "CreateModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.BlogPosts",
+ "contentType": "webPage",
+ "name": "IndexModel",
+ "summary": null
+ },
+ {
+ "namespace": "Volo.CmsKit.Admin.Web.Pages.CmsKit.BlogPosts",
+ "contentType": "webPage",
+ "name": "UpdateModel",
+ "summary": null
}
]
}
\ No newline at end of file
diff --git a/modules/cms-kit/src/Volo.CmsKit.Application.Contracts/Volo.CmsKit.Application.Contracts.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Application.Contracts/Volo.CmsKit.Application.Contracts.abppkg.analyze.json
index 31c2e8b638..f99448fb3a 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Application.Contracts/Volo.CmsKit.Application.Contracts.abppkg.analyze.json
+++ b/modules/cms-kit/src/Volo.CmsKit.Application.Contracts/Volo.CmsKit.Application.Contracts.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.CmsKit.Application.Contracts",
- "hash": "66c9cd5f35e614372742f30cffd8bd6f",
+ "hash": "",
"contents": [
{
"namespace": "Volo.CmsKit",
diff --git a/modules/cms-kit/src/Volo.CmsKit.Application/Volo.CmsKit.Application.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Application/Volo.CmsKit.Application.abppkg.analyze.json
index 176ef47816..f9241cd762 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Application/Volo.CmsKit.Application.abppkg.analyze.json
+++ b/modules/cms-kit/src/Volo.CmsKit.Application/Volo.CmsKit.Application.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.CmsKit.Application",
- "hash": "00e09a7a3302312d77b39946caa4bfeb",
+ "hash": "",
"contents": [
{
"namespace": "Volo.CmsKit",
diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo.CmsKit.Common.Application.Contracts.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo.CmsKit.Common.Application.Contracts.abppkg.analyze.json
index 3c7c768c62..83c5e5ef19 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo.CmsKit.Common.Application.Contracts.abppkg.analyze.json
+++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo.CmsKit.Common.Application.Contracts.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.CmsKit.Common.Application.Contracts",
- "hash": "784cb8875b468f63331845f2e59b803c",
+ "hash": "",
"contents": [
{
"namespace": "Volo.CmsKit",
diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo.CmsKit.Common.Application.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo.CmsKit.Common.Application.abppkg.analyze.json
index cc91790057..97e0500737 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo.CmsKit.Common.Application.abppkg.analyze.json
+++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo.CmsKit.Common.Application.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.CmsKit.Common.Application",
- "hash": "9c83bf387d563350ffb80d42d2884a92",
+ "hash": "",
"contents": [
{
"namespace": "Volo.CmsKit",
@@ -141,6 +141,7 @@
"methods": [
{
"returnType": "List",
+ "namespace": "Volo.CmsKit.Tags",
"name": "GetAllRelatedTagsAsync",
"summary": null,
"isAsync": true,
@@ -159,6 +160,28 @@
"isOptional": false
}
]
+ },
+ {
+ "returnType": "List",
+ "namespace": "Volo.CmsKit.Tags",
+ "name": "GetPopularTagsAsync",
+ "summary": null,
+ "isAsync": true,
+ "isPublic": true,
+ "isPrivate": false,
+ "isStatic": false,
+ "parameters": [
+ {
+ "type": "String",
+ "name": "entityType",
+ "isOptional": false
+ },
+ {
+ "type": "Int32",
+ "name": "maxCount",
+ "isOptional": false
+ }
+ ]
}
],
"contentType": "applicationService",
@@ -232,6 +255,7 @@
"methods": [
{
"returnType": "RemoteStreamContent",
+ "namespace": "Volo.CmsKit.MediaDescriptors",
"name": "DownloadAsync",
"summary": null,
"isAsync": true,
@@ -318,6 +342,7 @@
"methods": [
{
"returnType": "BlogFeatureDto",
+ "namespace": "Volo.CmsKit.Blogs",
"name": "GetOrDefaultAsync",
"summary": null,
"isAsync": true,
diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/BlogFeatureClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/BlogFeatureClientProxy.Generated.cs
deleted file mode 100644
index 3f9d502147..0000000000
--- a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/BlogFeatureClientProxy.Generated.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-// This file is automatically generated by ABP framework to use MVC Controllers from CSharp
-using System;
-using System.Threading.Tasks;
-using Volo.Abp.Application.Dtos;
-using Volo.Abp.Http.Client;
-using Volo.Abp.Http.Modeling;
-using Volo.Abp.DependencyInjection;
-using Volo.Abp.Http.Client.ClientProxying;
-using Volo.CmsKit.Blogs;
-
-// ReSharper disable once CheckNamespace
-namespace Volo.CmsKit.Blogs.ClientProxies;
-
-[Dependency(ReplaceServices = true)]
-[ExposeServices(typeof(IBlogFeatureAppService), typeof(BlogFeatureClientProxy))]
-public partial class BlogFeatureClientProxy : ClientProxyBase, IBlogFeatureAppService
-{
- public virtual async Task GetOrDefaultAsync(Guid blogId, string featureName)
- {
- return await RequestAsync(nameof(GetOrDefaultAsync), new ClientProxyRequestTypeValue
- {
- { typeof(Guid), blogId },
- { typeof(string), featureName }
- });
- }
-}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/BlogFeatureClientProxy.cs b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/BlogFeatureClientProxy.cs
deleted file mode 100644
index 61650128a9..0000000000
--- a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/BlogFeatureClientProxy.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-// This file is part of BlogFeatureClientProxy, you can customize it here
-// ReSharper disable once CheckNamespace
-namespace Volo.CmsKit.Blogs.ClientProxies;
-
-public partial class BlogFeatureClientProxy
-{
-}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/MediaDescriptorClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/MediaDescriptorClientProxy.Generated.cs
deleted file mode 100644
index d916a1e8d7..0000000000
--- a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/MediaDescriptorClientProxy.Generated.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-// This file is automatically generated by ABP framework to use MVC Controllers from CSharp
-using System;
-using System.Threading.Tasks;
-using Volo.Abp.Application.Dtos;
-using Volo.Abp.Http.Client;
-using Volo.Abp.Http.Modeling;
-using Volo.Abp.DependencyInjection;
-using Volo.Abp.Http.Client.ClientProxying;
-using Volo.CmsKit.MediaDescriptors;
-using Volo.Abp.Content;
-
-// ReSharper disable once CheckNamespace
-namespace Volo.CmsKit.MediaDescriptors.ClientProxies;
-
-[Dependency(ReplaceServices = true)]
-[ExposeServices(typeof(IMediaDescriptorAppService), typeof(MediaDescriptorClientProxy))]
-public partial class MediaDescriptorClientProxy : ClientProxyBase, IMediaDescriptorAppService
-{
- public virtual async Task DownloadAsync(Guid id)
- {
- return await RequestAsync(nameof(DownloadAsync), new ClientProxyRequestTypeValue
- {
- { typeof(Guid), id }
- });
- }
-}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/MediaDescriptorClientProxy.cs b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/MediaDescriptorClientProxy.cs
deleted file mode 100644
index cf3e084ddc..0000000000
--- a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/ClientProxies/MediaDescriptorClientProxy.cs
+++ /dev/null
@@ -1,7 +0,0 @@
-// This file is part of MediaDescriptorClientProxy, you can customize it here
-// ReSharper disable once CheckNamespace
-namespace Volo.CmsKit.MediaDescriptors.ClientProxies;
-
-public partial class MediaDescriptorClientProxy
-{
-}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/Volo.CmsKit.Common.HttpApi.Client.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/Volo.CmsKit.Common.HttpApi.Client.abppkg.analyze.json
index 07cf87050b..878f2a794c 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/Volo.CmsKit.Common.HttpApi.Client.abppkg.analyze.json
+++ b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi.Client/Volo.CmsKit.Common.HttpApi.Client.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.CmsKit.Common.HttpApi.Client",
- "hash": "e7ad713defbe5999262cd31144491fae",
+ "hash": "",
"contents": [
{
"namespace": "Volo.CmsKit",
diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo.CmsKit.Common.HttpApi.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo.CmsKit.Common.HttpApi.abppkg.analyze.json
index 9fe40718c1..d89526e298 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo.CmsKit.Common.HttpApi.abppkg.analyze.json
+++ b/modules/cms-kit/src/Volo.CmsKit.Common.HttpApi/Volo.CmsKit.Common.HttpApi.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.CmsKit.Common.HttpApi",
- "hash": "a5120d7c193b3e67658db2321ee7f3cf",
+ "hash": "",
"contents": [
{
"namespace": "Volo.CmsKit",
diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Volo.CmsKit.Common.Web.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Volo.CmsKit.Common.Web.abppkg.analyze.json
index 4fb7b3751a..56c251adff 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Volo.CmsKit.Common.Web.abppkg.analyze.json
+++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Volo.CmsKit.Common.Web.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.CmsKit.Common.Web",
- "hash": "f301d4e5431930d0c906428b835e9b6d",
+ "hash": "",
"contents": [
{
"namespace": "Volo.CmsKit.Web",
@@ -19,6 +19,11 @@
"declaringAssemblyName": "Volo.Abp.AutoMapper",
"namespace": "Volo.Abp.AutoMapper",
"name": "AbpAutoMapperModule"
+ },
+ {
+ "declaringAssemblyName": "Volo.Abp.SettingManagement.Web",
+ "namespace": "Volo.Abp.SettingManagement.Web",
+ "name": "AbpSettingManagementWebModule"
}
],
"implementingInterfaces": [
diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo.CmsKit.Domain.Shared.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo.CmsKit.Domain.Shared.abppkg.analyze.json
index 5ae7c0efe3..a748e67a44 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo.CmsKit.Domain.Shared.abppkg.analyze.json
+++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo.CmsKit.Domain.Shared.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.CmsKit.Domain.Shared",
- "hash": "bdbefadcd3677ae51a666b11c07bee07",
+ "hash": "",
"contents": [
{
"namespace": "Volo.CmsKit",
@@ -68,6 +68,17 @@
"contentType": "abpModule",
"name": "CmsKitDomainSharedModule",
"summary": null
+ },
+ {
+ "defaultValue": "false",
+ "displayName": "CmsKit.Comments.RequireApprovement",
+ "description": "",
+ "isVisibleToClient": true,
+ "isInherited": true,
+ "isEncrypted": false,
+ "contentType": "setting",
+ "name": "CmsKit.Comments.RequireApprovement",
+ "summary": null
}
]
}
\ No newline at end of file
diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sv.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sv.json
new file mode 100644
index 0000000000..6e8962915b
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sv.json
@@ -0,0 +1,259 @@
+{
+ "culture": "sv",
+ "texts": {
+ "AddSubMenuItem": "LĂ€gg till undermenyobjekt",
+ "AreYouSure": "Ăr du sĂ€ker?",
+ "BlogDeletionConfirmationMessage": "Bloggen '{0}' kommer att raderas. Ăr du sĂ€ker pĂ„ det?",
+ "BlogFeatureNotAvailable": "Denna funktion Àr inte tillgÀnglig nu. Aktivera med 'GlobalFeatureManager' för att anvÀnda den.",
+ "BlogId": "Blogg",
+ "BlogPostDeletionConfirmationMessage": "BlogginlĂ€gget \"{0}\" kommer att raderas. Ăr du sĂ€ker pĂ„ det?",
+ "BlogPosts": "BlogginlÀgg",
+ "Blogs": "Blogg",
+ "ChoosePreference": "VĂ€lj preferens...",
+ "Cms": "CMS",
+ "CmsKit.Comments": "Kommentarer",
+ "CmsKit.Ratings": "Betyg",
+ "CmsKit.Reactions": "Reaktioner",
+ "CmsKit.Tags": "Etiketter",
+ "CmsKit:0002": "InnehÄllet finns redan!",
+ "CmsKit:0003": "Entiteten {0} Àr inte taggbar.",
+ "CmsKit:Blog:0001": "Den angivna sluggen ({Slug}) finns redan!",
+ "CmsKit:BlogPost:0001": "Den angivna sluggen finns redan!",
+ "CmsKit:Comments:0001": "Enheten {EntityType} Àr inte kommenterbar.",
+ "CmsKit:Media:0001": "'{Namn}' Àr inte ett giltigt medienamn.",
+ "CmsKit:Media:0002": "Enheten kan inte ha media.",
+ "CmsKit:Page:0001": "Den angivna webbadressen ({Slug}) finns redan. VÀnligen försök med en annan webbadress.",
+ "CmsKit:Rating:0001": "Enheten {EntityType} kan inte betygsÀttas.",
+ "CmsKit:Reaction:0001": "Enheten {EntityType} kan inte ha reaktioner.",
+ "CmsKit:Tag:0002": "Enheten Àr inte taggbar!",
+ "CmsKit:MarkedItem:ToggleConfirmation": "Ăr du sĂ€ker pĂ„ att du vill vĂ€xla det markerade objektet?",
+ "CommentAuthorizationExceptionMessage": "Dessa kommentarer Àr inte tillÄtna för offentlig visning.",
+ "CmsKit:Modals:Login": "Logga in",
+ "CmsKit:Modals:LoginModalDefaultMessage": "VÀnligen logga in för att fortsÀtta!",
+ "CmsKit:Modals:YouAreNotAuthenticated": "Denna ÄtgÀrd Àr inte auktoriserad för dig.",
+ "CommentDeletionConfirmationMessage": "Denna kommentar och alla svar kommer att raderas!",
+ "CmsKit:MarkedItem:0001": "Entiteten {EntityType} kan inte markeras.",
+ "CmsKit:MarkedItem:0002": "Ingen definition hittades för entitetstypen '{EntityType}'.",
+ "CmsKit:MarkedItem:0003": "Det finns redan en definition för entitetstypen '{EntityType}'. Varje entitetstyp bör endast ha en definition.",
+ "CmsKit:MarkedItem:LoginMessage": "VÀnligen logga in för att markera denna artikel.",
+ "Comments": "Kommentarer",
+ "Content": "InnehÄll",
+ "ContentDeletionConfirmationMessage": "Ăr du sĂ€ker pĂ„ att du vill radera detta innehĂ„ll?",
+ "Contents": "InnehÄll",
+ "CoverImage": "Omslagsbild",
+ "CreateBlogPostPage": "Nytt blogginlÀgg",
+ "CreationTime": "Skapelsetid",
+ "Delete": "Radera",
+ "Detail": "Detalj",
+ "Details": "Detaljer",
+ "DisplayName": "Visa namn",
+ "DoYouPreferAdditionalEmails": "Vill du ha ytterligare e-postmeddelanden?",
+ "Edit": "Redigera",
+ "EndDate": "Slutdatum",
+ "EntityId": "Entitet Id",
+ "EntityType": "Typ av enhet",
+ "ExportCSV": "Exportera CSV",
+ "Features": "Funktioner",
+ "GenericDeletionConfirmationMessage": "Ăr du sĂ€ker att du vill ta bort \"{0}\"?",
+ "IsActive": "Aktiv",
+ "LastModification": "Senaste modifiering",
+ "LastModificationTime": "Tidpunkt för senaste modifiering",
+ "LoginToAddComment": "Logga in för att lÀgga till en kommentar",
+ "LoginToRate": "Logga in för att betygsÀtta",
+ "LoginToReact": "Logga in för att reagera",
+ "LoginToReply": "Logga in för att svara",
+ "MainMenu": "Huvudmeny",
+ "MakeMainMenu": "Skapa huvudmeny",
+ "Menu:CMS": "CMS",
+ "Menus": "Menyer",
+ "MenuDeletionConfirmationMessage": "Menyn \"{0}\" kommer att raderas. Ăr du sĂ€ker pĂ„ det?",
+ "MenuItemDeletionConfirmationMessage": "Ăr du sĂ€ker pĂ„ att du vill ta bort det hĂ€r menyalternativet?",
+ "MenuItemMoveConfirmMessage": "Ăr du sĂ€ker pĂ„ att du vill flytta '{0}' under '{1}'?",
+ "MenuItems": "Menyalternativ",
+ "Message": "Meddelande",
+ "MessageDeletionConfirmationMessage": "Denna kommentar kommer att raderas helt.",
+ "NewBlog": "Ny blogg",
+ "NewBlogPost": "Nytt blogginlÀgg",
+ "NewMenu": "Ny meny",
+ "NewMenuItem": "Nytt menyalternativ i rotmenyn",
+ "NewPage": "Ny sida",
+ "NewTag": "Ny etikett",
+ "NoMenuItems": "Det finns inget menyalternativ Ànnu!",
+ "OK": "OK",
+ "PageDeletionConfirmationMessage": "Ăr du sĂ€ker pĂ„ att du vill radera den hĂ€r sidan?",
+ "PageId": "Sidan",
+ "Pages": "Sidor",
+ "PageSlugInformation": "Sluggen anvÀnds pÄ webbadressen. Din webbadress kommer att vara \"/{{slug}}\".",
+ "BlogSlugInformation": "Sluggen anvÀnds pÄ webbadressen. Din webbadress kommer att vara \"/{0}/{{slug}}\".",
+ "Permission:BlogManagement": "Hantering av bloggar",
+ "Permission:BlogManagement.Create": "Skapa",
+ "Permission:BlogManagement.Delete": "Radera",
+ "Permission:BlogManagement.Features": "Funktioner",
+ "Permission:BlogManagement.Update": "Uppdatering",
+ "Permission:BlogPostManagement": "Hantering av blogginlÀgg",
+ "Permission:BlogPostManagement.Create": "Skapa",
+ "Permission:BlogPostManagement.Delete": "Radera",
+ "Permission:BlogPostManagement.Update": "Uppdatering",
+ "Permission:BlogPostManagement.Publish": "Publicera",
+ "Permission:CmsKit": "CmsKit administratör",
+ "Permission:Comments": "Hur man hanterar",
+ "Permission:Comments.Delete": "Radera",
+ "Permission:Contents": "Hantering av innehÄll",
+ "Permission:Contents.Create": "Skapa innehÄll",
+ "Permission:Contents.Delete": "Ta bort innehÄll",
+ "Permission:Contents.Update": "Uppdatera innehÄll",
+ "Permission:MediaDescriptorManagement": "Hantering av media",
+ "Permission:MediaDescriptorManagement:Create": "Skapa",
+ "Permission:MediaDescriptorManagement:Delete": "Radera",
+ "Permission:MenuItemManagement": "Hantering av menyalternativ",
+ "Permission:MenuItemManagement.Create": "Skapa",
+ "Permission:MenuItemManagement.Delete": "Radera",
+ "Permission:MenuItemManagement.Update": "Uppdatering",
+ "Permission:MenuManagement": "Meny för hantering",
+ "Permission:MenuManagement.Create": "Skapa",
+ "Permission:MenuManagement.Delete": "Radera",
+ "Permission:MenuManagement.Update": "Uppdatering",
+ "Permission:Menus": "Meny för hantering",
+ "Permission:Menus.Create": "Skapa",
+ "Permission:Menus.Delete": "Radera",
+ "Permission:Menus.Update": "Uppdatering",
+ "Permission:PageManagement": "Hantering av sidor",
+ "Permission:PageManagement:Create": "Skapa",
+ "Permission:PageManagement:Delete": "Radera",
+ "Permission:PageManagement:Update": "Uppdatering",
+ "Permission:PageManagement:SetAsHomePage": "StÀll in som startsida",
+ "Permission:TagManagement": "Hantering av taggar",
+ "Permission:TagManagement.Create": "Skapa",
+ "Permission:TagManagement.Delete": "Radera",
+ "Permission:TagManagement.Update": "Uppdatering",
+ "Permission:GlobalResources": "Globala resurser",
+ "Permission:CmsKitPublic": "CmsKit allmÀn",
+ "Permission:Comments.DeleteAll": "Radera alla",
+ "PickYourReaction": "VĂ€lj din reaktion",
+ "Rating": "Betyg",
+ "RatingUndoMessage": "Ditt betyg kommer att Ängras.",
+ "Reactions": "Reaktioner",
+ "Read": "LĂ€s",
+ "RepliesToThisComment": "Svar pÄ denna kommentar",
+ "Reply": "Svar",
+ "ReplyTo": "Svara pÄ",
+ "SamplePageMessage": "En exempelsida för Pro-modulen",
+ "SaveChanges": "Spara Àndringar",
+ "Script": "Skript",
+ "SelectAll": "VĂ€lj alla",
+ "Send": "Skicka",
+ "SendMessage": "Skicka meddelande",
+ "SelectedAuthor": "Författaren",
+ "ShortDescription": "Kort beskrivning",
+ "Slug": "Snigel",
+ "Source": "KĂ€lla",
+ "SourceUrl": "KĂ€llans webbadress",
+ "Star": "StjÀrna",
+ "StartDate": "Startdatum",
+ "Style": "Stil",
+ "Subject": "Ămne",
+ "SubjectPlaceholder": "VÀnligen skriv ett Àmne",
+ "Submit": "Skicka in",
+ "Subscribe": "Prenumerera",
+ "SavedSuccessfully": "Sparad framgÄngsrikt!",
+ "TagDeletionConfirmationMessage": "Ăr du sĂ€ker pĂ„ att du vill ta bort taggen \"{0}\"?",
+ "Tags": "Etiketter",
+ "Text": "Text",
+ "ThankYou": "Tack sÄ mycket",
+ "Title": "Titel",
+ "Undo": "Ă
ngra",
+ "Update": "Uppdatering",
+ "UpdatePreferenceSuccessMessage": "Dina instÀllningar har sparats.",
+ "UpdateYourEmailPreferences": "Uppdatera dina e-postpreferenser",
+ "UnMakeMainMenu": "Unmake Huvudmeny",
+ "UploadFailedMessage": "Uppladdningen misslyckades.",
+ "UserId": "AnvÀndar-ID",
+ "Username": "AnvÀndarnamn",
+ "YourComment": "Din kommentar",
+ "YourEmailAddress": "Din e-postadress",
+ "YourFullName": "Ditt fullstÀndiga namn",
+ "YourMessage": "Ditt meddelande",
+ "YourReply": "Ditt svar",
+ "MarkdownSupported": "Stöd för Markdown.",
+ "GlobalResources": "Globala resurser",
+ "CmsKit.BlogPost.Status.0": "Utkast",
+ "CmsKit.BlogPost.Status.1": "Publicerad",
+ "CmsKit.BlogPost.Status.2": "VÀntar pÄ recension",
+ "BlogPostPublishConfirmationMessage": "Ăr du sĂ€ker pĂ„ att du vill publicera blogginlĂ€gget \"{0}\"?",
+ "SuccessfullyPublished": "FramgÄngsrikt publicerad!",
+ "Draft": "Utkast",
+ "Publish": "Publicera",
+ "BlogPostDraftConfirmationMessage": "Ăr du sĂ€ker pĂ„ att du har angett blogginlĂ€gget \"{0}\" som utkast?",
+ "BlogPostSendToReviewConfirmationMessage": "Ăr du sĂ€ker att du vill skicka blogginlĂ€gget \"{0}\" till administratörsgranskning för publicering?",
+ "SaveAsDraft": "Spara som utkast",
+ "SendToReview": "Skicka till recension",
+ "SendToReviewToPublish": "Skicka för granskning för publicering",
+ "BlogPostSendToReviewSuccessMessage": "BlogginlÀgget \"{0}\" har skickats till admin review för publicering.",
+ "HasBlogPostWaitingForReviewMessage": "Du har ett blogginlÀgg som vÀntar pÄ att granskas. Klicka för att lista.",
+ "SelectAStatus": "VĂ€lj en status",
+ "Status": "Status",
+ "CmsKit.BlogPost.ScrollIndex": "SnabbnavigeringsfÀlt i blogginlÀgg",
+ "CmsKit.BlogPost.PreventXssFeature": "Förhindra XSS",
+ "Add": "LĂ€gg till",
+ "AddWidget": "LĂ€gg till widget",
+ "PleaseConfigureWidgets": "VĂ€nligen konfigurera widgets",
+ "SelectAnAuthor": "VÀlj en författare",
+ "InThisDocument": "I detta dokument",
+ "GoToTop": "GĂ„ till toppen",
+ "SetAsHomePage": "Ăndra status för startsidan",
+ "CompletedSettingAsHomePage": "StÀll in som startsida",
+ "IsHomePage": "Ăr hemsidan",
+ "RemovedSettingAsHomePage": "Borttagen instÀllning av startsidan",
+ "Feature:CmsKitGroup": "Cms-kit",
+ "Feature:BlogEnable": "BlogginlÀgg",
+ "Feature:BlogEnableDescription": "CMS Kits bloggpostsystem som gör det möjligt att skapa bloggar och inlÀgg dynamiskt i applikationen.",
+ "Feature:CommentEnable": "Kommentar",
+ "Feature:CommentEnableDescription": "CMS Kits kommentarsystem gör det möjligt att kommentera enheter som BlogPost.",
+ "Feature:GlobalResourceEnable": "Global resourcing",
+ "Feature:GlobalResourceEnableDescription": "CMS Kit's globala resoruces-funktion som gör det möjligt att hantera globala stilar och skript.",
+ "Feature:MenuEnable": "Meny",
+ "Feature:MenuEnableDescription": "CMS Kits dynamiska menysystem som gör det möjligt att lÀgga till/ta bort applikationsmenyer dynamiskt.",
+ "Feature:PageEnable": "Personsökning",
+ "Feature:PageEnableDescription": "CMS Kits sidosystem som gör det möjligt att skapa statiska sidor med en specifik URL.",
+ "Feature:RatingEnable": "Betyg",
+ "Feature:RatingEnableDescription": "CMS Kits betygssystem som gör det möjligt för anvÀndare att betygsÀtta enheter som BlogPost.",
+ "Feature:ReactionEnable": "Reaktion",
+ "Feature:ReactionEnableDescription": "CMS Kits reaktionssystem som gör det möjligt för anvÀndare att skicka reaktioner till enheter som BlogPost, Comments, etc.",
+ "Feature:TagEnable": "Taggning",
+ "Feature:TagEnableDescription": "CMS Kits taggsystem som gör det möjligt att tagga enheter som BlogPost.",
+ "Feature:MarkedItemEnable": "Markerat föremÄl",
+ "Feature:MarkedItemEnableDescription": "CMS Kits markeringssystem som gör det möjligt för anvÀndare att markera enheter som favoriter.",
+ "DeleteBlogPostMessage": "Bloggen kommer att raderas. Ăr du sĂ€ker pĂ„ det?",
+ "CaptchaCode": "Captcha-kod",
+ "CommentTextRequired": "Kommentar krÀvs",
+ "CaptchaCodeErrorMessage": "Det svar du angav för CAPTCHA var inte korrekt. VÀnligen försök igen",
+ "CaptchaCodeMissingMessage": "Captcha-koden saknas!",
+ "UnAllowedExternalUrlMessage": "Du inkluderade en otillÄten extern webbadress. Försök igen utan den externa webbadressen.",
+ "URL": "URL",
+ "PopularTags": "PopulÀra taggar",
+ "RemoveCoverImageConfirmationMessage": "Ăr du sĂ€ker pĂ„ att du vill ta bort omslagsbilden?",
+ "RemoveCoverImage": "Ta bort omslagsbilden",
+ "CssClass": "CSS-klass",
+ "TagsHelpText": "Taggar ska vara kommaseparerade (t.ex.: tag1, tag2, tag3)",
+ "ThisPartOfContentCouldntBeLoaded": "Den hÀr delen av innehÄllet kunde inte laddas.",
+ "DuplicateCommentAttemptMessage": "Duplikat försök att posta kommentar upptÀckt. Din kommentar har redan skickats in.",
+ "NoBlogPostYet": "Inget blogginlÀgg Ànnu!",
+ "CmsKit:Comment": "Hur gör man",
+ "CmsKitCommentOptions:RequireApprovement": "KrÀver godkÀnnande för kommentarer",
+ "CmsKitCommentOptions:RequireApprovementDescription": "NÀr funktionen Àr aktiverad mÄste kommentarer godkÀnnas innan de publiceras.",
+ "CommentFilter:ApproveState": "GodkÀnna stat",
+ "ApproveState": "GodkÀnna stat",
+ "CommentFilter:0": "Alla",
+ "CommentFilter:1": "GodkÀnd",
+ "CommentFilter:2": "Avvisad",
+ "CommentFilter:4": "VÀntar pÄ",
+ "ApprovedSuccessfully": "GodkÀnd framgÄngsrikt",
+ "ApprovalRevokedSuccessfully": "Ă
terkallat godkÀnnande framgÄngsrikt",
+ "Approve": "GodkÀnna",
+ "Disapproved": "Avvisad",
+ "CommentAlertMessage": "Det finns {0} kommentarer som vÀntar pÄ godkÀnnande",
+ "Settings:Menu:CmsKit": "CMS",
+ "CommentsAwaitingApproval": "Kommentarer som vÀntar pÄ godkÀnnande",
+ "CommentSubmittedForApproval": "Din kommentar har skickats in för godkÀnnande."
+ }
+}
\ No newline at end of file
diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo.CmsKit.Domain.abppkg.analyze.json b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo.CmsKit.Domain.abppkg.analyze.json
index a6e5c0aa93..1c3f2c14fd 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo.CmsKit.Domain.abppkg.analyze.json
+++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo.CmsKit.Domain.abppkg.analyze.json
@@ -1,6 +1,6 @@
{
"name": "Volo.CmsKit.Domain",
- "hash": "a330d75df32c8b504c193f59fe9554e5",
+ "hash": "",
"contents": [
{
"namespace": "Volo.CmsKit",
@@ -24,6 +24,11 @@
"declaringAssemblyName": "Volo.Abp.BlobStoring",
"namespace": "Volo.Abp.BlobStoring",
"name": "AbpBlobStoringModule"
+ },
+ {
+ "declaringAssemblyName": "Volo.Abp.SettingManagement.Domain",
+ "namespace": "Volo.Abp.SettingManagement",
+ "name": "AbpSettingManagementDomainModule"
}
],
"implementingInterfaces": [
@@ -157,7 +162,7 @@
{
"name": "IMultiTenant",
"namespace": "Volo.Abp.MultiTenancy",
- "declaringAssemblyName": "Volo.Abp.MultiTenancy",
+ "declaringAssemblyName": "Volo.Abp.MultiTenancy.Abstractions",
"fullName": "Volo.Abp.MultiTenancy.IMultiTenant"
},
{
@@ -170,6 +175,7 @@
"methods": [
{
"returnType": "Boolean",
+ "namespace": "Volo.CmsKit.Users",
"name": "Update",
"summary": null,
"isAsync": false,
@@ -353,13 +359,14 @@
{
"name": "IMultiTenant",
"namespace": "Volo.Abp.MultiTenancy",
- "declaringAssemblyName": "Volo.Abp.MultiTenancy",
+ "declaringAssemblyName": "Volo.Abp.MultiTenancy.Abstractions",
"fullName": "Volo.Abp.MultiTenancy.IMultiTenant"
}
],
"methods": [
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Tags",
"name": "SetName",
"summary": null,
"isAsync": false,
@@ -376,6 +383,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Tags",
"name": "SetEntityType",
"summary": null,
"isAsync": false,
@@ -469,7 +477,7 @@
{
"name": "IMultiTenant",
"namespace": "Volo.Abp.MultiTenancy",
- "declaringAssemblyName": "Volo.Abp.MultiTenancy",
+ "declaringAssemblyName": "Volo.Abp.MultiTenancy.Abstractions",
"fullName": "Volo.Abp.MultiTenancy.IMultiTenant"
}
],
@@ -568,6 +576,7 @@
"methods": [
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Ratings",
"name": "SetStarCount",
"summary": null,
"isAsync": false,
@@ -736,13 +745,20 @@
{
"name": "IMultiTenant",
"namespace": "Volo.Abp.MultiTenancy",
- "declaringAssemblyName": "Volo.Abp.MultiTenancy",
+ "declaringAssemblyName": "Volo.Abp.MultiTenancy.Abstractions",
"fullName": "Volo.Abp.MultiTenancy.IMultiTenant"
+ },
+ {
+ "name": "IHasEntityVersion",
+ "namespace": "Volo.Abp.Auditing",
+ "declaringAssemblyName": "Volo.Abp.Auditing.Contracts",
+ "fullName": "Volo.Abp.Auditing.IHasEntityVersion"
}
],
"methods": [
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Pages",
"name": "SetTitle",
"summary": null,
"isAsync": false,
@@ -759,6 +775,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Pages",
"name": "SetContent",
"summary": null,
"isAsync": false,
@@ -775,6 +792,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Pages",
"name": "SetScript",
"summary": null,
"isAsync": false,
@@ -791,6 +809,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Pages",
"name": "SetStyle",
"summary": null,
"isAsync": false,
@@ -845,6 +864,11 @@
"type": "System.Boolean",
"name": "IsHomePage",
"summary": null
+ },
+ {
+ "type": "System.Int32",
+ "name": "EntityVersion",
+ "summary": null
}
],
"contentType": "aggregateRoot",
@@ -940,13 +964,14 @@
{
"name": "IMultiTenant",
"namespace": "Volo.Abp.MultiTenancy",
- "declaringAssemblyName": "Volo.Abp.MultiTenancy",
+ "declaringAssemblyName": "Volo.Abp.MultiTenancy.Abstractions",
"fullName": "Volo.Abp.MultiTenancy.IMultiTenant"
}
],
"methods": [
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Menus",
"name": "SetDisplayName",
"summary": null,
"isAsync": false,
@@ -963,6 +988,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Menus",
"name": "SetUrl",
"summary": null,
"isAsync": false,
@@ -1156,13 +1182,14 @@
{
"name": "IMultiTenant",
"namespace": "Volo.Abp.MultiTenancy",
- "declaringAssemblyName": "Volo.Abp.MultiTenancy",
+ "declaringAssemblyName": "Volo.Abp.MultiTenancy.Abstractions",
"fullName": "Volo.Abp.MultiTenancy.IMultiTenant"
}
],
"methods": [
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.MediaDescriptors",
"name": "SetName",
"summary": null,
"isAsync": false,
@@ -1213,6 +1240,99 @@
"name": "MediaDescriptor",
"summary": null
},
+ {
+ "baseClass": {
+ "name": "BasicAggregateRoot",
+ "namespace": "Volo.Abp.Domain.Entities",
+ "declaringAssemblyName": "Volo.Abp.Ddd.Domain",
+ "fullName": "Volo.Abp.Domain.Entities.BasicAggregateRoot"
+ },
+ "implementingInterfaces": [
+ {
+ "name": "IEntity",
+ "namespace": "Volo.Abp.Domain.Entities",
+ "declaringAssemblyName": "Volo.Abp.Ddd.Domain",
+ "fullName": "Volo.Abp.Domain.Entities.IEntity"
+ },
+ {
+ "name": "IEntity",
+ "namespace": "Volo.Abp.Domain.Entities",
+ "declaringAssemblyName": "Volo.Abp.Ddd.Domain",
+ "fullName": "Volo.Abp.Domain.Entities.IEntity"
+ },
+ {
+ "name": "IAggregateRoot",
+ "namespace": "Volo.Abp.Domain.Entities",
+ "declaringAssemblyName": "Volo.Abp.Ddd.Domain",
+ "fullName": "Volo.Abp.Domain.Entities.IAggregateRoot"
+ },
+ {
+ "name": "IAggregateRoot",
+ "namespace": "Volo.Abp.Domain.Entities",
+ "declaringAssemblyName": "Volo.Abp.Ddd.Domain",
+ "fullName": "Volo.Abp.Domain.Entities.IAggregateRoot"
+ },
+ {
+ "name": "IGeneratesDomainEvents",
+ "namespace": "Volo.Abp.Domain.Entities",
+ "declaringAssemblyName": "Volo.Abp.Ddd.Domain",
+ "fullName": "Volo.Abp.Domain.Entities.IGeneratesDomainEvents"
+ },
+ {
+ "name": "IHasCreationTime",
+ "namespace": "Volo.Abp.Auditing",
+ "declaringAssemblyName": "Volo.Abp.Auditing.Contracts",
+ "fullName": "Volo.Abp.Auditing.IHasCreationTime"
+ },
+ {
+ "name": "IMustHaveCreator",
+ "namespace": "Volo.Abp.Auditing",
+ "declaringAssemblyName": "Volo.Abp.Auditing.Contracts",
+ "fullName": "Volo.Abp.Auditing.IMustHaveCreator"
+ },
+ {
+ "name": "IMultiTenant",
+ "namespace": "Volo.Abp.MultiTenancy",
+ "declaringAssemblyName": "Volo.Abp.MultiTenancy.Abstractions",
+ "fullName": "Volo.Abp.MultiTenancy.IMultiTenant"
+ }
+ ],
+ "methods": [],
+ "collectionProperties": {},
+ "navigationProperties": {},
+ "namespace": "Volo.CmsKit.MarkedItems",
+ "primaryKeyType": "Guid",
+ "properties": [
+ {
+ "type": "System.Nullable`1[System.Guid]",
+ "name": "TenantId",
+ "summary": null
+ },
+ {
+ "type": "System.Guid",
+ "name": "CreatorId",
+ "summary": null
+ },
+ {
+ "type": "System.DateTime",
+ "name": "CreationTime",
+ "summary": null
+ },
+ {
+ "type": "System.String",
+ "name": "EntityId",
+ "summary": null
+ },
+ {
+ "type": "System.String",
+ "name": "EntityType",
+ "summary": null
+ }
+ ],
+ "contentType": "aggregateRoot",
+ "name": "UserMarkedItem",
+ "summary": null
+ },
{
"baseClass": {
"name": "AuditedAggregateRoot",
@@ -1302,13 +1422,14 @@
{
"name": "IMultiTenant",
"namespace": "Volo.Abp.MultiTenancy",
- "declaringAssemblyName": "Volo.Abp.MultiTenancy",
+ "declaringAssemblyName": "Volo.Abp.MultiTenancy.Abstractions",
"fullName": "Volo.Abp.MultiTenancy.IMultiTenant"
}
],
"methods": [
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.GlobalResources",
"name": "SetValue",
"summary": null,
"isAsync": false,
@@ -1414,13 +1535,14 @@
{
"name": "IMultiTenant",
"namespace": "Volo.Abp.MultiTenancy",
- "declaringAssemblyName": "Volo.Abp.MultiTenancy",
+ "declaringAssemblyName": "Volo.Abp.MultiTenancy.Abstractions",
"fullName": "Volo.Abp.MultiTenancy.IMultiTenant"
}
],
"methods": [
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Comments",
"name": "SetText",
"summary": null,
"isAsync": false,
@@ -1434,6 +1556,39 @@
"isOptional": false
}
]
+ },
+ {
+ "returnType": "Comment",
+ "namespace": "Volo.CmsKit.Comments",
+ "name": "Approve",
+ "summary": null,
+ "isAsync": false,
+ "isPublic": true,
+ "isPrivate": false,
+ "isStatic": false,
+ "parameters": []
+ },
+ {
+ "returnType": "Comment",
+ "namespace": "Volo.CmsKit.Comments",
+ "name": "Reject",
+ "summary": null,
+ "isAsync": false,
+ "isPublic": true,
+ "isPrivate": false,
+ "isStatic": false,
+ "parameters": []
+ },
+ {
+ "returnType": "Comment",
+ "namespace": "Volo.CmsKit.Comments",
+ "name": "WaitForApproval",
+ "summary": null,
+ "isAsync": false,
+ "isPublic": true,
+ "isPrivate": false,
+ "isStatic": false,
+ "parameters": []
}
],
"collectionProperties": {},
@@ -1475,6 +1630,21 @@
"type": "System.DateTime",
"name": "CreationTime",
"summary": null
+ },
+ {
+ "type": "System.String",
+ "name": "Url",
+ "summary": null
+ },
+ {
+ "type": "System.String",
+ "name": "IdempotencyToken",
+ "summary": null
+ },
+ {
+ "type": "System.Nullable`1[System.Boolean]",
+ "name": "IsApproved",
+ "summary": null
}
],
"contentType": "aggregateRoot",
@@ -1594,13 +1764,14 @@
{
"name": "IMultiTenant",
"namespace": "Volo.Abp.MultiTenancy",
- "declaringAssemblyName": "Volo.Abp.MultiTenancy",
+ "declaringAssemblyName": "Volo.Abp.MultiTenancy.Abstractions",
"fullName": "Volo.Abp.MultiTenancy.IMultiTenant"
}
],
"methods": [
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Blogs",
"name": "SetName",
"summary": null,
"isAsync": false,
@@ -1617,6 +1788,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Blogs",
"name": "SetSlug",
"summary": null,
"isAsync": false,
@@ -1907,13 +2079,20 @@
{
"name": "IMultiTenant",
"namespace": "Volo.Abp.MultiTenancy",
- "declaringAssemblyName": "Volo.Abp.MultiTenancy",
+ "declaringAssemblyName": "Volo.Abp.MultiTenancy.Abstractions",
"fullName": "Volo.Abp.MultiTenancy.IMultiTenant"
+ },
+ {
+ "name": "IHasEntityVersion",
+ "namespace": "Volo.Abp.Auditing",
+ "declaringAssemblyName": "Volo.Abp.Auditing.Contracts",
+ "fullName": "Volo.Abp.Auditing.IHasEntityVersion"
}
],
"methods": [
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Blogs",
"name": "SetTitle",
"summary": null,
"isAsync": false,
@@ -1930,6 +2109,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Blogs",
"name": "SetShortDescription",
"summary": null,
"isAsync": false,
@@ -1946,6 +2126,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Blogs",
"name": "SetContent",
"summary": null,
"isAsync": false,
@@ -1962,6 +2143,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Blogs",
"name": "SetDraft",
"summary": null,
"isAsync": false,
@@ -1972,6 +2154,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Blogs",
"name": "SetPublished",
"summary": null,
"isAsync": false,
@@ -1982,6 +2165,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Blogs",
"name": "SetWaitingForReview",
"summary": null,
"isAsync": false,
@@ -2052,6 +2236,11 @@
"type": "Volo.CmsKit.Blogs.BlogPostStatus",
"name": "Status",
"summary": null
+ },
+ {
+ "type": "System.Int32",
+ "name": "EntityVersion",
+ "summary": null
}
],
"contentType": "aggregateRoot",
@@ -2069,6 +2258,7 @@
"methods": [
{
"returnType": "EntityTag",
+ "namespace": "Volo.CmsKit.Tags",
"name": "AddTagToEntityAsync",
"summary": null,
"isAsync": true,
@@ -2105,6 +2295,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Tags",
"name": "RemoveTagFromEntityAsync",
"summary": null,
"isAsync": true,
@@ -2141,6 +2332,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Tags",
"name": "SetEntityTagsAsync",
"summary": null,
"isAsync": true,
@@ -2167,6 +2359,7 @@
},
{
"returnType": "List",
+ "namespace": "Volo.CmsKit.Tags",
"name": "GetEntityIdsFilteredByTagAsync",
"summary": null,
"isAsync": true,
@@ -2193,6 +2386,7 @@
},
{
"returnType": "List",
+ "namespace": "Volo.CmsKit.Tags",
"name": "GetEntityIdsFilteredByTagNameAsync",
"summary": null,
"isAsync": true,
@@ -2252,6 +2446,7 @@
"methods": [
{
"returnType": "Tag",
+ "namespace": "Volo.CmsKit.Tags",
"name": "GetOrAddAsync",
"summary": null,
"isAsync": true,
@@ -2273,6 +2468,7 @@
},
{
"returnType": "Tag",
+ "namespace": "Volo.CmsKit.Tags",
"name": "CreateAsync",
"summary": null,
"isAsync": true,
@@ -2299,6 +2495,7 @@
},
{
"returnType": "Tag",
+ "namespace": "Volo.CmsKit.Tags",
"name": "UpdateAsync",
"summary": null,
"isAsync": true,
@@ -2348,6 +2545,7 @@
"methods": [
{
"returnType": "List",
+ "namespace": "Volo.CmsKit.Reactions",
"name": "GetReactionsAsync",
"summary": null,
"isAsync": true,
@@ -2364,6 +2562,7 @@
},
{
"returnType": "List",
+ "namespace": "Volo.CmsKit.Reactions",
"name": "GetSummariesAsync",
"summary": null,
"isAsync": true,
@@ -2385,6 +2584,7 @@
},
{
"returnType": "UserReaction",
+ "namespace": "Volo.CmsKit.Reactions",
"name": "GetOrCreateAsync",
"summary": null,
"isAsync": true,
@@ -2416,6 +2616,7 @@
},
{
"returnType": "Boolean",
+ "namespace": "Volo.CmsKit.Reactions",
"name": "DeleteAsync",
"summary": null,
"isAsync": true,
@@ -2475,6 +2676,7 @@
"methods": [
{
"returnType": "Rating",
+ "namespace": "Volo.CmsKit.Ratings",
"name": "SetStarAsync",
"summary": null,
"isAsync": true,
@@ -2534,6 +2736,7 @@
"methods": [
{
"returnType": "Page",
+ "namespace": "Volo.CmsKit.Pages",
"name": "CreateAsync",
"summary": null,
"isAsync": true,
@@ -2570,6 +2773,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Pages",
"name": "SetSlugAsync",
"summary": null,
"isAsync": true,
@@ -2591,6 +2795,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Pages",
"name": "SetHomePageAsync",
"summary": null,
"isAsync": true,
@@ -2607,6 +2812,7 @@
},
{
"returnType": "Page",
+ "namespace": "Volo.CmsKit.Pages",
"name": "GetHomePageAsync",
"summary": null,
"isAsync": true,
@@ -2645,6 +2851,7 @@
"methods": [
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Menus",
"name": "SetPageUrl",
"summary": null,
"isAsync": false,
@@ -2666,6 +2873,29 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Menus",
+ "name": "SetPageUrl",
+ "summary": null,
+ "isAsync": false,
+ "isPublic": true,
+ "isPrivate": false,
+ "isStatic": false,
+ "parameters": [
+ {
+ "type": "MenuItem",
+ "name": "menuItem",
+ "isOptional": false
+ },
+ {
+ "type": "String",
+ "name": "url",
+ "isOptional": false
+ }
+ ]
+ },
+ {
+ "returnType": "Void",
+ "namespace": "Volo.CmsKit.Menus",
"name": "MoveAsync",
"summary": null,
"isAsync": true,
@@ -2692,6 +2922,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Menus",
"name": "OrganizeTreeOrderForMenuItem",
"summary": null,
"isAsync": false,
@@ -2741,6 +2972,7 @@
"methods": [
{
"returnType": "MediaDescriptor",
+ "namespace": "Volo.CmsKit.MediaDescriptors",
"name": "CreateAsync",
"summary": null,
"isAsync": true,
@@ -2789,6 +3021,61 @@
"name": "MediaDescriptorManager",
"summary": null
},
+ {
+ "namespace": "Volo.CmsKit.MarkedItems",
+ "baseClass": {
+ "name": "CmsKitDomainServiceBase",
+ "namespace": "Volo.CmsKit",
+ "declaringAssemblyName": "Volo.CmsKit.Domain",
+ "fullName": "Volo.CmsKit.CmsKitDomainServiceBase"
+ },
+ "methods": [
+ {
+ "returnType": "Boolean",
+ "namespace": "Volo.CmsKit.MarkedItems",
+ "name": "ToggleUserMarkedItemAsync",
+ "summary": null,
+ "isAsync": true,
+ "isPublic": true,
+ "isPrivate": false,
+ "isStatic": false,
+ "parameters": [
+ {
+ "type": "Guid",
+ "name": "creatorId",
+ "isOptional": false
+ },
+ {
+ "type": "String",
+ "name": "entityType",
+ "isOptional": false
+ },
+ {
+ "type": "String",
+ "name": "entityId",
+ "isOptional": false
+ }
+ ]
+ }
+ ],
+ "implementingInterfaces": [
+ {
+ "name": "IDomainService",
+ "namespace": "Volo.Abp.Domain.Services",
+ "declaringAssemblyName": "Volo.Abp.Ddd.Domain",
+ "fullName": "Volo.Abp.Domain.Services.IDomainService"
+ },
+ {
+ "name": "ITransientDependency",
+ "namespace": "Volo.Abp.DependencyInjection",
+ "declaringAssemblyName": "Volo.Abp.Core",
+ "fullName": "Volo.Abp.DependencyInjection.ITransientDependency"
+ }
+ ],
+ "contentType": "domainService",
+ "name": "MarkedItemManager",
+ "summary": null
+ },
{
"namespace": "Volo.CmsKit.GlobalResources",
"baseClass": {
@@ -2800,6 +3087,7 @@
"methods": [
{
"returnType": "GlobalResource",
+ "namespace": "Volo.CmsKit.GlobalResources",
"name": "SetGlobalStyleAsync",
"summary": null,
"isAsync": true,
@@ -2816,6 +3104,7 @@
},
{
"returnType": "GlobalResource",
+ "namespace": "Volo.CmsKit.GlobalResources",
"name": "SetGlobalScriptAsync",
"summary": null,
"isAsync": true,
@@ -2832,6 +3121,7 @@
},
{
"returnType": "GlobalResource",
+ "namespace": "Volo.CmsKit.GlobalResources",
"name": "GetGlobalStyleAsync",
"summary": null,
"isAsync": true,
@@ -2842,6 +3132,7 @@
},
{
"returnType": "GlobalResource",
+ "namespace": "Volo.CmsKit.GlobalResources",
"name": "GetGlobalScriptAsync",
"summary": null,
"isAsync": true,
@@ -2880,6 +3171,7 @@
"methods": [
{
"returnType": "Comment",
+ "namespace": "Volo.CmsKit.Comments",
"name": "CreateAsync",
"summary": null,
"isAsync": true,
@@ -2907,6 +3199,11 @@
"name": "text",
"isOptional": false
},
+ {
+ "type": "String",
+ "name": "url",
+ "isOptional": true
+ },
{
"type": "Nullable",
"name": "repliedCommentId",
@@ -2944,6 +3241,7 @@
"methods": [
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Blogs",
"name": "SetAsync",
"summary": null,
"isAsync": true,
@@ -2970,6 +3268,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Blogs",
"name": "SetDefaultsAsync",
"summary": null,
"isAsync": true,
@@ -2986,6 +3285,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Blogs",
"name": "SetIfNotSetAsync",
"summary": null,
"isAsync": true,
@@ -3012,6 +3312,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Blogs",
"name": "SetDefaultsIfNotSetAsync",
"summary": null,
"isAsync": true,
@@ -3056,6 +3357,7 @@
"methods": [
{
"returnType": "Blog",
+ "namespace": "Volo.CmsKit.Blogs",
"name": "CreateAsync",
"summary": null,
"isAsync": true,
@@ -3077,6 +3379,7 @@
},
{
"returnType": "Blog",
+ "namespace": "Volo.CmsKit.Blogs",
"name": "UpdateAsync",
"summary": null,
"isAsync": true,
@@ -3131,6 +3434,7 @@
"methods": [
{
"returnType": "BlogPost",
+ "namespace": "Volo.CmsKit.Blogs",
"name": "CreateAsync",
"summary": null,
"isAsync": true,
@@ -3182,6 +3486,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Blogs",
"name": "SetSlugUrlAsync",
"summary": null,
"isAsync": true,
@@ -3306,6 +3611,7 @@
"methods": [
{
"returnType": "EntityTag",
+ "namespace": "Volo.CmsKit.Tags",
"name": "FindAsync",
"summary": null,
"isAsync": true,
@@ -3337,6 +3643,7 @@
},
{
"returnType": "Void",
+ "namespace": "Volo.CmsKit.Tags",
"name": "DeleteManyAsync",
"summary": null,
"isAsync": true,
@@ -3363,6 +3670,7 @@
},
{
"returnType": "List",
+ "namespace": "Volo.CmsKit.Tags",
"name": "GetEntityIdsFilteredByTagAsync",
"summary": null,
"isAsync": true,
@@ -3389,6 +3697,7 @@
},
{
"returnType": "List",
+ "namespace": "Volo.CmsKit.Tags",
"name": "GetEntityIdsFilteredByTagNameAsync",
"summary": null,
"isAsync": true,
@@ -3468,6 +3777,7 @@
"methods": [
{
"returnType": "Tag",
+ "namespace": "Volo.CmsKit.Tags",
"name": "GetAsync",
"summary": null,
"isAsync": true,
@@ -3494,6 +3804,7 @@
},
{
"returnType": "Boolean",
+ "namespace": "Volo.CmsKit.Tags",
"name": "AnyAsync",
"summary": null,
"isAsync": true,
@@ -3520,6 +3831,7 @@
},
{
"returnType": "Tag",
+ "namespace": "Volo.CmsKit.Tags",
"name": "FindAsync",
"summary": null,
"isAsync": true,
@@ -3546,6 +3858,7 @@
},
{
"returnType": "List",
+ "namespace": "Volo.CmsKit.Tags",
"name": "GetListAsync",
"summary": null,
"isAsync": true,
@@ -3558,6 +3871,21 @@
"name": "filter",
"isOptional": false
},
+ {
+ "type": "Int32",
+ "name": "maxResultCount",
+ "isOptional": true
+ },
+ {
+ "type": "Int32",
+ "name": "skipCount",
+ "isOptional": true
+ },
+ {
+ "type": "String",
+ "name": "sorting",
+ "isOptional": true
+ },
{
"type": "CancellationToken",
"name": "cancellationToken",
@@ -3567,6 +3895,7 @@
},
{
"returnType": "Int32",
+ "namespace": "Volo.CmsKit.Tags",
"name": "GetCountAsync",
"summary": null,
"isAsync": true,
@@ -3588,6 +3917,7 @@
},
{
"returnType": "List",
+ "namespace": "Volo.CmsKit.Tags",
"name": "GetAllRelatedTagsAsync",
"summary": null,
"isAsync": true,
@@ -3611,6 +3941,33 @@
"isOptional": true
}
]
+ },
+ {
+ "returnType": "List",
+ "namespace": "Volo.CmsKit.Tags",
+ "name": "GetPopularTagsAsync",
+ "summary": null,
+ "isAsync": true,
+ "isPublic": true,
+ "isPrivate": false,
+ "isStatic": false,
+ "parameters": [
+ {
+ "type": "String",
+ "name": "entityType",
+ "isOptional": false
+ },
+ {
+ "type": "Int32",
+ "name": "maxCount",
+ "isOptional": false
+ },
+ {
+ "type": "CancellationToken",
+ "name": "cancellationToken",
+ "isOptional": true
+ }
+ ]
}
],
"contentType": "repositoryInterface",
@@ -3662,6 +4019,7 @@
"methods": [
{
"returnType": "UserReaction",
+ "namespace": "Volo.CmsKit.Reactions",
"name": "FindAsync",
"summary": null,
"isAsync": true,
@@ -3698,6 +4056,7 @@
},
{
"returnType": "List",
+ "namespace": "Volo.CmsKit.Reactions",
"name": "GetListForUserAsync",
"summary": null,
"isAsync": true,
@@ -3729,6 +4088,7 @@
},
{
"returnType": "List",
+ "namespace": "Volo.CmsKit.Reactions",
"name": "GetSummariesAsync",
"summary": null,
"isAsync": true,
@@ -3803,6 +4163,7 @@
"methods": [
{
"returnType": "Rating",
+ "namespace": "Volo.CmsKit.Ratings",
"name": "GetCurrentUserRatingAsync",
"summary": null,
"isAsync": true,
@@ -3834,6 +4195,7 @@
},
{
"returnType": "List",
+ "namespace": "Volo.CmsKit.Ratings",
"name": "GetGroupedStarCountsAsync",
"summary": null,
"isAsync": true,
@@ -3908,6 +4270,7 @@
"methods": [
{
"returnType": "Int32",
+ "namespace": "Volo.CmsKit.Pages",
"name": "GetCountAsync",
"summary": null,
"isAsync": true,
@@ -3929,6 +4292,7 @@
},
{
"returnType": "List",
+ "namespace": "Volo.CmsKit.Pages",
"name": "GetListAsync",
"summary": null,
"isAsync": true,
@@ -3965,6 +4329,7 @@
},
{
"returnType": "Page",
+ "namespace": "Volo.CmsKit.Pages",
"name": "GetBySlugAsync",
"summary": null,
"isAsync": true,
@@ -3986,6 +4351,7 @@
},
{
"returnType": "Page",
+ "namespace": "Volo.CmsKit.Pages",
"name": "FindBySlugAsync",
"summary": null,
"isAsync": true,
@@ -4007,6 +4373,7 @@
},
{
"returnType": "Boolean",
+ "namespace": "Volo.CmsKit.Pages",
"name": "ExistsAsync",
"summary": null,
"isAsync": true,
@@ -4028,6 +4395,7 @@
},
{
"returnType": "List",
+ "namespace": "Volo.CmsKit.Pages",
"name": "GetListOfHomePagesAsync",
"summary": null,
"isAsync": true,
@@ -4041,6 +4409,28 @@
"isOptional": true
}
]
+ },
+ {
+ "returnType": "String",
+ "namespace": "Volo.CmsKit.Pages",
+ "name": "FindTitleAsync",
+ "summary": null,
+ "isAsync": true,
+ "isPublic": true,
+ "isPrivate": false,
+ "isStatic": false,
+ "parameters": [
+ {
+ "type": "Guid",
+ "name": "pageId",
+ "isOptional": false
+ },
+ {
+ "type": "CancellationToken",
+ "name": "cancellationToken",
+ "isOptional": true
+ }
+ ]
}
],
"contentType": "repositoryInterface",
@@ -4141,6 +4531,145 @@
"name": "IMediaDescriptorRepository",
"summary": null
},
+ {
+ "namespace": "Volo.CmsKit.MarkedItems",
+ "entityAnalyzeModel": {
+ "namespace": "Volo.CmsKit.MarkedItems",
+ "primaryKeyType": "Guid",
+ "properties": [],
+ "contentType": "entity",
+ "name": "UserMarkedItem",
+ "summary": null
+ },
+ "implementingInterfaces": [
+ {
+ "name": "IBasicRepository