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/.github/workflows/auto-pr.yml b/.github/workflows/auto-pr.yml index 39fb6199ad..a572653e48 100644 --- a/.github/workflows/auto-pr.yml +++ b/.github/workflows/auto-pr.yml @@ -1,13 +1,13 @@ -name: Merge branch rel-9.0 with rel-8.3 +name: Merge branch dev with rel-9.0 on: push: branches: - - rel-8.3 + - rel-9.0 permissions: contents: read jobs: - merge-rel-9-0-with-rel-8-3: + merge-dev-with-rel-9-0: permissions: contents: write # for peter-evans/create-pull-request to create branch pull-requests: write # for peter-evans/create-pull-request to create a PR @@ -15,17 +15,17 @@ jobs: steps: - uses: actions/checkout@v2 with: - ref: rel-9.0 + ref: dev - name: Reset promotion branch run: | - git fetch origin rel-8.3:rel-8.3 - git reset --hard rel-8.3 + git fetch origin rel-9.0:rel-9.0 + git reset --hard rel-9.0 - name: Create Pull Request uses: peter-evans/create-pull-request@v3 with: - branch: auto-merge/rel-8-3/${{github.run_number}} - title: Merge branch rel-9.0 with rel-8.3 - body: This PR generated automatically to merge rel-9.0 with rel-8.3. Please review the changed files before merging to prevent any errors that may occur. + branch: auto-merge/rel-9-0/${{github.run_number}} + title: Merge branch dev with rel-9.0 + body: This PR generated automatically to merge dev with rel-9.0. Please review the changed files before merging to prevent any errors that may occur. reviewers: maliming draft: true token: ${{ github.token }} @@ -34,5 +34,5 @@ jobs: GH_TOKEN: ${{ secrets.BOT_SECRET }} run: | gh pr ready - gh pr review auto-merge/rel-8-3/${{github.run_number}} --approve - gh pr merge auto-merge/rel-8-3/${{github.run_number}} --merge --auto --delete-branch + gh pr review auto-merge/rel-9-0/${{github.run_number}} --approve + gh pr merge auto-merge/rel-9-0/${{github.run_number}} --merge --auto --delete-branch diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 696d401fed..88b94689d6 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -51,7 +51,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-dotnet@master with: - dotnet-version: 8.0.100 + dotnet-version: 9.0.100 - name: chown run: | diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 439d06b62b..4ca0238728 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,3 +1,3 @@ ## Contribution -See the [contribution guide](docs/en/Contribution/Index.md). +The contribution guide is available at [contribution guide](docs/en/contribution/index.md). diff --git a/Directory.Packages.props b/Directory.Packages.props index 854123b215..5d8aabca2e 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -3,175 +3,177 @@ true - + - - - - + + + + - - - - - - - - + + + + + + + + - - - - - - - - - + + + + + + + + + - + + - - + + - + - + - + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - - - - - - - - + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - + + + - - - - - + + + + + - - - - + + + + - + - + - - - - + + + + - - - - + + + + - + diff --git a/README.md b/README.md index dd953a6431..31db04cba2 100644 --- a/README.md +++ b/README.md @@ -1,95 +1,81 @@ # ABP Framework -![build and test](https://img.shields.io/github/actions/workflow/status/abpframework/abp/build-and-test.yml?branch=dev&style=flat-square) 🔹 [![codecov](https://codecov.io/gh/abpframework/abp/branch/dev/graph/badge.svg?token=jUKLCxa6HF)](https://codecov.io/gh/abpframework/abp) 🔹 [![NuGet](https://img.shields.io/nuget/v/Volo.Abp.Core.svg?style=flat-square)](https://www.nuget.org/packages/Volo.Abp.Core) 🔹 [![NuGet (with prereleases)](https://img.shields.io/nuget/vpre/Volo.Abp.Core.svg?style=flat-square)](https://www.nuget.org/packages/Volo.Abp.Core) 🔹 [![MyGet (nightly builds)](https://img.shields.io/myget/abp-nightly/vpre/Volo.Abp.svg?style=flat-square)](https://docs.abp.io/en/abp/latest/Nightly-Builds) 🔹 +![build and test](https://img.shields.io/github/actions/workflow/status/abpframework/abp/build-and-test.yml?branch=dev&style=flat-square) 🔹 [![codecov](https://codecov.io/gh/abpframework/abp/branch/dev/graph/badge.svg?token=jUKLCxa6HF)](https://codecov.io/gh/abpframework/abp) 🔹 [![NuGet](https://img.shields.io/nuget/v/Volo.Abp.Core.svg?style=flat-square)](https://www.nuget.org/packages/Volo.Abp.Core) 🔹 [![NuGet (with prereleases)](https://img.shields.io/nuget/vpre/Volo.Abp.Core.svg?style=flat-square)](https://www.nuget.org/packages/Volo.Abp.Core) 🔹 [![MyGet (nightly builds)](https://img.shields.io/myget/abp-nightly/vpre/Volo.Abp.svg?style=flat-square)](https://abp.io/docs/latest/release-info/nightly-builds) 🔹 [![NuGet Download](https://img.shields.io/nuget/dt/Volo.Abp.Core.svg?style=flat-square)](https://www.nuget.org/packages/Volo.Abp.Core) 🔹 [![Code of Conduct](https://img.shields.io/badge/Contributor%20Covenant-v2.0%20adopted-ff69b4.svg)](https://github.com/abpframework/abp/blob/dev/CODE_OF_CONDUCT.md) 🔹 [![CLA Signed](https://cla-assistant.io/readme/badge/abpframework/abp)](https://cla-assistant.io/abpframework/abp) 🔹 [![Discord Shield](https://discord.com/api/guilds/951497912645476422/widget.png?style=shield)](https://discord.gg/abp) -ABP Framework is a complete **infrastructure** based on **ASP.NET Core** that creates **modern web applications** and **APIs** by following the software development **best practices** and the **latest technologies**. - -[![ABP Platform](https://github.com/abpframework/abp/assets/9526587/47531496-4088-406d-9c69-63cb0ffec2ba)](https://abp.io) +[ABP](https://abp.io/) offers an **opinionated architecture** to build enterprise software solutions with **best practices** on top of the **.NET** and the **ASP.NET Core** platforms. It provides the fundamental infrastructure, production-ready startup templates, pre-built application modules, UI themes, tooling, guides and documentation to implement that architecture properly and **automate the details** and repetitive works as much as possible. +[![ABP Platform](https://github.com/user-attachments/assets/200653c0-0e69-4b47-b76a-3a83460aaab6)](https://abp.io) ## Getting Started -- [Quick Start](https://docs.abp.io/en/abp/latest/Tutorials/Todo/Index) is a single-part, quick-start tutorial to build a simple application with the ABP Framework. Start with this tutorial if you want to understand how ABP works quickly. -- [Getting Started guide](https://docs.abp.io/en/abp/latest/Getting-Started) can be used to create and run ABP-based solutions with different options and details. -- [Web Application Development Tutorial](https://docs.abp.io/en/abp/latest/Tutorials/Part-1) is a complete tutorial on developing a full-stack web application with all aspects of a real-life solution. - -### Quick Start - -Install the ABP CLI: - -````bash -> dotnet tool install -g Volo.Abp.Cli -```` - -Create a new solution: - -````bash -> abp new BookStore -u mvc -d ef -```` - -> See the [CLI documentation](https://docs.abp.io/en/abp/latest/CLI) for all available options. - - - -### UI Framework Options - - - - - -### Database Provider Options - - - - +- [The Getting Started guide](https://abp.io/docs/latest/get-started) can be used to create and run ABP-based solutions with different options and details. +- [Quick Start](https://abp.io/docs/latest/tutorials/todo) is a single-part, quick-start tutorial to build a simple application with the ABP Framework. Start with this tutorial if you want to understand how ABP works quickly. +- [Web Application Development Tutorial](https://abp.io/docs/latest/tutorials/book-store) is a complete tutorial on developing a full-stack web application with all aspects of a real-life solution. +- [Modular Monolith Application](https://abp.io/docs/latest/tutorials/modular-crm/index): A multi-part tutorial that demonstrates how to create application modules, compose and communicate them to build a monolith modular web application. ## What ABP Provides? -ABP provides a **full stack developer experience**. +ABP bridges the gap between ASP.NET Core and real-world business application requirements, and makes you focus on your own business code. +The following diagram contains the core components of the **ABP Platform** and shows how ABP sits between **ASP.NET Core** and **Your Application**: +![abp-overall-diagram](docs/en/images/abp-overall-diagram.png) ### Architecture - +ABP offers a complete architectural model to build modern enterprise software solutions. Here, the fundamental architectural structures offered and first-class supported by ABP: -ABP offers a complete, **modular** and **layered** software architecture based on **[Domain Driven Design](https://docs.abp.io/en/abp/latest/Domain-Driven-Design)** principles and patterns. It also provides the necessary infrastructure and guidance to [implement this architecture](https://docs.abp.io/en/abp/latest/Domain-Driven-Design-Implementation-Guide). +* [Domain Driven Design](https://abp.io/docs/latest/framework/architecture/domain-driven-design) +* [Microservices](https://abp.io/docs/latest/framework/architecture/microservices) +* [Modularity](https://abp.io/docs/latest/framework/architecture/modularity/basics) +* [Multi-Tenancy](https://abp.io/docs/latest/framework/architecture/multi-tenancy) -ABP Framework is suitable for **[microservice solutions](https://docs.abp.io/en/abp/latest/Microservice-Architecture)** as well as monolithic applications. +### Infrastructure +There are a lot of infrastructure features provided by the ABP Framework to achieve real-world scenarios easier, like [Event Bus](https://abp.io/docs/latest/framework/infrastructure/event-bus), [Background Job System](https://abp.io/docs/latest/framework/infrastructure/background-jobs), [Audit Logging](https://abp.io/docs/latest/framework/infrastructure/audit-logging), [BLOB Storing](https://abp.io/docs/latest/framework/infrastructure/blob-storing), [Data Seeding](https://abp.io/docs/latest/framework/infrastructure/data-seeding), [Data Filtering](https://abp.io/docs/latest/framework/infrastructure/data-filtering), and much more. +[See ABP Framework features](https://abp.io/framework) -### Infrastructure +#### Cross-Cutting Concerns -There are a lot of features provided by the ABP Framework to achieve real-world scenarios easier, like [Event Bus](https://docs.abp.io/en/abp/latest/Event-Bus), [Background Job System](https://docs.abp.io/en/abp/latest/Background-Jobs), [Audit Logging](https://docs.abp.io/en/abp/latest/Audit-Logging), [BLOB Storing](https://docs.abp.io/en/abp/latest/Blob-Storing), [Data Seeding](https://docs.abp.io/en/abp/latest/Data-Seeding), [Data Filtering](https://docs.abp.io/en/abp/latest/Data-Filtering), etc. +ABP also simplifies (and even automates wherever possible) cross-cutting concerns and common non-functional requirements like [Exception Handling](https://abp.io/docs/latest/framework/fundamentals/exception-handling), [Validation](https://abp.io/docs/latest/framework/fundamentals/validation), [Authorization](https://abp.io/docs/latest/framework/fundamentals/authorizationn), [Localization](https://abp.io/docs/latest/framework/fundamentals/localization), [Caching](https://abp.io/docs/latest/framework/fundamentals/caching), [Dependency Injection](https://abp.io/docs/latest/framework/fundamentals/dependency-injection), [Setting Management](https://abp.io/docs/latest/framework/infrastructure/settings), etc. +### Application Modules +ABP is a modular framework and the [application modules](https://abp.io/modules) provide **pre-built application functionalities**. -### Cross-Cutting Concerns +Some examples: -ABP also simplifies (and even automates wherever possible) cross-cutting concerns and common non-functional requirements like [Exception Handling](https://docs.abp.io/en/abp/latest/Exception-Handling), [Validation](https://docs.abp.io/en/abp/latest/Validation), [Authorization](https://docs.abp.io/en/abp/latest/Authorization), [Localization](https://docs.abp.io/en/abp/latest/Localization), [Caching](https://docs.abp.io/en/abp/latest/Caching), [Dependency Injection](https://docs.abp.io/en/abp/latest/Dependency-Injection), [Setting Management](https://docs.abp.io/en/abp/latest/Settings), etc. +- [**Account**](https://abp.io/modules/Volo.Account.Pro): Provides UI for the account management and allows user to login/register to the application. +- [CMS Kit](https://abp.io/modules/Volo.CmsKit): Brings CMS (Content Management System) capabilities to your application. +- **[Identity](https://abp.io/modules/Volo.Identity.Pro)**: Manages organization units, roles, users and their permissions based on the Microsoft Identity library. +- [**OpenIddict**](https://abp.io/modules/Volo.OpenIddict.Pro): Integrates to OpenIddict library and provides a management UI. +- [**SaaS**](https://abp.io/modules/Volo.Saas): Manages tenants and editions for a [multi-tenant](https://abp.io/docs/latest/framework/architecture/multi-tenancy) (SaaS) application. +See [all official modules](https://abp.io/modules). +### Startup Templates -### Application Modules +The [Startup templates](https://abp.io/docs/latest/solution-templates) are pre-built Visual Studio solution templates. You can create your own solution based on these templates to **immediately start your development**. -ABP is a modular framework and the Application Modules provide **pre-built application functionalities**; +### Tooling -- [**Account**](https://docs.abp.io/en/abp/latest/Modules/Account): Provides UI for the account management and allows user to login/register to the application. -- **[Identity](https://docs.abp.io/en/abp/latest/Modules/Identity)**: Manages organization units, roles, users and their permissions based on the Microsoft Identity library. -- [**OpenIddict**](https://docs.abp.io/en/abp/latest/Modules/OpenIddict): Integrates to OpenIddict. -- [**Tenant Management**](https://docs.abp.io/en/abp/latest/Modules/Tenant-Management): Manages tenants for a [multi-tenant](https://docs.abp.io/en/abp/latest/Multi-Tenancy) (SaaS) application. +ABP provides CLI and UI tools to simplify your daily development work flows. -See the [Application Modules](https://docs.abp.io/en/abp/latest/Modules/Index) document for all pre-built modules. +#### ABP Studio +[ABP Studio](https://abp.io/studio) is a cross-platform desktop application for ABP developers. +It is well integrated to the ABP Framework and aims to provide a comfortable development environment for you by automating things, providing insights about your solution, making develop, run and deploy your solutions much easier. -### Startup Templates +#### ABP Suite -The [Startup templates](https://docs.abp.io/en/abp/latest/Startup-Templates/Index) are pre-built Visual Studio solution templates. You can create your own solution based on these templates to **immediately start your development**. +[ABP Suite](https://abp.io/suite) allows you to automatically generate web pages in a matter of minutes. +#### ABP CLI +[ABP CLI](https://abp.io/cli) is a command line tool to perform common operations for ABP based solutions. ## Mastering ABP Framework Book @@ -103,43 +89,36 @@ This book will help you to gain a complete understanding of the ABP Framework an ### ABP Community Web Site -The [ABP Community](https://community.abp.io/) is a website to publish **articles** and share **knowledge** about the ABP Framework. You can also create content for the community! +The [ABP Community](https://abp.io/community) is a central hub to publish **articles** and share **knowledge** about the ABP Framework. ### Blog -Follow the [ABP Blog](https://blog.abp.io/) to learn the latest happenings in the ABP Framework. +Follow the [ABP Blog](https://abp.io/blog) to learn the latest happenings in the ABP Framework. ### Samples -See the [sample projects](https://docs.abp.io/en/abp/latest/Samples/Index) built with the ABP Framework. +See the [sample projects](https://abp.io/docs/latest/samples) built with the ABP Framework. ### Want to Contribute? -ABP is a community-driven open-source project. See [the contribution guide](https://docs.abp.io/en/abp/latest/Contribution/Index) if you want to participate in this project. - - +ABP is a community-driven open-source project. See [the contribution guide](https://abp.io/docs/latest/contribution) if you want to participate in this project. ## Official Links * [Home Website](https://abp.io) * [Get Started](https://abp.io/get-started) - * [Features](https://abp.io/features) -* [Documents](https://docs.abp.io/) -* [Samples](https://docs.abp.io/en/abp/latest/Samples/Index) -* [Blog](https://blog.abp.io/) -* [Community](https://community.abp.io/) + * [Features](https://abp.io/framework) +* [Documents](https://abp.io/docs/latest) +* [Samples](https://abp.io/docs/latest/samples) +* [Blog](https://abp.io/blog) +* [Community](https://abp.io/community) * [Stackoverflow](https://stackoverflow.com/questions/tagged/abp) * [Twitter](https://twitter.com/abpframework) - - ## Support ABP GitHub repository stars are an important indicator of popularity and the size of the community. If you like ABP Framework, support us by clicking the star :star: on the repository. - - ## Discord Server We have a Discord server where you can chat with other ABP users. Share your ideas, report technical issues, showcase your creations, share the tips that worked for you and catch up with the latest news and announcements about ABP Framework. Join 👉 https://discord.gg/abp. - diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalization.csproj b/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalization.csproj index 267ace87f2..6e7bbc184e 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalization.csproj +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalization.csproj @@ -1,7 +1,7 @@ - netstandard2.0;netstandard2.1;net8.0 + netstandard2.0;netstandard2.1;net8.0;net9.0 diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalizationModule.cs b/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalizationModule.cs index fe24f4d4ec..3876b58c89 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalizationModule.cs +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalizationModule.cs @@ -2,8 +2,6 @@ using AbpIoLocalization.Admin.Localization; using AbpIoLocalization.Base.Localization; using AbpIoLocalization.Blog.Localization; -using AbpIoLocalization.Commercial.Localization; -using AbpIoLocalization.Community.Localization; using AbpIoLocalization.Docs.Localization; using AbpIoLocalization.Support.Localization; using AbpIoLocalization.Www; @@ -28,9 +26,7 @@ namespace AbpIoLocalization Configure(options => { - options.MapCodeNamespace("Volo.AbpIo.Commercial", typeof(AbpIoCommercialResource)); options.MapCodeNamespace("Volo.AbpIo.Domain", typeof(AbpIoBaseResource)); - options.MapCodeNamespace("Volo.AbpIo.Community", typeof(AbpIoCommunityResource)); }); Configure(options => @@ -57,11 +53,6 @@ namespace AbpIoLocalization .AddVirtualJson("/Blog/Localization/Resources") .AddBaseTypes(typeof(AbpIoBaseResource)); - options.Resources - .Add("en") - .AddVirtualJson("/Commercial/Localization/Resources") - .AddBaseTypes(typeof(AbpIoBaseResource)); - options.Resources .Add("en") .AddVirtualJson("/Docs/Localization/Resources") @@ -76,11 +67,6 @@ namespace AbpIoLocalization .Add("en") .AddVirtualJson("/Www/Localization/Resources") .AddBaseTypes(typeof(AbpIoBaseResource)); - - options.Resources - .Add("en") - .AddVirtualJson("/Community/Localization/Resources") - .AddBaseTypes(typeof(AbpIoBaseResource)); }); } } 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 5bc1680708..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", @@ -72,7 +77,7 @@ "Menu:NpmPackages": "NPM Packages", "Menu:Modules": "Modules", "Menu:Maintenance": "Maintenance", - "Menu:NugetPackages": "Nuget Packages", + "Menu:NugetPackages": "NuGet Packages", "CreateAnOrganization": "Create an organization", "Organizations": "Organizations", "LongName": "Long name", @@ -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", @@ -219,8 +231,8 @@ "ReIndexAllPostsConfirmationMessage": "Are you sure you want to reindex all posts?", "SuccessfullyReIndexAllPosts": "All posts have been successfully reindexed.", "Permission:FullSearch": "Full text search", - "Menu:CliAnalytics": "Cli Analytics", - "Menu:Reports": "Reports", + "Menu:CliAnalytics": "CLI Analytics", + "Menu:Reports": "Dynamic Reports", "TemplateName": "Template name", "TemplateVersion": "Template version", "DatabaseProvider": "Database provider", @@ -232,7 +244,7 @@ "UiFramework": "Ui framework", "Options": "Options", "CliAnalytics": "Cli Analytics", - "Reports": "Reports", + "Reports": "Dynamic Reports", "Permission:CliAnalyticses": "Cli Analyticses", "Permission:CliAnalytics": "Cli Analytics", "Permission:Reports": "Reports", @@ -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", @@ -456,7 +469,8 @@ "InterestedLicenseType": "Interested License Type", "MoveWaitList": "Move to wait list", "CommunityLinkTitle": "Open on the community website", - "CommunityLink": "Community link", + "CommunityLink": "Link", + "IpAddress": "IP Address", "ReloadFromSource": "Reload From the Source", "ReloadFromSourceConfirmationMessage": "This post will be refreshed from \"{0}\". Do you want to continue?", "UnitPrice": "Unit Price", @@ -565,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!", @@ -587,9 +602,10 @@ "AutoRenewalEnabled": "Auto Renewal Enabled", "LastAutoRenewalPaymentTime": "Last Auto Renewal Payment Time", "OrganizationDoesNotHaveACreditCard": "Organization does not have a credit card!", + "OrganizationDoesNotHaveACreditCardInGateway": "Organization does not have a credit card in the gateway!", "Permission:EditWinners": "Edit Winners", "Permission:ChangeDrawingStatus": "Change Drawing Status", - "Menu:Licenses": "Licenses", + "Menu:Licenses": "Licensing", "OrganizationId": "Organization Id", "RemoveAllWinnersConfirmationMessage": "Are you sure you want to remove all winners?", "AutoRenewals": "Auto Renewals", @@ -622,6 +638,17 @@ "DeleteImageSuccessMessage": "Image successfully deleted", "DeleteImage": "Delete Image", "NetTerms": "Terms (Days)", + "Menu:DynamicReports": "Dynamic Reports", + "Menu:Others": "Others", + "Menu:Packs&Modules": "Packs & Modules", + "ReleaseCaches": "Release Cache", + "Menu:HeroSections": "Hero Sections", + "HeroSections": "Hero Sections", + "DynamicReports": "Dynamic Reports", + "Menu:ReportsMenu": "Reports", + "Permission:HeroSections": "Hero Sections", + "RedirectLink": "Redirect link", + "HeroSectionsDeletionConfirmationMessage": "Are you sure you want to delete the hero section?", "AbpStudioName": "Abp Studio name" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json index feb63fc93e..ed7781b476 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json @@ -90,9 +90,9 @@ "TermsAndConditions": "Terms & Conditions", "WouldLikeToReceiveMarketingMaterials": "I would like to receive marketing materials like product deals & special offers.", "JoinOurMarketingNewsletter": "Join our marketing newsletter", - "CommunityPrivacyPolicyConfirmation": "I agree to the Terms & Conditions and Privacy Policy.", + "CommunityPrivacyPolicyConfirmation": "I agree to the Terms & Conditions and Privacy Policy.", "WouldLikeToReceiveNotification": "I would like to receive the latest news from abp.io websites.", - "CommercialNewsletterConfirmationMessage": "I agree to the Terms & Conditions and Privacy Policy.", + "CommercialNewsletterConfirmationMessage": "I agree to the Terms & Conditions and Privacy Policy.", "FreeDDDEBook": "Free DDD E-Book", "AdditionalServices": "Additional Services", "Learn": "Learn", @@ -118,7 +118,7 @@ "EULA": "EULA", "ABPCommercialIntroductionMessage": "Pre-built application modules, advanced startup templates, rapid application development tooling, professional UI themes and premium support.", "MasteringAbpFrameworkEBook": "Mastering ABP Framework", - "MasteringTheABPFrameworkExplanation": "Written by the creator of the ABP Framework, this book will help you gain a complete understanding of the framework and modern web application development techniques.", + "MasteringTheABPFrameworkExplanation": "Mastering ABP Framework e-book; written by the creator of the ABP Framework, will help you gain a complete understanding of the framework and modern web application development techniques.", "Speakers": "Speakers", "PreviousEvents": "Previous Events", "WatchTheEvent": "Watch the Event", @@ -158,7 +158,7 @@ "SeePreviousEvents": "See Previous Events", "CookieConsent_Accept": "Accept", "CookieConsent_Explanation_1": "We use cookies to give you the best experience on our website.", - "CookieConsent_Explanation_2": "If you continue to browse, then you agree to our Privacy policy and cookie policy..", + "CookieConsent_Explanation_2": "If you continue to browse, then you agree to our Privacy policy and cookie policy..", "Error_Page_400_Title": "There was a problem serving the requested page.", "Error_Page_400_Description_1": "Usually this means that an unexpected error happened while processing your request.", "Error_Page_400_Description_2": "If the problem persists, contact us at info@abp.io and we'll help get you on your way.", @@ -239,7 +239,7 @@ "Trainings": "Trainings", "MeetTheABPCommunity": "Meet the ABP Community", "DisplayName:CommunityIndexPagePoll": "Community Index Page Poll", - "ReturnOfInvestment": "Return Of Investment", + "ReturnOnInvestment": "Return on Investment", "PromotionalOffers": "Promotional Offers", "PromotionalOffersDefinition": "Discounts, seasonal campaigns, etc.", "EventsDefinition": "Community Talks, Webinars, ABP .NET Conference, etc.", @@ -251,6 +251,7 @@ "VideoCourses": "Essential Videos", "DoYouAgreePrivacyPolicy": "By clicking Subscribe button you agree to the Terms & Conditions and Privacy Policy.", "AbpConferenceDescription": "ABP Conference is a virtual event for .NET developers to learn and connect with the community.", - "Mobile": "Mobile" + "Mobile": "Mobile", + "MetaTwitterCard": "summary_large_image" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/en.json index 2da5698215..880cb53a9e 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/en.json @@ -1,8 +1,9 @@ { "culture": "en", "texts": { - "AbpTitle": "Read All Blog Posts", + "AbpTitle": "New Blog Post | ABP.IO", "AbpDescription": "ABP is an open source application framework focused on AspNet Core based web application development. Don't repeat yourself, focus on your own business code.", - "AbpDefinition": "ABP blog for .NET development, cross-platform, ASP.NET application templates, ABP-related news and more..." + "AbpDefinition": "Create a new blog post and share your knowledge and experience with ABP.", + "Blogs": "Blog Posts" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/AbpIoCommercialResource.cs b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/AbpIoCommercialResource.cs deleted file mode 100644 index 76eb74933d..0000000000 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/AbpIoCommercialResource.cs +++ /dev/null @@ -1,10 +0,0 @@ -using Volo.Abp.Localization; - -namespace AbpIoLocalization.Commercial.Localization -{ - [LocalizationResourceName("AbpIoCommercial")] - public class AbpIoCommercialResource - { - - } -} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ar.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ar.json index 6ab986076e..5e3a26f6fb 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ar.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ar.json @@ -157,7 +157,7 @@ "ABPCLIExplanation": "ABP CLI (واجهة سطر الأوامر) هي أداة سطر أوامر لتنفيذ بعض العمليات الشائعة للحلول المستندة إلى ABP.", "ABPSuiteEasilyCURD": "ABP Suite هي أداة تسمح لك بإنشاء صفحات CRUD بسهولة", "WeAreHereToHelp": "نحن هنا من أجل المساعدة ", - "BrowseOrAskQuestion": "يمكنك تصفح مواضيع المساعدة الخاصة بنا أو البحث في الأسئلة الشائعة ، أو يمكنك طرح سؤال علينا باستخدام نموذج الاتصال .", + "BrowseOrAskQuestion": "يمكنك تصفح مواضيع المساعدة الخاصة بنا أو البحث في الأسئلة الشائعة ، أو يمكنك طرح سؤال علينا باستخدام نموذج الاتصال .", "SearchQuestionPlaceholder": "البحث في الأسئلة المتداولة", "WhatIsTheABPCommercial": "ما هو برنامج ABP التجاري؟", "WhatAreDifferencesThanAbpFramework": "ما هي الاختلافات بين إطار عمل ABP مفتوح المصدر وإطار عمل ABP التجاري؟", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/cs.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/cs.json index a92366fa07..30500aab9b 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/cs.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/cs.json @@ -157,7 +157,7 @@ "ABPCLIExplanation": "ABP CLI (Command Line Interface) je nástroj příkazového řádku pro provádění některých běžných operací pro řešení založená na ABP.", "ABPSuiteEasilyCURD": "ABP Suite je nástroj, který vám umožní snadno vytvářet stránky CRUD", "WeAreHereToHelp": "Jsme tu, abychom vám Pomohli", - "BrowseOrAskQuestion": "Můžete procházet naše témata nápovědy nebo vyhledávat v často kladených dotazech, případně nám můžete položit otázku pomocí kontaktního formuláře.", + "BrowseOrAskQuestion": "Můžete procházet naše témata nápovědy nebo vyhledávat v často kladených dotazech, případně nám můžete položit otázku pomocí kontaktního formuláře.", "SearchQuestionPlaceholder": "Hledejte v často kladených otázkách", "WhatIsTheABPCommercial": "Co je ABP Commercial?", "WhatAreDifferencesThanAbpFramework": "Jaké jsou rozdíly mezi open source ABP Framework a ABP Commercial?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/de.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/de.json index dcea7faa20..210f46ff8b 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/de.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/de.json @@ -157,7 +157,7 @@ "ABPCLIExplanation": "ABP CLI (Command Line Interface) ist ein Befehlszeilentool zum Ausführen einiger allgemeiner Operationen für ABP-basierte Lösungen.", "ABPSuiteEasilyCURD": "ABP Suite ist ein Tool, mit dem Sie einfach CRUD-Seiten erstellen können", "WeAreHereToHelp": "Wir sind hier, um Hilfe", - "BrowseOrAskQuestion": "Sie können unsere Hilfethemen durchsuchen oder in häufig gestellten Fragen suchen oder uns über das Kontaktformular eine Frage stellen.", + "BrowseOrAskQuestion": "Sie können unsere Hilfethemen durchsuchen oder in häufig gestellten Fragen suchen oder uns über das Kontaktformular eine Frage stellen.", "SearchQuestionPlaceholder": "Suche in häufig gestellten Fragen", "WhatIsTheABPCommercial": "Was ist der ABP-Werbespot?", "WhatAreDifferencesThanAbpFramework": "Was sind die Unterschiede zwischen dem Open Source ABP Framework und dem ABP Commercial?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/es.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/es.json index a8389d694d..8d68f0c60f 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/es.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/es.json @@ -157,7 +157,7 @@ "ABPCLIExplanation": "ABP CLI (Command Line Interface) es una herramienta de línea de comandos para realizar algunas operaciones comunes para soluciones basadas en ABP.", "ABPSuiteEasilyCURD": "ABP Suite es una herramienta que le permite crear fácilmente páginas CRUD", "WeAreHereToHelp": "Estamos aquí para Ayuda ", - "BrowseOrAskQuestion": "Puede explorar nuestros temas de ayuda o buscar preguntas frecuentes, o puede hacernos una pregunta mediante el formulario de contacto .", + "BrowseOrAskQuestion": "Puede explorar nuestros temas de ayuda o buscar preguntas frecuentes, o puede hacernos una pregunta mediante el formulario de contacto .", "SearchQuestionPlaceholder": "Buscar en preguntas frecuentes", "WhatIsTheABPCommercial": "¿Qué es ABP Commercial?", "WhatAreDifferencesThanAbpFramework": "¿Cuáles son las diferencias entre ABP Framework de código abierto y ABP Commercial?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json index 4c87baefb3..8a85358884 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json @@ -160,7 +160,7 @@ "ABPCLIExplanation": "ABP CLI (Command Line Interface) on komentorivityökalu joidenkin yleisten toimintojen suorittamiseen ABP-pohjaisiin ratkaisuihin.", "ABPSuiteEasilyCURD": "ABP Suite on työkalu, jonka avulla voit helposti luoda CRUD-sivuja", "WeAreHereToHelp": "Apua olemme täällä", - "BrowseOrAskQuestion": "Voit selata ohjeaiheitamme tai etsiä usein kysyttyjä kysymyksiä tai voit esittää meille kysymyksiä yhteydenottolomakkeella .", + "BrowseOrAskQuestion": "Voit selata ohjeaiheitamme tai etsiä usein kysyttyjä kysymyksiä tai voit esittää meille kysymyksiä yhteydenottolomakkeella .", "SearchQuestionPlaceholder": "Hae usein kysyttyjä kysymyksiä", "WhatIsTheABPCommercial": "Mikä on ABP-kauppa?", "WhatAreDifferencesThanAbpFramework": "Mitä eroja on avoimen lähdekoodin ABP Frameworkilla ja ABP Commercialilla?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fr.json index a78b492d07..998d0d9129 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fr.json @@ -157,7 +157,7 @@ "ABPCLIExplanation": "ABP CLI (Command Line Interface) est un outil de ligne de commande pour effectuer certaines opérations courantes pour les solutions basées sur ABP.", "ABPSuiteEasilyCURD": "ABP Suite est un outil qui vous permet de créer facilement des pages CRUD", "WeAreHereToHelp": "Nous sommes ici pour Aide ", - "BrowseOrAskQuestion": "Vous pouvez parcourir nos rubriques d'aide ou rechercher dans les questions fréquemment posées, ou vous pouvez nous poser une question en utilisant le formulaire de contact .", + "BrowseOrAskQuestion": "Vous pouvez parcourir nos rubriques d'aide ou rechercher dans les questions fréquemment posées, ou vous pouvez nous poser une question en utilisant le formulaire de contact .", "SearchQuestionPlaceholder": "Rechercher dans les questions fréquemment posées", "WhatIsTheABPCommercial": "Qu'est-ce que la publicité ABP?", "WhatAreDifferencesThanAbpFramework": "Quelles sont les différences entre le Framework ABP open source et le ABP Commercial?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hi.json index 68fab24fc2..3adb4d3108 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hi.json @@ -157,7 +157,7 @@ "ABPCLIExplanation": "ABP CLI (कमांड लाइन इंटरफेस) ABP आधारित समाधानों के लिए कुछ सामान्य ऑपरेशन करने के लिए एक कमांड लाइन टूल है।", "ABPSuiteEasilyCURD": "एबीपी सूट एक उपकरण है जो आपको आसानी से CRUD पेज बनाने की अनुमति देता है", "WeAreHereToHelp": "हम यहाँ हैं मदद ", - "BrowseOrAskQuestion": "आप हमारे सहायता विषयों को ब्राउज़ कर सकते हैं या अक्सर पूछे जाने वाले प्रश्नों में खोज कर सकते हैं, या आप संपर्क फ़ॉर्म का उपयोग करके हमसे एक प्रश्न पूछ सकते हैं।", + "BrowseOrAskQuestion": "आप हमारे सहायता विषयों को ब्राउज़ कर सकते हैं या अक्सर पूछे जाने वाले प्रश्नों में खोज कर सकते हैं, या आप संपर्क फ़ॉर्म का उपयोग करके हमसे एक प्रश्न पूछ सकते हैं।", "SearchQuestionPlaceholder": "अक्सर पूछे जाने वाले प्रश्नों में खोजें", "WhatIsTheABPCommercial": "ABP कमर्शियल क्या है?", "WhatAreDifferencesThanAbpFramework": "ओपन सोर्स ABP फ्रेमवर्क और ABP कमर्शियल के बीच क्या अंतर हैं?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hr.json index 07974134a2..d7865bf455 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hr.json @@ -160,7 +160,7 @@ "ABPCLIExplanation": "ABP CLI (sučelje naredbenog retka) alat je naredbenog retka za izvođenje nekih uobičajenih operacija za rješenja temeljena na ABP-u.", "ABPSuiteEasilyCURD": "ABP Suite je alat koji vam omogućuje jednostavno stvaranje CRUD stranica", "WeAreHereToHelp": "Ovdje smo da pomognemo", - "BrowseOrAskQuestion": "Možete pregledavati naše teme pomoći ili pretraživati u često postavljanim pitanjima ili nam možete postaviti pitanje koristeći obrazac za kontakt .", + "BrowseOrAskQuestion": "Možete pregledavati naše teme pomoći ili pretraživati u često postavljanim pitanjima ili nam možete postaviti pitanje koristeći obrazac za kontakt .", "SearchQuestionPlaceholder": "Pretražite u često postavljanim pitanjima", "WhatIsTheABPCommercial": "Što je ABP Commercial?", "WhatAreDifferencesThanAbpFramework": "Koje su razlike između open source ABP Framework i ABP Commercial?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hu.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hu.json index 4fbdb2a8d4..5cbe578021 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hu.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hu.json @@ -160,7 +160,7 @@ "ABPCLIExplanation": "Az ABP CLI (Command Line Interface) egy parancssori eszköz az ABP alapú megoldások általános műveleteinek végrehajtására.", "ABPSuiteEasilyCURD": "Az ABP Suite egy olyan eszköz, amellyel könnyedén hozhat létre CRUD oldalakat", "WeAreHereToHelp": "Azért vagyunk itt, hogy segítsünk", - "BrowseOrAskQuestion": "Böngésszen a súgótémáink között, kereshet a gyakran ismételt kérdések között, vagy feltehet nekünk kérdést a kapcsolatfelvételi űrlap használatával.", + "BrowseOrAskQuestion": "Böngésszen a súgótémáink között, kereshet a gyakran ismételt kérdések között, vagy feltehet nekünk kérdést a kapcsolatfelvételi űrlap használatával.", "SearchQuestionPlaceholder": "Keressen a gyakran ismételt kérdések között", "WhatIsTheABPCommercial": "Mi az az ABP Commercial?", "WhatAreDifferencesThanAbpFramework": "Mi a különbség a nyílt forráskódú ABP Framework és az ABP Commercial között?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/is.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/is.json index be9337e842..6e0572a790 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/is.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/is.json @@ -157,7 +157,7 @@ "ABPCLIExplanation": "ABP CLI (Command Line Interface) er skipanalínutæki til að framkvæma nokkrar algengar aðgerðir fyrir ABP byggðar lausnir.", "ABPSuiteEasilyCURD": "ABP Suite er tæki sem gerir þér kleift að búa til CRUD síður auðveldlega", "WeAreHereToHelp": "Við erum hérna til að Hjálpa", - "BrowseOrAskQuestion": "Þú getur skoðað hjálparefni okkar eða leitað í algengum spurningum, eða þú getur spurt okkur spurningar með því að nota samskiptaform .", + "BrowseOrAskQuestion": "Þú getur skoðað hjálparefni okkar eða leitað í algengum spurningum, eða þú getur spurt okkur spurningar með því að nota samskiptaform .", "SearchQuestionPlaceholder": "Leitaðu í algengum spurningum", "WhatIsTheABPCommercial": "Hvað er ABP Commercial?", "WhatAreDifferencesThanAbpFramework": "Hver er munurinn á milli open source ABP Framework og ABP Commercial?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json index edc80b48e1..481a1a416a 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json @@ -157,7 +157,7 @@ "ABPCLIExplanation": "ABP CLI (Command Line Interface) è uno strumento a riga di comando per eseguire alcune operazioni comuni per soluzioni basate su ABP.", "ABPSuiteEasilyCURD": "ABP Suite è uno strumento che ti permette di creare facilmente pagine CRUD", "WeAreHereToHelp": "Siamo qui per Aiutarti", - "BrowseOrAskQuestion": "Puoi sfogliare i nostri argomenti della guida o cercare nelle domande frequenti oppure puoi farci una domanda utilizzando il modulo di contatto .", + "BrowseOrAskQuestion": "Puoi sfogliare i nostri argomenti della guida o cercare nelle domande frequenti oppure puoi farci una domanda utilizzando il modulo di contatto .", "SearchQuestionPlaceholder": "Cerca nelle domande frequenti", "WhatIsTheABPCommercial": "Cos'è ABP Commercial?", "WhatAreDifferencesThanAbpFramework": "Quali sono le differenze tra ABP Framework open source e ABP Commercial?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/nl.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/nl.json index da7037c8f2..197c23d17b 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/nl.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/nl.json @@ -157,7 +157,7 @@ "ABPCLIExplanation": "ABP CLI (Command Line Interface) is een opdrachtregelprogramma om een aantal veelvoorkomende bewerkingen uit te voeren voor op ABP gebaseerde oplossingen.", "ABPSuiteEasilyCURD": "ABP Suite is een tool waarmee u eenvoudig CRUD-pagina's kunt maken", "WeAreHereToHelp": "We zijn hier om Help", - "BrowseOrAskQuestion": "U kunt door onze Help-onderwerpen bladeren of zoeken in veelgestelde vragen, of u kunt ons een vraag stellen via het contactformulier.", + "BrowseOrAskQuestion": "U kunt door onze Help-onderwerpen bladeren of zoeken in veelgestelde vragen, of u kunt ons een vraag stellen via het contactformulier.", "SearchQuestionPlaceholder": "Zoeken in veelgestelde vragen", "WhatIsTheABPCommercial": "Wat is de ABP Commercial?", "WhatAreDifferencesThanAbpFramework": "Wat zijn de verschillen tussen het open source ABP Framework en de ABP Commercial?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pl-PL.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pl-PL.json index 8c37e62706..9bf2c05d39 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pl-PL.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pl-PL.json @@ -157,7 +157,7 @@ "ABPCLIExplanation": "ABP CLI (Interfejs wiersza poleceń) to narzędzie wiersza poleceń do wykonywania niektórych typowych operacji dla rozwiązań opartych na ABP.", "ABPSuiteEasilyCURD": "ABP Suite to narzędzie, które pozwala łatwo tworzyć strony CRUD", "WeAreHereToHelp": "Jesteśmy tutaj, aby pomoc", - "BrowseOrAskQuestion": "Możesz przeglądać nasze tematy pomocy lub przeszukiwać często zadawane pytania albo możesz zadać nam pytanie, korzystając z formularza kontaktowego.", + "BrowseOrAskQuestion": "Możesz przeglądać nasze tematy pomocy lub przeszukiwać często zadawane pytania albo możesz zadać nam pytanie, korzystając z formularza kontaktowego.", "SearchQuestionPlaceholder": "Szukaj w często zadawanych pytaniach", "WhatIsTheABPCommercial": "Co to jest reklama ABP?", "WhatAreDifferencesThanAbpFramework": "Jakie są różnice między Open Source ABP Framework a ABP Commercial?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pt-BR.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pt-BR.json index 43d80af012..2de960edf1 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pt-BR.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pt-BR.json @@ -157,7 +157,7 @@ "ABPCLIExplanation": "ABP CLI (Command Line Interface) é uma ferramenta de linha de comando para realizar algumas operações comuns para soluções baseadas em ABP.", "ABPSuiteEasilyCURD": "ABP Suite é uma ferramenta que permite criar facilmente páginas CRUD", "WeAreHereToHelp": "Estamos aqui para ajudar ", - "BrowseOrAskQuestion": "Você pode navegar em nossos tópicos de ajuda ou pesquisar as perguntas mais frequentes, ou pode nos fazer uma pergunta usando o formulário de contato .", + "BrowseOrAskQuestion": "Você pode navegar em nossos tópicos de ajuda ou pesquisar as perguntas mais frequentes, ou pode nos fazer uma pergunta usando o formulário de contato .", "SearchQuestionPlaceholder": "Pesquise nas perguntas mais frequentes", "WhatIsTheABPCommercial": "O que é o comercial ABP?", "WhatAreDifferencesThanAbpFramework": "Quais são as diferenças entre o ABP Framework de código aberto e o ABP Commercial?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ro-RO.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ro-RO.json index b04650b958..d48ea54135 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ro-RO.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ro-RO.json @@ -157,7 +157,7 @@ "ABPCLIExplanation": "ABP CLI (Command Line Interface) este un instrument de linii de comandă pentru executarea unor operaţii comune pentru soluţiile ABP.", "ABPSuiteEasilyCURD": "Suita ABP este un instrument care vă permite crearea cu uşurinţă a paginilor CRUD", "WeAreHereToHelp": "Suntem aici să Ajutăm", - "BrowseOrAskQuestion": "Puteţi răsfoi subiectele noastre de ajutor sau puteţi căuta în cadrul secţiunii întrebărilor frecvent adresate, sau ne puteţi adresa o întrebare folosind formularul de contact.", + "BrowseOrAskQuestion": "Puteţi răsfoi subiectele noastre de ajutor sau puteţi căuta în cadrul secţiunii întrebărilor frecvent adresate, sau ne puteţi adresa o întrebare folosind formularul de contact.", "SearchQuestionPlaceholder": "Caută în întrebările frecvent adresate", "WhatIsTheABPCommercial": "Ce este ABP Commercial?", "WhatAreDifferencesThanAbpFramework": "Care sunt diferenţele dintre ABP Framework şi ABP Comercial?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ru.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ru.json index ee34099ccb..dce8c92888 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ru.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ru.json @@ -160,7 +160,7 @@ "ABPCLIExplanation": "ABP CLI (интерфейс командной строки) — это инструмент командной строки для выполнения некоторых распространенных операций для решений на основе ABP.", "ABPSuiteEasilyCURD": "ABP Suite — это инструмент, который позволяет легко создавать страницы CRUD.", "WeAreHereToHelp": "Мы здесь, чтобы Помощь", - "BrowseOrAskQuestion": "Вы можете просмотреть разделы справки или выполнить поиск по часто задаваемым вопросам, либо задать нам вопрос, используя Форма обратной связи.", + "BrowseOrAskQuestion": "Вы можете просмотреть разделы справки или выполнить поиск по часто задаваемым вопросам, либо задать нам вопрос, используя Форма обратной связи.", "SearchQuestionPlaceholder": "Поиск в часто задаваемых вопросах", "WhatIsTheABPCommercial": "Что такое ABP Commercial?", "WhatAreDifferencesThanAbpFramework": "Каковы различия между ABP Framework с открытым исходным кодом и ABP Commercial?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sk.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sk.json index 48f4a3c304..e59887beab 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sk.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sk.json @@ -157,7 +157,7 @@ "ABPCLIExplanation": "ABP CLI (Command Line Interface) je nástroj v príkazovom riadku na vykonávanie niektorých bežných operácií v riešeniach založených na ABP.", "ABPSuiteEasilyCURD": "ABP Suite je nástroj, ktorý vám umožňuje jednoducho vytvárať CRUD stránky.", "WeAreHereToHelp": "Sme tu, aby sme pomohli", - "BrowseOrAskQuestion": "Môžete si prezerať témy našej nápovedy alebo vyhľadávať v často kladených otázkach, prípadne nám môžete položiť otázku pomocou kontaktného formulára.", + "BrowseOrAskQuestion": "Môžete si prezerať témy našej nápovedy alebo vyhľadávať v často kladených otázkach, prípadne nám môžete položiť otázku pomocou kontaktného formulára.", "SearchQuestionPlaceholder": "Vyhľadávanie v často kladených otázkach", "WhatIsTheABPCommercial": "Čo je to ABP Commercial?", "WhatAreDifferencesThanAbpFramework": "Aké sú rozdiely medzi open source ABP Framework a ABP Commercial?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sl.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sl.json index 870268c576..3fb3d559d4 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sl.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sl.json @@ -157,7 +157,7 @@ "ABPCLIExplanation": "ABP CLI (vmesnik ukazne vrstice) je orodje ukazne vrstice za izvajanje nekaterih običajnih operacij za rešitve, ki temeljijo na ABP.", "ABPSuiteEasilyCURD": "ABP Suite je orodje, ki vam omogoča preprosto ustvarjanje strani CRUD", "WeAreHereToHelp": "Tukaj smo za pomoč", - "BrowseOrAskQuestion": "Brskate lahko po naših temah pomoči ali iščete po pogostih vprašanjih ali pa nam postavite vprašanje z uporabo kontaktnega obrazca.", + "BrowseOrAskQuestion": "Brskate lahko po naših temah pomoči ali iščete po pogostih vprašanjih ali pa nam postavite vprašanje z uporabo kontaktnega obrazca.", "SearchQuestionPlaceholder": "Iščite v pogosto zastavljenih vprašanjih", "WhatIsTheABPCommercial": "Kaj je reklama ABP?", "WhatAreDifferencesThanAbpFramework": "Kakšne so razlike med odprtokodnim okvirom ABP in ABP Commercial?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json index 64bf89dc48..2fd650a4fb 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json @@ -153,7 +153,7 @@ "ABPCLIExplanation": "ABP CLI (Komut Satırı Arayüzü), ABP tabanlı projeler için bazı ortak işlemleri gerçekleştirmek için bir komut satırı aracıdır.", "ABPSuiteEasilyCURD": "ABP Suite, kolayca CRUD sayfaları oluşturmanıza olanak sağlayan bir araçtır", "WeAreHereToHelp": "Yardım için buradayız", - "BrowseOrAskQuestion": "Yardım konularımıza göz atabilir veya sık sorulan sorularda arama yapabilir ya da iletişim formunu kullanarak bize soru sorabilirsiniz.", + "BrowseOrAskQuestion": "Yardım konularımıza göz atabilir veya sık sorulan sorularda arama yapabilir ya da iletişim formunu kullanarak bize soru sorabilirsiniz.", "SearchQuestionPlaceholder": "Sık sorulan sorularda ara", "WhatIsTheABPCommercial": "ABP Commercial nedir?", "WhatAreDifferencesThanAbpFramework": "Açık kaynaklı ABP Frameworkü ile ABP Commercial arasındaki farklar nelerdir?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/vi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/vi.json index 231687fc9b..eab68bdf79 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/vi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/vi.json @@ -157,7 +157,7 @@ "ABPCLIExplanation": "ABP CLI (Giao diện dòng lệnh) là một công cụ dòng lệnh để thực hiện một số hoạt động phổ biến cho các giải pháp dựa trên ABP.", "ABPSuiteEasilyCURD": "ABP Suite là một công cụ cho phép bạn dễ dàng tạo các trang CRUD", "WeAreHereToHelp": "Chúng tôi ở đây để Trợ giúp ", - "BrowseOrAskQuestion": "Bạn có thể duyệt qua các chủ đề trợ giúp của chúng tôi hoặc tìm kiếm trong các câu hỏi thường gặp hoặc bạn có thể đặt câu hỏi cho chúng tôi bằng cách sử dụng biểu mẫu liên hệ .", + "BrowseOrAskQuestion": "Bạn có thể duyệt qua các chủ đề trợ giúp của chúng tôi hoặc tìm kiếm trong các câu hỏi thường gặp hoặc bạn có thể đặt câu hỏi cho chúng tôi bằng cách sử dụng biểu mẫu liên hệ .", "SearchQuestionPlaceholder": "Tìm kiếm trong các câu hỏi thường gặp", "WhatIsTheABPCommercial": "ABP thương mại là gì?", "WhatAreDifferencesThanAbpFramework": "Sự khác biệt giữa Khung ABP nguồn mở và ABP Thương mại là gì?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json index 5f8141bf2a..60364800b6 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json @@ -160,7 +160,7 @@ "ABPCLIExplanation": "ABP CLI(命令行界面)是一种命令行工具,用于执行基于 ABP 的解决方案的一些常用操作。", "ABPSuiteEasilyCURD": "ABP Suite 是一款可让您轻松创建 CRUD 页面的工具", "WeAreHereToHelp": "我们在这里帮助", - "BrowseOrAskQuestion": "您可以浏览我们的帮助主题或搜索常见问题,也可以使用 联系表单向我们提问。", + "BrowseOrAskQuestion": "您可以浏览我们的帮助主题或搜索常见问题,也可以使用 联系表单向我们提问。", "SearchQuestionPlaceholder": "在常见问题中搜索", "WhatIsTheABPCommercial": "ABP Commercial 是什么?", "WhatAreDifferencesThanAbpFramework": "开源 ABP 框架与 ABP 商业版之间有哪些区别?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json index 302007af79..212c641305 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json @@ -159,7 +159,7 @@ "ABPCLIExplanation": "ABP CLI(命令行頁面)是一個執行基於ABP解決方案的一些常見操作的命令行工具.", "ABPSuiteEasilyCURD": "ABP Suite是一個使你輕松創建CURD頁面的工具", "WeAreHereToHelp": "我們在這裏為你提供幫助", - "BrowseOrAskQuestion": "你可以瀏覽我們的幫助主題或搜索常見的問題, 或者你可以使用聯系表單向我們提問.", + "BrowseOrAskQuestion": "你可以瀏覽我們的幫助主題或搜索常見的問題, 或者你可以使用聯系表單向我們提問.", "SearchQuestionPlaceholder": "搜索常見的問題", "WhatIsTheABPCommercial": "什麽是ABP商業版?", "WhatAreDifferencesThanAbpFramework": "ABP框架與ABP商業版有什麽不同?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/AbpIoCommunityResource.cs b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/AbpIoCommunityResource.cs deleted file mode 100644 index 2d7f93aeae..0000000000 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/AbpIoCommunityResource.cs +++ /dev/null @@ -1,10 +0,0 @@ -using Volo.Abp.Localization; - -namespace AbpIoLocalization.Community.Localization -{ - [LocalizationResourceName("AbpIoCommunity")] - public class AbpIoCommunityResource - { - - } -} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/en.json index 36cad167bd..23176ac6ac 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/en.json @@ -4,6 +4,7 @@ "Buy": "Buy", "SeeBookDetails": "See Book Details", "MasteringAbpFrameworkEBookDescription": "This book will help you gain a complete understanding of the framework and modern web application development techniques.", - "Feedback": "Feedback" + "Feedback": "Feedback", + "DocumentationDescription": "Dive into ABP's latest documentation. Find guides, API references, and best practices to help you effectively build and manage modern web apps with ABP" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ar.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ar.json index 720cbd39e1..da957142bb 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ar.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ar.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "تطبيق ويب تقدمي", "Preview": "معاينة", "CreateANewSolution": "قم بإنشاء حل جديد", - "ABPFrameworkFeatures": "إطار عمل ABP ميزات", + "FrameworkFeatures": "إطار عمل ABP ميزات", "Commercial": "تجاري", "ThirdPartyTools": "أدوات الطرف الثالث", "Back": "عودة", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/cs.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/cs.json index 2aea81b930..e57855cdae 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/cs.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/cs.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "Progresivní webová aplikace", "Preview": "Náhled", "CreateANewSolution": "Vytvořte nové řešení", - "ABPFrameworkFeatures": "Funkce rámce ABP", + "FrameworkFeatures": "Funkce rámce ABP", "Commercial": "Komerční", "ThirdPartyTools": "Nástroje třetích stran", "Back": "Zadní", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/de.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/de.json index 0b0eb71adf..d125dbded4 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/de.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/de.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "Progressive Webanwendung", "Preview": "Vorschau", "CreateANewSolution": "Erstellen Sie eine neue Lösung", - "ABPFrameworkFeatures": "ABP-Framework- Funktionen", + "FrameworkFeatures": "ABP-Framework- Funktionen", "Commercial": "Kommerziell", "ThirdPartyTools": "Tools von Drittanbietern", "Back": "Zurück", 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 d35936411c..987757cd89 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json @@ -2,6 +2,7 @@ "culture": "en", "texts": { "GetStarted": "Get Started", + "GetStarted_Page_Title": "Get Started with ABP | Quick and Easy Setup Guide", "Create": "Create", "NewProject": "New Project", "DirectDownload": "Direct Download", @@ -29,7 +30,7 @@ "DomainDrivenDesignExplanation": "Designed and developed based on DDD patterns and principles. Provides a layered model for your application.", "Authorization": "Authorization", "AuthorizationExplanation": "Advanced authorization with user, role and fine-grained permission system. Built on Microsoft Identity library.", - "MultiTenancy": "Multi-Tenancy", + "MultiTenancy": "Multi-tenancy", "MultiTenancyExplanationShort": "SaaS applications made easy! Integrated multi-tenancy from database to UI.", "CrossCuttingConcerns": "Cross Cutting Concerns", "CrossCuttingConcernsExplanationShort": "Complete infrastructure for authorization, validation, exception handling, caching, audit logging, transaction management and more.", @@ -94,7 +95,7 @@ "DynamicForms": "Dynamic Forms", "BundlingMinification": "Bundling & Minification", "BackgroundJobs": "Background Jobs", - "BackgroundJobsExplanation": "Define simple classes to execute jobs in the background as queued. Use the built-in job manager or integrate your own. Hangfire & RabbitMQ integrations are already available.", + "BackgroundJobsExplanation": "Define simple classes to execute jobs in the background as queued. Use the built-in job manager or integrate your own. Hangfire, RabbitMQ and Quartz integrations are already available.", "DDDInfrastructure": "DDD Infrastructure", "DomainDrivenDesignInfrastructure": "Domain Driven Design Infrastructure", "AutoRESTAPIs": "Auto REST APIs", @@ -109,18 +110,20 @@ "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", "DependencyInjection": "Dependency Injection", "DependencyInjectionByConventions": "Dependency Injection by Conventions", - "ABPCLIExplanation": "ABP CLI (Command Line Interface) is a command line tool to automate some common operations for ABP based solutions.", "ModularityExplanation": "ABP provides a complete infrastructure to build your own application modules that may have entities, services, database integration, APIs, UI components and so on..", - "MultiTenancyExplanation": "ABP framework doesn't only support developing multi-tenant applications, but also makes your code mostly unaware of the multi-tenancy.", + "MultiTenancyExplanation": "ABP doesn't only support developing multi-tenant applications, but also makes your code mostly unaware of the multi-tenancy.", "MultiTenancyExplanation2": "Can automatically determine the current tenant, isolate data of different tenants from each other.", "MultiTenancyExplanation3": "Supports single database, database per tenant and hybrid approaches.", "MultiTenancyExplanation4": "You focus on your business code and let the framework handle multi-tenancy on behalf of you.", - "BootstrapTagHelpersExplanation": "Instead of manually writing the repeating details of bootstrap components, use ABP's tag helpers to simplify it and take advantage of the IntelliSense. You can definitely use Bootstrap whenever you need it.", + "BootstrapTagHelpersExplanation": "Instead of manually writing the repeating details of bootstrap components, use ABP's tag helpers to simplify it and take advantage of the IntelliSense. You can directly use Bootstrap whenever you need it.", "DynamicFormsExplanation": "Dynamic form & input tag helpers can create the complete form from a C# class as the model.", "AuthenticationAuthorizationExplanation": "Rich authentication & authorization options integrated to ASP.NET Core Identity & OpenIddict. Provides an extensible & detailed permission system.", "CrossCuttingConcernsExplanation": "Don't repeat yourself to implement all this common stuff again & again. Focus on your business code and let ABP automate them by conventions.", @@ -137,7 +140,7 @@ "ApplicationService": "Application Service", "DataTransferObject": "Data Transfer Object", "AggregateRootEntity": "Aggregate Root, Entity", - "AutoRESTAPIsExplanation": "ABP can automagically configure your application services as API Controllers by convention.", + "AutoRESTAPIsExplanation": "ABP can automatically configure your application services as API Controllers by convention.", "DynamicClientProxiesExplanation": "Easily consume your APIs from JavaScript and C# clients.", "DistributedEventBusWithRabbitMQIntegrationExplanation": "Easily publish & consume distributed events using built-in Distributed Event Bus with RabbitMQ integration available.", "TestInfrastructureExplanation": "The framework has been developed with unit & integration testing in mind. Provides you base classes to make it easier. Startup templates come pre-configured for testing.", @@ -151,15 +154,18 @@ "DataFilteringExplanation": "Define and use data filters that are automatically applied when you query entities from the database. Soft Delete & MultiTenant filters are provided out of the box when you implement simple interfaces.", "PublishEvents": "Publish Events", "HandleEvents": "Handle Events", - "AndMore": "and more...", "Code": "Code", "Result": "Result", - "SeeTheDocumentForMoreInformation": "Check out the {0} document for more information", - "IndexPageHeroSection": "open sourceWeb Application
Framework
for asp.net core", + "SeeTheDocumentForMoreInformation": "Check out the {0} document for more information", "UiFramework": "UI Framework", "EmailAddress": "Email address", "Mobile": "Mobile", + "MobileTitle": "Select a Mobile Application", + "MobileTitleDescription" : "You can include a mobile application that is integrated to your backend.", "ReactNative": "React Native", + "AdditonalOptions" : "Additonal Options", + "CreateYourSolution" : "Create a Your Solution", + "CreateYourSolutionDescription" : "Execute the following ABP CLI command in your command-line terminal:", "Strong": "Strong", "Complete": "Complete", "BasedLayeringModel": "Based Layering Model", @@ -185,7 +191,7 @@ "InstallABPCLIInfo": "ABP CLI is the fastest way to start a new solution with the ABP framework. Install the ABP CLI using a command line window:", "DifferentLevelOfNamespaces": "You can use different levels of namespaces; e.g. BookStore, Acme.BookStore or Acme.Retail.BookStore.", "ABPCLIExamplesInfo": "The new command creates a layered MVC application with Entity Framework Core as the database provider. However, it has additional options.", - "SeeCliDocumentForMoreInformation": "Check out the ABP CLI document for more options or select the \"Direct Download\" tab above.", + "SeeCliDocumentForMoreInformation": "Check out the ABP CLI document for more options or select the \"Direct Download\" tab above.", "Optional": "Optional", "LocalFrameworkRef": "Keep the local project reference for the framework packages.", "BlobStoring": "BLOB Storing", @@ -194,7 +200,6 @@ "TextTemplatingExplanation": "Text templating is used to dynamically render contents based on a template and a model (a data object). For example, you can use it to create dynamic email contents with a pre-built template.", "MultipleUIOptions": "Multiple UI Options", "MultipleDBOptions": "Multiple Database Providers", - "MultipleUIOptionsExplanation": "The core framework is designed as UI independent and can work with any type of UI system, while there are multiple pre-built and integrated options provided out of the box.", "MultipleDBOptionsExplanation": "The framework can work with any data source, while the following providers are officially developed and supported:", "SelectLanguage": "Select language", "LatestPostOnCommunity": "Latest Post on ABP Community", @@ -206,7 +211,7 @@ "SeeOnNpm": "See on NPM", "SeeOnNuget": "See on Nuget", "MVCGulpCommandExplanation": "If you are using MVC (Razor Pages) UI, then run the \"gulp\" command after the package installation.", - "UsingABPCLI": "Using Abp CLI", + "UsingABPCLI": "Using Abp CLI", "WithoutABPCLI": "Without ABP CLI", "ABPCLIModuleDependency": "Abp Cli automatically adds module dependency.", "AddModuleDependency": "Then add module dependency", @@ -236,11 +241,9 @@ "ClientSideDevelopment": "Client Side Development", "ClientSideDevelopmentDocumentationMessage": "Check out the {0} document to learn the key points for the user interface (client side) development.", "DatabaseProviderDocumentationMessage": "Check out the {0} document to learn the key points for the database layer development.", - "ABPCommercialExplanationMessage": "ABP Commercial provides premium modules, themes, tooling and support for the ABP Framework.", "ImplementingDDD": "Implementing Domain Driven Design", "DDDBookExplanation": "A practical guide for implementing the Domain Driven Design with the ABP Framework.", "Overview": "Overview", - "DDDBookPracticalGuide": "This is a practical guide for implementing the Domain Driven Design (DDD). While the implementation details are based on the ABP Framework infrastructure, the basic concepts, principles and models can be applied to any solution, even if it is not a .NET solution.", "TableOfContents": "Table of Contents", "IntroductionToImplementingDDD": "Introduction to Implementing the Domain Driven Design", "WhatIsDDD": "What is the Domain Driven Design?", @@ -251,6 +254,8 @@ "DomainAndApplicationLogic": "Domain Logic & Application Logic", "Author": "Author", "Pages": "Pages", + "Purchase_Page_Title": "{0} License", + "Purchase_Page_Description": "Don't waste time reinventing the wheel. Purchase the {0} License and start coding your business today!", "PublishedOn": "Published on", "FreeEBook": "Free E-Book", "Download": "Download", @@ -261,7 +266,8 @@ "Name": "Name", "Surname": "Surname", "CompanyName": "Company name", - "DoYouAgreePrivacyPolicy": "I agree to the Terms & Conditions and Privacy Policy.", + "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.", @@ -276,7 +282,7 @@ "GoHome": "Go Home", "InvalidFormInputs": "Please, type the valid information specified on the form.", "DDDBookEmailBody": "Thank you.
To download your book, click here.", - "SubscribeToNewsletter": "Subscribe to the newsletter to get information about happenings in the ABP.IO Platform, such as new releases, posts, offers, and more.", + "SubscribeToNewsletter": "Subscribe to the newsletter to get information about happenings in the ABP Platform, such as new releases, posts, offers, and more.", "FirstEdition": "First Edition", "ThankYou": "Thank you!", "CheckboxMandatory": "You need to check this to proceed!", @@ -300,8 +306,8 @@ "SeparateAuthenticationServer": "Separate Authentication Server", "ProgressiveWebApplication": "Progressive Web Application", "Preview": "Preview", - "CreateANewSolution": "Create a new solution", - "ABPFrameworkFeatures": "ABP Framework Features", + "CreateANewSolution": "Create a New .NET Solution", + "FrameworkFeatures": "Framework Features", "Commercial": "Commercial", "ThirdPartyTools": "Third Party Tools", "Back": "Back", @@ -309,7 +315,7 @@ "SeeMore": "See More", "DetailsOfTheEBook": "Details of the E-Book", "JoinOurMarketingNewsletter": "Join our marketing newsletter", - "FrameworkNewsletterConfirmationMessage": "I agree to the Terms & Conditions and Privacy Policy.", + "FrameworkNewsletterConfirmationMessage": "I agree to the Terms & Conditions and Privacy Policy.", "GetYourFreeEBook": "Get Your Free DDD E-book ", "EverythingYouNeedToKnow": "Everything you need to know.", "PreOrderNow": "Pre-Order Now", @@ -317,11 +323,11 @@ "UIThemingExplanation": "Create reusable UI themes and layouts or use one of the pre-built UI themes.", "DataFilteringExplanation2": "Automatically filter on querying from the database to easily implement patterns like soft-delete and multi-tenancy.", "NeedHelp": "Need Help?", - "GiveYourProjectAName": "Give your project a name", - "SelectProjectType": "Select Project Type", - "SelectUIFramework": "Select UI Framework", - "SelectDatabaseProvider": "Select Database Provider", - "SelectDatabaseManagementSystem": "Select Database Management System", + "GiveYourProjectAName": "Give Your Project a Name", + "SelectProjectType": "Select a Project Type", + "SelectUIFramework": "Select a UI Framework", + "SelectDatabaseProvider": "Select a Database Provider", + "SelectDatabaseManagementSystem": "Select a Database Management System", "InstallingTheABPCLI": "Installing the ABP CLI", "CreateYourProjectNow": "Create Your Project Now", "OrderOn": "Order on {0}", @@ -356,6 +362,8 @@ "BuyOnDangDang": "Buy on DangDang", "BuyOnJD": "Buy on JD", "Discounted": "Discounted", + "MasteringAbpBookTitle": "Mastering ABP Framework", + "MasteringAbpBookDescription": "Written by the creator of ABP, this book will help you to gain a complete understanding of the ABP and web app development techniques.", "MasteringAbpFramework_Book_KeyFeatures": "Key Features", "MasteringAbpFramework_Book_Key_Features_Description_1": "Build robust, maintainable, modular, and scalable software solutions using ABP Framework.", "MasteringAbpFramework_Book_Key_Features_Description_2": "Learn how to implement SOLID principles and domain-driven design in your web applications.", @@ -373,7 +381,7 @@ "MasteringAbpFramework_Book_What_You_Will_Learn_6": "Work with multi-tenancy to create modular web applications.", "MasteringAbpFramework_Book_What_You_Will_Learn_7": "Understand modularity and create reusable application modules.", "MasteringAbpFramework_Book_What_You_Will_Learn_8": "Write unit, integration, and UI tests using ABP Framework.", - "MasteringAbpFramework_Book_WhoIsThisBookFor": "Who's this book for", + "MasteringAbpFramework_Book_WhoIsThisBookFor": "Who's This Book For", "MasteringAbpFramework_Book_WhoIsThisBookFor_Description": "This book is for web developers who want to learn software architectures and best practices for building\n maintainable web-based solutions using Microsoft technologies and ABP Framework. Basic knowledge of C#\n and ASP.NET Core is necessary to get started with this book.", "ComputersAndTechnology": "Computers & Technology", "BuildingMicroserviceSolutions": "Building Microservice Solutions", @@ -390,13 +398,13 @@ "ThisBookIsInDraftStageAndIsNotCompletedYet": "This book is in draft stage and is not completed yet.", "Authors": "Authors", "MicroserviceEBook": "Microservice E-Book", - "SelectUITheme": "Select UI Theme", + "SelectUITheme": "Select a UI Theme", "LeptonXLiteTheme": "LeptonX Lite Theme", "BasicTheme": "Basic Theme", "LeptonXLiteThemeInfo": " A modern and stylish Bootstrap UI theme. Ideal if you want to have a production ready UI theme. This is the newest theme and is the default.", "BasicThemeInfo": "Minimalist UI theme with plain Bootstrap colors and styles. Ideal if you will build your own UI theme.", - "SeeDocumentation": "See documentation.", - "SeeFullScreen": "🖼️ See the screenshot", + "SeeDocumentation": "See documentation.", + "SeeFullScreen": "🖼️ See the screenshot", "BuildingMicroserviceSolutionsShortDescription": "This book is a reference guide for developing and managing microservice-based applications using the ABP Framework.", "InstallAbpCliMessage": "Install the ABP CLI in a command line terminal, if you haven't installed it before:", "Terminal": "Terminal", @@ -424,14 +432,15 @@ "CreateSolutionFolder": "Create Solution Folder", "CreateSolutionFolderOption": "Specifies if the project will be in a new folder in the output folder or directly the output folder.", "BooksPageTitle": "ABP Books", + "BooksPageDescription": "Explore ABP books to deepen your understanding and mastery of ABP.", "PackageDetailPage_NuGetPackageInstallationOptions": "There are three ways to install {0} NuGet package to your project", "PackageDetailPage_InstallingWithABPCLI": "1: Installing with the ABP CLI", - "PackageDetailPage_InstallingWithABPCLIDescription1": "If you haven't installed the ABP CLI, first install by executing the following command in a command-line terminal", + "PackageDetailPage_InstallingWithABPCLIDescription1": "If you haven't installed the ABP CLI, first install by executing the following command in a command-line terminal", "PackageDetailPage_InstallingWithABPCLIDescription2": "Once you have installed the ABP CLI, open a command-line terminal in the location of the project (.csproj file) you want to install it and execute the following command", "PackageDetailPage_InstallingWithABPCLIDescription3": "It will add the {0} package reference to your project and the {1} dependency to your module class.", "PackageDetailPage_ManualInstallation": "2: Installing with the Dotnet CLI", "PackageDetailPage_ManualInstallationDescription1": "Add {0} NuGet package reference to your project using your IDE or executing the following command", - "PackageDetailPage_ManualInstallationDescription2": "Then add the {0} dependency to your module class as shown in the following example", + "PackageDetailPage_ManualInstallationDescription2": "Then add the {0} dependency to your module class as shown in the following example", "PackageDetailPage_SeeDocumentation": "See the documentation to learn how to use this package in your applications.", "PackageDetailPage_InstallingUsingPMC": "3: Installing with the Package Manager Console", "PackageDetailPage_InstallingUsingPMCDescription1": "Open the Package Manager Console in Visual Studio (Tools -> Nuget Package Manager -> Package Manager Console) and execute the following command", @@ -439,7 +448,7 @@ "Testimonials": "Testimonials", "CoolestCompaniesUseABPFramework": "Coolest Companies Use ABP Framework", "Index_Page_Testimonial_1": "ABP Framework is not just a tool but a catalyst that has accelerated my growth as a developer. It has made it possible for me to build new features faster than ever before, reminiscent of the experiences of other users. The unified coding pattern has streamlined my projects, giving me more time to focus on creating rather than troubleshooting.\nI would say the ABP Framework has been the cornerstone of my early professional journey. It has facilitated my transition from an aspiring developer to a confident professional ready to make a mark in the software world. I am looking forward to the exciting projects that await me, knowing that ABP will be there to guide me. It is more than just a product; it's a partner in success.", - "Index_Page_Testimonial_2": "ABP Framework is not only a framework, it is also a guidance for project development/management, because it provides DDD, GenericRepository, DI, Microservice, Modularity trainings. Even if you are not going to use framework itself, you can develop yourself with docs.abp.io which is well and professionally prepared. (OpenIddict, Redis, Quartz etc.)\nBecause many thing pre-built, it shortens project development time significantly. (Such as login page, exception handling, data filtering-seeding, audit logging, localization, auto api controller etc.)\nAs an example from our app, i have used Local Event Bus for stock control. So, I am able to manage order movements by writing stock handler.\nIt is wonderful not to lose time for CreationTime, CreatorId. They are filled automatically.", + "Index_Page_Testimonial_2": "ABP Framework is not only a framework, it is also a guidance for project development/management, because it provides DDD, GenericRepository, DI, Microservice, Modularity trainings. Even if you are not going to use framework itself, you can develop yourself with abp.io/docs which is well and professionally prepared. (OpenIddict, Redis, Quartz etc.)\nBecause many thing pre-built, it shortens project development time significantly. (Such as login page, exception handling, data filtering-seeding, audit logging, localization, auto api controller etc.)\nAs an example from our app, i have used Local Event Bus for stock control. So, I am able to manage order movements by writing stock handler.\nIt is wonderful not to lose time for CreationTime, CreatorId. They are filled automatically.", "VideosLoginAndRegisterMessage": "To be able to watch videos, you must sign in.", "Filter": "Filter", "VideoCourses": "Essential Videos", @@ -467,11 +476,12 @@ "TestimonialSend": "Thank you! We've received your testimonial.
We'll review and take the next step soon.", "Title": "Title", "TitlePlaceholder": "Software Developer, CTO etc.", - "Characters": "characters", + "characters": "characters", "Testimonial_YourProfilePicture": "Your profile picture (only {0})", "BootstrapCardTitle": "This is a sample card component built by ABP bootstrap card tag helper.", "GoSomewhere": "Go somewhere →", - "ABPTestimonialDescription": "ABP Framework: Let's hear your testimonial", + "ABPTestimonialTitle": "New Testimonial", + "ABPTestimonialDescription": "Submit your testimonial to the ABP Community by sharing your experiences and feedback about the framework.", "NotValidEmailAddress": "The Email field is not a valid e-mail address.", "EmailAddressMaxLength": "The field Email must be a string with a maximum length of 255.", "EmailAddressRequired": "The Email field is required.", @@ -480,14 +490,1382 @@ "AddressLength": "The field Address must be a string with a maximum length of 255.", "GenderRequired": "The Gender field is required.", "LeaveUsReview": "Leave us review", - "ABPVideoCoursesDescription": "Learn the basics of the ABP Framework through video courses created by the ABP team.", - "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.", + "ABPVideoCoursesDescription": "Learn fundamental concepts and usage of ABP Framework in this video course series. Ideal for newbies!", + "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": "ABP Essential Videos", + "ABPVideoCoursesTitle": "Essentials Videos", "LovedDevelopers": "Loved by thousands of developers
around the world", - "ABPIOPlatformPackages": "ABP.IO Platform Packages", - "AbpPackagesDescription": "ABP templates are being distributed as NuGet and NPM packages. Here are all the official NuGet and NPM packages used by the ABP.IO Platform.", + "ABPIOPlatformPackages": "ABP Packages", + "AbpPackagesDescription": "Extend your application with various packages available in ABP, adding functionality and features.", "Cancel": "Cancel", - "Continue": "Continue" + "Continue": "Continue", + "WhatIsTheABPIOPlatform": "What is the ABP Platform?", + "AbpIoPlatformExplanation1": "ABP Platform is a comprehensive infrastructure for application development based on .NET and ASP.NET Core platforms. It fills the gap between the plain ASP.NET Core platform and the complex requirements of modern business software development.", + "AbpIoPlatformExplanation2": "In the core, it provides an open source and free framework that consists of hundreds of NuGet and NPM packages, each offering different functionalities. The core framework is modular, themeable and microservice compatible, providing a complete architecture and a robust infrastructure. This allows you to focus on your business code rather than repeating yourself for every new project. It is based on the best practices of software development and integrates popular tools you're already familiar with. The framework is completely free, open source and community-driven.", + "AbpIoPlatformExplanation3": "The ABP Platform offers free and paid licensing options. Depending on your license type, you can access multiple production-ready startup templates, many pre-built application modules, UI themes, CLI and GUI tooling, support and more.", + "WhatAreTheDifferencesBetweenFreeAndPaid": "What are the differences between the free and commercial licenses?", + "WhatAreTheDifferencesBetweenFreeAndPaidExplanation1": "Free (open source) ABP license includes the core framework, basic startup templates, basic modules, basic themes and the community edition of ABP Studio.", + "WhatAreTheDifferencesBetweenFreeAndPaidExplanation2": "Commercial licenses offer additional features, including more startup templates (such as the microservice startup template), professional application modules, a full-featured UI theme, professional editions of ABP Studio, ABP Suite for code generation, more options for mobile startup applications, premium support and some other benefits.", + "WhatAreTheDifferencesBetweenFreeAndPaidExplanation3": "For more information about the differences between the license types, please see the pricing page.", + "HowDoIUseTheABPIOPlatform": "How do I use the ABP Platform?", + "HowDoIUseTheABPIOPlatformExplanation": "ABP Framework extends the .NET platform, meaning anything you can do with a plain .NET solution is already possible with the ABP Framework. That makes it easy to get started with a low learning curve. See the How it works page to learn how to use the ABP Platform in practice.", + "SupportPolicyFaqExplanation1": "We provide two kinds of support: community support for users with a non-commercial license and premium support for commercial license holders. Community support is available on platforms like GitHub and Stackoverflow, where support is limited. On the other hand, premium support is provided on the official ABP Support website. Here, your questions are answered directly by the core ABP developers, ensuring higher quality support.", + "SupportPolicyFaqExplanation2": "Premium support details: We support only the active and the previous major version. We do not guarantee patch releases for the 3rd and older major versions. For example, if the active version is 7.0.0, we will release patch releases for both 6.x.x and 7.x.x. Besides, we provide support only for ABP Platform related issues. This means no support is given for the 3rd party applications, cloud services and other peripheral libraries used by ABP products.", + "SupportPolicyFaqExplanation3": "We commit to using commercially reasonable efforts to provide our customers with technical support during the official business hours of \"Volosoft Bilisim A.S\". However, we do not commit to a Service-Level Agreement (SLA) response time, but we will try to respond to the technical issues as quickly as possible within our official working hours. Unless a special agreement is made with the customer, support is provided exclusively at {1}. Furthermore, private email support is available only to Enterprise License holders.", + "HowManyProducts": "How many different products/solutions can I build?", + "HowManyDevelopers": "How many developers can work on the solutions using the ABP Platform?", + "HowManyDevelopersExplanation": "ABP.IO licenses are issued per developer. Different license types come with varying developer limits. However, you can add more developers to any license type whenever you need. For information on license types, developer limits, and the costs for additional developers, please refer to the pricing page.", + "ChangingLicenseTypeExplanation": "You can upgrade to a higher license by paying the difference during your active license period. When you upgrade to a higher license plan, you get the benefits of the new plan, however the license upgrade does not change the license expiry date. Besides, you can add new developer seats to your existing license. For details on how many developers can work on solutions using the ABP Platform, please see the 'How many developers can work on the solutions using the ABP Platform?' question.", + "DowngradeLicensePlanExplanation": "You cannot downgrade your existing license plan. For further information, contact us at info@abp.io.", + "LicenseTransferExplanation": "Yes! When you purchase a license, you become the license holder, which grants you access to the organization management page. An organization includes roles for owners and developers. Owners can manage developer seats and assign developers. Each assigned developer will log in to the system using the ABP CLI command and will have permissions for development and support.", + "LicenseExtendUpgradeDiff": "What is the difference between license renewal and upgrading?", + "LicenseExtendUpgradeDiffExplanation1": "Renewal: By renewing your license, you will continue to receive premium support and updates, both major and minor, for modules, tools, and themes. Additionally, you will be able to create new projects and use ABP Suite and ABP Studio, which can significantly speed up your development process. When you renew your license, one year is added to your license's expiry date.", + "LicenseExtendUpgradeDiffExplanation2": "Upgrading: By upgrading your license, you will be promoted to a higher license plan, allowing you to receive additional benefits. Check out the pricing page to see the differences between the license plans. On the other hand, when you upgrade, your license expiry date will not change! To extend your license end date, you need to renew your license.", + "WhatHappensWhenLicenseEndsExplanation1": "ABP licenses are perpetual licenses. After your license expires, you can continue developing your project without the obligation to renew. Your license comes with a one-year update and premium support plan out of the box. To receive new features, performance enhancements, bug fixes, and continued support, as well as to use ABP Suite and ABP Studio, you need to renew your license. When your license expires;", + "WhatHappensWhenLicenseEndsExplanation2": "You can not create new solutions using the pro startup templates, but you can continue developing your existing applications forever.", + "WhatHappensWhenLicenseEndsExplanation3": "You will receive updates for the application modules and themes within your MINOR version (excluding RC or Preview versions). For example, if you are using v3.2.0 of a module, you can still receive updates for v3.2.x (v3.2.1, v3.2.5... etc.) of that module. However, you cannot receive updates for the next major or minor version (such as v3.3.0, v3.3.3, 4.x.x.. etc.). For example, if the latest release was v4.4.3 when your license expired and later versions 4.4.4 and 4.5.0 were published, you would have access to v4.4.x but not to v4.5.x.", + "WhatHappensWhenLicenseEndsExplanation4": "You cannot install new application modules and themes added to your solution after your license ends.", + "WhatHappensWhenLicenseEndsExplanation5": "You cannot use the ABP Suite.", + "WhatHappensWhenLicenseEndsExplanation6": "You cannot use the ABP Studio’s pro features (you can use the Community Edition features of ABP Studio)", + "WhatHappensWhenLicenseEndsExplanation7": "You will no longer have access to premium support.", + "WhatHappensWhenLicenseEndsExplanation8": "You can renew (extend) your license to continue receiving these benefits. If you renew your license within {3} days after it expires, the following discounts will be applied: Team License {0}; Business License {1}; Enterprise License {2}.", + "WhenShouldIRenewMyLicenseExplanation1": "If you renew your license within 30 days after it expires, the following discounts will be applied:", + "WhenShouldIRenewMyLicenseExplanation2": "{0} for Team Licenses;", + "WhenShouldIRenewMyLicenseExplanation3": "{0} for Business and Enterprise Licenses;", + "WhenShouldIRenewMyLicenseExplanation4": "However, if you renew your license more than {0} days after the expiry date, the renewal price will be the same as the initial purchase price of the license, with no discounts applied to your renewal.", + "DoesTheSubscriptionRenewAutomaticallyExplanationAutoRenewal": "ABP Platform allows you to auto-renew your license. This is an optional free service. You can toggle this feature when you purchase a new license or later enable it from your organization management page. If you want to turn on or off the auto-renewal, visit the organization management page, go to the 'Payments Method' section and either check or uncheck the 'Automatic Renewal' checkbox. When you turn off the auto-renewal feature, it will be your responsibility to renew your license manually.", + "TrialPlanExplanation": "Yes, to start your free trial, please contact marketing@volosoft.com. We also offer a 30-day money-back guarantee for the Team license, with no questions asked! You can request a full refund within the first 30 days of purchasing the license. For Business and Enterprise licenses, we provide a 60% refund if requested within 30 days of purchase. This policy is due to the inclusion of the full source code for all modules and themes in the Business and Enterprise licenses.", + "BlazoriseLicenseExplanation": "We have an agreement between Volosoft and Megabit, according to which the Blazorise license is bundled with the ABP Platform’s commercial licenses. Therefore, our paid users do not need to purchase an additional Blazorise license.", + "HowToUpgradeExplanation1": "When you create a new application using the ABP startup templates, all the modules and themes are used as NuGet and NPM packages. This setup allows for easy upgrades to newer versions of the packages.", + "HowToUpgradeExplanation2": "In addition to the standard NuGet/NPM upgrades, ABP CLI provides an update command that automatically finds and upgrades all ABP-related packages in your solution.", + "HowToUpgradeExplanation3": "Beyond automatic package upgrades, we also publish a migration guide if the new version requires some manual steps to upgrade or it has some notes to be considered. Keep following the ABP blog for the news about new releases.", + "DatabaseSupportExplanation": "ABP is database agnostic and can work with any database provider by its nature. For a list of currently implemented providers, please check out the Data Access document.", + "MicroserviceSupportExplanation1": "Yes, it supports microservice architectures.", + "MicroserviceSupportExplanation2": "One of the major goals of the ABP platform is to provide a convenient infrastructure to create microservice solutions. All the official ABP application modules are designed to support microservice deployment scenarios (with its own API and database) by following the Module Development Best Practices document.", + "MicroserviceSupportExplanation3": "ABP Platform commercial licenses also includes a microservice startup template which can be used to directly create a production ready base solution for your microservice system.", + "MicroserviceSupportExplanation4": "For the non-paid users, we are also providing an example e-commerce solution that you can check to understand how you can build your microservice solution based on the ABP Framework.", + "MicroserviceSupportExplanation5": "However, a microservice system is a solution, and every solution will have different requirements, including network topology, communication scenarios, authentication possibilities, database sharding/partitioning decisions, runtime configurations, 3rd party system integrations and many more aspects. The ABP platform provides infrastructure for microservice scenarios, microservice-compatible modules, samples, and documentation to assist in building your own solution. However, don't expect to directly download your ideal, custom solution pre-built for you. You will need to understand it and bring specific parts together based on your requirements.", + "WhereCanIDownloadSourceCodeExplanation": "You can download the source code of all the ABP modules, Angular packages and themes via ABP Suite, ABP Studio or ABP CLI. Check out the forum question: How to download the source-code?", + "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 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?", + "SendServiceRequest": "Send a Service Request", + "Permission:CommunityPost": "Community Post", + "Permission:Edit": "Edit", + "Waiting": "Waiting", + "Approved": "Approved", + "Rejected": "Rejected", + "Wait": "Wait", + "Approve": "Approve", + "Reject": "Reject", + "ReadPost": "Read Post", + "Status": "Status", + "ContentSource": "Content Source", + "Details": "Details", + "CreationTime": "Creation time", + "Save": "Save", + "SameUrlAlreadyExist": "Same url already exists if you want to add this post, you should change the url!", + "UrlIsNotValid": "Url is not valid.", + "UrlNotFound": "Url not found.", + "UrlContentNotFound": "Url content not found.", + "Summary": "Summary", + "MostRead": "Most Read", + "Latest": "Latest", + "ContributeAbpCommunity": "Contribute to the ABP Community", + "ContributionGuide": "Contribution Guide", + "BugReport": "Bug Report", + "SeeAllPosts": "See All Posts", + "WelcomeToABP": "Welcome to the ABP", + "FeatureRequest": "Feature Request", + "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", + "GoToTheVideo": "Go to the Video", + "Contribute": "Contribute", + "OverallProgress": "Overall Progress", + "Done": "Done", + "Open": "Open", + "Closed": "Closed", + "RecentQuestionFrom": "Recent question from {0}", + "Stackoverflow": "Stackoverflow", + "Votes": "votes", + "Answer": "Answer", + "views": "views", + "Answered": "Answered", + "WaitingForYourAnswer": "Waiting for your answer", + "Asked": "asked", + "AllQuestions": "All Questions", + "NextVersion": "Next Version", + "MilestoneErrorMessage": "Could not get the current milestone details from Github.", + "QuestionItemErrorMessage": "Could not get the latest question details from Stackoverflow.", + "Oops": "Oops!", + "CreatePostSuccessMessage": "The Post has been successfully submitted. It will be published after a review from the site admin.", + "Browse": "Browse", + "CoverImage": "Cover Image", + "ShareYourExperiencesWithTheABPFramework": "ABP Community Articles | Read or Submit Articles", + "CommunityVideosTitle": "ABP Community Videos | Watch and Share Your Videos", + "CommunityVideosDescription": "Watch the video tutorials, get informed about ABP news & updates and share your experiences with the community.", + "UpdateUserWebSiteInfo": "Example: https://johndoe.com", + "UpdateUserTwitterInfo": "Example: johndoe", + "UpdateUserGithubInfo": "Example: johndoe", + "UpdateUserLinkedinInfo": "Example: https://www.linkedin.com/...", + "UpdateUserCompanyInfo": "Example: Volosoft", + "UpdateUserJobTitleInfo": "Example: Software Developer", + "UserName": "Username", + "Company": "Company", + "PersonalWebsite": "Personal Website", + "RegistrationDate": "Registration Date", + "Social": "Social", + "Biography": "Biography", + "HasNoPublishedPostsYet": "has no published posts yet", + "LatestGithubAnnouncements": "Latest Github Announcements", + "SeeAllAnnouncements": "See All Announcements", + "LatestBlogPost": "Latest Blog Post", + "Edit": "Edit", + "ProfileImageChange": "Change the profile image", + "BlogItemErrorMessage": "Could not get the latest blog post details from ABP.", + "PlannedReleaseDate": "Planned release date", + "CommunityPostRequestErrorMessage": "Could not get the latest post request from Github.", + "PostRequestFromGithubIssue": "There aren't any post requests now.", + "LatestPosts": "Latest Posts", + "ArticleRequests": "Request a content", + "ArticleRequestsDescription": "Want to see a specific content here? You can ask the community to create it!", + "LatestContentRequests": "Latest content requests", + "AllPostRequests": "See All Post Requests", + "SubscribeToTheNewsletter": "Subscribe to the Newsletter", + "NewsletterEmailDefinition": "Get information about happenings in ABP, such as new releases, free sources, posts, and more.", + "NoThanks": "No, thanks", + "MaybeLater": "Maybe later", + "JoinOurPostNewsletter": "Join our post newsletter", + "Marketing": "Marketing", + "CommunityPrivacyPolicyConfirmation": "I agree to the Terms & Conditions and Privacy Policy.", + "PostRequestMessageTitle": "Open an issue on GitHub to request a post/tutorial you want to see on this website.", + "PostRequestMessageBody": "Here's a list of the requested posts by the community. Do you want to write a requested post? Please click on the request and join the discussion.", + "Language": "Language", + "CreatePostLanguageInfo": "The language for the post content.", + "VideoPost": "Video Post", + "Post": "Post", + "Read": "Read", + "CreateGithubPostUrlInfo": "Full URL of the Markdown file on GitHub (example).", + "CreateVideoContentUrlInfo": "Original Youtube URL of the post.", + "CreateExternalPostUrlInfo": "Original External Url of the post.", + "VideoContentForm": "Submit Video on YouTube", + "GithubPostForm": "Submit Post on GitHub", + "ExternalPostForm": "Submit an External Content", + "HowToPost": "How to Post?", + "Posts": "Posts", + "VideoUrl": "Video Url", + "GithubPostUrl": "GitHub Post Url", + "ExternalPostUrl": "External Post Url", + "ThankYouForContribution": "Thank you for contributing to the ABP Community. We accept articles and video tutorials on ABP Framework, .NET, ASP.NET Core and general software development topics.", + "GithubPost": "GitHub Post", + "GithubPostSubmitStepOne": "1. Write a post on any public GitHub repository with the Markdown format. example", + "GithubPostSubmitStepTwo": "2. Submit your post URL using the form.", + "GithubPostSubmitStepThree": "3. Your post will be rendered in this website.", + "YoutubeVideo": "Youtube Video", + "YoutubeVideoSubmitStepOne": "1. Publish your video on YouTube.", + "YoutubeVideoSubmitStepTwo": "2. Submit the video URL using the form.", + "YoutubeVideoSubmitStepThree": "3. Visitors will be able to watch your video content directly on this website.", + "ExternalContent": "External Content", + "ExternalContentSubmitStepOne": "1. Create a content on any public platform (Medium, your own blog or anywhere you like).", + "ExternalContentSubmitStepTwo": "2. Submit your content URL using the form.", + "ExternalContentSubmitStepThree": "3. Visitors are redirected to the content on the original website.", + "ChooseYourContentType": "Please choose the way you want to add your content.", + "PostContentViaGithub": "I want to add my post with GitHub in accordance with the markdown rules.", + "PostContentViaYoutube": "I want to share my videos available on Youtube here.", + "PostContentViaExternalSource": "I want to add the content I published on another platform here.", + "GitHubUserNameValidationMessage": "Your Github username can not include whitespace, please make sure your Github username is correct.", + "PersonalSiteUrlValidationMessage": "Your personal site URL can not include whitespace, please make sure your personal site URL is correct.", + "TwitterUserNameValidationMessage": "Your Twitter username can not include whitespace, please make sure your Twitter username is correct.", + "LinkedinUrlValidationMessage": "Your Linkedin URL can not include whitespace, please make sure your Linkedin URL is correct.", + "NoPostsFound": "No posts found!", + "SearchInPosts": "Search in posts...", + "MinimumSearchContent": "You must enter at least 3 characters!", + "Volo.AbpIo.Domain:060001": "Source URL(\"{PostUrl}\") is not Github URL", + "Volo.AbpIo.Domain:060002": "Post Content is not available from Github(\"{PostUrl}\") resource.", + "Volo.AbpIo.Domain:060003": "No post content found!", + "JoinTheABPCommunity": "Join the ABP Community", + "ABPCommunityTalks": "ABP Community Talks", + "LiveDemo": "Live Demo", + "GetLicense": "Get a License", + "SourceCode": "Source Code", + "LeaveComment": "Leave Comment", + "ShowMore": "Show More", + "NoPublishedPostsYet": "No published posts yet.", + "FullURL": "Full URL", + "JobTitle": "Job Title", + "Prev": "Prev", + "Previous": "Previous", + "Next": "Next", + "Share": "Share", + "SortBy": "Sort by", + "NoPublishedEventsYet": "No published events yet.", + "SubscribeYoutubeChannel": "Subscribe to the Youtube Channel", + "Enum:EventType:0": "Talks", + "MemberNotPublishedPostYet": "This member hasn't published any posts yet.", + "MemberNotPublishedArticlesYet": "This member hasn't published any articles yet.", + "MemberNotPublishedVideosYet": "This member hasn't published any videos yet.", + "TimeAgo": "{0} ago", + "Discord_Page_JoinCommunityMessage": "Join ABP Discord Community", + "Discord_Page_Announce": "We are happy to announce ABP Community Discord Server!", + "Discord_Page_Description_1": "ABP Community has been growing since day one. We wanted to take it to the next step by creating an official ABP Discord server so the ABP Community can interact with each other using the wonders of instant messaging.", + "Discord_Page_Description_2": "ABP Community Discord Server is the place where you can showcase your creations using ABP Framework, share the tips that worked for you, catch up with the latest news and announcements about ABP Framework, just chat with community members to exchange ideas, and have fun!", + "Discord_Page_Description_3": "This ABP Community Discord Server is the official one with the ABP Core Team is present on the server to monitor.", + "Discord_Page_JoinToServer": "Join ABP Discord Server", + "Events_Page_MetaTitle": "ABP Events | Community Talks", + "Events_Page_MetaDescription": "Live ABP Community Talks hosted by the ABP Team and casual sessions full of community content, demos, Q&A, and discussions around what's happening in ABP.", + "Events_Page_Title": "ABP Community Talks", + "Members_Page_WritingFromUser": "Read writing from {0} on ABP Community.", + "Post_Create_Page_MetaTitle": "New Community Post", + "Post_Create_Page_MetaDescription": "Submit your own posts to the ABP Community platform, contributing your insights and experiences.", + "Post_Create_Page_CreateNewPost": "Create New Post", + "Post_Index_Page_MetaDescription": "Write, read articles or watch videos about ABP and .NET. Keep informed about the latest developments.", + "Layout_Title": "{0} | ABP Community", + "Layout_MetaDescription": "A hub for ABP Framework, .NET, and software development. Access articles, tutorials, news, and contribute to the ABP community.", + "Index_Page_CommunityIntroduction": "This is a hub for ABP Framework, .NET and software development. You can read the articles, watch the video tutorials, get informed about ABP’s development progress and ABP-related events, help other developers and share your expertise with the ABP community.", + "TagsInArticle": "Tags in Article", + "IConsentToMedium": "I consent to the publication of this post at https://medium.com/volosoft.", + "SearchResultsFor": "Search results for \"{0}\"", + "SeeMoreVideos": "See More Videos", + "DiscordPageTitle": "Discord", + "DiscordPageDescription": "Join the ABP Community Discord to chat with other members, discuss ideas, and get support about ABP.", + "ViewVideo": "View Video", + "AbpCommunityTitleContent": "ABP Community - Open Source ABP Framework", + "CommunitySlogan": "A unique community platform for ABP Lovers", + "RaffleIsNotActive": "Raffle is not active", + "YouAreAlreadyJoinedToThisRaffle": "You already joined to this raffle!", + "InvalidSubscriptionCode": "Invalid subscription code", + "Raffle:{0}": "Raffle: {0}", + "Join": "Join", + "Leave": "Leave", + "LoginToJoin": "Login to join", + "ToEnd:": "To end:", + "ToStart:": "To start:", + "days": "days", + "hrs": "hrs", + "min": "min", + "sec": "sec", + "Winners": "Winners", + "To{0}LuckyWinners": "to {0} lucky winners", + "ActiveRaffles": "Active Raffles", + "UpcomingRaffles": "Upcoming Raffles", + "CompletedRaffles": "Completed Raffles", + "NoActiveRaffleTitle": "No active raffle is available at the moment.", + "NoActiveRaffleDescription": "No active raffle is available at the moment.", + "RaffleSubscriptionCodeInputMessage": "This raffle requires a registration code. Please enter the registration code below:", + "RaffleSubscriptionCodeInputErrorMessage": "The registration code is incorrect. Please try again.", + "GoodJob!": "Good Job!", + "RaffleJoinSuccessMessage": "You are successfully registered for the raffle. You will be informed via email if you win the prize!", + "RaffleLoginAndRegisterMessage": "You must sign in to join this raffle! If you haven't registered yet, create an account for free now.", + "Ok": "Ok", + "WaitingForTheDraw": "Wait for the draw!", + "AllAttendees": "All Attendees", + "SeeRaffleDetail": "See Raffle Detail", + "SeeRaffle": "See Raffle", + "ParticipationIsComplete": "Participation is complete.", + "ABPCoreDevelopmentTeam": "ABP Core Development Team", + "RegisterTheEvent": "Register the Event", + "GoToConferencePage": "Go to Conference Page", + "BuyTicket": "Buy Ticket", + "SeeEvent": "See Event", + "PreviousEvents": "Previous Events", + "OtherLiveEvents": "Other Live Events", + "SponsoredConferences": "Sponsored Conferences", + "SponsoredConferencesDescription": "We are honoring to support .NET communities and events for software developers.", + "UpcomingEvents": "Upcoming Events", + "UpcomingCommunityTalkEventDescription": "The live shows, hosted by the ABP Team, are casual sessions full of community content, demos, Q&A, and discussions around what's happening in ABP.", + "UpcomingConferenceEventDescription": "ABP .NET Conference is a virtual event for the .NET Developer community to come together and listen to talks about the .NET world, common software development practices and the open source ABP Framework.", + "LastOneYear": "Last 1 Year", + "AllTimes": "All Times", + "TopContributors": "Top Contributors", + "{0}Posts": "{0} Posts", + "LATESTPOSTS": "LATEST POSTS", + "NoContributorsFound": "No contributors found!", + "LatestPost": "Latest post", + "MEMBERSINCE{0}": "MEMBER SINCE {0}", + "CopyLink": "Copy Link", + "ShareOnTwitter": "Share on Twitter", + "ShareOnLinkedIn": "Share on LinkedIn", + "MoreFrom{0}": "More from {0}", + "SeeAllFrom{0}": "See all from {0}", + "MostWatched": "Most Watched", + "Articles({0})": "Articles ({0})", + "Videos({0})": "Videos ({0})", + "LatestArticles": "Latest Articles", + "Raffles": "Raffles", + "RafflesPageTitle": "ABP Community Raffles | Join and Win ABP Raffles", + "RafflesDescription": "Check the upcoming raffles, attend them and be a winner for various ABP licences.", + "RaffleHeader": "Hello ABP Community Member!", + "RafflesInfo": "
This is the raffle page dedicated to show our appreciation towards you for being an active Community Member. We do ABP Community Talks ABP Dotnet Conference, attend or sponsor to the .NET-related events in which we give away some gifts.

You can follow this page to see the upcoming raffles, attend them, or see previous raffles we draw including the winners.

Thank you for being an active member! See you in the upcoming raffles.", + "RafflesInfoTitle": "ABP Community Raffles", + "ToLuckyWinner": "to 1 lucky winner", + "MarkdownSupported": "Markdown supported.", + "VisitPage": "Visit Page", + "VisitVideoCourseDescription": "If you want to learn the basics of the ABP Framework, check out the ABP Essentials Video courses.", + "EditProfile": "Edit Profile", + "ConfirmEmailForPost": "To be able to post, you need to confirm your email. Go to account.abp.io/Account/Manage and verify your email in the Personal Info tab.", + "DailyPostCreateLimitation": "You have reached the daily post creation limit. You can create a new post in {0}.", + "OrganizationManagement": "Organization Management", + "OrganizationList": "Organization list", + "Volo.AbpIo.Commercial:010003": "You are not the owner of this organization!", + "OrganizationNotFoundMessage": "No organization found!", + "DeveloperCount": "Allocated / total developers", + "QuestionCount": "Remaining / total questions", + "Unlimited": "Unlimited", + "Owners": "Owners", + "Owner": "Owner", + "AddMember": "Add Member", + "AddNewOwner": "Add New Owner", + "AddNewDeveloper": "Add New Developer", + "Developers": "Developers", + "LicenseType": "License type", + "Manage": "Manage", + "SetDefault": "Set as default", + "DefaultOrganization": "Default", + "StartDate": "Start date", + "EndDate": "End date", + "Modules": "Modules", + "LicenseExtendMessage": "Your license end date is extended to {0}", + "LicenseUpgradeMessage": "Your license is upgraded to {0}", + "LicenseExtendAdnUpgradeMessage": "Your license has been extended until {0} and your license plan is upgraded to {1}.", + "LicenseAddDeveloperMessage": "{0} developers added to your license", + "Volo.AbpIo.Commercial:010004": "Can not find the specified user! The user must have already been registered.", + "MyOrganizations": "My organizations", + "ApiKey": "API Key", + "UserNameNotFound": "There is no user with the username {0}", + "SuccessfullyAddedToNewsletter": "Thank you for subscribing to our newsletter!", + "MyProfile": "My profile", + "WouldLikeToReceiveMarketingMaterials": "I would like to receive marketing news like product deals & special offers.", + "StartUsingYourLicenseNow": "Start using your license now!", + "WelcomePage": "Welcome Page", + "UnsubscriptionExpireEmail": "Unsubscribe from license expiration date reminder emails", + "UnsubscribeLicenseExpireEmailReminderMessage": "This email subscription only contains reminders of your license expiration date.", + "UnsubscribeFromLicenseExpireEmails": "If you don't want to receive the emails about your license expiration date, you can unsubscribe at any time you want.", + "Unsubscribe": "Unsubscribe", + "NotOrganizationMember": "You are not a member of any organization.", + "UnsubscribeLicenseExpirationEmailSuccessTitle": "Successfully unsubscribed", + "UnsubscribeLicenseExpirationEmailSuccessMessage": "You will not receive license expiration date reminder emails anymore.", + "LiveDemoLead": "{1} using your ABP account, {3} to abp.io or fill the form below to create a live demo now", + "ThereIsAlreadyAnAccountWithTheGivenEmailAddress": "There is already an account with the given email address: {0}
You should login with your account to proceed.", + "GetLicence": "Get a License", + "Startup": "Startup", + "Templates": "Templates", + "Developer": "Developer", + "Tools": "Tools", + "Premium": "Premium", + "PremiumSupport": "Premium Support", + "PremiumForumSupport": "Premium Forum Support", + "UI": "UI", + "Themes": "Themes", + "JoinOurNewsletter": "Join Our Newsletter", + "Send": "Send", + "OpenSourceBaseFramework": "Open Source Base Framework", + "MicroserviceCompatible": "Microservice compatible", + "DistributedMessaging": "Distributed Messaging", + "DynamicProxying": "Dynamic Proxying", + "BLOBStoring": "BLOB Storing", + "AdvancedLocalization": "Advanced Localization", + "ManyMore": "Many more", + "ExploreTheABPFramework": "Explore the ABP Framework", + "StartupTemplatesShortDescription": "Startup templates make you jump-start your project in a few seconds.", + "UIFrameworksOptions": "UI frameworks options;", + "DatabaseProviderOptions": "Database provider options;", + "PreBuiltApplicationModules": "Pre-Built Application Modules", + "PreBuiltApplicationModulesShortDescription": "Most common application requirements are already developed for you as reusable modules.", + "Account": "Account", + "Blogging": "Blogging", + "Identity": "Identity", + "IdentityServer": "Identity Server", + "LanguageManagement": "Language Management", + "TextTemplateManagement": "Text Template Management", + "See All Modules": "SeeAllModules", + "ABPSuite": "ABP Suite", + "AbpSuiteShortDescription": "ABP Suite is a complementary tool to ABP Platform.", + "AbpSuiteExplanation": "It allows you to build web pages in a matter of minutes. It's a .NET Core Global tool that can be installed from the command line. It can create a new ABP solution and generate CRUD pages from the database to the front-end.", + "LeptonTheme": "Lepton Theme", + "ProfessionalModernUIThemes": "Professional, modern UI themes", + "LeptonThemeExplanation": "Lepton provides a gamut of Bootstrap admin themes that serve as a solid foundation for any project requiring an admin dashboard.", + "DefaultTheme": "Default Theme", + "MaterialTheme": "Material Theme", + "Default2Theme": "Default 2 Theme", + "DarkTheme": "Dark Theme", + "DarkBlueTheme": "Dark Blue Theme", + "LightTheme": "Light Theme", + "ProudToWorkWith": "Proud to Work With", + "JoinOurConsumers": "Join them and build amazing products fast.", + "AdditionalServicesExplanation": "Do you need additional or custom services? We and our partners can provide;", + "CustomProjectDevelopment": "Custom Project Development", + "CustomProjectDevelopmentExplanation": "Dedicated developers for your custom projects.", + "PortingExistingProjects": "Porting Existing Projects", + "PortingExistingProjectsExplanation": "Migrating your legacy projects to the ABP platform.", + "LiveSupport": "Live Support", + "LiveSupportExplanation": "Live remote support option when you need it.", + "Training": "Training", + "TrainingExplanation": "Dedicated training for your developers.", + "OnBoarding": "Onboarding", + "OnBoardingExplanation": "Help to setup your development, CI & CD environments.", + "PrioritizedTechnicalSupport": "Prioritized Technical Support", + "PremiumSupportExplanation": "Besides the great community support of the ABP framework, our support team answers technical questions and problems of the commercial users with high priority.", + "SeeTheSupportOptions": "Check out the Support Options", + "Contact": "Contact", + "TellUsWhatYouNeed": "Tell us what you need.", + "YourMessage": "Your Message", + "YourFullName": "Your full name", + "FirstNameField": "First Name", + "LastNameField": "Last Name", + "EmailField": "E-mail Address", + "YourEmailAddress": "Your e-mail address", + "ValidEmailAddressIsRequired": "A valid e-mail address is required.", + "HowMayWeHelpYou": "How may we help you?", + "SendMessage": "Send Message", + "Success": "Success", + "WeWillReplyYou": "We received your message and will be in touch shortly.", + "CreateLiveDemo": "Create Live Demo", + "CreateLiveDemoDescription": "Once you submit this form, you will receive an email containing your demo link.", + "RegisterToTheNewsletter": "Register for the newsletter to receive information regarding ABP.IO, including new releases etc.", + "EnterYourEmailOrLogin": "Enter your e-mail address to create your demo or Login using your existing account.", + "ApplicationTemplate": "Application Template", + "ApplicationTemplateExplanation": "Application startup template is used to create a new web application.", + "EfCoreProvider": "Entity Framework (Supports SQL Server, MySQL, PostgreSQL, Oracle and others)", + "AlreadyIncludedInTemplateModules": "Following modules are already included and configured in this template:", + "ApplicationTemplateArchitecture": "This application template also supports tiered architecture where the UI layer, API layer and authentication service are physically separated.", + "SeeTheGuideOrGoToTheLiveDemo": "Check out the developer guide for technical information about this template or go to the live demo.", + "DeveloperGuide": "Developer Guide", + "ModuleTemplate": "Module Template", + "ModuleTemplateExplanation1": "You want to create a module and reuse it across different applications? This startup template prepares everything to start to create a reusable application module or a microservice.", + "ModuleTemplateExplanation2": "

You can support single or multiple UI frameworks, single or multiple database providers for a single module. The startup template is configured to run and test your module in a minimal application in addition to the unit and integration test infrastructure.

Check out the developer guide for technical information about this template.

", + "WithAllStyleOptions": "with all style options", + "Demo": "Demo", + "SeeAllModules": "See All Modules", + "ABPCLIExplanation": "ABP CLI is a command line tool to perform common development tasks for ABP-based solutions.", + "ABPSuiteEasilyCURD": "ABP Suite is a tool which allows you to easily create CRUD pages", + "WeAreHereToHelp": "We are Here to Help", + "BrowseOrAskQuestion": "You can browse our help topics or search in the frequently asked questions, or you can ask us a question by using the contact form.", + "SearchQuestionPlaceholder": "Search in frequently asked questions", + "AbpCommercialMetaDescription": "A comprehensive web development platform on ABP Framework with pre-built modules, startup templates, rapid dev tools, pro UI themes & premium support.", + "WhatAreDifferencesThanABPFrameworkExplanation": "

ABP framework is a modular, themeable, microservice compatible application development framework for ASP.NET Core. It provides a complete architecture and a strong infrastructure to let you focus on your own business code rather than repeating yourself for every new project. It is based on the best practices of software development and popular tools you already know.

ABP framework is completely free, open source and community-driven. It also provides a free theme and some pre-built modules (e.g. identity management and tenant management).

", + "VisitTheFrameworkVSCommercialDocument": "Visit the following link for more information {1} ", + "Professional": "Professional", + "UIThemes": "UI Themes", + "EnterpriseModules": "Enterprise ready, feature-rich, pre-built Application Modules (e.g. Identity Server management, SaaS management, language management)", + "ToolingToSupport": "Tooling to support your development productivity (e.g. ABP Suite)", + "PremiumSupportLink": "Premium Support", + "ABPCommercialSolutionExplanation": "When you create a new application, you get a Visual Studio solution (a startup template) based on your preferences. The downloaded solution has commercial modules and themes already installed and configured for you. You can remove a pre-installed module or add another module if you like. All modules and themes use NuGet/NPM packages by default.", + "StartDevelopWithTutorials": "The downloaded solution is well architected and documented. You can start developing your own business code based on it following the tutorials.", + "HowManyProductsExplanation": "You can create as many projects as you want during your active license period; there is no limit! After your license expires, you cannot create new projects, but you can continue to develop the projects you have downloaded and deploy them to an unlimited count of servers.", + "ChangingLicenseType": "Can I upgrade my license type later?", + "LicenseExtendUpgradeDiffExplanation": "Extending: By extending/renewing your license, you will continue to get premium support and get major or minor updates for the modules and themes. Besides, you will be able to continue creating new projects. And you will still be able to use ABP Suite, which speeds up your development. When you extend your license, 1 year is added to your license expiry date.
Upgrading: By upgrading your license, you will be promoted to a higher license plan, which will allow you to get additional benefits. Check out the license comparison table to see the differences between the license plans. On the other hand, when you upgrade, your license expiry date will not change! To extend your license end date, you need to extend your license.", + "LicenseRenewalCost": "What is the license renewal cost after 1 year?", + "LicenseRenewalCostExplanation": "The renewal (extend) price of the standard Team License is ${0}, standard Business License is ${1} and standard Enterprise License is ${2}. If you are already a customer, log into your account to review the current renewal pricing.", + "HowDoIRenewMyLicense": "How do I renew my license?", + "HowDoIRenewMyLicenseExplanation": "You can renew your license by navigating to the organization management page. In order to take advantage of our discounted Early Renewal rates, ensure you renew before your license expires. Don't worry about not knowing when your Early Renewal opportunity closes; you'll receive 3 reminder e-mails before your subscription expires. We'll send them 30 days, 7 days and 1 day before expiration.", + "IsSourceCodeIncluded": "Does my license include the source code of the pro modules and themes?", + "IsSourceCodeIncludedExplanation1": "Depends on the license type you've purchased:", + "IsSourceCodeIncludedExplanation2": "Team: Your solution uses the modules and themes as NuGet and NPM packages. It doesn't include their source code. This way, you can easily upgrade these modules and themes whenever a new version is available. However, you can not get the source code of these modules and themes.", + "IsSourceCodeIncludedExplanation3": "Business/Enterprise: In addition to the Team license, you are able to download the source code of any module or theme you need. You can even remove the NuGet/NPM package references for a particular module and add its source code directly to your solution to fully change it.", + "IsSourceCodeIncludedExplanation4": "

Including the source code of a module to your solution gives you the maximum freedom to customize that module. However, it will then not be possible to automatically upgrade the module when a new version is released.

None of the licenses include the ABP Suite and ABP Studio source code, which is external tools that generates code for you and assists your development.

Check out the Plans & Pricing page for other differences between the license types.

", + "ChangingDevelopers": "Can I change the registered developers of my organization in the future?", + "ChangingDevelopersExplanation": "In addition to adding new developers to your license, you can also change the existing developers (you can remove a developer and add a new one to the same seat) without any additional cost.", + "WhatHappensWhenLicenseEnds": "What happens when my license period ends?", + "discountForYears": "{0}% discount for {1} year(s)", + "WhenShouldIRenewMyLicense": "When should I renew my license?", + "WhenShouldIRenewMyLicenseExplanation": "If you renew your license within {3} days after your license expires, the following discounts will be applied: Team License {0}; Business License {1}; Enterprise License {2}. However, if you renew your license after {3} days since the expiry date of your license, the renewal price will be the same as the license purchase price, and there will be no discount on your renewal.", + "TrialPlan": "Do you have a trial plan?", + "DoYouAcceptBankWireTransfer": "Do you accept bank wire transfers?", + "DoYouAcceptBankWireTransferExplanation": "Yes, we accept bank wire transfers.
After sending the license fee via bank transfer, send your receipt and requested license type to accounting@volosoft.com.
Our international bank account information:", + "HowToUpgrade": "How to upgrade existing applications when a new version is available?", + "DatabaseSupport": "Which database systems are supported?", + "UISupport": "Which UI frameworks are supported?", + "Supported": "Supported", + "UISupportExplanation": "ABP Framework itself is UI framework agnostic and can work with any UI framework. However, startup templates, module UIs and themes were not implemented for all UI frameworks. Check out the Getting Started document for the up-to-date list of UI options.", + "MicroserviceSupport": "Does it support the microservice architecture?", + "WhereCanIDownloadSourceCode": "Where can I download the source-code?", + "HowCanIUpgradeMyProjectToCommercialTemplate": "How can I upgrade my open-source project to the commercial PRO templates?", + "HowCanIUpgradeMyProjectToCommercialExplanation": "You can check out our documentation at Migrating from open source templates to upgrade your open-source projects to the paid PRO templates.", + "ComputerLimitation": "How many computers can a developer login when developing ABP?", + "ComputerLimitationExplanation": "We specifically permit {0} computers per individual/licensed developer. Whenever there is a need for a developer to develop ABP based products on a third machine, an e-mail should be sent to license@abp.io explaining the situation, and we will then make the appropriate allocation in our system.", + "RefundPolicy": "Do you have a refund policy?", + "RefundPolicyExplanation": "You can request a refund within 30 days of your license purchase. The Business and Enterprise license types have source-code download options; therefore, we provide a 60% refund within 30 days for Business and Enterprise licenses. In addition, no refunds are made for renewals and second license purchases.", + "HowCanIRefundVat": "How can I refund VAT?", + "HowCanIRefundVatExplanation1": "If you made the payment using 2Checkout, you can refund VAT via your 2Checkout account:", + "HowCanIRefundVatExplanation2": "Log in to your 2Checkout account", + "HowCanIRefundVatExplanation3": "Find the appropriate order and press \"Refund Belated VAT\" (enter your VAT ID)", + "HowCanIGetMyInvoice": "How can I get my invoice?", + "HowCanIGetMyInvoiceExplanation": "There are 2 payment gateways for purchasing a license: Iyzico and 2Checkout. If you purchase your license through the 2Checkout gateway, it sends the PDF invoice to your email address; check out 2Checkout invoicing. If you purchase through the Iyzico gateway, with a custom purchase link or via a bank wire transfer, we will prepare and send your invoice. You can request or download your invoice from the organization management page. Before contacting us for the invoice, check your organization management page!", + "Forum": "Forum", + "PrivateTicket": "Private Ticket", + "PrivateTicketExplanation": "Enterprise License also includes a private support with e-mail and ticket system.", + "AbpSuiteExplanation1": "ABP Suite allows you to build web pages in a matter of minutes. It's a .NET Core Global tool that can be installed from the command line.", + "AbpSuiteExplanation2": "It can create a new ABP solution and generate CRUD pages from the database to the front-end. For technical overview see the document", + "FastEasy": "Fast & Easy", + "AbpSuiteExplanation3": "ABP Suite allows you to easily create CRUD pages. You just need to define your entity and its properties and let the rest go to ABP Suite for you! ABP Suite generates all the necessary code for your CRUD page in a few seconds. It supports Angular, MVC and Blazor user interfaces.", + "RichOptions": "Rich Options", + "AbpSuiteExplanation4": "ABP Suite supports multiple UI options like Razor Pages and Angular. It also supports multiple databases like MongoDB and all databases supported by EntityFramework Core (MS SQL Server, Oracle, MySql, PostgreSQL, and other providers...).", + "AbpSuiteExplanation5": "The good thing is that you don't have to worry about those options. ABP Suite understands your project type and generates the code for your project and places the generated code in the correct place in your project.", + "AbpSuiteExplanation6": "ABP Suite generates the source code for Entity, Repository, Application Service, Code First Migration, JavaScript/TypeScript and CSHTML/HTML and necessary Interfaces as well. ABP Suite also generates the code according to the Best Practices of software development, so you don't have to worry about the generated code's quality.", + "AbpSuiteExplanation7": "Since you have the source code of the building blocks of the generated CRUD page in the correct application layers, you can easily modify the source code and inject your custom/business logic to the generated code.", + "CrossPlatform": "Cross Platform", + "AbpSuiteExplanation8": "ABP Suite is built with .NET Core, and it is cross-platform. It runs as a web application on your local computer. You can run it on Windows, Mac and Linux", + "OtherFeatures": "Other Features", + "OtherFeatures1": "Updates NuGet and NPM packages on your solution easily.", + "OtherFeatures2": "Regenerates already generated pages from scratch.", + "OtherFeatures3": "Creates new solutions", + "ThanksForCreatingProject": "Your project has been successfully created!", + "HotToRunSolution": "How to run your solution?", + "HotToRunSolutionExplanation": "Check out the getting started document to learn how to configure and run your solution.", + "GettingStarted": "Getting Started", + "WebAppDevTutorialExplanation": "Check out the web application development tutorial document for a step-by-step development sample.", + "Document": "Document", + "UsingABPSuiteToCURD": "Using ABP Suite for CRUD Page Generation & Tooling", + "SeeABPSuiteDocument": "Check out the ABP Suite document to learn the usage of ABP Suite.", + "SeeModulesDocument": "See the modules page for a list of all the PRO modules.", + "Pricing": "Pricing", + "PricingExplanation": "Choose the features and functionality your business needs today. Easily upgrade as your business grows.", + "Team": "Team", + "Business": "Business", + "Enterprise": "Enterprise", + "Custom": "Custom", + "IncludedDeveloperLicenses": "Included developer licenses", + "CustomLicenceOrAdditionalServices": "Need custom license or additional services?", + "CustomOrVolumeLicense": "Custom or volume license", + "LiveTrainingSupport": "Live training & support", + "AndMore": "and more", + "AdditionalDeveloperLicense": "Additional developer license", + "ProjectCount": "Project count", + "AllProModules": "All pro modules", + "AllProThemes": "All pro themes", + "AllProStartupTemplates": "All pro startup templates", + "SourceCodeOfAllModules": "Source code of all modules", + "SourceCodeOfAllThemes": "Source code of all themes", + "PerpetualLicense": "Perpetual license", + "UnlimitedServerDeployment": "Unlimited server deployment", + "YearUpgrade": "1 year upgrade", + "YearPremiumForumSupport": "1-year premium forum support", + "ForumSupportIncidentCountYear": "Forum support incident count/year", + "PrivateTicketEmailSupport": "Private ticket & email support", + "BuyNow": "Buy Now", + "PayViaAmexCard": "How can I pay via my AMEX card?", + "PayViaAmexCardDescription": "The default payment gateway 'Iyzico' may decline some AMEX credit cards due to security measures. In this case, you can pay through the alternative payment gateway '2Checkout'.", + "InvalidReCaptchaErrorMessage": "There was an error verifying reCAPTCHA. Please try again.", + "YourCompanyName": "Your company name", + "FirstName": "First name", + "LastName": "Last name", + "YourFirstName": "Your first name", + "YourLastName": "Your last name", + "SpecialOffer": "Special Offer", + "SpecialOfferMessage": "Hurry up! Prices are valid for a limited time.", + "DiscountRequest": "Discount Request", + "DiscountRequestDescribeCustomerQuestion": "Which of the following describes you?", + "DiscountRequestStudentEmailMessage": "Email Address must contain 'edu'.", + "DiscountRequestDeveloperCount": "How many developers are you?", + "DiscountRequestDeveloperCountExceedMessage": "We don't provide discounted licenses for companies that have over {0} developers.", + "DiscountRequestOrganizationName": "Company/organization/school name", + "Website": "Website", + "GithubUsername": "GitHub username", + "PhoneNumber": "Phone number", + "DescribeABPCommercialUsage": "Describe the project you are planning to develop based on APB Commercial", + "DiscountRequestCertifyInformationMessage": "I certify that all information is true and correct.", + "DiscountRequestReceived": "We have received your discount request.", + "DiscountRequestStatusMessage": "We will respond to you after checking the information you have provided.", + "MVCOrRazorPages": "MVC (Razor Pages)", + "Angular": "Angular", + "Blazor": "Blazor", + "New": "New", + "MongoDB": "MongoDB", + "EBookDDD": "E-Book Domain Driven Design", + "Page": "Page", + "DoYouAgreePrivacyPolicy": "I agree to the Terms & Conditions and Privacy Policy.", + "VolosoftMarketingInformationMessage": "I would like information, tips, and offers about Solutions for Businesses and Organizations and other Volosoft products and services.", + "VolosoftSharingInformationMessage": "I would like Volosoft to share my information with select partners so I can receive relevant information about their products and services.", + "StartFree": "Start free", + "FreeTrial": "Free Trial", + "AcceptsMarketingCommunications": " Yes, I`d like to receive ABP related marketing news.", + "PurposeOfUsage": "Purpose of usage", + "Choose": "- Choose -", + "CompanyOrganizationName": "Company / Organization name", + "StartTrial": "Start My Free Trial", + "ContactUsQuestions": "Contact us if you have any questions", + "TrialActivatedWarning": "A user is entitled to have only 1 free trial period. You already used your trial period.", + "ActivationRequirement": "You are last one step away from starting your trial.
After checking your information, we will activate your license. Once your license is activated, we will send an email to {0}. Don't worry, this process won't take long!", + "SaveAndDownload": "Save And Download", + "CompanyNameValidationMessage": "Company name is too long!", + "AddressValidationMessage": "Address is too long!", + "TaxNoValidationMessage": "TAX/VAT No is too long!", + "NotesValidationMessage": "Notes field is too long!", + "CheckYourBillingInfo": "You can create your invoice only once! Check your billing information before creating your invoice.", + "StartYourFreeTrial": "Start your free trial", + "TrialLicenseModelInvalidErrorMessage": "One of the following fields is invalid: Country Name, Company Size, Industry or Purpose Of Usage.", + "Trial": "Trial", + "Purchased": "Purchased", + "PurchaseNow": "Purchase Now", + "PurchaseTrialLicenseMessage": "Your license expiration date is {0}.
If you want to continue using the projects you created during your free trial period, you need to change the license keys in your appsettings.secrets.json files. Here is your license key:", + "TrialLicenseExpireMessage": "You are using the trial license and your trial license will expire on {0}.", + "TryForFree": "Try For Free", + "TrialLicenseExpiredInfo": "Your trial license period has expired!", + "DowngradeLicensePlan": "Can I downgrade to a lower license plan in the future?", + "LicenseTransfer": "Can a license be transferred from one developer to another?", + "UserOwnerDescription": "The 'Owner' of the organization is the admin of this account. He/she manages the organization by purchasing licenses and allocating developers. An 'Owner' cannot write code in the ABP projects, cannot download the ABP sample projects, and cannot ask questions on the support website. If you want to do all these, you have to add yourself as a developer too.", + "UserDeveloperDescription": "The 'Developers' can write code in the ABP projects, download the ABP sample projects, and ask questions on the support website. On the other hand, the 'Developers' cannot manage this organization.", + "RemoveCurrentUserFromOrganizationWarningMessage": "You are removing yourself from your own organization. You will no longer be able to manage this organization, do you confirm?", + "RenewExistingOrganizationOrCreateNewOneMessage": "You can renew the license of your organization(s) by clicking the below \"Extend Now\" button(s) and thus you can extend the license expiration date by 1 year. If you continue to checkout, you will have a new organization. Do you want to continue with a new organization?", + "PurchaseTrialOrganizationOrCreateNewOneMessage": "You have a trial license. To purchase your trial license click the Purchase Now button. If you continue to checkout, you will have a new organization. Do you want to continue with a new organization?", + "ExtendNow": "Extend / Renew", + "CreateNewOrganization": "Create a new organization", + "RenewLicenseEarly": "If I renew my license early, will I get the full year?", + "RenewLicenseEarylExplanation": "When you renew your license before your license expiration date, 1 year will be added to your license expiration date. For example, if your license expires on {0}-06-06 and you renew it on {0}-01-01, your new license expiration date will be {1}-06-06.", + "OpenSourceWebApplication": "Open source web application", + "CompleteWebDevelopment": "A complete web development", + "ABPFrameworkDescription": "ABP Framework is a complete infrastructure to create modern web applications by following the best practices of software development and conventions.", + "CommunityDescription": "Share your experiences with the ABP Framework!", + "PreBuiltApplication": "Pre-Built Application", + "DatabaseProviders": "Database Providers", + "UIFrameworks": "UI Frameworks", + "UsefulLinks": "Useful Links", + "Platform": "Platform", + "MicroserviceArchitectureExplanation": "This is a complete solution architecture that consists of multiple applications, API gateways, microservices and databases to build a scalable microservice solution with the latest technologies.", + "BusinessLogic": "Business Logic", + "DataAccessLayer": "Data Access Layer", + "Monolith": "Monolith", + "ModularArchitectureExplanation": "This startup template provides a layered, modular and DDD-based solution architecture to build a clean and maintainable codebase.", + "Bs5Compatible": "Bootstrap 5 compatible professional theme, perfect for your admin website.", + "LeptonXTheme": "LeptonX Theme", + "LeptonXDark": "LeptonX Dark", + "LeptonXLight": "LeptonX Light", + "LeptonXSemiDark": "LeptonX Semi-Dark", + "BuiltOnBs5Library": "Built on Bootstrap 5 library", + "FullyCompatibleWithBs5": "100% compatible with Bootstrap 5 HTML structure and CSS classes", + "ResponsiveAndMobileCompatible": "Responsive, mobile-compatible, RTL support", + "ProvidesStylesForDatatables": "Provides styles for Datatables", + "MultipleLayoutOptions": "Multiple layout options", + "EasilyInstallAndUpgrade": "Easily install and upgrade", + "SupportForum": "Support Forum", + "TrustedBy": "Trusted By", + "OurPricing": "Our Pricing", + "Plans": "Plans", + "NameSurname": "Name Surname", + "LicenceType": "Licence Type", + "LicenseDiscountWarning": "THIS DISCOUNT PAGE USES DEFAULT DISCOUNT CODE AND FOR VOLOSOFT DEVELOPERS. PURCHASE LINKS BELOW DO NOT WORK.", + "DiscountedLicenseExplanation": "These license prices are for small startups, individual developers, students, non-profit organizations and projects!", + "General": "General", + "Development": "Development", + "Payment": "Payment", + "WatchExplainerVideo": "Let's Meet! Watch Explainer Video", + "LightDarkAndSemiDarkThemes": "Light, Dark and Semi-Dark", + "LeptonXThemeExplanation": "Lepton Theme can change your theme according to your system settings.", + "PRO": "PRO", + "YourAccountDetails": "Your Account Details", + "OrganizationName": "Organization Name", + "MicroserviceDescription": "Discover ABP's complete solution architecture featuring multiple applications, API gateways, micro services, and databases using the latest technologies.", + "AddDevelopers": "Add Developers", + "StartDevelopment": "Start Development", + "ModularMonolithDescription": "Explore this ABP template designed for a layered, modular, and DDD-based solution architecture, helping you build a clean, maintainable codebase with ease.", + "CreateAndRunApplicationUsingStartupTemplate": "Learn how to create and run a new web application using the ABP startup template.", + "CommunityDescription2": "abp.io/community is a place where people can share ABP-related articles. Search for articles, tutorials, code samples, case studies and meet people in the same lane as you.", + "UseABPSuiteExplanation": "Use ABP Suite to download the source-code of the modules and themes.", + "ManageModulesWithSuite": "You can also manage your ABP modules with Suite.", + "LearnHowToInstallSuite": "Learn how to install and use ABP Suite.", + "SeeLess": "See Less", + "LayeredSolutionStructure": "Layered Solution Structure", + "LayeredSolutionStructureExplanation": "The solution is layered based on Domain Driven Design principles and patterns to isolate your business logic from the infrastructure and integrations and to maximize code maintainability and reusability. ABP Framework already provides abstractions, base classes and guides to truly implement DDD for your application.", + "SimpleMonolithDescription": "This ABP template is a simple monolith application that is designed to be a good starting point for your small to medium-sized projects.", + "MultipleUIOptionsExplanation": "We love different ways to create the UI. This startup solution provides three different UI framework options for your business application.", + "MultipleDatabaseOptions": "Multiple Database Options", + "MultipleDatabaseOptionsExplanation": "You have two database provider options (in addition to using both in a single application). Use Entity Framework Core to work with any relational database and optionally use Dapper when you need to write low-level queries for better performance. MongoDB is another option if you need to use a document-based NoSQL database. While these providers are well-integrated, abstracted and pre-configured, you can actually interact with any database system that you can use with .NET.", + "ModularArchitectureExplanation2": "Modularity is a first-class citizen in the ABP platform. All the application functionalities are split into well-isolated optional modules. The startup solution already comes with the fundamental ABP modules pre-installed. You can also create your own modules to build a modular system for your own application.", + "MultiTenancyForSaasBusiness": "Multi-tenancy for your SaaS Business", + "MultiTenancyForSaasBusinessExplanation": "The solution has been fully configured to support multi-tenant systems. It allows the tenants to share or have their own databases with on-the-fly database creation and migration system.", + "MicroserviceStartupSolution": "Microservice Startup Solution", + "MicroserviceArchitectureExplanation2": "You can get it for your next microservice system to take advantage of the pre-built base solution and distilled experience.", + "PreIntegratedTools": "Pre-integrated to Popular Tools", + "PreIntegratedToolsExplanation": "The solution is already integrated into the industry-standard tools and technologies, while you can always change them and integrate with your favorite tools.", + "SingleSignOnAuthenticationServer": "Single Sign-on Authentication Server", + "SingleSignOnAuthenticationServerExplanation": "The solution has an authentication server application that is used by the other applications as a single sign-on server with the API access management features. It is based on the Openiddict implementation.", + "WebAppsWithGateways": "2 Web Apps with 2 API Gateways", + "WebAppsWithGatewaysExplanation": "The solution contains two web applications, each one has a dedicated API gateway (BFF - Backend For Frontend pattern).", + "BackOfficeApplication": "Back Office Application", + "BackOfficeApplicationExplanation": "The actual web application of your system, with multiple UI framework options. You can create any kind of business application.", + "LandingWebsite": "Landing Website", + "LandingWebsiteExplanation": "A generic landing/public website that can be used for several purposes, like introducing your company, selling your products, etc.", + "ABPFrameworkEBook": "Mastering ABP Framework e-book", + "MasteringAbpFrameworkEBookDescription": "Included within your commercial license", + "LicenseTypeNotCorrect": "The license type is not correct!", + "Trainings": "Trainings", + "ChooseTrainingPlaceholder": "Choose the training...", + "DoYouNeedTrainings": "Do you need one of these trainings?", + "DoYouNeedTraining": "Do you need {0} training?", + "GetInTouchUs": "Get in touch with us", + "ForMoreInformationClickHere": "For more information, click here.", + "ForMoreInformationClickHereByClass": "For more information, click here.", + "IsGetOnboardingTraining": "Would you like to get onboarding & web application development training?", + "OnboardingWebApplicationDevelopmentTrainingMessage": "To schedule your training calendar, please contact {0} after creating the organization", + "CustomPurchaseMessage": "For the next step, click {0} to contact us.", + "Note": "Note", + "AdditionalNote": "Additional Note", + "OnboardingTrainingFaqTitle": "Do you have ABP onboarding training?", + "OnboardingTrainingFaqExplanation": "Yes, we have ABP Training Services to help you get your ABP project started fast. You will learn about ABP from an ABP core team member, and you will get the skills to begin your ABP project. In the onboarding training, we will explain how to set up your development environment, install the required tools, and create a fully functional CRUD page. The training will be live, and the Zoom application will be used, we are open to using other online meeting platforms. The language of the training will be English. You can also ask your questions about ABP during the sessions. A convenient time and date will be planned for both parties. For further information visit training page.", + "AddBasket": "Add to Basket", + "SendTrainingRequest": "Send Training Request", + "OnlyEnglishVersionOfThisDocumentIsTheRecentAndValid": "* The English version of this document is the most up-to-date, and the English version will prevail in any dispute.", + "Pricing_Page_Title": "ABP Pricing | Flexible Plans for Development Needs", + "Pricing_Page_Description": "See the licensing plans of the ABP, including free tiers. If standard plans don't fit, ask for a quote. Don't forget; we have a 30-day money-back guarantee!", + "Pricing_Page_HurryUp": "Hurry Up!", + "Pricing_Page_BuyLicense": "Buy a license at 2021 prices until January 16!", + "Pricing_Page_ValidForExistingCustomers": "Also valid for existing customers and license renewals.", + "Pricing_Page_Hint1": "The license price includes a certain number of developer seats. If you have more developers, you can always purchase additional seats.", + "Pricing_Page_Hint2": "You can purchase more developer licenses now or in the future. Licenses are seat-based, so you can transfer a seat from one developer to another.", + "Pricing_Page_Hint3": "You can develop an unlimited count of different products with your license.", + "Pricing_Page_Hint4": "ABP Suite is a tool to assist your development to improve your productivity. It supports generating CRUD pages and creating new projects.", + "Pricing_Page_Hint5": "You can use all the pre-built modules in your applications.", + "Pricing_Page_Hint6": "You can use all the pre-built themes in your applications.", + "Pricing_Page_Hint7": "A startup template is a Visual Studio solution to make you jump-start your project. All fundamental modules are added and pre-configured for you.", + "Pricing_Page_Hint8": "Mastering ABP Framework e-book explains how to implement .NET solutions with best practices. It is sold on Amazon.com, and you can download the book for free with your license.", + "Pricing_Page_Hint9": "You can download the source-code of any module. You may want to add the source code to your solution to make radical changes or just keep it for yourself for security reasons.", + "Pricing_Page_Hint10": "Licenses are for a lifetime. That means you can continue to develop your application forever. Accessing to the latest version and getting support are granted within the license period (1 year unless you renew it).", + "Pricing_Page_Hint11": "No restrictions on deployment! You can deploy to as many servers as you want, including the cloud services or on-premises.", + "Pricing_Page_Hint12": "You can update the modules, themes and tools to the latest version within your active license period. After your license expires, you need to renew it to continue to get updates for bug fixes, new features and enhancements.", + "Pricing_Page_Hint13": "You can get the premium support for one year (you can renew your license to extend it).", + "Pricing_Page_Hint14": "Team and Business licenses have incident/question count limit. If you buy additional developer licenses, your incident limit increases by {0} (for the Team License) or {1} (for the Business License) per developer.", + "Pricing_Page_Hint15": "Only Enterprise License includes private support. You can send an e-mail directly to the ABP Team or ask questions on abp.io/support/questions with a private ticket option. The private tickets are not visible to the public.", + "Pricing_Page_Hint16": "You can download the source-code of all ABP themes. You may want to add the source code to your solution to make radical changes or just keep it for yourself for security reasons.", + "Pricing_Page_Testimonial_1": "ABP Commercial allowed SC Ventures to deliver a bank-grade multi-tenant silo-database SaaS platform in 9 months to support the accounts receivable / accounts payable supply chain financing of significant value invoices from multiple integrated anchors. The modularity of ABP made it possible for the team to deliver in record time, pass all VAPT, and deploy the containerized microservices stack via full CI/CD and pipelines into production.", + "Pricing_Page_Testimonial_2": "We see the value of using ABP Commercial to reduce the overhead of custom development projects. The team is able to unify the code pattern in different project streams. We see more potential in the framework for us to build new features faster than before. We trust we will be constantly seeing the value of leveraging ABP Commercial.", + "Pricing_Page_Testimonial_3": "We love ABP. We don't have to write everything from scratch. We start from out-of-the-box features and just focus on what we really need to write. Also, ABP is well-architected and the code is high quality with fewer bugs. If we had to write everything we needed on our own, we might have to spend years. One more thing we like is that the new version, issue fixing, or improvement comes out very soon every other week. We don't wait too long.", + "Pricing_Page_Testimonial_4": "ABP Commercial is a fantastic product would recommend. Commercial products to market for our customers in a single configurable platform. The jump starts that the framework and tooling provide any team is worth every cent. ABP Commercial was the best fit for our needs.", + "Pricing_Page_Testimonial_5": "ABP Framework is not only a framework, but it is also a guide for project development/management, because it provides DDD, GenericRepository, DI, Microservice, and Modularity training. Even if you are not going to use the framework itself, you can develop yourself with abp.io/docs which is well and professionally prepared (OpenIddict, Redis, Quartz etc.). Because many things are pre-built, it shortens project development time significantly (Such as login page, exception handling, data filtering, seeding, audit logging, localization, auto API controller etc.). As an example from our application, I have used Local Event Bus for stock control. So, I am able to manage order movements by writing stock handler. It is wonderful not to lose time for CreationTime, CreatorId. They are being filled automatically.", + "Pricing_Page_Testimonial_6": "ABP Framework is a good framework but it needs time to understand the different layers, classes, and libraries it uses (especially ABP). I spent a lot of time reading the code base, but ABP Commercial saved us time in creating the project specialty entities (AR) and the repository linked to each of them. I liked also the approach used in ABP is very mature; we know is based on DDD and monolith.", + "Pricing_Page_Testimonial_7": "As a startup, we need to iterate quickly and spend minimal time on boilerplate and non-core features.\nOur engineers range from highly experienced to junior engineers, and we needed a common understanding and a way to share technical and domain knowledge, ABP allowed us to do this due to their great guides and documentation. \nThere are things we haven't had to worry about since they work out of the box with ABP. \nABP helped us streamline rapid prototyping and development, less than 4 weeks from feature inception to production. With all its premium features included in the license, ABP has given us, \"Startup in a Box\" on the Software Engineering Side.", + "Pricing_Page_Testimonial_8": "I would recommend ABP commercial to all those who want to expand the range of products available to their customers. It's fantastic when need to use a distributed enterprise environment (Angular, WPF, Win&Linux). In addition to their products, we love their support, which makes our job faster and easier. We already know that we have found a great partner for the future who will support us in expanding our business.", + "Pricing_Page_Testimonial_9": "We are a company of 2 employees that's been in business for over 20 years.\nIn terms of our experience with ABP Commercial, we were approached by a client who requested that we develop a new human resources application in a modern environment to replace their 25-year-old Access application. We decided to transition from a desktop solution to a web-based one.\n\nAt the time, we had very little knowledge of web applications and .NET, but we stumbled upon ABP Commercial, and with the help of ABP Framework, technical documentation, and ABP Suite, we were able to not only develop the application to the client's specifications but also successfully work within a .NET environment within a year.", + "AbpBookDownloadArea_ClaimYourEBook": "Claim your Mastering ABP Framework E-Book", + "AddMemberModal_Warning_1": "If the username you are trying to add doesn't exist in the system, please ask your team member to register on {0} and share the username of his/her account with you.", + "MyOrganizations_Detail_WelcomeMessage": "Welcome to your organization, {0}", + "MyOrganizations_Detail_OrganizationManagement": "Organization Management", + "OrganizationDisplayName": "Organization Display Name", + "MyOrganizations_Detail_EditDisplayName": "Edit Display Name", + "MyOrganizations_Detail_UpgradeYourLicense": "Upgrade your license", + "MyOrganizations_Detail_LicenseStartAndExpiryDate": "License Start Date - Expiry Date", + "MyOrganizations_Detail_OwnerRightInfo": "You are using {0} of your {1} owners rights.", + "MyOrganizations_Detail_CopyApiKey": "Copy the Key", + "MyOrganizations_Detail_ApiKeyDescription": "The API Key is the token of PRO packages hosted on {1}.", + "MyOrganizations_Detail_YourPrivateNugetSource": "Your private NuGet source is {0}", + "MyOrganizations_Detail_PrivateNugetSourceWarning": "This is automatically added as a feed to your NuGet.Config in your ABP solution. Do not share your private key with unauthorized users!", + "MyOrganizations_Detail_DeveloperSeatInfo": "You are using {0} of your {1} developer seats.", + "NeedMoreSeatsForYourTeam": "Need more seats for your team?", + "MyOrganizations_Detail_PricePerYear": "{0} / per year", + "MyOrganizations_Detail_PurchaseDeveloperSeats": "Purchase Developer Seats", + "Invoices": "Invoices", + "RequestInvoice": "Request Invoice", + "OrderNumber": "Order Number", + "Products": "Products", + "TotalPrice": "Total Price", + "ThereIsNoInvoice": "There is no invoice", + "MyOrganizations_Detail_PaymentProviderInfo": "If you have purchased your license through {0} gateway, it sends the PDF invoice to your email address, see {0} invoicing.", + "MyOrganizations_Detail_PayUInfo": "If you have purchased through the Iyzico gateway, click the \"Request Invoice\" button and fill in the billing information.", + "MyOrganizations_Detail_ConclusionInfo": "Your invoice request will be concluded within {0} business days.", + "ExtendYourLicense": "Extend your {0} License", + "PurchaseLicense": "Purchase {0} license", + "DownloadInvoiceModal_DownloadInvoice": "Download Invoice", + "DownloadInvoiceModal_SaveInformationOnlyOnce": "You can save your billing information only once.", + "InvoiceModal_EnterCompanyName": "Enter your legal company name...", + "InvoiceModal_EnterCompanyAddress": "Enter your legal company address...", + "InvoiceModal_EnterTaxNumber": "Enter your TAX/VAT number if available...", + "RequestInvoiceModal_EnterNotes": "Additional information for your invoice... This note will be written in the notes section of the invoice.", + "PrePayment_PayWithIyzico": "You will pay with Iyzico", + "ContinueToCheckout": "Continue to Checkout", + "PrePayment_IyzicoRedirectionInfo": "You will be redirected to Iyzico Payment Gateway to complete your purchase securely.", + "PrePayment_IyzicoAcceptVisaAndMasterCard": "Iyzico accepts Visa and MasterCard.", + "Purchase": "Purchase", + "AcceptTermsAndConditions": "I have read, understand and accept the privacy policy, terms & conditions and EULA.", + "AcceptTermsAndConditionsWarningMessage": "Please accept the privacy policy and terms & conditions", + "SelectGatewayToContinue": "Please select a Gateway to continue!", + "GatewaySelection_SelectGateway": "Select a Payment Gateway", + "GatewaySelection_RedirectionMessage": "Next, you will be redirected to the selected payment gateway's website for the transaction.", + "PaymentSucceed_PaymentSuccessMessage": "Payment Successful", + "PaymentSucceed_ThanksForPurchase": "Thank you for your purchase!", + "PaymentSucceed_CreateYourOrganization": "Create your organization", + "PaymentSucceed_AddMeAsDeveloper": "I'm a developer too, add me as a developer to my organization.", + "PaymentSucceed_CreateOrganization": "Create Organization", + "PaymentSucceed_OrganizationDescription": "An organization consists of developers and owners. The developers are users who write code on the ABP project and will benefit from the {1} website. The owners are users who allocate developer seats and manage licensing.", + "PaymentSucceed_ViewOrganization": "Click here to view organization", + "Purchase_TotalAnnualPrice": "TOTAL (annual fee)", + "Purchase_TrainingPrice": "Training Price", + "Purchase_OnboardingTraining": "Onboarding & Web Application Development Live Training", + "TotalDeveloperPrice": "Total Developer Price", + "Purchase_PricePerDeveloper": "{0} per developer", + "Purchase_IncludedDeveloperInfo": "{0} {1} included.", + "Purchase_LicenseExtraDeveloperPurchaseMessage": "The {0} License includes {1} developers. You can add additional developers.", + "StartupTemplates_Page_Title": "ABP Startup Templates", + "StartupTemplates_Page_Description": "Kickstart your new project with ABP's app templates! Leave all the infrastructure aspects to ABP and do what you do best; focus on your work…", + "MicroserviceStartupSolutionForDotnet": "Microservice Startup Solution for .NET", + "MonolithSolutionForDotnet": "Monolith (modular) Solution for .NET", + "TrainingDetailsHeaderInfo_TrainingHour": "{0} hours", + "Trainings_Content": "Content of Training", + "Trial_Page_StartYourFreeTrial": "Start Your Free Trial", + "TrialLicenseFeatures": "You'll be able to benefit from all ABP commercial features", + "TrialPeriodDays": "You'll have a {0} days Team License", + "TrialForumSupportIncident": "You'll have {0} forum support incidents", + "Contact_Page_Title": "Contact Us", + "Contact_Page_Description": "Get in touch with us for licensing, additional services, inquiries or feedback about ABP. We're here to help!", + "Demo_Page_Title": "Create a Live Demo", + "CustomProjectDescription" : "Leverage ABP's expertise for custom project development. Get solutions built to your specifications with our modular architecture and cutting-edge technology", + "Demo_Page_Description": "Create a free live demo to experience the power of ABP with our interactive demos. Explore a variety of real-world web applications.", + "Discounted_Page_Title": "Discounted pricing", + "Discounted_Page_Description": "Choose the features and functionality your business needs today. Buy an commercial license and create unlimited projects", + "PortingExistingProjectsDescription": "Modernize your app with ABP's project porting services. Migrate your existing .NET projects to a robust, scalable architecture using the latest technologies", + "Faq_Page_Title": "Frequently Asked Questions", + "Faq_Page_Description": "Find answers to common questions about ABP in our FAQ section, covering various topics and issues.", + "Faq_Page_SwiftCode": "SWIFT Code", + "Faq_Page_BankName": "Bank Name", + "Faq_Page_AccountName": "Account Name", + "Faq_Page_AccountNumber": "Account Number", + "Faq_Page_Currency": "Currency", + "Faq_Page_VatNumber": "VAT number", + "Faq_Page_OtherCurrenciesInfo": "For other currencies, see all accounts", + "ProjectCreatedSuccess_Page_Title": "Your project created", + "ProjectCreatedSuccess_Page_Description": "Your ABP project created successfully!", + "Suite_Page_Title": "ABP Suite", + "Suite_Page_Description": "Meet ABP Suite, a rapid application development tool that increases productivity and efficiency. Create CRUD pages in minutes!", + "Themes_Page_Title": "ABP Themes", + "Themes_Page_Description": "Appearance matters! We present to you LeptonX Theme, a modern, customizable, flexible theme that creates a unique user experience.", + "Tools_Page_Title": "ABP Tools", + "Tools_Page_Description": "Explore the tool kits provided by ABP that enhance development productivity and streamline your development.", + "DeveloperPrice": "Developer Price", + "AdditionalDeveloperPaymentInfoSection_AdditionalDevelopers": "{0} developers", + "LicenseRemainingDays": "for {0} days", + "ExtendPaymentInfoSection_Description": "By extending/renewing your license, you will continue to get premium support. You will also be able to get major or minor updates for modules and themes. You will be able to continue creating new projects. And you will still be able to use ABP Suite which speeds up your development.", + "LicenseRenewalPrice": "License renewal price", + "LicensePrice": "License Price", + "TrialLicensePaymentInfoSection_Description": "Purchase license: By purchasing a license, you will continue to get premium support. You will also be able to get major or minor updates for modules and themes. You will be able to continue creating new projects. And you will still be able to use ABP Suite which speeds up your development.
See the license comparison table to check the differences between the license types.", + "SelectTargetLicense": "Select Target License", + "UpgradePaymentInfoSection_ExtendMyLicenseForOneYear": "Yes, extend my license expiration date for 1 year.", + "UpgradePaymentInfoSection_WantToExtendLicense": "Do you want to extend your license for 1 more year?", + "UpgradePaymentInfoSection_UpgradingWillNotExtendLicense": "Upgrading will not extend your license expiration date!", + "UpgradePaymentInfoSection_LicenseUpgradeDescription": "By upgrading your license, you will be promoted to a higher license type, which will allow you to get additional benefits. See the license comparison table to check the differences between the license types.", + "Welcome_Page_UseSameCredentialForCommercialWebsites": "Use the same credentials for both abp.io and abp.io/support/questions.", + "WatchCrudPagesVideo": "Watch the \"Creating CRUD Pages with ABP Suite\" Video!", + "WatchGeneratingFromDatabaseVideo": "Watch the \"ABP Suite: Generating CRUD Pages From Existing Database Tables\" Video!", + "WatchTakeCloserLookVideo": "Watch the \"Take a closer look at the code generation: ABP Suite\" Video!", + "ConfirmedEmailAddressRequiredToStartTrial": "You should have a confirmed email address in order to start a trial license.", + "EmailVerificationMailNotSent": "Email verification mail couldn't send.", + "GetConfirmationEmail": "Click here to get a verification email if you haven't got it before.", + "WhichLicenseTypeYouAreInterestedIn": "Which license type you are interested in?", + "DontTakeOurWordForIt": "Don't take our word for it...", + "BlazoriseLicense": "Do we need to buy a Blazorise license?", + "ExtendPaymentInfoSection_DeveloperPrice": "{0}x Additional Developer(s)", + "ExtendPaymentInfoSection_DiscountRate": "Discount {0}%", + "TotalNetPrice": "Total Net Price", + "EFCore": "Entity Framework Core", + "All": "All", + "Mvc": "MVC", + "DataBaseProvider": "Data Provider", + "UIFramework": "UI Framework", + "LeptonXThemeForDashboard": "LeptonX Theme for Your Admin Dashboard by", + "AbpPlatform": "ABP Platform", + "YouDeserveGoodUXUI": "You deserve a good UI and a better UX. LeptonX Theme by ABP is here to serve it.", + "ViewLiveDemo": "View Live Theme Demo", + "GetLeptonX": "Get LeptonX Now", + "SeeLeptonXDocumentation": "See LeptonX Documentation", + "SeeLeptonDocumentation": "See Lepton Documentation", + "SimplifiedMenu": "Simplified menu", + "SimplifiedMenuDescription": "You can easily find the page you are looking for by filtering the menu", + "YourFavoritePages": "Your favorite pages at your reach", + "YourFavoritePagesDescription": "Easily add or remove the page from favorites by clicking the star icon in the upper right corner of the page.", + "BreadCrumbs": "Breadcrumb for seamless switching", + "BreadCrumbsDescription": "Using Breadcrumb, you can switch to the pages at the same level with one click, even when the left menu is closed, and it works on tablet and mobile responsive!", + "YourMenu": "Your menu as you wish", + "YourMenuDescription": "Customize the directly clickable icons and dropdown boxes on the user menu as you wish. The user menu is completely customizable for your needs", + "RtlSupport": "RTL support for your language", + "RtlSupportDescription": "LeptonX Theme supports RTL for your language. The language options are in the settings menu for you to change the language.", + "YourColors": "Your colors on your admin dashboard UI", + "YourColorsDescription": "LeptonX Theme works according to your system preferences and has dashboard light theme, dashboard dark theme, and dashboard semi-dark theme options.", + "ArrangeContentWidth": "Easily arrange your content width", + "ArrangeContentWidthDescription": "Easily change the width of your content area.", + "LeptonXCompatibleWith": "LeptonX Theme is compatible with", + "MobileResponsiveTemplate": "Mobile Responsive Template", + "MobileResponsiveTemplateDescription1": "Access your LeptonX admin dashboard from any device you like.", + "MobileResponsiveTemplateDescription2": "It is designed for you to easily use in every device of yours. It is responsive on mobile devices and tablet sizes.", + "TopMenuLayoutOption": "Top Menu Layout Option", + "TopMenuLayoutOptionDescription1": "If you would like to set up your website with the same admin dashboard, it is possible to do it with LeptonX Theme!", + "TopMenuLayoutOptionDescription2": "Just try the LeptonX top menu layout to make it happen!", + "EasilyCustomizable": "Easily customizable for your brand colors", + "EasilyCustomizableDescription1": "You can customize the LeptonX theme using just a few SCSS variables. No overriding, no extra CSS load!", + "EasilyCustomizableDescription2": "With LeptonX, you can arrange your admin dashboard however you like.", + "IndependentLayout": "Independent layout and content area", + "IndependentLayoutDescription1": "LeptonX's layout infrastructure was designed completely separate from the content.", + "IndependentLayoutDescription2": "This means that you can freely design your project with a content structure other than Bootstrap if you want.", + "MostUsedLibraries": "Most used libraries integrated with LeptonX", + "MostUsedLibrariesDescription1": "LeptonX contains your most used libraries. It allows you to use libraries such as ApexCharts, DataTables, DropZone, FullCalender, JSTree, Select2, and Toastr effortlessly.", + "MostUsedLibrariesDescription2": "LeptonX also supports MVC Angular and Blazor-specific libraries.", + "CreateAndCustomize": "Create and customize the pages you need in seconds with LeptonX custom pages", + "CreateAndCustomizeDescription": "By using LeptonX Theme you also have access to many pre-made HTML pages. These include many pages such as login page, blog, FAQ, subscription list, invoice, pricing, and file management.", + "LeptonThemeForAdmin": "Lepton Theme for your admin dashboard by", + "LeptonThemeForAdminDescription": "Lepton Theme is still available and will be maintained. If you want to switch to LeptonX Theme as a Lepton Theme user, you can see the documentation to learn how-to.", + "LeptonCompatibleWith": "Lepton Theme is compatible with", + "BlackFridayDiscount": "Black Friday Discount", + "UpgradePaymentInfoSection_DeveloperPrice": "{0} for {1} additional developer(s)", + "Upgrade": "Upgrade", + "Renewal": "Renewal", + "UpgradePaymentInfoSection_LicensePrice": "{0} license", + "UpgradePaymentInfoSection_LicenseRenewalPrice": "License renewal", + "Total": "Total", + "SupportPolicyFaqTitle": "What is your support policy?", + "TotalDevelopers": "Total {0} developer(s)", + "CustomPurchaseExplanation": "Tailored to your specific needs", + "WhereDidYouHearAboutUs": "Where did you hear about us?", + "Twitter": "Twitter", + "Facebook": "Facebook", + "Youtube": "YouTube", + "Google": "Google", + "Github": "GitHub", + "Friend": " From a friend", + "Other": "Other", + "WhereDidYouHearAboutUs_explain": "Specify ...", + "DeletingMemberWarningMessage": "\"{0}\" will be removed from the developer list. If you want, you can assign this empty seat to another developer later.", + "AdditionalInfo": "If the developer seats are above your requirements, you can reduce them. You can email at info@abp.io to remove some of your developer seats. Clearing unused developer seats will reduce the license renewal cost. If you want, you can re-purchase additional developer seats within your active license period. Note that, since there are {0} developers in this license package, you cannot reduce this number.", + "LinkExpiredErrorMessage": "The link you are trying to access is expired.", + "ExpirationDate": "Expiration Date", + "SpringCampaignDiscount": "Spring Campaign Discount", + "WhyUseAbpIoPlatform": "Why should I use the ABP Platform instead of creating a new solution from scratch?", + "WhyUseAbpIoPlatformFaqExplanation": "See that page for a detailed explanation of why using ABP Platform has a significant advantage over doing everything yourself.", + "EulaPageTitle": "End User License Agreement (EULA)", + "EulaPageDescription": "Review ABP's End User License Agreement (EULA) to understand the terms and conditions to use our software, including rights, restrictions, obligations.", + "PrivacyPolicyPageTitle": "Privacy Policy | Cookie Policy", + "PrivacyPolicyPageDescription": "Discover how ABP ensures your privacy and protection. Learn about our commitment to safeguarding your information and the measures we take to secure data.", + "TermsConditionsPageTitle": "Terms and Conditions", + "TermsConditionsPageDescription": "Read ABP's Terms and Conditions to understand the rules, rights, and responsibilities for using our software and services.", + "TrainingsPageTitle": "Training Packages", + "ModulesPageTitle": "Modules | Pre-built Modules for .NET", + "ModulesPageDescription": "Discover ABP's pre-built modules designed for .NET applications. Enhance your development workflow with framework's customizable solutions.", + "Volo.AbpIo.Commercial:040001": "API Access Key is incorrect.", + "GetLepton": "Get Lepton Now", + "MyOrganizations_Detail_LicenseStartDate": "Start Date", + "MyOrganizations_Detail_LicenseExpiryDate": "Expiry Date", + "BlazoriseSupport": "How do I get the Blazorise license key and support from the Blazorise team?", + "BlazoriseSupportExplanation": "Follow the steps below to get support from the Blazorise team and get your Blazorise license key:", + "BlazoriseSupportExplanation1": "Sign up for a new account at blazorise.com/support/register with the same email address as your abp.io account. Leave the \"License Key\" entry blank. It must be the same email address as your email account on abp.io.", + "BlazoriseSupportExplanation2": "Verify your email address by checking your email box. Check your spam box if you don't see an email in your inbox!", + "BlazoriseSupportExplanation3": "Log into the Blazorise support website at blazorise.com/support/login.", + "BlazoriseSupportExplanation4": "If you have an active ABP Commercial License, you will also have a Blazorise PRO license. You can get your Blazorise license key at blazorise.com/support/user/manage/license.", + "BlazoriseSupportExplanation5": "You can post your questions on the support website and generate a product token for your application.", + "AbpLiveTrainingPackages": "ABP Live Training Packages", + "Releases": "Releases", + "ReleasesDescription": "This page contains detailed information about each release. You can see all the closed pull requests for a specific release. For overall milestone developments, you can check out the brief release notes page.", + "ReleaseDate": "Release Date", + "Labels": "Labels", + "PreRelease": "Pre-release", + "AllTypes": "All Types", + "Enhancement": "Enhancement", + "Bug": "Bug", + "Feature": "Feature", + "AllUIs": "All UIs", + "MVC": "MVC", + "BlazorServer": "Blazor Server", + "MAUI": "MAUI", + "HowItWorks_Page_Title": "How It Works?", + "HowItWorks_Page_Description": "Understand how ABP 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.", + "CreateANewSolution_Description1": "Everything starts by creating a new ABP integrated .NET solution.", + "StartWithStartupTemplates": "Start one of the pre-built startup solution templates", + "SimpleMonolithApplicationTemplate": "Simple monolith application template", + "LayeredApplicationTemplate": "Modular monolith application template", + "MicroserviceSolutionTemplate": "Microservice solution template", + "CreateEmptySolutionAndUseAbp": "Or create a new empty .NET solution and install ABP NuGet & NPM packages yourself.", + "CreatingSolutionWithMultipleOptions": "There are multiple UI and Database options while creating a new solution.", + "UIFrameworkOptions": "UI Framework Options", + "DotnetSolutionWithoutDependency": "Now, you have a regular .NET solution in your local computer that has no dependency on a cloud platform or external service.", + "CheckTheDocumentForDetails": "You can check the {1} document for details.", + "UIAndDatabaseIndependent": "ABP can work with any UI and any database provider supported by .NET. \n However, these UI and database providers are pre-integrated and well documented.", + "InstallAbpModules": "Install ABP Modules", + "DevelopYourSolution": "Develop Your Solution", + "DeployAnywhere": "Deploy Anywhere", + "InstallAbpModule_Description1": "ABP is a modular application development framework. Startup solution templates already come with the essential modules installed. \n But there are more application modules you may want to use in your solution.", + "InstallAbpModule_Description2": "Every module consists of a few NuGet and NPM packages and has an installation document. ABP Studio does most of the work automatically, then you manually configure or fine-tune the module based on its documentation.", + "DevelopYourSolution_Description1": "ABP’s infrastructure makes you focus on your own business code by automating the repetitive work and providing pre-built infrastructure and application features.", + "DevelopYourSolution_Description2": "In the following code block, you can see how the ABP seamlessly integrates into your code and automates the repetitive tasks for you.", + "DevelopYourSolution_Description3": "Even in this shortcode block, ABP does a lot of things for you.", + "DevelopYourSolution_Description4": "It provides base classes to apply conventions, like \n dependency injection. Generic \n repository services provide a convenient \n way to interact with the database. Declarative \n authorization works with a fine-tuned permission system.", + "DevelopYourSolution_Description5": "ABP completely automates \n unit of work (for database connection and transaction management), \n exception handling, \n validation\n and audit logging. It provides many more building blocks to simplify your daily development tasks and focus on your own code while creating production-ready \n applications.", + "DevelopYourSolution_Description6": "You can imagine how much that code block can be long and complicated if you would do it all manually.", + "SuiteCrudGenerationInFewSeconds": "In addition to hand coding your solution, you can create fully working advanced CRUD pages in a few minutes using the ABP Suite tooling. It generates the code into your solution, so you can fine-tune it based on your custom requirements.", + "DeployAnywhere_Description1": "At the end of the day, you have a pure .NET solution. You can deploy your solution to your own server, to a cloud platform, to Kubernetes or anywhere you want. You can deploy to as many servers as you want. ABP is a deployment environment agnostic tool.", + "ExpertiseAbpFramework": "Expertise ABP", + "ExpertiseAbpFramework_Description1": "Want to go beyond basics and get expertise with the ABP Platform?", + "FreeDownload": "Free Download", + "HavingTrouble": "Having Trouble?", + "HavingTrouble_Description1": "Do you have problems with developing your solution? We are here! Use the ABP Support platform \n or send an email to get help directly from the Core ABP team members.", + "WeAreHereToHelp_Description1": "You can browse our help topics or search in the frequently asked questions, \n or you can ask us a question by using the contact form.", + "OtherModules": "Other Modules", + "OtherModules_Description1": "Account, Audit Logging, Chat, CMS Kit, File Management, Forms, GDPR, Language Management and more...", + "HowItWorks_DatabaseProviderOptions": "Database provider options", + "SeeFAQ": "See FAQ", + "ReleaseLogs": "Release Logs", + "ReleaseLogs_Tag": "{0} Release Logs", + "ReleaseLogs_Pr": "Pull Request #{0} - {1}", + "NoLabels": "No labels", + "DoesTheSubscriptionRenewAutomatically": "Does the subscription renew automatically?", + "DoesTheSubscriptionRenewAutomaticallyExplanation": "ABP platform does not have an auto-renewal billing model. Therefore your subscription will not be automatically renewed at the end of your license period. If you want to continue to have the benefits of ABP platform, you need to manually renew it at the organization management page. If you have multiple organizations, click the \"Manage\" button at your expiring organization and then click the \"Extend Now\" button to renew your license. You may also want to take a look at the What Happens When My License Ends? section.", + "ExtraQuestionCreditsFaqTitle": "Can I purchase extra support question credits?", + "ExtraQuestionCreditsFaqExplanation": "Yes, you can. To buy extra question credits, send an e-mail to info@abp.io with your organization's name. Here's the price list for the extra question credits:
  • 50 questions pack $999
  • 25 questions pack $625
  • 15 questions pack $450
", + "AlreadyBetaTester": "You have already joined the beta tester program.", + "AbpStudio": "ABP Studio", + "AbpStudio_Description": "ABP Studio is still under development. You can fill out the form below to be one of the first users.", + "AbpStudio_Description1": "ABP Studio is a cross-platform desktop application for ABP developers.", + "AbpStudio_Description2": "It is well integrated to the ABP Framework and aims to provide a comfortable development environment for you by automating things, providing insights about your solution, making develop, run and deploy your solutions much easier.", + "AbpStudio_ComingSoon": "Coming Soon Planned beta release date: Q4 of 2023.", + "AbpStudio_PlannedPreviewDate": "Planned preview release date: Q4 of 2023.", + "BetaRequest": "Beta Request", + "CreateNewSolutions": "Create New Solutions", + "CreateNewSolutions_Description1": "You can create from simple applications to modular monolith or microservice solutions easily with a lot of options. You get a full production-ready base software solution for your business.", + "ArchitectYourSolutions": "Architect Your Solutions", + "ArchitectYourSolutions_Description1": "Build monolith-modular and microservice solution structures easier by creating modules or services and establishing relations between them. You can also install or uninstall pre-built application modules.", + "ExploreYourSolution": "Explore Your Solution", + "ExploreYourSolution_Description1": "ABP Studio shows a high-level view of components in your solution and the modules your solution depends on. You can explore entities, services, HTTP APIs and much more without needing to open your codebase.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze": "Run Multi-Application or Microservice Solutions in a Breeze", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description1": "Run one, multiple or all services with a single click. In this way, it is very easy to stop a service, run it in Visual Studio to test or debug.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description2": "See a list of services, view real-time HTTP request and exception counts for each service.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description3": "See all details of all HTTP requests coming to any service.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description4": "Explore exception details as real-time in any service, easily filter and search.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description5": "Show the application logs, filter by log level or search by text.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description6": "Browse the UI of your application without leaving the solution runner.", + "IntegrateToYourKubernetesCluster": "Integrate with your Kubernetes Cluster", + "IntegrateToYourKubernetesCluster_Description1": "Connect your local development environment to a local or remote Kubernetes cluster, where that cluster already runs your microservice solution.", + "IntegrateToYourKubernetesCluster_Description2": "Access any service in Kubernetes with their service name as DNS, just like they are running in your local computer.", + "IntegrateToYourKubernetesCluster_Description3": "Intercept any service in that cluster, so all the traffic to the intercepted service is automatically redirected to your service that is running in your local machine. When your service needs to use any service in Kubernetes, the traffic is redirected back to the cluster, just like your local service is running inside the Kubernetes.", + "GetInformed": "Get Informed", + "Studio_GetInformed_Description1": "Leave your contact information to get informed and try it first when ABP Studio has been launched.", + "Studio_GetInformed_Description2": "Planned preview release date: Q3 of 2023.", + "ThankYou!": "Thank you!", + "SendBetaRequest": "Send Beta Request", + "YouJoinedTheBetaTesterProgram": "You joined the ABP Studio beta tester program.", + "PricingExplanation2": "30 days money back guarantee — Learn more", + "MoneyBackGuaranteeText": "* 30-day money-back guarantee on all licenses! 100% refund on Team, 60% refund on Business and Enterprise licenses within 30 days.", + "MobileApplicationStartupTemplates": "Mobile Application Startup Templates", + "MobileApplicationStartupTemplates_Description1": "Integrated mobile application startup templates for your ABP projects.", + "CreatePowerfulLineOfBusinessApplicationsUsingABPMobileStartupTemplates": "Build Powerful Line of Business Applications using ABP Mobile Startup Templates", + "CreatePowerfulLineOfBusinessApplicationsUsingABPMobileStartupTemplates_Description1": "ABP provides two mobile application startup templates implemented with React Native and .NET MAUI. When you create your new ABP-based solution, you will also have basic startup applications connected to your backend APIs.", + "CreatePowerfulLineOfBusinessApplicationsUsingABPMobileStartupTemplates_Description2": "The application has a pre-built authentication token cycle, multi-language support, multi-tenancy support, login, forgot password, profile management and a user management page. You can add your own business logic and customize it based on your requirements.", + "TwoFrameworkOptions": "Two Framework Options", + "TwoFrameworkOptions_Description": "ABP provides both React Native and .NET MAUI mobile startup templates. This way, you can choose the one that best suits your needs. Both apps reuse code at the highest rate between iOS and Android platforms.", + "PreIntegratedToYourBackend": "Pre-integrated to Your Backend", + "PreIntegratedToYourBackend_Description": "ABP Mobile applications are pre-integrated to your backend APIs. It gets a valid authentication token from the server and makes authenticated requests.", + "MultiLanguage": "Multi-language", + "MultiLanguage_Description": "It already supports more than 10 languages out of the box. You can also add next languages.", + "Arabic": "Arabic", + "Czech": "Czech", + "English": "English", + "Hungarian": "Hungarian", + "Finnish": "Finnish", + "French": "French", + "Hindi": "Hindi", + "Portuguese": "Portuguese", + "Italian": "Italian", + "Russian": "Russian", + "Slovak": "Slovak", + "Turkish": "Turkish", + "EngageAndRetainYourCustomersWithABPMobileApps": "Engage and Retain Your Customers with ABP Mobile Apps", + "EngageAndRetainYourCustomersWithABPMobileApps_Description1": "Your customers want to manage their products and subscriptions from anywhere, anytime. That requires organizations to create mobile apps that enable customers to fulfill their requests quickly and seamlessly.", + "EngageAndRetainYourCustomersWithABPMobileApps_Description2": "With ABP Mobile apps, you can create high-quality native mobile apps for Android and iOS… Using a single codebase and without compromising on security, quality, or scalability.", + "OneCodeBaseMultipleDevices": "One Code-Base Multiple Devices", + "OneCodeBaseMultipleDevices_Description": "ABP Mobile applications are cross-platform. They are ready to be installed and run on iOS and Android devices, and they adapt to different form factors using a single code base. Developers only need to create the UI and front-end code once, there is no need to adapt the code for each device you want to support.", + "ComesWithTheSourceCode": "Comes with the Source-Code", + "ComesWithTheSourceCode_Description": "The mobile apps are provided with the source-code. Easily customize the UX/UI of your apps to meet branding guidelines.", + "Purchase_OneYearPrice": "1 Year Price", + "Purchase_DeveloperSeatCount": "Developer Seat Count", + "Purchase_DevelopersAlreadyIncluded": "{0} developers already included", + "1Year": "1 year", + "{0}Years": "{0} years", + "1YearLicense": "1 Year License", + "{0}YearsLicense": "{0} Years License", + "1AdditionalDeveloper": "1 Additional Developer", + "{0}AdditionalDevelopers": "{0} Additional Developers", + "Discount": "Discount ({0}%)", + "TrainingPack": "Training pack", + "TrainingPackDiscount": "Training pack discount", + "Purchase_OnboardingTraining_Description": "This live training is valid for a class of 8 students and this discount is only valid when purchased with the new license. Learn more ", + "Purchase_Save": "{0}% Save {1}", + "RemoveBasket": "Remove from basket", + "WhyABPIOPlatform?": "Why ABP Platform?", + "DocumentAim": "This document aims to answer the big question:", + "DocumentAim_Description": "\"Why should you use the ABP Platform instead of creating a new solution from scratch?\"", + "DocumentAim_Description2": "The document introduces the challenges of building a modern software solution and explains how ABP addresses these challenges.", + "CreatingANewSolution": "Creating a New Solution", + "CreatingANewSolution_Description": "When you need to start a new solution, there are a lot of questions you need to ask yourself, and you should spend a lot of time before starting to write your very first business code.", + "CreatingAnEmptySolution": "Creating an Empty Solution", + "THEPROBLEM": "THE PROBLEM", + "CreatingAnEmptySolution_THEPROBLEM_Description": "Even creating an almost-empty solution is challenging;", + "CreatingAnEmptySolution_THEPROBLEM_Description2": "How do you organize your code-base across projects?", + "CreatingAnEmptySolution_THEPROBLEM_Description3": "What are the layers and how do they interact?", + "CreatingAnEmptySolution_THEPROBLEM_Description4": "How do you integrate with 3rd-party libraries?", + "CreatingAnEmptySolution_THEPROBLEM_Description5": "How to set up automated tests?", + "ABPSOLUTION": "ABP SOLUTION", + "CreatingAnEmptySolution_ABPSOLUTION_Description": "ABP provides a well-architected, layered and production-ready startup solution based on the Domain Driven Design principles. The solution also includes a pre-configured unit and integration test projects for each layer.", + "CommonLibraries": "Common Libraries", + "CommonLibraries_THEPROBLEM_Description": "Which libraries should you use to implement common requirements? The software development ecosystem is highly dynamic, making it challenging to keep up with the latest tools, libraries, trends, and approaches.", + "CommonLibraries_ABPSOLUTION_Description": "ABP pre-integrates popular, mature, and up-to-date libraries into the solution. You don't need to spend time integrating them or making them communicate with each other. They work properly out of the box.", + "UITheme&Layout": "UI Theme & Layout", + "UITheme&Layout_THEPROBLEM_Description": "When addressing UI concerns, a range of challenges surfaces. These include establishing the groundwork for a responsive, contemporary, and adaptable UI kit with a consistent appearance and a host of features like navigation menus, headers, toolbars, footers, widgets, and more.", + "UITheme&Layout_THEPROBLEM_Description2": "Even if you opt for a pre-designed theme, seamlessly integrating it into your project could demand days of development. An additional hurdle lies in upgrading such themes. Frequently, the theme's HTML/CSS structure becomes intertwined with your UI code, rendering future theme changes or upgrades intricate tasks. This interweaving of code and design complicates the flexibility of making adjustments down the line.", + "UITheme&Layout_ABPSOLUTION_Description": "ABP offers a distinctive theming system that liberates your UI code from theme constraints. Themes exist in isolation, packaged as NuGet or NPM packages, making theme installation or upgrades a matter of minutes. While you retain the option to develop your custom theme or integrate an existing one, ABP presents a collection of polished and contemporary themes.", + "UITheme&Layout_ABPSOLUTION_Description2": "Additionally, there are UI component providers like Telerik and DevExpress. However, these providers primarily furnish individual components, placing the onus on you to establish your layout system. When working within ABP-based projects, you can seamlessly incorporate these libraries, similar to how you would in any other project.", + "TestInfrastructure_THEPROBLEM_Description": "Establishing a robust testing environment is a time-consuming endeavor. It involves setting up dedicated test projects within your solution, carefully selecting the necessary tools, creating service and database mocks, crafting essential base classes and utility services to minimize redundant code across tests, and addressing various related tasks.", + "TestInfrastructure_ABPSOLUTION_Description": "ABP Startup Templates arrive pre-equipped with configured test projects, streamlining the process for you. This means that from day one, you can readily commence writing your initial unit or integration test code without delay.", + "CodingStandards&Training": "Coding Standards & Training", + "CodingStandards&Training_THEPROBLEM_Description": "After you've set up the solution for development, you usually have to teach the developers how the system works and how to build it using the same agreed-upon methods. Even if you give them training, keeping the documentation up-to-date can be difficult. As time goes on, each developer might write code in their own way, causing the rules for writing code to become different from each other.", + "CodingStandards&Training_ABPSOLUTION_Description": "The ABP solution is already neatly organized and has clear explanations. Step-by-step tutorials and guides show you exactly how to work on an ABP project.", + "KeepingYourSolutionUpToDate": "Keeping Your Solution Up to Date", + "KeepingYourSolutionUpToDate_THEPROBLEM_Description": "After you start your development, you must keep track of the new versions of the libraries you use for upgrades & patches.", + "KeepingYourSolutionUpToDate_ABPSOLUTION_Description": "We regularly update all packages to the latest versions and test them before the stable release. When you update your ABP based project, all its dependencies are upgraded to edge technology.", + "KeepingYourSolutionUpToDate_ABPSOLUTION_Description2": "Abp update
CLI command automatically discovers and upgrades all ABP-dependant NuGet and NPM packages in a solution. With ABP, it is easier to stay with the latest versions.", + "DRY": "Don't Repeat Yourself!", + "DRY_Description": "Creating a base solution takes significant time and requires good architectural experience. However, this is just the beginning! As you start developing, you will likely have to write lots of repetitive code; that would be great if all this could be handled automatically.", + "DRY_Description2": "ABP automates and simplifies repeating code as much as possible by following the convention over configuration principle. However, it doesn't restrict you when you need to switch to manual gear. The control is always in your hands.", + "Authentication": "Authentication", + "Authentication_THEPROBLEM_Description": "Single Sign On, Active Directory / LDAP Integration, OpenIddict integration, social logins, two-factor authentication, forgot/reset password, email activation, new user registration, password complexity control, locking account on failed attempts, showing failed login attempts... etc. We know that all these generic requirements are familiar to you. You are not alone!", + "Authentication_ABPSOLUTION_Description": "ABP provide all these standard stuff pre-implemented for you as a re-usable account module. You just enable and configure what you need.", + "CrossCuttingConcerns_THEPROBLEM_Description": "Cross-Cutting Concerns are the fundamental repeating logic that should be implemented for each use case. Some examples;", + "CrossCuttingConcerns_THEPROBLEM_Description2": "Starting transactions, committing on success and rollback on errors.", + "CrossCuttingConcerns_THEPROBLEM_Description3": "Handling and reporting exceptions, returning a proper error response to the clients and handling error cases on the client side.", + "CrossCuttingConcerns_THEPROBLEM_Description4": "Implementing authorization and validation, returning proper responses and handling these on the client side.", + "CrossCuttingConcerns_ABPSOLUTION_Description": "ABP automates or simplifies all the common cross-cutting concerns. You only write code that matters for your business, and ABP handles the rest by conventions.", + "ArchitecturalInfrastructure": "Architectural Infrastructure", + "ArchitecturalInfrastructure_THEPROBLEM_Description": "You typically need to build infrastructure to implement your architecture properly. For example, you generally implement the Repository pattern. You define some base classes to simplify and standardize to create entities, services, controllers and other objects.", + "ArchitecturalInfrastructure_ABPSOLUTION_Description": "ABP provides all these and more out of the box. It is mature and well-documented.", + "EnterpriseApplicationRequirements": "Enterprise Application Requirements", + "EnterpriseApplicationRequirements_THEPROBLEM_Description": "There are a lot of requirements you repeatedly implement in every business application;", + "EnterpriseApplicationRequirements_THEPROBLEM_Description2": "Detailed permission system and managing permissions on the UI based on roles and users.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description3": "Writing audit logs and entity histories to track when a user modifies a database record.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description4": "Make your entities soft delete, so they are marked as deleted instead of physically deleting from the database and automatically filtering deleted entities on your queries.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description5": "Creating abstractions and wrappers to consume your backend APIs from the frontend code.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description6": "Enqueuing and executing background jobs.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description7": "Handling multiple time zones in a global system.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description8": "Sharing validation, localization, authorization logic between server and client.", + "EnterpriseApplicationRequirements_ABPSOLUTION_Description": "ABP provides an infrastructure to implement such requirements easily. Again, you don't spend your valuable time to re-implement all these again and again.", + "GeneratingInitialCode&Tooling": "Generating Initial Code & Tooling", + "GeneratingInitialCode&Tooling_THEPROBLEM_Description": "You will build many similar pages in a typical web application. Most of them will perform similar CRUD operations. It is very tedious and also error-prone to repeatedly create such pages.", + "GeneratingInitialCode&Tooling_ABPSOLUTION_Description": "ABP Suite can generate a full-stack CRUD page for your entities in seconds. The generated code is layered and clean. All the standard validation and authorization requirements are implemented. Plus, unit test classes are generated. Once you get a fully running page, you can modify it according to your business requirements.", + "IntegratingTo3rdPartyLibrariesAndSystems": "Integrating to 3rd-Party Libraries and Systems", + "IntegratingTo3rdPartyLibrariesAndSystems_THEPROBLEM_Description": "Most libraries are designed as low level, and you typically do some work to integrate them properly without repeating the same integration and configuration code everywhere in your solution. For example, assume you must use RabbitMQ to implement your distributed event bus. All you want to do is; send a message to a queue and handle the incoming messages. But you need to understand messaging patterns, queues and exchange details. To write efficient code, you must create a pool to manage connections, clients and channels. You also must deal with exceptions, ACK messages, re-connecting to RabbitMQ on failures and more.", + "IntegratingTo3rdPartyLibrariesAndSystems_ABPSOLUTION_Description": "For example, ABP's RabbitMQ Distributed Event Bus integration abstracts all these details. You send and receive messages without the hustle and bustle. Do you need to write low-level code? No problem, you can always do that. ABP doesn't restrict you when you need to use low-level features of the library you are using.", + "WhyNotBuildYourOwnFramework?": "Why Not Build Your Own Framework?", + "WhyNotBuildYourOwnFramework_THEPROBLEM_Description": "All the infrastructure, even in the simplest way, takes a lot of time to build, maintain and document. It gets bigger over time, and it becomes hard to maintain it in your solution. Separating these into a re-usable project is the starting point for building your own internal framework.", + "WhyNotBuildYourOwnFramework_THEPROBLEM_Description2": "Building, documenting, training and maintaining an internal framework is really hard. If you don't have an experienced, dedicated framework team, your internal framework rapidly becomes an undocumented legacy code that no one can understand and maintain anymore. On the other hand, these frameworks are generally developed by one or two developers in the team. And these fellows are becoming a knowledge silo. It is good for them but bad for the company because they are the project's single point of failure -SPOF-. Once they leave the company, the project dramatically goes down.", + "WhyNotBuildYourOwnFramework_ABPSOLUTION_Description": "ABP is a community-driven, well-documented, mature and generic application framework. A team of highly experienced developers are working hard to keep it up-to-date, easy to understand and comfortable to use. Using such a stable framework makes you focus on your own business code and get help with the framework from experts whenever you need it.", + "ArchitecturalInfrastructure_Description": "SaaS applications, modular or microservice systems are most used enterprise software models. Building such systems not only requires a good understanding and experience but also requires a strong software infrastructure. Otherwise, you will find yourself spending a great effort to support these architectural details in your codebase.", + "Modularity_THEPROBLEM_Description": "Building a truly modular system is not easy! All the aspects of the system (database, entities, APIs, UI pages/components) can be split into modules, and each module can be re-usable without others. The plain ASP.NET Core doesn't provide such a modular architecture. If you need it, you should think about it from scratch.", + "Modularity_ABPSOLUTION_Description": "The ABP is born to be a modular application development structure. Every feature in the framework is developed to be compatible with modularity. Documentation and guides explain how to develop re-usable modules in a standard way.", + "SaaSMultiTenancy": "SaaS / Multi-tenancy", + "SaaSMultiTenancy_THEPROBLEM_Description": "Multi-tenancy is a common way to implement SaaS systems. However, implementing a consistent multi-tenant infrastructure may become complicated.", + "SaaSMultiTenancy_ABPSOLUTION_Description": "ABP provides a complete multi-tenant infrastructure and abstract complexity from your business code. Your application code will be mostly multi-tenancy aware, while the ABP automatically isolates the database, cache and other details of the tenants from each other. It supports single database, per tenant database and hybrid approaches. It properly configures the libraries like Microsoft Identity and OpenIddict, which are not normally multi-tenancy compatible.", + "Microservices": "Microservices", + "Microservices_THEPROBLEM_Description": "Building a microservice system requires many infrastructure details: Authenticating and authorizing applications and microservices and implementing asynchronous messaging and synchronous (Rest/GRPC) communication patterns between microservices are the most fundamental issues.", + "Microservices_ABPSOLUTION_Description": "The ABP provides services, guides, and samples to help you implement your microservice solution using the industry standard tools.", + "Microservices_ABPSOLUTION_Description2": "ABP's commercial licenses even goes one step further and provides a complete startup template to kick-start your microservice solution.", + "PreBuiltModules": "Pre-Built Modules", + "PreBuiltModules_THEPROBLEM_Description": "All of us have similar but slightly different business requirements. However, we all should re-invent the wheel since no one's code can directly work in our solution. They are all embedded parts of a larger solution.", + "PreBuiltModules_ABPSOLUTION_Description": "ABP modules provides a lot of re-usable application modules like payment, chat, file management, audit log reporting... etc. All of these modules are easily installed into your solution and directly work. We are constantly adding more modules.", + "PreBuiltModules_ABPSOLUTION_Description2": "All modules are designed as customizable for your business requirements. If you need complete control, you can download the full source code of any module and completely customize based on your specific business requirements.", + "ABPCommunity": "ABP Community", + "ABPCommunity_Description": "Finally, Being in a big community where everyone follows similar coding styles and principles and shares a common infrastructure brings power when you have troubles or need help with design decisions. Since we write code similarly, we can help each other much better. ABP is a community-backed project with more than 10K stars on GitHub.", + "ABPCommunity_Description2": "It is easy to share code or even re-usable libraries between ABP developers. A code snippet that works for you will also work for others. There are a lot of samples and tutorials that you can directly implement for your application.", + "ABPCommunity_Description3": "When you hire a developer who worked before with the ABP architecture will immediately understand your solution and start development in a very short time.", + "WhyAbpIo_Page_Title": "Why ABP Platform?", + "AbpStudio_Page_Title": "ABP Studio | Cross-Platform Desktop Application", + "AbpStudio_Page_Description": "ABP Studio is a cross-platform desktop application for ABP developers. It's the easiest way to get started with the ABP Platform.", + "CampaignInfo": "Buy a new license or renew your existing license and get an additional 2 months at no additional cost! This offer is valid for all license plans. Ensure you take advantage of this limited-time promotion to expand your access to premium features and upgrades.", + "HurryUpLastDay": "Hurry Up! Last Day: {0}", + "CreatingCRUDPagesWithABPSuite": "Creating CRUD pages with ABP Suite", + "MultipleYearDiscount": "Multiple Year Discount", + "CampaignDiscountText": "New Platform Discount", + "CampaignDiscountName": "New Platform", + "CampaignName:BlackFriday": "Black Friday", + "MultipleOrganizationInfo": "See All Your Organizations", + "AbpStudioBetaAccessInfoTitle": "ABP Studio Beta Access", + "AbpStudioBetaAccessInfoText": "We're thrilled to share with you the beta version of ABP Studio! This release marks a significant milestone in our development journey, and we're eager to gather your feedback to make the application even better.", + "YouAreNotAuthorizedToDownloadStudio": "You are not authorized to download ABP Studio.", + "OrganizationHasNoDefaultCreditCard": "Your organization has no default credit card. Please add a credit card to your organization.", + "YouAreNotAuthorizedToPayThisPaymentRequest": "You are not authorized to pay this payment request.", + "YouAreNotAuthorizedToCreateBillingInfoForThisPaymentRequest": "You are not authorized to create billing info for this payment request.", + "OrganizationNotFound": "Organization not found.", + "CannotDeleteDefaultCardBecauseAutoRenewalEnabled": "You cannot delete this card at the moment because the Auto-Renewal feature is enabled. To delete the card, first disable Auto-Renewal.", + "AreYouSureWantToDeleteThisCard": "Are you sure you want to delete this card?", + "AreYouSureWantToSetThisCardAsDefault": "Are you sure you want to set this card as default?", + "OrganizationBillingInfoIsNotSuitableForIyzicoPayment": "Your organization's billing info is not suitable for iyzico payment.", + "AutomaticRenewal": "Automatic Renewal", + "AutomaticRenewal_Description": "Renewing a license before it expires lets you get a discount of up to %40. The auto-renewal process lets you renew your license without losing this discount, and your development will never interrupt. Auto-renewal is only available for credit card payment. You can disable auto-renewal at any time by accessing your Organization Management page. ABP does not save your credit card information, but our global payment gateways do secure savings.", + "CardNotFoundMessage": "Do you want to add a new card?", + "CardNotFoundTitle": "Card Not Found", + "AutoRenewalEnabled": "Auto Renewal Enabled", + "AutoRenewalDisabled": "Auto Renewal Disabled", + "PaymentRequestIdIsNotProvided": "Payment request id is not provided.", + "PaymentFailedInfo": "Sorry, payment failed! This could be due to insufficient funds, invalid credit card numbers or invalid pin", + "UsedPayment": "This payment has been already used", + "ManageLicense": "Manage License", + "AbpPlatformLeptonXTheme": "LeptonX Theme for Your Admin Dashboard by ABP Platform", + "NoActiveLicence": "You are not eligible for this action! You have no active license.", + "ABPStudioBetaTester": "To be able to submit your request, you must sign in", + "ABPStudioBetaAccess": "ABP Studio Beta Access", + "VisitABPStudio": "Visit ABP Studio", + "EditBillingInformation": "Edit Billing Information", + "Organization": "Organization", + "E-Book": "E-Book", + "CreditCards": "Credit Cards", + "BillingInformation": "Billing Information", + "AddNewCreditCard": "Add New Credit Card", + "MyOrganizations_LearnMorePlan": "Learn more about plans on the pricing page", + "AutoLicenseRenewalIsNotEnabled": "Auto license renewal is not enabled.", + "SetAsDefaultPaymentMethod": "Set as default payment method", + "{0}PerAdditionalDeveloper": "${0} per additional developer", + "CardAlias": "Card Alias (Optional)", + "AbpDoesNotSaveYourPaymentDetails_Description": "The payment data will be saved in {2} security vaults and you can remove stored data anytime. Enabling auto-renewal ensures that your ABP subscription will automatically renew prior to expiration, providing a valid credit card. Disabling auto-renewal means you will have to renew your subscription manually. To continue your project development without interruption, we suggest you enable the Auto-Renewal option.", + "AddBillingInformation": "Add Billing Information", + "YouHaveNoCardsSaved": "Card not saved yet.", + "CreateCreditCardModal_BillingDetails_Description": "You must save your billing details to be able to add your credit card.", + "TaxNo": "Tax No", + "CardNumber": "Card Number", + "NameOnCard": "Name on Card", + "BillingDetails": "Billing Details", + "ThereIsNoDeveloper": "No developer added.", + "CardDetails": "Debit/Credit Card Details", + "YearCantBeNull": "Year field cannot be empty.", + "CardHolderName": "Name on Card", + "ExpireDate": "Expiration Date", + "DisplayName:ExpireDate": "Expiration Date", + "DisplayName:CardHolderName": "Name on Card", + "CreditCardNumberLengthWarning": "Invalid card number", + "ExpirationWarning": "Invalid expiration date", + "CreateCreditCardModal_Description": "When saving your debit/credit card, a temporary $1 charge will be authorized for verification and promptly refunded.", + "ReturnOnInvestmentTitle": "Return on Investment", + "ReduceYourDevelopmentCostsDescription": "Reduce your development costs by more than 50% with the ABP Platform.", + "SettingUpTheArchitectureTitle": "Setting up the Architecture", + "DoingEverythingFromScratch": "Doing everything from scratch", + "SettingUpTheArchitecture_Description1": "Organize code base and solution structure", + "SettingUpTheArchitecture_Description2": "Determine, install and configure essential 3rd-party libraries", + "SettingUpTheArchitecture_Description3": "Setup automated integration and unit test infrastructure", + "SettingUpTheArchitecture_Description4": "Determine and document code standards, train the development team", + "UsingTheABPFramework": "Using the ABP Platform", + "UseABPSettingUpTheArchitecture_Description": "Use ABP's startup solution templates", + "ReduceCostsWithABP": "Reduce Costs with ABP by", + "ReduceCostsBy": "80% to 100%", + "DesigningTheUserInterfaceTitle": "Designing the User Interface", + "DesigningTheUserInterface_Description1": "Create or buy a UI theme", + "DesigningTheUserInterface_Description2": "Adapt the UI theme to the solution", + "DesigningTheUserInterface_Description3": "Build the essential UI parts (layout, menu, header, footer with responsive design)", + "DesigningTheUserInterface_Description4": "Ensure the design consistency across application pages", + "UseABPDesigningTheUserInterface_Description": "Use ABP's LeptonX UI Theme", + "DevelopingApplicationFeaturesTitle": "Developing the Application Features", + "DevelopingApplicationFeatures_Description1": "Develop your own business logic", + "DevelopingApplicationFeatures_Description2": "Develop every page one by one", + "DevelopingApplicationFeatures_Description3": "Develop common business modules yourself", + "DevelopingApplicationFeatures_Description4": "Develop the authentication system (single sign on, 2 factor auth, social logins, reset password, email activation, etc...)", + "DevelopingApplicationFeatures_Description5": "Apply cross-cutting concerns in every use case (DB transactions, authorization, validation, exception handling, etc...)", + "DevelopingApplicationFeatures_Description6": "Develop common base classes and utility services", + "DevelopingApplicationFeatures_Description7": "Develop common non-business requirements (audit logging, soft-delete, background jobs, permission system, etc.)", + "UseABPDevelopingApplicationFeatures_Description1": "Develop your own business logic", + "UseABPDevelopingApplicationFeatures_Description2": "Use ABP Suite to automatically generate CRUD-like pages", + "UseABPDevelopingApplicationFeatures_Description3": "Directly use ABP's pre-built common application modules and customize based on your unique requirements", + "ReduceCostsBy_2": "40% to 60%", + "WhyABPIoPlatform": "Why ABP Platform?", + "WhyShouldYouUsetheABPIOPlatform": "Why should you use the ABP Platform instead of creating a new solution from scratch?", + "ExploreMore": "Explore More", + "DocumentIntroducesDescription": "If you want to learn more details about why should you use the ABP Platform instead of creating a new solution from scratch, read the following document. ", + "ReturnOnInvestmentPageAbout": "This page covers the fundamental steps of developing a software solution and explains how the ABP Platform reduces your development costs at each step.", + "LearnMore": "Learn More", + "ReturnOfInvestment": "Return of Investment", + "ReturnOnInvestment_Description": "Learn about the return on investment when using ABP, highlighting cost-effectiveness and efficiency.", + "PricingDiscount": "Save", + "PricingTeamTitle": "Team", + "PricingBusinessTitle": "Business", + "PricingEnterpriseTitle": "Enterprise", + "SpecialDiscount": "Special Discount", + "YourOrganizationOverview": "Your Organization Overview", + "TrainingDetailsHeaderInfo_TrainingHourSingular": "{0} hour", + "ContactPageError": "Please send your message via email to info@abp.io
Here's what you wrote :", + "GoBack": "Go back", + "HereWhatYouWrote": "Here's what you wrote :", + "Sales": "Sales", + "LicensingPricing": "Licensing / Pricing", + "TrialDemo": "Trial / Demo", + "TrainingOnboarding": "Training / Onboarding", + "Resellers": "Resellers", + "Reselling": "Reselling", + "Others": "Others", + "Characters": "Characters", + "Topic": "Topic", + "SendUsEmail": "Send us email", + "ErrorExceptionMessage": "An error occurred while processing your request", + "WatchTakeCodeGeneration": "Watch the \"Explore the Potential of Code Generation: ABP Suite\" Video!", + "StartupTemplatesUser": "User", + "StartupSingleSignOn": "Single Sign On", + "Application{0}": "Application {0}", + "PreBuiltApplicationModulesTitle": "Pre-Built Application Modules", + "RegisterDemo": "Register", + "TrainingDescription": "Enroll in ABP trainings to improve your skills and knowledge, keeping up with the latest developments.", + "PurchaseDevelopers": "developers", + "LinkExpiredMessage": "The payment link has expired! Contact us at sales@volosoft.com to update the link or click here to navigate to the contact page.", + "YourAccountDisabled": "Your user account is disabled!", + "WhyChooseAbpTitle": "Why Choose ABP?", + "WhyChooseAbpDescription": "Discover ABP Commercial benefits: modular architecture, microservice ready modules, productivity tools and robust features for modern line of business web apps.", + "AbpIo_Modern_Title": "ABP.IO - Modern ASP.NET Core Web Application Platform", + "AbpIo_Modern_Description": "ABP Platform provides an open-source framework on top of ASP.NET Core with Angular, Blazor, and MVC UI options to create scalable line of business web apps.", + "My_Organizations_Page_Title": "My Organizations", + "My_Organizations_Page_Description": "View your ABP Platform organizations to manage your developers, license renewals and upgrade.", + "Members_Page_Title": "{0} - Community Member", + "Members_Page_Description": "{0} is a member of the ABP Community. Check out the contributions and benefit this experience.", + "Framework_Page_Title": "ABP Framework", + "Framework_Page_Description": "ABP Framework is the most straightforward way to kick-start your project! Learn about ABP Framework's robust features.", + "CLI_Page_Title": "ABP CLI", + "CLI_Page_Description": "Use the ABP CLI dotnet global tool to create a new ABP project, update it, manage packages and access the source-code of ABP modules.", + "Mobile_Page_Title": "ABP Mobile Client", + "Mobile_Page_Description": "Develop powerful mobile applications with ABP's mobile development features, ensuring cross-platform compatibility.", + "ReleasesPageTitle": "ABP Commercial Releases", + "ReleasesPageDescription": "Stay updated with the latest features and updates in ABP Commercial Releases, ensuring your applications are cutting-edge.", + "GetStartedPageDescription": "Begin your journey with ABP by following our step-by-step guide. Learn how to set up your development environment, explore key features, start building apps", + "Community_Page_Title": "ABP Community", + "Community_Page_Description": "Connect and collaborate with other developers in the ABP Community, sharing knowledge and resources.", + "Services_Page_Title": "Additional Services", + "Services_Page_Description": "Get professional development and support services from the ABP Team or its solution partners, ensuring your project's success.", + "Contributors_Page_Title": "Contributors of ABP", + "Contributors_Page_Description": "Meet the contributors of the ABP Community, learning about their roles and contributions to the framework.", + "PackagesDetailTitle": "{0} - Package Details", + "PackagesDetailDescription": "Get detailed information about the {0} package, including features and usage.", + "Raffle_Page_Title": "Raffle - {0}", + "Raffle_Page_Description": "Participate in ABP raffles and stand a chance to win exciting prizes, engaging with the ABP Community.", + "Docs_Page_Title": "ABP Documentation", + "Docs_Page_Description": "Access comprehensive guides and API references in the ABP Documentation, aiding in development and troubleshooting.", + "Videos_Page_Title": "{0} - Video Post", + "AskQuestionsOnSupport": "You can ask questions on ABP Support.", + "MicroserviceApplicationExplanation1": "Creates a distributed solution.", + "MicroserviceApplicationExplanation2": "Recommended for large teams to create complex and scalable systems.", + "CancellationSupport": "Cancellation Support", + "CancellationSupportExplanation": "ABP allows for the graceful termination of asynchronous operations in applications, ensuring proper resource cleanup and responsive user experience.", + "DistributedLocking": "Distributed Locking", + "DistributedLockingExplanation": "ABP's distributed locking system ensures that resources are accessed in a mutually exclusive manner across different nodes in a distributed environment, preventing concurrent conflicts and ensuring data consistency.", + "EncryptionDecryptionServices": "Encryption & Decryption Services", + "EncryptionDecryptionServicesExplanation": "ABP provides string encryption feature that allows to Encrypt and Decrypt strings.", + "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.", + "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", + "Qa:QuestionPageTitle": "Support" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/es.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/es.json index 2c647327ef..20f77e2323 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/es.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/es.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "Aplicación web progresiva", "Preview": "Avance", "CreateANewSolution": "Crear una nueva solución", - "ABPFrameworkFeatures": "Características del marco ABP", + "FrameworkFeatures": "Características del marco ABP", "Commercial": "Comercial", "ThirdPartyTools": "Herramientas de terceros", "Back": "Atrás", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fi.json index 4a63cc389d..e189d7fd3e 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fi.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "Progressiivinen verkkosovellus", "Preview": "Esikatsele", "CreateANewSolution": "Luo uusi ratkaisu", - "ABPFrameworkFeatures": "ABP-kehyksen Ominaisuudet", + "FrameworkFeatures": "ABP-kehyksen Ominaisuudet", "Commercial": "Kaupallinen", "ThirdPartyTools": "Kolmannen osapuolen työkalut", "Back": "Takaisin", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fr.json index d8278d2aea..918b66b3db 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fr.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "Application Web progressive", "Preview": "Aperçu", "CreateANewSolution": "Créer une nouvelle solution", - "ABPFrameworkFeatures": "Fonctionnalités du cadre ABP", + "FrameworkFeatures": "Fonctionnalités du cadre ABP", "Commercial": "Commercial", "ThirdPartyTools": "Outils tiers", "Back": "Dos", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hi.json index 12113024fa..e421c2e5d1 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hi.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "प्रगतिशील वेब अनुप्रयोग", "Preview": "पूर्व दर्शन", "CreateANewSolution": "एक नया समाधान बनाएं", - "ABPFrameworkFeatures": "एबीपी फ्रेमवर्क विशेषताएं", + "FrameworkFeatures": "एबीपी फ्रेमवर्क विशेषताएं", "Commercial": "व्यावसायिक", "ThirdPartyTools": "तृतीय पक्ष उपकरण", "Back": "पीछे", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hr.json index 96981e81a3..d54e9fd481 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hr.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "Progresivna web aplikacija", "Preview": "Pregled", "CreateANewSolution": "Napravite novo rješenje", - "ABPFrameworkFeatures": "Značajke ABP okvira", + "FrameworkFeatures": "Značajke ABP okvira", "Commercial": "Komercijalni", "ThirdPartyTools": "Alati trećih strana", "Back": "leđa", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hu.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hu.json index b7b8eb602c..60fdc4eb92 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hu.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hu.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "Progresszív webes alkalmazás", "Preview": "Előnézet", "CreateANewSolution": "Hozzon létre egy új megoldást", - "ABPFrameworkFeatures": "Az ABP keretrendszer jellemzői", + "FrameworkFeatures": "Az ABP keretrendszer jellemzői", "Commercial": "Kereskedelmi", "ThirdPartyTools": "Harmadik féltől származó eszközök", "Back": "Vissza", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/is.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/is.json index 562f09c178..e6b27aeae8 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/is.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/is.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "Framsækið vefforrit", "Preview": "Forskoðun", "CreateANewSolution": "Búðu til nýja lausn", - "ABPFrameworkFeatures": "ABP Framework Eiginleikar", + "FrameworkFeatures": "ABP Framework Eiginleikar", "Commercial": "Auglýsing", "ThirdPartyTools": "Verkfæri þriðja aðila", "Back": "Til baka", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/it.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/it.json index 4201960c15..e13fa64406 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/it.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/it.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "Applicazione Web progressiva", "Preview": "Anteprima", "CreateANewSolution": "Creare una nuova soluzione", - "ABPFrameworkFeatures": "Caratteristiche della struttura ABP", + "FrameworkFeatures": "Caratteristiche della struttura ABP", "Commercial": "Commerciale", "ThirdPartyTools": "Strumenti di terze parti", "Back": "Indietro", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/nl.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/nl.json index 9a49e6ab83..47469d7a90 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/nl.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/nl.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "Progressieve webapplicatie", "Preview": "Voorbeeld", "CreateANewSolution": "Creëer een nieuwe oplossing", - "ABPFrameworkFeatures": "ABP Framework -functies", + "FrameworkFeatures": "ABP Framework -functies", "Commercial": "Reclame", "ThirdPartyTools": "Hulpmiddelen van derden", "Back": "Rug", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pl-PL.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pl-PL.json index 04af61c847..b2c9c3acf2 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pl-PL.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pl-PL.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "Progresywna aplikacja internetowa", "Preview": "Zapowiedź", "CreateANewSolution": "Utwórz nowe rozwiązanie", - "ABPFrameworkFeatures": "Funkcje struktury ABP", + "FrameworkFeatures": "Funkcje struktury ABP", "Commercial": "Handlowy", "ThirdPartyTools": "Narzędzia stron trzecich", "Back": "Z powrotem", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pt-BR.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pt-BR.json index 02ade27a61..6ababfeac1 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pt-BR.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pt-BR.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "Aplicativo Web Progressivo", "Preview": "Visualização", "CreateANewSolution": "Crie uma nova solução", - "ABPFrameworkFeatures": "Recursos da estrutura ABP", + "FrameworkFeatures": "Recursos da estrutura ABP", "Commercial": "Comercial", "ThirdPartyTools": "Ferramentas de terceiros", "Back": "Voltar", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ro-RO.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ro-RO.json index 1f7ad50da1..f1f80e27b8 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ro-RO.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ro-RO.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "Aplicație web progresivă", "Preview": "previzualizare", "CreateANewSolution": "Creați o nouă soluție", - "ABPFrameworkFeatures": "Caracteristicile cadrului ABP", + "FrameworkFeatures": "Caracteristicile cadrului ABP", "Commercial": "Comercial", "ThirdPartyTools": "Instrumente de la terți", "Back": "Înapoi", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ru.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ru.json index dd022d4d26..8f0c0ef81e 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ru.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ru.json @@ -299,7 +299,7 @@ "ProgressiveWebApplication": "Прогрессивное веб-приложение", "Preview": "Предварительный просмотр", "CreateANewSolution": "Создать новое решение", - "ABPFrameworkFeatures": "Структура ABP Функции", + "FrameworkFeatures": "Структура ABP Функции", "Commercial": "Коммерческий", "ThirdPartyTools": "Сторонние инструменты", "Back": "Назад", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sk.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sk.json index e5634acb64..333020d4f5 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sk.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sk.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "Progresívna webová aplikácia", "Preview": "Náhľad", "CreateANewSolution": "Vytvorte nové riešenie", - "ABPFrameworkFeatures": "Funkcie rámca ABP", + "FrameworkFeatures": "Funkcie rámca ABP", "Commercial": "Komerčný", "ThirdPartyTools": "Nástroje tretích strán", "Back": "späť", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sl.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sl.json index 2b0b8274ec..424efaf1d3 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sl.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sl.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "Progresivna spletna aplikacija", "Preview": "Predogled", "CreateANewSolution": "Ustvarite novo rešitev", - "ABPFrameworkFeatures": "Funkcije ogrodja ABP", + "FrameworkFeatures": "Funkcije ogrodja ABP", "Commercial": "Komercialno", "ThirdPartyTools": "Orodja tretjih oseb", "Back": "Nazaj", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json index b8c3514d66..64f97fc08b 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json @@ -298,7 +298,7 @@ "SeparateIdentityServer": "Ayrı Kimlik Sunucusu", "Preview": "Önizleme", "CreateANewSolution": "Yeni bir çözüm oluşturun", - "ABPFrameworkFeatures": "ABP Framework Özellikleri", + "FrameworkFeatures": "ABP Framework Özellikleri", "ThirdPartyTools": "Üçüncü taraf araçlar", "Back": "Geri", "SeeMore": "Daha fazla göster", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/vi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/vi.json index 6a31739036..210be53393 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/vi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/vi.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "Ứng dụng web tiến bộ", "Preview": "Xem trước", "CreateANewSolution": "Tạo một giải pháp mới", - "ABPFrameworkFeatures": "Tính năng của khung ABP", + "FrameworkFeatures": "Tính năng của khung ABP", "Commercial": "Thuộc về thương mại", "ThirdPartyTools": "Công cụ của bên thứ ba", "Back": "Mặt sau", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json index 984a3d28a7..0dc5f525b1 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json @@ -301,7 +301,7 @@ "ProgressiveWebApplication": "渐进式Web应用程序", "Preview": "预览", "CreateANewSolution": "创建新解决方案", - "ABPFrameworkFeatures": "ABP 框架 特点特点特點", + "FrameworkFeatures": "ABP框架特點", "Commercial": "商業的", "ThirdPartyTools": "第三方工具", "Back": "後退", diff --git a/common.props b/common.props index 41f876e0af..025dab3faa 100644 --- a/common.props +++ b/common.props @@ -1,8 +1,8 @@ latest - 8.3.4 - 3.3.4 + 9.0.2 + 4.0.3 $(NoWarn);CS1591;CS0436 https://abp.io/assets/abp_nupkg.png https://abp.io/ diff --git a/docs/en/Blog-Posts/2024-07-23-AbpIo-United-Is-Live/cover.png b/docs/en/Blog-Posts/2024-07-23-AbpIo-United-Is-Live/cover.png new file mode 100644 index 0000000000..95265fea29 Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-23-AbpIo-United-Is-Live/cover.png differ diff --git a/docs/en/Blog-Posts/2024-07-23-AbpIo-United-Is-Live/post.md b/docs/en/Blog-Posts/2024-07-23-AbpIo-United-Is-Live/post.md new file mode 100644 index 0000000000..bc18035bf9 --- /dev/null +++ b/docs/en/Blog-Posts/2024-07-23-AbpIo-United-Is-Live/post.md @@ -0,0 +1,62 @@ + +# 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. Here's what's new: + + +### Unified domain and enhanced navigation 🌍 +All our services are now consolidated under a single domain; [abp.io](https://abp.io). This means you no longer need to navigate through multiple subdomains. The new mega menu makes finding what you need easier and faster. + + +### Modern design and improved UX 🎨 +The platform boasts a fresh, modern design aimed at improving both aesthetics and functionality. This redesign enhances usability, making your interaction with ABP.IO more intuitive. + + + +### Documentation in one place 📃 +We’ve combined the ABP (open-source) and ABP Commercial (paid) documents into a single, comprehensive resource. This unified documentation will help you find what you're looking for more efficiently. The new documentation address is [abp.io/docs](https://abp.io/docs). When you switch to old ABP versions before v8.3, you will see the old documents are still available. + + + +### Introducing "ABP Studio Community Edition" 🪄 +We're excited to introduce the **ABP Studio Community Edition**, which is now **available for free**. This edition provides powerful tools to streamline your development process. You can easily create a new project with a configuration wizard in ABP Studio. It also provides module management, which means you can add/remove an ABP Module easily. You can also debug your microservice project and track the HTTP requests easily. Connecting your local development environment to a local or remote Kubernetes cluster is another cool feature of ABP Studio. We aim for ABP Studio to be the primary tool for ABP developers to manage their projects. + +> Download ABP Studio 👉 [abp.io/studio](https://abp.io/studio). + + +### Enhanced "ABP CLI" 🚀 +ABP CLI is also renewed. The new CLI is compatible with ABP Studio. It adds new commands. The new CLI is now available on NuGet at [nuget.org/packages/Volo.Abp.Studio.Cli](https://www.nuget.org/packages/Volo.Abp.Studio.Cli). It's a dotnet global tool. When you install ABP Studio, the new ABP CLI is automatically installed. You can still use the old ABP CLI commands. To use the legacy ABP CLI commands just add `--old` parameter to your commands. + +> The docs of the new ABP CLI 👉 [abp.io/docs/latest/cli](https://abp.io/docs/latest/cli). + + + +### 20% Celebration discount 💰 +To celebrate the launch of the new platform, we're offering a **20% discount** for a limited time. This discount is valid for all new purchases, renewing existing licenses and buying additional developer seats. + +> Discounted prices 👉 [abp.io/pricing](https://abp.io/pricing). + + +### Existing customers 🛂 +In terms of licensing rules, existing customers will not be affected by this change. You can manage your license just like before at [abp.io/my-organizations](https://abp.io/my-organizations). + +> The new support website address 👉 [abp.io/support](https://abp.io/support). + +--- + +### Why choose the ABP Platform? 🙄 +ABP Platform simplifies modern software development with well-architected startup templates, modular design infrastructure, multi-tenancy support, comprehensive security features, and a vibrant community. If you are starting a new web project or transforming your legacy application, ABP is the perfect solution! If you still wonder why you need such a solution, see [abp.io/why-choose-abp](https://abp.io/why-choose-abp). + +There are several startup ASP.NET Core templates for your requirements. Read [abp.io/how-it-works](https://abp.io/how-it-works) page to understand ABP's approach. We have a FAQ page where you can find answers to many of your questions [abp.io/faq](https://abp.io/faq). + +> Start your new ABP project -for free- 👉[abp.io/get-started](https://abp.io/get-started)! + + +### Join our community 👨‍👨‍👦 +We invite developers, IT professionals, and businesses to join the ABP Community. Our community website is now [abp.io/community](https://abp.io/community). On this website, you can read ABP-related posts, watch live community shows and core team's fundamental video courses... + +------ + +For more information, visit our newly unified platform at [abp.io](https://abp.io). We look forward to your feedback and continued support as we grow together! + +> Found a bug in the new platform? Or if you have an idea, write to us 👉 [abp.io/contact](https://abp.io/contact). diff --git a/docs/en/Blog-Posts/2024-07-25-Introducing-The-New-ABP-CLI/cover-image.png b/docs/en/Blog-Posts/2024-07-25-Introducing-The-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-25-Introducing-The-New-ABP-CLI/cover-image.png differ diff --git a/docs/en/Blog-Posts/2024-07-25-Introducing-The-New-ABP-CLI/post.md b/docs/en/Blog-Posts/2024-07-25-Introducing-The-New-ABP-CLI/post.md new file mode 100644 index 0000000000..699fbb2c56 --- /dev/null +++ b/docs/en/Blog-Posts/2024-07-25-Introducing-The-New-ABP-CLI/post.md @@ -0,0 +1,81 @@ +# Introducing the New ABP CLI + +![](cover-image.png) + +📢 We're excited to introduce the [new ABP CLI](https://abp.io/docs/latest/cli/index) after the announcement of [the new unified ABP Platform](https://abp.io/blog/new-abp-platform-is-live). + +As you know, we recently unified the ABP platform in a single domain ([abp.io](https://abp.io/)) 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 to bring you a more streamlined and efficient experience, which also extends the current commands. + +Here is a brief overview of what's new, what's changed, and why this change is happening... + +## The New ABP CLI + +ABP CLI is a command line tool to perform some common operations for ABP based solutions or [ABP Studio](https://abp.io/docs/latest/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. + +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. Also, it allows you to use the old ABP CLI if you need, it by passing a single parameter. + +To be able to use the new ABP CLI, you should first delete the existing/old CLI with the following command if you installed it before: + +```bash +dotnet tool uninstall -g Volo.Abp.Cli +``` + +Then, to install the new ABP CLI, you can just simply execute the following command in your terminal: + +```bash +dotnet tool install -g Volo.Abp.Studio.Cli +``` + +> Both old and new ABP CLI binary names use the same `abp` command as the executing command. Therefore, you should uninstall the old CLI first, if you installed it before. + +> **Note**: Since the new ABP CLI uses the same `abp` command, you can use the same commands as you did before. + +## Reason for the Change + +ABP introduces a new templating system, which is fully compatible with the ABP Studio from v8.2+. Since, ABP Studio offers more and better features (such as tracking, monitoring, and deploying your applications from a single point), and the new templating system has a different versioning structure, we wanted to introduce a new ABP CLI by extending the current features and adding even more features that are compatible with the new templating system and ABP Studio. + +This change allows you to create your application with the new templating system either by running the cross-platform ABP Studio application or ABP CLI and allows you to create automated pipelines with the power of the new ABP CLI. + +## Using the Old ABP CLI + +If you have an older version of ABP solutions and need to use the old ABP CLI for any reason, you can do it easily with the new ABP CLI. + +You just need to put the `--old` command at the end of your command and execute the related CLI command as you would before. This allows you to use the old CLI commands with the new CLI without the need to uninstall the new CLI. + +For example, if you want to create a new ABP v8.2.0 solution, you can execute the following command: + +```bash +abp new Acme.BookStore --version 8.2.0 --old +``` + +When you run this command, the new ABP CLI installs the old CLI with `abp-old` name as the executing command within the latest version of ABP under the **%UserProfile%\\.abp\studio\cli\old** directory and allows you to use the old commands. + +If you want to use a specific version of the old ABP CLI, it's also possible with the new ABP CLI. You can use the `install-old-cli` command of the new CLI to either install or update an old CLI, then you can directly execute any old ABP CLI command by simply passing the `--old` parameter to the end of your command: + +```bash +# installing the old ABP CLI with v8.0 +abp install-old-cli --version 8.0.0 + +abp new Acme.BookStore --version 8.0 --old # alternatively, you can use the `abp-old` command without need to pass the "--old" parameter +``` + +## New Commands + +New ABP CLI extends the existing features of old ABP CLI and introduces new commands. Here are some of the new commands: + +* `kube-connect`: Connects to Kubernetes environment. (Available for **Business or higher licenses**) +* `kube-intercept`: Intercepts a service running in Kubernetes environment. (Available for **Business or higher licenses**) +* `list-module-sources`: Lists the remote module sources. +* and more... + +You can check the CLI documentation for all available commands and their usage. + +## Conclusion + +In this blog post, we briefly explained the new ABP CLI, what's the reason for this change, and how to use the old ABP CLI with the new ABP CLI. + +If you have any further questions related to the new ABP CLI, you can always refer to the [CLI](https://abp.io/docs/latest/cli/index) and [Old ABP CLI vs New ABP CLI](https://abp.io/docs/latest/cli/differences-between-old-and-new-cli) documentation. Also, we listed some of the questions that you may have, which you can [check from here](https://abp.io/docs/latest/cli/differences-between-old-and-new-cli#common-questions). + +Please try out the new ABP CLI, and provide feedback to help us release more stable versions, with additional features. + +Thanks for being a part of the ABP Community! \ 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 new file mode 100644 index 0000000000..edc9118d9c Binary files /dev/null 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 new file mode 100644 index 0000000000..f0ca19268e Binary files /dev/null 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-new-layered-solution-template-wizard-options.png b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-new-layered-solution-template-wizard-options.png new file mode 100644 index 0000000000..051451d512 Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-new-layered-solution-template-wizard-options.png differ diff --git a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-new-layered-solution-template-wizard.png b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-new-layered-solution-template-wizard.png new file mode 100644 index 0000000000..35e53cd3dc Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/abp-studio-new-layered-solution-template-wizard.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 new file mode 100644 index 0000000000..02a2ba1076 Binary files /dev/null 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 new file mode 100644 index 0000000000..87dbb07a41 Binary files /dev/null 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 new file mode 100644 index 0000000000..572cf40956 Binary files /dev/null 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 new file mode 100644 index 0000000000..e09cfb2ddd Binary files /dev/null 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/post.md b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/post.md new file mode 100644 index 0000000000..a5fb9d7bee --- /dev/null +++ b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/post.md @@ -0,0 +1,111 @@ +# Announcing ABP Studio (beta) General Availability + +ABP Framework makes your daily coding activities much easier, more convenient, and even more enjoyable. However, building a software product is not just about coding. We know that you need to build, run, test, debug and deploy your software, and trace errors on a failure. You also should to design architecture of your overall solution and perform many common operations on your solutions in addition to the coding activity. + +We'd already provided tools like [ABP CLI](https://abp.io/cli) and [ABP Suite](https://abp.io/suite) for these kind of purposes before. [ABP Studio](https://abp.io/studio) takes this one long step further and offers a tool that you can use continuously throughout your coding activities, help you for non-coding activities to make you focus on your software development. + +I am very 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). + +## What is ABP Studio? + +[ABP Studio](https://abp.io/docs/latest/studio) is a cross-platform desktop application for ABP and .NET developers. It 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. + +**From now on, ABP Studio is the default way to start with the ABP Platform**; + +* The [get started page](https://abp.io/get-started) has updated so it offers to download ABP Studio to create a new ABP based solution. +* The ABP CLI ([Volo.Abp.Cli](https://nuget.org/packages/Volo.Abp.Cli)) is replaced by the ABP Studio CLI ([Volo.Abp.Studio.Cli](https://www.nuget.org/packages/Volo.Abp.Studio.Cli)). [The new ABP Studio CLI](https://abp.io/docs/latest/cli) is compatible with the old one, and extends it by introducing new commands. +* [Startup solution templates](https://abp.io/docs/latest/solution-templates) are completely renewed. The solution structures are similar to the old ones, but they are totally new templates built with the new templating engine. +* All the documentation and tutorials now uses ABP Studio and ABP Studio CLI. + +> **ABP Studio is in beta stage now.** It is also in rapid development and release cycle. We frequently release new feature and patch versions. Please [file an issue](https://github.com/abpframework/abp/issues/new/choose) if you have any problem. +> +> If you want to continue to use the old CLI and old startup templates, please [refer that document](https://abp.io/docs/latest/cli/differences-between-old-and-new-cli). + +## The Easiest Way to Start with the ABP Framework + +As mentioned before, the [startup solution templates](https://abp.io/docs/latest/solution-templates) are completely renewed with ABP Studio. They provide much more options compared to the old startup templates. The following screenshot is taken from the New Solution wizard of ABP Studio, which provides an comfortable and easy way to create new solutions: + +![abp-studio-new-layered-solution-template-wizard](abp-studio-new-layered-solution-template-wizard.png) + +For example, you can now select most of the non-fundamental modules as optional while creating a new solution: + +![abp-studio-new-layered-solution-template-wizard-options](abp-studio-new-layered-solution-template-wizard-options.png) + +### Developing Microservices Solutions is Now Much Easier + +The most important change is made on the [microservice startup template](https://abp.io/docs/latest/solution-templates/microservice) (which is available only for Business or higher license holders). We've designed the solution structure, integrations, Kubernetes/Helm configuration, database migrations and all others from scratch and well documented all the decisions we've applied. Developing microservice solutions with ABP Framework is now easier and more understandable than ever. + +## Architecting Your Complex Solutions + +One of the main purposes to build ABP Studio was to simplify to create multi-modular and distributed systems. Either you create a modular monolith application or a microservice solution, [ABP Studio's solution explorer](https://abp.io/docs/latest/studio/solution-explorer) provides a convenient way to design your high-level solution structure. + +You see a microservice solution in the following screenshot: + +![solution-explorer](solution-explorer.png) + +That ABP Studio solution contains multiple separate .NET solutions (`.sln`) each has multiple .NET projects (`.csproj`). ABP Studio allows you to easily manage such a multi-solution system on a single view. You can create new packages and modules, import existing packages and modules, manage their dependencies and so on. + +## Run and Test Your Multi-Application Solutions with a Single Click + +One of the biggest shortcomings we face when developing distributed or complex solutions is being able to easily run all components of the solutions so that we can test and debug a single service or application without caring about all the runtime dependencies. + +Here a screenshot from the ABP Studio's [Solution Runner](https://abp.io/docs/latest/studio/running-applications) view: + +![abp-studio-solution-runner-overall](abp-studio-solution-runner-overall.png) + +When you use ABP Studio, it is dramatically easier to run, monitor, test, debug and develop your applications and services. You can browse your web UI applications, monitor all the HTTP requests, distributed events, exceptions and logs in real time on a single screen. In this way, you can easily run all the systems and trace the problems when you have. + +All you need to click the *Play* button or right-click and select the *Run* -> *Start All* command: + +![abp-studio-solution-runner-start-apps](abp-studio-solution-runner-start-apps.png) + +The nice thing is that you can create multiple profiles for each of your teams so that they can run only the applications they need to develop the application they are working on. + +## Seamlessly Develop Your Service as Integrated to Kubernetes + +Kubernetes is the de-facto tool to deploy, run and scale complex systems. However, it can also be a great tool to develop such solutions in a local environment. + +With ABP Studio's [Kubernetes Integration](https://abp.io/docs/latest/studio/kubernetes) system, it is now possible to deploy and run a complex system in a Kubernetes cluster. Then you can establish a bridge between your local development environment and the Kubernetes cluster. In this way, you can develop, run, test and debug an application or service in your local development environment as it is running in the Kubernetes cluster. All incoming and outgoing traffic is properly routed and managed by ABP Studio. You just focus on the service you are responsible to develop and let the Kubernetes run rest of the system for you. + +You can see all the Helm charts in a solution in the Kubernetes panel of ABP Studio: + +![abp-studio-helm-charts](abp-studio-helm-charts.png) + +Here, you can easily build, install and uninstall the Helm charts to your Kubernetes cluster. In the Kubernetes tab, you can connect to the Kubernetes cluster and intercept a service to develop it locally. See [the documentation](https://abp.io/docs/latest/studio/kubernetes) for more information. + +The good news is that all the monitoring data (HTTP Requests, Events, Exceptions, Logs,...) is still visible in real time with the Kubernetes integration too. + +## Use the ABP Suite as Integrated to ABP Studio + +[ABP Suite](https://abp.io/suite) is a tool that is basically used to generate code for ABP Solutions. It has started by creating simple CRUD pages, and now it does much more. It can establish relations with existing entities, create complex user interfaces like parent/child tables and so on... + +ABP Suite can be used directly inside ABP Studio by clicking the *ABP Suite* -> *Open* command: + +![abp-suite-open-in-abp-studio](abp-suite-open-in-abp-studio.png) + +This will open ABP Suite in a new tab for the current solution and focus on the CRUD page generation: + +![abp-suite-in-abp-studio](abp-suite-in-abp-studio.png) + +The new ABP Studio solution templates and ABP Suite code generation are compatible with each other. Here a screenshot from the generated CRUD UI for a very simple Book entity: + +![suite-generated-entity](suite-generated-entity.png) + +## The Community Edition vs Commercial Licenses + +ABP Studio has a Community Edition which is completely free and available to everyone. As you can guess, there are come differences between the community edition and commercial editions. ABP Platform has 4 fundamental license types; + +* Open source (free) +* Team +* Business +* Enterprise + +Here, the comparison table for ABP Studio features for these license types: + +![abp-studio-license-comparison-table](abp-studio-license-comparison-table.png) + +Microservice startup template and Kubernetes integration features are available only for commercial licenses since these are considered more enterprise requirements. Also, the solution size is limited with the ABP Community edition. If you are building a large or distributed solution, consider to [purchase a commercial license](https://abp.io/pricing). + +## Conclusion + +I've introduced the ABP Studio General Availability with this post. It is still in the beta stage. You can expect frequent releases during the beta phase. We will add new features and fix issues quickly. Please [download](https://abp.io/studio) and use it now. If you find any problem, do not hesitate to open an [issue on GitHub](https://github.com/abpframework/abp/issues/new/choose). \ No newline at end of file diff --git a/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/solution-explorer.png b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/solution-explorer.png new file mode 100644 index 0000000000..2d97e6067c Binary files /dev/null and b/docs/en/Blog-Posts/2024-07-30-Announcing-ABP-Studio/solution-explorer.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 new file mode 100644 index 0000000000..2f3342d573 Binary files /dev/null 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 + +![](cover-image.png) + +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: + +![](studio-switch-to-preview.png) + +## 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. + +![](cmskit-module-markedItems.png) + +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: + +![](cmskit-module-comments-settings.png) + +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: + +![](docs-google-search.png) + +![](google-search-results.png) + +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: + +![](cms-kit-faq.png) + +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: + +![](faq-section-public-web.png) + +> 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! + +![](new-platform-cover-image.png) + +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). + +![](studio-beta-cover-image.png) + +> 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. + +![](new-abp-cli-cover-image.png) + +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. + +![0](0.png) + +## 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. + +![1](1.png) + +![2](2.png) + +![3](3.png) + +## 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. + +![](blog-cover.png) + +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: + +![](abp-docs.png) + +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: + +![](old-docs.png) + +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: + +![](in-this-document.png) + +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: + +![](suite-license-note.png) + +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: + +![](pro-modules.png) + + +## New Navigation Tree 📚 + +With the documentation unification, we re-structured the navigation tree of the documents: + +![](navigation-menu.png) + +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: + +![](google-translate-and-search.png) + +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. + +![](google-search-result.png) + +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! + +![](docs-feedbacks.png) + +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: + +![](docs-feedback-section.png) + +## 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! + +![](cover-image.png) + +[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: + +![](switch-to-stable.png) + +### 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/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/banner.png b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/banner.png new file mode 100644 index 0000000000..a25baf863a Binary files /dev/null and b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/banner.png differ diff --git a/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/boat-trip.jpg b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/boat-trip.jpg new file mode 100644 index 0000000000..7a9b89732a Binary files /dev/null and b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/boat-trip.jpg differ diff --git a/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/collage-moscow.jpg b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/collage-moscow.jpg new file mode 100644 index 0000000000..69652780b7 Binary files /dev/null and b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/collage-moscow.jpg differ diff --git a/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/general-1.png b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/general-1.png new file mode 100644 index 0000000000..20c9ef5b05 Binary files /dev/null and b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/general-1.png differ diff --git a/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/general-collage.jpg b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/general-collage.jpg new file mode 100644 index 0000000000..459f151e25 Binary files /dev/null and b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/general-collage.jpg differ diff --git a/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/halil-talk.jpg b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/halil-talk.jpg new file mode 100644 index 0000000000..8d2a116524 Binary files /dev/null and b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/halil-talk.jpg differ diff --git a/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/my-talk-2.png b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/my-talk-2.png new file mode 100644 index 0000000000..34acae63da Binary files /dev/null and b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/my-talk-2.png differ diff --git a/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/my-talk-pro-pictures.jpg b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/my-talk-pro-pictures.jpg new file mode 100644 index 0000000000..8cd11d2d11 Binary files /dev/null and b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/my-talk-pro-pictures.jpg differ diff --git a/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/my-talk.png b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/my-talk.png new file mode 100644 index 0000000000..caa9194c3f Binary files /dev/null and b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/my-talk.png differ diff --git a/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/post.md b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/post.md new file mode 100644 index 0000000000..c6ac51d273 --- /dev/null +++ b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/post.md @@ -0,0 +1,87 @@ +# DotNext 2024 Conference: A Speaker’s Impressions + +![banner](banner.png) + +Last week, I had the chance of being a speaker at **DotNext 2024** in Moscow. [JUG Ru Group](https://jugru.org/en/) is arranging the DotNext Conferences since [2014](https://dotnext.ru/archive/). It's a specific conference for .NET developers held at the [MonArch Moscow Hotel](https://www.moscowmonarch.com/) on 10, 11 September 2024. This event brought together over **600 developers on-site, 200 developers online**, with around **35 speakers** delivering more than **30 talks**, making it one of the largest gatherings of the .NET community in Russia. + +![Atmosphere-1](general-1.png) + +--- + + + +## Key Highlights & Popular Sessions + +One of the standout aspects of the conference was its strong technical focus, particularly on deep-dive .NET topics. Talks covered subjects like **low-level optimizations**, architecture, performance, and platform internals. + +The conference started with Sergei Benzenko's talk "What's New in .NET 9". There are important topics like ".NET Aspire in Action", "AI-Driven Software Development", "DDD and Strategic Design" and "OAuth 2.0 User-Managed Access in ASP.NET Core with Keycloak". + +![DotNext 2024 Speakers](speakers.png) + +There were two international speakers: me and Halil Ibrahim Kalkan from ABP Core Team. Halil's topic was **Implementing Domain-Driven Design as a Pragmatic Developer**. In his session, he gave practical real world examples of bad and best practices of DDD development. + +![halil-talk](halil-talk.jpg) + + +--- + + + +## My Talk + +My presentation topic was **Building Multi-Tenant ASP.NET Core Applications** was part of this technical deep dive, and I was thrilled to see so much interest in scalable multi-tenant solutions. I generally talked about meta data in SaaS development and explained how to identify the active tenant, how to isolate the data in the same database, how to set `TenantId` automatically for new entities, how to select DB connection for the active tenant, how to change the active tenant when needed, how to disable multi-tenancy temporarily, how to handle database migrations and lastly feature system. These features are major multi-tenancy features, and you'll learn how they are implemented in an open-source web app framework. + +![My Talk](my-talk.png) + +![my-talk-2](C:\Users\alper\OneDrive\Desktop\DotNext 2024 Photos\article\my-talk-2.png) + +- My presentation 🌐https://github.com/ebicoglu/presentations/tree/main. + +- My conf profile🌐 https://dotnext.ru/en/persons/cbe6e4b2cc214a47bfc3752cdb0b1f88/ + + +![My Talk Photos](my-talk-pro-pictures.jpg) + +--- + + + +## Venue and Atmosphere + +The MonArch Moscow Hotel provided a great venue, combining spacious halls for sessions with cozy areas for networking. There were also afterparty events, which added a fun, informal touch to the otherwise highly technical environment. The setup allowed plenty of opportunities for spontaneous discussions with attendees and experts, both during and after the sessions. + +![Atmoshpere-4](general-collage.jpg) + + +--- + + + +## Boat Tour on Moscow River + +After the conference ended, the organizing team took all the speakers on a boat tour on the Moscow River. It was a great open buffet dinner in a nice boat. We had a chance to chat with other speakers. + +![Boat Trip](boat-trip.jpg) + +--- + + + +## Networking and Community + +DotNext 2024 provided an excellent platform for connecting with fellow developers and industry leaders. In addition to presentations, there were plenty of opportunities to interact with other participants, including representatives from Microsoft, Volosoft, and local Russian tech giants like Ozon and beeline. The exhibition hall was filled with partner stands, including those from PVS-Studio, Kontur, Eremex and OzonTech which offered interactive displays and demos. + +--- + + + +## Conclusion + +Overall, DotNext 2024 lived up to its reputation as a key event for .NET developers. From highly technical talks to networking opportunities, it was a fantastic experience, and I came away with new insights into both the technical and community aspects of the .NET ecosystem. If you’re a .NET developer looking to stay ahead in your field, DotNext is definitely a conference worth attending! + +Looking forward to come again! + + +Lastly, I took some beautiful photos of Moscow, here are a few... + +![Moscow Pictures](collage-moscow.jpg) \ No newline at end of file diff --git a/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/speakers.png b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/speakers.png new file mode 100644 index 0000000000..eccc1bd0b4 Binary files /dev/null and b/docs/en/Blog-Posts/2024-09-17-My-Impressions-at-DotNext-2024-Conference/speakers.png differ diff --git a/docs/en/Community-Articles/2022-11-14-How-to-add-a-custom-grant-type-in-OpenIddict/POST.md b/docs/en/Community-Articles/2022-11-14-How-to-add-a-custom-grant-type-in-OpenIddict/POST.md index 0401c31898..8f45279b3d 100644 --- a/docs/en/Community-Articles/2022-11-14-How-to-add-a-custom-grant-type-in-OpenIddict/POST.md +++ b/docs/en/Community-Articles/2022-11-14-How-to-add-a-custom-grant-type-in-OpenIddict/POST.md @@ -73,10 +73,10 @@ public class MyTokenExtensionGrant : ITokenExtensionGrant claimsPrincipal.SetResources(await GetResourcesAsync(context, principal.GetScopes())); //abp version < 7.3 - await context.HttpContext.RequestServices.GetRequiredService().SetAsync(principal); + await context.HttpContext.RequestServices.GetRequiredService().SetAsync(claimsPrincipal); //For abp version >= 7.3 - await context.HttpContext.RequestServices.GetRequiredService().HandleAsync(context.Request, principal); + await context.HttpContext.RequestServices.GetRequiredService().HandleAsync(context.Request, claimsPrincipal); return new SignInResult(OpenIddictServerAspNetCoreDefaults.AuthenticationScheme, claimsPrincipal); } diff --git a/docs/en/Community-Articles/2023-11-16-Upgrading-Your-Existing-Projects-to-NET8/POST.md b/docs/en/Community-Articles/2023-11-16-Upgrading-Your-Existing-Projects-to-NET8/POST.md index c0bf748876..3ed34680c1 100644 --- a/docs/en/Community-Articles/2023-11-16-Upgrading-Your-Existing-Projects-to-NET8/POST.md +++ b/docs/en/Community-Articles/2023-11-16-Upgrading-Your-Existing-Projects-to-NET8/POST.md @@ -52,7 +52,7 @@ For example, you can update the ASP.NET Core image as follows: ```diff - FROM mcr.microsoft.com/dotnet/aspnet:7.0-bullseye-slim AS base -+ FROM mcr.microsoft.com/dotnet/aspnet:8.0 ++ FROM mcr.microsoft.com/dotnet/aspnet:9.0 ``` You can check the related images from Docker Hub and update them accordingly: 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..295b509029 --- /dev/null +++ b/docs/en/Community-Articles/2024-08-28-Understanding-AOT-vs-JIT/POST.md @@ -0,0 +1,64 @@ + + +![book](images/cover.png) + +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/cover.png b/docs/en/Community-Articles/2024-08-28-Understanding-AOT-vs-JIT/images/cover.png new file mode 100644 index 0000000000..bd6d7e8cbf 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? + +![Cover Image](cover.png) + +**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! + +![Cover image](cover.png) + +## 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**. + + +![Tenancy Schema](tenancy-schema.png) + + +--- + + + +## 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; + +![Questions](questions.png) + +**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! + +![user-multiple-membership](user-multiple-membership.png) + +##### **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! + +![Shared entity](shared-entity.png) + +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. + +![Coupled Tenants](coupled-tenants.png) + + +##### **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. + +![Security GDPR Data Retention](security-gdpr-db-retention.png) + +##### **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!** + + + +--- + + + +![Logo](https://abp.io/assets/platform/img/logos/logo-abp-dark.svg) + +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/Community-Articles/2024-09-18-Blazor-9-New-Features/cover.png b/docs/en/Community-Articles/2024-09-18-Blazor-9-New-Features/cover.png new file mode 100644 index 0000000000..2c1048c5ce Binary files /dev/null and b/docs/en/Community-Articles/2024-09-18-Blazor-9-New-Features/cover.png differ diff --git a/docs/en/Community-Articles/2024-09-18-Blazor-9-New-Features/post.md b/docs/en/Community-Articles/2024-09-18-Blazor-9-New-Features/post.md new file mode 100644 index 0000000000..bc73c13210 --- /dev/null +++ b/docs/en/Community-Articles/2024-09-18-Blazor-9-New-Features/post.md @@ -0,0 +1,149 @@ +# ASP.NET Core Blazor 9.0 New Features Summary 🆕 + +In this article, I'll highlight .NET 9's Blazor updates and important features for ASP.NET Core 9.0. These features are based on the latest .NET 9 Preview 7. + +![Cover](cover.png) + +## .NET MAUI Blazor Hybrid App and Web App solution template + +There's a new solution template to create .**NET MAUI native** and **Blazor web client** apps. This new template allows to choose a Blazor interactive render mode, it uses a shared Razor class library to maintain the UI's Razor components. + +For more info: + +* [learn.microsoft.com > maui blazor web app tutorial](https://learn.microsoft.com/en-us/aspnet/core/blazor/hybrid/tutorials/maui-blazor-web-app?view=aspnetcore-9.0) +* [reddit.com/r/Blazor/comments/1dabyzk/net_8_blazor_hybrid_maui_app_web_hosting/](https://www.reddit.com/r/Blazor/comments/1dabyzk/net_8_blazor_hybrid_maui_app_web_hosting/) + + + +## A new middleware: `MapStaticAssets` + +This new middleware optimizes the delivery of static assets in any ASP.NET Core app, also for Blazor. Basically it compresses assets via [Gzip](https://datatracker.ietf.org/doc/html/rfc1952), [fingerprints](https://developer.mozilla.org/docs/Glossary/Fingerprinting) for all assets at build time with a Base64 and removes caches when Visual Studio Hot Reload (development time) is in action. + +For more info: + +* [learn.microsoft.com > optimizing static web assets](https://learn.microsoft.com/en-us/aspnet/core/release-notes/aspnetcore-9.0?view=aspnetcore-8.0#optimizing-static-web-asset-delivery) +* [learn.microsoft.com > fundamentals of static files](https://learn.microsoft.com/en-us/aspnet/core/blazor/fundamentals/static-files?view=aspnetcore-9.0#static-asset-middleware) + + + +## Simplifying the process of querying component states at runtime + +1. Finding the component's current execution location: This can be especially helpful for component performance optimization and debugging. +2. Verifying whether the component is operating in a dynamic environment by checking: This can be useful for parts whose actions vary according to how their surroundings interact. +3. Obtaining the render mode allocated to the component: Comprehending the render mode can aid in enhancing the rendering procedure and augmenting the component's general efficiency. + +For more info: + +* [learn.microsoft.com > detect rendering location interactivity & render mode runtime](https://learn.microsoft.com/en-us/aspnet/core/blazor/components/render-modes?view=aspnetcore-9.0#detect-rendering-location-interactivity-and-assigned-render-mode-at-runtime) + + + +## Detecting component's location, interactivity support and render mode + +The `ComponentBase.RendererInfo` and `ComponentBase.AssignedRenderMode` now allows to detect the following actions: + +* `RendererInfo.Name` returns the location where the component is executing +* `RendererInfo.IsInteractive` indicates if the component supports interactivity at the time of rendering. +* `ComponentBase.AssignedRenderMode` exposes the component's assigned render mode + + + +## Better server-side reconnection + +* When the previous app is disconnected and the user navigates to this app, or browser put this app in sleep mode, Blazor runs reconnection mechanism. + +* When reconnection is not successful because your server killed connection, it automatically makes a full page refresh. + +* With the new below config, you can adjust your reconnection retry time: + + * ```csharp + Blazor.start({ + circuit: { + reconnectionOptions: { + retryIntervalMilliseconds: (previousAttempts, maxRetries) => + previousAttempts >= maxRetries ? null : previousAttempts * 1000 + }, + }, + }); + ``` + + + +## Simple serialization for authentication + +The new APIs in ASP.NET make it easier to add authentication to existing Blazor Web Apps. These APIs, now part of the Blazor Web App project template, allow authentication state to be serialized on the server and deserialized in the browser, simplifying the process of integrating authentication. This removes the need for developers to manually implement or copy complex code, especially when using WebAssembly-based interactivity. + +For more info: + +- [learn.microsoft.com > blazor Identity UI individual accounts](https://learn.microsoft.com/en-us/aspnet/core/blazor/security/server/?view=aspnetcore-9.0#blazor-identity-ui-individual-accounts) +- [learn.microsoft.com > manage authentication state](https://learn.microsoft.com/en-us/aspnet/core/blazor/security/server/?view=aspnetcore-9.0#manage-authentication-state-in-blazor-web-apps) + + + +## Easily add static server-side rendering pages + +With .NET 9, adding static server-side rendering (SSR) pages to globally interactive Blazor Web Apps has become simpler. The new `[ExcludeFromInteractiveRouting]` attribute allows developers to mark specific Razor component pages that require static SSR, such as those relying on HTTP cookies and the request/response cycle. Pages annotated with this attribute exit interactive routing and trigger a full-page reload, while non-annotated pages default to interactive rendering modes like `InteractiveServer`. This approach enables flexibility between static and interactive rendering depending on the page's requirements. + +For more info: + +* [learn.microsoft.com > render-modes](https://learn.microsoft.com/en-us/aspnet/core/blazor/components/render-modes?view=aspnetcore-9.0#static-ssr-pages-in-a-globally-interactive-app) + + + +## Constructor Injection in Razor Components + +Razor components support constructor injection, allowing services like `NavigationManager` to be injected directly into a component's constructor. This can be used to manage navigation actions, such as redirecting the user upon an event like a button click. + +For more info: + +* [learn.microsoft.com> dependency-injection](https://learn.microsoft.com/en-us/aspnet/core/blazor/fundamentals/dependency-injection?view=aspnetcore-9.0#request-a-service-in-a-component) + + + +## Configuring WebSocket Compression and Frame-Ancestors CSP in Interactive Server Components + +By default, Interactive Server components enable WebSocket compression and set a `frame-ancestors` Content Security Policy (CSP) to `self`, restricting embedding the app in `