diff --git a/.github/workflows/auto-pr.yml b/.github/workflows/auto-pr.yml index f353a21e37..d394ca56b3 100644 --- a/.github/workflows/auto-pr.yml +++ b/.github/workflows/auto-pr.yml @@ -1,13 +1,13 @@ -name: Merge branch rel-8.3 with rel-8.2 +name: Merge branch prerel-9.0 with rel-8.3 on: push: branches: - - rel-8.2 + - rel-8.3 permissions: contents: read jobs: - merge-rel-8-3-with-rel-8-2: + merge-prerel-9-0-with-rel-8-3: 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,22 +15,22 @@ jobs: steps: - uses: actions/checkout@v2 with: - ref: rel-8.3 + ref: prerel-9.0 - name: Reset promotion branch run: | - git fetch origin rel-8.2:rel-8.2 - git reset --hard rel-8.2 + git fetch origin rel-8.3:rel-8.3 + git reset --hard rel-8.3 - name: Create Pull Request uses: peter-evans/create-pull-request@v3 with: - branch: auto-merge/rel-8-2/${{github.run_number}} - title: Merge branch rel-8.3 with rel-8.2 - body: This PR generated automatically to merge rel-8.3 with rel-8.2. Please review the changed files before merging to prevent any errors that may occur. + branch: auto-merge/rel-8-3/${{github.run_number}} + title: Merge branch prerel-9.0 with rel-8.3 + body: This PR generated automatically to merge prerel-9.0 with rel-8.3. Please review the changed files before merging to prevent any errors that may occur. reviewers: maliming token: ${{ github.token }} - name: Merge Pull Request env: GH_TOKEN: ${{ secrets.BOT_SECRET }} run: | - gh pr review auto-merge/rel-8-2/${{github.run_number}} --approve - gh pr merge auto-merge/rel-8-2/${{github.run_number}} --merge --auto --delete-branch + 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 diff --git a/Directory.Packages.props b/Directory.Packages.props index 472fb034a5..854123b215 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -48,8 +48,8 @@ - - + + @@ -61,7 +61,6 @@ - @@ -164,7 +163,7 @@ - + diff --git a/LICENSE.md b/LICENSE.md index 65c5ca88a6..5da3c16f4c 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,165 +1,89 @@ GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. +Copyright (C) 2007 Free Software Foundation, Inc. +Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. +This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public. +The license is supplemented by the additional permissions listed below. - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - 0. Additional Definitions. - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. + **0. Additional Definitions.** + +As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. + +"The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. + +An "Application" is any work that makes use of an interface provided by the Library but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. + +A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". + +The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application and not on the Linked Version. + +The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. + + + + **1. Exception to Section 3 of the GNU GPL.** + +You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. + + + + **2. Conveying Modified Versions.** + +If you modify a copy of the Library and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: + + **a)** under this License, provided that you make a good-faith effort to ensure that, in the event an Application does not supply the + function or data, the facility still operates and performs whatever part of its purpose remains meaningful, or + + **b)** under the GNU GPL, with none of the additional permissions of this License is applicable to that copy. + + + + **3. Object Code Incorporating Material from Library Header Files.** + +The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such an object code under terms of your choice, provided that if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: + + **a)** Give prominent notice with each copy of the object code that the Library is used in it, and the Library and its use are covered by this License. + + **b)** Accompany the object code with a copy of the GNU GPL and this license document. + + + + **4. Combined Works.** + +You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: + + **a)** Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. + + **b)** Accompany the Combined Work with a copy of the GNU GPL and this license document. + + **c)** For a Combined Work that displays copyright notices during execution, including the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. + + **d)** Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this License and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. + 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. + + **e)** Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying the Corresponding Source.) + - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) 5. Combined Libraries. - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. +You may place library facilities that are work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License and convey such a combined library under the terms of your choice if you do both of the following: + + **a)** Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. + + **b)** Give prominent notice with the combined library that part of it is a work based on the Library and explains where to find the accompanying uncombined form of the same work. + + + + **6. Revised Versions of the GNU Lesser General Public License.** + +The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received, it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. diff --git a/README.md b/README.md index ccc31da4b5..dd953a6431 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,18 @@ # 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) -[![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) -[![ABP Discord server](https://img.shields.io/discord/951497912645476422?label=Discord)](https://discord.gg/abp) - -ABP Framework is a complete **infrastructure** based on **ASP.NET Core** to create **modern web applications** and **APIs** by following the software development **best practices** and the **latest technologies**. Check out https://abp.io +![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) đŸ”č +[![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) + ## 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 quickly understand how ABP works. -- [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 to develop a full stack web application with all aspects of a real-life solution. +- [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 @@ -34,28 +30,26 @@ Create a new solution: > See the [CLI documentation](https://docs.abp.io/en/abp/latest/CLI) for all available options. + + ### UI Framework Options + + ### Database Provider Options -## The Book: Mastering ABP Framework -Written by the creator of ABP Framework, this book will help you to gain a complete understanding of the ABP Framework and modern web application development techniques. - -* [Buy on Amazon](https://www.amazon.com/gp/product/B097Z2DM8Q) -* [Buy on Packt Publishing](https://www.packtpub.com/product/mastering-abp-framework/9781801079242) -* [More details about the book](https://abp.io/books/mastering-abp-framework) - -![book-mastering-abp-framework](docs/en/images/book-mastering-abp-framework.png) ## What ABP Provides? ABP provides a **full stack developer experience**. + + ### Architecture @@ -64,30 +58,48 @@ ABP offers a complete, **modular** and **layered** software architecture based o 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 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. +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. + + + +### Cross-Cutting Concerns + +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. -### Cross Cutting Concerns -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. ### Application Modules ABP is a modular framework and the Application Modules provide **pre-built application functionalities**; - [**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. +- **[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. See the [Application Modules](https://docs.abp.io/en/abp/latest/Modules/Index) document for all pre-built modules. + + ### Startup Templates 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 Community + + +## Mastering ABP Framework Book + +This book will help you to gain a complete understanding of the ABP Framework and modern web application development techniques. It is written by the creator and team lead of the ABP Framework. You can buy from [Amazon](https://www.amazon.com/gp/product/B097Z2DM8Q) or [Packt Publishing](https://www.packtpub.com/product/mastering-abp-framework/9781801079242). Find further info about the book at [abp.io/books/mastering-abp-framework](https://abp.io/books/mastering-abp-framework). + +![book-mastering-abp-framework](docs/en/images/book-mastering-abp-framework.png) + + + +## The Community ### ABP Community Web Site @@ -103,28 +115,31 @@ See the [sample projects](https://docs.abp.io/en/abp/latest/Samples/Index) built ### 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 be a part of this project. +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. + + ## Official Links -* Main Web Site - * Get Started - * Features -* Documentation -* Samples -* Blog -* Community -* Stack overflow -* Twitter +* [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/) +* [Stackoverflow](https://stackoverflow.com/questions/tagged/abp) +* [Twitter](https://twitter.com/abpframework) + + + +## Support ABP -## Support the ABP Framework +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. -Love ABP Framework? **Please give a star** to this repository :star: -## Discord Channel -You can use this link to join the ABP Community Discord Server: https://discord.gg/abp +## Discord Server -## ABP Commercial +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. -See also [ABP Commercial](https://commercial.abp.io/) if you are looking for pre-built application modules, professional themes, code generation tooling and premium support for the ABP Framework. diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/en.json index 8470709c99..44ab5b3e31 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/en.json @@ -12,6 +12,7 @@ "CommunityWebSite": "ABP community website", "ManageAccount": "My Account | ABP.IO", "ManageYourProfile": "Manage your profile", - "ReturnToApplication": "Return to application" + "ReturnToApplication": "Return to application", + "IdentityUserNotAvailable:Deleted": "This email address is not available. Reason: Already deleted." } } diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/sv.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/sv.json new file mode 100644 index 0000000000..d5b7e713d9 --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/sv.json @@ -0,0 +1,18 @@ +{ + "culture": "sv", + "texts": { + "Account": "ABP-konto - Logga in och registrera dig | ABP.IO", + "Welcome": "VĂ€lkommen", + "UseOneOfTheFollowingLinksToContinue": "AnvĂ€nd nĂ„gon av följande lĂ€nkar för att fortsĂ€tta", + "FrameworkHomePage": "Ramverkets startsida", + "FrameworkDocumentation": "Dokumentation av ramverk", + "OfficialBlog": "Officiell blogg", + "CommercialHomePage": "Kommersiell hemsida", + "CommercialSupportWebSite": "Webbplats för kommersiellt stöd", + "CommunityWebSite": "ABP:s gemensamma webbplats", + "ManageAccount": "Mitt konto | ABP.IO", + "ManageYourProfile": "Hantera din profil", + "ReturnToApplication": "ÅtergĂ„ till ansökan", + "IdentityUserNotAvailable:Deleted": "Den hĂ€r e-postadressen Ă€r inte tillgĂ€nglig. Anledning till detta: Redan raderad." + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/sv.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/sv.json new file mode 100644 index 0000000000..f6b113895b --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/sv.json @@ -0,0 +1,640 @@ +{ + "culture": "sv", + "texts": { + "Permission:Organizations": "Organisationer", + "Permission:Manage": "Hantera organisationer", + "Permission:DiscountRequests": "RabattförfrĂ„gningar", + "Permission:DiscountManage": "Hantera rabattförfrĂ„gningar", + "Permission:Disable": "Avaktivera", + "Permission:Enable": "Aktivera", + "Permission:EnableSendEmail": "Aktivera skicka e-post", + "Permission:SendEmail": "Skicka e-post", + "Permission:NpmPackages": "NPM-paket", + "Permission:NugetPackages": "Nuget-paket", + "Permission:Maintenance": "UnderhĂ„ll", + "Permission:Maintain": "BehĂ„lla", + "Permission:ClearCaches": "Rensa cacheminnen", + "Permission:Modules": "Moduler", + "Permission:Packages": "Paket", + "Permission:Edit": "Redigera", + "Permission:Delete": "Radera", + "Permission:Create": "Skapa", + "Permission:Accounting": "Redovisning", + "Permission:Accounting:Quotation": "Offert", + "Permission:Accounting:Invoice": "Faktura", + "Menu:Organizations": "Organisationer", + "Menu:Accounting": "Redovisning", + "Menu:Packages": "Paket", + "Menu:DiscountRequests": "RabattförfrĂ„gningar", + "NpmPackageDeletionWarningMessage": "Detta NPM-paket kommer att raderas. Kan du bekrĂ€fta det?", + "NugetPackageDeletionWarningMessage": "Detta Nuget-paket kommer att raderas. Kan du bekrĂ€fta det?", + "ModuleDeletionWarningMessage": "Denna modul kommer att raderas. Kan du bekrĂ€fta det?", + "Name": "Namn", + "DisplayName": "Visa namn", + "ShortDescription": "Kort beskrivning", + "NameFilter": "Namn", + "CreationTime": "Skapelsetid", + "IsPro": "Är pro", + "IsFreeToActiveLicenseOwners": "Gratis för licensinnehavare", + "ShowOnModuleList": "Visa pĂ„ modullistan", + "EfCoreConfigureMethodName": "Konfigurera metodnamn", + "IsProFilter": "Är pro", + "ApplicationType": "Typ av applikation", + "Target": "MĂ„l", + "TargetFilter": "MĂ„l", + "ModuleClass": "Modul klass", + "NugetPackageTarget.DomainShared": "Delad domĂ€n", + "NugetPackageTarget.Domain": "DomĂ€n", + "NugetPackageTarget.Application": "TillĂ€mpning", + "NugetPackageTarget.ApplicationContracts": "Ansökan Kontrakt", + "NugetPackageTarget.HttpApi": "Http Api", + "NugetPackageTarget.HttpApiClient": "Http Api-klient", + "NugetPackageTarget.Web": "Webb", + "NugetPackageTarget.EntityFrameworkCore": "DeleteAllEntityFramework Core", + "NugetPackageTarget.MongoDB": "MongoDB", + "Edit": "Redigera", + "Delete": "Radera", + "Refresh": "Uppdatera", + "NpmPackages": "NPM-paket", + "NugetPackages": "Nuget-paket", + "NpmPackageCount": "Antal NPM-paket", + "NugetPackageCount": "Antal Nuget-paket", + "Module": "Moduler", + "ModuleInfo": "Modulinformation", + "CreateANpmPackage": "Skapa ett NPM-paket", + "CreateAModule": "Skapa en modul", + "CreateANugetPackage": "Skapa ett Nuget-paket", + "AddNew": "LĂ€gg till ny", + "PackageAlreadyExist{0}": "\"{0}\"-paketet Ă€r redan tillagt.", + "ModuleAlreadyExist{0}": "\"{0}\"-modulen Ă€r redan tillagd.", + "ClearCache": "Rensa cache", + "SuccessfullyCleared": "FramgĂ„ngsrikt rensad", + "Menu:NpmPackages": "NPM-paket", + "Menu:Modules": "Moduler", + "Menu:Maintenance": "UnderhĂ„ll", + "Menu:NugetPackages": "NuGet-paket", + "CreateAnOrganization": "Skapa en organisation", + "Organizations": "Organisationer", + "LongName": "LĂ„ngt namn", + "LicenseType": "Typ av licens", + "MissingLicenseTypeField": "FĂ€ltet för licenstyp Ă€r obligatoriskt!", + "LicenseStartTime": "Licensens starttid", + "LicenseEndTime": "Licensens sluttid", + "AllowedDeveloperCount": "TillĂ„tet antal utvecklare", + "UserNameOrEmailAddress": "AnvĂ€ndarnamn eller e-postadress", + "AddOwner": "LĂ€gg till Ă€gare", + "UserName": "AnvĂ€ndarnamn", + "Email": "E-post", + "Developers": "Utvecklare", + "AddDeveloper": "LĂ€gg till utvecklare", + "Create": "Skapa", + "UserNotFound": "AnvĂ€ndaren hittades inte", + "{0}WillBeRemovedFromDevelopers": "{0} Kommer att tas bort frĂ„n utvecklare, bekrĂ€ftar du?", + "{0}WillBeRemovedFromOwners": "{Kommer att tas bort frĂ„n Ă€garna, bekrĂ€ftar du?", + "{0}WillBeRemovedFromMembers": "{0} Kommer att tas bort frĂ„n medlemmar, bekrĂ€ftar du?", + "Computers": "Datorer", + "UniqueComputerId": "Unikt dator-ID", + "LastSeenDate": "Datum för senaste observation", + "{0}Computer{1}WillBeRemovedFromRecords": "Dator för {0} ({1}) kommer att tas bort frĂ„n register", + "OrganizationDeletionWarningMessage": "Organisationen kommer att raderas", + "DeletingLastOwnerWarningMessage": "En organisation mĂ„ste ha minst en Ă€gare! DĂ€rför kan du inte ta bort den hĂ€r Ă€garen", + "This{0}AlreadyExistInThisOrganization": "Denna {0} finns redan i denna organisation", + "AreYouSureYouWantToDeleteAllComputers": "Är du sĂ€ker pĂ„ att du vill radera alla datorer?", + "DeleteAll": "Radera alla", + "DoYouWantToCreateNewUser": "Vill du skapa en ny anvĂ€ndare?", + "MasterModules": "Master-moduler", + "OrganizationName": "Organisationens namn", + "CreationDate": "Datum för skapande", + "LicenseStartDate": "Licensens startdatum", + "LicenseEndDate": "Licensens slutdatum", + "OrganizationNamePlaceholder": "Organisationens namn...", + "TotalQuestionCountPlaceholder": "Totalt antal frĂ„gor...", + "RemainingQuestionCountPlaceholder": "KvarstĂ„ende frĂ„gor Ă€r...", + "LicenseTypePlaceholder": "Licenstyp...", + "CreationDatePlaceholder": "Datum för skapande...", + "LicenseStartDatePlaceholder": "Licensens startdatum...", + "LicenseEndDatePlaceholder": "Licensens slutdatum...", + "UsernameOrEmail": "AnvĂ€ndarnamn eller e-post", + "UsernameOrEmailPlaceholder": "AnvĂ€ndarnamn eller e-post...", + "Member": "Ledamot", + "PurchaseOrderNo": "Inköpsorder nr", + "QuotationDate": "Datum för offert", + "CompanyName": "Företagets namn", + "CompanyAddress": "Företagets adress", + "Price": "Pris", + "DiscountText": "Rabatt text", + "DiscountQuantity": "Rabatt kvantitet", + "DiscountPrice": "Rabatterat pris", + "Quotation": "Offert", + "ExtraText": "Extra text", + "ExtraAmount": "Extra belopp", + "DownloadQuotation": "Ladda ner offert", + "Invoice": "Faktura", + "TaxNumber": "Skattenummer", + "InvoiceNumber": "Fakturanummer", + "InvoiceDate": "Fakturadatum", + "InvoiceNote": "Fakturanota", + "Quantity": "Kvantitet", + "AddProduct": "LĂ€gg till produkt", + "AddProductWarning": "Du mĂ„ste lĂ€gga till produkt!", + "TotalPrice": "Totalt pris", + "Generate": "Generera", + "MissingQuantityField": "KvantitetsfĂ€ltet Ă€r obligatoriskt!", + "MissingPriceField": "PrisfĂ€ltet Ă€r obligatoriskt!", + "CodeUsageStatus": "Status", + "Country": "Land", + "DeveloperCount": "Antal utvecklare", + "RequestCode": "BegĂ€r kod", + "WebSite": "Webbplats", + "GithubUsername": "AnvĂ€ndarnamn för Github", + "PhoneNumber": "Telefonnummer", + "ProjectDescription": "Projektbeskrivning", + "Referrer": "HĂ€nvisare", + "DiscountRequests": "BegĂ€ran om rabatt", + "Copylink": "Kopiera lĂ€nk", + "Disable": "Avaktivera", + "Enable": "Aktivera", + "EnableSendEmail": "Aktivera skicka e-post", + "SendEmail": "Skicka e-post", + "SuccessfullyDisabled": "FramgĂ„ngsrikt avaktiverad", + "SuccessfullyEnabled": "FramgĂ„ngsrikt aktiverad", + "EmailSent": "Skickad e-post", + "SuccessfullySent": "FramgĂ„ngsrikt skickat", + "SuccessfullyDeleted": "FramgĂ„ngsrikt raderad", + "DiscountRequestDeletionWarningMessage": "BegĂ€ran om rabatt kommer att raderas", + "BusinessType": "Typ av verksamhet", + "TotalQuestionCount": "Totalt antal frĂ„gor", + "RemainingQuestionCount": "Antal Ă„terstĂ„ende frĂ„gor", + "TotalQuestionMustBeGreaterWarningMessage": "TotalQuestionCount mĂ„ste vara större Ă€n RemainingQuestionCount !", + "QuestionCountsMustBeGreaterThanZero": "TotalQuestionCount och RemainingQuestionCount mĂ„ste vara noll eller större Ă€n noll!", + "UnlimitedQuestionCount": "ObegrĂ€nsat antal frĂ„gor", + "Notes": "Anteckningar", + "Menu:Community": "Gemenskap", + "Menu:Posts": "InlĂ€gg", + "Wait": "VĂ€nta", + "Approve": "GodkĂ€nna", + "Reject": "Avvisa", + "Details": "Detaljer", + "Url": "Url", + "Title": "Titel", + "ContentSource": "KĂ€lla för innehĂ„ll", + "Status": "Status", + "ReadPost": "LĂ€s inlĂ€gget", + "PostHasBeenWaiting": "Posten har vĂ€ntat", + "PostHasBeenApproved": "InlĂ€gget har godkĂ€nts", + "PostHasBeenRejected": "InlĂ€gget har avvisats", + "Permission:Community": "Gemenskap", + "Permission:CommunityPost": "Post", + "Link": "Link", + "Enum:ContentSource:0": "Github", + "Enum:ContentSource:1": "Extern", + "Enum:Status:0": "VĂ€ntar pĂ„", + "Enum:Status:1": "Avvisad", + "Enum:Status:2": "GodkĂ€nd", + "Summary": "Sammanfattning", + "AuthorName": "Författarens namn", + "CoverImage": "Omslagsbild", + "RemoveCacheConfirmationMessage": "Är du sĂ€ker pĂ„ att du tar bort cacheminnet för \"{0}\" -posten?", + "SuccessfullyRemoved": "FramgĂ„ngsrikt rensad", + "RemoveCache": "Ta bort cachen", + "Language": "SprĂ„k", + "Optional": "Valfritt", + "CreatePostLanguageInfo": "Det sprĂ„k som inlĂ€gget Ă€r skrivet pĂ„", + "Enum:ContentSource:2": "VideoinlĂ€gg", + "VideoPreview": "Förhandsgranskning av video", + "VideoPreviewErrorMessage": "Angiven video-URL kunde inte hĂ€mtas frĂ„n Youtube. Detta kan orsakas av att videon Ă€r privat eller att den angivna webbadressen inte Ă€r tillgĂ€nglig.", + "DeleteCoverImage": "Ta bort omslagsbild", + "DeleteCoverImageConfirmationMessage": "Är du sĂ€ker att du vill ta bort omslagsbilden för \"{0}\"?", + "DeleteCoverImageSuccessMessage": "Omslagsbilden har raderats framgĂ„ngsrikt", + "PaymentsOf": "Betalningar av", + "ShowPaymentsOfOrganization": "Betalningar", + "Date": "Datum", + "Products": "Produkter", + "TotalAmount": "Totalt belopp", + "Currency": "Valuta", + "Gateway": "Gateway", + "State": "Stat", + "FailReason": "Orsak till misslyckande", + "ReIndexAllPosts": "Återindexera alla inlĂ€gg", + "ReIndexAllPostsConfirmationMessage": "Är du sĂ€ker pĂ„ att du vill indexera om alla inlĂ€gg?", + "SuccessfullyReIndexAllPosts": "Alla inlĂ€gg har framgĂ„ngsrikt indexerats om.", + "Permission:FullSearch": "Fulltextsökning", + "Menu:CliAnalytics": "CLI Analys", + "Menu:Reports": "Dynamiska rapporter", + "TemplateName": "Mallens namn", + "TemplateVersion": "Mallversion", + "DatabaseProvider": "Databasleverantör", + "IsTiered": "Är Tiered", + "ProjectName": "Projektets namn", + "Username": "AnvĂ€ndarens namn", + "Tool": "Verktyg", + "Command": "Kommando", + "UiFramework": "Ramverk för anvĂ€ndargrĂ€nssnitt", + "Options": "Alternativ", + "CliAnalytics": "Cli Analytics", + "Reports": "Dynamiska rapporter", + "Permission:CliAnalyticses": "Cli Analyticses", + "Permission:CliAnalytics": "Cli Analytics", + "Permission:Reports": "Rapporter", + "Search": "Sök", + "ClearFilter": "Rensa filter", + "LicensePrivateKey": "Licens privat nyckel", + "LicensePublicKey": "Licens offentlig nyckel", + "ApiKey": "NuGet API-nyckel", + "ShowInvoiceRequestsOfOrganization": "FakturaförfrĂ„gningar", + "ShowQuestionsOfOrganization": "FrĂ„gor och svar", + "Question": "FrĂ„ga", + "Open": "Öppna", + "Questions": "FrĂ„gor och svar", + "InvoiceRequests": "FakturaförfrĂ„gningar", + "Address": "Adress", + "TaxNo": "Skatt Nej", + "Permission:InvoiceRequest": "FakturabegĂ€ran", + "Permission:Question": "FrĂ„ga", + "AddNoteSuccessMessage": "Not framgĂ„ngsrikt tillagd", + "NameSurname": "Namn Efternamn", + "Note": "Notera", + "Add": "LĂ€gg till", + "ProjectDownloads": "Projektnedladdningar", + "ShowProjectDownloadsOfOrganization": "Projektnedladdningar", + "ShowAuditLogsOfOrganization": "Granskningsloggar", + "Enum:EntityChangeType:0": "Skapad", + "Enum:EntityChangeType:1": "Uppdaterad", + "Enum:EntityChangeType:2": "Borttagen", + "TenantId": "HyresgĂ€st-ID", + "ChangeTime": "Ändra tid", + "EntityTypeFullName": "FullstĂ€ndigt namn pĂ„ entitetstyp", + "AuditLogsFor{0}Organization": "Granskningsloggar för organisationen \"{0}\"", + "Permission:EntityChange": "FörĂ€ndring av enhet", + "Permission:ProjectDownload": "Projekt Ladda ner", + "Permission:PaymentRequest": "BegĂ€ran om betalning", + "CreatorEmailAddress": "E-postadress till skaparen", + "EmailSendDate": "Datum för e-postutskick", + "PaymentRequestsFor{0}Organization": "BetalningsförfrĂ„gningar för \"{0}\" organisation", + "PaymentDetails": "Betalningsinformation", + "PaymentProduct": "Betalning Produkt", + "ProductName": "Produktens namn", + "Code": "Kod", + "GenerateInvoice": "Generera faktura", + "ExportOrganizationsToExcel": "Exportera till Excel", + "ThisExtensionIsNotAllowed": "Denna förlĂ€ngning Ă€r inte tillĂ„ten.", + "TheFileIsTooLarge": "Filen Ă€r för stor!", + "PostDeletionConfirmationMessage": "Är du sĂ€ker pĂ„ att du vill radera det hĂ€r inlĂ€gget?", + "ChooseCoverImage": "VĂ€lj en omslagsbild...", + "Menu:Quotation": "Offert", + "Menu:Invoice": "Faktura", + "Menu:Quotation/Invoice": "Offert/faktura", + "Menu:PaymentRequests": "BetalningsförfrĂ„gningar", + "Permission:PaymentRequests": "BetalningsförfrĂ„gningar", + "PaymentRequests": "BetalningsförfrĂ„gningar", + "Creator": "Skapare", + "ExtraProperties": "Extra egenskaper", + "Organization": "Organisation", + "Waiting": "VĂ€ntar pĂ„", + "Completed": "FĂ€rdigstĂ€lld", + "Failed": "Misslyckades", + "PaymentRequestDeletionWarningMessage": "Denna betalningsbegĂ€ran kommer att raderas. Kan du bekrĂ€fta det?", + "Payment": "Betalning", + "AddPayment": "LĂ€gg till betalning", + "Enum:PurchaseType:1": "Ny licens", + "Enum:PurchaseType:2": "LicensförlĂ€ngning", + "Enum:PurchaseType:3": "Uppgradering av licens", + "Enum:PurchaseType:4": "Ytterligare utvecklare", + "LicenceType": "Typ av licens", + "PurchaseType": "Typ av köp", + "ReceiptNo": "Kvitto nr", + "PaymentTime": "Betalningstid", + "ProductPrice": "Produktens pris", + "AdditionalDeveloper": "Ytterligare utvecklare", + "ThisPaymentHasBeenAlreadyUsed": "Denna betalning har redan anvĂ€nts", + "PaymentTimeCannotBeFutureTime": "Betalningstid kan inte vara en framtida tid!", + "SaveAndDownload": "Spara och ladda ner", + "BillingInfo": "Faktureringsinformation", + "DeleteInvoice": "Ta bort faktura", + "PaymentStateSetTo": "Betalningsstatus satt till {0}", + "ChangeState": "Ändra tillstĂ„nd", + "Permission:TrialLicense": "Trial-licens", + "Menu:TrialLicenses": "PreliminĂ€ra licenser", + "TrialLicenses": "PreliminĂ€ra licenser", + "UserNameFilter": "AnvĂ€ndarnamn", + "TrialLicenseStatusFilter": "Status", + "TrialLicenseStartDateFilter": "Startdatum", + "TrialLicenseEndDateFilter": "Slutdatum", + "FirstName": "Förnamn", + "LastName": "Efternamn", + "StartDate": "Startdatum", + "EndDate": "Slutdatum", + "PurchasedDate": "Inköpsdatum", + "OrganizationDetail": "Organisation Detalj", + "TrialLicenseStatus": "Status för provlicens", + "TrialLicenseDetail": "Trial licens detalj", + "AcceptsMarketingCommunications": "Marknadskommunikation", + "PurposeOfUsage": "Syfte med anvĂ€ndningen", + "CountryName": "Landets namn", + "CompanySize": "Företagets storlek", + "DetailTrialLicense": "Detaljer", + "Requested": "BegĂ€rd", + "Activated": "Aktiverad", + "PurchasedToNormalLicense": "Köpte", + "Expired": "UtgĂ„tt", + "TrialLicenseDeletionWarningMessage": "Är du sĂ€ker pĂ„ att du vill ta bort testlicensen? Testlicens, organisation och supportkonton kommer att raderas!", + "LicenseCategoryFilter": "Licenskategori", + "Permission:SendWelcomeEmail": "Skicka vĂ€lkomstmejl", + "SendWelcomeEmail": "Skicka vĂ€lkomstmejl", + "SendWelcomeEmailWarningMessage": "Är du sĂ€ker pĂ„ att du vill skicka ett vĂ€lkomstmeddelande till organisationens medlemmar?", + "SendWelcomeEmailSuccessMessage": "VĂ€lkomstmejl skickat framgĂ„ngsrikt!", + "Activate": "Aktivera", + "ActivateTrialLicenseWarningMessage": " NĂ€r du aktiverar en testlicens skickas ett vĂ€lkomstmeddelande till anvĂ€ndaren. Vill du aktivera det?", + "ActivateTrialLicenseSuccessMessage": "Aktiverades framgĂ„ngsrikt och vĂ€lkomstmeddelandet skickades till organisationsmedlemmarna.", + "PaymentRequestId": "BetalningsbegĂ€ran Id", + "AdditionalDeveloperCount": "Ytterligare antal utvecklare", + "LicensePrice": "Licenspris", + "PurchaseDate": "Köpdatum", + "IsAbpBookDownloaded": "Mastering ABP Book nedladdad?", + "IsMasteringAbpBookDownloadEnabled": "ABP Book nedladdning aktiverad", + "Permission:Accounting:CustomPaymentLinkGenerator": "Anpassad betalningslĂ€nk", + "CustomPaymentLink": "Anpassad betalningslĂ€nk", + "Menu:CustomPaymentLink": "Anpassad betalningslĂ€nk", + "Amount": "Belopp", + "GenerateCustomPaymentLink": "Generera anpassad betalningslĂ€nk", + "GeneratedPaymentLink": "Genererad betalningslĂ€nk", + "CopyText": "Kopiera text", + "Permission:CommunityEvents": "HĂ€ndelser", + "Menu:Events": "HĂ€ndelser", + "Events": "HĂ€ndelser", + "EventType": "Typ av hĂ€ndelse", + "Number": "Antal", + "RegistrationURL": "URL för registrering", + "URL": "URL", + "EventDeletionConfirmationMessage": "Är du sĂ€ker pĂ„ att du vill ta bort den hĂ€r hĂ€ndelsen?", + "Enum:EventType:0": "Samtal med gemenskapen", + "CreateAnEvent": "Skapa ett evenemang", + "Permission:CommunitySpeakers": "Högtalare", + "CreateASpeaker": "Skapa en högtalare", + "Speakers": "Högtalare", + "Image": "Bild", + "GithubURL": "URL till Github", + "SpeakerDeletionConfirmationMessage": "Är du sĂ€ker att du vill ta bort den hĂ€r högtalaren?", + "Menu:Speakers": "Högtalare", + "ChooseSpeakerImage": "VĂ€lj en högtalarbild...", + "SpeakerImage": "Bild pĂ„ högtalare", + "AddSpeaker": "LĂ€gg till högtalare", + "ShowPurchaseItemsOfOrganizations": "Köp av föremĂ„l", + "Enum:OrganizationPurchaseState:0": "Ej levererad", + "Enum:OrganizationPurchaseState:1": "Levereras", + "PurchaseItems": "Köp av föremĂ„l", + "SuccessfullyUpdated": "FramgĂ„ngsrikt uppdaterad", + "SuccessfullyAdded": "FramgĂ„ngsrikt tillagt", + "PurchaseState": "Status för köp", + "ShowBetweenDayCount": "Visa mellan dagarna", + "PurchaseOrder": "Inköpsorder", + "ShowCreateInvoiceOfOrganization": "Skapa faktura", + "ShowCreateQuotationOfOrganization": "Skapa offert/faktura", + "BookDiscounts": "Boka rabatter", + "Permission:BookDiscount": "Boka rabatt", + "Menu:BookDiscounts": "Boka rabatter", + "BookType": "Typ av bok", + "PurchasePlatform": "Plattform för inköp", + "StartTime": "Starttid", + "EndTime": "Sluttid", + "CreateABookDiscount": "Skapa en bokrabatt", + "BookDiscountDeletionConfirmationMessage": "Är du sĂ€ker pĂ„ att du vill ta bort den hĂ€r bokrabatten?", + "CustomPaymentFlexSwitchDescription": "Med licens", + "AllowFeatureUpgradeOnLicenseExpire": "TillĂ„t uppgradering av funktioner nĂ€r licensen löper ut", + "Deleted{0}": "[Raderad {0}]", + "Tags": "Etiketter", + "SetTagsInfo": "Taggar ska vara kommaseparerade. Exempel: CSharp, Entity Framework", + "RejectTrialLicenseWarningMessage": "Är du sĂ€ker pĂ„ att du vill avvisa denna begĂ€ran om testlicens?", + "ExportToExcel": "Exportera till Excel", + "OverallTotalPrice": "Totalt totalpris", + "OverallDiscountPrice": "Totalt Rabatt Pris", + "OverallDiscountText": "Övergripande rabatt Text", + "SelectReport": "- VĂ€lj rapport", + "NoDataAvailable": "Inga uppgifter tillgĂ€ngliga", + "StatisticsOfCachedContents": "Statistik över cachelagrat NuGet-paketinnehĂ„ll för nuget.abp.io", + "Compact": "Kompakt", + "EditSettings": "Redigera instĂ€llningar", + "CurrentEstimatedSize": "Nuvarande uppskattad storlek", + "CurrentEntryCount": "Aktuellt antal poster", + "TotalHits": "Totalt antal trĂ€ffar", + "TotalMisses": "Totalt antal missar", + "NoResponseFrom": "Inget svar frĂ„n", + "ContentCacheSlidingExpirationByDay": "InnehĂ„llscache glidande utgĂ„ng per dag", + "MaxDaysForCaching": "Max dagar för cachelagring", + "Enabled": "Aktiverad", + "Menu:NugetPackagesContentCache": "NuGet Cache", + "NugetPackagesContentCache": "NuGet Cache för innehĂ„ll", + "SlidingExpritionByDayInfo": "HĂ€mtar eller anger hur lĂ€nge en cache-post kan vara inaktiv (t.ex. inte Ă„tkommen) innan den tas bort. Detta kommer inte att förlĂ€nga postens livstid utöver den absoluta expirationen.", + "MaxDaysForCachingInfo": "HĂ€mtar eller anger en absolut utgĂ„ngstid i förhĂ„llande till nu.", + "CurrentEstimatedSizeInfo": "Anger en uppskattad summa av alla NuGet-pakets innehĂ„llsstorlek som för nĂ€rvarande finns i minnescachen", + "CurrentEntryCountInfo": "Anger antalet instanser som för nĂ€rvarande finns i minnescachen.", + "TotalHitsInfo": "Anger det totala antalet cache-missar. En cachetrĂ€ff intrĂ€ffar nĂ€r en fil begĂ€rs frĂ„n en cache och cachen kan uppfylla denna begĂ€ran.", + "TotalMissesInfo": "Anger det totala antalet trĂ€ffar i cachen. En cachemiss Ă€r nĂ€r cacheminnet inte innehĂ„ller det begĂ€rda innehĂ„llet.", + "Permission:VersionHistory": "Versionshistorik", + "Caches": "Cacher", + "VersionHistories": "Versionshistorik", + "Version": "Version", + "PublishDate": "Publiceringsdatum", + "IsStableVersion": "Stabil version", + "IsActive": "Aktiv", + "NewVersion": "Ny version", + "VersionHistoryDeletionConfirmationMessage": "Är du sĂ€ker pĂ„ att du vill radera den hĂ€r versionen?", + "CreateAbpConsultantLogoInfo": "Maximal filstorlek: 1MB
Filtyper som stöds: jpg, jpeg, png, SVG, WebP", + "UrlCode": "Url-kod", + "Clear": "Klart", + "Permission:AbpConsultant": "ABP Konsult", + "Menu:AbpConsultants": "ABP Konsulter", + "CreateAbpConsultant": "Skapa ABP-konsult", + "UrlCodeIsNotAvailable": "Url-koden anvĂ€nds av en annan ABP-konsult.", + "AbpConsultants": "ABP Konsulter", + "AbpConsultant": "ABP Konsult", + "AbpConsultantEdit": "Edit ABP Konsult", + "AbpConsultantCreate": "Skapa ABP-konsult", + "WhoWeAreItem": "Vilka vi Ă€r Artikel", + "FieldIsRequired": "{0} krĂ€vs.", + "FieldIsNotValid": " {0} Ă€r inte giltig.", + "InterestedLicenseType": "Intresserad licenstyp", + "MoveWaitList": "Flytta till vĂ€ntelista", + "CommunityLinkTitle": "Öppna pĂ„ community-webbplatsen", + "CommunityLink": "Link", + "IpAddress": "Ip-adress", + "ReloadFromSource": "Ladda om frĂ„n kĂ€llan", + "ReloadFromSourceConfirmationMessage": "Detta inlĂ€gg kommer att uppdateras frĂ„n \"{0}\". Vill du fortsĂ€tta?", + "UnitPrice": "Enhetspris", + "OverallDiscountAmount": "Totalt rabattbelopp", + "DiscountAmount": "Diskonteringsbelopp", + "FullChangeHistory": "FullstĂ€ndig Ă€ndringshistorik", + "Permission:RefreshReleaseLogs": "Uppdatera release-loggar", + "ReleaseLogs": "Release Loggar", + "AuthorUserName": "AnvĂ€ndarnamn för författare", + "Type": "Typ", + "TotalDiscount": "Total rabatt", + "SubTotal": "Subtotal", + "TotalDue": "Totalt förfallna", + "QuotationNo": "Offert nr", + "ValidTill": "Giltig till och med", + "QuotationNote": "Citatanteckning", + "QuotationTemplate.Address:": "Adress:", + "QuotationTemplate.VATNo:": "Momsregistreringsnummer", + "QuotationTemplate.Phone:": "Telefon:", + "QuotationTemplate.E-mail:": "E-post:", + "QuotationTemplate.Quotation": "Offert", + "QuotationTemplate.To": "Till", + "QuotationTemplate.Details": "Detaljer", + "QuotationTemplate.QuotationNo:": "Citat #:", + "QuotationTemplate.IssueDate:": "Utgivningsdatum:", + "QuotationTemplate.ValidTill:": "Giltig till:", + "QuotationTemplate.ValidDays": "{0} dagar", + "QuotationTemplate.Description": "Beskrivning", + "QuotationTemplate.UnitPrice": "Enhetspris", + "QuotationTemplate.Qty": "Antal", + "QuotationTemplate.Discount": "Rabatt", + "QuotationTemplate.Total": "Totalt", + "QuotationTemplate.Notes": "Anteckningar", + "QuotationTemplate.SubTotal:": "Sub Total :", + "QuotationTemplate.Tax/VAT:": "Skatt / moms (%{0}) :", + "QuotationTemplate.TotalDiscount:": "Total rabatt :", + "QuotationTemplate.TOTALDUE:": "TOTAL SKULD :", + "QuotationTemplate.BankAccount": "Information om vĂ„rt bankkonto finns pĂ„ {0}.", + "Permission:Raffles": "Lottdragning", + "Permission:Draw": "Dragning", + "Menu:Raffles": "Raffles", + "RaffleIsNotDrawable": "Lottdragning Ă€r inte dragbar", + "WinnerCountMustBeGreaterThanZero": "Antalet vinnare mĂ„ste vara större Ă€n noll", + "FullDescription": "FullstĂ€ndig beskrivning", + "VisibilityStartDate": "Synlighet Startdatum", + "VisibilityEndDate": "Slutdatum för synlighet", + "RaffleDate": "Lottdragning Datum", + "SubscriptionCode": "Prenumerationskod", + "GroupCode": "Gruppkod", + "MaxWinnerCount": "Max antal vinnare", + "ReDraw": "Rita om", + "EditRaffle": "Redigera utlottning", + "Raffles": "Raffles", + "CreateARaffle": "Skapa en utlottning", + "Draw": "Dragning", + "Enum:RaffleStatus:0": "Aktiv", + "Enum:RaffleStatus:1": "NĂ€sta", + "Enum:RaffleStatus:2": "Tidigare", + "DrawDone": "Ritning klar", + "HomePageShowType": "Startsida Visa typ", + "None": "Ingen", + "Card": "Kort", + "Horizontal": "Horisontell", + "Winners": "Vinnare", + "StartDateMustBeLessThanEndDate": "Startdatum mĂ„ste vara mindre Ă€n slutdatum", + "VisibilityStartDateMustBeLessThanVisibilityEndDate": "Startdatum för synlighet mĂ„ste vara mindre Ă€n slutdatum för synlighet", + "StartDateMustBeGreaterThanVisibilityStartDate": "Startdatum mĂ„ste vara större Ă€n startdatum för synlighet", + "EndDateMustBeLessThanVisibilityEndDate": "Slutdatum mĂ„ste vara mindre Ă€n visibilitetens slutdatum", + "DrawnDone": "Ritad Gjord", + "AddColor": "LĂ€gg till fĂ€rg", + "Colors": "FĂ€rger", + "RemoveColor": "Ta bort fĂ€rg", + "MaxColorCountWarning": "Du kan lĂ€gga till upp till {0} fĂ€rger", + "MinColorCountWarning": "Du mĂ„ste lĂ€gga till minst {0} fĂ€rger", + "RaffleDeletionConfirmationMessage": "Är du sĂ€ker pĂ„ att du vill ta bort den hĂ€r utlottningen?", + "CreateRaffle": "Skapa utlottning", + "RemoveImage": "Ta bort bild", + "SavedSuccessfully": "Sparades framgĂ„ngsrikt", + "Menu:CommunityTalks": "Samtal med gemenskapen", + "Menu:Conferences": "Konferenser", + "Menu:OtherLiveEvents": "Andra live-evenemang", + "Menu:SponsoredConferences": "Sponsrade konferenser", + "Logo": "Logotyp", + "Slug": "Snigel", + "CompanyUrl": "Företagets webbadress", + "TalkTitle": "Titel pĂ„ samtal", + "AbstractTopic": "Sammanfattning Ämne", + "Bio": "Bio", + "LinkedIn": "LinkedIn", + "Github": "Github", + "Twitch": "Twitch", + "Youtube": "Youtube", + "Twitter": "Twitter", + "PersonalWebsite": "Personlig webbplats", + "VideoId": "Video Id", + "Order": "BestĂ€llning", + "Image1x1": "Bild 1x1", + "Image16x9": "Bild 16x9", + "Banner": "Banner", + "Speaker": "Högtalare", + "SessionDate": "Datum för session", + "AddSession": "LĂ€gg till session", + "AddSponsor": "LĂ€gg till sponsor", + "SponsorLogo": "Sponsorlogotyp", + "RegistrationUrl": "Url för registrering", + "AllowAbpStudioBetaAccess": "TillĂ„t Ă„tkomst till ABP Studio Beta", + "TotalQuestionCanNotBeNullMessage": "Total frĂ„ga kan inte vara null", + "Permission:OrganizationAutoRenewalPayments": "Betalningar för automatisk förnyelse av organisation", + "Permission:RetryFailedPayments": "Försök pĂ„ nytt med misslyckade betalningar", + "AutoRenewalIsNotEnabled": "Automatisk förnyelse Ă€r inte aktiverad!", + "LicenseIsNotExpired": "Licensen har inte gĂ„tt ut!", + "PaymentNotFound": "Betalning hittades inte!", + "PaymentAlreadyTried": "Betalning redan försökt!", + "PaymentIsNotFailed": "Betalning Ă€r inte misslyckad!", + "OrganizationIdIsNull": "OrganizationId Ă€r null!", + "Menu:AutoRenewals": "Förnyelse av bilar", + "OrganizationAutoRenewalPayments": "Betalningar för automatisk förnyelse av organisation", + "PaymentDate": "Betalningsdag", + "TryCount": "Försök rĂ€kna", + "ErrorMessage": "Felmeddelande", + "ErrorCode": "Felkod", + "CreditCard": "Kreditkort", + "BuyerName": "Köparens namn", + "BuyerSurname": "Köparens efternamn", + "BuyerEmail": "Köparens e-post", + "AutoRenewalStartTime": "Starttid för automatisk förnyelse", + "AutoRenewalEndTime": "Sluttid för automatisk förnyelse", + "AutoRenewalEnabled": "Automatisk förnyelse aktiverad", + "LastAutoRenewalPaymentTime": "Sista betalningstid för automatisk förnyelse", + "OrganizationDoesNotHaveACreditCard": "Organisationen har inte ett kreditkort!", + "OrganizationDoesNotHaveACreditCardInGateway": "Organisationen har inte ett kreditkort i porten!", + "Permission:EditWinners": "Redigera vinnare", + "Permission:ChangeDrawingStatus": "Ändra ritningsstatus", + "Menu:Licenses": "Licensiering", + "OrganizationId": "Organisations-ID", + "RemoveAllWinnersConfirmationMessage": "Är du sĂ€ker pĂ„ att du vill ta bort alla vinnare?", + "AutoRenewals": "Förnyelse av bilar", + "OrganizationHasCreditCard": "Organisationen har kreditkort. VĂ€nligen ta bort kreditkortet först!", + "DisplayName:DontSendEmailForLicenseExpire": "Skicka inte e-post för att licensen löper ut", + "DontSendEmailForLicenseExpire": "Skicka inte e-post för att licensen löper ut", + "SuccessfullyChanged": "FramgĂ„ngsrikt Ă€ndrat", + "WinnerCountMustBeLessThanMaxWinnerCount": "Antalet vinnare mĂ„ste vara mindre Ă€n det maximala antalet vinnare", + "NoChangesDetected": "Inga förĂ€ndringar upptĂ€ckta", + "ProductCount": "ProduktrĂ€kning", + "Actions": "ÅtgĂ€rder", + "CreateInvoice": "Skapa faktura", + "IsVisible": "Synlig", + "Menu:Testimonials": "VittnesmĂ„l", + "TestimonialDeletionConfirmationMessage": "Är du sĂ€ker pĂ„ att du vill ta bort detta vittnesmĂ„l?", + "FullName": "FullstĂ€ndigt namn", + "TestimonialText": "Text i vittnesmĂ„l", + "ExperienceYear": "ErfarenhetsĂ„r", + "Position": "Titel", + "YearsOfExperience": "ErfarenhetsĂ„r", + "AllowedLicenses": "TillĂ„tna licenser", + "AllowedModules": "TillĂ„tna moduler", + "ModuleName": "Modulens namn", + "NonYet": "Inte Ă€nnu", + "Permission:Testimonials": "VittnesmĂ„l", + "SelectCompanySizePlaceholder": "Företagets storlek", + "SelectExperienceYearPlaceholder": "ErfarenhetsĂ„r", + "SelectCountryPlaceholder": "Land", + "DeleteImageConfirmationMessage": "Är du sĂ€ker att du vill ta bort bilden för \"{0}\"?", + "DeleteImageSuccessMessage": "Bilden har raderats framgĂ„ngsrikt", + "DeleteImage": "Ta bort bild", + "NetTerms": "Villkor (dagar)", + "Menu:DynamicReports": "Dynamiska rapporter", + "Menu:Others": "Övriga", + "Menu:Packs&Modules": "Paket & moduler", + "ReleaseCaches": "Frigör cachen", + "Menu:HeroSections": "HjĂ€lte-sektioner", + "HeroSections": "HjĂ€lte-sektioner", + "DynamicReports": "Dynamiska rapporter", + "Menu:ReportsMenu": "Rapporter", + "Permission:HeroSections": "HjĂ€lte-sektioner", + "RedirectLink": "Omdirigera lĂ€nk", + "HeroSectionsDeletionConfirmationMessage": "Är du sĂ€ker pĂ„ att du vill ta bort hjĂ€lteavsnittet?", + "AbpStudioName": "Abp Studio namn" + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/sv.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/sv.json new file mode 100644 index 0000000000..9bcca4c170 --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/sv.json @@ -0,0 +1,256 @@ +{ + "culture": "sv", + "texts": { + "Volo.AbpIo.Domain:010004": "Maximalt antal medlemmar uppnĂ„tt!", + "Volo.AbpIo.Domain:010005": "Maximalt antal Ă€gare uppnĂ„tt!", + "Volo.AbpIo.Domain:010006": "Den hĂ€r anvĂ€ndaren Ă€r redan Ă€gare i den hĂ€r organisationen!", + "Volo.AbpIo.Domain:010007": "Den hĂ€r anvĂ€ndaren Ă€r redan en utvecklare i den hĂ€r organisationen!", + "Volo.AbpIo.Domain:010008": "TillĂ„tet antal utvecklare kan inte vara mindre Ă€n nuvarande antal utvecklare!", + "Volo.AbpIo.Domain:010009": "TillĂ„tet antal utvecklare kan inte vara mindre Ă€n 0!", + "Volo.AbpIo.Domain:010010": "Maximalt antal mac-adresser har överskridits!", + "Volo.AbpIo.Domain:010011": "Personlig licens kan inte ha mer Ă€n 1 utvecklare!", + "Volo.AbpIo.Domain:010012": "Licensen kan inte förlĂ€ngas en mĂ„nad efter att licensen har löpt ut!", + "Volo.AbpIo.Domain:020001": "Det gick inte att ta bort detta NPM-paket eftersom \"{NugetPackages}\" Nuget-paket Ă€r beroende av detta paket.", + "Volo.AbpIo.Domain:020002": "Det gick inte att ta bort detta NPM-paket eftersom \"{Moduler}\" Moduler anvĂ€nder detta paket.", + "Volo.AbpIo.Domain:020003": "Det gick inte att ta bort detta NPM-paket eftersom \"{Modules}\" Moduler anvĂ€nder det hĂ€r paketet och \"{NugetPackages}\" Nuget-paket Ă€r beroende av detta paket.", + "Volo.AbpIo.Domain:020004": "Det gick inte att ta bort detta Nuget-paket eftersom \"{Moduler}\" Moduler anvĂ€nder detta paket.", + "Volo.AbpIo.Domain:030000": "Du har redan avslutat din provperiod.", + "Volo.AbpIo.Domain:030001": "Det hĂ€r organisationsnamnet finns redan.", + "Volo.AbpIo.Domain:030002": "Efter aktivering kan du inte Ă€ndra testlicensen till -requested- status!", + "Volo.AbpIo.Domain:030003": "Det finns ingen sĂ„dan status!", + "Volo.AbpIo.Domain:030004": "Status kunde inte Ă€ndras pĂ„ grund av ett ovĂ€ntat fel!", + "Volo.AbpIo.Domain:030005": "Start- och slutdatum kan uppdateras nĂ€r testlicensen Ă€r i statusen -aktiverad!", + "Volo.AbpIo.Domain:030006": "Slutdatumet mĂ„ste vara större Ă€n startdatumet!", + "Volo.AbpIo.Domain:030007": "Denna testlicens har redan aktiverats!", + "Volo.AbpIo.Domain:030008": "Köpdatumet kan endast stĂ€llas in nĂ€r statusen Ă€r -köpt-!", + "Volo.AbpIo.Domain:030009": "AnvĂ€ndaren hittades inte!", + "Volo.AbpIo.Domain:030010": "För att köpa testlicensen mĂ„ste du först aktivera din testlicens!", + "Volo.AbpIo.Domain:030011": "Du kan inte ta bort en testlicens nĂ€r den Ă€r köpt!", + "Volo.AbpIo.Domain:030012": "En anvĂ€ndare har endast rĂ€tt till 1 gratis provperiod. Du har redan anvĂ€nt din testlicens.", + "Volo.AbpIo.Domain:030013": "En anvĂ€ndare med en aktiv licens kan inte starta en testlicens.", + "Volo.AbpIo.Domain:040000": "Telemetri finns redan!", + "Volo.AbpIo.Domain:050000": "Organisationen har kreditkort. Du kan inte ta bort det!", + "Volo.AbpIo.Domain:070000": "Organisationsnamnet fĂ„r endast innehĂ„lla latinska bokstĂ€ver, siffror, punkter och bindestreck!", + "Volo.AbpIo.Domain:070001": "Företagsnamnet fĂ„r endast innehĂ„lla latinska bokstĂ€ver, siffror, punkter, mellanslag och bindestreck!", + "WantToLearn?": "Vill du lĂ€ra dig mer?", + "ReadyToGetStarted?": "Är du redo att komma igĂ„ng?", + "JoinOurCommunity": "GĂ„ med i vĂ„r community", + "GetStartedUpper": "KOM IGÅNG", + "ForkMeOnGitHub": "Fork mig pĂ„ GitHub", + "Features": "Funktioner", + "GetStarted": "Kom igĂ„ng", + "Documents": "Dokument", + "Community": "Gemenskap", + "ContributionGuide": "Bidragsguide", + "Blog": "Blogg", + "Commercial": "Kommersiell", + "MyAccount": "Mitt konto", + "Permission:License": "Licens", + "Permission:UserInfo": "AnvĂ€ndarinformation", + "SeeDocuments": "Se dokument", + "Samples": "Prover", + "Framework": "Ramverk", + "Support": "Stöd", + "FreeDDDBook": "Gratis e-bok om DDD", + "New": "Nya", + "Volo.AbpIo.Domain:020005": "LicensförlĂ€ngningsĂ„ret fĂ„r inte vara lĂ€gre Ă€n {MinExtendLicenseYear} Ă„r och inte högre Ă€n {MaxExtendLicenseYear} Ă„r", + "TrialLicensePeriodHasExpired": "Din testlicensperiod löpte ut för {0} dagar sedan.", + "TrialLicensePeriodWillExpire": "Din testlicensperiod kommer att löpa ut om {0} dagar.", + "TrialLicensePeriodExpireToday": "Din testlicensperiod kommer att löpa ut idag.", + "PurchaseNow": "Köp nu!", + "LatestReleaseLogs": "Senaste versionsloggar", + "RoadMap": "VĂ€gkarta", + "FAQ": "VANLIGA FRÅGOR", + "SourceCode": "KĂ€llkod", + "SeeAllPosts": "Se alla inlĂ€gg", + "Contribute": "Bidra", + "LiveDemo": "Live Demo", + "GetLicense": "Skaffa licens", + "OpenSource": "Öppen kĂ€llkod", + "WebApplication": "Webbapplikation", + "MeetTheABP": "Möt ABP", + "CompleteWebDevelopment": "En komplett webbutveckling", + "Platform": "Plattform", + "ABPDescription": "Ett ramverk med öppen kĂ€llkod för utveckling av webbapplikationer för ASP.NET Core. Det erbjuder en komplett infrastruktur genom att följa bĂ€sta praxis för programvaruutveckling.", + "StrongInfrastructure": "Stark infrastruktur", + "CompleteArchitecture": "Komplett arkitektur", + "DeveloperFocused": "Fokus pĂ„ utvecklare", + "ShareYourExperiences": "Dela dina erfarenheter av ABP-ramverket", + "LatestPosts": "Senaste inlĂ€gg", + "LatestVideos": "Senaste videor", + "Views": "Utsikt", + "LearnLatestNewsAboutABPFramework": "FĂ„ information om hĂ€ndelser i ABP som nya utgĂ„vor, fria kĂ€llor, inlĂ€gg och mycket mer.", + "DeveloperTools": "Verktyg för utvecklare", + "StartupTemplates": "Mallar för nystartade företag", + "ApplicationModules": "Applikationsmoduler", + "UI": "UI", + "Themes": "Teman", + "Premium": "Premium", + "PrivacyPolicy": "Integritetspolicy", + "TermsAndConditions": "Villkor och anvisningar", + "WouldLikeToReceiveMarketingMaterials": "Jag skulle vilja fĂ„ marknadsföringsmaterial som produkterbjudanden och specialerbjudanden.", + "JoinOurMarketingNewsletter": "AnmĂ€l dig till vĂ„rt marknadsföringsnyhetsbrev", + "CommunityPrivacyPolicyConfirmation": "Jag godkĂ€nner de allmĂ€nna villkoren och Privatlivspolicyn.", + "WouldLikeToReceiveNotification": "Jag skulle vilja fĂ„ de senaste nyheterna frĂ„n abp.io webbplatser.", + "CommercialNewsletterConfirmationMessage": "Jag samtycker till Terms & Conditions och Privacy Policy.", + "FreeDDDEBook": "Gratis e-bok om DDD", + "AdditionalServices": "Ytterligare tjĂ€nster", + "Learn": "LĂ€r dig", + "AccountOverview": "Översikt över konton", + "MyOrganizations": "Mina organisationer", + "MySupportQuestions": "Mina frĂ„gor om support", + "MyProfile": "Min profil", + "Logout": "Logga ut", + "Home": "Hem", + "Posts": "InlĂ€gg", + "Videos": "Videor", + "JoinTheABPCommunity": "GĂ„ med i ABP:s gemenskap", + "SubmitYourPost": "Skicka in ditt inlĂ€gg", + "Modules": "Moduler", + "Tools": "Verktyg", + "Pricing": "PrissĂ€ttning", + "ChangeLogs": "Ändra loggar", + "SubscribeToNewsletter": "Prenumerera pĂ„ nyhetsbrevet", + "SubscribeToNewsletterDescription": "FĂ„ information om hĂ€ndelser i ABP som nya utgĂ„vor, fria kĂ€llor, inlĂ€gg och mycket mer.", + "EmailAddress": "E-postadress", + "Subscribe": "Prenumerera", + "WelcomeToABP": "VĂ€lkommen till ABP", + "EULA": "EULA", + "ABPCommercialIntroductionMessage": "Förbyggda applikationsmoduler, avancerade startmallar, verktyg för snabb applikationsutveckling, professionella UI-teman och premiumsupport.", + "MasteringAbpFrameworkEBook": "BehĂ€rskar ABP-ramverket", + "MasteringTheABPFrameworkExplanation": "Mastering ABP Framework e-bok; skriven av skaparen av ABP Framework, hjĂ€lper dig att fĂ„ en fullstĂ€ndig förstĂ„else för ramverket och moderna tekniker för utveckling av webbapplikationer.", + "Speakers": "Högtalare", + "PreviousEvents": "Tidigare hĂ€ndelser", + "WatchTheEvent": "Titta pĂ„ evenemanget", + "RegisterNow": "Registrera dig nu", + "ThereIsNoEvent": "Det finns ingen hĂ€ndelse.", + "Events": "HĂ€ndelser", + "Volo.AbpIo.Domain:080000": "Det finns redan ett inköpsobjekt som heter \"{Namn}\"", + "MasteringAbpFrameworkBook": "Bok: Att bemĂ€stra ABP:s ramverk", + "ABPIO-CommonPreferenceDefinition": "FĂ„ de senaste nyheterna om ABP Platform som nya inlĂ€gg, evenemang och mer.", + "BuiltOn": "Inbyggd", + "AbpFramework": "ABP-ramverk", + "Volo.AbpIo.Domain:080001": "Starttiden fĂ„r inte vara större Ă€n sluttiden", + "Enum:BookType:0": "BehĂ€rskar ABP-ramverket", + "Enum:PurchasePlatform:0": "Amazonas", + "Enum:PurchasePlatform:1": "Förpackningar", + "Copied": "Kopierat!", + "CouldNotCopy": "Kunde inte kopiera!", + "CopyNotSupportByYourBrowser": "Den hĂ€r funktionen fungerar inte i den webblĂ€sare du anvĂ€nder.", + "City": "Stad", + "ZipCode": "Postnummer", + "Address": "Adress", + "Homepage": "Hemsida", + "Year": "År", + "Year_Plural": "År", + "Copyright": "Copyright © {1}", + "DomainDrivenDesign": "DomĂ€nstyrd design", + "CrossCuttingConcerns": "TvĂ€rgĂ„ende angelĂ€genheter", + "AbpCommunity": "ABP Gemenskap", + "Footer_GithubStarCount": "{0} StjĂ€rnor pĂ„ GitHub", + "Footer_NugetDownloadCount": "{Nedladdningar pĂ„ NuGet", + "AbpDescription": "ABP Ă€r ett applikationsramverk med öppen kĂ€llkod som fokuserar pĂ„ AspNet Core-baserad utveckling av webbapplikationer. Upprepa inte dig sjĂ€lv, fokusera pĂ„ din egen affĂ€rskod.", + "Layout_AbpFramework_MetaTitle": "ABP Framework | Ramverk för webbapplikationer med öppen kĂ€llkod för ASP.NET Core", + "CommunityTalks_CountdownDays": "Dagar", + "CommunityTalks_CountdownHours": "Timmar", + "CommunityTalks_CountdownMinutes": "Min", + "CommunityTalks_CountdownSeconds": "Sek", + "SeePreviousEvents": "Se tidigare evenemang", + "CookieConsent_Accept": "Acceptera", + "CookieConsent_Explanation_1": "Vi anvĂ€nder cookies för att ge dig den bĂ€sta upplevelsen pĂ„ vĂ„r webbplats.", + "CookieConsent_Explanation_2": "Om du fortsĂ€tter att surfa samtycker du till vĂ„r Privatpolicy och cookiepolicy..", + "Error_Page_400_Title": "Det uppstod ett problem med att visa den begĂ€rda sidan.", + "Error_Page_400_Description_1": "Vanligtvis betyder det att ett ovĂ€ntat fel intrĂ€ffade nĂ€r vi behandlade din begĂ€ran.", + "Error_Page_400_Description_2": "Om problemet kvarstĂ„r, kontakta oss pĂ„ info@abp.io sĂ„ hjĂ€lper vi dig att komma vidare.", + "GoToHomepage": "GĂ„ till hemsidan", + "Error_Page_404_Title": "Sidan hittades inte!", + "Error_Page_404_Description_1": "Det hĂ€r Ă€r inte den webbsida du letar efter.", + "Error_Page_500_Title": "Det ser ut som om nĂ„got gick fel!", + "Error_Page_500_Description_1": "Vi spĂ„rar dessa fel automatiskt, men om problemet kvarstĂ„r Ă€r du vĂ€lkommen att
kontakta oss. Under tiden kan du prova att uppdatera.", + "Error_Page_500_Description_2": "Kontakta oss pĂ„ info@abp.io.", + "Books": "Böcker", + "ABPDiscordServer": "ABP Discord Server", + "ABPCommunityTalks": "ABP:s samtal med allmĂ€nheten", + "ABPCommunityPosts": "ABP Gemenskap InlĂ€gg", + "BuyAndGetMonths": "KÖP 12 MÅNADER, FÅ 14 MÅNADER!", + "GetYourDeal": "FĂ„ ditt erbjudande", + "BuyOrRenewLicense": "Köp eller förnya licensen nu och fĂ„ 2 extra mĂ„nader!", + "BuyOrRenewLicenseToGetExtra2Months": "Köp eller förnya licens nu och fĂ„ 2 extra mĂ„nader! SKYNDA DIG UPP! ⏰ Sista dag: {0}", + "HurryUp": "SKYNDA PÅ!", + "LastDay": "Sista dagen: {0}", + "BuyNewLicenseBetweenDatesToGetBenefit": "Köp en ny licens mellan {0} och {1} för att fĂ„ förmĂ„nen i extra 2 mĂ„nader!", + "CheckAllCommunityTalks": "Kontrollera alla inlĂ€gg i gemenskapen", + "ReadMore": "LĂ€s mer om", + "ContinueReading": "FortsĂ€tta lĂ€sa", + "Post": "Post", + "ExploreTheContentsCreatedByTheCoreABPTeamAndTheABPCommunity": "Utforska innehĂ„llet som skapats av ABP:s kĂ€rnteam och ABP:s community.", + "WelcomeFallCampaign": "VĂ€lkommen till höstkampanjen!", + "GiveAwayForNewPurchases": "Application Development Classroom Training kommer att ges bort för de nya inköpen!", + "BlackFriday": "BLACK FRIDAY", + "ValidForExistingCustomers": "GĂ€ller Ă€ven för
befintliga kunder!", + "CampaignBetweenDates": "FrÄn {0}
Till {1}", + "SaveUpTo": "Spara Upp till${0}K", + "ImplementingDDD": "Implementering av domÀndriven design", + "ExploreTheEBook": "Utforska e-boken", + "ExploreTheBook": "Utforska boken", + "ConsultantType": "Typ av konsultverksamhet", + "Expert": "ABP Expert", + "Partner": "ABP Partner", + "Industry": "Industri", + "Location": "Plats", + "Contact": "Kontakt", + "Partner_Year": "PartnerskapsÄr", + "Info": "Info", + "SpokenLanguages": "Talade sprÄk", + "SocialMedia": "Sociala medier", + "Activity": "Aktivitet", + "Type": "Typ", + "Contribution": "Bidrag", + "WhoWeAre": "Vilka vi Àr", + "Icons": "Ikoner", + "Url": "Url", + "Icon": "Ikon", + "RecentActivities": "Senaste aktiviteterna", + "SpringCampaign": "VÀlkommen
VÄrens försÀljning!", + "SpringCampaign2": "BegrÀnsat
tidserbjudande!
", + "AboutUs": "Om oss", + "HowItWorks": "Hur fungerar det?", + "ReleaseNotes": "Releaseanteckningar", + "DetailedChangeNotes": "Detaljerade Ă€ndringsanteckningar", + "SeeTrainings": "Se utbildningar", + "NoContent": "Inget innehĂ„ll", + "More": "Mer om", + "WhyABPIOPlatform": "Varför ABP.IO Platform?", + "AbpStudio": "ABP Studio", + "ExtraMonths": "{0}EXTRA MÅNADER", + "RSS": "RSS", + "RSSFeed": "RSS-flöde", + "Articles": "Artiklar", + "Organizations": "Organisationer", + "ManageAccount": "Hantera konto", + "CommunityProfile": "Gemenskapsprofil", + "BlogProfile": "Bloggprofil", + "Tickets": "Tickets", + "Raffles": "Raffles", + "Status": "Status", + "Resources": "Resurser", + "Video Courses": "Videokurser", + "Packages": "Paket", + "Trainings": "Utbildningar", + "MeetTheABPCommunity": "Möt ABP Community", + "DisplayName:CommunityIndexPagePoll": "Community Index Page Poll", + "ReturnOnInvestment": "Avkastning pĂ„ investeringar", + "PromotionalOffers": "Kampanjerbjudanden", + "PromotionalOffersDefinition": "Rabatter, sĂ€songskampanjer etc.", + "EventsDefinition": "Community Talks, webbseminarier, ABP .NET-konferens, etc.", + "ReleaseNotesDefinition": "ABP.IO Plattformsreleaser, nya produkter etc.", + "Newsletter": "Nyhetsbrev", + "NewsletterDefinition": "BlogginlĂ€gg, nyheter om samhĂ€llet etc.", + "OrganizationOverview": "Översikt över organisationen", + "EmailPreferences": "InstĂ€llningar för e-post", + "VideoCourses": "Viktiga videor", + "DoYouAgreePrivacyPolicy": "Genom att klicka pĂ„ Prenumerera-knappen godkĂ€nner du Villkor och bestĂ€mmelser och Privatlivspolicy.", + "AbpConferenceDescription": "ABP Conference Ă€r ett virtuellt evenemang för .NET-utvecklare dĂ€r de kan lĂ€ra sig mer och fĂ„ kontakt med andra.", + "Mobile": "Mobil" + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/sv.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/sv.json new file mode 100644 index 0000000000..2ac06f43f8 --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/sv.json @@ -0,0 +1,8 @@ +{ + "culture": "sv", + "texts": { + "AbpTitle": "LĂ€s alla blogginlĂ€gg", + "AbpDescription": "ABP Ă€r ett applikationsramverk med öppen kĂ€llkod som fokuserar pĂ„ AspNet Core-baserad utveckling av webbapplikationer. Upprepa inte dig sjĂ€lv, fokusera pĂ„ din egen affĂ€rskod.", + "AbpDefinition": "ABP-blogg för .NET-utveckling, plattformsoberoende, ASP.NET-applikationsmallar, ABP-relaterade nyheter och mer..." + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ar.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ar.json index f95a0117b6..6ab986076e 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ar.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ar.json @@ -816,6 +816,7 @@ "ErrorExceptionMessage": "Ű­ŰŻŰ« ۟۷ۣ ŰŁŰ«Ù†Ű§ŰĄ مŰčŰ§Ù„ŰŹŰ© Ű·Ù„ŰšÙƒ", "WatchTakeCodeGeneration": "ŰŽŰ§Ù‡ŰŻ ÙÙŠŰŻÙŠÙˆ \"ۧ۳ŰȘÙƒŰŽŰ§Ù Ű„Ù…ÙƒŰ§Ù†Ű§ŰȘ Ű„Ù†ŰŽŰ§ŰĄ Ű§Ù„ŰŁÙƒÙˆŰ§ŰŻ Ű§Ù„ŰšŰ±Ù…ŰŹÙŠŰ©: ABP Suite\"!", "ExtendNow": "ŰȘÙ…ŰŻÙŠŰŻ / ŰȘŰŹŰŻÙŠŰŻ", - "RegisterDemo": "ÙŠŰłŰŹÙ„" + "RegisterDemo": "ÙŠŰłŰŹÙ„", + "AbpStudio_ComingSoon": "ۄ۰ۧ كنŰȘ ŰȘ۱ŰșŰš في ۧ۟ŰȘۚۧ۱ ABP Studio Ù‚ŰšÙ„ ŰŁÙŠ ێ۟۔ ŰąŰźŰ±ŰŒ يمكنك ŰŁÙ† ŰȘ۔ۭۚ ŰŁŰ­ŰŻ Ù…ŰźŰȘŰšŰ±ÙŠ Ű§Ù„Ù†ŰłŰźŰ© Ű§Ù„ŰȘŰŹŰ±ÙŠŰšÙŠŰ©" } } diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/cs.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/cs.json index 3571ae469e..a92366fa07 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/cs.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/cs.json @@ -431,6 +431,7 @@ "ErrorExceptionMessage": "Pƙi zpracovĂĄnĂ­ vaĆĄeho poĆŸadavku nastala chyba", "WatchTakeCodeGeneration": "PodĂ­vejte se na video „Prozkoumejte potenciĂĄl generovĂĄnĂ­ kĂłdu: ABP Suite“!", "ExtendNow": "ProdlouĆŸit / Obnovit", - "RegisterDemo": "Registrovat" + "RegisterDemo": "Registrovat", + "AbpStudio_ComingSoon": "Pokud chcete ABP Studio otestovat dƙíve neĆŸ kdokoli jinĂœ, staƈte se BETA testerem" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/de.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/de.json index f6e56588f7..dcea7faa20 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/de.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/de.json @@ -411,6 +411,7 @@ "SendUsEmail": "Senden Sie uns eine E-Mail", "ErrorExceptionMessage": "WĂ€hrend Ihrer Anfrage ist ein Fehler aufgetreten", "WatchTakeCodeGeneration": "Sehen Sie sich das Video „Entdecken Sie das Potenzial der Codegenerierung: ABP Suite“ an!", - "ExtendNow": "VerlĂ€ngern / Erneuern" + "ExtendNow": "VerlĂ€ngern / Erneuern", + "AbpStudio_ComingSoon": "Wenn Sie ABP Studio vor allen anderen testen möchten, werden Sie BETA-Tester" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index 7a02bf8a39..ae040e7fd2 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -916,7 +916,7 @@ "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_ComingSoon": "If you want to test ABP Studio before anyone else, become a BETA tester", "AbpStudio_PlannedPreviewDate": "Planned preview release date: Q4 of 2023.", "BetaRequest": "Beta Request", "CreateNewSolutions": "Create New Solutions", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/es.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/es.json index 03b6e8ebde..a8389d694d 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/es.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/es.json @@ -411,6 +411,7 @@ "SendUsEmail": "EnvĂ­anos un correo electrĂłnico", "ErrorExceptionMessage": "Se produjo un error al procesar su solicitud.", "WatchTakeCodeGeneration": "ÂĄMire el vĂ­deo \"Explore el potencial de la generaciĂłn de cĂłdigo: ABP Suite\"!", - "ExtendNow": "Ampliar / Renovar" + "ExtendNow": "Ampliar / Renovar", + "AbpStudio_ComingSoon": "Si quieres probar ABP Studio antes que nadie, conviĂ©rtete en tester BETA" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json index e963dc7032..4c87baefb3 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json @@ -852,6 +852,7 @@ "ErrorExceptionMessage": "Virhe pyynnön kĂ€sittelyn yhteydessĂ€", "WatchTakeCodeGeneration": "Katso \"Tutki koodin luomisen potentiaalia: ABP Suite\" -video!", "ExtendNow": "Laajenna / Uusi", - "RegisterDemo": "Rekisteröidy" + "RegisterDemo": "Rekisteröidy", + "AbpStudio_ComingSoon": "Jos haluat testata ABP Studiota ennen muita, ryhdy BETA-testaajaksi" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fr.json index 248b575753..a78b492d07 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fr.json @@ -431,6 +431,7 @@ "ErrorExceptionMessage": "Une erreur s'est produite lors du traitement de votre demande", "WatchTakeCodeGeneration": "Regardez la vidĂ©o « Explorez le potentiel de la gĂ©nĂ©ration de code : ABP Suite » !", "ExtendNow": "Prolonger / Renouveler", - "RegisterDemo": "Registre" + "RegisterDemo": "Registre", + "AbpStudio_ComingSoon": "Si vous souhaitez tester ABP Studio avant tout le monde, devenez BETA testeur" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hi.json index e48e4494a7..68fab24fc2 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hi.json @@ -430,6 +430,7 @@ "ErrorExceptionMessage": "à€†à€Șà€•à€Ÿ à€…à€šà„à€°à„‹à€§ à€žà€‚à€žà€Ÿà€§à€żà€€ à€•à€°à€€à„‡ à€žà€źà€Ż à€à€• à€€à„à€°à„à€Ÿà€ż à€Șà€Ÿà€ˆ à€—à€ˆ", "WatchTakeCodeGeneration": "\"à€•à„‹à€Ą à€œà€šà€°à„‡à€¶à€š à€•à„€ à€•à„à€·à€źà€€à€Ÿ à€•à€Ÿ à€…à€šà„à€”à„‡à€·à€Ł à€•à€°à„‡à€‚: à€à€Źà„€à€Șà„€ à€žà„à€‡à€Ÿ\" à€”à„€à€Ąà€żà€Żà„‹ à€Šà„‡à€–à„‡à€‚!", "ExtendNow": "à€”à€żà€žà„à€€à€Ÿà€°/à€šà€”à„€à€šà„€à€•à€°à€Ł", - "RegisterDemo": "à€Șà€‚à€œà„€à€•à€°à€Ł à€•à€°à€”à€Ÿà€šà€Ÿ" + "RegisterDemo": "à€Șà€‚à€œà„€à€•à€°à€Ł à€•à€°à€”à€Ÿà€šà€Ÿ", + "AbpStudio_ComingSoon": "à€Żà€Šà€ż à€†à€Ș à€•à€żà€žà„€ à€”à€° à€žà„‡ à€Șà€čà€Čà„‡ à€à€Źà„€à€Șà„€ à€žà„à€Ÿà„‚à€Ąà€żà€Żà„‹ à€•à€Ÿ à€Șà€°à„€à€•à„à€·à€Ł à€•à€°à€šà€Ÿ à€šà€Ÿà€čà€€à„‡ à€čà„ˆà€‚, à€€à„‹ à€Źà„€à€Ÿà€Ÿ à€Șà€°à„€à€•à„à€·à€• à€Źà€šà„‡à€‚" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hr.json index fe67373478..07974134a2 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hr.json @@ -915,7 +915,6 @@ "AbpStudio_Description": "ABP Studio je joĆĄ uvijek u razvoju. MoĆŸete ispuniti obrazac ispod i biti jedan od prvih korisnika.", "AbpStudio_Description1": "ABP Studio je stolna aplikacija za viĆĄe platformi za ABP programere.", "AbpStudio_Description2": "Dobro je integriran u ABP Framework i ima za cilj pruĆŸiti vam ugodno razvojno okruĆŸenje automatiziranjem stvari, pruĆŸanjem uvida u vaĆĄe rjeĆĄenje, čineći razvoj, pokretanje i implementaciju vaĆĄih rjeĆĄenja puno lakĆĄim.", - "AbpStudio_ComingSoon": "Uskoro. Planirani datum izdavanja beta verzije: 4. tromjesečje 2023.", "AbpStudio_PlannedPreviewDate": "Planirani datum izdavanja pregleda: 4. kvartal 2023.", "BetaRequest": "Zahtjev za beta verziju", "CreateNewSolutions": "Stvorite nova rjeĆĄenja", @@ -1107,6 +1106,7 @@ "SendUsEmail": "PoĆĄaljite nam e-mail", "ErrorExceptionMessage": "Pojavila se greĆĄka prilikom obrade VaĆĄeg zahtjeva", "WatchTakeCodeGeneration": "Pogledajte video \"IstraĆŸite potencijal generiranja koda: ABP Suite\"!", - "ExtendNow": "ProduĆŸi / obnovi" + "ExtendNow": "ProduĆŸi / obnovi", + "AbpStudio_ComingSoon": "Ako ĆŸelite testirati ABP Studio prije svih ostalih, postanite BETA tester" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hu.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hu.json index 4b4b099c49..4fbdb2a8d4 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hu.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hu.json @@ -777,6 +777,7 @@ "SendUsEmail": "KĂŒldjön nekĂŒnk e-mailt", "ErrorExceptionMessage": "Hiba törtĂ©nt a kĂ©rĂ©se feldolgozĂĄsa sorĂĄn", "WatchTakeCodeGeneration": "NĂ©zze meg a \"Fedezze fel a kĂłdgenerĂĄlĂĄs lehetƑsĂ©gĂ©t: ABP Suite\" videĂłt!", - "ExtendNow": "BƑvĂ­tĂ©s / MegĂșjĂ­tĂĄs" + "ExtendNow": "BƑvĂ­tĂ©s / MegĂșjĂ­tĂĄs", + "AbpStudio_ComingSoon": "Ha bĂĄrki mĂĄs elƑtt szeretnĂ© tesztelni az ABP Studio-t, legyen BÉTA tesztelƑ" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/is.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/is.json index 6b5a58480e..be9337e842 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/is.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/is.json @@ -408,6 +408,7 @@ "SendUsEmail": "Sendu okkur tölvupĂłst", "ErrorExceptionMessage": "Villa kom upp við Ășrvinnslu beiðni ĂŸinnar", "WatchTakeCodeGeneration": "Horfðu ĂĄ \"Kannaðu möguleika kóðaframleiðslu: ABP Suite\" myndbandið!", - "ExtendNow": "Framlengja / endurnĂœja" + "ExtendNow": "Framlengja / endurnĂœja", + "AbpStudio_ComingSoon": "Ef ĂŸĂș vilt prĂłfa ABP Studio ĂĄ undan öllum öðrum skaltu gerast BETA prĂłfari" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json index 633c41f66e..edc80b48e1 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json @@ -430,6 +430,7 @@ "ErrorExceptionMessage": "Si Ăš verificato un errore durante l'elaborazione della richiesta", "WatchTakeCodeGeneration": "Guarda il video \"Esplora il potenziale della generazione di codice: ABP Suite\"!", "ExtendNow": "Estendi/Rinnova", - "RegisterDemo": "Registrati" + "RegisterDemo": "Registrati", + "AbpStudio_ComingSoon": "Se vuoi provare ABP Studio prima di chiunque altro, diventa un BETA tester" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/nl.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/nl.json index c26bdb8993..da7037c8f2 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/nl.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/nl.json @@ -408,6 +408,7 @@ "SendUsEmail": "Stuur ons een e-mail", "ErrorExceptionMessage": "Er is een fout opgetreden bij het verwerken van uw verzoek", "WatchTakeCodeGeneration": "Bekijk de video 'Ontdek het potentieel van codegeneratie: ABP Suite'!", - "ExtendNow": "Verlengen / Verlengen" + "ExtendNow": "Verlengen / Verlengen", + "AbpStudio_ComingSoon": "Als u ABP Studio als eerste wilt testen, wordt dan BETA-tester" } } \ No newline at end of file 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 c5b0849545..8c37e62706 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pl-PL.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pl-PL.json @@ -409,6 +409,7 @@ "ErrorExceptionMessage": "Podczas przetwarzania ĆŒÄ…dania wystąpiƂ bƂąd", "WatchTakeCodeGeneration": "Obejrzyj film „Odkryj potencjaƂ generowania kodu: pakiet ABP”!", "ExtendNow": "PrzedƂuĆŒ/OdnĂłw", - "RegisterDemo": "Rejestr" + "RegisterDemo": "Rejestr", + "AbpStudio_ComingSoon": "Jeƛli chcesz przetestować ABP Studio zanim ktokolwiek inny, zostaƄ testerem BETA" } } \ No newline at end of file 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 fd92099059..43d80af012 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pt-BR.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pt-BR.json @@ -431,6 +431,7 @@ "SendUsEmail": "Envie-nos um e-mail", "ErrorExceptionMessage": "Um erro ocorreu durante o processamento do seu pedido", "WatchTakeCodeGeneration": "Assista ao vĂ­deo \"Explore o potencial de geração de cĂłdigo: ABP Suite\"!", - "ExtendNow": "Estender/Renovar" + "ExtendNow": "Estender/Renovar", + "AbpStudio_ComingSoon": "Se vocĂȘ quiser testar o ABP Studio antes de todo mundo, torne-se um testador BETA" } } \ No newline at end of file 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 b2693311a2..b04650b958 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ro-RO.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ro-RO.json @@ -408,6 +408,7 @@ "SendUsEmail": "Trimite-ne e-mail", "ErrorExceptionMessage": "A apărut o eroare Ăźn timpul procesării cererii dumneavoastră", "WatchTakeCodeGeneration": "Urmărește videoclipul „Explorați potențialul generării codului: ABP Suite”!", - "ExtendNow": "Extinde/ReĂźnnoiește" + "ExtendNow": "Extinde/ReĂźnnoiește", + "AbpStudio_ComingSoon": "Dacă doriți să testați ABP Studio Ăźnaintea oricui, deveniți un tester BETA" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sk.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sk.json index f06bc507c7..48f4a3c304 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sk.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sk.json @@ -427,6 +427,7 @@ "SendUsEmail": "PoĆĄlite nĂĄm e-mail", "ErrorExceptionMessage": "Nastala chyba pri spracovanĂ­ vaĆĄej ĆŸiadosti", "WatchTakeCodeGeneration": "Pozrite si video „PreskĂșmajte potenciĂĄl generovania kĂłdu: ABP Suite“!", - "ExtendNow": "PredÄșĆŸiĆ„ / obnoviĆ„" + "ExtendNow": "PredÄșĆŸiĆ„ / obnoviĆ„", + "AbpStudio_ComingSoon": "Ak chcete otestovaĆ„ ABP Studio skĂŽr ako ktokoÄŸvek inĂœ, staƈte sa BETA testerom" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sl.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sl.json index b7a5724528..870268c576 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sl.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sl.json @@ -409,6 +409,7 @@ "ErrorExceptionMessage": "Pri obdelavi vaĆĄe zahteve je priĆĄlo do napake", "WatchTakeCodeGeneration": "Oglejte si video »Raziơčite potencial generiranja kode: zbirka ABP«!", "ExtendNow": "PodaljĆĄaj / obnovi", - "RegisterDemo": "Registrirajte se" + "RegisterDemo": "Registrirajte se", + "AbpStudio_ComingSoon": "Če ĆŸelite preizkusiti ABP Studio pred vsemi drugimi, postanite BETA tester" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sv.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sv.json new file mode 100644 index 0000000000..f6e1184c2d --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sv.json @@ -0,0 +1,1215 @@ +{ + "culture": "sv", + "texts": { + "OrganizationManagement": "Organisation och ledning", + "OrganizationList": "Organisationslista", + "Volo.AbpIo.Commercial:010003": "Du Ă€r inte Ă€gare till den hĂ€r organisationen!", + "OrganizationNotFoundMessage": "Ingen organisation hittades!", + "DeveloperCount": "Tilldelade / totala utvecklare", + "QuestionCount": "Kvarvarande / totala frĂ„gor", + "Unlimited": "ObegrĂ€nsad", + "Owners": "Ägare", + "Owner": "Ägare", + "AddMember": "LĂ€gg till medlem", + "AddNewOwner": "LĂ€gg till ny Ă€gare", + "AddNewDeveloper": "LĂ€gg till ny utvecklare", + "UserName": "AnvĂ€ndarnamn", + "Name": "Namn", + "EmailAddress": "E-postadress", + "Developers": "Utvecklare", + "LicenseType": "Typ av licens", + "Manage": "Hantera", + "SetDefault": "StĂ€ll in som standard", + "DefaultOrganization": "Standard", + "StartDate": "Startdatum", + "EndDate": "Slutdatum", + "Modules": "Moduler", + "LicenseExtendMessage": "Slutdatum för din licens förlĂ€ngs till {0}.", + "LicenseUpgradeMessage": "Din licens har uppgraderats till {0}.", + "LicenseExtendAdnUpgradeMessage": "Din licens har förlĂ€ngts till {0} och din licensplan har uppgraderats till {1}.", + "LicenseAddDeveloperMessage": "{0} utvecklare lĂ€ggs till i din licens", + "Volo.AbpIo.Commercial:010004": "Kan inte hitta den angivna anvĂ€ndaren! AnvĂ€ndaren mĂ„ste redan ha registrerats.", + "MyOrganizations": "Mina organisationer", + "ApiKey": "API-nyckel", + "UserNameNotFound": "Det finns ingen anvĂ€ndare med anvĂ€ndarnamnet {0}", + "SuccessfullyAddedToNewsletter": "Tack för att du prenumererar pĂ„ vĂ„rt nyhetsbrev!", + "MyProfile": "Min profil", + "EmailNotValid": "VĂ€nligen ange en giltig e-postadress.", + "JoinOurMarketingNewsletter": "AnmĂ€l dig till vĂ„rt marknadsföringsnyhetsbrev", + "WouldLikeToReceiveMarketingMaterials": "Jag skulle vilja fĂ„ marknadsföringsnyheter som produkterbjudanden och specialerbjudanden.", + "StartUsingYourLicenseNow": "Börja anvĂ€nda din licens nu!", + "WelcomePage": "VĂ€lkomstsida", + "UnsubscriptionExpireEmail": "Avregistrera dig frĂ„n e-postmeddelanden med pĂ„minnelser om licensens utgĂ„ngsdatum", + "UnsubscribeLicenseExpireEmailReminderMessage": "Denna e-postprenumeration innehĂ„ller endast pĂ„minnelser om utgĂ„ngsdatum för din licens.", + "UnsubscribeFromLicenseExpireEmails": "Om du inte vill fĂ„ e-postmeddelanden om utgĂ„ngsdatum för din licens kan du avsluta prenumerationen nĂ€r som helst.", + "Unsubscribe": "Avsluta prenumeration", + "NotOrganizationMember": "Du Ă€r inte medlem i nĂ„gon organisation.", + "UnsubscribeLicenseExpirationEmailSuccessTitle": "FramgĂ„ngsrikt avregistrerad", + "UnsubscribeLicenseExpirationEmailSuccessMessage": "Du kommer inte lĂ€ngre att fĂ„ e-postmeddelanden med pĂ„minnelser om licensens utgĂ„ngsdatum.", + "IndexPageHeroSection": "En komplettwebbutvecklingsplattformbyggd pĂ„ ramverk", + "AbpCommercialShortDescription": "ABP tillhandahĂ„ller förbyggda applikationsmoduler, verktyg för snabb applikationsutveckling, professionella UI-teman, premiumsupport och mycket mer.", + "LiveDemo": "Live Demo", + "LiveDemoLead": "{1} med ditt ABP-konto, {3} till abp.io eller fyll i formulĂ€ret nedan för att skapa en live demo nu", + "ThereIsAlreadyAnAccountWithTheGivenEmailAddress": "Det finns redan ett konto med den angivna e-postadressen: {0}
Du bör logga in med ditt konto för att fortsĂ€tta.", + "GetLicence": "Skaffa licens", + "Application": "TillĂ€mpning", + "StartupTemplates": "Mallar för nystartade företag", + "Startup": "Nystartad verksamhet", + "Templates": "Mallar", + "Developer": "Utvecklare", + "Tools": "Verktyg", + "Premium": "Premium", + "PremiumSupport": "Premium-support", + "PremiumForumSupport": "Premium Forum Support", + "UI": "UI", + "Themes": "Teman", + "JoinOurNewsletter": "AnmĂ€l dig till vĂ„rt nyhetsbrev", + "Send": "Skicka", + "WhatIsABPFramework": "VAD ÄR ABP-RAMVERKET?", + "OpenSourceBaseFramework": "Basramverk med öppen kĂ€llkod", + "ABPFrameworkExplanation": "

ABP kommersiell version Àr baserad pÄ ABP Framework, en öppen kÀllkod och community-driven webbapplikationsram för ASP.NET Core.

ABP Framework ger en utmÀrkt infrastruktur för att skriva underhÄllbar, utdragbar och testbar kod med bÀsta praxis.

Byggd pÄ och integrerad med populÀra verktyg som du redan kÀnner till. LÄg inlÀrningskurva, enkel anpassning, bekvÀm utveckling.

", + "Modular": "ModulÀr", + "MicroserviceCompatible": "Kompatibel med mikrotjÀnster", + "DomainDrivenDesignInfrastructure": "DomÀnstyrd design Infrastruktur", + "MultiTenancy": "Multi-Tenancy", + "DistributedMessaging": "Distribuerad meddelandehantering", + "DynamicProxying": "Dynamisk proxyservering", + "BackgroundJobs": "Bakgrundsjobb", + "AuditLogging": "Loggning av revision", + "BLOBStoring": "BLOB Storing", + "BundlingMinification": "Paketering och minimering", + "AdvancedLocalization": "Avancerad lokalisering", + "ManyMore": "MÄnga fler", + "ExploreTheABPFramework": "Utforska ABP-ramverket", + "WhyUseTheABPCommercial": "Varför anvÀnda ABP-plattformen?", + "WhyUseTheABPCommercialExplanation": "

Att bygga webbapplikationer i företagsklass kan vara komplext och tidskrÀvande.

ABP erbjuder den perfekta basinfrastrukturen som krÀvs för alla moderna ASP.NET Core-baserade lösningar i företagsklass. FrÄn design till driftsÀttning, hela utvecklingscykeln förstÀrks av ABP: s inbyggda funktioner och moduler.

", + "StartupTemplatesShortDescription": "Startup-mallar gör att du kan starta ditt projekt pÄ nÄgra sekunder.", + "UIFrameworksOptions": "Alternativ för ramverk för anvÀndargrÀnssnitt;", + "DatabaseProviderOptions": "Alternativ för databasleverantör;", + "PreBuiltApplicationModules": "Förbyggda applikationsmoduler", + "PreBuiltApplicationModulesShortDescription": "De vanligaste applikationskraven Àr redan utvecklade Ät dig som ÄteranvÀndbara moduler.", + "Account": "Konto", + "Blogging": "Bloggande", + "Identity": "Identitet", + "IdentityServer": "Identitetsserver", + "Saas": "Saas", + "LanguageManagement": "SprÄkhantering", + "TextTemplateManagement": "Hantering av textmallar", + "See All Modules": "SeAllaModuler", + "ABPSuite": "ABP-svit", + "AbpSuiteShortDescription": "ABP Suite Àr ett kompletterande verktyg till ABP-projekt.", + "AbpSuiteExplanation": "Det gör att du kan bygga webbsidor pÄ bara nÄgra minuter. Det Àr ett .NET Core Global-verktyg som kan installeras frÄn kommandoraden. Det kan skapa en ny ABP-lösning och generera CRUD-sidor frÄn databasen till frontend.", + "Details": "Detaljer", + "LeptonTheme": "Lepton tema", + "ProfessionalModernUIThemes": "Professionella, moderna UI-teman", + "LeptonThemeExplanation": "Lepton tillhandahÄller en rad Bootstrap-adminteman som fungerar som en solid grund för alla projekt som krÀver en adminpanel.", + "DefaultTheme": "Standardtema", + "MaterialTheme": "Materialtema", + "Default2Theme": "Standard 2 Tema", + "DarkTheme": "Mörkt tema", + "DarkBlueTheme": "MörkblÄtt tema", + "LightTheme": "Ljus tema", + "ProudToWorkWith": "Stolt över att arbeta med", + "OurConsumers": "Tusentals företag och utvecklare i över 70 lÀnder vÀrlden över förlitar sig pÄ ABP.", + "JoinOurConsumers": "Anslut dig till dem och bygg fantastiska produkter snabbt.", + "AdditionalServicesExplanation": "Behöver du ytterligare eller anpassade tjÀnster? Vi och vÄra partners kan tillhandahÄlla;", + "CustomProjectDevelopment": "Anpassad projektutveckling", + "CustomProjectDevelopmentExplanation": "Dedikerade utvecklare för dina anpassade projekt.", + "PortingExistingProjects": "Portning av befintliga projekt", + "PortingExistingProjectsExplanation": "Migrera dina Àldre projekt till ABP-plattformen.", + "LiveSupport": "Support i realtid", + "LiveSupportExplanation": "FjÀrrsupport i realtid nÀr du behöver det.", + "Training": "Utbildning", + "TrainingExplanation": "Dedikerad utbildning för dina utvecklare.", + "OnBoarding": "Onboarding", + "OnBoardingExplanation": "HjÀlp med att konfigurera dina utvecklings-, CI- och CD-miljöer.", + "PrioritizedTechnicalSupport": "Prioriterad teknisk support", + "PremiumSupportExplanation": "Förutom det stora samhÀllsstödet i ABP-ramverket svarar vÄrt supportteam pÄ tekniska frÄgor och problem frÄn de kommersiella anvÀndarna med hög prioritet.", + "SeeTheSupportOptions": "Kolla in supportalternativen", + "Contact": "Kontakt", + "TellUsWhatYouNeed": "BerÀtta för oss vad du behöver.", + "YourMessage": "Ditt meddelande", + "YourFullName": "Ditt fullstÀndiga namn", + "FirstNameField": "Förnamn", + "LastNameField": "Efternamn", + "EmailField": "E-postadress", + "YourEmailAddress": "Din e-postadress", + "ValidEmailAddressIsRequired": "En giltig e-postadress krÀvs.", + "HowMayWeHelpYou": "Hur kan vi hjÀlpa dig?", + "SendMessage": "Skicka meddelande", + "Success": "FramgÄng", + "WeWillReplyYou": "Vi har mottagit ditt meddelande och kommer att kontakta dig inom kort.", + "GoHome": "GÄ hem", + "CreateLiveDemo": "Skapa live-demo", + "CreateLiveDemoDescription": "NÀr du har skickat in formulÀret kommer du att fÄ ett e-postmeddelande med din demolÀnk.", + "RegisterToTheNewsletter": "AnmÀl dig till nyhetsbrevet för att fÄ information om ABP.IO, inklusive nya releaser etc.", + "EnterYourEmailOrLogin": "Ange din e-postadress för att skapa din demo eller Logga in med ditt befintliga konto.", + "ApplicationTemplate": "Mall för ansökan", + "ApplicationTemplateExplanation": "Application startup template anvÀnds för att skapa en ny webbapplikation.", + "EfCoreProvider": "Entity Framework (Stödjer SQL Server, MySQL, PostgreSQL, Oracle och andra)", + "AlreadyIncludedInTemplateModules": "Följande moduler Àr redan inkluderade och konfigurerade i den hÀr mallen:", + "ApplicationTemplateArchitecture": "Den hÀr applikationsmallen stöder ocksÄ nivÄindelad arkitektur dÀr anvÀndargrÀnssnittslagret, API-lagret och autentiseringstjÀnsten Àr fysiskt Ätskilda.", + "SeeTheGuideOrGoToTheLiveDemo": "Kolla in utvecklarguiden för teknisk information om den hÀr mallen eller gÄ till live-demonstrationen.", + "DeveloperGuide": "Guide för utvecklare", + "ModuleTemplate": "Mall för modul", + "ModuleTemplateExplanation1": "Vill du skapa en modul och ÄteranvÀnda den i olika applikationer? Den hÀr startmallen förbereder allt för att börja skapa en ÄteranvÀndbar applikationsmodul eller en mikrotjÀnst.", + "ModuleTemplateExplanation2": "

Du kan stödja enstaka eller flera anvÀndargrÀnssnittsramverk, enstaka eller flera databasleverantörer för en enda modul. Startmallen Àr konfigurerad för att köra och testa din modul i en minimal applikation utöver infrastrukturen för enhets- och integrationstest.

Se utvecklarguiden för teknisk information om den hÀr mallen.

", + "WithAllStyleOptions": "med alla stilalternativ", + "Demo": "Demo", + "SeeAllModules": "Se alla moduler", + "ABPCLIExplanation": "ABP CLI (Command Line Interface) Àr ett kommandoradsverktyg för att utföra vissa vanliga ÄtgÀrder för ABP-baserade lösningar.", + "ABPSuiteEasilyCURD": "ABP Suite Àr ett verktyg som gör att du enkelt kan skapa CRUD-sidor", + "WeAreHereToHelp": "Vi Àr hÀr för att hjÀlpa", + "BrowseOrAskQuestion": "Du kan blÀddra i vÄra hjÀlpÀmnen eller söka i vanliga frÄgor, eller sÄ kan du stÀlla en frÄga till oss genom att anvÀnda kontaktformulÀret.", + "SearchQuestionPlaceholder": "Sök i vanliga frÄgor och svar", + "WhatIsTheABPCommercial": "Vad Àr ABP?", + "WhatAreDifferencesThanAbpFramework": "Vilka Àr skillnaderna mellan ABP med öppen kÀllkod och den kommersiella versionen av ABP?", + "AbpCommercialMetaTitle": " {0} | ABP", + "AbpCommercialMetaDescription": "En omfattande webbutvecklingsplattform pÄ ABP Framework med förbyggda moduler, startmallar, verktyg för snabb utveckling, proffsiga UI-teman och premiumsupport.", + "ABPCommercialExplanation": "ABP Platform Àr en uppsÀttning premiummoduler, verktyg, teman och tjÀnster som Àr byggda pÄ toppen av open source ABP-ramverket. ABP utvecklas och stöds av samma team som ligger bakom ABP-ramverket.", + "WhatAreDifferencesThanABPFrameworkExplanation": "

ABP-ramverket Àr ett modulÀrt, tematiserbart, mikrotjÀnstkompatibelt ramverk för applikationsutveckling för ASP.NET Core. Det ger en komplett arkitektur och en stark infrastruktur sÄ att du kan fokusera pÄ din egen affÀrskod istÀllet för att upprepa dig sjÀlv för varje nytt projekt. Det Àr baserat pÄ bÀsta praxis för mjukvaruutveckling och populÀra verktyg som du redan kÀnner till.

ABP-ramverket Àr helt gratis, öppen kÀllkod och community-driven. Det ger ocksÄ ett gratis tema och nÄgra förbyggda moduler (t.ex. identitetshantering och hyresgÀsthantering).

<", + "VisitTheFrameworkVSCommercialDocument": "Besök följande lĂ€nk för mer information {1} ", + "ABPCommercialFollowingBenefits": "ABP kommersiell version lĂ€gger till följande fördelar ovanpĂ„ ABP-ramverket:", + "Professional": "Professionell", + "UIThemes": "Teman för anvĂ€ndargrĂ€nssnitt", + "EnterpriseModules": "Enterprise ready, funktionsrika, förbyggda applikationsmoduler (t.ex. hantering av identitetsserver, SaaS-hantering, sprĂ„khantering)", + "ToolingToSupport": "Verktyg för att stödja din utvecklingsproduktivitet (t.ex. ABP Suite)", + "PremiumSupportLink": "Premium Support", + "WhatDoIDownloadABPCommercial": "Vad laddar jag ner nĂ€r jag köper den kommersiella versionen av ABP?", + "CreateUnlimitedSolutions": "NĂ€r du har köpt en ABP Commercial-licens kan du skapa obegrĂ€nsade lösningar som beskrivs i dokumentet GĂ„ igĂ„ng.", + "ABPCommercialSolutionExplanation": "NĂ€r du skapar en ny applikation fĂ„r du en Visual Studio-lösning (en startmall) som baseras pĂ„ dina önskemĂ„l. Den nedladdade lösningen har kommersiella moduler och teman som redan Ă€r installerade och konfigurerade Ă„t dig. Du kan ta bort en förinstallerad modul eller lĂ€gga till en annan modul om du vill. Alla moduler och teman anvĂ€nder NuGet/NPM-paket som standard.", + "StartDevelopWithTutorials": "Den nedladdade lösningen Ă€r vĂ€l arkitekterad och dokumenterad. Du kan börja utveckla din egen företagskod baserad pĂ„ den genom att följa handledningarna.", + "TryTheCommercialDemo": "Du kan prova Live Demo för att se ett exempel pĂ„ en applikation som skapats med hjĂ€lp av ABP-startmallen.", + "HowManyProducts": "Hur mĂ„nga olika produkter/lösningar kan jag bygga med hjĂ€lp av ABP?", + "HowManyProductsExplanation": "Du kan skapa sĂ„ mĂ„nga projekt du vill under din aktiva licensperiod; det finns ingen grĂ€ns! Efter att din licens har löpt ut kan du inte skapa nya projekt, men du kan fortsĂ€tta att utveckla de projekt du har laddat ner och distribuera dem till ett obegrĂ€nsat antal servrar.", + "HowManyDevelopers": "Hur mĂ„nga utvecklare kan arbeta med ABP?", + "HowManyDevelopersExplanation": "ABP-licenser Ă€r per utvecklare. Olika licenstyper har olika grĂ€nser för utvecklare. Du kan dock lĂ€gga till fler utvecklare till vilken licenstyp som helst nĂ€r du behöver. Kolla in sidan Planer och priser för licenstyper, utvecklargrĂ€nser och ytterligare utvecklingskostnader.", + "ChangingLicenseType": "Kan jag uppgradera min licenstyp senare?", + "ChangingLicenseTypeExplanation": "Du kan uppgradera till en högre licens genom att betala mellanskillnaden inom din aktiva licensperiod. NĂ€r du uppgraderar till en högre licensplan fĂ„r du fördelarna med den nya planen, men licensuppgraderingen Ă€ndrar inte licensens utgĂ„ngsdatum. Dessutom kan du ocksĂ„ lĂ€gga till nya utvecklarplatser till din befintliga licens, kolla in \"Hur mĂ„nga utvecklare kan arbeta med ABP?\" VANLIGA FRÅGOR.", + "LicenseExtendUpgradeDiff": "Vad Ă€r skillnaden mellan licensförlĂ€ngning och uppgradering?", + "LicenseExtendUpgradeDiffExplanation": "FörlĂ€ngning: Genom att förlĂ€nga/förnya din licens kommer du att fortsĂ€tta att fĂ„ premiumsupport och fĂ„ större eller mindre uppdateringar för modulerna och teman. Dessutom kommer du att kunna fortsĂ€tta skapa nya projekt. Och du kommer fortfarande att kunna anvĂ€nda ABP Suite, vilket pĂ„skyndar din utveckling. NĂ€r du förlĂ€nger din licens lĂ€ggs 1 Ă„r till licensens utgĂ„ngsdatum.
Uppgradering: Genom att uppgradera din licens kommer du att befordras till en högre licensplan, vilket gör att du kan fÄ ytterligare fördelar. Kolla in jÀmförelsetabellen för licenser för att se skillnaderna mellan licensplanerna. NÀr du uppgraderar Àndras dÀremot inte licensens utgÄngsdatum! För att förlÀnga licensens slutdatum mÄste du förlÀnga din licens.", + "LicenseRenewalCost": "Vad Àr kostnaden för licensförnyelse efter 1 Är?", + "LicenseRenewalCostExplanation": "Priset för förnyelse (förlÀngning) av standard Team License Àr ${0}, standard Business License Àr ${1} och standard Enterprise License Àr ${2}. Om du redan Àr kund, logga in pÄ ditt konto för att granska den aktuella förnyelseprissÀttningen.", + "HowDoIRenewMyLicense": "Hur förnyar jag min licens?", + "HowDoIRenewMyLicenseExplanation": "Du kan förnya din licens genom att navigera till organisationshanteringssidan. För att dra nytta av vÄra rabatterade priser för tidig förnyelse, se till att du förnyar innan din licens löper ut. Oroa dig inte för att du inte vet nÀr din möjlighet till tidig förnyelse stÀngs; du kommer att fÄ 3 pÄminnelse-e-postmeddelanden innan din prenumeration löper ut. Vi skickar dem 30 dagar, 7 dagar och 1 dag före utgÄngen.", + "IsSourceCodeIncluded": "Omfattar min licens kÀllkoden för pro-modulerna och teman?", + "IsSourceCodeIncludedExplanation1": "Beror pÄ vilken licenstyp du har köpt:", + "IsSourceCodeIncludedExplanation2": "Team: Din lösning anvÀnder moduler och teman som NuGet- och NPM-paket. Den inkluderar inte deras kÀllkod. PÄ sÄ sÀtt kan du enkelt uppgradera dessa moduler och teman nÀr en ny version Àr tillgÀnglig. Du kan dock inte fÄ kÀllkoden för dessa moduler och teman.", + "IsSourceCodeIncludedExplanation3": "Business/Enterprise: Utöver Team-licensen kan du ladda ner kÀllkoden för alla moduler eller teman du behöver. Du kan till och med ta bort NuGet/NPM-paketreferenserna för en viss modul och lÀgga till dess kÀllkod direkt i din lösning för att Àndra den helt.", + "IsSourceCodeIncludedExplanation4": "

Att inkludera kÀllkoden för en modul i din lösning ger dig maximal frihet att anpassa den modulen. Det kommer dock inte att vara möjligt att automatiskt uppgradera modulen nÀr en ny version slÀpps.

Ingen av licenserna inkluderar kÀllkoden för ABP Suite och ABP Studio, vilket Àr externa verktyg som genererar kod Ät dig och hjÀlper din utveckling.

Kolla in sidan Planer och priser för andra skillnader mellan licenstyperna.

<", + "ChangingDevelopers": "Kan jag Àndra de registrerade utvecklarna för min organisation i framtiden?", + "ChangingDevelopersExplanation": "Förutom att lÀgga till nya utvecklare till din licens kan du ocksÄ Àndra befintliga utvecklare (du kan ta bort en utvecklare och lÀgga till en ny pÄ samma plats) utan nÄgon extra kostnad.", + "WhatHappensWhenLicenseEnds": "Vad hÀnder nÀr min licensperiod upphör?", + "WhatHappensWhenLicenseEndsExplanation1": "ABP-licensen Àr en perpetuell licens. NÀr din licens löper ut kan du fortsÀtta att utveckla ditt projekt. Och du Àr inte skyldig att förnya din licens. Din licens levereras med en ettÄrig uppdaterings- och supportplan direkt ur lÄdan. För att fortsÀtta fÄ nya funktioner, prestandaförbÀttringar, buggfixar, support och fortsÀtta anvÀnda ABP Suite mÄste du förnya din licens. NÀr din licens löper ut;", + "WhatHappensWhenLicenseEndsExplanation2": "Du kan inte skapa nya lösningar med hjÀlp av den kommersiella versionen av ABP, men du kan fortsÀtta att utveckla dina befintliga applikationer för alltid.", + "WhatHappensWhenLicenseEndsExplanation3": "Du kommer att kunna fÄ uppdateringar för modulerna och teman inom din MINOR-version (utom RC- eller Preview-versioner). Om du t.ex. anvÀnder v3.2.0 av en modul kan du fortfarande fÄ uppdateringar för v3.2.x (v3.2.1, v3.2.5... etc.) av den modulen. Men du kan inte fÄ uppdateringar för nÀsta större eller mindre version (som v3.3.0, v3.3.3, 4.x.x.. etc.). Till exempel, nÀr din licens löpte ut, den senaste versionen var v4.4.3, och senare publicerade den bÄde 4.4.4-versionen och 4.5.0-versionen, skulle du kunna komma Ät v4.4.X men du skulle inte komma Ät v4.5.X.", + "WhatHappensWhenLicenseEndsExplanation4": "Du kan inte installera nya moduler och teman som lÀggs till i ABP:s kommersiella plattform efter att din licens har upphört.", + "WhatHappensWhenLicenseEndsExplanation5": "Du kan inte anvÀnda ABP Suite.", + "WhatHappensWhenLicenseEndsExplanation6": "Du kan inte fÄ premium support lÀngre.", + "WhatHappensWhenLicenseEndsExplanation7": "Du kan förlÀnga (förnya) din licens om du vill fortsÀtta att fÄ dessa förmÄner. Om du förlÀnger din licens inom {3} dagar efter att din licens har löpt ut, kommer följande rabatter att tillÀmpas: Teamlicens {0}; Företagslicens {1}; Enterprise-licens {2}.", + "discountForYears": "{0}% rabatt för {1} Är", + "WhatHappensWhenLicenseEndsExplanation8": "De ABP-projekt som du genererar lagras inte pÄ vÄra servrar. DÀrför Àr det ditt ansvar att behÄlla kÀllkoden som du laddar ner. NÀr din licens löper ut finns det inget sÀtt att fÄ tag pÄ kÀllkoden för dina genererade ABP-projekt.", + "WhenShouldIRenewMyLicense": "NÀr ska jag förnya min licens?", + "WhenShouldIRenewMyLicenseExplanation": "Om du förnyar din licens inom {3} dagar efter att din licens har löpt ut, kommer följande rabatter att tillÀmpas: Teamlicens {0}; Företagslicens {1}; Enterprise-licens {2}. Men om du förnyar din licens efter {3} dagar efter licensens utgÄngsdatum, kommer förnyelsepriset att vara detsamma som licensens inköpspris och det kommer inte att finnas nÄgon rabatt pÄ din förnyelse.", + "TrialPlan": "Har du en testplan?", + "TrialPlanExplanation": "Ja, för att starta din kostnadsfria testversion, kontakta marketing@volosoft.com. Vi erbjuder ocksÄ en 30-dagars pengarna-tillbaka-garanti för Team-licensen, inga frÄgor stÀlls! Du kan begÀra full Äterbetalning inom de första 30 dagarna efter licensköpet. Vi ger 60% Äterbetalning inom 30 dagar för Business- och Enterprise-licenser. Detta beror pÄ att Business- och Enterprise-licenserna innehÄller den fullstÀndiga kÀllkoden för alla moduler och teman.", + "DoYouAcceptBankWireTransfer": "Accepterar ni banköverföringar?", + "DoYouAcceptBankWireTransferExplanation": "Ja, vi accepterar banköverföringar.
NÀr du har skickat licensavgiften via banköverföring, skicka ditt kvitto och önskad licenstyp till accounting@volosoft.com.
VĂ„r internationella bankkontoinformation:", + "HowToUpgrade": "Hur uppgraderar man befintliga applikationer nĂ€r en ny version finns tillgĂ€nglig?", + "HowToUpgradeExplanation1": "NĂ€r du skapar en ny applikation med hjĂ€lp av ABP anvĂ€nds alla moduler och teman som NuGet- och NPM-paket. PĂ„ sĂ„ sĂ€tt kan du enkelt uppgradera paketen nĂ€r en ny version finns tillgĂ€nglig.", + "HowToUpgradeExplanation2": "Förutom de vanliga NuGet/NPM-uppgraderingarna tillhandahĂ„ller ABP CLI ett uppdateringskommando som automatiskt hittar och uppgraderar alla ABP-relaterade paket i din lösning.", + "DatabaseSupport": "Vilka databassystem stöds?", + "DatabaseSupportExplanation": "ABP Framework i sig Ă€r databasagnostiskt och kan fungera med alla databasleverantörer genom sin natur. Kolla in Data Access-dokumentet för en lista över för nĂ€rvarande implementerade leverantörer.", + "UISupport": "Vilka UI-ramverk stöds?", + "Supported": "Stödd", + "UISupportExplanation": "ABP Framework Ă€r i sig sjĂ€lvt agnostiskt och kan fungera med alla anvĂ€ndargrĂ€nssnitt. Startmallar, modul-anvĂ€ndargrĂ€nssnitt och teman implementerades dock inte för alla anvĂ€ndargrĂ€nssnittsramverk. Kolla in GĂ„ igĂ„ng-dokumentet för den uppdaterade listan över anvĂ€ndargrĂ€nssnittsalternativ.", + "MicroserviceSupport": "Stödjer den microservice-arkitekturen?", + "MicroserviceSupportExplanation1": "Ett av de viktigaste mĂ„len med ABP-ramverket Ă€r att tillhandahĂ„lla en bekvĂ€m infrastruktur för att skapa mikroservicelösningar. Kolla in Microservice Architecture-dokumentet för att förstĂ„ hur det hjĂ€lper till att skapa mikroservicesystem.", + "MicroserviceSupportExplanation2": "Alla ABP-moduler Ă€r utformade för att stödja distributionsscenarier för mikrotjĂ€nster (med eget API och egen databas) genom att följa dokumentet Module Development Best Practices.", + "MicroserviceSupportExplanation3": "Vi tillhandahĂ„ller ett exempel pĂ„ Microservice Demo Solution som visar en implementering av en mikrotjĂ€nstarkitektur för att hjĂ€lpa dig att skapa din egen lösning.", + "MicroserviceSupportExplanation4": "SĂ„ det korta svaret Ă€r: \"Ja, det stöder mikroservicearkitektur\".", + "MicroserviceSupportExplanation5": "Ett mikrotjĂ€nstsystem Ă€r dock en lösning och varje lösning kommer att ha olika krav, nĂ€tverkstopologi, kommunikationsscenarier, autentiseringsmöjligheter, databasdelning/partitioneringsbeslut, runtime-konfigurationer, integrationer med tredjepartssystem och mycket mer.", + "MicroserviceSupportExplanation6": "ABP tillhandahĂ„ller infrastruktur för microservice-scenarier, microservice-kompatibla moduler, exempel och dokumentation som hjĂ€lper dig att bygga din egen lösning. Men förvĂ€nta dig inte att direkt ladda ner din drömlösning som Ă€r förbyggd Ă„t dig. Du mĂ„ste förstĂ„ den och sammanföra specifika delar baserat pĂ„ dina krav.", + "WhereCanIDownloadSourceCode": "Var kan jag ladda ner kĂ€llkoden?", + "WhereCanIDownloadSourceCodeExplanation": "Du kan ladda ner kĂ€llkoden för alla ABP-moduler, Angular-paket och teman via ABP Suite eller ABP CLI. Kolla in Hur man laddar ner kĂ€llkoden?", + "ComputerLimitation": "Hur mĂ„nga datorer kan en utvecklare logga in pĂ„ nĂ€r han utvecklar ABP?", + "ComputerLimitationExplanation": "Vi tillĂ„ter specifikt {0} datorer per individ/licensierad utvecklare. NĂ€r det finns ett behov för en utvecklare att utveckla ABP-baserade produkter pĂ„ en tredje maskin, ska ett e-postmeddelande skickas till license@abp.io dĂ€r situationen förklaras, och vi kommer sedan att göra lĂ€mplig tilldelning i vĂ„rt system.", + "RefundPolicy": "Har ni nĂ„gon Ă„terbetalningspolicy?", + "RefundPolicyExplanation": "Du kan begĂ€ra Ă„terbetalning inom 30 dagar efter ditt licensköp. Licenstyperna Business och Enterprise har alternativ för nedladdning av kĂ€llkod; dĂ€rför ger vi en Ă„terbetalning pĂ„ 60 % inom 30 dagar för Business- och Enterprise-licenser. Dessutom görs inga Ă„terbetalningar för förnyelser och andra licensköp.", + "HowCanIRefundVat": "Hur kan jag Ă„terbetala moms?", + "HowCanIRefundVatExplanation1": "Om du gjorde betalningen med 2Checkout kan du Ă„terbetala momsen via ditt 2Checkout-konto:", + "HowCanIRefundVatExplanation2": "Logga in pĂ„ ditt 2Checkout-konto", + "HowCanIRefundVatExplanation3": "Leta upp rĂ€tt order och tryck pĂ„ \"Återbetala försenad moms\" (ange ditt momsregistreringsnummer)", + "HowCanIGetMyInvoice": "Hur kan jag fĂ„ min faktura?", + "HowCanIGetMyInvoiceExplanation": "Det finns 2 betalningsgateways för att köpa en licens: Iyzico och 2Checkout. Om du köper din licens via 2Checkout-gatewayen skickar den PDF-fakturan till din e-postadress; kolla in 2Checkout-fakturering. Om du köper via Iyzico-gatewayen, med en anpassad inköpslĂ€nk eller via en banköverföring, kommer vi att förbereda och skicka din faktura. Du kan begĂ€ra eller ladda ner din faktura frĂ„n sidan för organisationshantering. Innan du kontaktar oss för fakturan, kontrollera din organisationshanteringssida!", + "Forum": "Forum", + "SupportExplanation": "ABP-licensen ger ett premiumforumstöd av ett team som bestĂ„r av ABP Framework-experter.", + "PrivateTicket": "Privat biljett", + "PrivateTicketExplanation": "Enterprise License inkluderar Ă€ven en privat support med e-post och Ă€rendehanteringssystem.", + "AbpSuiteExplanation1": "Med ABP Suite kan du skapa webbsidor pĂ„ bara nĂ„gra minuter. Det Ă€r ett globalt .NET Core-verktyg som kan installeras frĂ„n kommandoraden.", + "AbpSuiteExplanation2": "Den kan skapa en ny ABP-lösning och generera CRUD-sidor frĂ„n databasen till frontend. För teknisk översikt se dokumentet", + "FastEasy": "Snabbt och enkelt", + "AbpSuiteExplanation3": "Med ABP Suite kan du enkelt skapa CRUD-sidor. Du behöver bara definiera din entitet och dess egenskaper och lĂ„ta resten gĂ„ till ABP Suite Ă„t dig! ABP Suite genererar all nödvĂ€ndig kod för din CRUD-sida pĂ„ nĂ„gra sekunder. Den stöder Angular, MVC och Blazor anvĂ€ndargrĂ€nssnitt.", + "RichOptions": "Rika alternativ", + "AbpSuiteExplanation4": "ABP Suite stöder flera anvĂ€ndargrĂ€nssnittsalternativ som Razor Pages och Angular. Den stöder ocksĂ„ flera databaser som MongoDB och alla databaser som stöds av EntityFramework Core (MS SQL Server, Oracle, MySql, PostgreSQL och andra leverantörer...).", + "AbpSuiteExplanation5": "Det som Ă€r bra Ă€r att du inte behöver oroa dig för dessa alternativ. ABP Suite förstĂ„r din projekttyp och genererar koden för ditt projekt och placerar den genererade koden pĂ„ rĂ€tt plats i ditt projekt.", + "SourceCode": "KĂ€llkod", + "AbpSuiteExplanation6": "ABP Suite genererar kĂ€llkoden Ă„t dig! Den genererar inte magiska filer för att generera webbsidan. ABP Suite genererar kĂ€llkoden för Entity, Repository, Application Service, Code First Migration, JavaScript/TypeScript och CSHTML/HTML och Ă€ven nödvĂ€ndiga grĂ€nssnitt. ABP Suite genererar ocksĂ„ koden enligt Best Practices för programvaruutveckling, sĂ„ du behöver inte oroa dig för den genererade kodens kvalitet.", + "AbpSuiteExplanation7": "Eftersom du har kĂ€llkoden för byggstenarna i den genererade CRUD-sidan i rĂ€tt applikationslager kan du enkelt Ă€ndra kĂ€llkoden och lĂ€gga till din egen anpassade affĂ€rslogik i den genererade koden.", + "CrossPlatform": "Plattformsoberoende", + "AbpSuiteExplanation8": "ABP Suite Ă€r byggt med .NET Core och Ă€r plattformsoberoende. Den körs som en webbapplikation pĂ„ din lokala dator. Du kan köra den pĂ„ Windows, Mac och Linux", + "OtherFeatures": "Andra funktioner", + "OtherFeatures1": "Uppdaterar enkelt NuGet- och NPM-paket pĂ„ din lösning.", + "OtherFeatures2": "Återskapar redan genererade sidor frĂ„n början.", + "OtherFeatures3": "Skapar nya lösningar", + "ThanksForCreatingProject": "Ditt projekt har skapats framgĂ„ngsrikt!", + "HotToRunSolution": "Hur kör du din lösning?", + "HotToRunSolutionExplanation": "I dokumentet Kom igĂ„ng kan du lĂ€sa om hur du konfigurerar och kör din lösning.", + "GettingStarted": "Komma igĂ„ng", + "WebAppDevTutorial": "Handledning för utveckling av webbapplikationer", + "WebAppDevTutorialExplanation": "I handledningsdokumentet för utveckling av webbapplikationer finns ett exempel pĂ„ utveckling steg för steg.", + "Document": "Dokument", + "UsingABPSuiteToCURD": "AnvĂ€nda ABP Suite för generering av CRUD-sidor och verktyg", + "SeeABPSuiteDocument": "Kolla in ABP Suite-dokumentet för att lĂ€ra dig anvĂ€ndningen av ABP Suite.", + "AskQuestionsOnSupport": "Du kan stĂ€lla frĂ„gor pĂ„ ABP Support.", + "Documentation": "Dokumentation", + "SeeModulesDocument": "Se sidan med moduler för en lista över alla PRO-moduler.", + "Pricing": "PrissĂ€ttning", + "PricingExplanation": "VĂ€lj de egenskaper och funktioner som ditt företag behöver idag. Uppgradera enkelt nĂ€r ditt företag vĂ€xer.", + "Team": "Team", + "Business": "Företag", + "Enterprise": "Företag", + "Custom": "Anpassad", + "IncludedDeveloperLicenses": "Inkluderade utvecklarlicenser", + "CustomLicenceOrAdditionalServices": "Behöver du en anpassad licens eller ytterligare tjĂ€nster?", + "CustomOrVolumeLicense": "Anpassad licens eller volymlicens", + "LiveTrainingSupport": "Utbildning och support i realtid", + "AndMore": "och mer", + "AdditionalDeveloperLicense": "Ytterligare licens för utvecklare", + "ProjectCount": "ProjektrĂ€kning", + "AllProModules": "Alla proffsmoduler", + "AllProThemes": "Alla proffsteman", + "AllProStartupTemplates": "Alla proffsmallar för nystartade företag", + "SourceCodeOfAllModules": "KĂ€llkod för alla moduler", + "SourceCodeOfAllThemes": "KĂ€llkod för alla teman", + "PerpetualLicense": "Evig licens", + "UnlimitedServerDeployment": "ObegrĂ€nsad serverdistribution", + "YearUpgrade": "1 Ă„rs uppgradering", + "YearPremiumForumSupport": "1 Ă„rs premiumsupport för forum", + "ForumSupportIncidentCountYear": "Antal incidenter för forumstöd/Ă„r", + "PrivateTicketEmailSupport": "Privat support via biljett och e-post", + "BuyNow": "Köp nu", + "PayViaAmexCard": "Hur kan jag betala med mitt AMEX-kort?", + "PayViaAmexCardDescription": "Standardbetalningsgatewayen \"Iyzico\" kan neka vissa AMEX-kreditkort pĂ„ grund av sĂ€kerhetsĂ„tgĂ€rder. I detta fall kan du betala via den alternativa betalningsgatewayen \"2Checkout\".", + "ThankYou": "Tack sĂ„ mycket", + "InvalidReCaptchaErrorMessage": "Det uppstod ett fel vid verifiering av reCAPTCHA. VĂ€nligen försök igen.", + "CompanyName": "Företagets namn", + "YourCompanyName": "Ditt företagsnamn", + "FirstName": "Förnamn", + "LastName": "Efternamn", + "Optional": "Valfritt", + "YourFirstName": "Ditt förnamn", + "YourLastName": "Ditt efternamn", + "SpecialOffer": "Specialerbjudande", + "SpecialOfferMessage": "Skynda dig! Priserna gĂ€ller under en begrĂ€nsad tid.", + "DiscountRequest": "BegĂ€ran om rabatt", + "DiscountRequestDescribeCustomerQuestion": "Vilken av följande beskrivningar stĂ€mmer in pĂ„ dig?", + "DiscountRequestStudentEmailMessage": "E-postadressen mĂ„ste innehĂ„lla \"edu\".", + "DiscountRequestDeveloperCount": "Hur mĂ„nga utvecklare Ă€r ni?", + "DiscountRequestDeveloperCountExceedMessage": "Vi erbjuder inte rabatterade licenser för företag som har fler Ă€n {0} utvecklare.", + "DiscountRequestOrganizationName": "Företagets/organisationens/skolans namn", + "Website": "Webbplats", + "GithubUsername": "AnvĂ€ndarnamn för GitHub", + "PhoneNumber": "Telefonnummer", + "Country": "Land", + "DescribeABPCommercialUsage": "Beskriv det projekt som du planerar att utveckla baserat pĂ„ APB", + "DiscountRequestCertifyInformationMessage": "Jag intygar att alla uppgifter Ă€r sanningsenliga och korrekta.", + "DiscountRequestReceived": "Vi har mottagit din begĂ€ran om rabatt.", + "DiscountRequestStatusMessage": "Vi kommer att svara dig efter att ha kontrollerat den information du har lĂ€mnat.", + "MVCOrRazorPages": "MVC (Razor Pages)", + "Angular": "Angular", + "Blazor": "Blazor", + "New": "Nya", + "MongoDB": "MongoDB", + "EBookDDD": "E-bok DomĂ€nstyrd design", + "PracticalGuideForImplementingDDD": "Den hĂ€r boken Ă€r en praktisk guide för att implementera domĂ€ndriven design med ABP-ramverket.", + "IntroducingDDD": "Introduktion till domĂ€ndriven design", + "DDDLayersAndCleanArchitecture": "DDD-skikt och ren arkitektur", + "LayeringOfADotnetSolution": "Skiktning av en .NET-lösning", + "ImplementingDDDBuildingBlocks": "Implementering av DDD-byggstenar", + "DomainVsApplicationLogic": "DomĂ€nlogik vs applikationslogik", + "SamplesAndDiscussions": "Provtagningar och diskussioner", + "Free": "Gratis", + "Download": "Nedladdningar", + "DDDEBook": "DDD E-bok", + "ImplementingDDD": "Implementering av domĂ€ndriven design", + "DDDBookExplanation": "En praktisk guide för implementering av domĂ€ndriven design med ABP-ramverket.", + "Overview": "Översikt", + "DDDBookPracticalGuide": "Detta Ă€r en praktisk guide för implementering av domĂ€ndriven design (DDD). Implementeringsdetaljerna bygger pĂ„ ABP Framework-infrastrukturen, men kĂ€rnkoncepten, principerna och mönstren Ă€r tillĂ€mpliga pĂ„ alla typer av lösningar, Ă€ven om det inte Ă€r en .NET-lösning.", + "TableOfContents": "InnehĂ„llsförteckning", + "IntroductionToImplementingDDD": "Introduktion till implementering av domĂ€ndriven design", + "WhatIsDDD": "Vad Ă€r domĂ€ndriven design?", + "Implementation": "Implementering", + "TheBigPicture": "Den stora bilden", + "TheBuildingBlock": "Byggstenen", + "ExampleUseCase": "Exempel AnvĂ€ndningsfall", + "DomainAndApplicationLogic": "DomĂ€nlogik och applikationslogik", + "Author": "Författaren", + "PublishedOn": "Publicerad pĂ„", + "Page": "Sidan", + "FreeEBook": "Gratis e-bok", + "EBookSignInForDownload": "För att ladda ner e-boken logga in", + "SignIn": "Logga in", + "Or": "Eller", + "TellUsAboutYourself": "BerĂ€tta lite om dig sjĂ€lv", + "Surname": "Efternamn", + "DoYouAgreePrivacyPolicy": "Jag samtycker till Terms & Conditions och Privacy Policy.", + "VolosoftMarketingInformationMessage": "Jag vill ha information, tips och erbjudanden om Solutions for Businesses and Organizations och andra produkter och tjĂ€nster frĂ„n Volosoft.", + "VolosoftSharingInformationMessage": "Jag vill att Volosoft ska dela min information med utvalda partners sĂ„ att jag kan fĂ„ relevant information om deras produkter och tjĂ€nster.", + "WeWillSendYouADownloadLink": "LĂ€nken för nedladdning av e-boken har skickats till {0}. Kontrollera din inkorg, skrĂ€ppost och spamboxar!", + "InvalidFormInputs": "VĂ€nligen skriv in den giltiga information som anges pĂ„ formulĂ€ret.", + "DDDBookEmailBody": "Tack sĂ„ mycket.
För att ladda ner din bok, klicka hÀr.", + "StartFree": "Starta gratis", + "FreeTrial": "Gratis provperiod", + "AcceptsMarketingCommunications": " Ja, jag vill gÀrna fÄ ABP-relaterade marknadsföringsnyheter.", + "PurposeOfUsage": "Syfte med anvÀndningen", + "Choose": "- VÀlj -", + "CompanyOrganizationName": "Företagets/organisationens namn", + "CompanySize": "Företagets storlek", + "Next": "NÀsta", + "StartTrial": "Starta min kostnadsfria testperiod", + "ContactUsQuestions": "Kontakta oss om du har nÄgra frÄgor", + "TrialActivatedWarning": "En anvÀndare har endast rÀtt till 1 gratis provperiod. Du har redan anvÀnt din provperiod.", + "ActivationRequirement": "Du Àr bara ett steg frÄn att starta din provperiod.
Efter att ha kontrollerat din information aktiverar vi din licens. NÀr din licens Àr aktiverad skickar vi ett e-postmeddelande till {0}. Oroa dig inte, den hÀr processen kommer inte att ta lÄng tid!", + "SaveAndDownload": "Spara och ladda ner", + "CompanyNameValidationMessage": "Företagsnamnet Àr för lÄngt!", + "AddressValidationMessage": "Adressen Àr för lÄng!", + "TaxNoValidationMessage": "TAX/VAT Nej Àr för lÄngt!", + "NotesValidationMessage": "AnteckningsfÀltet Àr för lÄngt!", + "CheckYourBillingInfo": "Du kan bara skapa din faktura en gÄng! Kontrollera din faktureringsinformation innan du skapar din faktura.", + "StartYourFreeTrial": "Starta din kostnadsfria testperiod", + "TrialLicenseModelInvalidErrorMessage": "Ett av följande fÀlt Àr ogiltigt: Landsnamn, Företagsstorlek, Bransch eller Syfte med anvÀndning.", + "Trial": "RÀttegÄng", + "Purchased": "Köpte", + "PurchaseNow": "Köp nu", + "PurchaseTrialLicenseMessage": "Din licens utgÄngsdatum Àr {0}.
Om du vill fortsĂ€tta anvĂ€nda de projekt som du skapade under din kostnadsfria testperiod mĂ„ste du Ă€ndra licensnycklarna i dina appsettings.secrets.json-filer. HĂ€r Ă€r din licensnyckel:", + "TrialLicenseExpireMessage": "Du anvĂ€nder en testlicens och din testlicens upphör att gĂ€lla den {0}.", + "TryForFree": "Prova gratis", + "TrialLicenseExpiredInfo": "Din testlicensperiod har löpt ut!", + "DowngradeLicensePlan": "Kan jag nedgradera till en lĂ€gre licensplan i framtiden?", + "DowngradeLicensePlanExplanation": "Du kan inte nedgradera din befintliga licensplan. Men du kan köpa en ny lĂ€gre licensplan och fortsĂ€tta din utveckling pĂ„ den nya licensen. NĂ€r du har köpt en lĂ€gre licens behöver du bara logga in pĂ„ din nya licensplan via ABP CLI-kommandot: ` abp login -o `.", + "LicenseTransfer": "Kan en licens överföras frĂ„n en utvecklare till en annan?", + "LicenseTransferExplanation": "Ja, det gör jag! NĂ€r du köper en licens blir du licensinnehavare och fĂ„r dĂ€rmed tillgĂ„ng till sidan för organisationshantering. En organisation har rollerna Ă€gare och utvecklare. Ägare kan hantera utvecklarplatserna och tilldela utvecklare. Varje tilldelad utvecklare loggar in via ABP CLI-kommandot i systemet och har utvecklings- och supportbehörighet.", + "UserOwnerDescription": "Organisationens \"Ă€gare\" Ă€r administratör för detta konto. Han/hon hanterar organisationen genom att köpa licenser och tilldela utvecklare. En \"Ă€gare\" kan inte skriva kod i ABP-projekten, kan inte ladda ner ABP-exempelprojekten och kan inte stĂ€lla frĂ„gor pĂ„ supportwebbplatsen. Om du vill göra allt detta mĂ„ste du ocksĂ„ lĂ€gga till dig sjĂ€lv som utvecklare.", + "UserDeveloperDescription": "\"Utvecklarna\" kan skriva kod i ABP-projekten, ladda ner ABP:s exempelprojekt och stĂ€lla frĂ„gor pĂ„ supportwebbplatsen. Å andra sidan kan \"utvecklarna\" inte hantera den hĂ€r organisationen.", + "RemoveCurrentUserFromOrganizationWarningMessage": "Du tar bort dig sjĂ€lv frĂ„n din egen organisation. Du kommer inte lĂ€ngre att kunna hantera den hĂ€r organisationen, bekrĂ€ftar du det?", + "RenewExistingOrganizationOrCreateNewOneMessage": "Du kan förnya licensen för din organisation (er) genom att klicka pĂ„ nedanstĂ„ende \"FörlĂ€ng nu\"-knapp (ar) och dĂ€rmed kan du förlĂ€nga licensens utgĂ„ngsdatum med 1 Ă„r. Om du fortsĂ€tter till kassan kommer du att ha en ny organisation. Vill du fortsĂ€tta med en ny organisation?", + "PurchaseTrialOrganizationOrCreateNewOneMessage": "Du har en testlicens. För att köpa din testlicens klickar du pĂ„ knappen Köp nu. Om du fortsĂ€tter till kassan kommer du att ha en ny organisation. Vill du fortsĂ€tta med en ny organisation?", + "ExtendNow": "FörlĂ€nga / Förnya", + "CreateNewOrganization": "Skapa en ny organisation", + "RenewLicenseEarly": "Om jag förnyar min licens tidigt, kommer jag att fĂ„ hela Ă„ret?", + "RenewLicenseEarylExplanation": "NĂ€r du förnyar din licens före licensens utgĂ„ngsdatum kommer 1 Ă„r att lĂ€ggas till licensens utgĂ„ngsdatum. Om din licens t.ex. löper ut den {0}-06-06 och du förnyar den den {0}-01-01, kommer din nya licens att löpa ut den {1}-06-06.", + "OpenSourceWebApplication": "Webbapplikation med öppen kĂ€llkod", + "CompleteWebDevelopment": "En komplett webbutveckling", + "ABPFrameworkDescription": "ABP Framework Ă€r en komplett infrastruktur för att skapa moderna webbapplikationer genom att följa de bĂ€sta metoderna för mjukvaruutveckling och konventioner.", + "CommunityDescription": "Dela dina erfarenheter av ABP-ramverket!", + "GetStarted": "Kom igĂ„ng", + "Views": "utsikt", + "LatestPosts": "Senaste inlĂ€gg", + "PreBuiltApplication": "Förbyggd applikation", + "DatabaseProviders": "Databasleverantörer", + "UIFrameworks": "Ramverk för anvĂ€ndargrĂ€nssnitt", + "UsefulLinks": "AnvĂ€ndbara lĂ€nkar", + "Platform": "Plattform", + "CoolestCompaniesUseABPCommercial": "De coolaste företagen anvĂ€nder redan ABP.", + "UserInterface": "AnvĂ€ndargrĂ€nssnitt", + "APIGateway": "API-gateway", + "Microservice": "Mikroservice", + "Database": "Databas", + "Architecture": "Arkitektur", + "MicroserviceArchitectureExplanation": "Det hĂ€r Ă€r en komplett lösningsarkitektur som bestĂ„r av flera applikationer, API-gateways, mikrotjĂ€nster och databaser för att bygga en skalbar mikrotjĂ€nstlösning med den senaste tekniken.", + "BusinessLogic": "AffĂ€rslogik", + "DataAccessLayer": "DataĂ„tkomstskikt", + "Monolith": "Monolit", + "ModularArchitectureExplanation": "Denna startup-mall ger en skiktad, modulĂ€r och DDD-baserad lösningsarkitektur för att bygga en ren och underhĂ„llbar kodbas.", + "SeeDetails": "Se detaljer", + "SeeDocumentation": "Kolla in dokumentationen", + "Bs5Compatible": "Professionellt tema som Ă€r kompatibelt med Bootstrap 5, perfekt för din administratörswebbplats.", + "LeptonXTheme": "LeptonX tema", + "LeptonXDark": "LeptonX Mörk", + "LeptonXLight": "LeptonX Ljus", + "LeptonXSemiDark": "LeptonX Halvmörk", + "BuiltOnBs5Library": "Byggd pĂ„ Bootstrap 5-biblioteket", + "FullyCompatibleWithBs5": "100% kompatibel med Bootstrap 5 HTML-struktur och CSS-klasser", + "ResponsiveAndMobileCompatible": "Responsiv, mobilkompatibel, RTL-stöd", + "ProvidesStylesForDatatables": "TillhandahĂ„ller stilar för datatabeller", + "MultipleLayoutOptions": "Flera layoutalternativ", + "EasilyInstallAndUpgrade": "Enkel installation och uppgradering", + "SupportForum": "Forum för support", + "TrustedBy": "Betrodda av", + "OurPricing": "VĂ„r prissĂ€ttning", + "Plans": "Planer", + "NameSurname": "Namn Efternamn", + "Unspecified": "Ospecificerad", + "LicenceType": "Typ av licens", + "LicenseDiscountWarning": "DENNA RABATTSIDA ANVÄNDER STANDARD RABATTKOD OCH FÖR VOLOSOFT UTVECKLARE. INKÖPSLÄNKAR NEDAN FUNGERAR INTE.", + "DiscountedLicenseExplanation": "Dessa licenspriser Ă€r avsedda för smĂ„ nystartade företag, enskilda utvecklare, studenter, ideella organisationer och projekt!", + "General": "AllmĂ€nt", + "License": "Licens", + "Development": "Utveckling", + "Payment": "Betalning", + "WatchExplainerVideo": "LĂ„t oss trĂ€ffas! Titta pĂ„ förklarande video", + "LightDarkAndSemiDarkThemes": "Ljus, mörk och halvmörk", + "LeptonXThemeExplanation": "Lepton Theme kan Ă€ndra ditt tema enligt dina systeminstĂ€llningar.", + "PRO": "PRO", + "WelcomeToABPCommercial": "VĂ€lkommen till ABP Platform!", + "YourAccountDetails": "Dina kontouppgifter", + "OrganizationName": "Organisationens namn", + "AddDevelopers": "LĂ€gg till utvecklare", + "StartDevelopment": "Starta utveckling", + "CreateAndRunApplicationUsingStartupTemplate": "LĂ€r dig hur du skapar och kör en ny webbapplikation med hjĂ€lp av ABP:s startmallar.", + "CommunityDescription2": "community.abp.io Ă€r en plats dĂ€r mĂ€nniskor kan dela ABP-relaterade artiklar. Sök efter artiklar, handledningar, kodprover, fallstudier och trĂ€ffa mĂ€nniskor som Ă€r i samma spĂ„r som du.", + "UseABPSuiteExplanation": "AnvĂ€nd ABP Suite för att ladda ner kĂ€llkoden för modulerna och temana.", + "ManageModulesWithSuite": "Du kan ocksĂ„ hantera dina ABP-moduler med Suite.", + "LearnHowToInstallSuite": "LĂ€r dig hur du installerar och anvĂ€nder ABP Suite.", + "SeeMore": "Se mer", + "SeeLess": "Se mindre", + "LayeredSolutionStructure": "Struktur med flera lager av lösningar", + "LayeredSolutionStructureExplanation": "Lösningen Ă€r uppbyggd i lager baserat pĂ„ principer och mönster för domĂ€ndriven design för att isolera affĂ€rslogiken frĂ„n infrastruktur och integrationer och för att maximera underhĂ„ll och Ă„teranvĂ€ndning av koden. ABP Framework tillhandahĂ„ller redan abstraktioner, basklasser och guider för att verkligen implementera DDD för din applikation.", + "MultipleUIOptions": "Flera alternativ för anvĂ€ndargrĂ€nssnitt", + "MultipleUIOptionsExplanation": "Vi Ă€lskar olika sĂ€tt att skapa anvĂ€ndargrĂ€nssnitt. Den hĂ€r startup-lösningen ger tre olika alternativ för anvĂ€ndargrĂ€nssnitt för din affĂ€rsapplikation.", + "MultipleDatabaseOptions": "Flera databasalternativ", + "MultipleDatabaseOptionsExplanation": "Du har tvĂ„ alternativ för databasleverantörer (förutom att du kan anvĂ€nda bĂ„da i en och samma applikation). AnvĂ€nd Entity Framework Core för att arbeta med alla relationsdatabaser och anvĂ€nd eventuellt Dapper nĂ€r du behöver skriva lĂ„gnivĂ„frĂ„gor för bĂ€ttre prestanda. MongoDB Ă€r ett annat alternativ om du behöver anvĂ€nda en dokumentbaserad NoSQL-databas. Även om dessa leverantörer Ă€r vĂ€lintegrerade, abstraherade och förkonfigurerade kan du faktiskt interagera med alla databassystem som du kan anvĂ€nda med .NET.", + "ModularArchitectureExplanation2": "Modularitet Ă€r en första klassens medborgare i ABP.IO-plattformen. Alla applikationsfunktionaliteter Ă€r uppdelade i vĂ€lisolerade valfria moduler. Startlösningen levereras redan med de grundlĂ€ggande ABP-modulerna förinstallerade. Du kan ocksĂ„ skapa dina egna moduler för att bygga ett modulĂ€rt system för din egen applikation.", + "MultiTenancyForSaasBusiness": "Multi-Tenancy för ditt SaaS-företag", + "MultiTenancyForSaasBusinessExplanation": "ABP tillhandahĂ„ller ett komplett, end-to-end multi-tenancy-system för att skapa dina SaaS-system (Software-as-a-Service). Det gör det möjligt för hyresgĂ€sterna att dela eller ha sina egna databaser med on-the-fly databasskapande och migrationssystem.", + "MicroserviceStartupSolution": "Microservice Startup-lösning", + "MicroserviceArchitectureExplanation2": "Du kan skaffa det till ditt nĂ€sta microservice-system för att dra nytta av den förbyggda baslösningen och destillerade erfarenheten.", + "PreIntegratedTools": "Förintegrerad i populĂ€ra verktyg", + "PreIntegratedToolsExplanation": "Lösningen Ă€r redan integrerad i branschens standardverktyg och -tekniker, men du kan alltid Ă€ndra dem och integrera dem med dina favoritverktyg.", + "SingleSignOnAuthenticationServer": "Server för autentisering med enkel inloggning", + "SingleSignOnAuthenticationServerExplanation": "Lösningen har en autentiseringsserverapplikation som anvĂ€nds av de andra applikationerna som en server för enkel inloggning med API-Ă„tkomsthanteringsfunktioner. Den Ă€r baserad pĂ„ IdentityServer.", + "WebAppsWithGateways": "2 Webbapp med 2 API-gateways", + "WebAppsWithGatewaysExplanation": "Lösningen innehĂ„ller tvĂ„ webbapplikationer som var och en har en dedikerad API-gateway (BFF - Backend For Frontend-mönster).", + "BackOfficeApplication": "Back Office-applikation", + "BackOfficeApplicationExplanation": "Den faktiska webbapplikationen för ditt system, med flera alternativ för anvĂ€ndargrĂ€nssnitt. Du kan skapa alla typer av affĂ€rsapplikationer.", + "LandingWebsite": "Landningswebbplats", + "LandingWebsiteExplanation": "En generisk landningsplats/publik webbplats som kan anvĂ€ndas för flera Ă€ndamĂ„l, t.ex. för att presentera ditt företag, sĂ€lja dina produkter osv.", + "ABPFrameworkEBook": "Mastering ABP Framework e-bok", + "MasteringAbpFrameworkEBookDescription": "IngĂ„r i din ABP-licens", + "FullName": "Full Name", + "LicenseTypeNotCorrect": "Licenstypen Ă€r inte korrekt!", + "Trainings": "Utbildningar", + "ChooseTrainingPlaceholder": "VĂ€lj utbildning...", + "DoYouNeedTrainings": "Behöver du nĂ„gon av dessa utbildningar?", + "DoYouNeedTraining": "Behöver du {0} utbildning?", + "GetInTouchUs": "Ta kontakt med oss", + "ForMoreInformationClickHere": "För mer information, klicka hĂ€r.", + "ForMoreInformationClickHereByClass": "För mer information, klicka hĂ€r.", + "IsGetOnboardingTraining": "Vill du fĂ„ utbildning i onboarding och utveckling av webbapplikationer?", + "OnboardingWebApplicationDevelopmentTrainingMessage": "För att schemalĂ€gga din utbildningskalender, vĂ€nligen kontakta {0} efter att du har skapat organisationen", + "CustomPurchaseMessage": "För nĂ€sta steg, klicka pĂ„ {0} för att kontakta oss.", + "Note": "Notera", + "AdditionalNote": "Ytterligare anmĂ€rkning", + "OnboardingTrainingFaqTitle": "Har du en ABP onboarding-utbildning?", + "OnboardingTrainingFaqExplanation": "Ja, vi har ABP Training Services som hjĂ€lper dig att snabbt komma igĂ„ng med ditt ABP-projekt. Du kommer att lĂ€ra dig om ABP frĂ„n en medlem i ABP:s kĂ€rnteam och du kommer att fĂ„ de fĂ€rdigheter som krĂ€vs för att starta ditt ABP-projekt. I onboarding-utbildningen förklarar vi hur du stĂ€ller in din utvecklingsmiljö, installerar de nödvĂ€ndiga verktygen och skapar en fullt fungerande CRUD-sida. Utbildningen kommer att vara live och Zoom-applikationen kommer att anvĂ€ndas, men vi Ă€r öppna för att anvĂ€nda andra online-mötesplattformar. SprĂ„ket för utbildningen kommer att vara engelska. Du kan ocksĂ„ stĂ€lla dina frĂ„gor om ABP under sessionerna. En lĂ€mplig tid och ett lĂ€mpligt datum kommer att planeras för bĂ„da parter. För att fĂ„ mer information, kontakta oss pĂ„ info@abp.io.", + "AddBasket": "LĂ€gg till i korgen", + "SendTrainingRequest": "Skicka förfrĂ„gan om utbildning", + "OnlyEnglishVersionOfThisDocumentIsTheRecentAndValid": "* Den engelska versionen av detta dokument Ă€r den mest aktuella och den engelska versionen ska ha företrĂ€de i alla tvister.", + "Pricing_Page_Title": "Priser och planer", + "Pricing_Page_Description": "VĂ€lj de funktioner och den funktionalitet som ditt företag behöver idag. Köp en ABP-licens och skapa obegrĂ€nsat med projekt.", + "Pricing_Page_HurryUp": "Skynda dig!", + "Pricing_Page_BuyLicense": "Köp en licens till 2021 Ă„rs priser fram till den 16 januari!", + "Pricing_Page_ValidForExistingCustomers": "GĂ€ller Ă€ven för befintliga kunder och licensförnyelser.", + "Pricing_Page_Hint1": "I licenspriset ingĂ„r ett visst antal platser för utvecklare. Om du har fler utvecklare kan du alltid köpa ytterligare platser.", + "Pricing_Page_Hint2": "Du kan köpa fler utvecklarlicenser nu eller i framtiden. Licenserna Ă€r platsbaserade, vilket innebĂ€r att du kan överföra en plats frĂ„n en utvecklare till en annan.", + "Pricing_Page_Hint3": "Du kan utveckla ett obegrĂ€nsat antal olika produkter med din licens.", + "Pricing_Page_Hint4": "ABP Suite Ă€r ett verktyg som hjĂ€lper dig att utveckla och förbĂ€ttra din produktivitet. Det stöder generering av CRUD-sidor och skapande av nya projekt.", + "Pricing_Page_Hint5": "Du kan anvĂ€nda alla de förbyggda modulerna i dina applikationer.", + "Pricing_Page_Hint6": "Du kan anvĂ€nda alla de förbyggda temana i dina applikationer.", + "Pricing_Page_Hint7": "En startmall Ă€r en Visual Studio-lösning som hjĂ€lper dig att komma igĂ„ng med ditt projekt. Alla grundlĂ€ggande moduler lĂ€ggs till och förkonfigureras Ă„t dig.", + "Pricing_Page_Hint8": "Mastering ABP Framework e-bok förklarar hur man implementerar .NET-lösningar med bĂ€sta praxis. Den sĂ€ljs pĂ„ Amazon.com, och du kan ladda ner boken gratis med din licens.", + "Pricing_Page_Hint9": "Du kan ladda ner kĂ€llkoden för alla moduler. Du kanske vill lĂ€gga till kĂ€llkoden i din lösning för att göra radikala Ă€ndringar eller bara behĂ„lla den för dig sjĂ€lv av sĂ€kerhetsskĂ€l.", + "Pricing_Page_Hint10": "Licenserna Ă€r livstidsbaserade. Det innebĂ€r att du kan fortsĂ€tta att utveckla din applikation för alltid. TillgĂ„ng till den senaste versionen och support beviljas inom licensperioden (1 Ă„r om du inte förnyar den).", + "Pricing_Page_Hint11": "Inga begrĂ€nsningar för driftsĂ€ttning! Du kan distribuera till sĂ„ mĂ„nga servrar som du vill, inklusive molntjĂ€nster eller lokalt.", + "Pricing_Page_Hint12": "Du kan uppdatera moduler, teman och verktyg till den senaste versionen inom din aktiva licensperiod. NĂ€r din licens löper ut mĂ„ste du förnya den för att fortsĂ€tta att fĂ„ uppdateringar för buggfixar, nya funktioner och förbĂ€ttringar.", + "Pricing_Page_Hint13": "Du kan fĂ„ premiumsupport i ett Ă„r (du kan förnya din licens för att förlĂ€nga den).", + "Pricing_Page_Hint14": "Team- och Business-licenser har en grĂ€ns för antal incidenter/frĂ„gor. Om du köper ytterligare utvecklarlicenser ökar incidentgrĂ€nsen med {0} (för Team-licensen) eller {1} (för Business-licensen) per utvecklare.", + "Pricing_Page_Hint15": "Endast Enterprise License inkluderar privat support. Du kan skicka ett e-postmeddelande direkt till ABP-teamet eller stĂ€lla frĂ„gor pĂ„ support.abp.io med ett privat biljettalternativ. De privata Ă€rendena Ă€r inte synliga för allmĂ€nheten.", + "Pricing_Page_Hint16": "Du kan ladda ner kĂ€llkoden för alla ABP-teman. Du kanske vill lĂ€gga till kĂ€llkoden i din lösning för att göra radikala Ă€ndringar eller bara behĂ„lla den för dig sjĂ€lv av sĂ€kerhetsskĂ€l.", + "Pricing_Page_Testimonial_1": "ABP gjorde det möjligt för SC Ventures att leverera en bankklassad SaaS-plattform med silodatabas med flera hyresgĂ€ster pĂ„ 9 mĂ„nader för att stödja leverantörskedjans kundfordringar / leverantörsskulder för finansiering av fakturor med betydande vĂ€rde frĂ„n flera integrerade ankare. ABP:s modularitet gjorde det möjligt för teamet att leverera pĂ„ rekordtid, klara alla VAPT och distribuera den containeriserade mikrotjĂ€nststacken via fullstĂ€ndig CI/CD och pipelines till produktion.", + "Pricing_Page_Testimonial_2": "Vi ser vĂ€rdet av att anvĂ€nda ABP för att minska omkostnaderna för kundanpassade utvecklingsprojekt. Teamet kan förena kodmönstret i olika projektströmmar. Vi ser mer potential i ramverket för att vi ska kunna bygga nya funktioner snabbare Ă€n tidigare. Vi litar pĂ„ att vi stĂ€ndigt kommer att se vĂ€rdet av att utnyttja ABP.", + "Pricing_Page_Testimonial_3": "Vi Ă€lskar ABP. Vi behöver inte skriva allt frĂ„n grunden. Vi utgĂ„r frĂ„n out-of-the-box-funktioner och fokuserar bara pĂ„ det vi verkligen behöver skriva. Dessutom Ă€r ABP vĂ€larkitekterat och koden Ă€r av hög kvalitet med fĂ€rre buggar. Om vi hade varit tvungna att skriva allt vi behövde pĂ„ egen hand hade vi kanske fĂ„tt lĂ€gga ner flera Ă„r. Ytterligare en sak vi gillar Ă€r att den nya versionen, problemfixningen eller förbĂ€ttringen kommer ut vĂ€ldigt snart, varannan vecka. Vi vĂ€ntar inte för lĂ€nge.", + "Pricing_Page_Testimonial_4": "ABP Ă€r en fantastisk produkt som jag skulle rekommendera. Kommersiella produkter till marknaden för vĂ„ra kunder i en enda konfigurerbar plattform. Den starthjĂ€lp som ramverket och verktygen ger alla team Ă€r vĂ€rd varenda cent. ABP var det som passade bĂ€st för vĂ„ra behov.", + "Pricing_Page_Testimonial_5": "ABP Framework Ă€r inte bara ett ramverk, utan det Ă€r ocksĂ„ en guide för projektutveckling/hantering, eftersom det ger utbildning i DDD, GenericRepository, DI, Microservice och Modularity. Även om du inte kommer att anvĂ€nda sjĂ€lva ramverket kan du utveckla dig sjĂ€lv med docs.abp.io som Ă€r vĂ€l och professionellt förberedd (OpenIddict, Redis, Quartz etc.). Eftersom mĂ„nga saker Ă€r förbyggda förkortar det projektutvecklingstiden avsevĂ€rt (t.ex. inloggningssida, undantagshantering, datafiltrering, sĂ„dd, revisionsloggning, lokalisering, automatisk API-kontroller etc.) Som ett exempel frĂ„n vĂ„r applikation har jag anvĂ€nt Local Event Bus för lagerstyrning. SĂ„ jag kan hantera orderrörelser genom att skriva lagerhanterare. Det Ă€r underbart att inte förlora tid för CreationTime, CreatorId. De fylls i automatiskt.", + "Pricing_Page_Testimonial_6": "ABP Framework Ă€r ett bra ramverk men det tar tid att förstĂ„ de olika lager, klasser och bibliotek som det anvĂ€nder (sĂ€rskilt ABP). Jag spenderade mycket tid pĂ„ att lĂ€sa kodbasen, men ABP sparade oss tid nĂ€r vi skapade projektspecialitetsenheterna (AR) och förvaret kopplat till var och en av dem. Jag gillade ocksĂ„ att den metod som anvĂ€nds i ABP Ă€r mycket mogen; vi vet att den Ă€r baserad pĂ„ DDD och monolit.", + "Pricing_Page_Testimonial_7": "Som ett nystartat företag mĂ„ste vi iterera snabbt och spendera minimal tid pĂ„ standardfunktioner och icke-kĂ€rnfunktioner.\nVĂ„ra ingenjörer strĂ€cker sig frĂ„n mycket erfarna till juniora ingenjörer, och vi behövde en gemensam förstĂ„else och ett sĂ€tt att dela teknisk och domĂ€nkunskap, ABP gjorde det möjligt för oss att göra detta tack vare deras fantastiska guider och dokumentation.\nDet finns saker som vi inte har behövt oroa oss för eftersom de fungerar direkt med ABP.\nABP hjĂ€lpte oss att effektivisera snabb prototyping och utveckling, mindre Ă€n 4 veckor frĂ„n funktionsstart till produktion. Med alla premiumfunktioner som ingĂ„r i licensen har ABP gett oss \"Startup in a Box\" pĂ„ Software Engineering-sidan.", + "Pricing_Page_Testimonial_8": "Jag skulle rekommendera ABP till alla som vill utöka utbudet av produkter som Ă€r tillgĂ€ngliga för sina kunder. Det Ă€r fantastiskt nĂ€r man behöver anvĂ€nda en distribuerad företagsmiljö (Angular, WPF, Win&Linux). Förutom deras produkter Ă€lskar vi deras support, som gör vĂ„rt jobb snabbare och enklare. Vi vet redan att vi har hittat en bra partner för framtiden som kommer att stödja oss i att expandera vĂ„r verksamhet.", + "Pricing_Page_Testimonial_9": "Vi Ă€r ett företag med 2 anstĂ€llda som har varit i branschen i över 20 Ă„r.\nNĂ€r det gĂ€ller vĂ„r erfarenhet av ABP kontaktades vi av en kund som ville att vi skulle utveckla en ny personalapplikation i en modern miljö för att ersĂ€tta deras 25 Ă„r gamla Access-applikation. Vi bestĂ€mde oss för att gĂ„ över frĂ„n en desktoplösning till en webbaserad lösning.\n\nVid den tidpunkten hade vi mycket liten kunskap om webbapplikationer och .NET, men vi snubblade över ABP, och med hjĂ€lp av ABP Framework, teknisk dokumentation och ABP Suite kunde vi inte bara utveckla applikationen enligt kundens specifikationer utan ocksĂ„ framgĂ„ngsrikt arbeta i en .NET-miljö inom ett Ă„r.", + "AbpBookDownloadArea_ClaimYourEBook": "Gör ansprĂ„k pĂ„ din e-bok om ABP Framework", + "AddMemberModal_Warning_1": "Om det anvĂ€ndarnamn som du försöker lĂ€gga till inte finns i systemet, be din teammedlem att registrera sig pĂ„ {0} och dela anvĂ€ndarnamnet pĂ„ hans/hennes konto med dig.", + "MyOrganizations_Detail_WelcomeMessage": "VĂ€lkommen till din organisation, {0}", + "MyOrganizations_Detail_OrganizationManagement": "Organisation Förvaltning", + "OrganizationDisplayName": "Organisationens visningsnamn", + "MyOrganizations_Detail_EditDisplayName": "Redigera visningsnamn", + "MyOrganizations_Detail_UpgradeYourLicense": "Uppgradera din licens", + "MyOrganizations_Detail_LicenseStartAndExpiryDate": "Licensens startdatum - utgĂ„ngsdatum", + "MyOrganizations_Detail_OwnerRightInfo": "Du anvĂ€nder {0} av din {1} Ă€gares rĂ€ttigheter.", + "MyOrganizations_Detail_CopyApiKey": "Kopiera nyckeln", + "MyOrganizations_Detail_ApiKeyDescription": "API-nyckeln Ă€r token för PRO-paket som finns pĂ„ {1}.", + "MyOrganizations_Detail_YourPrivateNugetSource": "Din privata NuGet-kĂ€lla Ă€r {0}", + "MyOrganizations_Detail_PrivateNugetSourceWarning": "Detta lĂ€ggs automatiskt till som en feed till din NuGet.Config i din ABP-lösning. Dela inte din privata nyckel med obehöriga anvĂ€ndare!", + "MyOrganizations_Detail_DeveloperSeatInfo": "Du anvĂ€nder {0} av dina {1} platser för utvecklare.", + "NeedMoreSeatsForYourTeam": "Behöver du fler platser för ditt team?", + "MyOrganizations_Detail_PricePerYear": "{0} / per Ă„r", + "MyOrganizations_Detail_PurchaseDeveloperSeats": "Köpa platser för utvecklare", + "Invoices": "Fakturor", + "RequestInvoice": "BegĂ€r faktura", + "OrderNumber": "BestĂ€llningsnummer", + "Date": "Datum", + "Products": "Produkter", + "TotalPrice": "Totalt pris", + "ThereIsNoInvoice": "Det finns ingen faktura", + "MyOrganizations_Detail_PaymentProviderInfo": "Om du har köpt din licens via {0} gateway skickas PDF-fakturan till din e-postadress, se {0} fakturering.", + "MyOrganizations_Detail_PayUInfo": "Om du har köpt via Iyzico-gatewayen klickar du pĂ„ knappen \"BegĂ€r faktura\" och fyller i faktureringsinformationen.", + "MyOrganizations_Detail_ConclusionInfo": "Din fakturabegĂ€ran kommer att behandlas inom {0} arbetsdagar.", + "ExtendYourLicense": "FörlĂ€ng din {0} licens", + "Continue": "FortsĂ€tt", + "PurchaseLicense": "Köp {0} licens", + "DownloadInvoiceModal_DownloadInvoice": "Ladda ner faktura", + "DownloadInvoiceModal_SaveInformationOnlyOnce": "Du kan bara spara din faktureringsinformation en gĂ„ng.", + "InvoiceModal_EnterCompanyName": "Ange ditt juridiska företagsnamn...", + "InvoiceModal_EnterCompanyAddress": "Ange din juridiska företagsadress...", + "InvoiceModal_EnterTaxNumber": "Ange ditt TAX/VAT-nummer om det finns tillgĂ€ngligt...", + "RequestInvoiceModal_EnterNotes": "Ytterligare information för din faktura... Denna anteckning kommer att skrivas i anteckningsavsnittet pĂ„ fakturan.", + "PrePayment_PayWithIyzico": "Du kommer att betala med Iyzico", + "ContinueToCheckout": "FortsĂ€tt till kassan", + "PrePayment_IyzicoRedirectionInfo": "Du kommer att omdirigeras till Iyzico Payment Gateway för att slutföra ditt köp pĂ„ ett sĂ€kert sĂ€tt.", + "PrePayment_IyzicoAcceptVisaAndMasterCard": "Iyzico tar emot Visa och MasterCard.", + "Purchase": "Köp", + "AcceptTermsAndConditions": "Jag har lĂ€st, förstĂ„tt och accepterar integritetspolicy, villkor och EULA.", + "AcceptTermsAndConditionsWarningMessage": "VĂ€nligen acceptera integritetspolicyn och villkoren", + "SelectGatewayToContinue": "VĂ€nligen vĂ€lj en Gateway för att fortsĂ€tta!", + "GatewaySelection_SelectGateway": "VĂ€lj en betalningsportal", + "GatewaySelection_RedirectionMessage": "DĂ€refter kommer du att omdirigeras till den valda betalningsgatewayens webbplats för transaktionen.", + "PaymentSucceed_PaymentSuccessMessage": "Betalning framgĂ„ngsrik", + "PaymentSucceed_ThanksForPurchase": "Tack för ditt köp!", + "PaymentSucceed_CreateYourOrganization": "Skapa din organisation", + "PaymentSucceed_AddMeAsDeveloper": "Jag Ă€r ocksĂ„ utvecklare, lĂ€gg till mig som utvecklare i min organisation.", + "PaymentSucceed_CreateOrganization": "Skapa organisation", + "PaymentSucceed_OrganizationDescription": "En organisation bestĂ„r av utvecklare och Ă€gare. Utvecklarna Ă€r anvĂ€ndare som skriver kod pĂ„ ABP-projektet och som kommer att dra nytta av webbplatsen {1}. Ägarna Ă€r anvĂ€ndare som tilldelar utvecklarplatser och hanterar licensiering.", + "PaymentSucceed_ViewOrganization": "Klicka hĂ€r för att se organisationen", + "Purchase_TotalAnnualPrice": "TOTALT (Ă„rsavgift)", + "Purchase_TrainingPrice": "Pris för utbildning", + "Purchase_OnboardingTraining": "Live-utbildning i onboarding och utveckling av webbapplikationer", + "TotalDeveloperPrice": "Totalt pris för utvecklare", + "Purchase_PricePerDeveloper": "{0} per utvecklare", + "Purchase_IncludedDeveloperInfo": "{0} {1} ingĂ„r.", + "Purchase_LicenseExtraDeveloperPurchaseMessage": "I {0} licens ingĂ„r {1} utvecklare. Du kan lĂ€gga till ytterligare utvecklare.", + "StartupTemplates_Page_Title": "ABP Startup Mallar", + "StartupTemplates_Page_Description": "Med ABP kan du bygga lösningar med valfri komplexitetsnivĂ„. Det ger tvĂ„ huvudsakliga förbyggda startlösningar. Du kan vĂ€lja den som ligger nĂ€rmast dina krav och bygga din egen anpassade lösning ovanpĂ„ den.", + "MicroserviceStartupSolutionForDotnet": "Microservice Startup-lösning för .NET", + "MonolithSolutionForDotnet": "Monolitisk (modulĂ€r) lösning för .NET", + "TrainingDetailsHeaderInfo_TrainingHour": "{0} timmar", + "Trainings_Content": "Utbildningens innehĂ„ll", + "Trial_Page_StartYourFreeTrial": "Starta din gratis provperiod.", + "TrialLicenseFeatures": "Du kommer att kunna dra nytta av alla ABP:s kommersiella funktioner", + "TrialPeriodDays": "Du kommer att ha en {0} dagars teamlicens", + "TrialForumSupportIncident": "Du kommer att ha {0} forum support incidenter", + "Contact_Page_Title": "Kontakt med ABP:s utvecklingsteam", + "Contact_Page_Description": "Kontakta ABP:s utvecklingsteam om du behöver hjĂ€lp eller dela med dig av dina tankar och Ă„sikter! ABP Support Team Ă€r redo att hjĂ€lpa till.", + "Demo_Page_Title": "Skapa en demo", + "Demo_Page_Description": "Skapa en gratis demo för att se ett exempel pĂ„ en ansökan som skapats med hjĂ€lp av ABP:s startmallar. Upprepa inte dig sjĂ€lv för vanliga applikationskrav.", + "Discounted_Page_Title": "Rabatterad prissĂ€ttning", + "Discounted_Page_Description": "VĂ€lj de funktioner och den funktionalitet som ditt företag behöver redan idag. Köp en ABP-licens och skapa obegrĂ€nsat med projekt", + "Faq_Page_Title": "Vanliga frĂ„gor och svar (FAQ)", + "Faq_Page_Description": "Har du nĂ„gra frĂ„gor eller funderingar? Sök bland vanliga frĂ„gor eller stĂ€ll en frĂ„ga till oss via kontaktformulĂ€ret.", + "Faq_Page_SwiftCode": "SWIFT-kod", + "Faq_Page_BankName": "Bankens namn", + "Faq_Page_AccountName": "Kontots namn", + "Faq_Page_AccountNumber": "Kontonummer", + "Faq_Page_Currency": "Valuta", + "Faq_Page_VatNumber": "Momsregistreringsnummer", + "Faq_Page_OtherCurrenciesInfo": "För andra valutor, se alla konton", + "ProjectCreatedSuccess_Page_Title": "Ditt projekt skapat", + "ProjectCreatedSuccess_Page_Description": "Ditt ABP-projekt har skapats framgĂ„ngsrikt!", + "Suite_Page_Title": "ABP-svit", + "Suite_Page_Description": "ABP tillhandahĂ„ller verktyg för snabb applikationsutveckling för att öka utvecklarens produktivitet. Med ABP Suite kan du enkelt skapa CRUD-sidor.", + "Themes_Page_Title": "ABP Teman", + "Themes_Page_Description": "ABP tillhandahĂ„ller flera professionella, moderna UI-teman. Skapa en gratis demo för att fĂ„ en snabb bild av hur anvĂ€ndargrĂ€nssnittet ser ut.", + "Tools_Page_Title": "Verktyg för snabb applikationsutveckling", + "Tools_Page_Description": "ABP tillhandahĂ„ller verktyg för snabb applikationsutveckling för att öka utvecklarens produktivitet. Med ABP Suite kan du enkelt skapa CRUD-sidor.", + "DeveloperPrice": "Pris för utvecklare", + "AdditionalDeveloperPaymentInfoSection_AdditionalDevelopers": "{0} utvecklare", + "LicenseRemainingDays": "för {0} dagar", + "ExtendPaymentInfoSection_Description": "Genom att förlĂ€nga/förnya din licens kommer du att fortsĂ€tta att fĂ„ premium support. Du kommer ocksĂ„ att kunna fĂ„ större eller mindre uppdateringar för moduler och teman. Du kommer att kunna fortsĂ€tta skapa nya projekt. Och du kommer fortfarande att kunna anvĂ€nda ABP Suite som pĂ„skyndar din utveckling.", + "LicenseRenewalPrice": "Pris för förnyelse av licens", + "LicensePrice": "Licenspris", + "TrialLicensePaymentInfoSection_Description": "Köp licens: Genom att köpa en licens kommer du att fortsĂ€tta att fĂ„ premium support. Du kommer ocksĂ„ att kunna fĂ„ större eller mindre uppdateringar för moduler och teman. Du kommer att kunna fortsĂ€tta skapa nya projekt. Och du kommer fortfarande att kunna anvĂ€nda ABP Suite som pĂ„skyndar din utveckling.
Se jĂ€mförelsetabellen för licenser för att kontrollera skillnaderna mellan licenstyperna.", + "SelectTargetLicense": "VĂ€lj mĂ„llicens", + "UpgradePaymentInfoSection_ExtendMyLicenseForOneYear": "Ja, förlĂ€nga min licens utgĂ„ngsdatum med 1 Ă„r.", + "UpgradePaymentInfoSection_WantToExtendLicense": "Vill du förlĂ€nga din licens med ytterligare 1 Ă„r?", + "UpgradePaymentInfoSection_UpgradingWillNotExtendLicense": "Uppgradering kommer inte att förlĂ€nga licensens utgĂ„ngsdatum!", + "UpgradePaymentInfoSection_LicenseUpgradeDescription": "Genom att uppgradera din licens kommer du att bli befordrad till en högre licenstyp, vilket gör att du kan fĂ„ ytterligare fördelar. Se jĂ€mförelsetabellen för licenser för att kontrollera skillnaderna mellan licenstyperna.", + "Landing_Page_CustomerStories": "Customer Stories", + "Landing_Page_OurGreatCustomers": "VĂ„ra fantastiska kunder", + "Landing_Page_WebApplicationFramework": "Ramverk för webbapplikationer", + "Landing_Page_WebDevelopmentPlatform": "Plattform för webbutveckling", + "Landing_Page_CompleteWebDevelopmentPlatform": "Komplett plattform för webbutveckling", + "Landing_Page_TryFreeDemo": "Prova gratis demo", + "Landing_Page_StartingPointForWebApplications": "UtgĂ„ngspunkten för ASP.NET Core-baserade webbapplikationer! Den Ă€r baserad pĂ„ ABP-ramverket för bĂ€sta webbutveckling.", + "Landing_Page_AbpProvidesSoftwareInfrastructure": "ABP Framework tillhandahĂ„ller en mjukvaruinfrastruktur för att utveckla utmĂ€rkta webbapplikationer med bĂ€sta praxis.", + "Landing_Page_MicroserviceCompatibleArchitecture": "Kompatibel arkitektur för mikrotjĂ€nster", + "Landing_Page_PreBuiltApplicationModulesAndThemes": "Förbyggda applikationsmoduler och teman", + "Landing_Page_MultiTenantArchitecture": "Arkitektur för flera hyresgĂ€ster", + "Landing_Page_MultiTenancyDescription": "SaaS-applikationer pĂ„ ett enkelt sĂ€tt! Integrerad multi-tenancy frĂ„n databas till anvĂ€ndargrĂ€nssnitt.", + "Landing_Page_DDDIntroduction": "Designad och utvecklad utifrĂ„n DDD-mönster och principer. Ger en skiktad modell för din applikation.", + "Landing_Page_CrossCuttingConcernsInfo": "Komplett infrastruktur för auktorisering, validering, undantagshantering, cachelagring, revisionsloggning, transaktionshantering med mera.", + "Landing_Page_PreBuiltApplicationModules": "Förbyggda applikationsmoduler som omfattar de vanligaste kraven pĂ„ webbapplikationer.", + "Landing_Page_ChatModule": "Chatt", + "Landing_Page_DocsModule": "Dokument", + "Landing_Page_FileManagementModule": "Filhantering", + "Landing_Page_CustomerStory_1": "ABP gjorde det möjligt för SC Ventures att leverera en bankklassad SaaS-plattform med silodatabas med flera hyresgĂ€ster pĂ„ 9 mĂ„nader för att stödja leverantörskedjans kundfordringar / leverantörsskulder för finansiering av fakturor med betydande vĂ€rde frĂ„n flera integrerade ankare. ABP:s modularitet gjorde det möjligt för teamet att leverera pĂ„ rekordtid, klara alla VAPT och distribuera den containeriserade mikrotjĂ€nststacken via fullstĂ€ndig CI/CD och pipelines till produktion.", + "Landing_Page_CustomerStory_2": "Vi ser vĂ€rdet av att anvĂ€nda ABP för att minska omkostnaderna för anpassade utvecklingsprojekt. Teamet kan förenhetliga kodmönstret i olika projektflöden. Vi ser mer potential i ramverket för att vi ska kunna bygga nya funktioner snabbare Ă€n tidigare. Vi litar pĂ„ att vi stĂ€ndigt kommer att se vĂ€rdet av att utnyttja ABP.", + "Landing_Page_CustomerStory_3": "Vi Ă€lskar ABP. Vi behöver inte skriva allt frĂ„n grunden. Vi utgĂ„r frĂ„n out-of-the-box-funktioner och fokuserar bara pĂ„ det vi verkligen behöver skriva. Dessutom Ă€r ABP vĂ€larkitekterat och koden Ă€r av hög kvalitet med fĂ€rre buggar. Om vi hade varit tvungna att skriva allt vi behövde pĂ„ egen hand hade vi kanske fĂ„tt lĂ€gga ner flera Ă„r. Ytterligare en sak som vi gillar Ă€r att den nya versionen, problemfixningen eller förbĂ€ttringen kommer ut mycket snart\n varannan vecka. Vi vĂ€ntar inte för lĂ€nge.", + "Landing_Page_CustomerStory_4": "ABP Ă€r en fantastisk produkt som jag skulle rekommendera. Kommersiella produkter till marknaden för vĂ„ra kunder i en enda konfigurerbar plattform. Den starthjĂ€lp som ramverket och verktygen ger alla team Ă€r vĂ€rd varenda cent. ABP var det som passade bĂ€st för vĂ„ra behov.", + "Landing_Page_AdditionalServices": "Anpassad eller volymlicens, onboarding, liveutbildning och support, anpassad projektutveckling, portning av befintliga projekt och mycket mer...", + "Landing_Page_IncludedDeveloperLicenses": "Inkluderar {0} utvecklarlicenser", + "Landing_Page_SeeOnDemo": "Se pĂ„ Demo", + "Landing_Page_LeptonThemes": "LeptonTema", + "Landing_Page_AccountModuleDescription_1": "Denna modul implementerar autentiseringssystemet för en applikation;", + "Landing_Page_AccountModuleDescription_2": "TillhandahĂ„ller en inloggningssida med anvĂ€ndarnamn och lösenord", + "Landing_Page_AccountModuleDescription_3": "TillhandahĂ„ller en register-sida för att skapa ett nytt konto.", + "Landing_Page_AccountModuleDescription_4": "TillhandahĂ„ller en glömt lösenord-sida för att skicka en Ă„terstĂ€llningslĂ€nk för lösenord som ett e-postmeddelande.", + "Landing_Page_AccountModuleDescription_5": "Ger email confirmation-funktionalitet med UI.", + "Landing_Page_AccountModuleDescription_6": "Implementerar tvĂ„faktor-autentisering (SMS och e-post).", + "Landing_Page_AccountModuleDescription_7": "Implementerar anvĂ€ndarspĂ€rr (lĂ„ser kontot under en viss tid nĂ€r ett visst antal misslyckade inloggningar intrĂ€ffar pĂ„ grund av ogiltiga inloggningsuppgifter inom en viss tidsperiod).", + "Landing_Page_AccountModuleDescription_8": "Implementerar anvĂ€ndargrĂ€nssnitt och funktionalitet för autentiseringsservern Identity Server.", + "Landing_Page_AccountModuleDescription_9": "Gör det möjligt att vĂ€xla mellan hyresgĂ€ster i en miljö med flera hyresgĂ€ster.", + "Landing_Page_AccountModuleDescription_10": "Gör det möjligt att Ă€ndra UI-sprĂ„k i programmet.", + "Landing_Page_AuditLoggingModuleDescription_1": "Den hĂ€r modulen tillhandahĂ„ller grĂ€nssnittet för rapportering av granskningsloggar för granskningsinfrastrukturen. Gör det möjligt att söka, filtrera och visa poster i granskningsloggen och loggar över enhetsĂ€ndringar.", + "Landing_Page_AuditLoggingModuleDescription_2": "En post i granskningsloggen bestĂ„r av kritisk information om varje klientförfrĂ„gan:", + "Landing_Page_AuditLoggingModuleDescription_3": "URL, webblĂ€sare, IP-adress, klientnamn", + "Landing_Page_AuditLoggingModuleDescription_4": "AnvĂ€ndaren", + "Landing_Page_AuditLoggingModuleDescription_5": "HTTP-metod, HTTP-returstatuskod", + "Landing_Page_AuditLoggingModuleDescription_6": "FramgĂ„ng/misslyckande, detaljer om undantag om sĂ„dana finns", + "Landing_Page_AuditLoggingModuleDescription_7": "Tid för genomförande av begĂ€ran", + "Landing_Page_AuditLoggingModuleDescription_8": "Enheterna har skapats, tagits bort eller uppdaterats i denna begĂ€ran (med Ă€ndrade egenskaper).", + "Landing_Page_BloggingModuleDescription_1": "Denna modul lĂ€gger till en enkel blogg i din ABP-applikation;", + "Landing_Page_BloggingModuleDescription_2": "Gör det möjligt att skapa flera bloggar i en och samma applikation.", + "Landing_Page_BloggingModuleDescription_3": "Stöder Markdown-formatet.", + "Landing_Page_BloggingModuleDescription_4": "Gör det möjligt att skriva en kommentar till ett inlĂ€gg.", + "Landing_Page_BloggingModuleDescription_5": "Gör det möjligt att tilldela taggar till blogginlĂ€ggen.", + "Landing_Page_BloggingModuleDescription_6": "Se webbplatsen blog.abp.io som ett levande exempel pĂ„ bloggmodulen.", + "Landing_Page_ChatModuleDescription_1": "Denna modul anvĂ€nds för realtidsmeddelanden mellan anvĂ€ndare i applikationen.", + "Landing_Page_ChatModuleDescription_2": "Meddelanden i realtid pĂ„ chatt-sidan.", + "Landing_Page_ChatModuleDescription_3": "Sök efter anvĂ€ndare i applikationen för nya konversationer.", + "Landing_Page_ChatModuleDescription_4": "Kontaktlista för senaste konversationer.", + "Landing_Page_ChatModuleDescription_5": "Meddelanden om nya meddelanden nĂ€r anvĂ€ndaren tittar pĂ„ en annan sida.", + "Landing_Page_ChatModuleDescription_6": "Symbol för totalt antal olĂ€sta meddelanden pĂ„ menyikonen.", + "Landing_Page_ChatModuleDescription_7": "Antal olĂ€sta meddelanden för varje konversation.", + "Landing_Page_ChatModuleDescription_8": "Lata laddade konversationer.", + "Landing_Page_DocsModuleDescription_1": "Denna modul anvĂ€nds för att skapa webbplatser för teknisk dokumentation;", + "Landing_Page_DocsModuleDescription_2": "Inbyggd GitHub-integration: Skriv och hantera dokument direkt pĂ„ GitHub.", + "Landing_Page_DocsModuleDescription_3": "Stöd för Versioning direkt integrerat i GitHub-utgĂ„vor.", + "Landing_Page_DocsModuleDescription_4": "Stöd för flersprĂ„kighet (med fallback-stöd till standardsprĂ„ket).", + "Landing_Page_DocsModuleDescription_5": "Stöder formaten Markdown och HTML.", + "Landing_Page_DocsModuleDescription_6": "InnehĂ„ller en navigation och en outline.", + "Landing_Page_DocsModuleDescription_7": "Gör det möjligt att hosta flera projekt dokumentation i en enda applikation.", + "Landing_Page_DocsModuleDescription_8": "LĂ€nkar till filen pĂ„ GitHub, sĂ„ att vem som helst enkelt kan bidra genom att klicka pĂ„ Edit-lĂ€nken.", + "Landing_Page_DocsModuleDescription_9": "Förutom GitHub-kĂ€llan kan du helt enkelt anvĂ€nda en mapp som dokumentationskĂ€lla.", + "Landing_Page_FileManagementModuleDescription_1": "Ladda upp, ladda ner och organisera filer i en hierarkisk mappstruktur.", + "Landing_Page_FileManagementModuleDescription_2": "Den hĂ€r modulen anvĂ€nds för att ladda upp, ladda ner och organisera filer i en hierarkisk mappstruktur. Den Ă€r ocksĂ„ kompatibel med multi-tenancy och du kan bestĂ€mma den totala storleksgrĂ€nsen för dina hyresgĂ€ster.", + "Landing_Page_FileManagementModuleDescription_3": "Den hĂ€r modulen Ă€r baserad pĂ„ BLOB-lagring-systemet, sĂ„ den kan anvĂ€nda olika lagringsleverantörer för att lagra filinnehĂ„llet.", + "Landing_Page_IdentityModuleDescription_1": "Denna modul implementerar anvĂ€ndar- och rollsystemet i en applikation;", + "Landing_Page_IdentityModuleDescription_2": "Bygger pĂ„ Microsofts ASP.NET Core Identity-bibliotek.", + "Landing_Page_IdentityModuleDescription_3": "Hantera roller och anvĂ€ndare i systemet. En anvĂ€ndare kan ha flera roller.", + "Landing_Page_IdentityModuleDescription_4": "Ange behörigheter i roll- och anvĂ€ndarnivĂ„er.", + "Landing_Page_IdentityModuleDescription_5": "Aktivera/avaktivera tvĂ„faktorautentisering och lĂ„sning av anvĂ€ndare per anvĂ€ndare.", + "Landing_Page_IdentityModuleDescription_6": "Hantera grundlĂ€ggande anvĂ€ndarprofil och lösenord.", + "Landing_Page_IdentityModuleDescription_7": "Hantera ansprĂ„kstyper i systemet, koppla ansprĂ„k till roller och anvĂ€ndare.", + "Landing_Page_IdentityModuleDescription_8": "InstĂ€llningssida för att hantera lösenordskomplexitet, anvĂ€ndarinloggning, konto och spĂ€rr.", + "Landing_Page_IdentityModuleDescription_9": "Stöd för LDAP-autentisering.", + "Landing_Page_IdentityModuleDescription_10": "Ger verifiering av e-postadress och telefonnummer.", + "Landing_Page_IdentityModuleDescription_11": "Stödjer integrering av sociala inloggningar (Twitter, Facebook, GitHub etc.).", + "Landing_Page_IdentityModuleDescription_12": "Hantera organisationsenheter i systemet.", + "Landing_Page_PaymentModuleDescription_1": "Ger integration för olika betalningsgateways.", + "Landing_Page_PaymentModuleDescription_2": "Denna modul ger integration för betalningsgateways, sĂ„ att du enkelt kan fĂ„ betalning frĂ„n dina kunder.", + "Landing_Page_PaymentModuleDescription_3": "Denna modul stöder följande betalningsportaler", + "Welcome_Page_UseSameCredentialForCommercialWebsites": "AnvĂ€nd samma autentiseringsuppgifter för bĂ„de abp.io och abp.io/support.", + "WatchCrudPagesVideo": "Titta pĂ„ videon \"Skapa CRUD-sidor med ABP Suite\"!", + "WatchGeneratingFromDatabaseVideo": "Titta pĂ„ videon \"ABP Suite: Generera CRUD-sidor frĂ„n befintliga databastabeller\" Video!", + "WatchTakeCloserLookVideo": "Titta pĂ„ videon \"Ta en nĂ€rmare titt pĂ„ kodgenerering: ABP Suite\" Video!", + "ConfirmedEmailAddressRequiredToStartTrial": "Du mĂ„ste ha en bekrĂ€ftad e-postadress för att kunna starta en testlicens.", + "EmailVerificationMailNotSent": "E-postverifiering mail kunde inte skickas.", + "GetConfirmationEmail": "Klicka hĂ€r för att fĂ„ ett verifieringsmejl om du inte har fĂ„tt det tidigare.", + "WhichLicenseTypeYouAreInterestedIn": "Vilken licenstyp Ă€r du intresserad av?", + "DontTakeOurWordForIt": "Ta inte vĂ„rt ord för det...", + "ReadAbpCommercialUsersWantYouToKnow": "LĂ€s vad ABP:s anvĂ€ndare vill att du ska veta", + "Testimonial_ShortDescription_1": "ABP:s modularitet gjorde det möjligt för teamet att leverera i tid.", + "Testimonial_ShortDescription_2": "Bygg nya funktioner snabbare Ă€n tidigare.", + "Testimonial_ShortDescription_3": "Vi utgĂ„r frĂ„n out-of-the-box-funktioner och fokuserar bara pĂ„ det som vi verkligen behöver skriva.", + "Testimonial_ShortDescription_4": "ABP passade bĂ€st för vĂ„ra behov.", + "OnlineReviewersOnAbpCommercial": "Online recensioner om ABP", + "SeeWhatToldAboutAbpCommercial": "Se vad som har sagts om ABP och skriv dina tankar om du vill.", + "BlazoriseLicense": "MĂ„ste vi köpa en Blazorise-licens?", + "BlazoriseLicenseExplanation": "Vi har ett avtal mellan Volosoft och Megabit, med detta avtal Ă€r Blazorise-licensen buntad med ABP-produkter, dĂ€rför behöver vĂ„ra kunder inte köpa en extra Blazorise-licens.", + "ExtendPaymentInfoSection_DeveloperPrice": "{0}x Ytterligare utvecklare", + "ExtendPaymentInfoSection_DiscountRate": "Rabatt {0}%.", + "TotalNetPrice": "Totalt nettopris", + "EFCore": "Entity Framework Core", + "All": "Alla", + "Mvc": "MVC", + "DataBaseProvider": "Dataleverantör", + "UIFramework": "Ramverk för anvĂ€ndargrĂ€nssnitt", + "LeptonXThemeForDashboard": "LeptonX Theme för din Admin Dashboard av", + "AbpPlatform": "ABP-plattform", + "YouDeserveGoodUXUI": "Du förtjĂ€nar ett bra UI och ett bĂ€ttre UX. LeptonX Theme by ABP Ă€r hĂ€r för att tjĂ€na det.", + "ViewLiveDemo": "Visa demo för live-tema", + "GetLeptonX": "Skaffa LeptonX nu", + "SeeLeptonXDocumentation": "Se LeptonX dokumentation", + "SeeLeptonDocumentation": "Se Lepton Dokumentation", + "SimplifiedMenu": "Förenklad meny", + "SimplifiedMenuDescription": "Du kan enkelt hitta den sida du letar efter genom att filtrera i menyn", + "YourFavoritePages": "Dina favoritsidor inom rĂ€ckhĂ„ll", + "YourFavoritePagesDescription": "LĂ€gg enkelt till eller ta bort sidan frĂ„n favoriter genom att klicka pĂ„ stjĂ€rnikonen i det övre högra hörnet av sidan.", + "BreadCrumbs": "Breadcrumb för sömlös vĂ€xling", + "BreadCrumbsDescription": "Med Breadcrumb kan du vĂ€xla till sidorna pĂ„ samma nivĂ„ med ett klick, Ă€ven nĂ€r vĂ€nstermenyn Ă€r stĂ€ngd, och det fungerar pĂ„ surfplattor och mobiler!", + "YourMenu": "Din meny som du vill ha den", + "YourMenuDescription": "Anpassa de direktklickbara ikonerna och rullgardinsmenyerna i anvĂ€ndarmenyn som du vill. AnvĂ€ndarmenyn Ă€r helt anpassningsbar efter dina behov", + "RtlSupport": "RTL-stöd för ditt sprĂ„k", + "RtlSupportDescription": "LeptonX Theme stöder RTL för ditt sprĂ„k. SprĂ„kalternativen finns i instĂ€llningsmenyn sĂ„ att du kan Ă€ndra sprĂ„k.", + "YourColors": "Dina fĂ€rger i grĂ€nssnittet för din adminpanel", + "YourColorsDescription": "LeptonX Theme fungerar enligt dina systeminstĂ€llningar och har alternativ för dashboard light theme, dashboard dark theme och dashboard semi-dark theme.", + "ArrangeContentWidth": "Ordna enkelt bredden pĂ„ ditt innehĂ„ll", + "ArrangeContentWidthDescription": "Ändra enkelt bredden pĂ„ din innehĂ„llsyta.", + "LeptonXCompatibleWith": "LeptonX Theme Ă€r kompatibelt med", + "MobileResponsiveTemplate": "Mobil responsiv mall", + "MobileResponsiveTemplateDescription1": "FĂ„ tillgĂ„ng till LeptonX adminpanel frĂ„n vilken enhet du vill.", + "MobileResponsiveTemplateDescription2": "Den Ă€r utformad för att du enkelt ska kunna anvĂ€nda den i alla dina enheter. Den Ă€r responsiv pĂ„ mobila enheter och surfplattor.", + "TopMenuLayoutOption": "Alternativ för layout av toppmeny", + "TopMenuLayoutOptionDescription1": "Om du vill konfigurera din webbplats med samma adminpanel Ă€r det möjligt att göra det med LeptonX Theme!", + "TopMenuLayoutOptionDescription2": "Prova bara LeptonX toppmenylayout för att fĂ„ det att hĂ€nda!", + "EasilyCustomizable": "LĂ€tt att anpassa till ditt varumĂ€rkes fĂ€rger", + "EasilyCustomizableDescription1": "Du kan anpassa LeptonX-temat med bara nĂ„gra fĂ„ SCSS-variabler. Ingen Ă„sidosĂ€ttning, ingen extra CSS-belastning!", + "EasilyCustomizableDescription2": "Med LeptonX kan du ordna din adminpanel precis som du vill.", + "IndependentLayout": "Oberoende layout och innehĂ„llsyta", + "IndependentLayoutDescription1": "LeptonX:s layoutinfrastruktur utformades helt separat frĂ„n innehĂ„llet.", + "IndependentLayoutDescription2": "Detta innebĂ€r att du fritt kan utforma ditt projekt med en annan innehĂ„llsstruktur Ă€n Bootstrap om du vill.", + "MostUsedLibraries": "De mest anvĂ€nda biblioteken integrerade med LeptonX", + "MostUsedLibrariesDescription1": "LeptonX innehĂ„ller dina mest anvĂ€nda bibliotek. Det gör att du enkelt kan anvĂ€nda bibliotek som ApexCharts, DataTables, DropZone, FullCalender, JSTree, Select2 och Toastr.", + "MostUsedLibrariesDescription2": "LeptonX stöder ocksĂ„ MVC Angular och Blazor-specifika bibliotek.", + "CreateAndCustomize": "Skapa och anpassa de sidor du behöver pĂ„ nĂ„gra sekunder med LeptonX anpassade sidor", + "CreateAndCustomizeDescription": "Genom att anvĂ€nda LeptonX Theme fĂ„r du ocksĂ„ tillgĂ„ng till mĂ„nga fĂ€rdiga HTML-sidor. Dessa inkluderar mĂ„nga sidor som inloggningssida, blogg, FAQ, prenumerationslista, faktura, prissĂ€ttning och filhantering.", + "LeptonThemeForAdmin": "Lepton Theme för din adminpanel genom att", + "LeptonThemeForAdminDescription": "Lepton Theme Ă€r fortfarande tillgĂ€ngligt och kommer att underhĂ„llas. Om du vill byta till LeptonX Theme som Lepton Theme-anvĂ€ndare kan du se dokumentationen för att lĂ€ra dig hur du gör.", + "LeptonCompatibleWith": "Lepton Theme Ă€r kompatibelt med", + "BlackFridayDiscount": "Black Friday-rabatt", + "UpgradePaymentInfoSection_DeveloperPrice": "{0} för {1} ytterligare utvecklare", + "Upgrade": "Uppgradering", + "Renewal": "Förnyelse", + "UpgradePaymentInfoSection_LicensePrice": "{0} licens", + "UpgradePaymentInfoSection_LicenseRenewalPrice": "Förnyelse av licens", + "Total": "Totalt", + "SupportPolicyFaqTitle": "Vilken Ă€r er supportpolicy?", + "SupportPolicyFaqExplanation": "Vi stöder endast den aktiva och den tidigare huvudversionen. Vi garanterar inte en patchrelease för den tredje och Ă€ldre huvudversionen. Till exempel, om den aktiva versionen Ă€r 7.0.0, kommer vi att slĂ€ppa patchversioner för bĂ„de 6.x.x och 7.x.x. Dessutom ger vi support endast för ABP Framework och ABP-relaterade problem. Det betyder att inget stöd ges för tredjepartsapplikationer, molntjĂ€nster och andra perifera bibliotek som anvĂ€nds av ABP-produkter. Vi kommer att anvĂ€nda kommersiellt rimliga anstrĂ€ngningar för att ge vĂ„ra kunder teknisk support under \"Volosoft Bilisim A.S\" officiella öppettider. Å andra sidan förbinder vi oss inte till en svarstid enligt servicenivĂ„avtal (SLA), men vi kommer att försöka svara pĂ„ de tekniska frĂ„gorna sĂ„ snabbt som möjligt inom vĂ„ra officiella arbetstider. Om inte en sĂ€rskild överenskommelse görs med kunden tillhandahĂ„ller vi endast support pĂ„ https://support.abp.io. Vi har ocksĂ„ en privat e-postsupport som endast Ă€r tillgĂ€nglig för innehavare av Enterprise-licenser.", + "TotalDevelopers": "Totalt {0} utvecklare", + "CustomPurchaseExplanation": "SkrĂ€ddarsydd för dina specifika behov", + "WhereDidYouHearAboutUs": "Var har du hört talas om oss?", + "Twitter": "Twitter", + "Facebook": "Facebook", + "Youtube": "YouTube", + "Google": "Google", + "Github": "GitHub", + "Friend": " FrĂ„n en vĂ€n", + "Other": "Övriga", + "WhereDidYouHearAboutUs_explain": "Ange ...", + "DeletingMemberWarningMessage": "\"{0}\" kommer att tas bort frĂ„n listan över utvecklare. Om du vill kan du tilldela denna tomma plats till en annan utvecklare senare.", + "AdditionalInfo": "Om antalet platser för utvecklare överstiger dina krav kan du minska dem. Du kan skicka e-post till info@abp.io för att ta bort nĂ„gra av dina utvecklarplatser. Om du rensar bort oanvĂ€nda utvecklarplatser minskar kostnaden för licensförnyelse. Om du vill kan du Ă„terköpa ytterligare utvecklarplatser inom din aktiva licensperiod. Observera att eftersom det finns {0} utvecklare i det hĂ€r licenspaketet kan du inte minska detta antal.", + "LinkExpiredErrorMessage": "LĂ€nken du försöker komma Ă„t har gĂ„tt ut.", + "ExpirationDate": "UtgĂ„ngsdatum", + "SpringCampaignDiscount": "Rabatt pĂ„ vĂ„rkampanjen", + "WhyUseAbpIoPlatform": "Varför ska jag anvĂ€nda ABP.IO-plattformen i stĂ€llet för att skapa en ny lösning frĂ„n grunden?", + "WhyUseAbpIoPlatformFaqExplanation": "Se den sidan för en detaljerad förklaring av varför anvĂ€ndning av ABP.IO Platform har en betydande fördel jĂ€mfört med att göra allt sjĂ€lv.", + "EulaPageTitle": "Licensavtal för slutanvĂ€ndare (EULA)", + "PrivacyPolicyPageTitle": "Integritetspolicy - Cookiepolicy", + "TermsConditionsPageTitle": "Villkor och anvisningar", + "TrainingsPageTitle": "ABP:s utbildningspaket", + "ModulesPageTitle": "ABP Förbyggda applikationsmoduler", + "Volo.AbpIo.Commercial:040001": "API-Ă„tkomstnyckeln Ă€r felaktig.", + "GetLepton": "Skaffa Lepton nu", + "MyOrganizations_Detail_LicenseStartDate": "Startdatum", + "MyOrganizations_Detail_LicenseExpiryDate": "UtgĂ„ngsdatum", + "BlazoriseSupport": "Hur fĂ„r jag Blazorise-licensnyckeln och support frĂ„n Blazorise-teamet?", + "BlazoriseSupportExplanation": "Följ stegen nedan för att fĂ„ support frĂ„n Blazorise-teamet och fĂ„ din Blazorise-licensnyckel:", + "BlazoriseSupportExplanation1": "Registrera dig för ett nytt konto pĂ„ blazorise.com/support/register med samma e-postadress som ditt abp.io-konto. LĂ€mna posten \"Licensnyckel\" tom. Det mĂ„ste vara samma e-postadress som ditt e-postkonto pĂ„ abp.io.", + "BlazoriseSupportExplanation2": "Verifiera din e-postadress genom att kolla din e-postlĂ„da. Kontrollera din skrĂ€ppostlĂ„da om du inte ser ett e-postmeddelande i din inkorg!", + "BlazoriseSupportExplanation3": "Logga in pĂ„ Blazorise supportwebbplats pĂ„ blazorise.com/support/login.", + "BlazoriseSupportExplanation4": "Om du har en aktiv ABP betald licens kommer du ocksĂ„ att ha en Blazorise PRO-licens. Du kan fĂ„ din Blazorise-licensnyckel pĂ„ blazorise.com/support/user/manage/license.", + "BlazoriseSupportExplanation5": "Du kan stĂ€lla dina frĂ„gor pĂ„ supportwebbplatsen och generera en produkttoken för din applikation.", + "AbpLiveTrainingPackages": "ABP Live utbildningspaket", + "Releases": "UtgĂ„vor", + "ReleasesDescription": "Den hĂ€r sidan innehĂ„ller detaljerad information om varje release. Du kan se alla stĂ€ngda pull requests för en specifik release. För övergripande milstolpsutvecklingar kan du kolla in sidan med kortfattade releaseanteckningar.", + "ReleaseDate": "Utgivningsdatum", + "Labels": "Etiketter", + "PreRelease": "Förhandsrelease", + "AllTypes": "Alla typer", + "Enhancement": "FörbĂ€ttring", + "Bug": "Insekt", + "Feature": "Funktion", + "AllUIs": "Alla anvĂ€ndargrĂ€nssnitt", + "MVC": "MVC", + "BlazorServer": "Blazor Server", + "MAUI": "MAUI", + "HowItWorks_Page_Title": "Hur fungerar det?", + "HowItWorks_Page_Description": "ABP Framework utökar .NET-plattformen. SĂ„ allt du kan göra med en vanlig .NET-lösning Ă€r redan möjligt med ABP Framework. Det gör det enkelt att komma igĂ„ng med en lĂ„g inlĂ€rningskurva.", + "HowItWorks_Description1": "ABP Framework utökar .NET-plattformen. SĂ„ allt du kan göra med en vanlig .NET-lösning Ă€r redan möjligt med ABP Framework. Det gör det enkelt att komma igĂ„ng med en lĂ„g inlĂ€rningskurva.", + "HowItWorks_Description2": "NĂ€r du vĂ€l har börjat lĂ€ra dig och anvĂ€nda ABP Framework-funktionerna kommer det att bli mycket roligare Ă€n nĂ„gonsin att utveckla din programvara.", + "HowItWorks_Description3": "Den hĂ€r sidan förklarar i princip hur du anvĂ€nder ABP.IO Platform som .NET-utvecklare.", + "CreateANewSolution": "Skapa en ny .NET-lösning", + "CreateANewSolution_Description1": "Allt börjar med att skapa en ny ABP-integrerad .NET-lösning.", + "StartWithStartupTemplates": "Starta en av de förbyggda mallarna för startup-lösningar", + "SimpleMonolithApplicationTemplate": "Enkel mall för monolitisk applikation", + "LayeredApplicationTemplate": "Skiktad applikationsmall", + "MicroserviceSolutionTemplate": "Mall för mikroservicelösning", + "CreateEmptySolutionAndUseAbp": "Eller skapa en ny tom .NET-lösning och installera ABP NuGet & NPM paket sjĂ€lv.", + "CreatingSolutionWithMultipleOptions": "Det finns flera alternativ för anvĂ€ndargrĂ€nssnitt och databas nĂ€r du skapar en ny lösning.", + "UIFrameworkOptions": "Alternativ för anvĂ€ndargrĂ€nssnitt", + "DotnetSolutionWithoutDependency": "Nu har du en vanlig .NET-lösning i din lokala dator som inte Ă€r beroende av nĂ„gon molnplattform eller extern tjĂ€nst.", + "CheckTheDocumentForDetails": "Du kan kontrollera {1} dokumentet för detaljer.", + "UIAndDatabaseIndependent": "ABP kan fungera med alla anvĂ€ndargrĂ€nssnitt och alla databasleverantörer som stöds av .NET.\n Dessa anvĂ€ndargrĂ€nssnitt och databasleverantörer Ă€r dock förintegrerade och vĂ€ldokumenterade.", + "InstallAbpModules": "Installera ABP-moduler", + "DevelopYourSolution": "Utveckla din lösning", + "DeployAnywhere": "Distribuera var som helst", + "InstallAbpModule_Description1": "ABP Ă€r ett modulĂ€rt ramverk för applikationsutveckling. Mallarna för startup-lösningar levereras redan med de viktigaste modulerna installerade.\n Men det finns fler applikationsmoduler som du kanske vill anvĂ€nda i din lösning.", + "InstallAbpModule_Description2": "Varje modul bestĂ„r av ett fĂ„tal NuGet- och NPM-paket och har ett installationsdokument. ABP Suite gör det mesta av arbetet automatiskt, sedan konfigurerar eller finjusterar du modulen manuellt baserat pĂ„ dess dokumentation.", + "DevelopYourSolution_Description1": "ABP:s infrastruktur gör att du kan fokusera pĂ„ din egen affĂ€rskod genom att automatisera det repetitiva arbetet och tillhandahĂ„lla förbyggd infrastruktur och applikationsfunktioner.", + "DevelopYourSolution_Description2": "I följande kodblock kan du se hur ABP Framework sömlöst integreras i din kod och automatiserar de repetitiva uppgifterna Ă„t dig.", + "DevelopYourSolution_Description3": "Även i detta kortkodsblock gör ABP en hel del saker Ă„t dig.", + "DevelopYourSolution_Description4": "Den tillhandahĂ„ller basklasser för att tillĂ€mpa konventioner, som\n dependency injection. Generiska\n repository tjĂ€nster ger ett bekvĂ€mt sĂ€tt att\n sĂ€tt att interagera med databasen. Deklarativ\n auktorisering arbetar med ett finjusterat behörighetssystem.", + "DevelopYourSolution_Description5": "ABP automatiserar helt och hĂ„llet\n arbetsenhet (för databasanslutning och transaktionshantering),\n undantagshantering,\n validering\n och auditloggning. Det ger mĂ„nga fler byggstenar för att förenkla dina dagliga utvecklingsuppgifter och fokusera pĂ„ din egen kod medan du skapar produktionsklara\n applikationer.", + "DevelopYourSolution_Description6": "Du kan förestĂ€lla dig hur lĂ„ngt och komplicerat det kodblocket kan bli om du skulle göra allt manuellt.", + "SuiteCrudGenerationInFewSeconds": "Förutom att handkoda din lösning kan du skapa fullt fungerande avancerade CRUD-sidor pĂ„ nĂ„gra minuter med hjĂ€lp av ABP Suite-verktyget. Det genererar koden till din lösning, sĂ„ att du kan finjustera den utifrĂ„n dina anpassade krav.", + "DeployAnywhere_Description1": "I slutĂ€ndan har du en ren .NET-lösning. Du kan distribuera din lösning till din egen server, till en molnplattform, till Kubernetes eller var du vill. Du kan distribuera till sĂ„ mĂ„nga servrar som du vill. ABP Ă€r ett agnostiskt verktyg för driftsĂ€ttningsmiljöer.", + "ExpertiseAbpFramework": "Expertis ABP-ramverket", + "ExpertiseAbpFramework_Description1": "Vill du gĂ„ lĂ€ngre Ă€n till grunderna och fĂ„ expertis inom ABP.IO-plattformen?", + "FreeDownload": "Fri nedladdning", + "Read": "LĂ€s", + "HavingTrouble": "Har du problem?", + "HavingTrouble_Description1": "Har du problem med att utveckla din lösning? Vi finns hĂ€r för dig! AnvĂ€nd ABP:s supportplattform\n eller skicka ett e-postmeddelande för att fĂ„ hjĂ€lp direkt frĂ„n Core ABP Framework-teamets medlemmar.", + "WeAreHereToHelp_Description1": "Du kan blĂ€ddra bland vĂ„ra hjĂ€lpĂ€mnen eller söka i vanliga frĂ„gor,\n eller sĂ„ kan du stĂ€lla en frĂ„ga till oss genom att anvĂ€nda kontaktformulĂ€ret.", + "OtherModules": "Övriga moduler", + "OtherModules_Description1": "Konto, Audit Logging, Chatt, CMS Kit, Filhantering, FormulĂ€r, GDPR, Identitet, SprĂ„khantering, Betalning, Saas och mer ...", + "HowItWorks_DatabaseProviderOptions": "Alternativ för databasleverantör", + "SeeFAQ": "Se vanliga frĂ„gor", + "ReleaseLogs": "Release Loggar", + "ReleaseLogs_Tag": "{0} Loggar för frislĂ€ppande", + "ReleaseLogs_Pr": "Pull Request #{0} - {1}", + "NoLabels": "Inga etiketter", + "DoesTheSubscriptionRenewAutomatically": "Förnyas abonnemanget automatiskt?", + "DoesTheSubscriptionRenewAutomaticallyExplanation": "ABP.IO-plattformen har inte en faktureringsmodell för automatisk förnyelse. DĂ€rför kommer din prenumeration inte att förnyas automatiskt i slutet av din licensperiod. Om du vill fortsĂ€tta att ha fördelarna med ABP.IO-plattformen mĂ„ste du förnya den manuellt pĂ„ sidan för organisationshantering. Om du har flera organisationer klickar du pĂ„ knappen \"Hantera\" pĂ„ din organisation som löper ut och klickar sedan pĂ„ knappen \"FörlĂ€ng nu\" för att förnya din licens. Du kanske ocksĂ„ vill ta en titt pĂ„ avsnittet Vad hĂ€nder nĂ€r min licens gĂ„r ut?.", + "DoesTheSubscriptionRenewAutomaticallyExplanationAutoRenewal": "ABP tillĂ„ter dig att automatiskt förnya din licens. Detta Ă€r en valfri tjĂ€nst. Du kan vĂ€xla den hĂ€r funktionen nĂ€r du köper en ny licens eller senare aktivera den frĂ„n din organisationshanteringssida. VĂ€xling för automatisk förnyelse finns i avsnittet \"Betalningsmetod\" pĂ„ organisationshanteringssidan. Om du vill stĂ€nga av automatisk förnyelse, besök organisationshanteringssidan, gĂ„ till avsnittet \"Betalningsmetod\" och avmarkera kryssrutan \"Automatisk förnyelse\". NĂ€r du stĂ€nger av funktionen för automatisk förnyelse mĂ„ste du förnya din licens sjĂ€lv.", + "ExtraQuestionCreditsFaqTitle": "Kan jag köpa extra poĂ€ng för supportfrĂ„gor?", + "ExtraQuestionCreditsFaqExplanation": "Ja, det kan du göra. För att köpa extra frĂ„gepoĂ€ng, skicka ett e-postmeddelande till info@abp.io med din organisations namn. HĂ€r Ă€r prislistan för de extra frĂ„gekrediterna:
  • 50 frĂ„gor paket $999
  • 25 frĂ„gor paket $625
  • 15 frĂ„gor paket $450
", + "AlreadyBetaTester": "Du har redan gĂ„tt med i betatestarprogrammet.", + "AbpStudio": "ABP Studio", + "AbpStudio_Description": "ABP Studio Ă€r fortfarande under utveckling. Du kan fylla i formulĂ€ret nedan för att bli en av de första anvĂ€ndarna.", + "AbpStudio_Description1": "ABP Studio Ă€r en plattformsoberoende skrivbordsapplikation för ABP-utvecklare.", + "AbpStudio_Description2": "Det Ă€r vĂ€l integrerat i ABP-ramverket och syftar till att tillhandahĂ„lla en bekvĂ€m utvecklingsmiljö för dig genom att automatisera saker, ge insikter om din lösning, vilket gör det mycket enklare att utveckla, köra och distribuera dina lösningar.", + "AbpStudio_ComingSoon": "Om du vill testa ABP Studio före alla andra kan du bli BETA-testare", + "AbpStudio_PlannedPreviewDate": "Planerat utgivningsdatum för förhandsvisning: Q4 Ă„r 2023.", + "BetaRequest": "Beta förfrĂ„gan", + "CreateNewSolutions": "Skapa nya lösningar", + "CreateNewSolutions_Description1": "Du kan enkelt skapa allt frĂ„n enkla applikationer till modulĂ€ra monolit- eller mikroservicelösningar med mĂ„nga alternativ. Du fĂ„r en fullstĂ€ndig produktionsfĂ€rdig basprogramvarulösning för ditt företag.", + "ArchitectYourSolutions": "Arkitekt för dina lösningar", + "ArchitectYourSolutions_Description1": "Bygg enklare monolitiskt modulĂ€ra och mikrotjĂ€nstbaserade lösningsstrukturer genom att skapa moduler eller tjĂ€nster och upprĂ€tta relationer mellan dem. Du kan ocksĂ„ installera eller avinstallera förbyggda applikationsmoduler.", + "ExploreYourSolution": "Utforska din lösning", + "ExploreYourSolution_Description1": "ABP Studio visar en vy pĂ„ hög nivĂ„ av komponenterna i din lösning och de moduler som din lösning Ă€r beroende av. Du kan utforska entiteter, tjĂ€nster, HTTP API:er och mycket mer utan att behöva öppna din kodbas.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze": "Kör multiapplikations- eller microservice-lösningar pĂ„ ett kick", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description1": "Kör en, flera eller alla tjĂ€nster med ett enda klick. PĂ„ sĂ„ sĂ€tt Ă€r det mycket enkelt att stoppa en tjĂ€nst, köra den i Visual Studio för att testa eller debugga.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description2": "Se en lista över tjĂ€nster, visa HTTP Request i realtid och antal undantag för varje tjĂ€nst.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description3": "Se alla detaljer om alla HTTP-begĂ€randen som kommer till en tjĂ€nst.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description4": "Utforska undantagsdetaljer i realtid i alla tjĂ€nster, filtrera och sök enkelt.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description5": "Visa applikationsloggarna, filtrera efter loggnivĂ„ eller sök efter text...", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description6": "BlĂ€ddra genom anvĂ€ndargrĂ€nssnittet i din applikation utan att lĂ€mna solution runner.", + "IntegrateToYourKubernetesCluster": "Integrera till ditt Kubernetes-kluster", + "IntegrateToYourKubernetesCluster_Description1": "Koppla din lokala utvecklingsmiljö till ett lokalt eller avlĂ€gset Kubernetes-kluster, dĂ€r klustret redan kör din mikrotjĂ€nstlösning.", + "IntegrateToYourKubernetesCluster_Description2": "FĂ„ Ă„tkomst till alla tjĂ€nster i Kubernetes med deras tjĂ€nstenamn som DNS, precis som om de körs pĂ„ din lokala dator.", + "IntegrateToYourKubernetesCluster_Description3": "Interceptera vilken tjĂ€nst som helst i det klustret, sĂ„ att all trafik till den intercepterade tjĂ€nsten automatiskt omdirigeras till din tjĂ€nst som körs i din lokala maskin. NĂ€r din tjĂ€nst behöver anvĂ€nda nĂ„gon tjĂ€nst i Kubernetes omdirigeras trafiken tillbaka till klustret, precis som om din lokala tjĂ€nst körs inuti Kubernetes.", + "GetInformed": "Bli informerad", + "Studio_GetInformed_Description1": "LĂ€mna din kontaktinformation för att fĂ„ information och pröva först nĂ€r ABP Studio har lanserats.", + "Studio_GetInformed_Description2": "Planerat utgivningsdatum för förhandsvisning: Q3 Ă„r 2023.", + "ThankYou!": "Tack sĂ„ mycket!", + "SendBetaRequest": "Skicka Beta förfrĂ„gan", + "YouJoinedTheBetaTesterProgram": "Du har gĂ„tt med i betatestarprogrammet för ABP Studio.", + "PricingExplanation2": "30 dagars pengarna tillbaka-garanti - LĂ€s mer", + "MoneyBackGuaranteeText": "* 30-dagars pengarna-tillbaka-garanti pĂ„ alla licenser! 100% Ă„terbetalning pĂ„ Team-, 60% Ă„terbetalning pĂ„ Business- och Enterprise-licenser inom 30 dagar.", + "MobileApplicationStartupTemplates": "Mallar för uppstart av mobilapplikationer", + "MobileApplicationStartupTemplates_Description1": "Integrerade startmallar för mobilapplikationer för dina ABP-lösningar.", + "CreatePowerfulLineOfBusinessApplicationsUsingABPMobileStartupTemplates": "Skapa kraftfulla affĂ€rsapplikationer med hjĂ€lp av ABP Mobile Startup Templates", + "CreatePowerfulLineOfBusinessApplicationsUsingABPMobileStartupTemplates_Description1": "ABP tillhandahĂ„ller tvĂ„ startmallar för mobilapplikationer som implementerats med React Native och .NET MAUI. NĂ€r du skapar din nya ABP-baserade lösning kommer du ocksĂ„ att ha grundlĂ€ggande startapplikationer som Ă€r anslutna till dina backend-API:er.", + "CreatePowerfulLineOfBusinessApplicationsUsingABPMobileStartupTemplates_Description2": "Applikationen har en förbyggd autentiseringstokencykel, stöd för flera sprĂ„k, stöd för flera behörigheter, inloggning, glömt lösenord, profilhantering och en anvĂ€ndarhanteringssida. Du kan lĂ€gga till din egen affĂ€rslogik och anpassa den utifrĂ„n dina krav.", + "TwoFrameworkOptions": "TvĂ„ alternativ för ramverk", + "TwoFrameworkOptions_Description": "ABP tillhandahĂ„ller bĂ„de React Native och .NET MAUI mobila startup-mallar. PĂ„ sĂ„ sĂ€tt kan du vĂ€lja den som bĂ€st passar dina behov. BĂ„da apparna Ă„teranvĂ€nder kod i den högsta graden mellan iOS- och Android-plattformarna.", + "PreIntegratedToYourBackend": "Förintegrerad till din backend", + "PreIntegratedToYourBackend_Description": "ABP Mobile-applikationer Ă€r förintegrerade med dina backend-API:er. Den fĂ„r en giltig autentiseringstoken frĂ„n servern och gör autentiserade förfrĂ„gningar.", + "MultiLanguage": "FlersprĂ„kig", + "MultiLanguage_Description": "Det stöder redan mer Ă€n 10 sprĂ„k ur lĂ„dan. Du kan ocksĂ„ lĂ€gga till ytterligare sprĂ„k.", + "Arabic": "Arabiska", + "Czech": "Tjeckien", + "English": "Engelska", + "Hungarian": "Ungerska", + "Finnish": "Finska", + "French": "Franska", + "Hindi": "Hindi", + "Portuguese": "Portugisiska", + "Italian": "Italienska", + "Russian": "Ryska", + "Slovak": "Slovakien", + "Turkish": "Turkiska", + "EngageAndRetainYourCustomersWithABPMobileApps": "Engagera och behĂ„ll dina kunder med ABP:s mobilappar", + "EngageAndRetainYourCustomersWithABPMobileApps_Description1": "Dina kunder vill kunna hantera sina produkter och prenumerationer var som helst och nĂ€r som helst. Det krĂ€ver att organisationer skapar mobilappar som gör det möjligt för kunderna att uppfylla sina önskemĂ„l snabbt och smidigt.", + "EngageAndRetainYourCustomersWithABPMobileApps_Description2": "Med ABP Mobile apps kan du skapa högkvalitativa native mobilappar för Android och iOS... med en enda kodbas och utan att kompromissa med sĂ€kerhet, kvalitet eller skalbarhet.", + "OneCodeBaseMultipleDevices": "En kodbas Flera enheter", + "OneCodeBaseMultipleDevices_Description": "ABP:s mobilapplikationer Ă€r plattformsoberoende. De Ă€r redo att installeras och köras pĂ„ iOS- och Android-enheter, och de anpassar sig till olika formfaktorer med hjĂ€lp av en enda kodbas. Utvecklare behöver bara skapa anvĂ€ndargrĂ€nssnittet och front-end-koden en gĂ„ng, det finns inget behov av att anpassa koden för varje enhet du vill stödja.", + "ComesWithTheSourceCode": "Levereras med kĂ€llkoden", + "ComesWithTheSourceCode_Description": "Mobilapparna Ă€r försedda med kĂ€llkod. Anpassa enkelt UX/UI för dina appar för att uppfylla riktlinjerna för varumĂ€rkesprofilering.", + "Purchase_OneYearPrice": "1 Ă„r Pris", + "Purchase_DeveloperSeatCount": "Antal platser för utvecklare", + "Purchase_DevelopersAlreadyIncluded": "{0} utvecklare redan inkluderade", + "1Year": "1 Ă„r", + "{0}Years": "{0} Ă„r", + "1YearLicense": "1 Ă„rs licens", + "{0}YearsLicense": "{0} År Licens", + "1AdditionalDeveloper": "1 ytterligare utvecklare", + "{0}AdditionalDevelopers": "{0} Ytterligare utvecklare", + "Discount": "Rabatt ({0}%)", + "Summary": "Sammanfattning", + "TrainingPack": "Utbildningspaket", + "TrainingPackDiscount": "Rabatt pĂ„ utbildningspaket", + "Purchase_OnboardingTraining_Description": "Denna liveutbildning Ă€r giltig för en klass med 8 elever och denna rabatt Ă€r endast giltig nĂ€r den köps med den nya licensen. LĂ€s mer ", + "Purchase_Save": "{0}% Spara {1}", + "RemoveBasket": "Ta bort frĂ„n korgen", + "WhyABPIOPlatform?": "Varför ABP.IO Platform?", + "DocumentAim": "Detta dokument syftar till att besvara den stora frĂ„gan:", + "DocumentAim_Description": "\"Varför ska man anvĂ€nda ABP.IO-plattformen i stĂ€llet för att skapa en ny lösning frĂ„n grunden?\"", + "DocumentAim_Description2": "Dokumentet presenterar utmaningarna med att bygga en modern mjukvarulösning och förklarar hur ABP hanterar dessa utmaningar.", + "CreatingANewSolution": "Skapa en ny lösning", + "CreatingANewSolution_Description": "NĂ€r du ska starta en ny lösning finns det mĂ„nga frĂ„gor du mĂ„ste stĂ€lla dig sjĂ€lv, och du bör lĂ€gga ner mycket tid innan du börjar skriva din allra första affĂ€rskod.", + "CreatingAnEmptySolution": "Skapa en tom lösning", + "THEPROBLEM": "PROBLEMET", + "CreatingAnEmptySolution_THEPROBLEM_Description": "Även att skapa en nĂ€stan tom lösning Ă€r en utmaning;", + "CreatingAnEmptySolution_THEPROBLEM_Description2": "Hur organiserar du din kodbas mellan olika projekt?", + "CreatingAnEmptySolution_THEPROBLEM_Description3": "Vilka Ă€r lagren och hur samverkar de?", + "CreatingAnEmptySolution_THEPROBLEM_Description4": "Hur integrerar du med tredjepartsbibliotek?", + "CreatingAnEmptySolution_THEPROBLEM_Description5": "Hur stĂ€ller man in automatiserade tester?", + "ABPSOLUTION": "ABP-LÖSNING", + "CreatingAnEmptySolution_ABPSOLUTION_Description": "ABP tillhandahĂ„ller en vĂ€larkitekterad, skiktad och produktionsklar startup-lösning baserad pĂ„ Domain Driven Design-principerna. Lösningen innehĂ„ller ocksĂ„ en förkonfigurerad enhet och integration test -projekt för varje lager.", + "CommonLibraries": "Gemensamma bibliotek", + "CommonLibraries_THEPROBLEM_Description": "Vilka bibliotek bör du anvĂ€nda för att implementera gemensamma krav? Ekosystemet för programvaruutveckling Ă€r mycket dynamiskt, vilket gör det svĂ„rt att hĂ„lla jĂ€mna steg med de senaste verktygen, biblioteken, trenderna och metoderna.", + "CommonLibraries_ABPSOLUTION_Description": "ABP förintegrerar populĂ€ra, mogna och uppdaterade bibliotek i lösningen. Du behöver inte lĂ€gga tid pĂ„ att integrera dem eller fĂ„ dem att kommunicera med varandra. De fungerar som de ska direkt frĂ„n start.", + "UITheme&Layout": "UI Tema & Layout", + "UITheme&Layout_THEPROBLEM_Description": "NĂ€r man tar itu med anvĂ€ndargrĂ€nssnittet uppstĂ„r en rad olika utmaningar. Det handlar bland annat om att lĂ€gga grunden för ett responsivt, modernt och anpassningsbart UI-kit med ett konsekvent utseende och en mĂ€ngd funktioner som navigeringsmenyer, rubriker, verktygsfĂ€lt, sidfötter, widgetar med mera.", + "UITheme&Layout_THEPROBLEM_Description2": "Även om du vĂ€ljer ett fördesignat tema kan det ta flera dagars utveckling att integrera det sömlöst i ditt projekt. Ett ytterligare hinder ligger i att uppgradera sĂ„dana teman. Ofta blir temats HTML/CSS-struktur sammanflĂ€tad med din UI-kod, vilket gör framtida temaförĂ€ndringar eller uppgraderingar till komplicerade uppgifter. Denna sammanvĂ€vning av kod och design komplicerar flexibiliteten att göra justeringar lĂ€ngs linjen.", + "UITheme&Layout_ABPSOLUTION_Description": "ABP Framework erbjuder ett distinkt temasystem som frigör din UI-kod frĂ„n temabegrĂ€nsningar. Teman finns isolerade, paketerade som NuGet- eller NPM-paket, vilket gör installation eller uppgradering av teman till en frĂ„ga om minuter. Även om du behĂ„ller möjligheten att utveckla ditt eget tema eller integrera ett befintligt, presenterar ABP en samling polerade och moderna teman.", + "UITheme&Layout_ABPSOLUTION_Description2": "Dessutom finns det leverantörer av UI-komponenter som Telerik och DevExpress. Dessa leverantörer tillhandahĂ„ller dock frĂ€mst enskilda komponenter, vilket innebĂ€r att det Ă€r upp till dig att skapa ditt layoutsystem. NĂ€r du arbetar inom ABP-baserade projekt kan du sömlöst införliva dessa bibliotek, pĂ„ samma sĂ€tt som du skulle göra i alla andra projekt.", + "TestInfrastructure": "Testinfrastruktur", + "TestInfrastructure_THEPROBLEM_Description": "Att etablera en robust testmiljö Ă€r en tidskrĂ€vande uppgift. Det handlar om att skapa dedikerade testprojekt inom din lösning, noggrant vĂ€lja ut de verktyg som behövs, skapa mocks för tjĂ€nster och databaser, skapa viktiga basklasser och verktygstjĂ€nster för att minimera redundant kod i testerna och ta itu med olika relaterade uppgifter.", + "TestInfrastructure_ABPSOLUTION_Description": "ABP Startup Templates levereras fĂ€rdigutrustade med konfigurerade testprojekt, vilket effektiviserar processen för dig. Det innebĂ€r att du redan frĂ„n dag ett kan börja skriva din första enhets- eller integrationstestkod utan dröjsmĂ„l.", + "CodingStandards&Training": "Kodningsstandarder och utbildning", + "CodingStandards&Training_THEPROBLEM_Description": "NĂ€r du har konfigurerat lösningen för utveckling mĂ„ste du vanligtvis lĂ€ra utvecklarna hur systemet fungerar och hur man bygger det med hjĂ€lp av samma överenskomna metoder. Även om du ger dem utbildning kan det vara svĂ„rt att hĂ„lla dokumentationen uppdaterad. Med tiden kanske varje utvecklare skriver kod pĂ„ sitt eget sĂ€tt, vilket leder till att reglerna för att skriva kod skiljer sig frĂ„n varandra.", + "CodingStandards&Training_ABPSOLUTION_Description": "ABP-lösningen Ă€r redan snyggt organiserad och har tydliga förklaringar. Steg-för-steg-handledningar och guider visar exakt hur du ska arbeta med ett ABP-projekt.", + "KeepingYourSolutionUpToDate": "HĂ„ll din lösning uppdaterad", + "KeepingYourSolutionUpToDate_THEPROBLEM_Description": "NĂ€r du har pĂ„börjat din utveckling mĂ„ste du hĂ„lla reda pĂ„ de nya versionerna av de bibliotek du anvĂ€nder för uppgraderingar och korrigeringar.", + "KeepingYourSolutionUpToDate_ABPSOLUTION_Description": "Vi uppdaterar regelbundet alla paket till de senaste versionerna och testar dem före den stabila utgĂ„van. NĂ€r du uppdaterar ABP Framework uppgraderas alla dess beroenden till den senaste tekniken.", + "KeepingYourSolutionUpToDate_ABPSOLUTION_Description2": "Abp update CLI-kommando hittar och uppgraderar automatiskt alla ABP-beroende NuGet- och NPM-paket i en lösning. Med ABP Ă€r det enklare att hĂ„lla sig till de senaste versionerna.", + "DRY": "Upprepa inte dig sjĂ€lv!", + "DRY_Description": "Att skapa en baslösning tar lĂ„ng tid och krĂ€ver god erfarenhet av arkitektur. Men detta Ă€r bara början! NĂ€r du börjar utveckla kommer du sannolikt att behöva skriva massor av repetitiv kod; det skulle vara fantastiskt om allt detta kunde hanteras automatiskt.", + "DRY_Description2": "ABP automatiserar och förenklar upprepningskoden sĂ„ mycket som möjligt genom att följa principen om konvention framför konfiguration. Det begrĂ€nsar dig dock inte nĂ€r du behöver vĂ€xla till manuell vĂ€xel. Kontrollen ligger alltid i dina hĂ€nder.", + "Authentication": "Autentisering", + "Authentication_THEPROBLEM_Description": "Single Sign On, Active Directory / LDAP-integration, OpenIddict-integration, sociala inloggningar, tvĂ„faktorsautentisering, glömt / Ă„terstĂ€llt lösenord, e-postaktivering, ny anvĂ€ndarregistrering, kontroll av lösenordskomplexitet, lĂ„sning av konto vid misslyckade försök, visning av misslyckade inloggningsförsök ... etc. Vi vet att alla dessa generiska krav Ă€r bekanta för dig. Du Ă€r inte ensam!", + "Authentication_ABPSOLUTION_Description": "ABP Framework och den kommersiella versionen tillhandahĂ„ller alla dessa standardgrejer förimplementerade Ă„t dig som en Ă„teranvĂ€ndbar kontomodul. Du aktiverar och konfigurerar bara det du behöver.", + "CrossCuttingConcerns": "Övergripande frĂ„gor", + "CrossCuttingConcerns_THEPROBLEM_Description": "Cross-Cutting Concerns Ă€r den grundlĂ€ggande upprepningslogik som bör implementeras för varje anvĂ€ndningsfall. NĂ„gra exempel;", + "CrossCuttingConcerns_THEPROBLEM_Description2": "Starta transaktioner, genomföra vid framgĂ„ng och rulla tillbaka vid fel.", + "CrossCuttingConcerns_THEPROBLEM_Description3": "Hantera och rapportera undantag, returnera ett korrekt felsvar till klienterna och hantera felfall pĂ„ klientsidan.", + "CrossCuttingConcerns_THEPROBLEM_Description4": "Implementera auktorisering och validering, returnera korrekta svar och hantera dessa pĂ„ klientsidan.", + "CrossCuttingConcerns_ABPSOLUTION_Description": "ABP Framework automatiserar eller förenklar alla vanliga övergripande problem. Du skriver bara kod som Ă€r viktig för ditt företag, och ABP hanterar resten genom konventioner.", + "ArchitecturalInfrastructure": "Arkitektonisk infrastruktur", + "ArchitecturalInfrastructure_THEPROBLEM_Description": "Du behöver vanligtvis bygga infrastruktur för att implementera din arkitektur pĂ„ rĂ€tt sĂ€tt. Till exempel implementerar du i allmĂ€nhet Repository-mönstret. Du definierar nĂ„gra basklasser för att förenkla och standardisera skapandet av entiteter, tjĂ€nster, controllers och andra objekt.", + "ArchitecturalInfrastructure_ABPSOLUTION_Description": "ABP Framework tillhandahĂ„ller allt detta och mer dĂ€rtill direkt frĂ„n start. Det Ă€r moget och vĂ€ldokumenterat.", + "EnterpriseApplicationRequirements": "Krav pĂ„ företagsapplikationer", + "EnterpriseApplicationRequirements_THEPROBLEM_Description": "Det finns mĂ„nga krav som du upprepade gĂ„nger mĂ„ste implementera i varje affĂ€rsapplikation;", + "EnterpriseApplicationRequirements_THEPROBLEM_Description2": "Detaljerat behörighetssystem och hantering av behörigheter i anvĂ€ndargrĂ€nssnittet baserat pĂ„ roller och anvĂ€ndare.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description3": "Skriva granskningsloggar och entitetshistorik för att spĂ„ra nĂ€r en anvĂ€ndare Ă€ndrar en databaspost.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description4": "Gör dina enheter mjukt raderade, sĂ„ att de markeras som raderade istĂ€llet för att fysiskt raderas frĂ„n databasen och automatiskt filtrera bort raderade enheter i dina frĂ„gor.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description5": "Skapa abstraktioner och omslag för att konsumera dina backend-API:er frĂ„n frontend-koden.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description6": "UppstĂ€llning i kö och utförande av bakgrundsjobb.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description7": "Hantering av flera tidszoner i ett globalt system.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description8": "Delning av validering, lokalisering och auktoriseringslogik mellan server och klient.", + "EnterpriseApplicationRequirements_ABPSOLUTION_Description": "ABP tillhandahĂ„ller en infrastruktur för att enkelt implementera sĂ„dana krav. Återigen behöver du inte spendera din vĂ€rdefulla tid pĂ„ att implementera alla dessa om och om igen.", + "GeneratingInitialCode&Tooling": "Generering av initialkod och verktyg", + "GeneratingInitialCode&Tooling_THEPROBLEM_Description": "Du kommer att bygga mĂ„nga liknande sidor i en typisk webbapplikation. De flesta av dem kommer att utföra liknande CRUD-operationer. Det Ă€r mycket trĂ„kigt och Ă€ven felbenĂ€get att upprepade gĂ„nger skapa sĂ„dana sidor.", + "GeneratingInitialCode&Tooling_ABPSOLUTION_Description": "ABP Suite kan generera en full-stack CRUD-sida för dina enheter pĂ„ nĂ„gra sekunder. Den genererade koden Ă€r skiktad och ren. Alla standardkrav för validering och auktorisering Ă€r implementerade. Dessutom genereras enhetstestklasser. NĂ€r du vĂ€l har fĂ„tt en helt fungerande sida kan du Ă€ndra den enligt dina affĂ€rsbehov.", + "IntegratingTo3rdPartyLibrariesAndSystems": "Integrering med bibliotek och system frĂ„n tredje part", + "IntegratingTo3rdPartyLibrariesAndSystems_THEPROBLEM_Description": "De flesta bibliotek Ă€r utformade pĂ„ lĂ„g nivĂ„ och du mĂ„ste vanligtvis göra en del arbete för att integrera dem pĂ„ rĂ€tt sĂ€tt utan att upprepa samma integrations- och konfigurationskod överallt i din lösning. Anta till exempel att du mĂ„ste anvĂ€nda RabbitMQ för att implementera din distribuerade hĂ€ndelsebuss. Allt du vill göra Ă€r att skicka ett meddelande till en kö och hantera de inkommande meddelandena. Men du mĂ„ste förstĂ„ meddelandemönster, köer och utbytesdetaljer. För att skriva effektiv kod mĂ„ste du skapa en pool för att hantera anslutningar, klienter och kanaler. Du mĂ„ste ocksĂ„ hantera undantag, ACK-meddelanden, Ă„teranslutning till RabbitMQ vid misslyckanden och mer.", + "IntegratingTo3rdPartyLibrariesAndSystems_ABPSOLUTION_Description": "Till exempel abstraherar ABP:s RabbitMQ Distributed Event Bus-integration alla dessa detaljer. Du skickar och tar emot meddelanden utan krĂ„ngel. Behöver du skriva kod pĂ„ lĂ„g nivĂ„? Inga problem, det kan du alltid göra. ABP begrĂ€nsar dig inte nĂ€r du behöver anvĂ€nda lĂ„gnivĂ„funktioner i det bibliotek du anvĂ€nder.", + "WhyNotBuildYourOwnFramework?": "Varför inte bygga ditt eget ramverk?", + "WhyNotBuildYourOwnFramework_THEPROBLEM_Description": "All infrastruktur, Ă€ven pĂ„ det enklaste sĂ€ttet, tar mycket tid att bygga, underhĂ„lla och dokumentera. Den blir större med tiden och det blir svĂ„rt att underhĂ„lla den i din lösning. Att separera dessa i ett Ă„teranvĂ€ndbart projekt Ă€r utgĂ„ngspunkten för att bygga ditt eget interna ramverk.", + "WhyNotBuildYourOwnFramework_THEPROBLEM_Description2": "Att bygga, dokumentera, utbilda och underhĂ„lla ett internt ramverk Ă€r verkligen svĂ„rt. Om du inte har ett erfaret, dedikerat ramverksteam blir ditt interna ramverk snabbt en odokumenterad Ă€ldre kod som ingen lĂ€ngre kan förstĂ„ och underhĂ„lla. Å andra sidan utvecklas dessa ramverk i allmĂ€nhet av en eller tvĂ„ utvecklare i teamet. Och dessa medarbetare hĂ„ller pĂ„ att bli en kunskapssilo. Det Ă€r bra för dem men dĂ„ligt för företaget eftersom de Ă€r projektets enda punkt för misslyckande -SPOF-. NĂ€r de lĂ€mnar företaget gĂ„r projektet dramatiskt ner.", + "WhyNotBuildYourOwnFramework_ABPSOLUTION_Description": "ABP Framework Ă€r ett community-drivet, vĂ€ldokumenterat, moget och generiskt applikationsramverk. Ett team av mycket erfarna utvecklare arbetar hĂ„rt för att hĂ„lla det uppdaterat, lĂ€tt att förstĂ„ och bekvĂ€mt att anvĂ€nda. Att anvĂ€nda ett sĂ„ stabilt ramverk gör att du kan fokusera pĂ„ din egen affĂ€rskod och fĂ„ hjĂ€lp med ramverket frĂ„n experter nĂ€r du behöver det.", + "ArchitecturalInfrastructure_Description": "SaaS-applikationer, modulĂ€ra system eller mikroservicesystem Ă€r de mest anvĂ€nda modellerna för företagsprogramvara. Att bygga sĂ„dana system krĂ€ver inte bara en god förstĂ„else och erfarenhet utan ocksĂ„ en stark mjukvaruinfrastruktur. Annars kommer du att fĂ„ lĂ€gga ner mycket arbete pĂ„ att stödja dessa arkitektoniska detaljer i din kodbas.", + "Modularity": "Modularitet", + "Modularity_THEPROBLEM_Description": "Att bygga ett verkligt modulĂ€rt system Ă€r inte lĂ€tt! Alla aspekter av systemet (databas, entiteter, API:er, UI-sidor/komponenter) kan delas upp i moduler, och varje modul kan Ă„teranvĂ€ndas utan andra. Den vanliga ASP.NET Core ger inte en sĂ„dan modulĂ€r arkitektur. Om du behöver det bör du tĂ€nka pĂ„ det frĂ„n grunden.", + "Modularity_ABPSOLUTION_Description": "ABP Framework Ă€r skapat för att vara en modulĂ€r struktur för applikationsutveckling. Varje funktion i ramverket Ă€r utvecklad för att vara kompatibel med modularitet. Dokumentation och guider förklarar hur man utvecklar Ă„teranvĂ€ndbara moduler pĂ„ ett standardiserat sĂ€tt.", + "SaaSMultiTenancy": "SaaS / Multi-Tenancy", + "SaaSMultiTenancy_THEPROBLEM_Description": "Multi-Tenancy Ă€r ett vanligt sĂ€tt att implementera SaaS-system. Att implementera en konsekvent multi-tenant infrastruktur kan dock bli komplicerat.", + "SaaSMultiTenancy_ABPSOLUTION_Description": "ABP Framework tillhandahĂ„ller en komplett infrastruktur för flera hyresgĂ€ster och abstraherar komplexiteten frĂ„n din företagskod. Din applikationskod kommer att vara mestadels multi-tenancy medveten, medan ABP Framework automatiskt isolerar databasen, cache och andra detaljer om hyresgĂ€sterna frĂ„n varandra. Det stöder en enda databas, per hyresgĂ€stdatabas och hybridmetoder. Det konfigurerar biblioteken som Microsoft Identity och OpenIddict, som normalt inte Ă€r multi-tenancy-kompatibla, pĂ„ rĂ€tt sĂ€tt.", + "Microservices": "MikrotjĂ€nster", + "Microservices_THEPROBLEM_Description": "Att bygga ett mikrotjĂ€nstsystem krĂ€ver mĂ„nga infrastrukturdetaljer: Autentisering och auktorisering av applikationer och mikrotjĂ€nster samt implementering av asynkrona meddelanden och synkrona (Rest/GRPC) kommunikationsmönster mellan mikrotjĂ€nster Ă€r de mest grundlĂ€ggande frĂ„gorna.", + "Microservices_ABPSOLUTION_Description": "ABP-ramverket tillhandahĂ„ller tjĂ€nster, guider och exempel som hjĂ€lper dig att implementera din mikrotjĂ€nstlösning med hjĂ€lp av branschens standardverktyg.", + "Microservices_ABPSOLUTION_Description2": "ABP:s kommersiella version gĂ„r till och med ett steg lĂ€ngre och tillhandahĂ„ller en komplett startup-mall för att kickstarta din microservice-lösning.", + "PreBuiltModules": "Förbyggda moduler", + "PreBuiltModules_THEPROBLEM_Description": "Alla har vi liknande men lite olika affĂ€rskrav. Men vi mĂ„ste alla uppfinna hjulet pĂ„ nytt eftersom ingen annans kod kan fungera direkt i vĂ„r lösning. De Ă€r alla inbĂ€ddade delar av en större lösning.", + "PreBuiltModules_ABPSOLUTION_Description": "ABP modules tillhandahĂ„ller mĂ„nga Ă„teranvĂ€ndbara applikationsmoduler som betalning, chatt, filhantering, revisionsloggrapportering ... etc. Alla dessa moduler installeras enkelt i din lösning och fungerar direkt. Vi lĂ€gger stĂ€ndigt till fler moduler.", + "PreBuiltModules_ABPSOLUTION_Description2": "Alla moduler Ă€r utformade sĂ„ att de kan anpassas efter dina affĂ€rsbehov. Om du behöver fullstĂ€ndig kontroll kan du ladda ner den fullstĂ€ndiga kĂ€llkoden för alla moduler och anpassa dem helt utifrĂ„n dina specifika affĂ€rskrav.", + "ABPCommunity": "ABP Gemenskap", + "ABPCommunity_Description": "Slutligen, att vara en del av en stor gemenskap dĂ€r alla följer liknande kodningsstilar och principer och delar en gemensam infrastruktur ger kraft nĂ€r du har problem eller behöver hjĂ€lp med designbeslut. Eftersom vi skriver kod pĂ„ liknande sĂ€tt kan vi hjĂ€lpa varandra mycket bĂ€ttre. ABP Ă€r ett community-stöttat projekt med mer Ă€n 10K stjĂ€rnor pĂ„ GitHub.", + "ABPCommunity_Description2": "Det Ă€r lĂ€tt att dela kod eller till och med Ă„teranvĂ€ndbara bibliotek mellan ABP-utvecklare. En kodsnutt som fungerar för dig kommer ocksĂ„ att fungera för andra. Det finns mĂ„nga exempel och handledningar som du direkt kan implementera i din applikation.", + "ABPCommunity_Description3": "NĂ€r du anlitar en utvecklare som tidigare arbetat med ABP-arkitekturen kommer denne omedelbart att förstĂ„ din lösning och pĂ„börja utvecklingen pĂ„ mycket kort tid.", + "WhyAbpIo_Page_Title": "Varför ABP.IO Platform?", + "AbpStudio_Page_Title": "ABP Studio", + "CampaignInfo": "Köp en ny licens eller förnya din befintliga licens och fĂ„ ytterligare 2 mĂ„nader utan extra kostnad! Detta erbjudande gĂ€ller för alla licensplaner. Se till att du utnyttjar denna tidsbegrĂ€nsade kampanj för att utöka din tillgĂ„ng till premiumfunktioner och uppgraderingar.", + "HurryUpLastDay": "Skynda pĂ„! Sista dagen: {0}", + "CreatingCRUDPagesWithABPSuite": "Skapa CRUD-sidor med ABP Suite", + "Testimonials": "VittnesmĂ„l", + "MultipleYearDiscount": "Rabatt för flera Ă„r", + "CampaignDiscountText": "Black Friday-rabatt", + "CampaignDiscountName": "Svart fredag", + "CampaignName:BlackFriday": "Svart fredag", + "MultipleOrganizationInfo": "Se alla dina organisationer", + "AbpStudioBetaAccessInfoTitle": "ABP Studio Beta Access", + "AbpStudioBetaAccessInfoText": "Vi Ă€r glada över att kunna dela med oss av beta-versionen av ABP Studio! Den hĂ€r versionen markerar en viktig milstolpe i vĂ„r utvecklingsresa, och vi Ă€r angelĂ€gna om att samla in din feedback för att göra applikationen Ă€nnu bĂ€ttre.", + "YouAreNotAuthorizedToDownloadStudio": "Du Ă€r inte behörig att ladda ner ABP Studio.", + "OrganizationHasNoDefaultCreditCard": "Din organisation har inget standardkreditkort. LĂ€gg till ett kreditkort för din organisation.", + "YouAreNotAuthorizedToPayThisPaymentRequest": "Du Ă€r inte behörig att betala denna betalningsbegĂ€ran.", + "YouAreNotAuthorizedToCreateBillingInfoForThisPaymentRequest": "Du Ă€r inte behörig att skapa faktureringsinformation för denna betalningsbegĂ€ran.", + "OrganizationNotFound": "Organisationen hittades inte.", + "CannotDeleteDefaultCardBecauseAutoRenewalEnabled": "Du kan inte ta bort kortet just nu eftersom funktionen Auto-Renewal Ă€r aktiverad. För att ta bort kortet mĂ„ste du först avaktivera Auto-Renewal.", + "AreYouSureWantToDeleteThisCard": "Är du sĂ€ker pĂ„ att du vill ta bort det hĂ€r kortet?", + "AreYouSureWantToSetThisCardAsDefault": "Är du sĂ€ker pĂ„ att du vill anvĂ€nda det hĂ€r kortet som standard?", + "OrganizationBillingInfoIsNotSuitableForIyzicoPayment": "Din organisations faktureringsinformation Ă€r inte lĂ€mplig för iyzico-betalning.", + "AutomaticRenewal": "Automatisk förnyelse", + "AutomaticRenewal_Description": "Om du förnyar en licens innan den gĂ„r ut fĂ„r du en rabatt pĂ„ upp till 40 %. Med den automatiska förnyelseprocessen kan du förnya din licens utan att förlora denna rabatt, och din utveckling kommer aldrig att avbrytas. Automatisk förnyelse Ă€r endast tillgĂ€nglig för kreditkortsbetalning. Du kan inaktivera automatisk förnyelse nĂ€r som helst genom att gĂ„ till din organisationshanteringssida. ABP sparar inte din kreditkortsinformation, men vĂ„ra globala betalningsgateways sĂ€krar besparingar.", + "CardNotFoundMessage": "Vill du lĂ€gga till ett nytt kort?", + "CardNotFoundTitle": "Kortet hittades inte", + "AutoRenewalEnabled": "Automatisk förnyelse aktiverad", + "AutoRenewalDisabled": "Automatisk förnyelse Avaktiverad", + "PaymentRequestIdIsNotProvided": "BetalningsförfrĂ„gans ID anges inte.", + "PaymentFailedInfo": "TyvĂ€rr, betalningen misslyckades! Detta kan bero pĂ„ otillrĂ€ckliga medel, ogiltigt kreditkortsnummer eller ogiltig pinkod", + "UsedPayment": "Denna betalning har redan anvĂ€nts", + "ManageLicense": "Hantera licens", + "AbpPlatformLeptonXTheme": "LeptonX Theme för din administrativa instrumentpanel av ABP Platform", + "NoActiveLicence": "Du Ă€r inte berĂ€ttigad till denna Ă„tgĂ€rd! Du har ingen aktiv licens.", + "ABPStudioBetaTester": "För att kunna skicka in din begĂ€ran mĂ„ste du logga in", + "ABPStudioBetaAccess": "ABP Studio Beta Access", + "VisitABPStudio": "Besök ABP Studio", + "EditBillingInformation": "Redigera faktureringsinformation", + "Organization": "Organisation", + "E-Book": "E-bok", + "CreditCards": "Kreditkort", + "BillingInformation": "Faktureringsinformation", + "AddNewCreditCard": "LĂ€gg till nytt kreditkort", + "MyOrganizations_LearnMorePlan": "LĂ€s mer om planer pĂ„ prissĂ€ttningssidan", + "AutoLicenseRenewalIsNotEnabled": "Automatisk licensförnyelse Ă€r inte aktiverad.", + "SetAsDefaultPaymentMethod": "Ange som standardbetalningsmetod", + "{0}PerAdditionalDeveloper": "{0} per ytterligare utvecklare", + "CardAlias": "Alias för kort (valfritt)", + "AbpDoesNotSaveYourPaymentDetails_Description": "Betalningsuppgifterna kommer att sparas i {2} sĂ€kerhetsvalv och du kan ta bort lagrade uppgifter nĂ€r som helst. Aktivering av automatisk förnyelse sĂ€kerstĂ€ller att din ABP-prenumeration automatiskt förnyas innan den löper ut, förutsatt att du har ett giltigt kreditkort. Om du avaktiverar automatisk förnyelse mĂ„ste du förnya din prenumeration manuellt. Om du vill fortsĂ€tta din projektutveckling utan avbrott föreslĂ„r vi att du aktiverar alternativet Automatisk förnyelse.", + "AddBillingInformation": "LĂ€gg till faktureringsinformation", + "YouHaveNoCardsSaved": "Kortet Ă€r inte sparat Ă€nnu.", + "CreateCreditCardModal_BillingDetails_Description": "Du mĂ„ste spara dina faktureringsuppgifter för att kunna lĂ€gga till ditt kreditkort.", + "TaxNo": "Skatt Nej", + "CardNumber": "Kortnummer", + "NameOnCard": "Namn pĂ„ kortet", + "BillingDetails": "Faktureringsinformation", + "ThereIsNoDeveloper": "Ingen utvecklare tillagd.", + "CardDetails": "Debit-/Kreditkortsuppgifter", + "YearCantBeNull": "ÅrsfĂ€ltet fĂ„r inte vara tomt.", + "CardHolderName": "Namn pĂ„ kortet", + "ExpireDate": "UtgĂ„ngsdatum", + "DisplayName:ExpireDate": "UtgĂ„ngsdatum", + "DisplayName:CardHolderName": "Namn pĂ„ kortet", + "CreditCardNumberLengthWarning": "Ogiltigt kortnummer", + "ExpirationWarning": "Ogiltigt utgĂ„ngsdatum", + "CreateCreditCardModal_Description": "NĂ€r du sparar ditt betalkort/kreditkort kommer en tillfĂ€llig avgift pĂ„ 1 USD att godkĂ€nnas för verifiering och Ă„terbetalas omedelbart.", + "ReturnOfInvestmentTitle": "Avkastning pĂ„ investering", + "ReduceYourDevelopmentCostsDescription": "Minska dina utvecklingskostnader med mer Ă€n 50 % med ABP-ramverket. Men hur? FortsĂ€tt lĂ€sa...", + "SettingUpTheArchitectureTitle": "UppsĂ€ttning av arkitekturen", + "DoingEverythingFromScratch": "Att göra allt frĂ„n början", + "SettingUpTheArchitecture_Description1": "Organisera kodbas och lösningsstruktur", + "SettingUpTheArchitecture_Description2": "Identifiera, installera och konfigurera viktiga tredjepartsbibliotek", + "SettingUpTheArchitecture_Description3": "UpprĂ€tta infrastruktur för automatiserad integration och enhetstest", + "SettingUpTheArchitecture_Description4": "FaststĂ€lla och dokumentera kodstandarder, utbilda utvecklingsteamet", + "UsingTheABPFramework": "AnvĂ€nda ABP-ramverket", + "UseABPSettingUpTheArchitecture_Description": "AnvĂ€nd ABP:s mallar för startup-lösningar", + "ReduceCostsWithABP": "Minska kostnaderna med ABP genom att", + "ReduceCostsBy": "80 % till 100 %.", + "DesigningTheUserInterfaceTitle": "Utformning av anvĂ€ndargrĂ€nssnittet", + "DesigningTheUserInterface_Description1": "Skapa eller köp ett UI-tema", + "DesigningTheUserInterface_Description2": "Anpassa anvĂ€ndargrĂ€nssnittets tema till lösningen", + "DesigningTheUserInterface_Description3": "Bygga de viktigaste delarna av anvĂ€ndargrĂ€nssnittet (layout, meny, sidhuvud, sidfot med responsiv design)", + "DesigningTheUserInterface_Description4": "Se till att designen Ă€r konsekvent pĂ„ alla applikationssidor", + "UseABPDesigningTheUserInterface_Description": "AnvĂ€nd ABP:s LeptonX UI Theme", + "DevelopingApplicationFeaturesTitle": "Utveckling av applikationsfunktioner", + "DevelopingApplicationFeatures_Description1": "Utveckla din egen affĂ€rslogik", + "DevelopingApplicationFeatures_Description2": "Utveckla varje sida en efter en", + "DevelopingApplicationFeatures_Description3": "Utveckla gemensamma affĂ€rsmoduler sjĂ€lv", + "DevelopingApplicationFeatures_Description4": "Utveckla autentiseringssystemet (enkel inloggning, 2-faktor autentisering, sociala inloggningar, Ă„terstĂ€llning av lösenord, e-postaktivering etc...)", + "DevelopingApplicationFeatures_Description5": "TillĂ€mpa övergripande frĂ„gor i varje anvĂ€ndningsfall (DB-transaktioner, auktorisering, validering, undantagshantering etc.)", + "DevelopingApplicationFeatures_Description6": "Utveckla gemensamma basklasser och nyttotjĂ€nster", + "DevelopingApplicationFeatures_Description7": "Utveckla gemensamma icke-affĂ€rsmĂ€ssiga krav (revisionsloggning, soft-delete, bakgrundsjobb, behörighetssystem etc.)", + "UseABPDevelopingApplicationFeatures_Description1": "Utveckla din egen affĂ€rslogik", + "UseABPDevelopingApplicationFeatures_Description2": "AnvĂ€nd ABP Suite för att automatiskt generera CRUD-liknande sidor", + "UseABPDevelopingApplicationFeatures_Description3": "AnvĂ€nd direkt ABP:s förbyggda gemensamma applikationsmoduler och anpassa dem utifrĂ„n dina unika krav", + "ReduceCostsBy_2": "40-60 procent", + "WhyABPIoPlatform": "Varför ABP.IO Platform?", + "WhyShouldYouUsetheABPIOPlatform": "Varför ska du anvĂ€nda ABP.IO-plattformen istĂ€llet för att skapa en ny lösning frĂ„n grunden?", + "ExploreMore": "Utforska mer", + "DocumentIntroducesDescription": "Om du vill veta mer om varför du ska anvĂ€nda ABP.IO Platform istĂ€llet för att skapa en ny lösning frĂ„n grunden, lĂ€s följande dokument:", + "ReturnOfInvestmentPageAbout": "PĂ„ den hĂ€r sidan beskrivs de grundlĂ€ggande stegen i utvecklingen av en programvarulösning och hur ABP.IO Platform minskar dina utvecklingskostnader i varje steg.", + "LearnMore": "LĂ€r dig mer", + "ReturnOfInvestment": "Avkastning pĂ„ investeringar", + "ReturnOfInvestment_Description": "LĂ€r dig hur du kan minska dina utvecklingskostnader med mer Ă€n 50 %.", + "Previous": "FöregĂ„ende", + "PricingDiscount": "Spara", + "PricingTeamTitle": "Team", + "PricingBusinessTitle": "Företag", + "PricingEnterpriseTitle": "Företag", + "SpecialDiscount": "SĂ€rskild rabatt", + "YourOrganizationOverview": "Översikt över din organisation", + "TrainingDetailsHeaderInfo_TrainingHourSingular": "{0} timme", + "ContactPageError": "VĂ€nligen skicka ditt meddelande via e-post till info@abp.io
HĂ€r Ă€r vad du skrev :", + "GoBack": "GĂ„ tillbaka", + "HereWhatYouWrote": "HĂ€r Ă€r vad du skrev:", + "Sales": "FörsĂ€ljning", + "LicensingPricing": "Licensiering/prissĂ€ttning", + "TrialDemo": "Testversion / Demo", + "TrainingOnboarding": "Utbildning / Onboarding", + "Resellers": "ÅterförsĂ€ljare", + "Others": "Övriga", + "Characters": "KaraktĂ€rer", + "Topic": "Ämne", + "SendUsEmail": "Skicka e-post till oss", + "ErrorExceptionMessage": "Ett fel intrĂ€ffade under behandlingen av din begĂ€ran", + "WatchTakeCodeGeneration": "Titta pĂ„ videon \"Utforska potentialen med kodgenerering: ABP Suite\" Video!", + "StartupTemplatesUser": "AnvĂ€ndare", + "StartupSingleSignOn": "Enkel inloggning", + "Application{0}": "TillĂ€mpning {0}", + "PreBuiltApplicationModulesTitle": "FĂ€rdigbyggda applikationer Moduler.", + "RegisterDemo": "Registrera", + "TrainingDescription": "Vi erbjuder följande utbildningspaket för dig som vill skaffa dig kunskap om ABP.", + "PurchaseDevelopers": "Utvecklare", + "LinkExpiredMessage": "BetalningslĂ€nken har löpt ut! Kontakta oss pĂ„ sales@volosoft.com för att uppdatera lĂ€nken eller klicka hĂ€r för att navigera till kontaktsidan." + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json index 4366f26e8f..64bf89dc48 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json @@ -1058,7 +1058,6 @@ "AbpStudio_Description": "ABP Studio hala gelißtirme aßamasında. İlk kullanıcılardan biri olmak için aßağıdaki formu doldurabilirsiniz.", "AbpStudio_Description1": "ABP Studio, ABP gelißtiricileri için çok platformlu masaĂŒstĂŒ uygulamasıdır.", "AbpStudio_Description2": "ABP Studio, ABP Framework'e iyi entegre edilmißtir ve sizin için ißleri otomatikleßtirerek, projeniz hakkında bilgi sağlayarak, projelerinizi gelißtirmeyi, çalıßtırmayı ve dağıtımını çok daha kolay hale getirmeyi amaçlamaktadır.", - "AbpStudio_ComingSoon": "Yakında Planlanan beta sĂŒrĂŒm tarihi: 2023'ĂŒn 4. çeyreği.", "AbpStudio_PlannedPreviewDate": "Planlanan beta sĂŒrĂŒm tarihi: 2023'ĂŒn 4. çeyreği.", "BetaRequest": "Beta Talebi", "CreateNewSolutions": "Yeni Projeler Olußtur", @@ -1140,6 +1139,7 @@ "RemoveBasket": "Sepetten kaldır", "TrainingPack": "Eğitim paketi", "TrainingPackDiscount": "Eğitim paketi indirimi", - "LinkExpiredMessage": "Ödeme bağlantısının sĂŒresi doldu! Bağlantıyı gĂŒncellemek için sales@volosoft.com adresinden bizimle iletißime geçin veya iletißim sayfasına gitmek için buraya tıklayın." + "LinkExpiredMessage": "Ödeme bağlantısının sĂŒresi doldu! Bağlantıyı gĂŒncellemek için sales@volosoft.com adresinden bizimle iletißime geçin veya iletißim sayfasına gitmek için buraya tıklayın.", + "AbpStudio_ComingSoon": "ABP Studio'yu herkesten önce test etmek istiyorsanız BETA test kullanıcısı olun" } } diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/vi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/vi.json index ee588cba8f..231687fc9b 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/vi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/vi.json @@ -408,6 +408,7 @@ "SendUsEmail": "Gá»­i email cho chĂșng tĂŽi", "ErrorExceptionMessage": "Đã xáșŁy ra lỗi trong khi xá»­ lĂœ yĂȘu cáș§u cá»§a báșĄn", "WatchTakeCodeGeneration": "Xem video \"KhĂĄm phĂĄ tiềm năng táșĄo mĂŁ: ABP Suite\"!", - "ExtendNow": "Gia háșĄn/Gia háșĄn" + "ExtendNow": "Gia háșĄn/Gia háșĄn", + "AbpStudio_ComingSoon": "Náșżu báșĄn muốn thá»­ nghiệm ABP Studio trước báș„t kỳ ai khĂĄc, hĂŁy trở thĂ nh người thá»­ nghiệm BETA" } } \ No newline at end of file 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 afb9a428e9..5f8141bf2a 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json @@ -915,7 +915,6 @@ "AbpStudio_Description": "ABP Studio ä»ćœšćŒ€ć‘äž­ă€‚æ‚šćŻä»„ćĄ«ć†™äž‹éąçš„èĄšć•ïŒŒæˆäžș驖æ‰č甚户äč‹äž€ă€‚", "AbpStudio_Description1": "ABP Studio æ˜Żäž“äžș ABP ćŒ€ć‘äșșć‘˜èźŸèźĄçš„è·šćčłć°æĄŒéąćș”甚皋ćșă€‚", "AbpStudio_Description2": "漃侎 ABP æĄ†æž¶é›†æˆćŸ—ćŸˆć„œïŒŒæ—šćœšé€šèż‡è‡ȘćŠšćŒ–ă€æäŸ›æœ‰ć…łè§Łć†łæ–čæĄˆçš„è§è§ŁïŒŒäžșæ‚šæäŸ›èˆ’é€‚çš„ćŒ€ć‘çŽŻćąƒïŒŒäœżćŒ€ć‘ă€èżèĄŒć’ŒéƒšçœČè§Łć†łæ–čæĄˆć˜ćŸ—æ›ŽćŠ ćźčæ˜“ă€‚", - "AbpStudio_ComingSoon": "捳氆揑澃 èźĄćˆ’æ”‹èŻ•ç‰ˆć‘ćžƒæ—„æœŸïŒšèźĄćˆ’æ”‹èŻ•ç‰ˆć‘ćžƒæ—„æœŸïŒš2023ćčŽçŹŹć››ć­ŁćșŠă€‚", "AbpStudio_PlannedPreviewDate": "èźĄćˆ’éą„è§ˆç‰ˆć‘ćžƒæ—„æœŸïŒš2023 ćčŽçŹŹć››ć­ŁćșŠă€‚", "BetaRequest": "æ”‹èŻ•ç‰ˆèŻ·æ±‚", "CreateNewSolutions": "戛ć»șæ–°çš„è§Łć†łæ–čæĄˆ", @@ -1110,6 +1109,7 @@ "ErrorExceptionMessage": "ć€„ç†æ‚šçš„èŻ·æ±‚æ—¶ć‘ç”Ÿé”™èŻŻ", "WatchTakeCodeGeneration": "è§‚çœ‹â€œæŽąçŽąä»Łç ç”Ÿæˆçš„æœœćŠ›ïŒšABP Suiteâ€è§†éą‘ïŒ", "PreBuiltApplicationModulesTitle": "éą„æž„ć»șćș”甚皋ćș æšĄć—", - "RegisterDemo": "ç™»èź°" + "RegisterDemo": "ç™»èź°", + "AbpStudio_ComingSoon": "ćŠ‚æžœæ‚šæƒłć…ˆäșŽć…¶ä»–äșșæ”‹èŻ• ABP StudioïŒŒèŻ·æˆäžș BETA æ”‹èŻ•ć‘˜" } } 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 1d57000aee..302007af79 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json @@ -897,7 +897,6 @@ "AbpStudio_Description": "ABP Studio ä»ćœšé–‹ç™Œäž­ă€‚æ‚šćŻä»„ćĄ«ćŻ«äž‹éąçš„èĄšć•ïŒŒæˆç‚ș第侀æ‰čäœżç”šè€…äč‹äž€ă€‚", "AbpStudio_Description1": "ABP Studio æ˜Żäž€æŹŸé‡ć° ABP 開癌äșșć“Ąçš„è·šćčłć°æĄŒéąæ‡‰ç”šçš‹ćŒă€‚", "AbpStudio_Description2": "ćźƒèˆ‡ ABP æĄ†æž¶ćŸˆć„œćœ°é›†æˆïŒŒæ—šćœšé€éŽè‡Ș拕挖ç‚șæ‚šæäŸ›äž€ć€‹èˆ’é©çš„é–‹ç™Œç’°ćąƒïŒŒæäŸ›æœ‰é—œæ‚šçš„è§Łæ±șæ–čæĄˆçš„èŠ‹è§ŁïŒŒäœżé–‹ç™Œă€é‹èĄŒć’ŒéƒšçœČæ‚šçš„è§Łæ±șæ–čæĄˆèźŠćŸ—æ›ŽćŠ ćźčæ˜“ă€‚", - "AbpStudio_ComingSoon": "ćłć°‡æŽšć‡șèšˆćŠƒæžŹè©Šç‰ˆç™Œćžƒæ—„æœŸïŒš2023 ćčŽçŹŹć››ć­Łă€‚", "AbpStudio_PlannedPreviewDate": "èšˆç•«é èŠœç‰ˆç™Œćžƒæ—„æœŸïŒš2023 ćčŽçŹŹć››ć­Łă€‚", "BetaRequest": "æžŹè©Šç‰ˆè«‹æ±‚", "CreateNewSolutions": "ć»șç«‹æ–°çš„è§Łæ±șæ–čæĄˆ", @@ -1100,6 +1099,7 @@ "WatchTakeCodeGeneration": "è§‚çœ‹â€œæŽąçŽąä»Łç ç”Ÿæˆçš„æœœćŠ›ïŒšABP Suiteâ€è§†éą‘ïŒ", "ExtendNow": "滶长 / ç»­èźą", "PreBuiltApplicationModulesTitle": "éą„æž„ć»șćș”甚皋ćș æšĄć—", - "RegisterDemo": "ç™»èź°" + "RegisterDemo": "ç™»èź°", + "AbpStudio_ComingSoon": "ćŠ‚æžœæ‚šæƒłć…ˆäșŽć…¶ä»–äșșæ”‹èŻ• ABP StudioïŒŒèŻ·æˆäžș BETA æ”‹èŻ•ć‘˜" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ar.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ar.json index 2b6f5db40c..fef40ce7c1 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ar.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ar.json @@ -259,6 +259,9 @@ "MarkdownSupported": "Markdown ŰŁÙŠŰŻ.", "Preview": "مŰčŰ§ÙŠÙ†Ű©", "VisitVideoCourseDescription": "ۄ۰ۧ كنŰȘ ŰȘ۱ŰșŰš في ŰȘŰčلم ŰŁŰłŰ§ŰłÙŠŰ§ŰȘ ۄ۷ۧ۱ Űčمل ŰšŰ±Ù†Ű§Ù…ŰŹ ABPی ÙŰ§Ű·Ù„Űč Űčلى ŰŻÙˆŰ±Ű§ŰȘ Ű§Ù„ÙÙŠŰŻÙŠÙˆ Ű§Ù„ŰźŰ§Ű”Ű© ŰšŰšŰ±Ù†Ű§Ù…ŰŹ ABP Essentials.", - "VisitPage": "ŰČ۱ Ű§Ù„Ű”ÙŰ­Ű©" + "VisitPage": "ŰČ۱ Ű§Ù„Ű”ÙŰ­Ű©", + "ConfirmEmailForPost": "لŰȘŰȘمكن من Ű§Ù„Ù†ŰŽŰ±ŰŒ ŰȘŰ­ŰȘۧۏ Ű„Ù„Ù‰ ŰȘŰŁÙƒÙŠŰŻ ŰšŰ±ÙŠŰŻÙƒ Ű§Ù„Ű„Ù„ÙƒŰȘŰ±ÙˆÙ†ÙŠ. Ű§Ù†ŰȘقل Ű„Ù„Ù‰ account.abp.io/Account/Manage وŰȘŰ­Ù‚Ù‚ من ŰšŰ±ÙŠŰŻÙƒ Ű§Ù„Ű„Ù„ÙƒŰȘŰ±ÙˆÙ†ÙŠ في ŰčÙ„Ű§Ù…Ű© Ű§Ù„ŰȘŰšÙˆÙŠŰš \"Ű§Ù„Ù…ŰčÙ„ÙˆÙ…Ű§ŰȘ Ű§Ù„ŰŽŰźŰ”ÙŠŰ©\".", + "DailyPostCreateLimitation": "Ù„Ù‚ŰŻ ÙˆŰ”Ù„ŰȘ Ű„Ù„Ù‰ Ű§Ù„Ű­ŰŻ Ű§Ù„ŰŁÙ‚Ű”Ù‰ Ű§Ù„ÙŠÙˆÙ…ÙŠ Ù„Ű„Ù†ŰŽŰ§ŰĄ Ű§Ù„Ù…Ù†ŰŽÙˆŰ±Ű§ŰȘ. يمكنك Ű„Ù†ŰŽŰ§ŰĄ Ù…ŰŽŰ§Ű±ÙƒŰ© ŰŹŰŻÙŠŰŻŰ© في {0}.", + "YourAccountDisabled": "ŰȘم ŰȘŰčŰ·ÙŠÙ„ ۭ۳ۧۚ Ű§Ù„Ù…ŰłŰȘŰźŰŻÙ… Ű§Ù„ŰźŰ§Ű” ŰšÙƒ!" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/cs.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/cs.json index 35119a1408..86910d5557 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/cs.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/cs.json @@ -259,6 +259,8 @@ "MarkdownSupported": "Markdown podporovĂĄno.", "Preview": "NĂĄhled", "VisitPage": "NavĆĄtivte strĂĄnku", - "VisitVideoCourseDescription": "Pokud se chcete naučit zĂĄklady rĂĄmce ABP, podĂ­vejte se na videokurzy ABP Essentials." + "VisitVideoCourseDescription": "Pokud se chcete naučit zĂĄklady rĂĄmce ABP, podĂ­vejte se na videokurzy ABP Essentials.", + "ConfirmEmailForPost": "Abyste mohli pƙidĂĄvat pƙíspěvky, musĂ­te potvrdit svĆŻj e-mail. Pƙejděte na strĂĄnku account.abp.io/Account/Manage a ověƙte svĆŻj e-mail na kartě OsobnĂ­ Ășdaje.", + "DailyPostCreateLimitation": "DosĂĄhli jste dennĂ­ho limitu pro vytváƙenĂ­ pƙíspěvkĆŻ. NovĂœ pƙíspěvek mĆŻĆŸete vytvoƙit v {0}." } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/de.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/de.json index d26c081de5..99c60d5199 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/de.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/de.json @@ -259,6 +259,8 @@ "MarkdownSupported": "Markdown unterstĂŒtzt.", "Preview": "Vorschau", "VisitPage": "Seite besuchen", - "VisitVideoCourseDescription": "Wenn Sie die Grundlagen des ABP Framework erlernen möchten, schauen Sie sich die ABP Essentials-Videokurse an." + "VisitVideoCourseDescription": "Wenn Sie die Grundlagen des ABP Framework erlernen möchten, schauen Sie sich die ABP Essentials-Videokurse an.", + "ConfirmEmailForPost": "Um BeitrĂ€ge verfassen zu können, mĂŒssen Sie Ihre E-Mail-Adresse bestĂ€tigen. Gehen Sie zu account.abp.io/Account/Manage und bestĂ€tigen Sie Ihre E-Mail-Adresse auf der Registerkarte „Persönliche Daten“.", + "DailyPostCreateLimitation": "Sie haben das tĂ€gliche Limit fĂŒr die Erstellung von BeitrĂ€gen erreicht. Sie können in {0} einen neuen Beitrag erstellen." } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en-GB.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en-GB.json index 347b18ce4b..dc59234777 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en-GB.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en-GB.json @@ -59,7 +59,7 @@ "MilestoneErrorMessage": "Couldn't get the current milestone details from Github.", "QuestionItemErrorMessage": "Couldn't get the latest question details from Stackoverflow.", "Oops": "Oops!", - "CreatePostSuccessMessage": "The Post has been successfully submitted. It will be published once it has been reviewed by the site admin.", + "CreatePostSuccessMessage": "Your post has been successfully submitted. It will be published after review by the site administrator.", "ChooseCoverImage": "Choose a cover image...", "CoverImage": "Cover Image", "ShareYourExperiencesWithTheABPFramework": "Share your experiences with the ABP Framework!", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json index 80fbc8539b..78231bb1af 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json @@ -16,7 +16,7 @@ "Title": "Title", "CreationTime": "Creation time", "Save": "Save", - "SameUrlAlreadyExist": "Same url already exists if you want to add this post, you should change the url!", + "SameUrlAlreadyExist": "Same URL already exists! You must change the URL!", "UrlIsNotValid": "Url is not valid.", "UrlNotFound": "Url not found.", "UrlContentNotFound": "Url content not found.", @@ -33,7 +33,7 @@ "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": "To create an effective post, add a cover photo. Upload 16:9 aspect ratio pictures for the best view.
Maximum file size is 1MB.", "ThisExtensionIsNotAllowed": "This extension is not allowed.", "TheFileIsTooLarge": "The file is too large.", "GoToThePost": "Go to the Post", @@ -56,7 +56,7 @@ "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.", + "CreatePostSuccessMessage": "Your post has been successfully submitted. It will be published after review by the site administrator.", "Browse": "Browse", "CoverImage": "Cover Image", "ShareYourExperiencesWithTheABPFramework": "Share your experiences with the ABP Framework!", @@ -125,7 +125,7 @@ "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).", + "ExternalContentSubmitStepOne": "1. Create 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.", @@ -135,12 +135,12 @@ "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.", + "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:060002": "Post Content is not available from GitHub(\"{PostUrl}\") resource.", "Volo.AbpIo.Domain:060003": "No post content found!", "SeeMore": "See More", "JoinTheABPCommunity": "Join the ABP Community", @@ -171,14 +171,14 @@ "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_Description_3": "This ABP Community Discord Server is the official one with the ABP Core Team present on the server to monitor.", "Discord_Page_JoinToServer": "Join ABP Discord Server", "Events_Page_MetaTitle": "ABP Community Events", "Events_Page_MetaDescription": "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.", "Events_Page_Title": "ABP Community Talks", "Members_Page_WritingFromUser": "Read writing from {0} on ABP Community.", "Post_Create_Page_MetaTitle": "New Post", - "Post_Create_Page_MetaDescription": "Create your post for sharing your experiences about ABP framework and contributing the ABP Community.", + "Post_Create_Page_MetaDescription": "Create your post for sharing your experiences about the ABP framework and contributing to the ABP Community.", "Post_Create_Page_CreateNewPost": "Create New Post", "Post_Index_Page_MetaDescription": "ABP Community's purpose is to create a contribution environment for developers who use the ABP framework.", "Layout_Title": "{0} | ABP Community", @@ -193,7 +193,7 @@ "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!", + "YouAreAlreadyJoinedToThisRaffle": "You already joined this raffle!", "InvalidSubscriptionCode": "Invalid subscription code", "Raffle:{0}": "Raffle: {0}", "Join": "Join", @@ -261,6 +261,9 @@ "Preview": "Preview", "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" + "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}.", + "YourAccountDisabled": "Your user account is disabled!" } -} \ No newline at end of file +} diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/es.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/es.json index bf045dea81..2403cb7681 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/es.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/es.json @@ -259,6 +259,8 @@ "MarkdownSupported": "Markdown soportado.", "Preview": "Avance", "VisitPage": "Visita la pĂĄgina", - "VisitVideoCourseDescription": "Si desea aprender los conceptos bĂĄsicos del marco ABP, consulte los cursos en vĂ­deo de ABP Essentials." + "VisitVideoCourseDescription": "Si desea aprender los conceptos bĂĄsicos del marco ABP, consulte los cursos en vĂ­deo de ABP Essentials.", + "ConfirmEmailForPost": "Para poder publicar, debe confirmar su correo electrĂłnico. Vaya a account.abp.io/Account/Manage y verifique su correo electrĂłnico en la pestaña InformaciĂłn personal.", + "DailyPostCreateLimitation": "Has alcanzado el lĂ­mite diario de creaciĂłn de publicaciones. Puedes crear una nueva publicaciĂłn en {0}." } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/fi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/fi.json index acf70381ff..3f420b1822 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/fi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/fi.json @@ -259,6 +259,8 @@ "MarkdownSupported": "Markdown tuettu.", "Preview": "Esikatselu", "VisitPage": "Vieraile sivulla", - "VisitVideoCourseDescription": "Jos haluat oppia ABP Frameworkin perusteet, katso ABP Essentials Video -kurssit." + "VisitVideoCourseDescription": "Jos haluat oppia ABP Frameworkin perusteet, katso ABP Essentials Video -kurssit.", + "ConfirmEmailForPost": "Jotta voit lĂ€hettÀÀ viestejĂ€, sinun on vahvistettava sĂ€hköpostiosoitteesi. Siirry osoitteeseen account.abp.io/Account/Manage ja vahvista sĂ€hköpostiosoitteesi Henkilökohtaiset tiedot -vĂ€lilehdessĂ€.", + "DailyPostCreateLimitation": "Olet saavuttanut pĂ€ivittĂ€isen viestien luomisrajan. Voit luoda uuden viestin kohteessa {0}." } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/fr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/fr.json index 963bde3048..a7821015b4 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/fr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/fr.json @@ -259,6 +259,8 @@ "MarkdownSupported": "Markdown prise en charge.", "Preview": "Aperçu", "VisitPage": "Page de visite", - "VisitVideoCourseDescription": "Si vous souhaitez apprendre les bases du framework ABP, consultez les cours vidĂ©o ABP Essentials." + "VisitVideoCourseDescription": "Si vous souhaitez apprendre les bases du framework ABP, consultez les cours vidĂ©o ABP Essentials.", + "ConfirmEmailForPost": "Pour pouvoir publier, vous devez confirmer votre e-mail. AccĂ©dez Ă  account.abp.io/Account/Manage et vĂ©rifiez votre e-mail dans l'onglet Informations personnelles.", + "DailyPostCreateLimitation": "Vous avez atteint la limite quotidienne de crĂ©ation de publications. Vous pouvez crĂ©er une nouvelle publication dans {0}." } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/hi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/hi.json index 940d92573f..87919eef8b 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/hi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/hi.json @@ -259,6 +259,8 @@ "MarkdownSupported": "Markdown à€•à€Ÿ à€žà€źà€°à„à€„à€š à€•à€żà€Żà€Ÿà„€", "Preview": "à€Șà„‚à€°à„à€” à€Šà€°à„à€¶à€š", "VisitPage": "à€Żà€Ÿà€€à„à€°à€Ÿ à€Șà„‡à€œ", - "VisitVideoCourseDescription": "à€Żà€Šà€ż à€†à€Ș à€à€Źà„€à€Șà„€ à€«à„à€°à„‡à€źà€”à€°à„à€• à€•à„€ à€źà„‚à€Č à€Źà€Ÿà€€à„‡à€‚ à€žà„€à€–à€šà€Ÿ à€šà€Ÿà€čà€€à„‡ à€čà„ˆà€‚, à€€à„‹ à€à€Źà„€à€Șà„€ à€à€žà„‡à€‚à€¶à€żà€Żà€Č à€”à„€à€Ąà€żà€Żà„‹ à€Șà€Ÿà€ à„à€Żà€•à„à€°à€ź à€Šà„‡à€–à„‡à€‚à„€" + "VisitVideoCourseDescription": "à€Żà€Šà€ż à€†à€Ș à€à€Źà„€à€Șà„€ à€«à„à€°à„‡à€źà€”à€°à„à€• à€•à„€ à€źà„‚à€Č à€Źà€Ÿà€€à„‡à€‚ à€žà„€à€–à€šà€Ÿ à€šà€Ÿà€čà€€à„‡ à€čà„ˆà€‚, à€€à„‹ à€à€Źà„€à€Șà„€ à€à€žà„‡à€‚à€¶à€żà€Żà€Č à€”à„€à€Ąà€żà€Żà„‹ à€Șà€Ÿà€ à„à€Żà€•à„à€°à€ź à€Šà„‡à€–à„‡à€‚à„€", + "ConfirmEmailForPost": "à€Șà„‹à€žà„à€Ÿ à€•à€°à€šà„‡ à€źà„‡à€‚ à€žà€•à„à€·à€ź à€čà„‹à€šà„‡ à€•à„‡ à€Čà€żà€, à€†à€Șà€•à„‹ à€…à€Șà€šà„‡ à€ˆà€źà„‡à€Č à€•à„€ à€Șà„à€·à„à€Ÿà€ż à€•à€°à€šà„€ à€čà„‹à€—à„€à„€ account.abp.io/Account/Manage à€Șà€° à€œà€Ÿà€à€‚ à€”à€° à€”à„à€Żà€•à„à€€à€żà€—à€€ à€œà€Ÿà€šà€•à€Ÿà€°à„€ à€Ÿà„ˆà€Ź à€źà„‡à€‚ à€…à€Șà€šà€Ÿ à€ˆà€źà„‡à€Č à€žà€€à„à€Żà€Ÿà€Șà€żà€€ à€•à€°à„‡à€‚à„€", + "DailyPostCreateLimitation": "à€†à€Ș à€Šà„ˆà€šà€żà€• à€Șà„‹à€žà„à€Ÿ à€šà€żà€°à„à€źà€Ÿà€Ł à€žà„€à€źà€Ÿ à€€à€• à€Șà€čà„à€‚à€š à€—à€ à€čà„ˆà€‚à„€ à€†à€Ș {0} à€źà„‡à€‚ à€à€• à€šà€ˆ à€Șà„‹à€žà„à€Ÿ à€Źà€šà€Ÿ à€žà€•à€€à„‡ à€čà„ˆà€‚à„€" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/hr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/hr.json index f0b3a5941c..5cb7ff44a0 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/hr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/hr.json @@ -259,6 +259,8 @@ "MarkdownSupported": "Markdown podrĆŸan.", "Preview": "Pregled", "VisitPage": "Posjetite stranicu", - "VisitVideoCourseDescription": "Ako ĆŸelite naučiti osnove ABP okvira, pogledajte video tečajeve ABP Essentials." + "VisitVideoCourseDescription": "Ako ĆŸelite naučiti osnove ABP okvira, pogledajte video tečajeve ABP Essentials.", + "ConfirmEmailForPost": "Da biste mogli objavljivati, morate potvrditi svoju e-poĆĄtu. Idite na account.abp.io/Account/Manage i potvrdite svoju e-poĆĄtu na kartici Osobni podaci.", + "DailyPostCreateLimitation": "Dosegli ste dnevno ograničenje za izradu postova. MoĆŸete stvoriti novi post u {0}." } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/hu.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/hu.json index 84117ededd..95433c6d92 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/hu.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/hu.json @@ -259,6 +259,8 @@ "MarkdownSupported": "Markdown tĂĄmogatott.", "Preview": "ElƑnĂ©zet", "VisitPage": "LĂĄtogassa meg az oldalt", - "VisitVideoCourseDescription": "Ha meg szeretnĂ© tanulni az ABP Framework alapjait, nĂ©zze meg az ABP Essentials Video tanfolyamokat." + "VisitVideoCourseDescription": "Ha meg szeretnĂ© tanulni az ABP Framework alapjait, nĂ©zze meg az ABP Essentials Video tanfolyamokat.", + "ConfirmEmailForPost": "A bejegyzĂ©sek közzĂ©tĂ©telĂ©hez meg kell erƑsĂ­tenie e-mail-cĂ­mĂ©t. Nyissa meg az account.abp.io/Account/Manage oldalt, Ă©s ellenƑrizze e-mail-cĂ­mĂ©t a SzemĂ©lyes adatok lapon.", + "DailyPostCreateLimitation": "ElĂ©rte a napi bejegyzĂ©slĂ©trehozĂĄsi korlĂĄtot. Új bejegyzĂ©st itt hozhat lĂ©tre: {0}." } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/is.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/is.json index 953186b239..8f2a733a2d 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/is.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/is.json @@ -259,6 +259,8 @@ "MarkdownSupported": "Markdown stutt.", "Preview": "Forskoðun", "VisitPage": "HeimsĂŠktu síðu", - "VisitVideoCourseDescription": "Ef ĂŸĂș vilt lĂŠra grunnatriði ABP Framework skaltu skoða ABP Essentials Video nĂĄmskeiðin." + "VisitVideoCourseDescription": "Ef ĂŸĂș vilt lĂŠra grunnatriði ABP Framework skaltu skoða ABP Essentials Video nĂĄmskeiðin.", + "ConfirmEmailForPost": "Til að geta sent fĂŠrslur ĂŸarftu að staðfesta netfangið ĂŸitt. Farðu ĂĄ account.abp.io/Account/Manage og staðfestu tölvupĂłstinn ĂŸinn ĂĄ PersĂłnulegum upplĂœsingum flipanum.", + "DailyPostCreateLimitation": "ÞĂș hefur nåð daglegu takmörkunum fyrir fĂŠrslu fĂŠrslu. ÞĂș getur bĂșið til nĂœja fĂŠrslu Ă­ {0}." } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/it.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/it.json index 88bf43fc0e..45021c315d 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/it.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/it.json @@ -259,6 +259,8 @@ "MarkdownSupported": "Markdown supportato.", "Preview": "Anteprima", "VisitPage": "Visita la pagina", - "VisitVideoCourseDescription": "Se vuoi apprendere le nozioni di base del Framework ABP, dai un'occhiata ai corsi video ABP Essentials." + "VisitVideoCourseDescription": "Se vuoi apprendere le nozioni di base del Framework ABP, dai un'occhiata ai corsi video ABP Essentials.", + "ConfirmEmailForPost": "Per poter pubblicare, devi confermare la tua email. Vai su account.abp.io/Account/Manage e verifica la tua email nella scheda Informazioni personali.", + "DailyPostCreateLimitation": "Hai raggiunto il limite giornaliero di creazione di post. Puoi creare un nuovo post in {0}." } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/nl.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/nl.json index 5d18bde830..958c68263d 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/nl.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/nl.json @@ -259,6 +259,8 @@ "MarkdownSupported": "Markdown ondersteund.", "Preview": "Voorbeeld", "VisitPage": "Bezoek pagina", - "VisitVideoCourseDescription": "Als je de basis van het ABP Framework wilt leren, bekijk dan de ABP Essentials Videocursussen." + "VisitVideoCourseDescription": "Als je de basis van het ABP Framework wilt leren, bekijk dan de ABP Essentials Videocursussen.", + "ConfirmEmailForPost": "Om te kunnen posten, moet u uw e-mailadres bevestigen. Ga naar account.abp.io/Account/Manage en verifieer uw e-mailadres op het tabblad Persoonlijke informatie.", + "DailyPostCreateLimitation": "Je hebt de dagelijkse limiet voor het maken van berichten bereikt. Je kunt een nieuw bericht maken in {0}." } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/pl-PL.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/pl-PL.json index a86b93515c..16af07e6e4 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/pl-PL.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/pl-PL.json @@ -259,6 +259,8 @@ "MarkdownSupported": "Markdown utrzymany.", "Preview": "ZapowiedĆș", "VisitPage": "OdwiedĆș stronę", - "VisitVideoCourseDescription": "Jeƛli chcesz poznać podstawy ABP Framework, sprawdĆș kursy wideo ABP Essentials." + "VisitVideoCourseDescription": "Jeƛli chcesz poznać podstawy ABP Framework, sprawdĆș kursy wideo ABP Essentials.", + "ConfirmEmailForPost": "Aby mĂłc publikować, musisz potwierdzić swĂłj adres e-mail. PrzejdĆș do account.abp.io/Account/Manage i zweryfikuj swĂłj adres e-mail w zakƂadce Dane osobowe.", + "DailyPostCreateLimitation": "OsiągnąƂeƛ dzienny limit tworzenia postĂłw. MoĆŒesz utworzyć nowy post w {0}." } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/pt-BR.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/pt-BR.json index af28a46228..249e758a53 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/pt-BR.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/pt-BR.json @@ -259,6 +259,8 @@ "MarkdownSupported": "Markdown suportado.", "Preview": "Visualização", "VisitPage": "Visite a pĂĄgina", - "VisitVideoCourseDescription": "Se vocĂȘ quiser aprender o bĂĄsico do ABP Framework, confira os cursos em vĂ­deo ABP Essentials." + "VisitVideoCourseDescription": "Se vocĂȘ quiser aprender o bĂĄsico do ABP Framework, confira os cursos em vĂ­deo ABP Essentials.", + "ConfirmEmailForPost": "Para poder postar, vocĂȘ precisa confirmar seu e-mail. Acesse account.abp.io/Account/Manage e verifique seu e-mail na guia InformaçÔes pessoais.", + "DailyPostCreateLimitation": "VocĂȘ atingiu o limite diĂĄrio de criação de postagens. VocĂȘ pode criar uma nova postagem em {0}." } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ro-RO.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ro-RO.json index e9d89b398b..7d33ecdb90 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ro-RO.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ro-RO.json @@ -259,6 +259,8 @@ "MarkdownSupported": "Markdown sprijinit.", "Preview": "previzualizare", "VisitPage": "Vizitați pagina", - "VisitVideoCourseDescription": "Dacă doriți să aflați elementele de bază ale cadrului ABP, consultați cursurile video ABP Essentials." + "VisitVideoCourseDescription": "Dacă doriți să aflați elementele de bază ale cadrului ABP, consultați cursurile video ABP Essentials.", + "ConfirmEmailForPost": "Pentru a putea posta, trebuie să vă confirmați adresa de e-mail. Accesați account.abp.io/Account/Manage și verificați e-mailul Ăźn fila Informații personale.", + "DailyPostCreateLimitation": "Ați atins limita zilnică de creare a postărilor. Puteți crea o postare nouă Ăźn {0}." } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/sk.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/sk.json index dcfbc84bf9..6c842ef388 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/sk.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/sk.json @@ -259,6 +259,8 @@ "MarkdownSupported": "Markdown podporovanĂ©.", "Preview": "NĂĄhÄŸad", "VisitPage": "NavĆĄtĂ­vte strĂĄnku", - "VisitVideoCourseDescription": "Ak sa chcete naučiĆ„ zĂĄklady rĂĄmca ABP, pozrite si video kurzy ABP Essentials." + "VisitVideoCourseDescription": "Ak sa chcete naučiĆ„ zĂĄklady rĂĄmca ABP, pozrite si video kurzy ABP Essentials.", + "ConfirmEmailForPost": "Aby ste mohli uverejƈovaĆ„ prĂ­spevky, musĂ­te potvrdiĆ„ svoj e-mail. Prejdite na strĂĄnku account.abp.io/Account/Manage a overte svoj e-mail na karte OsobnĂ© informĂĄcie.", + "DailyPostCreateLimitation": "Dosiahli ste dennĂœ limit na vytvĂĄranie prĂ­spevkov. NovĂœ prĂ­spevok mĂŽĆŸete vytvoriĆ„ v {0}." } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/sl.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/sl.json index 8ed4d53271..eb6a616017 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/sl.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/sl.json @@ -259,6 +259,8 @@ "MarkdownSupported": "Markdown podprt.", "Preview": "Predogled", "VisitPage": "Obiơčite stran", - "VisitVideoCourseDescription": "Če se ĆŸelite naučiti osnov ogrodja ABP, si oglejte video tečaje ABP Essentials." + "VisitVideoCourseDescription": "Če se ĆŸelite naučiti osnov ogrodja ABP, si oglejte video tečaje ABP Essentials.", + "ConfirmEmailForPost": "Če ĆŸelite objavljati, morate potrditi svoj e-poĆĄtni naslov. Pojdite na account.abp.io/Account/Manage in potrdite svoj e-poĆĄtni naslov na zavihku Osebni podatki.", + "DailyPostCreateLimitation": "Dosegli ste dnevno omejitev za ustvarjanje objav. Novo objavo lahko ustvarite v {0}." } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/sv.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/sv.json new file mode 100644 index 0000000000..de8175fe77 --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/sv.json @@ -0,0 +1,269 @@ +{ + "culture": "sv", + "texts": { + "Permission:CommunityPost": "Gemenskapens inlĂ€gg", + "Permission:Edit": "Redigera", + "Waiting": "VĂ€ntar pĂ„", + "Approved": "GodkĂ€nd", + "Rejected": "Avvisad", + "Wait": "VĂ€nta", + "Approve": "GodkĂ€nna", + "Reject": "Avvisa", + "ReadPost": "LĂ€s inlĂ€gget", + "Status": "Status", + "ContentSource": "KĂ€lla för innehĂ„ll", + "Details": "Detaljer", + "Title": "Titel", + "CreationTime": "Skapelsetid", + "Save": "Spara", + "SameUrlAlreadyExist": "Samma URL finns redan! Du mĂ„ste Ă€ndra webbadressen!", + "UrlIsNotValid": "Url Ă€r inte giltig.", + "UrlNotFound": "Url hittades inte.", + "UrlContentNotFound": "Url-innehĂ„llet hittades inte.", + "Summary": "Sammanfattning", + "MostRead": "Mest lĂ€st", + "Latest": "Senaste", + "ContributeAbpCommunity": "Bidra till ABP:s gemenskap", + "SubmitYourPost": "Skicka in ditt inlĂ€gg", + "ContributionGuide": "Bidragsguide", + "BugReport": "Bugg-rapport", + "SeeAllPosts": "Se alla inlĂ€gg", + "WelcomeToABP": "VĂ€lkommen till ABP", + "EmailNotValid": "VĂ€nligen ange en giltig e-postadress.", + "FeatureRequest": "BegĂ€ran om funktion", + "CreatePostTitleInfo": "Titel pĂ„ det inlĂ€gg som ska visas i inlĂ€ggslistan.", + "CreatePostSummaryInfo": "En kort sammanfattning av inlĂ€gget som ska visas i inlĂ€ggslistan. Maximal lĂ€ngd: {0}", + "CreatePostCoverInfo": "För att skapa ett effektivt inlĂ€gg, lĂ€gg till ett omslagsfoto. Ladda upp bilder i bildförhĂ„llandet 16:9 för bĂ€sta visning.
Maximal filstorlek Ă€r 1MB.", + "ThisExtensionIsNotAllowed": "Denna förlĂ€ngning Ă€r inte tillĂ„ten.", + "TheFileIsTooLarge": "Filen Ă€r för stor.", + "GoToThePost": "GĂ„ till inlĂ€gget", + "GoToTheVideo": "GĂ„ till videon", + "Contribute": "Bidra", + "OverallProgress": "Övergripande framsteg", + "Done": "Klar", + "Open": "Öppna", + "Closed": "StĂ€ngt", + "RecentQuestionFrom": "Senaste frĂ„gan frĂ„n {0}", + "Stackoverflow": "Stackoverflow", + "Votes": "röster", + "Answer": "Svar", + "Views": "utsikt", + "Answered": "Besvarad", + "WaitingForYourAnswer": "VĂ€ntar pĂ„ ditt svar", + "Asked": "aska", + "AllQuestions": "Alla frĂ„gor", + "NextVersion": "NĂ€sta version", + "MilestoneErrorMessage": "Det gick inte att fĂ„ aktuell milstolpsinformation frĂ„n Github.", + "QuestionItemErrorMessage": "Kunde inte fĂ„ de senaste frĂ„geuppgifterna frĂ„n Stackoverflow.", + "Oops": "Oops!", + "CreatePostSuccessMessage": "Ditt inlĂ€gg har skickats in med framgĂ„ng. Det kommer att publiceras efter granskning av webbplatsadministratören.", + "Browse": "BlĂ€ddra", + "CoverImage": "Omslagsbild", + "ShareYourExperiencesWithTheABPFramework": "Dela dina erfarenheter av ABP-ramverket!", + "Optional": "Valfritt", + "UpdateUserWebSiteInfo": "Exempel: https://johndoe.com", + "UpdateUserTwitterInfo": "Exempel: johndoe", + "UpdateUserGithubInfo": "Exempel: johndoe", + "UpdateUserLinkedinInfo": "Exempel: https://www.linkedin.com/...", + "UpdateUserCompanyInfo": "Exempel: Volosoft", + "UpdateUserJobTitleInfo": "Exempel: Programvaruutvecklare", + "UserName": "AnvĂ€ndarnamn", + "Company": "Företag", + "PersonalWebsite": "Personlig webbplats", + "RegistrationDate": "Registreringsdatum", + "Social": "Sociala", + "Biography": "Biografi", + "HasNoPublishedPostsYet": "har inga publicerade inlĂ€gg Ă€nnu", + "Author": "Författaren", + "LatestGithubAnnouncements": "Senaste Github-tillkĂ€nnagivanden", + "SeeAllAnnouncements": "Se alla tillkĂ€nnagivanden", + "LatestBlogPost": "Senaste blogginlĂ€gget", + "Edit": "Redigera", + "ProfileImageChange": "Ändra profilbilden", + "BlogItemErrorMessage": "Kunde inte fĂ„ den senaste informationen om blogginlĂ€gg frĂ„n ABP.", + "PlannedReleaseDate": "Planerat utgivningsdatum", + "CommunityPostRequestErrorMessage": "Det gick inte att fĂ„ den senaste postförfrĂ„gan frĂ„n Github.", + "PostRequestFromGithubIssue": "Det finns inga postförfrĂ„gningar nu.", + "LatestPosts": "Senaste inlĂ€gg", + "ArticleRequests": "BegĂ€r ett innehĂ„ll", + "ArticleRequestsDescription": "Vill du se ett specifikt innehĂ„ll hĂ€r? Du kan be communityn att skapa det!", + "LatestContentRequests": "Senaste förfrĂ„gningar om innehĂ„ll", + "AllPostRequests": "Se alla postförfrĂ„gningar", + "SubscribeToTheNewsletter": "Prenumerera pĂ„ nyhetsbrevet", + "NewsletterEmailDefinition": "FĂ„ information om vad som hĂ€nder i ABP, t.ex. nya utgĂ„vor, fria kĂ€llor, inlĂ€gg och mycket mer.", + "NoThanks": "Nej, tack.", + "MaybeLater": "Kanske senare", + "JoinOurPostNewsletter": "AnmĂ€l dig till vĂ„rt nyhetsbrev", + "Community": "Gemenskap", + "Marketing": "Marknadsföring", + "CommunityPrivacyPolicyConfirmation": "Jag godkĂ€nner de allmĂ€nna villkoren och Integritetspolicy.", + "PostRequestMessageTitle": "Öppna en frĂ„ga pĂ„ GitHub för att begĂ€ra ett inlĂ€gg / en handledning som du vill se pĂ„ den hĂ€r webbplatsen.", + "PostRequestMessageBody": "HĂ€r Ă€r en lista över de inlĂ€gg som efterfrĂ„gats av communityn. Vill du skriva ett efterfrĂ„gat inlĂ€gg? Klicka pĂ„ önskemĂ„let och delta i diskussionen.", + "Language": "SprĂ„k", + "CreatePostLanguageInfo": "SprĂ„ket för inlĂ€ggets innehĂ„ll.", + "VideoPost": "VideoinlĂ€gg", + "Post": "Post", + "Read": "LĂ€s", + "CreateGithubPostUrlInfo": "FullstĂ€ndig URL till Markdown-filen pĂ„ GitHub (exempel).", + "CreateVideoContentUrlInfo": "InlĂ€ggets ursprungliga URL pĂ„ Youtube.", + "CreateExternalPostUrlInfo": "InlĂ€ggets ursprungliga externa webbadress.", + "VideoContentForm": "Skicka in video pĂ„ YouTube", + "GithubPostForm": "Skicka inlĂ€gg pĂ„ GitHub", + "ExternalPostForm": "Skicka in ett externt innehĂ„ll", + "HowToPost": "Hur postar jag?", + "Posts": "InlĂ€gg", + "VideoUrl": "Video webbadress", + "GithubPostUrl": "Url för GitHub-post", + "ExternalPostUrl": "Url för externt inlĂ€gg", + "ThankYouForContribution": "Tack för att du bidrar till ABP Community. Vi tar gĂ€rna emot artiklar och videohandledning om ABP Framework, .NET, ASP.NET Core och allmĂ€nna Ă€mnen inom programvaruutveckling.", + "GithubPost": "GitHub-inlĂ€gg", + "GithubPostSubmitStepOne": "1. Skriv ett inlĂ€gg pĂ„ ett offentligt GitHub-arkiv med Markdown-formatet. exempel", + "GithubPostSubmitStepTwo": "2. Skicka in din URL till inlĂ€gget med hjĂ€lp av formulĂ€ret.", + "GithubPostSubmitStepThree": "3. Ditt inlĂ€gg kommer att Ă„terges pĂ„ denna webbplats.", + "YoutubeVideo": "Youtube-video", + "YoutubeVideoSubmitStepOne": "1. Publicera din video pĂ„ YouTube.", + "YoutubeVideoSubmitStepTwo": "2. Skicka in video-URL:en med hjĂ€lp av formulĂ€ret.", + "YoutubeVideoSubmitStepThree": "3. Besökare kommer att kunna titta pĂ„ ditt videoinnehĂ„ll direkt pĂ„ denna webbplats.", + "ExternalContent": "Externt innehĂ„ll", + "ExternalContentSubmitStepOne": "1. Skapa innehĂ„ll pĂ„ en publik plattform (Medium, din egen blogg eller var du vill).", + "ExternalContentSubmitStepTwo": "2. Skicka in URL:en för ditt innehĂ„ll med hjĂ€lp av formulĂ€ret.", + "ExternalContentSubmitStepThree": "3. Besökare omdirigeras till innehĂ„llet pĂ„ den ursprungliga webbplatsen.", + "ChooseYourContentType": "VĂ€lj det sĂ€tt som du vill lĂ€gga till ditt innehĂ„ll pĂ„.", + "PostContentViaGithub": "Jag vill lĂ€gga till mitt inlĂ€gg med GitHub i enlighet med markdown-reglerna.", + "PostContentViaYoutube": "Jag vill dela mina videor som finns pĂ„ Youtube hĂ€r.", + "PostContentViaExternalSource": "Jag vill lĂ€gga till det innehĂ„ll jag publicerade pĂ„ en annan plattform hĂ€r.", + "GitHubUserNameValidationMessage": "Ditt Github-anvĂ€ndarnamn kan inte innehĂ„lla blanksteg, kontrollera att ditt Github-anvĂ€ndarnamn Ă€r korrekt.", + "PersonalSiteUrlValidationMessage": "URL:en till din personliga webbplats fĂ„r inte innehĂ„lla blanksteg, kontrollera att URL:en till din personliga webbplats Ă€r korrekt.", + "TwitterUserNameValidationMessage": "Ditt Twitter-anvĂ€ndarnamn fĂ„r inte innehĂ„lla blanksteg, kontrollera att ditt Twitter-anvĂ€ndarnamn Ă€r korrekt.", + "LinkedinUrlValidationMessage": "Din LinkedIn-URL fĂ„r inte innehĂ„lla blanksteg, kontrollera att din LinkedIn-URL Ă€r korrekt.", + "NoPostsFound": "Inga inlĂ€gg hittades!", + "SearchInPosts": "Sök i inlĂ€gg...", + "MinimumSearchContent": "Du mĂ„ste ange minst 3 tecken!", + "Volo.AbpIo.Domain:060001": "KĂ€llans URL(\"{PostUrl}\") Ă€r inte Github URL", + "Volo.AbpIo.Domain:060002": "InlĂ€ggets innehĂ„ll Ă€r inte tillgĂ€ngligt frĂ„n GitHub(\"{PostUrl}\")-resursen.", + "Volo.AbpIo.Domain:060003": "Inget innehĂ„ll i inlĂ€gget hittades!", + "SeeMore": "Se mer", + "JoinTheABPCommunity": "GĂ„ med i ABP:s gemenskap", + "ABPCommunityTalks": "ABP:s samtal med allmĂ€nheten", + "LiveDemo": "Live Demo", + "GetLicense": "Skaffa licens", + "GetStarted": "Kom igĂ„ng", + "SourceCode": "KĂ€llkod", + "LeaveComment": "LĂ€mna kommentar", + "ShowMore": "Visa mer", + "NoPublishedPostsYet": "Inga publicerade inlĂ€gg Ă€nnu.", + "Name": "Namn", + "Surname": "Efternamn", + "WebSite": "Webbplats", + "FullURL": "Full URL", + "JobTitle": "Befattning", + "Prev": "Före", + "Previous": "FöregĂ„ende", + "Next": "NĂ€sta", + "Share": "Aktie", + "SortBy": "Sortera efter", + "NoPublishedEventsYet": "Inga publicerade hĂ€ndelser Ă€nnu.", + "SubscribeYoutubeChannel": "Prenumerera pĂ„ Youtube-kanalen", + "Enum:EventType:0": "Samtal", + "MemberNotPublishedPostYet": "Denna medlem har inte publicerat nĂ„gra inlĂ€gg Ă€nnu.", + "TimeAgo": "för {0} sedan", + "Discord_Page_JoinCommunityMessage": "GĂ„ med i ABP Discord Community", + "Discord_Page_Announce": "Vi Ă€r glada att kunna presentera ABP Community Discord Server!", + "Discord_Page_Description_1": "ABP Community har vuxit sedan dag ett. Vi ville ta det till nĂ€sta steg genom att skapa en officiell ABP Discord-server sĂ„ att ABP-communityn kan interagera med varandra med hjĂ€lp av underverk som snabbmeddelanden.", + "Discord_Page_Description_2": "ABP Community Discord Server Ă€r platsen dĂ€r du kan visa upp dina skapelser med ABP Framework, dela de tips som fungerade för dig, fĂ„ de senaste nyheterna och tillkĂ€nnagivandena om ABP Framework, bara chatta med medlemmar i samhĂ€llet för att utbyta idĂ©er och ha kul!", + "Discord_Page_Description_3": "Denna ABP Community Discord Server Ă€r den officiella med ABP Core Team nĂ€rvarande pĂ„ servern för att övervaka.", + "Discord_Page_JoinToServer": "GĂ„ med i ABP Discord Server", + "Events_Page_MetaTitle": "ABP:s evenemang för allmĂ€nheten", + "Events_Page_MetaDescription": "Live-showerna, som leds av ABP-teamet, Ă€r avslappnade sessioner fulla av community-innehĂ„ll, demonstrationer, frĂ„gor och svar och diskussioner om vad som hĂ€nder i ABP.", + "Events_Page_Title": "ABP Community Samtal", + "Members_Page_WritingFromUser": "LĂ€s skrivning frĂ„n {0} pĂ„ ABP Community.", + "Post_Create_Page_MetaTitle": "Ny post", + "Post_Create_Page_MetaDescription": "Skapa ditt inlĂ€gg för att dela med dig av dina erfarenheter om ABP-ramverket och bidra till ABP-communityn.", + "Post_Create_Page_CreateNewPost": "Skapa nytt inlĂ€gg", + "Post_Index_Page_MetaDescription": "ABP Communitys syfte Ă€r att skapa en bidragsmiljö för utvecklare som anvĂ€nder ABP-ramverket.", + "Layout_Title": "{0} | ABP Gemenskap", + "Layout_MetaDescription": "Ett nav för ABP Framework, .NET och programvaruutveckling. FĂ„ tillgĂ„ng till artiklar, handledning, nyheter och bidra till ABP-communityn.", + "Index_Page_CommunityIntroduction": "Detta Ă€r ett nav för ABP Framework, .NET och programvaruutveckling. Du kan lĂ€sa artiklarna, titta pĂ„ videohandledningarna, fĂ„ information om ABP:s utvecklingsframsteg och ABP-relaterade evenemang, hjĂ€lpa andra utvecklare och dela med dig av din expertis till ABP-communityn.", + "TagsInArticle": "Taggar i artikel", + "IConsentToMedium": "Jag samtycker till publicering av detta inlĂ€gg pĂ„ https://medium.com/volosoft.", + "SearchResultsFor": "Sökresultat för \"{0}\"", + "SeeMoreVideos": "Se fler videor", + "DiscordPageTitle": "ABP Discord Gemenskap", + "ViewVideo": "Visa video", + "AbpCommunityTitleContent": "ABP Community - ABP-ramverk med öppen kĂ€llkod", + "CommunitySlogan": "En unik community-plattform för ABP-Ă€lskare.", + "RaffleIsNotActive": "Lottdragningen Ă€r inte aktiv", + "YouAreAlreadyJoinedToThisRaffle": "Du Ă€r redan med i utlottningen!", + "InvalidSubscriptionCode": "Ogiltig prenumerationskod", + "Raffle:{0}": "Lottdragning: {0}", + "Join": "GĂ„ med", + "Leave": "LĂ€mna", + "LoginToJoin": "Logga in för att gĂ„ med", + "ToEnd:": "För att avsluta:", + "ToStart:": "Det Ă€r en början:", + "days": "dagar", + "hrs": "timmar", + "min": "min", + "sec": "sek", + "Winners": "Vinnare", + "To{0}LuckyWinners": "till {0} lyckliga vinnare", + "ActiveRaffles": "Aktiva Rafflar.", + "UpcomingRaffles": "Kommande Rafflar", + "CompletedRaffles": "FĂ€rdigstĂ€llda Rafflar", + "NoActiveRaffleTitle": "Ingen aktiv utlottning Ă€r tillgĂ€nglig för tillfĂ€llet.", + "NoActiveRaffleDescription": "Ingen aktiv utlottning Ă€r tillgĂ€nglig för tillfĂ€llet.", + "RaffleSubscriptionCodeInputMessage": "Denna utlottning krĂ€ver en registreringskod. VĂ€nligen ange registreringskoden nedan:", + "RaffleSubscriptionCodeInputErrorMessage": "Registreringskoden Ă€r felaktig. VĂ€nligen försök igen.", + "GoodJob!": "Bra jobbat!", + "RaffleJoinSuccessMessage": "Du Ă€r nu registrerad för utlottningen. Du kommer att informeras via e-post om du vinner priset!", + "RaffleLoginAndRegisterMessage": "Du mĂ„ste logga in för att delta i utlottningen! Om du inte har registrerat dig Ă€nnu kan du skapa ett konto gratis nu.", + "Ok": "Ok", + "SeeDetails": "Se detaljer", + "WaitingForTheDraw": "VĂ€nta pĂ„ dragningen!", + "AllAttendees": "Alla deltagare", + "SeeRaffleDetail": "Se Raffle detalj", + "SeeRaffle": "Se Raffle", + "ParticipationIsComplete": "Deltagandet Ă€r fullstĂ€ndigt.", + "ABPCoreDevelopmentTeam": "ABP Core utvecklingsteam", + "RegisterTheEvent": "Registrera evenemanget", + "GoToConferencePage": "GĂ„ till konferenssidan", + "BuyTicket": "Buy Ticket", + "SeeEvent": "Se evenemang", + "PreviousEvents": "Tidigare evenemang", + "OtherLiveEvents": "Andra live-evenemang", + "SponsoredConferences": "Sponsrade konferenser", + "SponsoredConferencesDescription": "Vi Ă€r stolta över att stödja .NET-communities och evenemang för programvaruutvecklare.", + "UpcomingEvents": "Kommande evenemang", + "UpcomingCommunityTalkEventDescription": "Live-showerna, som leds av ABP-teamet, Ă€r avslappnade sessioner fulla av community-innehĂ„ll, demonstrationer, frĂ„gor och svar och diskussioner om vad som hĂ€nder i ABP.", + "UpcomingConferenceEventDescription": "ABP .NET Conference Ă€r ett virtuellt evenemang för .NET-utvecklare dĂ€r de kan trĂ€ffas och lyssna pĂ„ föredrag om .NET-vĂ€rlden, vanliga metoder för programvaruutveckling och ABP Framework med öppen kĂ€llkod.", + "LastOneYear": "Senaste 1 Ă„ret", + "AllTimes": "Alla tider", + "TopContributors": "De största bidragsgivarna", + "{0}Posts": "{0} InlĂ€gg", + "LATESTPOSTS": "SENASTE INLÄGGNINGAR", + "NoContributorsFound": "Inga bidragsgivare hittades!", + "LatestPost": "Senaste inlĂ€gget", + "MEMBERSINCE{0}": "MEDLEM EFTERSOM {0}", + "CopyLink": "Kopiera lĂ€nk", + "ShareOnTwitter": "Dela pĂ„ Twitter", + "ShareOnLinkedIn": "Dela pĂ„ LinkedIn", + "MoreFrom{0}": "Mer frĂ„n {0}", + "SeeAllFrom{0}": "Se alla frĂ„n {0}", + "MostWatched": "Mest bevakade", + "Articles({0})": "Artiklar ({0})", + "Videos({0})": "Videor ({0})", + "LatestArticles": "Senaste artiklar", + "RaffleHeader": "Hej ABP Community Member!", + "RafflesInfo": "
Det hÀr Àr utlottningssidan som Àr avsedd att visa vÄr uppskattning för att du Àr en aktiv gemenskapsmedlem. Vi gör ABP Community Talks ,ABP .NET Conference, deltar eller sponsrar .NET-relaterade evenemang dÀr vi ger bort nÄgra gÄvor.

Du kan följa den hÀr sidan för att se kommande lotterier, delta i dem eller se tidigare lotterier som vi dragit inklusive vinnarna.

Tack för att du Ă€r en aktiv medlem! Vi ses i de kommande lotterierna.", + "RafflesInfoTitle": "ABP Community Rafflar.", + "ToLuckyWinner": "till 1 lycklig vinnare", + "MarkdownSupported": "Stöd för Markdown.", + "Preview": "Förhandsgranskning", + "VisitPage": "Besök sidan", + "VisitVideoCourseDescription": "Om du vill lĂ€ra dig grunderna i ABP-ramverket kan du kolla in videokurserna ABP Essentials.", + "EditProfile": "Redigera profil", + "ConfirmEmailForPost": "För att kunna göra inlĂ€gg mĂ„ste du bekrĂ€fta din e-post. GĂ„ till account.abp.io/Account/Manage och verifiera din e-postadress under fliken Personal Info.", + "DailyPostCreateLimitation": "Du har nĂ„tt den dagliga grĂ€nsen för skapande av inlĂ€gg. Du kan skapa ett nytt inlĂ€gg i {0}.", + "YourAccountDisabled": "Ditt anvĂ€ndarkonto Ă€r inaktiverat!" + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/tr.json index 711d068087..8d42d61eb0 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/tr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/tr.json @@ -244,6 +244,9 @@ "BuyTicket": "Bilet al", "SeeEvent": "Etkinliği Gör", "Cancel": "Vazgeç", - "Continue": "Devam" + "Continue": "Devam", + "ConfirmEmailForPost": "Gönderi paylaßabilmek için e-posta adresinizi onaylamanız gerekir. account.abp.io/Account/Manage adresine gidin ve Kißisel Bilgiler sekmesinden e-posta adresinizi doğrulayın.", + "DailyPostCreateLimitation": "GĂŒnlĂŒk gönderi paylaßma sınırına ulaßtınız. {0}'da yeni bir gönderi paylaßabilirsiniz.", + "YourAccountDisabled": "Kullanıcı hesabınız devre dıßı bırakıldı!" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/vi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/vi.json index bd6baa67bb..4ca0c8ca49 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/vi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/vi.json @@ -259,6 +259,8 @@ "MarkdownSupported": "Markdown Ä‘Æ°á»Łc hỗ trợ.", "Preview": "Xem trước", "VisitPage": "GhĂ© thăm trang", - "VisitVideoCourseDescription": "Náșżu báșĄn muốn tĂŹm hiểu những kiáșżn ​​thức cÆĄ báșŁn về Khung ABP, hĂŁy xem cĂĄc khĂła học Video CÆĄ báșŁn về ABP." + "VisitVideoCourseDescription": "Náșżu báșĄn muốn tĂŹm hiểu những kiáșżn ​​thức cÆĄ báșŁn về Khung ABP, hĂŁy xem cĂĄc khĂła học Video CÆĄ báșŁn về ABP.", + "ConfirmEmailForPost": "Để cĂł thể đăng bĂ i, báșĄn cáș§n xĂĄc nháș­n email cá»§a mĂŹnh. HĂŁy truy cáș­p account.abp.io/Account/QuáșŁn lĂœ vĂ  xĂĄc minh email cá»§a báșĄn trong tab ThĂŽng tin cĂĄ nhĂąn.", + "DailyPostCreateLimitation": "BáșĄn đã đáșĄt đáșżn giới háșĄn táșĄo bĂ i đăng hĂ ng ngĂ y. BáșĄn cĂł thể táșĄo bĂ i đăng mới trong {0}." } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/zh-Hans.json index 2bf0e9fb50..c6ef5a2c3d 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/zh-Hans.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/zh-Hans.json @@ -259,6 +259,8 @@ "MarkdownSupported": "Markdown æ”ŻæŒçš„ă€‚", "Preview": "éą„è§ˆ", "VisitPage": "èźżé—źéĄ”éą", - "VisitVideoCourseDescription": "ćŠ‚æžœæ‚šæƒłć­Šäč  ABP æĄ†æž¶çš„ćŸșçĄ€çŸ„èŻ†ïŒŒèŻ·æŸ„çœ‹ ABP Essentials è§†éą‘èŻŸçš‹ă€‚" + "VisitVideoCourseDescription": "ćŠ‚æžœæ‚šæƒłć­Šäč  ABP æĄ†æž¶çš„ćŸșçĄ€çŸ„èŻ†ïŒŒèŻ·æŸ„çœ‹ ABP Essentials è§†éą‘èŻŸçš‹ă€‚", + "ConfirmEmailForPost": "äžșäș†èƒœć€Ÿć‘ćž–ïŒŒæ‚šéœ€èŠçĄźèź€æ‚šçš„ç””ć­é‚źä»¶ă€‚èœŹćˆ° account.abp.io/Account/Manage ćč¶ćœšâ€œäžȘäșșäżĄæŻâ€é€‰éĄč捡侭éȘŒèŻæ‚šçš„ç””ć­é‚źä»¶ă€‚", + "DailyPostCreateLimitation": "悚ć·ČèŸŸćˆ°æŻæ—„ćž–ć­ćˆ›ć»șé™ćˆ¶ă€‚æ‚šćŻä»„ćœš {0} 侭戛ć»șæ–°ćž–ć­ă€‚" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/zh-Hant.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/zh-Hant.json index 61bb0aa8a0..b72c927296 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/zh-Hant.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/zh-Hant.json @@ -259,6 +259,8 @@ "MarkdownSupported": "Markdown æ”ŻæŒçš„ă€‚", "Preview": "éą„è§ˆ", "VisitPage": "èźżé—źéĄ”éą", - "VisitVideoCourseDescription": "ćŠ‚æžœæ‚šæƒłć­Šäč  ABP æĄ†æž¶çš„ćŸșçĄ€çŸ„èŻ†ïŒŒèŻ·æŸ„çœ‹ ABP Essentials è§†éą‘èŻŸçš‹ă€‚" + "VisitVideoCourseDescription": "ćŠ‚æžœæ‚šæƒłć­Šäč  ABP æĄ†æž¶çš„ćŸșçĄ€çŸ„èŻ†ïŒŒèŻ·æŸ„çœ‹ ABP Essentials è§†éą‘èŻŸçš‹ă€‚", + "ConfirmEmailForPost": "äžșäș†èƒœć€Ÿć‘ćž–ïŒŒæ‚šéœ€èŠçĄźèź€æ‚šçš„ç””ć­é‚źä»¶ă€‚èœŹćˆ° account.abp.io/Account/Manage ćč¶ćœšâ€œäžȘäșșäżĄæŻâ€é€‰éĄč捡侭éȘŒèŻæ‚šçš„ç””ć­é‚źä»¶ă€‚", + "DailyPostCreateLimitation": "悚ć·ČèŸŸćˆ°æŻæ—„ćž–ć­ćˆ›ć»șé™ćˆ¶ă€‚æ‚šćŻä»„ćœš {0} 侭戛ć»șæ–°ćž–ć­ă€‚" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/sv.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/sv.json new file mode 100644 index 0000000000..d24ece38ce --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/sv.json @@ -0,0 +1,9 @@ +{ + "culture": "sv", + "texts": { + "Buy": "Köp", + "SeeBookDetails": "Se bokdetaljer", + "MasteringAbpFrameworkEBookDescription": "Den hĂ€r boken hjĂ€lper dig att fĂ„ en fullstĂ€ndig förstĂ„else för ramverket och moderna tekniker för utveckling av webbapplikationer.", + "Feedback": "Återkoppling" + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Support/Localization/Resources/sv.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Support/Localization/Resources/sv.json new file mode 100644 index 0000000000..e39cf79f0e --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Support/Localization/Resources/sv.json @@ -0,0 +1,6 @@ +{ + "culture": "sv", + "texts": { + "FAQ": "VANLIGA FRÅGOR" + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sv.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sv.json new file mode 100644 index 0000000000..a26f21b66b --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sv.json @@ -0,0 +1,1828 @@ +{ + "culture": "sv", + "texts": { + "GetStarted": "Kom igĂ„ng", + "Create": "Skapa", + "NewProject": "Nytt projekt", + "DirectDownload": "Direkt nedladdning", + "ProjectName": "Projektets namn", + "ProjectType": "Typ av projekt", + "DatabaseProvider": "Databasleverantör", + "DatabaseManagementSystem": "System för databashantering", + "NTier": "N-djur", + "IncludeUserInterface": "Inkludera anvĂ€ndargrĂ€nssnitt", + "CreateNow": "Skapa nu", + "TheStartupProject": "Uppstartsprojektet", + "Tutorial": "Handledning", + "UsingCLI": "AnvĂ€nda CLI", + "SeeDetails": "Se detaljer", + "AbpShortDescription": "ABP Framework Ă€r en komplett infrastruktur för att skapa mjukvarulösningar med moderna arkitekturer baserade pĂ„ ASP.NET Core-plattformen.", + "SourceCodeUpper": "KÄLLKOD", + "LatestReleaseLogs": "Senaste versionens loggar", + "Infrastructure": "Infrastruktur", + "Architecture": "Arkitektur", + "Modular": "ModulĂ€r", + "DontRepeatYourself": "Upprepa inte dig sjĂ€lv", + "DeveloperFocused": "Fokus pĂ„ utvecklare", + "FullStackApplicationInfrastructure": "Full stack applikationsinfrastruktur.", + "DomainDrivenDesign": "DomĂ€nstyrd design", + "DomainDrivenDesignExplanation": "Designad och utvecklad utifrĂ„n DDD-mönster och principer. Ger en skiktad modell för din applikation.", + "Authorization": "Auktorisering", + "AuthorizationExplanation": "Avancerad auktorisering med anvĂ€ndare, roll och finkornigt behörighetssystem. Byggt pĂ„ Microsoft Identity-biblioteket.", + "MultiTenancy": "Multi-tenancy", + "MultiTenancyExplanationShort": "SaaS-applikationer pĂ„ ett enkelt sĂ€tt! Integrerad multi-tenancy frĂ„n databas till anvĂ€ndargrĂ€nssnitt.", + "CrossCuttingConcerns": "TvĂ€rgĂ„ende angelĂ€genheter", + "CrossCuttingConcernsExplanationShort": "Komplett infrastruktur för auktorisering, validering, undantagshantering, cachelagring, revisionsloggning, transaktionshantering med mera.", + "BuiltInBundlingMinification": "Inbyggd paketering och minimering", + "BuiltInBundlingMinificationExplanation": "Du behöver inte anvĂ€nda externa verktyg för paketering och minifiering. ABP erbjuder ett enklare, mer dynamiskt, kraftfullt, modulĂ€rt och inbyggt sĂ€tt!", + "VirtualFileSystem": "Virtuellt filsystem", + "VirtualFileSystemExplanation": "BĂ€dda in vyer, skript, stilar, bilder ... i paket/libraries och Ă„teranvĂ€nd dem i olika applikationer.", + "Theming": "Tematisering", + "ThemingExplanationShort": "AnvĂ€nd och anpassa det bootstrap-baserade standardgrĂ€nssnittstemat eller skapa ditt eget.", + "BootstrapTagHelpersDynamicForms": "Bootstrap-tagghjĂ€lpmedel och dynamiska formulĂ€r", + "BootstrapTagHelpersDynamicFormsExplanation": "IstĂ€llet för att manuellt skriva de upprepade detaljerna i bootstrap-komponenter, anvĂ€nd ABP:s tagghjĂ€lpmedel för att förenkla dem och dra nytta av IntelliSense. Bygg snabbt anvĂ€ndargrĂ€nssnittsformulĂ€r baserat pĂ„ en C#-modell med hjĂ€lp av tagghjĂ€lpen för dynamiska formulĂ€r.", + "HTTPAPIsDynamicProxies": "HTTP API:er och dynamiska proxyservrar", + "HTTPAPIsDynamicProxiesExplanation": "Exponera automatiskt applikationstjĂ€nster som HTTP API:er i REST-stil och anvĂ€nd dem med dynamiska JavaScript- och C#-proxyer.", + "CompleteArchitectureInfo": "Modern arkitektur för att skapa underhĂ„llsfria programvarulösningar.", + "DomainDrivenDesignBasedLayeringModelExplanation": "HjĂ€lper till att implementera en DDD-baserad skiktad arkitektur och bygga en underhĂ„llbar kodbas.", + "DomainDrivenDesignBasedLayeringModelExplanationCont": "TillhandahĂ„ller startmallar, abstraktioner, basklasser, tjĂ€nster, dokumentation och guider som hjĂ€lper dig att utveckla din applikation baserat pĂ„ DDD-mönster och -principer.", + "MicroserviceCompatibleModelExplanation": "KĂ€rnramverket och de förbyggda modulerna Ă€r utformade med mikrotjĂ€nstarkitektur i Ă„tanke.", + "MicroserviceCompatibleModelExplanationCont": "TillhandahĂ„ller infrastruktur, integrationer, exempel och dokumentation för att göra det enklare att implementera mikrotjĂ€nstlösningar, samtidigt som det inte medför ytterligare komplexitet om du vill ha en monolitisk applikation.", + "ModularInfo": "ABP tillhandahĂ„ller ett modulsystem som gör att du kan utveckla Ă„teranvĂ€ndbara applikationsmoduler, knyta an till hĂ€ndelser i applikationens livscykel och uttrycka beroenden mellan centrala delar av ditt system.", + "PreBuiltModulesThemes": "Förbyggda moduler och teman", + "PreBuiltModulesThemesExplanation": "Moduler och teman med öppen kĂ€llkod och kommersiella moduler Ă€r redo att anvĂ€ndas i din affĂ€rsapplikation.", + "NuGetNPMPackages": "NuGet- och NPM-paket", + "NuGetNPMPackagesExplanation": "Distribueras som NuGet- och NPM-paket. LĂ€tt att installera och uppgradera.", + "ExtensibleReplaceable": "Utdragbar/utbytbar", + "ExtensibleReplaceableExplanation": "Alla tjĂ€nster och moduler Ă€r utformade med tanke pĂ„ utbyggbarhet. Du kan byta ut tjĂ€nster, sidor, stilar och komponenter.", + "CrossCuttingConcernsExplanation2": "HĂ„ll din kodbas mindre sĂ„ att du kan behĂ„lla fokus pĂ„ den kod som Ă€r specifik för ditt företag.", + "CrossCuttingConcernsExplanation3": "LĂ€gg inte tid pĂ„ att implementera gemensamma applikationskrav i flera projekt.", + "AuthenticationAuthorization": "Autentisering och auktorisering", + "ExceptionHandling": "Hantering av undantag", + "Validation": "Validering", + "DatabaseConnection": "Databasanslutning", + "TransactionManagement": "Transaktionshantering", + "AuditLogging": "Loggning av revision", + "Caching": "Caching", + "Multitenancy": "Multitenancy", + "DataFiltering": "Filtrering av data", + "ConventionOverConfiguration": "Konvention över konfiguration", + "ConventionOverConfigurationExplanation": "ABP implementerar vanliga applikationskonventioner som standard med minimal eller ingen konfiguration.", + "ConventionOverConfigurationExplanationList1": "Auto-registrering av kĂ€nda tjĂ€nster för beroendeinjektion.", + "ConventionOverConfigurationExplanationList2": "Exponerar applikationstjĂ€nster som HTTP API:er med hjĂ€lp av namnkonventioner.", + "ConventionOverConfigurationExplanationList3": "Skapar dynamiska HTTP-klientproxyer för C# och JavaScript.", + "ConventionOverConfigurationExplanationList4": "TillhandahĂ„ller standardförvar för dina enheter.", + "ConventionOverConfigurationExplanationList5": "Hanterar arbetsenhet per webbförfrĂ„gan eller applikationstjĂ€nstmetod.", + "ConventionOverConfigurationExplanationList6": "Publicerar skapa, uppdatera och ta bort hĂ€ndelser för dina enheter.", + "BaseClasses": "Basklasser", + "BaseClassesExplanation": "Förbyggda basklasser för vanliga applikationsmönster.", + "DeveloperFocusedExplanation": "ABP Ă€r till för utvecklare.", + "DeveloperFocusedExplanationCont": "Det syftar till att förenkla den dagliga programutvecklingen utan att hindra dig frĂ„n att skriva lĂ„gnivĂ„kod.", + "SeeAllFeatures": "Se alla funktioner", + "CLI_CommandLineInterface": "CLI (kommandoradsgrĂ€nssnitt)", + "CLI_CommandLineInterfaceExplanation": "InnehĂ„ller ett CLI som hjĂ€lper dig att automatisera skapandet av nya projekt och tillĂ€gg av nya moduler.", + "StartupTemplates": "Mallar för nystartade företag", + "StartupTemplatesExplanation": "ABP:s mall för applikationsstart ger en fullt konfigurerad lösning för att starta din utveckling.", + "BasedOnFamiliarTools": "Baserat pĂ„ vĂ€lkĂ€nda verktyg", + "BasedOnFamiliarToolsExplanation": "Byggd pĂ„ och integrerad med populĂ€ra verktyg som du redan kĂ€nner till. LĂ„g inlĂ€rningskurva, enkel anpassning, bekvĂ€m utveckling.", + "ORMIndependent": "ORM Oberoende", + "ORMIndependentExplanation": "KĂ€rnramverket Ă€r ORM/databasoberoende och kan fungera med alla datakĂ€llor. Entity Framework Core- och MongoDB-leverantörer finns redan tillgĂ€ngliga.", + "Features": "Utforska ABP-ramverkets funktioner", + "ABPCLI": "ABP CLI", + "Modularity": "Modularitet", + "BootstrapTagHelpers": "Bootstrap-taggarnas hjĂ€lpmedel", + "DynamicForms": "Dynamiska formulĂ€r", + "BundlingMinification": "Paketering och minimering", + "BackgroundJobs": "Bakgrundsjobb", + "BackgroundJobsExplanation": "Definiera enkla klasser för att utföra jobb i bakgrunden nĂ€r de stĂ„r i kö. AnvĂ€nd den inbyggda jobbhanteraren eller integrera din egen. Integrationer med Hangfire, RabbitMQ och Quartz Ă€r redan tillgĂ€ngliga.", + "DDDInfrastructure": "DDD Infrastruktur", + "DomainDrivenDesignInfrastructure": "DomĂ€nstyrd design Infrastruktur", + "AutoRESTAPIs": "Auto REST API:er", + "DynamicClientProxies": "Dynamiska klientproxyservrar", + "DistributedEventBus": "Distribuerad hĂ€ndelsebuss", + "DistributedEventBusWithRabbitMQIntegration": "Distribuerad hĂ€ndelsebuss med RabbitMQ-integration", + "TestInfrastructure": "Testinfrastruktur", + "AuditLoggingEntityHistories": "Audit Logging & Entity Histories", + "ObjectToObjectMapping": "Mappning av objekt till objekt", + "ObjectToObjectMappingExplanation": "Objekt-till-objekt-mappning abstraktion med AutoMapper-integration.", + "EmailSMSAbstractions": "E-post- och SMS-abstraktioner", + "EmailSMSAbstractionsWithTemplatingSupport": "E-post- och SMS-abstraktioner med stöd för templating", + "Localization": "Lokalisering", + "SettingManagement": "InstĂ€llning Management", + "ExtensionMethods": "Metoder för förlĂ€ngning", + "ExtensionMethodsHelpers": "Metoder och hjĂ€lpmedel för förlĂ€ngning", + "AspectOrientedProgramming": "Aspektorienterad programmering", + "DependencyInjection": "Injektion av beroenden", + "DependencyInjectionByConventions": "Dependency Injection enligt konventioner", + "ModularityExplanation": "ABP tillhandahĂ„ller en komplett infrastruktur för att bygga dina egna applikationsmoduler som kan innehĂ„lla enheter, tjĂ€nster, databasintegration, API:er, UI-komponenter och sĂ„ vidare.", + "MultiTenancyExplanation": "ABP stöder inte bara utveckling av applikationer med flera hyresgĂ€ster, utan gör ocksĂ„ din kod mestadels omedveten om flera hyresgĂ€ster.", + "MultiTenancyExplanation2": "Kan automatiskt bestĂ€mma den aktuella hyresgĂ€sten, isolera data frĂ„n olika hyresgĂ€ster frĂ„n varandra.", + "MultiTenancyExplanation3": "Stöd för en enda databas, databas per klient och hybridmetoder.", + "MultiTenancyExplanation4": "Du fokuserar pĂ„ din affĂ€rskod och lĂ„ter ramverket hantera multi-tenancy för din rĂ€kning.", + "BootstrapTagHelpersExplanation": "IstĂ€llet för att manuellt skriva de upprepande detaljerna i bootstrap-komponenterna, anvĂ€nd ABP:s tagghjĂ€lpmedel för att förenkla det och dra nytta av IntelliSense. Du kan anvĂ€nda Bootstrap direkt nĂ€r du behöver det.", + "DynamicFormsExplanation": "Dynamiska formulĂ€r- och inmatningstagghjĂ€lpmedel kan skapa ett komplett formulĂ€r frĂ„n en C#-klass som modell.", + "AuthenticationAuthorizationExplanation": "Rika autentiserings- och auktoriseringsalternativ integrerade med ASP.NET Core Identity & OpenIddict. TillhandahĂ„ller ett utbyggbart och detaljerat behörighetssystem.", + "CrossCuttingConcernsExplanation": "Upprepa inte dig sjĂ€lv för att implementera alla dessa vanliga saker om och om igen. Fokusera pĂ„ din affĂ€rskod och lĂ„t ABP automatisera dem genom konventioner.", + "DatabaseConnectionTransactionManagement": "Databasanslutning och transaktionshantering", + "CorrelationIdTracking": "SpĂ„rning av korrelation-Id", + "BundlingMinificationExplanation": "ABP erbjuder ett enkelt, dynamiskt, kraftfullt, modulĂ€rt och inbyggt system för paketering och minifiering.", + "VirtualFileSystemnExplanation": "Det virtuella filsystemet gör det möjligt att hantera filer som inte fysiskt finns i filsystemet (disken). Det anvĂ€nds frĂ€mst för att bĂ€dda in (js, css, image, cshtml...) filer i assemblies och anvĂ€nda dem som fysiska filer vid körning.", + "ThemingExplanation": "Theming-systemet gör det möjligt att utveckla dina applikationer och moduler tematiskt oberoende genom att definiera en uppsĂ€ttning gemensamma basbibliotek och layouter, baserade pĂ„ det senaste Bootstrap-ramverket.", + "DomainDrivenDesignInfrastructureExplanation": "En komplett infrastruktur för att bygga applikationer i flera lager baserat pĂ„ mönster och principer för domĂ€ndriven design;", + "Specification": "Specifikation", + "Repository": "Förvar", + "DomainService": "DomĂ€nservice", + "ValueObject": "VĂ€rdeobjekt", + "ApplicationService": "ApplikationstjĂ€nst", + "DataTransferObject": "Dataöverföringsobjekt", + "AggregateRootEntity": "Aggregerad rot, enhet", + "AutoRESTAPIsExplanation": "ABP kan automatiskt konfigurera dina applikationstjĂ€nster som API-controllers enligt konvention.", + "DynamicClientProxiesExplanation": "AnvĂ€nd enkelt dina API:er frĂ„n JavaScript- och C#-klienter.", + "DistributedEventBusWithRabbitMQIntegrationExplanation": "Publicera och konsumera enkelt distribuerade hĂ€ndelser med hjĂ€lp av den inbyggda Distributed Event Bus med RabbitMQ-integration.", + "TestInfrastructureExplanation": "Ramverket har utvecklats med enhets- och integrationstestning i Ă„tanke. Ger dig basklasser för att göra det enklare. Startmallar kommer förkonfigurerade för testning.", + "AuditLoggingEntityHistoriesExplanation": "Inbyggd revisionsloggning för affĂ€rskritiska applikationer. Granskningsloggning pĂ„ förfrĂ„gnings-, tjĂ€nste- och metodnivĂ„ samt entitetshistorik med detaljer pĂ„ egenskapsnivĂ„.", + "EmailSMSAbstractionsWithTemplatingSupportExplanation": "IEmailSender- och ISmsSender-abstraktionerna frikopplar din applikationslogik frĂ„n infrastrukturen. Avancerat e-postmallsystem gör det möjligt att skapa och lokalisera e-postmallar och enkelt anvĂ€nda dem nĂ€r det behövs.", + "LocalizationExplanation": "Lokaliseringssystemet gör det möjligt att skapa resurser i vanliga JSON-filer och anvĂ€nda dem för att lokalisera ditt anvĂ€ndargrĂ€nssnitt. Det stöder avancerade scenarier som arv, tillĂ€gg och JavaScript-integration samtidigt som det Ă€r helt kompatibelt med AspNet Core's lokaliseringssystem.", + "SettingManagementExplanation": "Definiera instĂ€llningar för din applikation och hĂ€mta vĂ€rdena i körtid baserat pĂ„ aktuell konfiguration, klient och anvĂ€ndare.", + "ExtensionMethodsHelpersExplanation": "Upprepa inte dig sjĂ€lv ens för triviala koddelar. Extensions & helpers för standardtyper gör din kod mycket renare och lĂ€ttare att skriva.", + "AspectOrientedProgrammingExplanation": "Ger en bekvĂ€m infrastruktur för att skapa dynamiska proxies och implementera aspektorienterad programmering. FĂ„nga upp valfri klass och kör din kod före och efter varje metodkörning.", + "DependencyInjectionByConventionsExplanation": "Du behöver inte registrera dina klasser för dependency injection manuellt. Registrerar automatiskt vanliga tjĂ€nstetyper enligt konvention. För andra typer av tjĂ€nster kan du anvĂ€nda grĂ€nssnitt och attribut för att göra det enklare och pĂ„ plats.", + "DataFilteringExplanation": "Definiera och anvĂ€nd datafilter som tillĂ€mpas automatiskt nĂ€r du söker efter enheter i databasen. Soft Delete & MultiTenant-filter tillhandahĂ„lls direkt nĂ€r du implementerar enkla grĂ€nssnitt.", + "PublishEvents": "Publicera evenemang", + "HandleEvents": "Hantera hĂ€ndelser", + "Code": "Kod", + "Result": "Resultat", + "SeeTheDocumentForMoreInformation": "Kolla in {0} dokumentet för mer information", + "UiFramework": "Ramverk för anvĂ€ndargrĂ€nssnitt", + "EmailAddress": "E-postadress", + "Mobile": "Mobil", + "ReactNative": "React Native", + "Strong": "Stark", + "Complete": "Komplett", + "BasedLayeringModel": "Baserad skiktningsmodell", + "Microservice": "Mikroservice", + "Compatible": "Kompatibel", + "MeeTTheABPCommunityInfo": "VĂ„rt uppdrag Ă€r att skapa en miljö dĂ€r utvecklare kan hjĂ€lpa varandra med inlĂ€gg, handledning, fallstudier etc. och trĂ€ffa likasinnade.", + "JoinTheABPCommunityInfo": "Engagera dig i en livlig gemenskap och bli en bidragsgivare till ABP-ramverket!", + "AllPosts": "Alla inlĂ€gg", + "SubmitYourPost": "Skicka in ditt inlĂ€gg", + "DynamicClientProxyDocument": "Kolla in dokumentationen för dynamisk klientproxy för JavaScript & C#.", + "EmailSMSAbstractionsDocument": "Mer information finns i dokumenten E-post och SMS-sĂ€ndning.", + "CreateProjectWizard": "Den hĂ€r guiden skapar ett nytt projekt frĂ„n startmallen som Ă€r korrekt konfigurerad för att starta upp ditt projekt.", + "TieredOption": "Skapar en skiktad lösning dĂ€r webb- och Http API-skikten Ă€r fysiskt Ă„tskilda. Om det inte Ă€r markerat skapas en skiktad lösning som Ă€r mindre komplex och lĂ€mplig för de flesta scenarier.", + "SeparateIdentityServerOption": "Separerar serversidan i tvĂ„ applikationer: Den första Ă€r för identitetsservern och den andra Ă€r för ditt HTTP-API pĂ„ serversidan.", + "SeparateAuthenticationServerOption": "Separerar serversidan i tvĂ„ applikationer: Den första Ă€r för autentiseringsservern och den andra Ă€r för ditt HTTP-API pĂ„ serversidan.", + "ProgressiveWebApplicationOption": "Anger projektet som Progressive Web Application", + "UseslatestPreVersion": "AnvĂ€nder den senaste pre-release-versionen", + "ReadTheDocumentation": "LĂ€s dokumentationen", + "Documentation": "Dokumentation", + "GettingStartedTutorial": "Handledning för att komma igĂ„ng", + "ApplicationDevelopmentTutorial": "Handledning för applikationsutveckling", + "TheStartupTemplate": "Startmall för nystartade företag", + "InstallABPCLIInfo": "ABP CLI Ă€r det snabbaste sĂ€ttet att starta en ny lösning med ABP-ramverket. Installera ABP CLI med hjĂ€lp av ett kommandoradsfönster:", + "DifferentLevelOfNamespaces": "Du kan anvĂ€nda olika nivĂ„er av namnrymder; t.ex. BookStore, Acme.BookStore eller Acme.Retail.BookStore.", + "ABPCLIExamplesInfo": "Kommandot new skapar en lagrad MVC-applikation med Entity Framework Core som databasleverantör. Det har dock ytterligare alternativ.", + "SeeCliDocumentForMoreInformation": "Kolla in ABP CLI-dokumentet för fler alternativ eller vĂ€lj fliken \"Direkt nedladdning\" ovan.", + "Optional": "Valfritt", + "LocalFrameworkRef": "BehĂ„ll den lokala projektreferensen för ramverkspaketen.", + "BlobStoring": "BLOB Storing", + "BlobStoringExplanation": "BLOB-lagringssystemet ger en abstraktion för att arbeta med BLOB. ABP tillhandahĂ„ller nĂ„gra förbyggda lagringsleverantörsintegrationer (Azure, AWS, File System, Database, etc.) som du enkelt kan anvĂ€nda i dina applikationer.", + "TextTemplating": "Templating av text", + "TextTemplatingExplanation": "Textmallar anvĂ€nds för att dynamiskt Ă„terge innehĂ„ll baserat pĂ„ en mall och en modell (ett dataobjekt). Du kan t.ex. anvĂ€nda det för att skapa dynamiskt e-postinnehĂ„ll med en förbyggd mall.", + "MultipleUIOptions": "Flera alternativ för anvĂ€ndargrĂ€nssnitt", + "MultipleDBOptions": "Flera databasleverantörer", + "MultipleDBOptionsExplanation": "Ramverket kan anvĂ€ndas med alla datakĂ€llor, men följande leverantörer Ă€r officiellt utvecklade och stöds:", + "SelectLanguage": "VĂ€lj sprĂ„k", + "LatestPostOnCommunity": "Senaste inlĂ€gget pĂ„ ABP Community", + "Register": "Registrera", + "IsDownloadable": "Är nedladdningsbar", + "DatabaseOptions": "Alternativ för databas", + "BackToPackagesPage": "Tillbaka till sidan Paket", + "HowToInstall": "SĂ„ hĂ€r installerar du", + "SeeOnNpm": "Se pĂ„ NPM", + "SeeOnNuget": "Detta Ă€r Nuget", + "MVCGulpCommandExplanation": "Om du anvĂ€nder MVC (Razor Pages) UI, kör kommandot \"gulp\" efter installationen av paketet.", + "UsingABPCLI": "AnvĂ€nda Abp CLI", + "WithoutABPCLI": "Utan ABP CLI", + "ABPCLIModuleDependency": "Abp Cli lĂ€gger automatiskt till modulberoende.", + "AddModuleDependency": "LĂ€gg sedan till modulberoende", + "Packages": "Paket", + "NugetPackages": "Nuget-paket", + "NPMPackages": "NPM-paket", + "SeeDocs": "Se dokument", + "None": "Ingen", + "Application": "TillĂ€mpning", + "ApplicationExplanation": "Skapar en heltĂ€ckande lösning baserad pĂ„ metoder för domĂ€ndriven design. Rekommenderas för lĂ„ngsiktiga projekt som behöver en underhĂ„llbar och utbyggbar kodbas.", + "ApplicationNoLayer": "Applikation (enstaka lager)", + "ApplicationNoLayerExplanation": "Skapar en webbapplikation i ett lager. Rekommenderas för att bygga en applikation med en enklare och mer lĂ€ttförstĂ„elig arkitektur.", + "Module": "Modul", + "ModuleExplanation": "Skapar en Ă„teranvĂ€ndbar, helt skiktad applikationsmodullösning. Du kan anvĂ€nda det hĂ€r alternativet för att skapa moduler för din modulĂ€ra applikation.", + "PackageName": "Paketets namn", + "LicenseURL": "URL för licens", + "License": "Licens", + "ProjectCreationSuccessMessage": "Ditt projekt har skapats framgĂ„ngsrikt", + "HowToRunSolution": "Hur kör jag din lösning?", + "GettingStartedMessage": "I dokumentet Kom igĂ„ng kan du lĂ€sa om hur du konfigurerar och kör din lösning.", + "WebAppDevTutorial": "Handledning för utveckling av webbapplikationer", + "WebAppDevTutorialMessage": "I handledningsdokumentet för utveckling av webbapplikationer finns ett exempel pĂ„ utveckling steg för steg.", + "CommunityPosts": "InlĂ€gg frĂ„n gemenskapen", + "CommunityPostMessage": "Kolla in ABP Community Platform för att lĂ€sa anvĂ€ndbara inlĂ€gg för ABP Framework.", + "InvestigateSolutionDetails": "Kolla in lösningsdetaljerna", + "StartupTemplateDocumentationMessage": "Ta en titt pĂ„ malldokumentet för applikationsstart för att lĂ€ra dig arkitekturen och strukturen för din lösning.", + "ClientSideDevelopment": "Utveckling pĂ„ klientsidan", + "ClientSideDevelopmentDocumentationMessage": "Kolla in {0}-dokumentet för att lĂ€ra dig de viktigaste punkterna för utvecklingen av anvĂ€ndargrĂ€nssnittet (klientsidan).", + "DatabaseProviderDocumentationMessage": "Kolla in dokumentet {0} för att lĂ€ra dig de viktigaste punkterna för utvecklingen av databaslagret.", + "ImplementingDDD": "Implementering av domĂ€ndriven design", + "DDDBookExplanation": "En praktisk guide för implementering av domĂ€ndriven design med ABP-ramverket.", + "Overview": "Översikt", + "TableOfContents": "InnehĂ„llsförteckning", + "IntroductionToImplementingDDD": "Introduktion till implementering av domĂ€ndriven design", + "WhatIsDDD": "Vad Ă€r domĂ€ndriven design?", + "Implementation": "Implementering", + "TheBigPicture": "Den stora bilden", + "TheBuildingBlock": "Byggstenen", + "ExampleUseCase": "Exempel AnvĂ€ndningsfall", + "DomainAndApplicationLogic": "DomĂ€nlogik och applikationslogik", + "Author": "Författaren", + "Pages": "Sidor", + "PublishedOn": "Publicerad pĂ„", + "FreeEBook": "Gratis e-bok", + "Download": "Nedladdningar", + "EBookSignInForDownload": "För att ladda ner e-boken logga in", + "SignIn": "Logga in", + "Or": "Eller", + "TellUsAboutYourself": "BerĂ€tta lite om dig sjĂ€lv", + "Name": "Namn", + "Surname": "Efternamn", + "CompanyName": "Företagets namn", + "Free": "Gratis", + "DDDEBook": "DDD e-bok", + "PracticalGuideForImplementingDDD": "Den hĂ€r boken Ă€r en praktisk guide för att implementera domĂ€ndriven design med ABP-ramverket.", + "IntroducingDDD": "Introduktion till domĂ€ndriven design", + "DDDLayersAndCleanArchitecture": "DDD-skikt och ren arkitektur", + "LayeringOfADotnetSolution": "Skiktning av en .NET-lösning", + "ImplementingDDDBuildingBlocks": "Implementering av DDD-byggstenar", + "DomainVsApplicationLogic": "DomĂ€nlogik vs applikationslogik", + "SamplesAndDiscussions": "Provtagningar och diskussioner", + "EmailNotValid": "VĂ€nligen ange en giltig e-postadress.", + "WeWillSendYouADownloadLink": "En lĂ€nk för att ladda ner e-boken har skickats till {0}. Kontrollera din inkorg, skrĂ€ppost eller spambox!", + "GoHome": "GĂ„ hem", + "InvalidFormInputs": "VĂ€nligen skriv in den giltiga information som anges pĂ„ formulĂ€ret.", + "DDDBookEmailBody": "Tack sĂ„ mycket.
För att ladda ner din bok, klicka hĂ€r.", + "SubscribeToNewsletter": "Prenumerera pĂ„ nyhetsbrevet för att fĂ„ information om vad som hĂ€nder i ABP Platform, t.ex. nya releaser, inlĂ€gg, erbjudanden och mycket mer.", + "FirstEdition": "Första upplagan", + "ThankYou": "Tack sĂ„ mycket!", + "CheckboxMandatory": "Du mĂ„ste kontrollera detta för att fortsĂ€tta!", + "UserInterface": "AnvĂ€ndargrĂ€nssnitt", + "APIGateway": "API-gateway", + "Database": "Databas", + "Saas": "Saas", + "OpenSourceWebApp": "Öppna kĂ€llan
webbapplikation", + "Framework": "Ramverk", + "AuditLoggingExplanation": "SpĂ„ra automatiskt alla operationer och dataförĂ€ndringar i ditt system.", + "AbpNewCommandExplanation": "Skapar nya lösningar med hjĂ€lp av ABP:s startmallar.", + "AbpAddModuleCommandExplanation": "Installerar förbyggda applikationsmoduler till din lösning", + "AbpUpdateCommandExplanation": "Uppdaterar automatiskt alla ABP-relaterade NuGet- och NPM-paket i din lösning.", + "ExploreAllCLICommands": "Utforska alla CLI-kommandon", + "ExploreDocumentationAndGuides": "Utforska den omfattande dokumentationen och guiderna.", + "Documentations": "Dokumentation", + "Views": "Utsikt", + "EnterYouEmailToGetNews": "Ange din e-postadress för att fĂ„ de senaste nyheterna om ABP-ramverket", + "Tiered": "Tiered", + "SeparateIdentityServer": "Separat identitetsserver", + "SeparateAuthenticationServer": "Separat autentiseringsserver", + "ProgressiveWebApplication": "Progressiv webbapplikation", + "Preview": "Förhandsgranskning", + "CreateANewSolution": "Skapa en ny .NET-lösning", + "FrameworkFeatures": "Funktioner för ramverk", + "Commercial": "Kommersiell", + "ThirdPartyTools": "Verktyg frĂ„n tredje part", + "Back": "Tillbaka", + "Community": "Gemenskap", + "SeeMore": "Se mer", + "DetailsOfTheEBook": "Detaljer om e-boken", + "JoinOurMarketingNewsletter": "AnmĂ€l dig till vĂ„rt marknadsföringsnyhetsbrev", + "FrameworkNewsletterConfirmationMessage": "Jag godkĂ€nner Villkor och bestĂ€mmelser och Privatlivspolicy.", + "GetYourFreeEBook": "HĂ€mta din gratis DDD e-bok ", + "EverythingYouNeedToKnow": "Allt du behöver veta.", + "PreOrderNow": "FörbestĂ€ll nu", + "UITheming": "Tematisering av anvĂ€ndargrĂ€nssnitt", + "UIThemingExplanation": "Skapa Ă„teranvĂ€ndbara UI-teman och layouter eller anvĂ€nd ett av de förbyggda UI-temana.", + "DataFilteringExplanation2": "Filtrera automatiskt vid förfrĂ„gningar frĂ„n databasen för att enkelt kunna implementera mönster som mjuk borttagning och multi-tenancy.", + "NeedHelp": "Behöver du hjĂ€lp?", + "GiveYourProjectAName": "Ge ditt projekt ett namn", + "SelectProjectType": "VĂ€lj projekttyp", + "SelectUIFramework": "VĂ€lj UI Framework", + "SelectDatabaseProvider": "VĂ€lj databasleverantör", + "SelectDatabaseManagementSystem": "VĂ€lj system för databashantering", + "InstallingTheABPCLI": "Installera ABP CLI", + "CreateYourProjectNow": "Skapa ditt projekt nu", + "OrderOn": "Order pĂ„ {0}", + "DownloadFreeDDDBook": "Ladda ner gratis DDD-bok", + "WhatIsABPFramework": "Vad Ă€r ABP-ramverket?", + "TenantDatabase": "HyresgĂ€st {0} Databas", + "SharedDatabase": "Delad databas", + "ConnectionResolver": "Återlösare för anslutning", + "TenantBasedDataFilter": "Filter för hyresgĂ€stbaserad data", + "ApplicationCode": "TillĂ€mpningskod", + "TenantResolution": "Lösning för hyresgĂ€ster", + "TenantUser": "HyresgĂ€st {0} AnvĂ€ndare", + "CardTitle": "Kortets titel", + "View": "Utsikt", + "Model": "Modell", + "Email": "E-post", + "Password": "Lösenord", + "Address": "Adress", + "Gender": "Kön", + "Male": "Man", + "Female": "Kvinna", + "Submit": "Skicka in", + "Unspecified": "Ospecificerad", + "StaticFileMiddleware": "Middleware för statiska filer", + "RazorViewEngine": "Razor View Motor", + "PhysicalFiles": "Fysiska filer (wwwroot)", + "EmbeddedFiles": "InbĂ€ddade filer (DLL)", + "DynamicFiles": "Dynamiska filer (minne)", + "BuildSolutionsWithAbp": "Skapa underhĂ„llbara .NET-lösningar genom att följa bĂ€sta praxis för programvaruutveckling med hjĂ€lp av ABP.", + "BuyOnAmazon": "Köp pĂ„ Amazon", + "BuyOnPackt": "Köp pĂ„ Packt", + "BuyOnDangDang": "Köp pĂ„ DangDang", + "BuyOnJD": "Köp pĂ„ JD", + "Discounted": "Rabatterad", + "MasteringAbpFramework_Book_KeyFeatures": "Viktiga funktioner", + "MasteringAbpFramework_Book_Key_Features_Description_1": "Bygga robusta, underhĂ„llbara, modulĂ€ra och skalbara programvarulösningar med hjĂ€lp av ABP Framework.", + "MasteringAbpFramework_Book_Key_Features_Description_2": "LĂ€r dig hur du implementerar SOLID-principer och domĂ€ndriven design i dina webbapplikationer.", + "MasteringAbpFramework_Book_Key_Features_Description_3": "UpptĂ€ck hur ABP Framework pĂ„skyndar din utvecklingscykel genom att automatisera repetitiva uppgifter.", + "MasteringAbpFramework_Book_Description": "Bokbeskrivning", + "MasteringAbpFramework_Book_Description_Details_1": "ABP Framework Ă€r en komplett infrastruktur för att skapa moderna webbapplikationer genom att följa\n bĂ€sta praxis och konventioner för mjukvaruutveckling. Med ABP:s ramverk och ekosystem pĂ„ hög nivĂ„ kan du\n implementera DRY-principen (Don't Repeat Yourself) och fokusera pĂ„ din affĂ€rskod.", + "MasteringAbpFramework_Book_Description_Details_2": "Den hĂ€r boken Ă€r skriven av skaparen av ABP Framework och hjĂ€lper dig att fĂ„ en fullstĂ€ndig förstĂ„else för ramverket\n ramverket och moderna tekniker för utveckling av webbapplikationer. Med steg-för-steg-förklaringar av viktiga\n begrepp och praktiska exempel kommer du att förstĂ„ kraven pĂ„ en modern webblösning och hur ABP\n Framework gör det enkelt att utveckla dina egna lösningar. Du kommer att upptĂ€cka de vanliga kraven pĂ„\n utveckling av webbapplikationer för företag och utforska den infrastruktur som tillhandahĂ„lls av ABP. Genom hela\n boken kommer du att lĂ€ra dig bĂ€sta praxis för mjukvaruutveckling för att bygga underhĂ„llbara och modulĂ€ra\n webblösningar.", + "MasteringAbpFramework_Book_Description_Details_3": "I slutet av den hĂ€r boken kommer du att kunna skapa en komplett webblösning som Ă€r lĂ€tt att utveckla, underhĂ„lla och testa,\n underhĂ„lla och testa.", + "MasteringAbpFramework_Book_WhatYouWillLearn": "Vad du kommer att lĂ€ra dig", + "MasteringAbpFramework_Book_What_You_Will_Learn_1": "Konfigurera utvecklingsmiljön och kom igĂ„ng med ABP Framework.", + "MasteringAbpFramework_Book_What_You_Will_Learn_2": "Arbeta med Entity Framework Core och MongoDB för att utveckla ditt dataĂ„tkomstlager.", + "MasteringAbpFramework_Book_What_You_Will_Learn_3": "FörstĂ„ övergripande problem och hur ABP automatiserar repetitiva uppgifter.", + "MasteringAbpFramework_Book_What_You_Will_Learn_4": "FĂ„ koll pĂ„ hur du implementerar domĂ€ndriven design med ABP Framework.", + "MasteringAbpFramework_Book_What_You_Will_Learn_5": "Bygg UI-sidor och komponenter med ASP.NET Core MVC (Razor Pages) och Blazor.", + "MasteringAbpFramework_Book_What_You_Will_Learn_6": "Arbeta med multi-tenancy för att skapa modulĂ€ra webbapplikationer.", + "MasteringAbpFramework_Book_What_You_Will_Learn_7": "FörstĂ„ modularitet och skapa Ă„teranvĂ€ndbara applikationsmoduler.", + "MasteringAbpFramework_Book_What_You_Will_Learn_8": "Skriva enhets-, integrations- och UI-tester med hjĂ€lp av ABP Framework.", + "MasteringAbpFramework_Book_WhoIsThisBookFor": "Vem Ă€r den hĂ€r boken för?", + "MasteringAbpFramework_Book_WhoIsThisBookFor_Description": "Den hĂ€r boken vĂ€nder sig till webbutvecklare som vill lĂ€ra sig programvaruarkitekturer och bĂ€sta praxis för att bygga\n underhĂ„llbara webbaserade lösningar med hjĂ€lp av Microsoft-teknik och ABP Framework. GrundlĂ€ggande kunskaper i C#\n och ASP.NET Core Ă€r nödvĂ€ndiga för att komma igĂ„ng med den hĂ€r boken.", + "ComputersAndTechnology": "Datorer & teknik", + "BuildingMicroserviceSolutions": "Bygga Microservice-lösningar", + "MicroserviceBookPracticalGuide": "Den hĂ€r boken Ă€r en referensguide för utveckling och hantering av mikrotjĂ€nstbaserade applikationer med hjĂ€lp av ABP Framework. Den refererar till .NET Microservice Sample Reference Application: eShopOnContainers och diskuterar den arkitektoniska utformningen och implementeringsmetoderna med hjĂ€lp av ABP-ramverket. I slutet av den hĂ€r boken kommer du att lĂ€ra dig hur ABP hanterar de vanligaste komplexiteterna för mikrotjĂ€nster, t.ex. auktorisering, distribuerade transaktioner, kommunikation mellan mikrotjĂ€nster, driftsĂ€ttning osv.", + "IntroducingTheSolution": "Vi presenterar lösningen eShopOnAbp", + "RunningTheSolution": "Kör lösningen", + "UnderstandingTheAuthenticationSystem": "FörstĂ„else för autentiseringssystemet", + "ExploringTheApplications": "Utforska applikationerna", + "UnderstandingTheAPIGateways": "FörstĂ„else för API-gateways", + "DevelopingTheMicroservices": "Utveckling av mikrotjĂ€nster", + "UnderstandingTheInfrastructure": "FörstĂ„else för infrastrukturen", + "DiggingInTheUseCases": "GrĂ€va i anvĂ€ndningsfallen", + "DeployingTheSolution": "Implementering av lösningen", + "ThisBookIsInDraftStageAndIsNotCompletedYet": "Denna bok Ă€r i utkaststadiet och Ă€r inte fĂ€rdigstĂ€lld Ă€nnu.", + "Authors": "Författarna", + "MicroserviceEBook": "Mikroservice e-bok", + "SelectUITheme": "VĂ€lj UI-tema", + "LeptonXLiteTheme": "LeptonX Lite tema", + "BasicTheme": "GrundlĂ€ggande tema", + "LeptonXLiteThemeInfo": " Ett modernt och snyggt Bootstrap UI-tema. Perfekt om du vill ha ett produktionsfĂ€rdigt UI-tema. Detta Ă€r det nyaste temat och Ă€r standard.", + "BasicThemeInfo": "Minimalistiskt UI-tema med vanliga Bootstrap-fĂ€rger och -stilar. Perfekt om du ska bygga ditt eget UI-tema.", + "SeeDocumentation": "Se dokumentation.", + "SeeFullScreen": "đŸ–Œïž Se skĂ€rmdump", + "BuildingMicroserviceSolutionsShortDescription": "Den hĂ€r boken Ă€r en referensguide för utveckling och hantering av mikrotjĂ€nstbaserade applikationer med hjĂ€lp av ABP-ramverket.", + "InstallAbpCliMessage": "Installera ABP CLI i en kommandoradsterminal om du inte har installerat det tidigare:", + "Terminal": "Terminal", + "Copy": "Kopia", + "RunTheFollowingCommand": "Kör följande kommando i en kommandoradsterminal:", + "ChangeSolutionOptionsBelow": "Du kan Ă€ndra lösningsalternativen nedan.", + "MultiLayerApplication": "Flera lager
AnvÀndningsomrÄde", + "MultiLayerApplicationExplanation1": "Skapar en heltÀckande lösning baserad pÄ metoder för domÀndriven design.", + "MultiLayerApplicationExplanation2": "Rekommenderas för lÄngsiktiga projekt som krÀver en underhÄllbar och utbyggbar kodbas.", + "SingleLayerApplication": "Enkelskikt
AnvÀndningsomrÄde", + "SingleLayerApplicationExplanation1": "Skapar en webbapplikation i ett lager. ", + "SingleLayerApplicationExplanation2": "Rekommenderas för att bygga en applikation med en enklare och mer lÀttförstÄelig arkitektur.", + "ApplicationModule": "Applikation
Modul", + "SeeTheScreenshot": "Se skĂ€rmdumpen", + "ApplicationModuleExplanation1": "Skapar en Ă„teranvĂ€ndbar, helt skiktad applikationsmodullösning.", + "ApplicationModuleExplanation2": "Du kan anvĂ€nda detta alternativ för att skapa moduler för din modulĂ€ra applikation.", + "Expert_": "Expert", + "Partner_": "Partnerskap", + "WebSite": "Webbplats", + "Expert_Year": "Kompetens År", + "CompanyInfo": "Företagsinformation", + "Date": "Datum", + "WhoWeAre_Partner": "Vilka vi Ă€r", + "WhoWeAre_Expert": "Om mig", + "CreateSolutionFolder": "Skapa lösningsmapp", + "CreateSolutionFolderOption": "Anger om projektet ska lĂ€ggas i en ny mapp i utdatamappen eller direkt i utdatamappen.", + "BooksPageTitle": "ABP Böcker", + "BooksPageDescription": "Utforska ABP-böcker för att fördjupa din förstĂ„else och behĂ€rskning av ABP-ramverket.", + "PackageDetailPage_NuGetPackageInstallationOptions": "Det finns tre sĂ€tt att installera {0} NuGet-paket till ditt projekt", + "PackageDetailPage_InstallingWithABPCLI": "1: Installera med ABP CLI", + "PackageDetailPage_InstallingWithABPCLIDescription1": "Om du inte har installerat ABP CLI, installera först genom att utföra följande kommando i en kommandoradsterminal", + "PackageDetailPage_InstallingWithABPCLIDescription2": "NĂ€r du har installerat ABP CLI öppnar du en kommandoradsterminal pĂ„ platsen för projektet (.csproj-filen) som du vill installera det och kör följande kommando", + "PackageDetailPage_InstallingWithABPCLIDescription3": "Den lĂ€gger till {0}-paketreferensen i ditt projekt och {1}-beroendet i din modulklass.", + "PackageDetailPage_ManualInstallation": "2: Installera med Dotnet CLI", + "PackageDetailPage_ManualInstallationDescription1": "LĂ€gg till {0} NuGet-paketreferens till ditt projekt med hjĂ€lp av din IDE eller genom att utföra följande kommando", + "PackageDetailPage_ManualInstallationDescription2": "LĂ€gg sedan till {0}-beroendet i din modulklass enligt följande exempel", + "PackageDetailPage_SeeDocumentation": "Se dokumentationen för att lĂ€ra dig hur du anvĂ€nder det hĂ€r paketet i dina program.", + "PackageDetailPage_InstallingUsingPMC": "3: Installera med Package Manager-konsolen", + "PackageDetailPage_InstallingUsingPMCDescription1": "Öppna Package Manager Console i Visual Studio (Verktyg -> Nuget Package Manager -> Package Manager Console) och kör följande kommando", + "UIOptions": "Alternativ för anvĂ€ndargrĂ€nssnitt", + "Testimonials": "VittnesmĂ„l", + "CoolestCompaniesUseABPFramework": "De coolaste företagen anvĂ€nder ABP-ramverket", + "Index_Page_Testimonial_1": "ABP Framework Ă€r inte bara ett verktyg utan en katalysator som har pĂ„skyndat min tillvĂ€xt som utvecklare. Det har gjort det möjligt för mig att bygga nya funktioner snabbare Ă€n nĂ„gonsin tidigare, som pĂ„minner om andra anvĂ€ndares erfarenheter. Det enhetliga kodningsmönstret har effektiviserat mina projekt, vilket ger mig mer tid att fokusera pĂ„ att skapa snarare Ă€n att felsöka.\nJag skulle sĂ€ga att ABP-ramverket har varit hörnstenen i min tidiga professionella resa. Det har underlĂ€ttat min övergĂ„ng frĂ„n en aspirerande utvecklare till en sjĂ€lvsĂ€ker yrkesman som Ă€r redo att göra avtryck i programvaruvĂ€rlden. Jag ser fram emot de spĂ€nnande projekt som vĂ€ntar mig, med vetskapen om att ABP kommer att finnas dĂ€r för att vĂ€gleda mig. Det Ă€r mer Ă€n bara en produkt; det Ă€r en partner i framgĂ„ng.", + "Index_Page_Testimonial_2": "ABP Framework Ă€r inte bara ett ramverk, det Ă€r ocksĂ„ en vĂ€gledning för projektutveckling / hantering, eftersom det ger DDD, GenericRepository, DI, Microservice, Modularity utbildningar. Även om du inte kommer att anvĂ€nda sjĂ€lva ramverket kan du utveckla dig sjĂ€lv med abp.io/docs som Ă€r vĂ€l och professionellt förberedda. (OpenIddict, Redis, Quartz etc.)\nEftersom mĂ„nga saker Ă€r förbyggda förkortar det projektutvecklingstiden avsevĂ€rt. (SĂ„som inloggningssida, undantagshantering, datafiltrering-sĂ„dd, revisionsloggning, lokalisering, automatisk api-kontroller etc.)\nSom ett exempel frĂ„n vĂ„r app har jag anvĂ€nt Local Event Bus för lagerstyrning. SĂ„ jag kan hantera orderrörelser genom att skriva lagerhanterare.\nDet Ă€r underbart att inte förlora tid för CreationTime, CreatorId. De fylls i automatiskt.", + "VideosLoginAndRegisterMessage": "För att kunna titta pĂ„ videor mĂ„ste du logga in.", + "Filter": "Filter", + "VideoCourses": "Viktiga videor", + "TestimonialText": "Ditt vittnesmĂ„l", + "Position": "Position", + "ExperienceYear": "Antal Ă„rs erfarenhet", + "FullName": "FullstĂ€ndigt namn", + "CompanySize": "Företagets storlek", + "TestimonialTitle": "LĂ„t oss höra ditt vittnesmĂ„l", + "TestimonialInfo": "Vad vĂ„ra kunder sĂ€ger Ă€r viktigt! BerĂ€tta om din erfarenhet av vĂ„ra produkter och tjĂ€nster. Vi rekommenderar att du skriver din testimonial pĂ„ engelska för att nĂ„ ut till en bredare publik.", + "Country": "Land", + "TestimonialTextPlaceholder": "Skriv en kort berĂ€ttelse om hur ABP hjĂ€lpte dig att bygga och leverera ditt projekt.", + "PositionPlaceholder": "Din position pĂ„ företaget", + "SelectExperienceYearPlaceholder": "Hur mĂ„nga Ă„r har du arbetat inom mjukvarubranschen", + "FullNamePlaceholder": "Ditt fullstĂ€ndiga namn", + "CompanyNamePlaceholder": "Ditt företagsnamn", + "SelectCompanySizePlaceholder": "Antal anstĂ€llda", + "ImagePlaceholder": "Din bild", + "SelectCountryPlaceholder": "Ditt land", + "YouAreNotAuthorizedToWriteTestimonial": "För att kunna skriva ett rekommendationsbrev mĂ„ste du vara inloggad.", + "UnAuthorizeTestimonialInfo": "Din Ă„sikt Ă€r viktig! Logga in för att dela den.", + "TheFileIsTooLargeForImage": "Din profilbild kan inte vara mer Ă€n {0} MB", + "ThisExtensionIsNotAllowedForImage": "Denna förlĂ€ngning Ă€r inte tillĂ„ten.", + "FileUploadError": "Fel vid filuppladdning", + "TestimonialSend": "Tack sĂ„ mycket! Vi har tagit emot ditt vittnesmĂ„l.
Vi kommer att granska och ta nĂ€sta steg snart.", + "Title": "Titel", + "TitlePlaceholder": "Programvaruutvecklare, CTO etc.", + "characters": "karaktĂ€rer", + "Testimonial_YourProfilePicture": "Din profilbild (endast {0})", + "BootstrapCardTitle": "Detta Ă€r ett exempel pĂ„ en kortkomponent som byggts av ABP bootstrap card tag helper.", + "GoSomewhere": "Åk nĂ„gonstans →.", + "ABPTestimonialTitle": "Nytt vittnesmĂ„l", + "ABPTestimonialDescription": "Skicka in din testimonial till ABP Community genom att dela med dig av dina erfarenheter och feedback om ramverket.", + "NotValidEmailAddress": "E-postfĂ€ltet Ă€r inte en giltig e-postadress.", + "EmailAddressMaxLength": "FĂ€ltet Email mĂ„ste vara en strĂ€ng med en maximal lĂ€ngd pĂ„ 255.", + "EmailAddressRequired": "FĂ€ltet E-post Ă€r obligatoriskt.", + "PasswordLength": "FĂ€ltet Password mĂ„ste vara en strĂ€ng med en maximal lĂ€ngd pĂ„ 32.", + "PasswordRequired": "FĂ€ltet Password (Lösenord) Ă€r obligatoriskt.", + "AddressLength": "FĂ€ltet Address mĂ„ste vara en strĂ€ng med en maximal lĂ€ngd pĂ„ 255.", + "GenderRequired": "FĂ€ltet Gender (kön) Ă€r obligatoriskt.", + "LeaveUsReview": "LĂ€mna oss en recension", + "ABPVideoCoursesDescription": "LĂ€r dig grundlĂ€ggande begrepp och anvĂ€ndning av ABP Framework i denna videokursserie. Perfekt för nybörjare!", + "ABPVideoCoursesPageDescription": "LĂ€r dig grunderna i ABP-ramverket genom videokurser som skapats av ABP-teamet. I den hĂ€r videoserien fĂ„r du lĂ€ra dig de viktigaste Ă€mnena i ABP-ramverket. Siffrorna i varje video Ă€r skrivna enligt inlĂ€rningsflödet.", + "DocumentationButtonTitle": "Dokumentation", + "ABPVideoCoursesTitle": "Viktiga videor", + "LovedDevelopers": "Älskad av tusentals utvecklare
runt om i vĂ€rlden", + "ABPIOPlatformPackages": "ABP-paket", + "AbpPackagesDescription": "Utöka din applikation med olika paket som finns i ABP och lĂ€gg till funktioner och egenskaper.", + "Cancel": "Avbryt", + "Continue": "FortsĂ€tt", + "WhatIsTheABPIOPlatform": "Vad Ă€r ABP-plattformen?", + "AbpIoPlatformExplanation1": "ABP Platform Ă€r en omfattande infrastruktur för applikationsutveckling baserad pĂ„ .NET- och ASP.NET Core-plattformarna. Den fyller gapet mellan den enkla ASP.NET Core-plattformen och de komplexa krav som stĂ€lls vid utveckling av programvara för moderna företag.", + "AbpIoPlatformExplanation2": "I kĂ€rnan tillhandahĂ„ller det ett open source och gratis ramverk som bestĂ„r av hundratals NuGet- och NPM-paket, som alla erbjuder olika funktioner. KĂ€rnramverket Ă€r modulĂ€rt, tematiserbart och kompatibelt med mikrotjĂ€nster, vilket ger en komplett arkitektur och en robust infrastruktur. Detta gör att du kan fokusera pĂ„ din affĂ€rskod snarare Ă€n att upprepa dig sjĂ€lv för varje nytt projekt. Det Ă€r baserat pĂ„ bĂ€sta praxis för programvaruutveckling och integrerar populĂ€ra verktyg som du redan kĂ€nner till. Ramverket Ă€r helt gratis, open source och community-drivet.", + "AbpIoPlatformExplanation3": "ABP Platform erbjuder gratis och betalda licensalternativ. Beroende pĂ„ din licenstyp fĂ„r du tillgĂ„ng till flera produktionsfĂ€rdiga startmallar, mĂ„nga förbyggda applikationsmoduler, UI-teman, CLI och GUI-verktyg, support och mycket mer.", + "WhatAreTheDifferencesBetweenFreeAndPaid": "Vilka Ă€r skillnaderna mellan de fria och kommersiella licenserna?", + "WhatAreTheDifferencesBetweenFreeAndPaidExplanation1": "ABP-licensen för fri (öppen kĂ€llkod) omfattar kĂ€rnramverket, grundlĂ€ggande startmallar, grundlĂ€ggande moduler, grundlĂ€ggande teman och community-utgĂ„van av ABP Studio.", + "WhatAreTheDifferencesBetweenFreeAndPaidExplanation2": "Kommersiella licenser erbjuder ytterligare funktioner, inklusive fler startmallar (t.ex. startmallen för mikrotjĂ€nster), professionella applikationsmoduler, ett fullfjĂ€drat UI-tema, professionella utgĂ„vor av ABP Studio, ABP Suite för kodgenerering, fler alternativ för mobila startapplikationer, premiumsupport och nĂ„gra andra fördelar.", + "WhatAreTheDifferencesBetweenFreeAndPaidExplanation3": "För mer information om skillnaderna mellan licenstyperna, se prissĂ€ttningssidan.", + "HowDoIUseTheABPIOPlatform": "Hur anvĂ€nder jag ABP-plattformen?", + "HowDoIUseTheABPIOPlatformExplanation": "ABP Framework utökar .NET-plattformen, vilket innebĂ€r att allt du kan göra med en vanlig .NET-lösning redan Ă€r möjligt med ABP Framework. Det gör det enkelt att komma igĂ„ng med en lĂ„g inlĂ€rningskurva. Se sidan Hur det fungerar för att lĂ€ra dig hur du anvĂ€nder ABP Platform i praktiken.", + "SupportPolicyFaqExplanation1": "Vi tillhandahĂ„ller tvĂ„ typer av support: Community-support för anvĂ€ndare med en icke-kommersiell licens och premium-support för kommersiella licensinnehavare. Community-support Ă€r tillgĂ€ngligt pĂ„ plattformar som GitHub och Stackoverflow, dĂ€r supporten Ă€r begrĂ€nsad. Å andra sidan tillhandahĂ„lls premiumsupport pĂ„ den officiella ABP Support-webbplatsen. HĂ€r besvaras dina frĂ„gor direkt av ABP:s kĂ€rnutvecklare, vilket garanterar support av högre kvalitet.", + "SupportPolicyFaqExplanation2": "Information om Premium-support: Vi ger endast support för den aktiva och den föregĂ„ende huvudversionen. Vi garanterar inte patchreleaser för den tredje och Ă€ldre huvudversionen. Till exempel, om den aktiva versionen Ă€r 7.0.0, kommer vi att slĂ€ppa patchversioner för bĂ„de 6.x.x och 7.x.x. Dessutom ger vi support endast för ABP Platform-relaterade problem. Detta innebĂ€r att inget stöd ges för tredjepartsapplikationer, molntjĂ€nster och andra perifera bibliotek som anvĂ€nds av ABP-produkter.", + "SupportPolicyFaqExplanation3": "Vi Ă„tar oss att anvĂ€nda kommersiellt rimliga anstrĂ€ngningar för att ge vĂ„ra kunder teknisk support under de officiella öppettiderna för \"Volosoft Bilisim A.S\". Vi förbinder oss dock inte till en SLA-svarstid (Service-Level Agreement), men vi kommer att försöka svara pĂ„ de tekniska frĂ„gorna sĂ„ snabbt som möjligt inom vĂ„ra officiella arbetstider. Om inte ett sĂ€rskilt avtal görs med kunden tillhandahĂ„lls support uteslutande pĂ„ {1}. Dessutom Ă€r privat e-postsupport endast tillgĂ€nglig för innehavare av Enterprise-licens.", + "HowManyProducts": "Hur mĂ„nga olika produkter/lösningar kan jag bygga?", + "HowManyDevelopers": "Hur mĂ„nga utvecklare kan arbeta med lösningar som anvĂ€nder ABP Platform?", + "HowManyDevelopersExplanation": "ABP.IO-licenser utfĂ€rdas per utvecklare. Olika licenstyper har varierande grĂ€nser för utvecklare. Du kan dock lĂ€gga till fler utvecklare till vilken licenstyp som helst nĂ€r du behöver. För information om licenstyper, utvecklargrĂ€nser och kostnader för ytterligare utvecklare, se prissĂ€ttningssidan.", + "ChangingLicenseTypeExplanation": "Du kan uppgradera till en högre licens genom att betala mellanskillnaden under din aktiva licensperiod. NĂ€r du uppgraderar till en högre licensplan fĂ„r du fördelarna med den nya planen, men licensuppgraderingen Ă€ndrar inte licensens utgĂ„ngsdatum. Dessutom kan du lĂ€gga till nya utvecklarplatser till din befintliga licens. För detaljer om hur mĂ„nga utvecklare som kan arbeta med lösningar som anvĂ€nder ABP Platform, se 'Hur mĂ„nga utvecklare kan arbeta med lösningar som anvĂ€nder ABP Platform?' frĂ„gan.", + "DowngradeLicensePlanExplanation": "Du kan inte nedgradera din befintliga licensplan. För ytterligare information, kontakta oss pĂ„ info@abp.io.", + "LicenseTransferExplanation": "Ja, det gör jag! NĂ€r du köper en licens blir du licensinnehavare, vilket ger dig tillgĂ„ng till sidan för organisationshantering. En organisation innehĂ„ller roller för Ă€gare och utvecklare. Ägare kan hantera utvecklarplatser och tilldela utvecklare. Varje tilldelad utvecklare loggar in i systemet med kommandot ABP CLI och har behörigheter för utveckling och support.", + "LicenseExtendUpgradeDiff": "Vad Ă€r skillnaden mellan licensförnyelse och uppgradering?", + "LicenseExtendUpgradeDiffExplanation1": "Förnyelse: Genom att förnya din licens kommer du att fortsĂ€tta att fĂ„ premiumsupport och uppdateringar, bĂ„de större och mindre, för moduler, verktyg och teman. Dessutom kommer du att kunna skapa nya projekt och anvĂ€nda ABP Suite och ABP Studio, vilket kan pĂ„skynda din utvecklingsprocess avsevĂ€rt. NĂ€r du förnyar din licens lĂ€ggs ett Ă„r till licensens utgĂ„ngsdatum.", + "LicenseExtendUpgradeDiffExplanation2": "Uppgradering: Genom att uppgradera din licens kommer du att befordras till en högre licensplan, vilket gör att du kan fĂ„ ytterligare fördelar. Kolla in prissĂ€ttningssidan för att se skillnaderna mellan licensplanerna. Å andra sidan Ă€ndras inte licensens utgĂ„ngsdatum nĂ€r du uppgraderar! Om du vill förlĂ€nga licensens slutdatum mĂ„ste du förnya din licens.", + "WhatHappensWhenLicenseEndsExplanation1": "ABP-licenser Ă€r eviga licenser. NĂ€r din licens löper ut kan du fortsĂ€tta att utveckla ditt projekt utan att behöva förnya den. Din licens levereras med en ettĂ„rig uppdaterings- och premiumsupportplan. För att fĂ„ nya funktioner, prestandaförbĂ€ttringar, buggfixar och fortsatt support, samt för att anvĂ€nda ABP Suite och ABP Studio, mĂ„ste du förnya din licens. NĂ€r din licens löper ut;", + "WhatHappensWhenLicenseEndsExplanation2": "Du kan inte skapa nya lösningar med hjĂ€lp av pro startup-mallarna, men du kan fortsĂ€tta att utveckla dina befintliga applikationer för alltid.", + "WhatHappensWhenLicenseEndsExplanation3": "Du kommer att fĂ„ uppdateringar för programmoduler och teman i din MINOR-version (exklusive RC- eller Preview-versioner). Om du t.ex. anvĂ€nder v3.2.0 av en modul kan du fortfarande fĂ„ uppdateringar för v3.2.x (v3.2.1, v3.2.5... etc.) av den modulen. Du kan dock inte fĂ„ uppdateringar för nĂ€sta större eller mindre version (t.ex. v3.3.0, v3.3.3, 4.x.x... etc.). Om t.ex. den senaste versionen var v4.4.3 nĂ€r din licens löpte ut och senare versioner 4.4.4 och 4.5.0 publicerades, skulle du ha tillgĂ„ng till v4.4.x men inte till v4.5.x.", + "WhatHappensWhenLicenseEndsExplanation4": "Du kan inte installera nya programmoduler och teman som lĂ€ggs till i din lösning efter att din licens har upphört att gĂ€lla.", + "WhatHappensWhenLicenseEndsExplanation5": "Du kan inte anvĂ€nda ABP Suite.", + "WhatHappensWhenLicenseEndsExplanation6": "Du kan inte anvĂ€nda ABP Studios proffsfunktioner (du kan anvĂ€nda ABP Studios Community Edition-funktioner)", + "WhatHappensWhenLicenseEndsExplanation7": "Du kommer inte lĂ€ngre att ha tillgĂ„ng till premiumsupport.", + "WhatHappensWhenLicenseEndsExplanation8": "Du kan förnya (förlĂ€nga) din licens för att fortsĂ€tta att fĂ„ dessa förmĂ„ner. Om du förnyar din licens inom {3} dagar efter att den har löpt ut kommer följande rabatter att tillĂ€mpas: Teamlicens {0}; Företagslicens {1}; Enterprise-licens {2}.", + "WhenShouldIRenewMyLicenseExplanation1": "Om du förnyar din licens inom 30 dagar efter att den har löpt ut kommer följande rabatter att tillĂ€mpas:", + "WhenShouldIRenewMyLicenseExplanation2": "{0} för Team Licenser;", + "WhenShouldIRenewMyLicenseExplanation3": "{0} för Business- och Enterprise-licenser;", + "WhenShouldIRenewMyLicenseExplanation4": "Om du förnyar din licens mer Ă€n {0} dagar efter utgĂ„ngsdatumet kommer dock förnyelsepriset att vara detsamma som det ursprungliga inköpspriset för licensen, utan att nĂ„gra rabatter tillĂ€mpas pĂ„ din förnyelse.", + "DoesTheSubscriptionRenewAutomaticallyExplanationAutoRenewal": "ABP Platform tillĂ„ter dig att automatiskt förnya din licens. Detta Ă€r en valfri gratis tjĂ€nst. Du kan vĂ€xla den hĂ€r funktionen nĂ€r du köper en ny licens eller senare aktivera den frĂ„n din organisationshanteringssida. Om du vill slĂ„ pĂ„ eller av den automatiska förnyelsen, besök organisationens hanteringssida, gĂ„ till avsnittet \"Betalningsmetod\" och antingen markera eller avmarkera kryssrutan \"Automatisk förnyelse\". NĂ€r du stĂ€nger av funktionen för automatisk förnyelse kommer det att vara ditt ansvar att förnya din licens manuellt.", + "TrialPlanExplanation": "Ja, för att starta din kostnadsfria testperiod, vĂ€nligen kontakta marketing@volosoft.com. Vi erbjuder ocksĂ„ en 30-dagars pengarna-tillbaka-garanti för Team-licensen, utan nĂ„gra frĂ„gor! Du kan begĂ€ra full Ă„terbetalning inom de första 30 dagarna efter att du köpt licensen. För Business- och Enterprise-licenser ger vi 60% Ă„terbetalning om det begĂ€rs inom 30 dagar efter köpet. Denna policy beror pĂ„ att den fullstĂ€ndiga kĂ€llkoden för alla moduler och teman ingĂ„r i Business- och Enterprise-licenserna.", + "BlazoriseLicenseExplanation": "Vi har ett avtal mellan Volosoft och Megabit, enligt vilket Blazorise-licensen buntas med ABP-plattformens kommersiella licenser. DĂ€rför behöver vĂ„ra betalda anvĂ€ndare inte köpa en ytterligare Blazorise-licens.", + "HowToUpgradeExplanation1": "NĂ€r du skapar en ny applikation med hjĂ€lp av ABP:s startmallar anvĂ€nds alla moduler och teman som NuGet- och NPM-paket. Den hĂ€r instĂ€llningen gör det enkelt att uppgradera till nyare versioner av paketen.", + "HowToUpgradeExplanation2": "Förutom de vanliga NuGet/NPM-uppgraderingarna tillhandahĂ„ller ABP CLI ett update-kommando som automatiskt hittar och uppgraderar alla ABP-relaterade paket i din lösning.", + "HowToUpgradeExplanation3": "Utöver automatiska paketuppgraderingar publicerar vi ocksĂ„ en migreringsguide om den nya versionen krĂ€ver nĂ„gra manuella steg för att uppgradera eller om den har nĂ„gra anteckningar som ska beaktas. FortsĂ€tt följa ABP-bloggen för nyheter om nya utgĂ„vor.", + "DatabaseSupportExplanation": "ABP Ă€r databasagnostisk och kan arbeta med alla databasleverantörer i sin natur. För en lista över för nĂ€rvarande implementerade leverantörer, vĂ€nligen kolla in Data Access-dokumentet.", + "MicroserviceSupportExplanation1": "Ja, det stöder mikrotjĂ€nstarkitekturer.", + "MicroserviceSupportExplanation2": "Ett av de viktigaste mĂ„len med ABP-plattformen Ă€r att tillhandahĂ„lla en bekvĂ€m infrastruktur för att skapa mikrotjĂ€nstlösningar. Alla officiella ABP-applikationsmoduler Ă€r utformade för att stödja mikroservice-distributionsscenarier (med eget API och databas) genom att följa dokumentet Module Development Best Practices.", + "MicroserviceSupportExplanation3": "ABP Platforms kommersiella licenser innehĂ„ller ocksĂ„ en microservice startup template som kan anvĂ€ndas för att direkt skapa en produktionsfĂ€rdig baslösning för ditt microservice-system.", + "MicroserviceSupportExplanation4": "För icke-betalande anvĂ€ndare tillhandahĂ„ller vi ocksĂ„ en exempel pĂ„ e-handelslösning som du kan kontrollera för att förstĂ„ hur du kan bygga din mikrotjĂ€nstlösning baserat pĂ„ ABP-ramverket.", + "MicroserviceSupportExplanation5": "Ett mikrotjĂ€nstsystem Ă€r dock en lösning och varje lösning kommer att ha olika krav, inklusive nĂ€tverkstopologi, kommunikationsscenarier, autentiseringsmöjligheter, beslut om databashardning/partitionering, körtidskonfigurationer, systemintegrationer frĂ„n tredje part och mĂ„nga fler aspekter. ABP-plattformen tillhandahĂ„ller infrastruktur för mikroservicescenarier, mikroservice-kompatibla moduler, exempel och dokumentation för att hjĂ€lpa till att bygga din egen lösning. FörvĂ€nta dig dock inte att direkt ladda ner din idealiska, anpassade lösning som Ă€r förbyggd Ă„t dig. Du mĂ„ste förstĂ„ den och sammanföra specifika delar baserat pĂ„ dina krav.", + "WhereCanIDownloadSourceCodeExplanation": "Du kan ladda ner kĂ€llkoden för alla ABP-moduler, Angular-paket och teman via ABP Suite, ABP Studio eller ABP CLI. Kolla in forumfrĂ„gan: Hur laddar man ner kĂ€llkoden?", + "CommercialLicenses": "Kommersiella licenser", + "WhatIsDifferencePaidLicenses": "Vad Ă€r skillnaden mellan en personlig licens och andra typer av betalda licenser?", + "DifferencePaidLicenseExplanation1": "En icke-personlig betald licens Ă€r standardlicensalternativet för företag och kommersiella enheter. Licenser köps av företaget och kan anvĂ€ndas av vem som helst inom organisationen.", + "DifferencePaidLicenseExplanation2": "Personal License Ă€r Ă„ andra sidan en typ av licens för privatpersoner/freelancers/oberoende utvecklare som köper licenser med egna medel och enbart för eget bruk. Den personliga licensen har vissa begrĂ€nsningar. I den hĂ€r planen kan det bara finnas 1 utvecklare som arbetar med ABP-projektet och inga ytterligare utvecklare fĂ„r lĂ€ggas till senare i projektet. Nedladdning av kĂ€llkoden för PRO-moduler Ă€r inte tillĂ„ten i den personliga licensplanen. Det finns inte heller nĂ„gon mikrotjĂ€nstmall och nivĂ„ (skiktad) arkitektur i denna plan. Personliga licensinnehavare kan endast anvĂ€nda följande moduler: Konto, Audit Log UI, GDPR, Identity, Language Management, LeptonX PRO, OpenIddict UI och SaaS. Personliga licensinnehavare kan inte anvĂ€nda följande moduler: Chatt, CMS-Kit PRO, FormulĂ€r, Identity Server User Interface, Lepton Theme, Text Template Management, File Management och Twilio SMS. Du kan komma Ă„t den fullstĂ€ndiga modullistan pĂ„ abp.io/modules.", + "ReadyToStart": "Är du redo att börja?", + "TransformYourIdeasIntoRealityWithOurProfessionalNETDevelopmentServices": "Förvandla dina idĂ©er till verklighet med vĂ„ra professionella .NET-utvecklingstjĂ€nster.", + "ReadyToUpgrade": "Är du redo att uppgradera?", + "SendServiceRequest": "Skicka en servicebegĂ€ran", + "Permission:CommunityPost": "Gemenskapens inlĂ€gg", + "Permission:Edit": "Redigera", + "Waiting": "VĂ€ntar pĂ„", + "Approved": "GodkĂ€nd", + "Rejected": "Avvisad", + "Wait": "VĂ€nta", + "Approve": "GodkĂ€nna", + "Reject": "Avvisa", + "ReadPost": "LĂ€s inlĂ€gget", + "Status": "Status", + "ContentSource": "KĂ€lla för innehĂ„ll", + "Details": "Detaljer", + "CreationTime": "Skapelsetid", + "Save": "Spara", + "SameUrlAlreadyExist": "Samma webbadress finns redan om du vill lĂ€gga till det hĂ€r inlĂ€gget, bör du Ă€ndra webbadressen!", + "UrlIsNotValid": "Url Ă€r inte giltig.", + "UrlNotFound": "Url hittades inte.", + "UrlContentNotFound": "Url-innehĂ„llet hittades inte.", + "Summary": "Sammanfattning", + "MostRead": "Mest lĂ€st", + "Latest": "Senaste", + "ContributeAbpCommunity": "Bidra till ABP:s gemenskap", + "ContributionGuide": "Bidragsguide", + "BugReport": "Bugg-rapport", + "SeeAllPosts": "Se alla inlĂ€gg", + "WelcomeToABP": "VĂ€lkommen till ABP", + "FeatureRequest": "BegĂ€ran om funktion", + "CreatePostTitleInfo": "Titel pĂ„ det inlĂ€gg som ska visas i inlĂ€ggslistan.", + "CreatePostSummaryInfo": "En kort sammanfattning av inlĂ€gget som ska visas i inlĂ€ggslistan. Maximal lĂ€ngd: {0}", + "CreatePostCoverInfo": "För att skapa ett effektivt inlĂ€gg, lĂ€gg till ett omslagsfoto. Ladda upp bilder med bildförhĂ„llandet 16:9 för bĂ€sta visning.
Maximal filstorlek: 1MB.", + "ThisExtensionIsNotAllowed": "Denna förlĂ€ngning Ă€r inte tillĂ„ten.", + "TheFileIsTooLarge": "Filen Ă€r för stor.", + "GoToThePost": "GĂ„ till inlĂ€gget", + "GoToTheVideo": "GĂ„ till videon", + "Contribute": "Bidra", + "OverallProgress": "Övergripande framsteg", + "Done": "Klar", + "Open": "Öppna", + "Closed": "StĂ€ngt", + "RecentQuestionFrom": "Senaste frĂ„gan frĂ„n {0}", + "Stackoverflow": "Stackoverflow", + "Votes": "röster", + "Answer": "Svar", + "views": "utsikt", + "Answered": "Besvarad", + "WaitingForYourAnswer": "VĂ€ntar pĂ„ ditt svar", + "Asked": "aska", + "AllQuestions": "Alla frĂ„gor", + "NextVersion": "NĂ€sta version", + "MilestoneErrorMessage": "Det gick inte att fĂ„ aktuell milstolpsinformation frĂ„n Github.", + "QuestionItemErrorMessage": "Kunde inte fĂ„ de senaste frĂ„geuppgifterna frĂ„n Stackoverflow.", + "Oops": "Oops!", + "CreatePostSuccessMessage": "InlĂ€gget har skickats in framgĂ„ngsrikt. Det kommer att publiceras efter en granskning frĂ„n webbplatsens administratör.", + "Browse": "BlĂ€ddra", + "CoverImage": "Omslagsbild", + "ShareYourExperiencesWithTheABPFramework": "Dela dina erfarenheter av ABP-ramverket!", + "UpdateUserWebSiteInfo": "Exempel: https://johndoe.com", + "UpdateUserTwitterInfo": "Exempel: johndoe", + "UpdateUserGithubInfo": "Exempel: johndoe", + "UpdateUserLinkedinInfo": "Exempel: https://www.linkedin.com/...", + "UpdateUserCompanyInfo": "Exempel: Volosoft", + "UpdateUserJobTitleInfo": "Exempel: Programvaruutvecklare", + "UserName": "AnvĂ€ndarnamn", + "Company": "Företag", + "PersonalWebsite": "Personlig webbplats", + "RegistrationDate": "Registreringsdatum", + "Social": "Sociala", + "Biography": "Biografi", + "HasNoPublishedPostsYet": "har inga publicerade inlĂ€gg Ă€nnu", + "LatestGithubAnnouncements": "Senaste Github-tillkĂ€nnagivanden", + "SeeAllAnnouncements": "Se alla tillkĂ€nnagivanden", + "LatestBlogPost": "Senaste blogginlĂ€gget", + "Edit": "Redigera", + "ProfileImageChange": "Ändra profilbilden", + "BlogItemErrorMessage": "Kunde inte fĂ„ den senaste informationen om blogginlĂ€gg frĂ„n ABP.", + "PlannedReleaseDate": "Planerat utgivningsdatum", + "CommunityPostRequestErrorMessage": "Det gick inte att fĂ„ den senaste postförfrĂ„gan frĂ„n Github.", + "PostRequestFromGithubIssue": "Det finns inga postförfrĂ„gningar nu.", + "LatestPosts": "Senaste inlĂ€gg", + "ArticleRequests": "BegĂ€r ett innehĂ„ll", + "ArticleRequestsDescription": "Vill du se ett specifikt innehĂ„ll hĂ€r? Du kan be communityn att skapa det!", + "LatestContentRequests": "Senaste förfrĂ„gningar om innehĂ„ll", + "AllPostRequests": "Se alla postförfrĂ„gningar", + "SubscribeToTheNewsletter": "Prenumerera pĂ„ nyhetsbrevet", + "NewsletterEmailDefinition": "FĂ„ information om vad som hĂ€nder i ABP, t.ex. nya utgĂ„vor, fria kĂ€llor, inlĂ€gg och mycket mer.", + "NoThanks": "Nej, tack.", + "MaybeLater": "Kanske senare", + "JoinOurPostNewsletter": "AnmĂ€l dig till vĂ„rt nyhetsbrev", + "Marketing": "Marknadsföring", + "CommunityPrivacyPolicyConfirmation": "Jag godkĂ€nner de allmĂ€nna villkoren och Integritetspolicy.", + "PostRequestMessageTitle": "Öppna en frĂ„ga pĂ„ GitHub för att begĂ€ra ett inlĂ€gg / en handledning som du vill se pĂ„ den hĂ€r webbplatsen.", + "PostRequestMessageBody": "HĂ€r Ă€r en lista över de inlĂ€gg som efterfrĂ„gats av communityn. Vill du skriva ett efterfrĂ„gat inlĂ€gg? Klicka pĂ„ önskemĂ„let och delta i diskussionen.", + "Language": "SprĂ„k", + "CreatePostLanguageInfo": "SprĂ„ket för inlĂ€ggets innehĂ„ll.", + "VideoPost": "VideoinlĂ€gg", + "Post": "Post", + "Read": "LĂ€s", + "CreateGithubPostUrlInfo": "FullstĂ€ndig URL till Markdown-filen pĂ„ GitHub (exempel).", + "CreateVideoContentUrlInfo": "InlĂ€ggets ursprungliga URL pĂ„ Youtube.", + "CreateExternalPostUrlInfo": "InlĂ€ggets ursprungliga externa webbadress.", + "VideoContentForm": "Skicka in video pĂ„ YouTube", + "GithubPostForm": "Skicka inlĂ€gg pĂ„ GitHub", + "ExternalPostForm": "Skicka in ett externt innehĂ„ll", + "HowToPost": "Hur postar jag?", + "Posts": "InlĂ€gg", + "VideoUrl": "Video webbadress", + "GithubPostUrl": "Url för GitHub-post", + "ExternalPostUrl": "Url för externt inlĂ€gg", + "ThankYouForContribution": "Tack för att du bidrar till ABP Community. Vi tar gĂ€rna emot artiklar och videohandledning om ABP Framework, .NET, ASP.NET Core och allmĂ€nna Ă€mnen inom programvaruutveckling.", + "GithubPost": "GitHub-inlĂ€gg", + "GithubPostSubmitStepOne": "1. Skriv ett inlĂ€gg pĂ„ ett offentligt GitHub-arkiv med Markdown-formatet. exempel", + "GithubPostSubmitStepTwo": "2. Skicka in din URL till inlĂ€gget med hjĂ€lp av formulĂ€ret.", + "GithubPostSubmitStepThree": "3. Ditt inlĂ€gg kommer att Ă„terges pĂ„ denna webbplats.", + "YoutubeVideo": "Youtube-video", + "YoutubeVideoSubmitStepOne": "1. Publicera din video pĂ„ YouTube.", + "YoutubeVideoSubmitStepTwo": "2. Skicka in video-URL:en med hjĂ€lp av formulĂ€ret.", + "YoutubeVideoSubmitStepThree": "3. Besökare kommer att kunna titta pĂ„ ditt videoinnehĂ„ll direkt pĂ„ denna webbplats.", + "ExternalContent": "Externt innehĂ„ll", + "ExternalContentSubmitStepOne": "1. Skapa ett innehĂ„ll pĂ„ en publik plattform (Medium, din egen blogg eller var du vill).", + "ExternalContentSubmitStepTwo": "2. Skicka in URL:en för ditt innehĂ„ll med hjĂ€lp av formulĂ€ret.", + "ExternalContentSubmitStepThree": "3. Besökare omdirigeras till innehĂ„llet pĂ„ den ursprungliga webbplatsen.", + "ChooseYourContentType": "VĂ€lj det sĂ€tt som du vill lĂ€gga till ditt innehĂ„ll pĂ„.", + "PostContentViaGithub": "Jag vill lĂ€gga till mitt inlĂ€gg med GitHub i enlighet med markdown-reglerna.", + "PostContentViaYoutube": "Jag vill dela mina videor som finns pĂ„ Youtube hĂ€r.", + "PostContentViaExternalSource": "Jag vill lĂ€gga till det innehĂ„ll jag publicerade pĂ„ en annan plattform hĂ€r.", + "GitHubUserNameValidationMessage": "Ditt Github-anvĂ€ndarnamn kan inte innehĂ„lla blanksteg, kontrollera att ditt Github-anvĂ€ndarnamn Ă€r korrekt.", + "PersonalSiteUrlValidationMessage": "URL:en till din personliga webbplats fĂ„r inte innehĂ„lla blanksteg, kontrollera att URL:en till din personliga webbplats Ă€r korrekt.", + "TwitterUserNameValidationMessage": "Ditt Twitter-anvĂ€ndarnamn fĂ„r inte innehĂ„lla blanksteg, kontrollera att ditt Twitter-anvĂ€ndarnamn Ă€r korrekt.", + "LinkedinUrlValidationMessage": "Din Linkedin-URL fĂ„r inte innehĂ„lla blanksteg, kontrollera att din Linkedin-URL Ă€r korrekt.", + "NoPostsFound": "Inga inlĂ€gg hittades!", + "SearchInPosts": "Sök i inlĂ€gg...", + "MinimumSearchContent": "Du mĂ„ste ange minst 3 tecken!", + "Volo.AbpIo.Domain:060001": "KĂ€llans URL(\"{PostUrl}\") Ă€r inte Github URL", + "Volo.AbpIo.Domain:060002": "InlĂ€ggets innehĂ„ll Ă€r inte tillgĂ€ngligt frĂ„n Github(\"{PostUrl}\")-resursen.", + "Volo.AbpIo.Domain:060003": "Inget innehĂ„ll i inlĂ€gget hittades!", + "JoinTheABPCommunity": "GĂ„ med i ABP:s gemenskap", + "ABPCommunityTalks": "ABP:s samtal med allmĂ€nheten", + "LiveDemo": "Live Demo", + "GetLicense": "Skaffa licens", + "SourceCode": "KĂ€llkod", + "LeaveComment": "LĂ€mna kommentar", + "ShowMore": "Visa mer", + "NoPublishedPostsYet": "Inga publicerade inlĂ€gg Ă€nnu.", + "FullURL": "Full URL", + "JobTitle": "Befattning", + "Prev": "Före", + "Previous": "FöregĂ„ende", + "Next": "NĂ€sta", + "Share": "Aktie", + "SortBy": "Sortera efter", + "NoPublishedEventsYet": "Inga publicerade hĂ€ndelser Ă€nnu.", + "SubscribeYoutubeChannel": "Prenumerera pĂ„ Youtube-kanalen", + "Enum:EventType:0": "Samtal", + "MemberNotPublishedPostYet": "Denna medlem har inte publicerat nĂ„gra inlĂ€gg Ă€nnu.", + "MemberNotPublishedArticlesYet": "Denna medlem har inte publicerat nĂ„gra artiklar Ă€nnu.", + "MemberNotPublishedVideosYet": "Denna medlem har inte publicerat nĂ„gra videor Ă€nnu.", + "TimeAgo": "för {0} sedan", + "Discord_Page_JoinCommunityMessage": "GĂ„ med i ABP Discord Community", + "Discord_Page_Announce": "Vi Ă€r glada att kunna presentera ABP Community Discord Server!", + "Discord_Page_Description_1": "ABP Community har vuxit sedan dag ett. Vi ville ta det till nĂ€sta steg genom att skapa en officiell ABP Discord-server sĂ„ att ABP-communityn kan interagera med varandra med hjĂ€lp av underverk som snabbmeddelanden.", + "Discord_Page_Description_2": "ABP Community Discord Server Ă€r platsen dĂ€r du kan visa upp dina skapelser med ABP Framework, dela de tips som fungerade för dig, fĂ„ de senaste nyheterna och tillkĂ€nnagivandena om ABP Framework, bara chatta med medlemmar i samhĂ€llet för att utbyta idĂ©er och ha kul!", + "Discord_Page_Description_3": "Denna ABP Community Discord Server Ă€r den officiella med ABP Core Team Ă€r nĂ€rvarande pĂ„ servern för att övervaka.", + "Discord_Page_JoinToServer": "GĂ„ med i ABP Discord Server", + "Events_Page_MetaTitle": "ABP:s evenemang för allmĂ€nheten", + "Events_Page_MetaDescription": "Live-showerna, som leds av ABP-teamet, Ă€r avslappnade sessioner fulla av community-innehĂ„ll, demonstrationer, frĂ„gor och svar och diskussioner om vad som hĂ€nder i ABP.", + "Events_Page_Title": "ABP Community Samtal", + "Members_Page_WritingFromUser": "LĂ€s skrivning frĂ„n {0} pĂ„ ABP Community.", + "Post_Create_Page_MetaTitle": "Ny tjĂ€nst i gemenskapen", + "Post_Create_Page_MetaDescription": "Skicka in dina egna inlĂ€gg till ABP:s communityplattform och bidra med dina insikter och erfarenheter.", + "Post_Create_Page_CreateNewPost": "Skapa nytt inlĂ€gg", + "Post_Index_Page_MetaDescription": "ABP Communitys syfte Ă€r att skapa en bidragsmiljö för utvecklare som anvĂ€nder ABP-ramverket.", + "Layout_Title": "{0} | ABP Gemenskap", + "Layout_MetaDescription": "Ett nav för ABP Framework, .NET och programvaruutveckling. FĂ„ tillgĂ„ng till artiklar, handledning, nyheter och bidra till ABP-communityn.", + "Index_Page_CommunityIntroduction": "Detta Ă€r ett nav för ABP Framework, .NET och programvaruutveckling. Du kan lĂ€sa artiklarna, titta pĂ„ videohandledningarna, fĂ„ information om ABP:s utvecklingsframsteg och ABP-relaterade evenemang, hjĂ€lpa andra utvecklare och dela med dig av din expertis till ABP-communityn.", + "TagsInArticle": "Taggar i artikel", + "IConsentToMedium": "Jag samtycker till publicering av detta inlĂ€gg pĂ„ https://medium.com/volosoft.", + "SearchResultsFor": "Sökresultat för \"{0}\"", + "SeeMoreVideos": "Se fler videor", + "DiscordPageTitle": "Discord", + "DiscordPageDescription": "GĂ„ med i ABP Community Discord för att chatta med andra medlemmar, diskutera idĂ©er och fĂ„ stöd om ABP.", + "ViewVideo": "Visa video", + "AbpCommunityTitleContent": "ABP Community - ABP-ramverk med öppen kĂ€llkod", + "CommunitySlogan": "En unik community-plattform för ABP-Ă€lskare.", + "RaffleIsNotActive": "Lottdragningen Ă€r inte aktiv", + "YouAreAlreadyJoinedToThisRaffle": "Du har redan gĂ„tt med i denna utlottning!", + "InvalidSubscriptionCode": "Ogiltig prenumerationskod", + "Raffle:{0}": "Lottdragning: {0}", + "Join": "GĂ„ med", + "Leave": "LĂ€mna", + "LoginToJoin": "Logga in för att gĂ„ med", + "ToEnd:": "För att avsluta:", + "ToStart:": "Det Ă€r en början:", + "days": "dagar", + "hrs": "timmar", + "min": "min", + "sec": "sek", + "Winners": "Vinnare", + "To{0}LuckyWinners": "till {0} lyckliga vinnare", + "ActiveRaffles": "Aktiva Rafflar.", + "UpcomingRaffles": "Kommande Rafflar", + "CompletedRaffles": "FĂ€rdigstĂ€llda Rafflar", + "NoActiveRaffleTitle": "Ingen aktiv utlottning Ă€r tillgĂ€nglig för tillfĂ€llet.", + "NoActiveRaffleDescription": "Ingen aktiv utlottning Ă€r tillgĂ€nglig för tillfĂ€llet.", + "RaffleSubscriptionCodeInputMessage": "Denna utlottning krĂ€ver en registreringskod. VĂ€nligen ange registreringskoden nedan:", + "RaffleSubscriptionCodeInputErrorMessage": "Registreringskoden Ă€r felaktig. VĂ€nligen försök igen.", + "GoodJob!": "Bra jobbat!", + "RaffleJoinSuccessMessage": "Du Ă€r nu registrerad för utlottningen. Du kommer att informeras via e-post om du vinner priset!", + "RaffleLoginAndRegisterMessage": "Du mĂ„ste logga in för att delta i utlottningen! Om du inte har registrerat dig Ă€nnu kan du skapa ett konto gratis nu.", + "Ok": "Ok", + "WaitingForTheDraw": "VĂ€nta pĂ„ dragningen!", + "AllAttendees": "Alla deltagare", + "SeeRaffleDetail": "Se Raffle detalj", + "SeeRaffle": "Se Raffle", + "ParticipationIsComplete": "Deltagandet Ă€r fullstĂ€ndigt.", + "ABPCoreDevelopmentTeam": "ABP Core utvecklingsteam", + "RegisterTheEvent": "Registrera evenemanget", + "GoToConferencePage": "GĂ„ till konferenssidan", + "BuyTicket": "Buy Ticket", + "SeeEvent": "Se evenemang", + "PreviousEvents": "Tidigare evenemang", + "OtherLiveEvents": "Andra live-evenemang", + "SponsoredConferences": "Sponsrade konferenser", + "SponsoredConferencesDescription": "Vi Ă€r stolta över att stödja .NET-communities och evenemang för programvaruutvecklare.", + "UpcomingEvents": "Kommande evenemang", + "UpcomingCommunityTalkEventDescription": "Live-showerna, som leds av ABP-teamet, Ă€r avslappnade sessioner fulla av community-innehĂ„ll, demonstrationer, frĂ„gor och svar och diskussioner om vad som hĂ€nder i ABP.", + "UpcomingConferenceEventDescription": "ABP .NET Conference Ă€r ett virtuellt evenemang för .NET-utvecklare dĂ€r de kan trĂ€ffas och lyssna pĂ„ föredrag om .NET-vĂ€rlden, vanliga metoder för programvaruutveckling och ABP Framework med öppen kĂ€llkod.", + "LastOneYear": "Senaste 1 Ă„ret", + "AllTimes": "Alla tider", + "TopContributors": "De största bidragsgivarna", + "{0}Posts": "{0} InlĂ€gg", + "LATESTPOSTS": "SENASTE INLÄGGNINGAR", + "NoContributorsFound": "Inga bidragsgivare hittades!", + "LatestPost": "Senaste inlĂ€gget", + "MEMBERSINCE{0}": "MEDLEM EFTERSOM {0}", + "CopyLink": "Kopiera lĂ€nk", + "ShareOnTwitter": "Dela pĂ„ Twitter", + "ShareOnLinkedIn": "Dela pĂ„ LinkedIn", + "MoreFrom{0}": "Mer frĂ„n {0}", + "SeeAllFrom{0}": "Se alla frĂ„n {0}", + "MostWatched": "Mest bevakade", + "Articles({0})": "Artiklar ({0})", + "Videos({0})": "Videor ({0})", + "LatestArticles": "Senaste artiklar", + "RaffleHeader": "Hej ABP Community Member!", + "RafflesInfo": "
Detta Àr utlottningssidan som Àr avsedd att visa vÄr uppskattning för att du Àr en aktiv gemenskapsmedlem. Vi gör ABP Community Talks ABP Dotnet Conference, deltar eller sponsrar .NET-relaterade evenemang dÀr vi ger bort nÄgra gÄvor.

Du kan följa den hÀr sidan för att se kommande lotterier, delta i dem eller se tidigare lotterier som vi dragit inklusive vinnarna.

Tack för att du Ă€r en aktiv medlem! Vi ses i de kommande lotterierna.", + "RafflesInfoTitle": "ABP Community Rafflar.", + "ToLuckyWinner": "till 1 lycklig vinnare", + "MarkdownSupported": "Stöd för Markdown.", + "VisitPage": "Besök sidan", + "VisitVideoCourseDescription": "Om du vill lĂ€ra dig grunderna i ABP-ramverket kan du kolla in videokurserna ABP Essentials.", + "EditProfile": "Redigera profil", + "ConfirmEmailForPost": "För att kunna göra inlĂ€gg mĂ„ste du bekrĂ€fta din e-post. GĂ„ till account.abp.io/Account/Manage och verifiera din e-postadress under fliken Personal Info.", + "DailyPostCreateLimitation": "Du har nĂ„tt den dagliga grĂ€nsen för skapande av inlĂ€gg. Du kan skapa ett nytt inlĂ€gg i {0}.", + "OrganizationManagement": "Organisation och ledning", + "OrganizationList": "Organisationslista", + "Volo.AbpIo.Commercial:010003": "Du Ă€r inte Ă€gare till den hĂ€r organisationen!", + "OrganizationNotFoundMessage": "Ingen organisation hittades!", + "DeveloperCount": "Tilldelade / totala utvecklare", + "QuestionCount": "Kvarvarande / totala frĂ„gor", + "Unlimited": "ObegrĂ€nsad", + "Owners": "Ägare", + "Owner": "Ägare", + "AddMember": "LĂ€gg till medlem", + "AddNewOwner": "LĂ€gg till ny Ă€gare", + "AddNewDeveloper": "LĂ€gg till ny utvecklare", + "Developers": "Utvecklare", + "LicenseType": "Typ av licens", + "Manage": "Hantera", + "SetDefault": "StĂ€ll in som standard", + "DefaultOrganization": "Standard", + "StartDate": "Startdatum", + "EndDate": "Slutdatum", + "Modules": "Moduler", + "LicenseExtendMessage": "Slutdatum för din licens förlĂ€ngs till {0}.", + "LicenseUpgradeMessage": "Din licens har uppgraderats till {0}.", + "LicenseExtendAdnUpgradeMessage": "Din licens har förlĂ€ngts till {0} och din licensplan har uppgraderats till {1}.", + "LicenseAddDeveloperMessage": "{0} utvecklare lĂ€ggs till i din licens", + "Volo.AbpIo.Commercial:010004": "Kan inte hitta den angivna anvĂ€ndaren! AnvĂ€ndaren mĂ„ste redan ha registrerats.", + "MyOrganizations": "Mina organisationer", + "ApiKey": "API-nyckel", + "UserNameNotFound": "Det finns ingen anvĂ€ndare med anvĂ€ndarnamnet {0}", + "SuccessfullyAddedToNewsletter": "Tack för att du prenumererar pĂ„ vĂ„rt nyhetsbrev!", + "MyProfile": "Min profil", + "WouldLikeToReceiveMarketingMaterials": "Jag skulle vilja fĂ„ marknadsföringsnyheter som produkterbjudanden och specialerbjudanden.", + "StartUsingYourLicenseNow": "Börja anvĂ€nda din licens nu!", + "WelcomePage": "VĂ€lkomstsida", + "UnsubscriptionExpireEmail": "Avregistrera dig frĂ„n e-postmeddelanden med pĂ„minnelser om licensens utgĂ„ngsdatum", + "UnsubscribeLicenseExpireEmailReminderMessage": "Denna e-postprenumeration innehĂ„ller endast pĂ„minnelser om utgĂ„ngsdatum för din licens.", + "UnsubscribeFromLicenseExpireEmails": "Om du inte vill fĂ„ e-postmeddelanden om utgĂ„ngsdatum för din licens kan du avsluta prenumerationen nĂ€r som helst.", + "Unsubscribe": "Avsluta prenumeration", + "NotOrganizationMember": "Du Ă€r inte medlem i nĂ„gon organisation.", + "UnsubscribeLicenseExpirationEmailSuccessTitle": "FramgĂ„ngsrikt avregistrerad", + "UnsubscribeLicenseExpirationEmailSuccessMessage": "Du kommer inte lĂ€ngre att fĂ„ e-postmeddelanden med pĂ„minnelser om licensens utgĂ„ngsdatum.", + "LiveDemoLead": "{1} med ditt ABP-konto, {3} till abp.io eller fyll i formulĂ€ret nedan för att skapa en live demo nu", + "ThereIsAlreadyAnAccountWithTheGivenEmailAddress": "Det finns redan ett konto med den angivna e-postadressen: {0}
Du bör logga in med ditt konto för att fortsÀtta.", + "GetLicence": "Skaffa licens", + "Startup": "Nystartad verksamhet", + "Templates": "Mallar", + "Developer": "Utvecklare", + "Tools": "Verktyg", + "Premium": "Premium", + "PremiumSupport": "Premium-support", + "PremiumForumSupport": "Premium Forum Support", + "UI": "UI", + "Themes": "Teman", + "JoinOurNewsletter": "AnmÀl dig till vÄrt nyhetsbrev", + "Send": "Skicka", + "OpenSourceBaseFramework": "Basramverk med öppen kÀllkod", + "MicroserviceCompatible": "Kompatibel med mikrotjÀnster", + "DistributedMessaging": "Distribuerad meddelandehantering", + "DynamicProxying": "Dynamisk proxyservering", + "BLOBStoring": "BLOB Storing", + "AdvancedLocalization": "Avancerad lokalisering", + "ManyMore": "MÄnga fler", + "ExploreTheABPFramework": "Utforska ABP-ramverket", + "StartupTemplatesShortDescription": "Startup-mallar gör att du kan starta ditt projekt pÄ nÄgra sekunder.", + "UIFrameworksOptions": "Alternativ för ramverk för anvÀndargrÀnssnitt;", + "DatabaseProviderOptions": "Alternativ för databasleverantör;", + "PreBuiltApplicationModules": "Förbyggda applikationsmoduler", + "PreBuiltApplicationModulesShortDescription": "De vanligaste applikationskraven Àr redan utvecklade Ät dig som ÄteranvÀndbara moduler.", + "Account": "Konto", + "Blogging": "Bloggande", + "Identity": "Identitet", + "IdentityServer": "Identitetsserver", + "LanguageManagement": "SprÄkhantering", + "TextTemplateManagement": "Hantering av textmallar", + "See All Modules": "SeAllaModuler", + "ABPSuite": "ABP-svit", + "AbpSuiteShortDescription": "ABP Suite Àr ett komplementÀrt verktyg till ABP Platform.", + "AbpSuiteExplanation": "Det gör att du kan bygga webbsidor pÄ bara nÄgra minuter. Det Àr ett .NET Core Global-verktyg som kan installeras frÄn kommandoraden. Det kan skapa en ny ABP-lösning och generera CRUD-sidor frÄn databasen till frontend.", + "LeptonTheme": "Lepton tema", + "ProfessionalModernUIThemes": "Professionella, moderna UI-teman", + "LeptonThemeExplanation": "Lepton tillhandahÄller en rad Bootstrap-adminteman som fungerar som en solid grund för alla projekt som krÀver en adminpanel.", + "DefaultTheme": "Standardtema", + "MaterialTheme": "Materialtema", + "Default2Theme": "Standard 2 Tema", + "DarkTheme": "Mörkt tema", + "DarkBlueTheme": "MörkblÄtt tema", + "LightTheme": "Ljus tema", + "ProudToWorkWith": "Stolt över att arbeta med", + "JoinOurConsumers": "Anslut dig till dem och bygg fantastiska produkter snabbt.", + "AdditionalServicesExplanation": "Behöver du ytterligare eller anpassade tjÀnster? Vi och vÄra partners kan tillhandahÄlla;", + "CustomProjectDevelopment": "Anpassad projektutveckling", + "CustomProjectDevelopmentExplanation": "Dedikerade utvecklare för dina anpassade projekt.", + "PortingExistingProjects": "Portning av befintliga projekt", + "PortingExistingProjectsExplanation": "Migrera dina Àldre projekt till ABP-plattformen.", + "LiveSupport": "Support i realtid", + "LiveSupportExplanation": "FjÀrrsupport i realtid nÀr du behöver det.", + "Training": "Utbildning", + "TrainingExplanation": "Dedikerad utbildning för dina utvecklare.", + "OnBoarding": "Onboarding", + "OnBoardingExplanation": "HjÀlp med att konfigurera dina utvecklings-, CI- och CD-miljöer.", + "PrioritizedTechnicalSupport": "Prioriterad teknisk support", + "PremiumSupportExplanation": "Förutom det stora samhÀllsstödet i ABP-ramverket svarar vÄrt supportteam pÄ tekniska frÄgor och problem frÄn de kommersiella anvÀndarna med hög prioritet.", + "SeeTheSupportOptions": "Kolla in supportalternativen", + "Contact": "Kontakt", + "TellUsWhatYouNeed": "BerÀtta för oss vad du behöver.", + "YourMessage": "Ditt meddelande", + "YourFullName": "Ditt fullstÀndiga namn", + "FirstNameField": "Förnamn", + "LastNameField": "Efternamn", + "EmailField": "E-postadress", + "YourEmailAddress": "Din e-postadress", + "ValidEmailAddressIsRequired": "En giltig e-postadress krÀvs.", + "HowMayWeHelpYou": "Hur kan vi hjÀlpa dig?", + "SendMessage": "Skicka meddelande", + "Success": "FramgÄng", + "WeWillReplyYou": "Vi har mottagit ditt meddelande och kommer att kontakta dig inom kort.", + "CreateLiveDemo": "Skapa live-demo", + "CreateLiveDemoDescription": "NÀr du har skickat in formulÀret kommer du att fÄ ett e-postmeddelande med din demolÀnk.", + "RegisterToTheNewsletter": "AnmÀl dig till nyhetsbrevet för att fÄ information om ABP.IO, inklusive nya releaser etc.", + "EnterYourEmailOrLogin": "Ange din e-postadress för att skapa din demo eller Logga in med ditt befintliga konto.", + "ApplicationTemplate": "Mall för ansökan", + "ApplicationTemplateExplanation": "Application startup template anvÀnds för att skapa en ny webbapplikation.", + "EfCoreProvider": "Entity Framework (Stödjer SQL Server, MySQL, PostgreSQL, Oracle och andra)", + "AlreadyIncludedInTemplateModules": "Följande moduler Àr redan inkluderade och konfigurerade i den hÀr mallen:", + "ApplicationTemplateArchitecture": "Den hÀr applikationsmallen stöder ocksÄ nivÄindelad arkitektur dÀr anvÀndargrÀnssnittslagret, API-lagret och autentiseringstjÀnsten Àr fysiskt Ätskilda.", + "SeeTheGuideOrGoToTheLiveDemo": "Kolla in utvecklarguiden för teknisk information om den hÀr mallen eller gÄ till live-demonstrationen.", + "DeveloperGuide": "Guide för utvecklare", + "ModuleTemplate": "Mall för modul", + "ModuleTemplateExplanation1": "Vill du skapa en modul och ÄteranvÀnda den i olika applikationer? Den hÀr startmallen förbereder allt för att börja skapa en ÄteranvÀndbar applikationsmodul eller en mikrotjÀnst.", + "ModuleTemplateExplanation2": "

Du kan stödja enstaka eller flera anvÀndargrÀnssnittsramverk, enstaka eller flera databasleverantörer för en enda modul. Startmallen Àr konfigurerad för att köra och testa din modul i en minimal applikation utöver infrastrukturen för enhets- och integrationstest.

Se utvecklarguiden för teknisk information om den hÀr mallen.

", + "WithAllStyleOptions": "med alla stilalternativ", + "Demo": "Demo", + "SeeAllModules": "Se alla moduler", + "ABPCLIExplanation": "ABP CLI Àr ett kommandoradsverktyg för att utföra vanliga utvecklingsuppgifter för ABP-baserade lösningar.", + "ABPSuiteEasilyCURD": "ABP Suite Àr ett verktyg som gör att du enkelt kan skapa CRUD-sidor", + "WeAreHereToHelp": "Vi Àr hÀr för att hjÀlpa", + "BrowseOrAskQuestion": "Du kan blÀddra i vÄra hjÀlpÀmnen eller söka i vanliga frÄgor, eller sÄ kan du stÀlla en frÄga till oss genom att anvÀnda kontaktformulÀret.", + "SearchQuestionPlaceholder": "Sök i vanliga frÄgor och svar", + "AbpCommercialMetaDescription": "En omfattande webbutvecklingsplattform pÄ ABP Framework med förbyggda moduler, startmallar, verktyg för snabb utveckling, proffsiga UI-teman och premiumsupport.", + "WhatAreDifferencesThanABPFrameworkExplanation": "

ABP-ramverket Àr ett modulÀrt, tematiserbart, mikrotjÀnstkompatibelt ramverk för applikationsutveckling för ASP.NET Core. Det ger en komplett arkitektur och en stark infrastruktur sÄ att du kan fokusera pÄ din egen affÀrskod istÀllet för att upprepa dig sjÀlv för varje nytt projekt. Det Àr baserat pÄ bÀsta praxis för mjukvaruutveckling och populÀra verktyg som du redan kÀnner till.

ABP-ramverket Àr helt gratis, öppen kÀllkod och community-driven. Det ger ocksÄ ett gratis tema och nÄgra förbyggda moduler (t.ex. identitetshantering och hyresgÀsthantering).

<", + "VisitTheFrameworkVSCommercialDocument": "Besök följande lÀnk för mer information {1} ", + "Professional": "Professionell", + "UIThemes": "Teman för anvÀndargrÀnssnitt", + "EnterpriseModules": "Enterprise ready, funktionsrika, förbyggda applikationsmoduler (t.ex. hantering av identitetsserver, SaaS-hantering, sprÄkhantering)", + "ToolingToSupport": "Verktyg för att stödja din utvecklingsproduktivitet (t.ex. ABP Suite)", + "PremiumSupportLink": "Premium Support", + "ABPCommercialSolutionExplanation": "NÀr du skapar en ny applikation fÄr du en Visual Studio-lösning (en startmall) som baseras pÄ dina önskemÄl. Den nedladdade lösningen har kommersiella moduler och teman som redan Àr installerade och konfigurerade Ät dig. Du kan ta bort en förinstallerad modul eller lÀgga till en annan modul om du vill. Alla moduler och teman anvÀnder NuGet/NPM-paket som standard.", + "StartDevelopWithTutorials": "Den nedladdade lösningen Àr vÀl arkitekterad och dokumenterad. Du kan börja utveckla din egen företagskod baserad pÄ den genom att följa handledningarna.", + "HowManyProductsExplanation": "Du kan skapa sÄ mÄnga projekt du vill under din aktiva licensperiod; det finns ingen grÀns! Efter att din licens har löpt ut kan du inte skapa nya projekt, men du kan fortsÀtta att utveckla de projekt du har laddat ner och distribuera dem till ett obegrÀnsat antal servrar.", + "ChangingLicenseType": "Kan jag uppgradera min licenstyp senare?", + "LicenseExtendUpgradeDiffExplanation": "FörlÀngning: Genom att förlÀnga/förnya din licens kommer du att fortsÀtta att fÄ premiumsupport och fÄ större eller mindre uppdateringar för modulerna och teman. Dessutom kommer du att kunna fortsÀtta skapa nya projekt. Och du kommer fortfarande att kunna anvÀnda ABP Suite, vilket pÄskyndar din utveckling. NÀr du förlÀnger din licens lÀggs 1 Är till licensens utgÄngsdatum.
Uppgradering: Genom att uppgradera din licens kommer du att befordras till en högre licensplan, vilket gör att du kan fÄ ytterligare fördelar. Kolla in jÀmförelsetabellen för licenser för att se skillnaderna mellan licensplanerna. NÀr du uppgraderar Àndras dÀremot inte licensens utgÄngsdatum! För att förlÀnga licensens slutdatum mÄste du förlÀnga din licens.", + "LicenseRenewalCost": "Vad Àr kostnaden för licensförnyelse efter 1 Är?", + "LicenseRenewalCostExplanation": "Priset för förnyelse (förlÀngning) av standard Team License Àr ${0}, standard Business License Àr ${1} och standard Enterprise License Àr ${2}. Om du redan Àr kund, logga in pÄ ditt konto för att granska den aktuella förnyelseprissÀttningen.", + "HowDoIRenewMyLicense": "Hur förnyar jag min licens?", + "HowDoIRenewMyLicenseExplanation": "Du kan förnya din licens genom att navigera till organisationshanteringssidan. För att dra nytta av vÄra rabatterade priser för tidig förnyelse, se till att du förnyar innan din licens löper ut. Oroa dig inte för att du inte vet nÀr din möjlighet till tidig förnyelse stÀngs; du kommer att fÄ 3 pÄminnelse-e-postmeddelanden innan din prenumeration löper ut. Vi skickar dem 30 dagar, 7 dagar och 1 dag före utgÄngen.", + "IsSourceCodeIncluded": "Omfattar min licens kÀllkoden för pro-modulerna och teman?", + "IsSourceCodeIncludedExplanation1": "Beror pÄ vilken licenstyp du har köpt:", + "IsSourceCodeIncludedExplanation2": "Team: Din lösning anvÀnder moduler och teman som NuGet- och NPM-paket. Den inkluderar inte deras kÀllkod. PÄ sÄ sÀtt kan du enkelt uppgradera dessa moduler och teman nÀr en ny version Àr tillgÀnglig. Du kan dock inte fÄ kÀllkoden för dessa moduler och teman.", + "IsSourceCodeIncludedExplanation3": "Business/Enterprise: Utöver Team-licensen kan du ladda ner kÀllkoden för alla moduler eller teman du behöver. Du kan till och med ta bort NuGet/NPM-paketreferenserna för en viss modul och lÀgga till dess kÀllkod direkt i din lösning för att Àndra den helt.", + "IsSourceCodeIncludedExplanation4": "

Att inkludera kÀllkoden för en modul i din lösning ger dig maximal frihet att anpassa den modulen. Det kommer dock inte att vara möjligt att automatiskt uppgradera modulen nÀr en ny version slÀpps.

Ingen av licenserna inkluderar kÀllkoden för ABP Suite och ABP Studio, vilket Àr externa verktyg som genererar kod Ät dig och hjÀlper din utveckling.

Kolla in sidan Planer och priser för andra skillnader mellan licenstyperna.

<", + "ChangingDevelopers": "Kan jag Àndra de registrerade utvecklarna för min organisation i framtiden?", + "ChangingDevelopersExplanation": "Förutom att lÀgga till nya utvecklare till din licens kan du ocksÄ Àndra befintliga utvecklare (du kan ta bort en utvecklare och lÀgga till en ny pÄ samma plats) utan nÄgon extra kostnad.", + "WhatHappensWhenLicenseEnds": "Vad hÀnder nÀr min licensperiod upphör?", + "discountForYears": "{0}% rabatt för {1} Är", + "WhenShouldIRenewMyLicense": "NÀr ska jag förnya min licens?", + "WhenShouldIRenewMyLicenseExplanation": "Om du förnyar din licens inom {3} dagar efter att din licens har löpt ut, kommer följande rabatter att tillÀmpas: Teamlicens {0}; Företagslicens {1}; Enterprise-licens {2}. Men om du förnyar din licens efter {3} dagar efter licensens utgÄngsdatum, kommer förnyelsepriset att vara detsamma som licensens inköpspris och det kommer inte att finnas nÄgon rabatt pÄ din förnyelse.", + "TrialPlan": "Har du en testplan?", + "DoYouAcceptBankWireTransfer": "Accepterar ni banköverföringar?", + "DoYouAcceptBankWireTransferExplanation": "Ja, vi accepterar banköverföringar.
NÀr du har skickat licensavgiften via banköverföring, skicka ditt kvitto och önskad licenstyp till accounting@volosoft.com.
VĂ„r internationella bankkontoinformation:", + "HowToUpgrade": "Hur uppgraderar man befintliga applikationer nĂ€r en ny version finns tillgĂ€nglig?", + "DatabaseSupport": "Vilka databassystem stöds?", + "UISupport": "Vilka UI-ramverk stöds?", + "Supported": "Stödd", + "UISupportExplanation": "ABP Framework Ă€r i sig sjĂ€lvt agnostiskt och kan fungera med alla anvĂ€ndargrĂ€nssnitt. Startmallar, modul-anvĂ€ndargrĂ€nssnitt och teman implementerades dock inte för alla anvĂ€ndargrĂ€nssnittsramverk. Kolla in GĂ„ igĂ„ng-dokumentet för den uppdaterade listan över anvĂ€ndargrĂ€nssnittsalternativ.", + "MicroserviceSupport": "Stödjer den microservice-arkitekturen?", + "WhereCanIDownloadSourceCode": "Var kan jag ladda ner kĂ€llkoden?", + "ComputerLimitation": "Hur mĂ„nga datorer kan en utvecklare logga in pĂ„ nĂ€r han utvecklar ABP?", + "ComputerLimitationExplanation": "Vi tillĂ„ter specifikt {0} datorer per individ/licensierad utvecklare. NĂ€r det finns ett behov för en utvecklare att utveckla ABP-baserade produkter pĂ„ en tredje maskin, ska ett e-postmeddelande skickas till license@abp.io dĂ€r situationen förklaras, och vi kommer sedan att göra lĂ€mplig tilldelning i vĂ„rt system.", + "RefundPolicy": "Har ni nĂ„gon Ă„terbetalningspolicy?", + "RefundPolicyExplanation": "Du kan begĂ€ra Ă„terbetalning inom 30 dagar efter ditt licensköp. Licenstyperna Business och Enterprise har alternativ för nedladdning av kĂ€llkod; dĂ€rför ger vi en Ă„terbetalning pĂ„ 60 % inom 30 dagar för Business- och Enterprise-licenser. Dessutom görs inga Ă„terbetalningar för förnyelser och andra licensköp.", + "HowCanIRefundVat": "Hur kan jag Ă„terbetala moms?", + "HowCanIRefundVatExplanation1": "Om du gjorde betalningen med 2Checkout kan du Ă„terbetala momsen via ditt 2Checkout-konto:", + "HowCanIRefundVatExplanation2": "Logga in pĂ„ ditt 2Checkout-konto", + "HowCanIRefundVatExplanation3": "Leta upp rĂ€tt order och tryck pĂ„ \"Återbetala försenad moms\" (ange ditt momsregistreringsnummer)", + "HowCanIGetMyInvoice": "Hur kan jag fĂ„ min faktura?", + "HowCanIGetMyInvoiceExplanation": "Det finns 2 betalningsgateways för att köpa en licens: Iyzico och 2Checkout. Om du köper din licens via 2Checkout-gatewayen skickar den PDF-fakturan till din e-postadress; kolla in 2Checkout-fakturering. Om du köper via Iyzico-gatewayen, med en anpassad inköpslĂ€nk eller via en banköverföring, kommer vi att förbereda och skicka din faktura. Du kan begĂ€ra eller ladda ner din faktura frĂ„n sidan för organisationshantering. Innan du kontaktar oss för fakturan, kontrollera din organisationshanteringssida!", + "Forum": "Forum", + "PrivateTicket": "Privat biljett", + "PrivateTicketExplanation": "Enterprise License inkluderar Ă€ven en privat support med e-post och Ă€rendehanteringssystem.", + "AbpSuiteExplanation1": "Med ABP Suite kan du skapa webbsidor pĂ„ bara nĂ„gra minuter. Det Ă€r ett globalt .NET Core-verktyg som kan installeras frĂ„n kommandoraden.", + "AbpSuiteExplanation2": "Den kan skapa en ny ABP-lösning och generera CRUD-sidor frĂ„n databasen till frontend. För teknisk översikt se dokumentet", + "FastEasy": "Snabbt och enkelt", + "AbpSuiteExplanation3": "Med ABP Suite kan du enkelt skapa CRUD-sidor. Du behöver bara definiera din entitet och dess egenskaper och lĂ„ta resten gĂ„ till ABP Suite Ă„t dig! ABP Suite genererar all nödvĂ€ndig kod för din CRUD-sida pĂ„ nĂ„gra sekunder. Den stöder Angular, MVC och Blazor anvĂ€ndargrĂ€nssnitt.", + "RichOptions": "Rika alternativ", + "AbpSuiteExplanation4": "ABP Suite stöder flera anvĂ€ndargrĂ€nssnittsalternativ som Razor Pages och Angular. Det stöder ocksĂ„ flera databaser som MongoDB och alla databaser som stöds av EntityFramework Core (MS SQL Server, Oracle, MySql, PostgreSQL och andra leverantörer...).", + "AbpSuiteExplanation5": "Det som Ă€r bra Ă€r att du inte behöver oroa dig för dessa alternativ. ABP Suite förstĂ„r din projekttyp och genererar koden för ditt projekt och placerar den genererade koden pĂ„ rĂ€tt plats i ditt projekt.", + "AbpSuiteExplanation6": "ABP Suite genererar kĂ€llkoden för Entity, Repository, Application Service, Code First Migration, JavaScript/TypeScript och CSHTML/HTML och Ă€ven nödvĂ€ndiga grĂ€nssnitt. ABP Suite genererar ocksĂ„ koden enligt Best Practices för programvaruutveckling, sĂ„ du behöver inte oroa dig för den genererade kodens kvalitet.", + "AbpSuiteExplanation7": "Eftersom du har kĂ€llkoden för byggstenarna i den genererade CRUD-sidan i rĂ€tt applikationslager kan du enkelt Ă€ndra kĂ€llkoden och lĂ€gga till din egen anpassade affĂ€rslogik i den genererade koden.", + "CrossPlatform": "Plattformsoberoende", + "AbpSuiteExplanation8": "ABP Suite Ă€r byggt med .NET Core och Ă€r plattformsoberoende. Den körs som en webbapplikation pĂ„ din lokala dator. Du kan köra den pĂ„ Windows, Mac och Linux", + "OtherFeatures": "Andra funktioner", + "OtherFeatures1": "Uppdaterar enkelt NuGet- och NPM-paket pĂ„ din lösning.", + "OtherFeatures2": "Återskapar redan genererade sidor frĂ„n början.", + "OtherFeatures3": "Skapar nya lösningar", + "ThanksForCreatingProject": "Ditt projekt har skapats framgĂ„ngsrikt!", + "HotToRunSolution": "Hur kör du din lösning?", + "HotToRunSolutionExplanation": "I dokumentet Kom igĂ„ng kan du lĂ€sa om hur du konfigurerar och kör din lösning.", + "GettingStarted": "Komma igĂ„ng", + "WebAppDevTutorialExplanation": "I handledningsdokumentet för utveckling av webbapplikationer finns ett exempel pĂ„ utveckling steg för steg.", + "Document": "Dokument", + "UsingABPSuiteToCURD": "AnvĂ€nda ABP Suite för generering av CRUD-sidor och verktyg", + "SeeABPSuiteDocument": "Kolla in ABP Suite-dokumentet för att lĂ€ra dig anvĂ€ndningen av ABP Suite.", + "SeeModulesDocument": "Se sidan med moduler för en lista över alla PRO-moduler.", + "Pricing": "PrissĂ€ttning", + "PricingExplanation": "VĂ€lj de egenskaper och funktioner som ditt företag behöver idag. Uppgradera enkelt nĂ€r ditt företag vĂ€xer.", + "Team": "Team", + "Business": "Företag", + "Enterprise": "Företag", + "Custom": "Anpassad", + "IncludedDeveloperLicenses": "Inkluderade utvecklarlicenser", + "CustomLicenceOrAdditionalServices": "Behöver du en anpassad licens eller ytterligare tjĂ€nster?", + "CustomOrVolumeLicense": "Anpassad licens eller volymlicens", + "LiveTrainingSupport": "Utbildning och support i realtid", + "AndMore": "och mer", + "AdditionalDeveloperLicense": "Ytterligare licens för utvecklare", + "ProjectCount": "ProjektrĂ€kning", + "AllProModules": "Alla proffsmoduler", + "AllProThemes": "Alla proffsteman", + "AllProStartupTemplates": "Alla proffsmallar för nystartade företag", + "SourceCodeOfAllModules": "KĂ€llkod för alla moduler", + "SourceCodeOfAllThemes": "KĂ€llkod för alla teman", + "PerpetualLicense": "Evig licens", + "UnlimitedServerDeployment": "ObegrĂ€nsad serverdistribution", + "YearUpgrade": "1 Ă„rs uppgradering", + "YearPremiumForumSupport": "1 Ă„rs premiumsupport för forum", + "ForumSupportIncidentCountYear": "Antal incidenter för forumstöd/Ă„r", + "PrivateTicketEmailSupport": "Privat support via biljett och e-post", + "BuyNow": "Köp nu", + "PayViaAmexCard": "Hur kan jag betala med mitt AMEX-kort?", + "PayViaAmexCardDescription": "Standardbetalningsgatewayen \"Iyzico\" kan neka vissa AMEX-kreditkort pĂ„ grund av sĂ€kerhetsĂ„tgĂ€rder. I detta fall kan du betala via den alternativa betalningsgatewayen \"2Checkout\".", + "InvalidReCaptchaErrorMessage": "Det uppstod ett fel vid verifiering av reCAPTCHA. VĂ€nligen försök igen.", + "YourCompanyName": "Ditt företagsnamn", + "FirstName": "Förnamn", + "LastName": "Efternamn", + "YourFirstName": "Ditt förnamn", + "YourLastName": "Ditt efternamn", + "SpecialOffer": "Specialerbjudande", + "SpecialOfferMessage": "Skynda dig! Priserna gĂ€ller under en begrĂ€nsad tid.", + "DiscountRequest": "BegĂ€ran om rabatt", + "DiscountRequestDescribeCustomerQuestion": "Vilken av följande beskrivningar stĂ€mmer in pĂ„ dig?", + "DiscountRequestStudentEmailMessage": "E-postadressen mĂ„ste innehĂ„lla \"edu\".", + "DiscountRequestDeveloperCount": "Hur mĂ„nga utvecklare Ă€r ni?", + "DiscountRequestDeveloperCountExceedMessage": "Vi erbjuder inte rabatterade licenser för företag som har fler Ă€n {0} utvecklare.", + "DiscountRequestOrganizationName": "Företagets/organisationens/skolans namn", + "Website": "Webbplats", + "GithubUsername": "AnvĂ€ndarnamn för GitHub", + "PhoneNumber": "Telefonnummer", + "DescribeABPCommercialUsage": "Beskriv det projekt som du planerar att utveckla baserat pĂ„ APB Commercial", + "DiscountRequestCertifyInformationMessage": "Jag intygar att alla uppgifter Ă€r sanningsenliga och korrekta.", + "DiscountRequestReceived": "Vi har mottagit din begĂ€ran om rabatt.", + "DiscountRequestStatusMessage": "Vi kommer att svara dig efter att ha kontrollerat den information du har lĂ€mnat.", + "MVCOrRazorPages": "MVC (Razor Pages)", + "Angular": "Angular", + "Blazor": "Blazor", + "New": "Nya", + "MongoDB": "MongoDB", + "EBookDDD": "E-bok DomĂ€nstyrd design", + "Page": "Sidan", + "DoYouAgreePrivacyPolicy": "Jag samtycker till Terms & Conditions och Privacy Policy.", + "VolosoftMarketingInformationMessage": "Jag vill ha information, tips och erbjudanden om Solutions for Businesses and Organizations och andra produkter och tjĂ€nster frĂ„n Volosoft.", + "VolosoftSharingInformationMessage": "Jag vill att Volosoft ska dela min information med utvalda partners sĂ„ att jag kan fĂ„ relevant information om deras produkter och tjĂ€nster.", + "StartFree": "Starta gratis", + "FreeTrial": "Gratis provperiod", + "AcceptsMarketingCommunications": " Ja, jag vill gĂ€rna fĂ„ ABP-relaterade marknadsföringsnyheter.", + "PurposeOfUsage": "Syfte med anvĂ€ndningen", + "Choose": "- VĂ€lj -", + "CompanyOrganizationName": "Företagets/organisationens namn", + "StartTrial": "Starta min kostnadsfria testperiod", + "ContactUsQuestions": "Kontakta oss om du har nĂ„gra frĂ„gor", + "TrialActivatedWarning": "En anvĂ€ndare har endast rĂ€tt till 1 gratis provperiod. Du har redan anvĂ€nt din provperiod.", + "ActivationRequirement": "Du Ă€r bara ett steg frĂ„n att starta din provperiod.
Efter att ha kontrollerat din information aktiverar vi din licens. NÀr din licens Àr aktiverad skickar vi ett e-postmeddelande till {0}. Oroa dig inte, den hÀr processen kommer inte att ta lÄng tid!", + "SaveAndDownload": "Spara och ladda ner", + "CompanyNameValidationMessage": "Företagsnamnet Àr för lÄngt!", + "AddressValidationMessage": "Adressen Àr för lÄng!", + "TaxNoValidationMessage": "TAX/VAT Nej Àr för lÄngt!", + "NotesValidationMessage": "AnteckningsfÀltet Àr för lÄngt!", + "CheckYourBillingInfo": "Du kan bara skapa din faktura en gÄng! Kontrollera din faktureringsinformation innan du skapar din faktura.", + "StartYourFreeTrial": "Starta din kostnadsfria testperiod", + "TrialLicenseModelInvalidErrorMessage": "Ett av följande fÀlt Àr ogiltigt: Landsnamn, Företagsstorlek, Bransch eller Syfte med anvÀndning.", + "Trial": "RÀttegÄng", + "Purchased": "Köpte", + "PurchaseNow": "Köp nu", + "PurchaseTrialLicenseMessage": "Din licens utgÄngsdatum Àr {0}.
Om du vill fortsĂ€tta anvĂ€nda de projekt som du skapade under din kostnadsfria testperiod mĂ„ste du Ă€ndra licensnycklarna i dina appsettings.secrets.json-filer. HĂ€r Ă€r din licensnyckel:", + "TrialLicenseExpireMessage": "Du anvĂ€nder en testlicens och din testlicens upphör att gĂ€lla den {0}.", + "TryForFree": "Prova gratis", + "TrialLicenseExpiredInfo": "Din testlicensperiod har löpt ut!", + "DowngradeLicensePlan": "Kan jag nedgradera till en lĂ€gre licensplan i framtiden?", + "LicenseTransfer": "Kan en licens överföras frĂ„n en utvecklare till en annan?", + "UserOwnerDescription": "Organisationens \"Ă€gare\" Ă€r administratör för detta konto. Han/hon hanterar organisationen genom att köpa licenser och tilldela utvecklare. En \"Ă€gare\" kan inte skriva kod i ABP-projekten, kan inte ladda ner ABP-exempelprojekten och kan inte stĂ€lla frĂ„gor pĂ„ supportwebbplatsen. Om du vill göra allt detta mĂ„ste du ocksĂ„ lĂ€gga till dig sjĂ€lv som utvecklare.", + "UserDeveloperDescription": "\"Utvecklarna\" kan skriva kod i ABP-projekten, ladda ner ABP:s exempelprojekt och stĂ€lla frĂ„gor pĂ„ supportwebbplatsen. Å andra sidan kan \"utvecklarna\" inte hantera den hĂ€r organisationen.", + "RemoveCurrentUserFromOrganizationWarningMessage": "Du tar bort dig sjĂ€lv frĂ„n din egen organisation. Du kommer inte lĂ€ngre att kunna hantera den hĂ€r organisationen, bekrĂ€ftar du det?", + "RenewExistingOrganizationOrCreateNewOneMessage": "Du kan förnya licensen för din organisation (er) genom att klicka pĂ„ nedanstĂ„ende \"FörlĂ€ng nu\"-knapp (ar) och dĂ€rmed kan du förlĂ€nga licensens utgĂ„ngsdatum med 1 Ă„r. Om du fortsĂ€tter till kassan kommer du att ha en ny organisation. Vill du fortsĂ€tta med en ny organisation?", + "PurchaseTrialOrganizationOrCreateNewOneMessage": "Du har en testlicens. För att köpa din testlicens klickar du pĂ„ knappen Köp nu. Om du fortsĂ€tter till kassan kommer du att ha en ny organisation. Vill du fortsĂ€tta med en ny organisation?", + "ExtendNow": "FörlĂ€nga / Förnya", + "CreateNewOrganization": "Skapa en ny organisation", + "RenewLicenseEarly": "Om jag förnyar min licens tidigt, kommer jag att fĂ„ hela Ă„ret?", + "RenewLicenseEarylExplanation": "NĂ€r du förnyar din licens före licensens utgĂ„ngsdatum kommer 1 Ă„r att lĂ€ggas till licensens utgĂ„ngsdatum. Om din licens t.ex. löper ut den {0}-06-06 och du förnyar den den {0}-01-01, kommer din nya licens att löpa ut den {1}-06-06.", + "OpenSourceWebApplication": "Webbapplikation med öppen kĂ€llkod", + "CompleteWebDevelopment": "En komplett webbutveckling", + "ABPFrameworkDescription": "ABP Framework Ă€r en komplett infrastruktur för att skapa moderna webbapplikationer genom att följa de bĂ€sta metoderna för mjukvaruutveckling och konventioner.", + "CommunityDescription": "Dela dina erfarenheter av ABP-ramverket!", + "PreBuiltApplication": "Förbyggd applikation", + "DatabaseProviders": "Databasleverantörer", + "UIFrameworks": "Ramverk för anvĂ€ndargrĂ€nssnitt", + "UsefulLinks": "AnvĂ€ndbara lĂ€nkar", + "Platform": "Plattform", + "MicroserviceArchitectureExplanation": "Det hĂ€r Ă€r en komplett lösningsarkitektur som bestĂ„r av flera applikationer, API-gateways, mikrotjĂ€nster och databaser för att bygga en skalbar mikrotjĂ€nstlösning med den senaste tekniken.", + "BusinessLogic": "AffĂ€rslogik", + "DataAccessLayer": "DataĂ„tkomstskikt", + "Monolith": "Monolit", + "ModularArchitectureExplanation": "Denna startup-mall ger en skiktad, modulĂ€r och DDD-baserad lösningsarkitektur för att bygga en ren och underhĂ„llbar kodbas.", + "Bs5Compatible": "Professionellt tema som Ă€r kompatibelt med Bootstrap 5, perfekt för din administratörswebbplats.", + "LeptonXTheme": "LeptonX tema", + "LeptonXDark": "LeptonX Mörk", + "LeptonXLight": "LeptonX Ljus", + "LeptonXSemiDark": "LeptonX Halvmörk", + "BuiltOnBs5Library": "Byggd pĂ„ Bootstrap 5-biblioteket", + "FullyCompatibleWithBs5": "100% kompatibel med Bootstrap 5 HTML-struktur och CSS-klasser", + "ResponsiveAndMobileCompatible": "Responsiv, mobilkompatibel, RTL-stöd", + "ProvidesStylesForDatatables": "TillhandahĂ„ller stilar för datatabeller", + "MultipleLayoutOptions": "Flera layoutalternativ", + "EasilyInstallAndUpgrade": "Enkel installation och uppgradering", + "SupportForum": "Forum för support", + "TrustedBy": "Betrodda av", + "OurPricing": "VĂ„r prissĂ€ttning", + "Plans": "Planer", + "NameSurname": "Namn Efternamn", + "LicenceType": "Typ av licens", + "LicenseDiscountWarning": "DENNA RABATTSIDA ANVÄNDER STANDARD RABATTKOD OCH FÖR VOLOSOFT UTVECKLARE. INKÖPSLÄNKAR NEDAN FUNGERAR INTE.", + "DiscountedLicenseExplanation": "Dessa licenspriser Ă€r avsedda för smĂ„ nystartade företag, enskilda utvecklare, studenter, ideella organisationer och projekt!", + "General": "AllmĂ€nt", + "Development": "Utveckling", + "Payment": "Betalning", + "WatchExplainerVideo": "LĂ„t oss trĂ€ffas! Titta pĂ„ förklarande video", + "LightDarkAndSemiDarkThemes": "Ljus, mörk och halvmörk", + "LeptonXThemeExplanation": "Lepton Theme kan Ă€ndra ditt tema enligt dina systeminstĂ€llningar.", + "PRO": "PRO", + "YourAccountDetails": "Dina kontouppgifter", + "OrganizationName": "Organisationens namn", + "AddDevelopers": "LĂ€gg till utvecklare", + "StartDevelopment": "Starta utveckling", + "CreateAndRunApplicationUsingStartupTemplate": "LĂ€r dig hur du skapar och kör en ny webbapplikation med hjĂ€lp av ABP:s startmall.", + "CommunityDescription2": "abp.io/community Ă€r en plats dĂ€r mĂ€nniskor kan dela ABP-relaterade artiklar. Sök efter artiklar, handledningar, kodprover, fallstudier och trĂ€ffa mĂ€nniskor som Ă€r i samma spĂ„r som du.", + "UseABPSuiteExplanation": "AnvĂ€nd ABP Suite för att ladda ner kĂ€llkoden för modulerna och temana.", + "ManageModulesWithSuite": "Du kan ocksĂ„ hantera dina ABP-moduler med Suite.", + "LearnHowToInstallSuite": "LĂ€r dig hur du installerar och anvĂ€nder ABP Suite.", + "SeeLess": "Se mindre", + "LayeredSolutionStructure": "Struktur med flera lager av lösningar", + "LayeredSolutionStructureExplanation": "Lösningen Ă€r uppbyggd i lager baserat pĂ„ principer och mönster för domĂ€ndriven design för att isolera affĂ€rslogiken frĂ„n infrastruktur och integrationer och för att maximera underhĂ„ll och Ă„teranvĂ€ndning av koden. ABP Framework tillhandahĂ„ller redan abstraktioner, basklasser och guider för att verkligen implementera DDD för din applikation.", + "MultipleUIOptionsExplanation": "Vi Ă€lskar olika sĂ€tt att skapa anvĂ€ndargrĂ€nssnittet. Den hĂ€r startup-lösningen ger tre olika alternativ för anvĂ€ndargrĂ€nssnitt för din affĂ€rsapplikation.", + "MultipleDatabaseOptions": "Flera databasalternativ", + "MultipleDatabaseOptionsExplanation": "Du har tvĂ„ alternativ för databasleverantörer (förutom att du kan anvĂ€nda bĂ„da i en och samma applikation). AnvĂ€nd Entity Framework Core för att arbeta med alla relationsdatabaser och anvĂ€nd eventuellt Dapper nĂ€r du behöver skriva lĂ„gnivĂ„frĂ„gor för bĂ€ttre prestanda. MongoDB Ă€r ett annat alternativ om du behöver anvĂ€nda en dokumentbaserad NoSQL-databas. Även om dessa leverantörer Ă€r vĂ€lintegrerade, abstraherade och förkonfigurerade kan du faktiskt interagera med alla databassystem som du kan anvĂ€nda med .NET.", + "ModularArchitectureExplanation2": "Modularitet Ă€r en förstklassig medborgare i ABP-plattformen. Alla applikationsfunktionaliteter Ă€r uppdelade i vĂ€lisolerade valfria moduler. Startlösningen levereras redan med de grundlĂ€ggande ABP-modulerna förinstallerade. Du kan ocksĂ„ skapa dina egna moduler för att bygga ett modulĂ€rt system för din egen applikation.", + "MultiTenancyForSaasBusiness": "Multi-tenancy för ditt SaaS-företag", + "MultiTenancyForSaasBusinessExplanation": "Lösningen har konfigurerats fullt ut för att stödja system med flera hyresgĂ€ster. Det gör det möjligt för hyresgĂ€sterna att dela eller ha sina egna databaser med on-the-fly databasskapande och migrationssystem.", + "MicroserviceStartupSolution": "Microservice Startup-lösning", + "MicroserviceArchitectureExplanation2": "Du kan skaffa det till ditt nĂ€sta microservice-system för att dra nytta av den förbyggda baslösningen och destillerade erfarenheten.", + "PreIntegratedTools": "Förintegrerad med populĂ€ra verktyg", + "PreIntegratedToolsExplanation": "Lösningen Ă€r redan integrerad i branschens standardverktyg och -tekniker, medan du alltid kan Ă€ndra dem och integrera dem med dina favoritverktyg.", + "SingleSignOnAuthenticationServer": "Server för autentisering med enkel inloggning", + "SingleSignOnAuthenticationServerExplanation": "Lösningen har en autentiseringsserverapplikation som anvĂ€nds av de andra applikationerna som en server för enkel inloggning med API-Ă„tkomsthanteringsfunktioner. Den Ă€r baserad pĂ„ implementeringen Openiddict.", + "WebAppsWithGateways": "2 webbappar med 2 API-gateways", + "WebAppsWithGatewaysExplanation": "Lösningen innehĂ„ller tvĂ„ webbapplikationer som var och en har en dedikerad API-gateway (BFF - Backend For Frontend-mönster).", + "BackOfficeApplication": "Back Office-applikation", + "BackOfficeApplicationExplanation": "Den faktiska webbapplikationen för ditt system, med flera alternativ för anvĂ€ndargrĂ€nssnitt. Du kan skapa alla typer av affĂ€rsapplikationer.", + "LandingWebsite": "Landningswebbplats", + "LandingWebsiteExplanation": "En generisk landningsplats/publik webbplats som kan anvĂ€ndas för flera Ă€ndamĂ„l, t.ex. för att presentera ditt företag, sĂ€lja dina produkter osv.", + "ABPFrameworkEBook": "Mastering ABP Framework e-bok", + "MasteringAbpFrameworkEBookDescription": "IngĂ„r i din kommersiella licens", + "LicenseTypeNotCorrect": "Licenstypen Ă€r inte korrekt!", + "Trainings": "Utbildningar", + "ChooseTrainingPlaceholder": "VĂ€lj utbildning...", + "DoYouNeedTrainings": "Behöver du nĂ„gon av dessa utbildningar?", + "DoYouNeedTraining": "Behöver du {0} utbildning?", + "GetInTouchUs": "Ta kontakt med oss", + "ForMoreInformationClickHere": "För mer information, klicka hĂ€r.", + "ForMoreInformationClickHereByClass": "För mer information, klicka hĂ€r.", + "IsGetOnboardingTraining": "Vill du fĂ„ utbildning i onboarding och utveckling av webbapplikationer?", + "OnboardingWebApplicationDevelopmentTrainingMessage": "För att schemalĂ€gga din utbildningskalender, vĂ€nligen kontakta {0} efter att du har skapat organisationen", + "CustomPurchaseMessage": "För nĂ€sta steg, klicka pĂ„ {0} för att kontakta oss.", + "Note": "Notera", + "AdditionalNote": "Ytterligare anmĂ€rkning", + "OnboardingTrainingFaqTitle": "Har du en ABP onboarding-utbildning?", + "OnboardingTrainingFaqExplanation": "Ja, vi har ABP Training Services som hjĂ€lper dig att snabbt komma igĂ„ng med ditt ABP-projekt. Du kommer att lĂ€ra dig om ABP frĂ„n en medlem i ABP:s kĂ€rnteam och du kommer att fĂ„ de fĂ€rdigheter som krĂ€vs för att starta ditt ABP-projekt. I onboarding-utbildningen förklarar vi hur du stĂ€ller in din utvecklingsmiljö, installerar de nödvĂ€ndiga verktygen och skapar en fullt fungerande CRUD-sida. Utbildningen kommer att vara live och Zoom-applikationen kommer att anvĂ€ndas, men vi Ă€r öppna för att anvĂ€nda andra online-mötesplattformar. SprĂ„ket för utbildningen kommer att vara engelska. Du kan ocksĂ„ stĂ€lla dina frĂ„gor om ABP under sessionerna. En lĂ€mplig tid och ett lĂ€mpligt datum kommer att planeras för bĂ„da parter. För ytterligare information besök utbildningssidan.", + "AddBasket": "LĂ€gg till i korgen", + "SendTrainingRequest": "Skicka förfrĂ„gan om utbildning", + "OnlyEnglishVersionOfThisDocumentIsTheRecentAndValid": "* Den engelska versionen av detta dokument Ă€r den mest aktuella och den engelska versionen ska ha företrĂ€de i alla tvister.", + "Pricing_Page_Title": "PrissĂ€ttning", + "Pricing_Page_Description": "Se de olika licensplanerna för ABP Platform, inklusive kostnadsfria nivĂ„er. Om standardplanerna inte passar, be om en offert. Glöm inte att vi har en 30-dagars pengarna-tillbaka-garanti!", + "Pricing_Page_HurryUp": "Skynda dig!", + "Pricing_Page_BuyLicense": "Köp en licens till 2021 Ă„rs priser fram till den 16 januari!", + "Pricing_Page_ValidForExistingCustomers": "GĂ€ller Ă€ven för befintliga kunder och licensförnyelser.", + "Pricing_Page_Hint1": "I licenspriset ingĂ„r ett visst antal platser för utvecklare. Om du har fler utvecklare kan du alltid köpa ytterligare platser.", + "Pricing_Page_Hint2": "Du kan köpa fler utvecklarlicenser nu eller i framtiden. Licenserna Ă€r platsbaserade, vilket innebĂ€r att du kan överföra en plats frĂ„n en utvecklare till en annan.", + "Pricing_Page_Hint3": "Du kan utveckla ett obegrĂ€nsat antal olika produkter med din licens.", + "Pricing_Page_Hint4": "ABP Suite Ă€r ett verktyg som hjĂ€lper dig att utveckla och förbĂ€ttra din produktivitet. Det stöder generering av CRUD-sidor och skapande av nya projekt.", + "Pricing_Page_Hint5": "Du kan anvĂ€nda alla de förbyggda modulerna i dina applikationer.", + "Pricing_Page_Hint6": "Du kan anvĂ€nda alla de förbyggda temana i dina applikationer.", + "Pricing_Page_Hint7": "En startmall Ă€r en Visual Studio-lösning som hjĂ€lper dig att komma igĂ„ng med ditt projekt. Alla grundlĂ€ggande moduler lĂ€ggs till och förkonfigureras Ă„t dig.", + "Pricing_Page_Hint8": "Mastering ABP Framework e-bok förklarar hur man implementerar .NET-lösningar med bĂ€sta praxis. Den sĂ€ljs pĂ„ Amazon.com, och du kan ladda ner boken gratis med din licens.", + "Pricing_Page_Hint9": "Du kan ladda ner kĂ€llkoden för alla moduler. Du kanske vill lĂ€gga till kĂ€llkoden i din lösning för att göra radikala Ă€ndringar eller bara behĂ„lla den för dig sjĂ€lv av sĂ€kerhetsskĂ€l.", + "Pricing_Page_Hint10": "Licenserna Ă€r livstidsbaserade. Det innebĂ€r att du kan fortsĂ€tta att utveckla din applikation för alltid. TillgĂ„ng till den senaste versionen och support beviljas inom licensperioden (1 Ă„r om du inte förnyar den).", + "Pricing_Page_Hint11": "Inga begrĂ€nsningar för driftsĂ€ttning! Du kan distribuera till sĂ„ mĂ„nga servrar som du vill, inklusive molntjĂ€nster eller lokalt.", + "Pricing_Page_Hint12": "Du kan uppdatera moduler, teman och verktyg till den senaste versionen inom din aktiva licensperiod. NĂ€r din licens löper ut mĂ„ste du förnya den för att fortsĂ€tta att fĂ„ uppdateringar för buggfixar, nya funktioner och förbĂ€ttringar.", + "Pricing_Page_Hint13": "Du kan fĂ„ premiumsupport i ett Ă„r (du kan förnya din licens för att förlĂ€nga den).", + "Pricing_Page_Hint14": "Team- och Business-licenser har en grĂ€ns för antal incidenter/frĂ„gor. Om du köper ytterligare utvecklarlicenser ökar incidentgrĂ€nsen med {0} (för Team-licensen) eller {1} (för Business-licensen) per utvecklare.", + "Pricing_Page_Hint15": "Endast Enterprise License inkluderar privat support. Du kan skicka ett e-postmeddelande direkt till ABP-teamet eller stĂ€lla frĂ„gor pĂ„ abp.io/support/questions med ett privat biljettalternativ. De privata Ă€rendena Ă€r inte synliga för allmĂ€nheten.", + "Pricing_Page_Hint16": "Du kan ladda ner kĂ€llkoden för alla ABP-teman. Du kanske vill lĂ€gga till kĂ€llkoden i din lösning för att göra radikala Ă€ndringar eller bara behĂ„lla den för dig sjĂ€lv av sĂ€kerhetsskĂ€l.", + "Pricing_Page_Testimonial_1": "ABP Commercial gjorde det möjligt för SC Ventures att leverera en bankklassad SaaS-plattform med silodatabas med flera hyresgĂ€ster pĂ„ 9 mĂ„nader för att stödja leverantörskedjans kundfordringar / leverantörsskulder för finansiering av fakturor med betydande vĂ€rde frĂ„n flera integrerade ankare. ABP:s modularitet gjorde det möjligt för teamet att leverera pĂ„ rekordtid, klara alla VAPT och driftsĂ€tta den containeriserade mikrotjĂ€nststacken via fullstĂ€ndig CI/CD och pipelines till produktion.", + "Pricing_Page_Testimonial_2": "Vi ser vĂ€rdet av att anvĂ€nda ABP Commercial för att minska omkostnaderna för kundanpassade utvecklingsprojekt. Teamet kan förena kodmönstret i olika projektströmmar. Vi ser mer potential i ramverket för att vi ska kunna bygga nya funktioner snabbare Ă€n tidigare. Vi litar pĂ„ att vi stĂ€ndigt kommer att se vĂ€rdet av att utnyttja ABP Commercial.", + "Pricing_Page_Testimonial_3": "Vi Ă€lskar ABP. Vi behöver inte skriva allt frĂ„n grunden. Vi utgĂ„r frĂ„n out-of-the-box-funktioner och fokuserar bara pĂ„ det vi verkligen behöver skriva. Dessutom Ă€r ABP vĂ€larkitekterat och koden Ă€r av hög kvalitet med fĂ€rre buggar. Om vi hade varit tvungna att skriva allt vi behövde pĂ„ egen hand hade vi kanske fĂ„tt lĂ€gga ner flera Ă„r. Ytterligare en sak vi gillar Ă€r att den nya versionen, problemfixningen eller förbĂ€ttringen kommer ut vĂ€ldigt snart, varannan vecka. Vi vĂ€ntar inte för lĂ€nge.", + "Pricing_Page_Testimonial_4": "ABP Commercial Ă€r en fantastisk produkt som jag skulle rekommendera. Kommersiella produkter till marknaden för vĂ„ra kunder i en enda konfigurerbar plattform. Den starthjĂ€lp som ramverket och verktygen ger alla team Ă€r vĂ€rd varenda krona. ABP Commercial var det som passade bĂ€st för vĂ„ra behov.", + "Pricing_Page_Testimonial_5": "ABP Framework Ă€r inte bara ett ramverk, utan ocksĂ„ en guide för projektutveckling/hantering, eftersom det ger utbildning i DDD, GenericRepository, DI, Microservice och Modularity. Även om du inte kommer att anvĂ€nda sjĂ€lva ramverket kan du utveckla dig sjĂ€lv med abp.io/docs som Ă€r vĂ€l och professionellt förberedda (OpenIddict, Redis, Quartz etc.). Eftersom mĂ„nga saker Ă€r förbyggda förkortar det projektutvecklingstiden avsevĂ€rt (t.ex. inloggningssida, undantagshantering, datafiltrering, seeding, revisionsloggning, lokalisering, automatisk API-kontroller etc.) Som ett exempel frĂ„n vĂ„r applikation har jag anvĂ€nt Local Event Bus för lagerstyrning. SĂ„ jag kan hantera orderrörelser genom att skriva lagerhanterare. Det Ă€r underbart att inte förlora tid för CreationTime, CreatorId. De fylls i automatiskt.", + "Pricing_Page_Testimonial_6": "ABP Framework Ă€r ett bra ramverk men det tar tid att förstĂ„ de olika lager, klasser och bibliotek som det anvĂ€nder (sĂ€rskilt ABP). Jag tillbringade mycket tid med att lĂ€sa kodbasen, men ABP Commercial sparade oss tid nĂ€r vi skapade projektspecialitetsenheterna (AR) och förvaret kopplat till var och en av dem. Jag gillade ocksĂ„ det tillvĂ€gagĂ„ngssĂ€tt som anvĂ€nds i ABP Ă€r mycket moget; vi vet Ă€r baserat pĂ„ DDD och monolit.", + "Pricing_Page_Testimonial_7": "Som ett nystartat företag mĂ„ste vi iterera snabbt och spendera minimal tid pĂ„ standardfunktioner och icke-kĂ€rnfunktioner.\nVĂ„ra ingenjörer strĂ€cker sig frĂ„n mycket erfarna till juniora ingenjörer, och vi behövde en gemensam förstĂ„else och ett sĂ€tt att dela teknisk och domĂ€nkunskap, ABP gjorde det möjligt för oss att göra detta tack vare deras fantastiska guider och dokumentation.\nDet finns saker som vi inte har behövt oroa oss för eftersom de fungerar direkt med ABP.\nABP hjĂ€lpte oss att effektivisera snabb prototyping och utveckling, mindre Ă€n 4 veckor frĂ„n funktionsstart till produktion. Med alla premiumfunktioner som ingĂ„r i licensen har ABP gett oss \"Startup in a Box\" pĂ„ Software Engineering-sidan.", + "Pricing_Page_Testimonial_8": "Jag skulle rekommendera ABP commercial till alla som vill utöka utbudet av produkter som Ă€r tillgĂ€ngliga för sina kunder. Det Ă€r fantastiskt nĂ€r man behöver anvĂ€nda en distribuerad företagsmiljö (Angular, WPF, Win&Linux). Förutom deras produkter Ă€lskar vi deras support, som gör vĂ„rt jobb snabbare och enklare. Vi vet redan att vi har hittat en bra partner för framtiden som kommer att stödja oss i att expandera vĂ„r verksamhet.", + "Pricing_Page_Testimonial_9": "Vi Ă€r ett företag med 2 anstĂ€llda som har varit verksamma i över 20 Ă„r.\nNĂ€r det gĂ€ller vĂ„r erfarenhet av ABP Commercial kontaktades vi av en kund som ville att vi skulle utveckla en ny personalapplikation i en modern miljö för att ersĂ€tta deras 25 Ă„r gamla Access-applikation. Vi bestĂ€mde oss för att gĂ„ över frĂ„n en desktoplösning till en webbaserad lösning.\n\nVid den tidpunkten hade vi mycket liten kunskap om webbapplikationer och .NET, men vi snubblade över ABP Commercial, och med hjĂ€lp av ABP Framework, teknisk dokumentation och ABP Suite kunde vi inte bara utveckla applikationen enligt kundens specifikationer utan ocksĂ„ framgĂ„ngsrikt arbeta i en .NET-miljö inom ett Ă„r.", + "AbpBookDownloadArea_ClaimYourEBook": "Gör ansprĂ„k pĂ„ din Mastering ABP Framework e-bok", + "AddMemberModal_Warning_1": "Om det anvĂ€ndarnamn som du försöker lĂ€gga till inte finns i systemet, be din teammedlem att registrera sig pĂ„ {0} och dela anvĂ€ndarnamnet pĂ„ hans/hennes konto med dig.", + "MyOrganizations_Detail_WelcomeMessage": "VĂ€lkommen till din organisation, {0}", + "MyOrganizations_Detail_OrganizationManagement": "Organisation Förvaltning", + "OrganizationDisplayName": "Organisationens visningsnamn", + "MyOrganizations_Detail_EditDisplayName": "Redigera visningsnamn", + "MyOrganizations_Detail_UpgradeYourLicense": "Uppgradera din licens", + "MyOrganizations_Detail_LicenseStartAndExpiryDate": "Licensens startdatum - utgĂ„ngsdatum", + "MyOrganizations_Detail_OwnerRightInfo": "Du anvĂ€nder {0} av din {1} Ă€gares rĂ€ttigheter.", + "MyOrganizations_Detail_CopyApiKey": "Kopiera nyckeln", + "MyOrganizations_Detail_ApiKeyDescription": "API-nyckeln Ă€r token för PRO-paket som finns pĂ„ {1}.", + "MyOrganizations_Detail_YourPrivateNugetSource": "Din privata NuGet-kĂ€lla Ă€r {0}", + "MyOrganizations_Detail_PrivateNugetSourceWarning": "Detta lĂ€ggs automatiskt till som en feed till din NuGet.Config i din ABP-lösning. Dela inte din privata nyckel med obehöriga anvĂ€ndare!", + "MyOrganizations_Detail_DeveloperSeatInfo": "Du anvĂ€nder {0} av dina {1} platser för utvecklare.", + "NeedMoreSeatsForYourTeam": "Behöver du fler platser för ditt team?", + "MyOrganizations_Detail_PricePerYear": "{0} / per Ă„r", + "MyOrganizations_Detail_PurchaseDeveloperSeats": "Köpa platser för utvecklare", + "Invoices": "Fakturor", + "RequestInvoice": "BegĂ€r faktura", + "OrderNumber": "BestĂ€llningsnummer", + "Products": "Produkter", + "TotalPrice": "Totalt pris", + "ThereIsNoInvoice": "Det finns ingen faktura", + "MyOrganizations_Detail_PaymentProviderInfo": "Om du har köpt din licens via {0} gateway skickas PDF-fakturan till din e-postadress, se {0} fakturering.", + "MyOrganizations_Detail_PayUInfo": "Om du har köpt via Iyzico-gatewayen klickar du pĂ„ knappen \"BegĂ€r faktura\" och fyller i faktureringsinformationen.", + "MyOrganizations_Detail_ConclusionInfo": "Din fakturabegĂ€ran kommer att behandlas inom {0} arbetsdagar.", + "ExtendYourLicense": "FörlĂ€ng din {0} licens", + "PurchaseLicense": "Köp {0} licens", + "DownloadInvoiceModal_DownloadInvoice": "Ladda ner faktura", + "DownloadInvoiceModal_SaveInformationOnlyOnce": "Du kan bara spara din faktureringsinformation en gĂ„ng.", + "InvoiceModal_EnterCompanyName": "Ange ditt juridiska företagsnamn...", + "InvoiceModal_EnterCompanyAddress": "Ange din juridiska företagsadress...", + "InvoiceModal_EnterTaxNumber": "Ange ditt TAX/VAT-nummer om det finns tillgĂ€ngligt...", + "RequestInvoiceModal_EnterNotes": "Ytterligare information för din faktura... Denna anteckning kommer att skrivas i anteckningsavsnittet pĂ„ fakturan.", + "PrePayment_PayWithIyzico": "Du kommer att betala med Iyzico", + "ContinueToCheckout": "FortsĂ€tt till kassan", + "PrePayment_IyzicoRedirectionInfo": "Du kommer att omdirigeras till Iyzico Payment Gateway för att slutföra ditt köp pĂ„ ett sĂ€kert sĂ€tt.", + "PrePayment_IyzicoAcceptVisaAndMasterCard": "Iyzico tar emot Visa och MasterCard.", + "Purchase": "Köp", + "AcceptTermsAndConditions": "Jag har lĂ€st, förstĂ„tt och accepterar integritetspolicy, villkor och EULA.", + "AcceptTermsAndConditionsWarningMessage": "VĂ€nligen acceptera integritetspolicyn och villkoren", + "SelectGatewayToContinue": "VĂ€nligen vĂ€lj en Gateway för att fortsĂ€tta!", + "GatewaySelection_SelectGateway": "VĂ€lj en betalningsportal", + "GatewaySelection_RedirectionMessage": "DĂ€refter kommer du att omdirigeras till den valda betalningsgatewayens webbplats för transaktionen.", + "PaymentSucceed_PaymentSuccessMessage": "Betalning framgĂ„ngsrik", + "PaymentSucceed_ThanksForPurchase": "Tack för ditt köp!", + "PaymentSucceed_CreateYourOrganization": "Skapa din organisation", + "PaymentSucceed_AddMeAsDeveloper": "Jag Ă€r ocksĂ„ utvecklare, lĂ€gg till mig som utvecklare i min organisation.", + "PaymentSucceed_CreateOrganization": "Skapa organisation", + "PaymentSucceed_OrganizationDescription": "En organisation bestĂ„r av utvecklare och Ă€gare. Utvecklarna Ă€r anvĂ€ndare som skriver kod i ABP-projektet och som kommer att dra nytta av webbplatsen {1}. Ägarna Ă€r anvĂ€ndare som tilldelar utvecklarplatser och hanterar licensiering.", + "PaymentSucceed_ViewOrganization": "Klicka hĂ€r för att se organisationen", + "Purchase_TotalAnnualPrice": "TOTALT (Ă„rsavgift)", + "Purchase_TrainingPrice": "Pris för utbildning", + "Purchase_OnboardingTraining": "Live-utbildning i onboarding och utveckling av webbapplikationer", + "TotalDeveloperPrice": "Totalt pris för utvecklare", + "Purchase_PricePerDeveloper": "{0} per utvecklare", + "Purchase_IncludedDeveloperInfo": "{0} {1} ingĂ„r.", + "Purchase_LicenseExtraDeveloperPurchaseMessage": "I {0} licens ingĂ„r {1} utvecklare. Du kan lĂ€gga till ytterligare utvecklare.", + "StartupTemplates_Page_Title": "ABP Startup Mallar", + "StartupTemplates_Page_Description": "Kickstarta ditt nya projekt med ABP:s appmallar! LĂ€mna alla infrastrukturaspekter till ABP och gör det du gör bĂ€st; fokusera pĂ„ ditt arbete...", + "MicroserviceStartupSolutionForDotnet": "Microservice Startup-lösning för .NET", + "MonolithSolutionForDotnet": "Monolitisk (modulĂ€r) lösning för .NET", + "TrainingDetailsHeaderInfo_TrainingHour": "{0} timmar", + "Trainings_Content": "Utbildningens innehĂ„ll", + "Trial_Page_StartYourFreeTrial": "Starta din gratis provperiod.", + "TrialLicenseFeatures": "Du kommer att kunna dra nytta av alla ABP:s kommersiella funktioner", + "TrialPeriodDays": "Du kommer att ha en {0} dagars teamlicens", + "TrialForumSupportIncident": "Du kommer att ha {0} forum support incidenter", + "Contact_Page_Title": "Kontakta oss", + "Contact_Page_Description": "Kontakta oss om du har frĂ„gor om licenser, tillĂ€ggstjĂ€nster, förfrĂ„gningar eller feedback om ABP. Vi Ă€r hĂ€r för att hjĂ€lpa dig!", + "Demo_Page_Title": "Skapa en demo", + "Demo_Page_Description": "Skapa en gratis demo för att se ett exempel pĂ„ en ansökan som skapats med hjĂ€lp av ABP-startmallen. Upprepa inte dig sjĂ€lv för vanliga applikationskrav.", + "Discounted_Page_Title": "Rabatterad prissĂ€ttning", + "Discounted_Page_Description": "VĂ€lj de funktioner och den funktionalitet som ditt företag behöver redan idag. Köp en kommersiell licens och skapa obegrĂ€nsat med projekt", + "Faq_Page_Title": "Vanliga frĂ„gor och svar", + "Faq_Page_Description": "Hitta svar pĂ„ vanliga frĂ„gor om ABP Framework i vĂ„r FAQ-sektion, som tĂ€cker olika Ă€mnen och frĂ„gor.", + "Faq_Page_SwiftCode": "SWIFT-kod", + "Faq_Page_BankName": "Bankens namn", + "Faq_Page_AccountName": "Kontots namn", + "Faq_Page_AccountNumber": "Kontonummer", + "Faq_Page_Currency": "Valuta", + "Faq_Page_VatNumber": "Momsregistreringsnummer", + "Faq_Page_OtherCurrenciesInfo": "För andra valutor, se alla konton", + "ProjectCreatedSuccess_Page_Title": "Ditt projekt skapat", + "ProjectCreatedSuccess_Page_Description": "Ditt ABP-projekt har skapats framgĂ„ngsrikt!", + "Suite_Page_Title": "ABP-svit", + "Suite_Page_Description": "Möt ABP Suite, ett verktyg för snabb applikationsutveckling som ökar produktiviteten och effektiviteten. Skapa CRUD-sidor pĂ„ nĂ„gra minuter!", + "Themes_Page_Title": "ABP Teman", + "Themes_Page_Description": "Utseendet Ă€r viktigt! Vi presenterar LeptonX Theme, ett modernt, anpassningsbart och flexibelt tema som skapar en unik anvĂ€ndarupplevelse.", + "Tools_Page_Title": "ABP Verktyg", + "Tools_Page_Description": "Utforska de verktygslĂ„dor som ABP tillhandahĂ„ller och som ökar utvecklingsproduktiviteten och effektiviserar din utveckling.", + "DeveloperPrice": "Pris för utvecklare", + "AdditionalDeveloperPaymentInfoSection_AdditionalDevelopers": "{0} utvecklare", + "LicenseRemainingDays": "i {0} dagar", + "ExtendPaymentInfoSection_Description": "Genom att förlĂ€nga/förnya din licens kommer du att fortsĂ€tta att fĂ„ premium support. Du kommer ocksĂ„ att kunna fĂ„ större eller mindre uppdateringar för moduler och teman. Du kommer att kunna fortsĂ€tta skapa nya projekt. Och du kommer fortfarande att kunna anvĂ€nda ABP Suite som pĂ„skyndar din utveckling.", + "LicenseRenewalPrice": "Pris för förnyelse av licens", + "LicensePrice": "Licenspris", + "TrialLicensePaymentInfoSection_Description": "Köp licens: Genom att köpa en licens kommer du att fortsĂ€tta att fĂ„ premium support. Du kommer ocksĂ„ att kunna fĂ„ större eller mindre uppdateringar för moduler och teman. Du kommer att kunna fortsĂ€tta skapa nya projekt. Och du kommer fortfarande att kunna anvĂ€nda ABP Suite som pĂ„skyndar din utveckling.
Se jĂ€mförelsetabellen för licenser för att kontrollera skillnaderna mellan licenstyperna.", + "SelectTargetLicense": "VĂ€lj mĂ„llicens", + "UpgradePaymentInfoSection_ExtendMyLicenseForOneYear": "Ja, förlĂ€nga min licens utgĂ„ngsdatum med 1 Ă„r.", + "UpgradePaymentInfoSection_WantToExtendLicense": "Vill du förlĂ€nga din licens med ytterligare 1 Ă„r?", + "UpgradePaymentInfoSection_UpgradingWillNotExtendLicense": "Uppgradering kommer inte att förlĂ€nga licensens utgĂ„ngsdatum!", + "UpgradePaymentInfoSection_LicenseUpgradeDescription": "Genom att uppgradera din licens kommer du att bli befordrad till en högre licenstyp, vilket gör att du kan fĂ„ ytterligare fördelar. Se jĂ€mförelsetabellen för licenser för att kontrollera skillnaderna mellan licenstyperna.", + "Welcome_Page_UseSameCredentialForCommercialWebsites": "AnvĂ€nd samma autentiseringsuppgifter för bĂ„de abp.io och abp.io/support/questions.", + "WatchCrudPagesVideo": "Titta pĂ„ videon \"Skapa CRUD-sidor med ABP Suite\"!", + "WatchGeneratingFromDatabaseVideo": "Titta pĂ„ videon \"ABP Suite: Generera CRUD-sidor frĂ„n befintliga databastabeller\" Video!", + "WatchTakeCloserLookVideo": "Titta pĂ„ videon \"Ta en nĂ€rmare titt pĂ„ kodgenerering: ABP Suite\" Video!", + "ConfirmedEmailAddressRequiredToStartTrial": "Du mĂ„ste ha en bekrĂ€ftad e-postadress för att kunna starta en testlicens.", + "EmailVerificationMailNotSent": "E-postverifiering mail kunde inte skickas.", + "GetConfirmationEmail": "Klicka hĂ€r för att fĂ„ ett verifieringsmejl om du inte har fĂ„tt det tidigare.", + "WhichLicenseTypeYouAreInterestedIn": "Vilken licenstyp Ă€r du intresserad av?", + "DontTakeOurWordForIt": "Ta inte vĂ„rt ord för det...", + "BlazoriseLicense": "MĂ„ste vi köpa en Blazorise-licens?", + "ExtendPaymentInfoSection_DeveloperPrice": "{0}x Ytterligare utvecklare", + "ExtendPaymentInfoSection_DiscountRate": "Rabatt {0}%.", + "TotalNetPrice": "Totalt nettopris", + "EFCore": "Entity Framework Core", + "All": "Alla", + "Mvc": "MVC", + "DataBaseProvider": "Dataleverantör", + "UIFramework": "Ramverk för anvĂ€ndargrĂ€nssnitt", + "LeptonXThemeForDashboard": "LeptonX Theme för din Admin Dashboard av", + "AbpPlatform": "ABP-plattform", + "YouDeserveGoodUXUI": "Du förtjĂ€nar ett bra UI och ett bĂ€ttre UX. LeptonX Theme by ABP Ă€r hĂ€r för att tjĂ€na det.", + "ViewLiveDemo": "Visa demo för live-tema", + "GetLeptonX": "Skaffa LeptonX nu", + "SeeLeptonXDocumentation": "Se LeptonX dokumentation", + "SeeLeptonDocumentation": "Se Lepton Dokumentation", + "SimplifiedMenu": "Förenklad meny", + "SimplifiedMenuDescription": "Du kan enkelt hitta den sida du letar efter genom att filtrera i menyn", + "YourFavoritePages": "Dina favoritsidor inom rĂ€ckhĂ„ll", + "YourFavoritePagesDescription": "LĂ€gg enkelt till eller ta bort sidan frĂ„n favoriter genom att klicka pĂ„ stjĂ€rnikonen i det övre högra hörnet av sidan.", + "BreadCrumbs": "Breadcrumb för sömlös vĂ€xling", + "BreadCrumbsDescription": "Med Breadcrumb kan du vĂ€xla till sidorna pĂ„ samma nivĂ„ med ett klick, Ă€ven nĂ€r vĂ€nstermenyn Ă€r stĂ€ngd, och det fungerar pĂ„ surfplattor och mobiler!", + "YourMenu": "Din meny som du vill ha den", + "YourMenuDescription": "Anpassa de direktklickbara ikonerna och rullgardinsmenyerna i anvĂ€ndarmenyn som du vill. AnvĂ€ndarmenyn Ă€r helt anpassningsbar efter dina behov", + "RtlSupport": "RTL-stöd för ditt sprĂ„k", + "RtlSupportDescription": "LeptonX Theme stöder RTL för ditt sprĂ„k. SprĂ„kalternativen finns i instĂ€llningsmenyn sĂ„ att du kan Ă€ndra sprĂ„k.", + "YourColors": "Dina fĂ€rger i grĂ€nssnittet för din adminpanel", + "YourColorsDescription": "LeptonX Theme fungerar enligt dina systeminstĂ€llningar och har alternativ för dashboard light theme, dashboard dark theme och dashboard semi-dark theme.", + "ArrangeContentWidth": "Ordna enkelt bredden pĂ„ ditt innehĂ„ll", + "ArrangeContentWidthDescription": "Ändra enkelt bredden pĂ„ din innehĂ„llsyta.", + "LeptonXCompatibleWith": "LeptonX Theme Ă€r kompatibelt med", + "MobileResponsiveTemplate": "Mobil responsiv mall", + "MobileResponsiveTemplateDescription1": "FĂ„ tillgĂ„ng till LeptonX adminpanel frĂ„n vilken enhet du vill.", + "MobileResponsiveTemplateDescription2": "Den Ă€r utformad för att du enkelt ska kunna anvĂ€nda den i alla dina enheter. Den Ă€r responsiv pĂ„ mobila enheter och surfplattor.", + "TopMenuLayoutOption": "Alternativ för layout av toppmeny", + "TopMenuLayoutOptionDescription1": "Om du vill konfigurera din webbplats med samma adminpanel Ă€r det möjligt att göra det med LeptonX Theme!", + "TopMenuLayoutOptionDescription2": "Prova bara LeptonX toppmenylayout för att fĂ„ det att hĂ€nda!", + "EasilyCustomizable": "LĂ€tt att anpassa till ditt varumĂ€rkes fĂ€rger", + "EasilyCustomizableDescription1": "Du kan anpassa LeptonX-temat med bara nĂ„gra fĂ„ SCSS-variabler. Ingen Ă„sidosĂ€ttning, ingen extra CSS-belastning!", + "EasilyCustomizableDescription2": "Med LeptonX kan du ordna din adminpanel precis som du vill.", + "IndependentLayout": "Oberoende layout och innehĂ„llsyta", + "IndependentLayoutDescription1": "LeptonX:s layoutinfrastruktur utformades helt separat frĂ„n innehĂ„llet.", + "IndependentLayoutDescription2": "Detta innebĂ€r att du fritt kan utforma ditt projekt med en annan innehĂ„llsstruktur Ă€n Bootstrap om du vill.", + "MostUsedLibraries": "De mest anvĂ€nda biblioteken integrerade med LeptonX", + "MostUsedLibrariesDescription1": "LeptonX innehĂ„ller dina mest anvĂ€nda bibliotek. Det gör att du enkelt kan anvĂ€nda bibliotek som ApexCharts, DataTables, DropZone, FullCalender, JSTree, Select2 och Toastr.", + "MostUsedLibrariesDescription2": "LeptonX stöder ocksĂ„ MVC Angular och Blazor-specifika bibliotek.", + "CreateAndCustomize": "Skapa och anpassa de sidor du behöver pĂ„ nĂ„gra sekunder med LeptonX anpassade sidor", + "CreateAndCustomizeDescription": "Genom att anvĂ€nda LeptonX Theme fĂ„r du ocksĂ„ tillgĂ„ng till mĂ„nga fĂ€rdiga HTML-sidor. Dessa inkluderar mĂ„nga sidor som inloggningssida, blogg, FAQ, prenumerationslista, faktura, prissĂ€ttning och filhantering.", + "LeptonThemeForAdmin": "Lepton Theme för din adminpanel genom att", + "LeptonThemeForAdminDescription": "Lepton Theme Ă€r fortfarande tillgĂ€ngligt och kommer att underhĂ„llas. Om du vill byta till LeptonX Theme som Lepton Theme-anvĂ€ndare kan du se dokumentationen för att lĂ€ra dig hur du gör.", + "LeptonCompatibleWith": "Lepton Theme Ă€r kompatibelt med", + "BlackFridayDiscount": "Black Friday-rabatt", + "UpgradePaymentInfoSection_DeveloperPrice": "{0} för {1} ytterligare utvecklare", + "Upgrade": "Uppgradering", + "Renewal": "Förnyelse", + "UpgradePaymentInfoSection_LicensePrice": "{0} licens", + "UpgradePaymentInfoSection_LicenseRenewalPrice": "Förnyelse av licens", + "Total": "Totalt", + "SupportPolicyFaqTitle": "Vilken Ă€r er supportpolicy?", + "TotalDevelopers": "Totalt {0} utvecklare", + "CustomPurchaseExplanation": "SkrĂ€ddarsydd för dina specifika behov", + "WhereDidYouHearAboutUs": "Var har du hört talas om oss?", + "Twitter": "Twitter", + "Facebook": "Facebook", + "Youtube": "YouTube", + "Google": "Google", + "Github": "GitHub", + "Friend": " FrĂ„n en vĂ€n", + "Other": "Övriga", + "WhereDidYouHearAboutUs_explain": "Ange ...", + "DeletingMemberWarningMessage": "\"{0}\" kommer att tas bort frĂ„n listan över utvecklare. Om du vill kan du tilldela denna tomma plats till en annan utvecklare senare.", + "AdditionalInfo": "Om antalet platser för utvecklare överstiger dina krav kan du minska dem. Du kan skicka e-post till info@abp.io för att ta bort nĂ„gra av dina utvecklarplatser. Om du rensar bort oanvĂ€nda utvecklarplatser minskar kostnaden för licensförnyelse. Om du vill kan du Ă„terköpa ytterligare utvecklarplatser inom din aktiva licensperiod. Observera att eftersom det finns {0} utvecklare i det hĂ€r licenspaketet kan du inte minska detta antal.", + "LinkExpiredErrorMessage": "LĂ€nken du försöker komma Ă„t har gĂ„tt ut.", + "ExpirationDate": "UtgĂ„ngsdatum", + "SpringCampaignDiscount": "Rabatt pĂ„ vĂ„rkampanjen", + "WhyUseAbpIoPlatform": "Varför ska jag anvĂ€nda ABP Platform istĂ€llet för att skapa en ny lösning frĂ„n grunden?", + "WhyUseAbpIoPlatformFaqExplanation": "Se den sidan för en detaljerad förklaring av varför anvĂ€ndning av ABP Platform har en betydande fördel jĂ€mfört med att göra allt sjĂ€lv.", + "EulaPageTitle": "Licensavtal för slutanvĂ€ndare (EULA)", + "PrivacyPolicyPageTitle": "Integritetspolicy - Cookiepolicy", + "TermsConditionsPageTitle": "Villkor och anvisningar", + "TrainingsPageTitle": "Utbildningspaket", + "ModulesPageTitle": "ABP-moduler", + "ModulesPageDescription": "Utöka och anpassa din applikation med ABP:s modulĂ€ra arkitektur, som ger flexibilitet och skalbarhet.", + "Volo.AbpIo.Commercial:040001": "API-Ă„tkomstnyckeln Ă€r felaktig.", + "GetLepton": "Skaffa Lepton nu", + "MyOrganizations_Detail_LicenseStartDate": "Startdatum", + "MyOrganizations_Detail_LicenseExpiryDate": "UtgĂ„ngsdatum", + "BlazoriseSupport": "Hur fĂ„r jag Blazorise-licensnyckeln och support frĂ„n Blazorise-teamet?", + "BlazoriseSupportExplanation": "Följ stegen nedan för att fĂ„ support frĂ„n Blazorise-teamet och fĂ„ din Blazorise-licensnyckel:", + "BlazoriseSupportExplanation1": "Registrera dig för ett nytt konto pĂ„ blazorise.com/support/register med samma e-postadress som ditt abp.io-konto. LĂ€mna posten \"Licensnyckel\" tom. Det mĂ„ste vara samma e-postadress som ditt e-postkonto pĂ„ abp.io.", + "BlazoriseSupportExplanation2": "Verifiera din e-postadress genom att kolla din e-postlĂ„da. Kontrollera din skrĂ€ppostlĂ„da om du inte ser ett e-postmeddelande i din inkorg!", + "BlazoriseSupportExplanation3": "Logga in pĂ„ Blazorise supportwebbplats pĂ„ blazorise.com/support/login.", + "BlazoriseSupportExplanation4": "Om du har en aktiv ABP Commercial License kommer du ocksĂ„ att ha en Blazorise PRO-licens. Du kan fĂ„ din Blazorise-licensnyckel pĂ„ blazorise.com/support/user/manage/license.", + "BlazoriseSupportExplanation5": "Du kan stĂ€lla dina frĂ„gor pĂ„ supportwebbplatsen och generera en produkttoken för din applikation.", + "AbpLiveTrainingPackages": "ABP Live utbildningspaket", + "Releases": "UtgĂ„vor", + "ReleasesDescription": "Den hĂ€r sidan innehĂ„ller detaljerad information om varje release. Du kan se alla stĂ€ngda pull requests för en specifik release. För övergripande milstolpsutvecklingar kan du kolla in sidan med kortfattade releaseanteckningar.", + "ReleaseDate": "Utgivningsdatum", + "Labels": "Etiketter", + "PreRelease": "Förhandsrelease", + "AllTypes": "Alla typer", + "Enhancement": "FörbĂ€ttring", + "Bug": "Insekt", + "Feature": "Funktion", + "AllUIs": "Alla anvĂ€ndargrĂ€nssnitt", + "MVC": "MVC", + "BlazorServer": "Blazor Server", + "MAUI": "MAUI", + "HowItWorks_Page_Title": "Hur fungerar det?", + "HowItWorks_Page_Description": "FörstĂ„ hur ABP Framework fungerar med detaljerad dokumentation, inklusive guider och bĂ€sta praxis.", + "HowItWorks_Description1": "ABP utökar .NET-plattformen. SĂ„ allt du kan göra med en vanlig .NET-lösning Ă€r redan möjligt med ABP. Det gör det enkelt att komma igĂ„ng med en lĂ„g inlĂ€rningskurva.", + "HowItWorks_Description2": "NĂ€r du vĂ€l har börjat lĂ€ra dig och anvĂ€nda ABP-funktionerna kommer det att bli mycket roligare Ă€n nĂ„gonsin att utveckla din programvara.", + "HowItWorks_Description3": "Den hĂ€r sidan förklarar i princip hur du anvĂ€nder ABP Platform som .NET-utvecklare.", + "CreateANewSolution_Description1": "Allt börjar med att skapa en ny ABP-integrerad .NET-lösning.", + "StartWithStartupTemplates": "Starta en av de förbyggda mallarna för startup-lösningar", + "SimpleMonolithApplicationTemplate": "Enkel mall för monolitisk applikation", + "LayeredApplicationTemplate": "ModulĂ€r monolitisk applikationsmall", + "MicroserviceSolutionTemplate": "Mall för mikroservicelösning", + "CreateEmptySolutionAndUseAbp": "Eller skapa en ny tom .NET-lösning och installera ABP NuGet & NPM packages sjĂ€lv.", + "CreatingSolutionWithMultipleOptions": "Det finns flera alternativ för anvĂ€ndargrĂ€nssnitt och databas nĂ€r du skapar en ny lösning.", + "UIFrameworkOptions": "Alternativ för anvĂ€ndargrĂ€nssnitt", + "DotnetSolutionWithoutDependency": "Nu har du en vanlig .NET-lösning i din lokala dator som inte Ă€r beroende av nĂ„gon molnplattform eller extern tjĂ€nst.", + "CheckTheDocumentForDetails": "Du kan kontrollera {1} dokumentet för detaljer.", + "UIAndDatabaseIndependent": "ABP kan fungera med alla anvĂ€ndargrĂ€nssnitt och alla databasleverantörer som stöds av .NET.\n Dessa anvĂ€ndargrĂ€nssnitt och databasleverantörer Ă€r dock förintegrerade och vĂ€ldokumenterade.", + "InstallAbpModules": "Installera ABP-moduler", + "DevelopYourSolution": "Utveckla din lösning", + "DeployAnywhere": "Distribuera var som helst", + "InstallAbpModule_Description1": "ABP Ă€r ett modulĂ€rt ramverk för applikationsutveckling. Mallarna för startup-lösningar levereras redan med de viktigaste modulerna installerade.\n Men det finns fler applikationsmoduler som du kanske vill anvĂ€nda i din lösning.", + "InstallAbpModule_Description2": "Varje modul bestĂ„r av ett fĂ„tal NuGet- och NPM-paket och har ett installationsdokument. ABP Studio gör det mesta av arbetet automatiskt, sedan konfigurerar eller finjusterar du modulen manuellt baserat pĂ„ dess dokumentation.", + "DevelopYourSolution_Description1": "ABP:s infrastruktur gör att du kan fokusera pĂ„ din egen affĂ€rskod genom att automatisera det repetitiva arbetet och tillhandahĂ„lla förbyggd infrastruktur och applikationsfunktioner.", + "DevelopYourSolution_Description2": "I följande kodblock kan du se hur ABP sömlöst integreras i din kod och automatiserar de repetitiva uppgifterna Ă„t dig.", + "DevelopYourSolution_Description3": "Även i detta kortkodsblock gör ABP en hel del saker Ă„t dig.", + "DevelopYourSolution_Description4": "Det ger basklasser för att tillĂ€mpa konventioner, som\n dependency injection. Generiska\n repository tjĂ€nster ger ett bekvĂ€mt sĂ€tt att\n sĂ€tt att interagera med databasen. Deklarativ\n auktorisering arbetar med ett finjusterat behörighetssystem.", + "DevelopYourSolution_Description5": "ABP automatiserar helt och hĂ„llet\n arbetsenhet (för databasanslutning och transaktionshantering),\n undantagshantering,\n validering\n och auditloggning. Det ger mĂ„nga fler byggstenar för att förenkla dina dagliga utvecklingsuppgifter och fokusera pĂ„ din egen kod medan du skapar produktionsklara\n applikationer.", + "DevelopYourSolution_Description6": "Du kan förestĂ€lla dig hur lĂ„ngt och komplicerat det kodblocket kan bli om du skulle göra allt manuellt.", + "SuiteCrudGenerationInFewSeconds": "Förutom att handkoda din lösning kan du skapa fullt fungerande avancerade CRUD-sidor pĂ„ nĂ„gra minuter med hjĂ€lp av ABP Suite-verktyget. Det genererar koden till din lösning, sĂ„ att du kan finjustera den utifrĂ„n dina anpassade krav.", + "DeployAnywhere_Description1": "I slutĂ€ndan har du en ren .NET-lösning. Du kan distribuera din lösning till din egen server, till en molnplattform, till Kubernetes eller var du vill. Du kan distribuera till sĂ„ mĂ„nga servrar som du vill. ABP Ă€r ett agnostiskt verktyg för driftsĂ€ttningsmiljöer.", + "ExpertiseAbpFramework": "Expertis ABP", + "ExpertiseAbpFramework_Description1": "Vill du gĂ„ lĂ€ngre Ă€n grunderna och fĂ„ expertis med ABP Platform?", + "FreeDownload": "Fri nedladdning", + "HavingTrouble": "Har du problem?", + "HavingTrouble_Description1": "Har du problem med att utveckla din lösning? Vi finns hĂ€r för dig! AnvĂ€nd ABP:s supportplattform\n eller skicka ett e-postmeddelande för att fĂ„ hjĂ€lp direkt frĂ„n Core ABP-teammedlemmarna.", + "WeAreHereToHelp_Description1": "Du kan blĂ€ddra bland vĂ„ra hjĂ€lpĂ€mnen eller söka i vanliga frĂ„gor,\n eller sĂ„ kan du stĂ€lla en frĂ„ga till oss genom att anvĂ€nda kontaktformulĂ€ret.", + "OtherModules": "Övriga moduler", + "OtherModules_Description1": "Konto, Audit Logging, Chatt, CMS Kit, Filhantering, FormulĂ€r, GDPR, SprĂ„khantering och mer...", + "HowItWorks_DatabaseProviderOptions": "Alternativ för databasleverantör", + "SeeFAQ": "Se vanliga frĂ„gor", + "ReleaseLogs": "Release Loggar", + "ReleaseLogs_Tag": "{0} Loggar för frislĂ€ppande", + "ReleaseLogs_Pr": "Pull Request #{0} - {1}", + "NoLabels": "Inga etiketter", + "DoesTheSubscriptionRenewAutomatically": "Förnyas abonnemanget automatiskt?", + "DoesTheSubscriptionRenewAutomaticallyExplanation": "ABP-plattformen har inte en faktureringsmodell för automatisk förnyelse. DĂ€rför kommer din prenumeration inte att förnyas automatiskt i slutet av din licensperiod. Om du vill fortsĂ€tta att ha fördelarna med ABP-plattformen mĂ„ste du förnya den manuellt pĂ„ sidan för organisationshantering. Om du har flera organisationer klickar du pĂ„ knappen \"Hantera\" pĂ„ din organisation som löper ut och klickar sedan pĂ„ knappen \"FörlĂ€ng nu\" för att förnya din licens. Du kanske ocksĂ„ vill ta en titt pĂ„ avsnittet Vad hĂ€nder nĂ€r min licens gĂ„r ut?.", + "ExtraQuestionCreditsFaqTitle": "Kan jag köpa extra poĂ€ng för supportfrĂ„gor?", + "ExtraQuestionCreditsFaqExplanation": "Ja, det kan du göra. För att köpa extra frĂ„gepoĂ€ng, skicka ett e-postmeddelande till info@abp.io med din organisations namn. HĂ€r Ă€r prislistan för de extra frĂ„gekrediterna:
  • 50 frĂ„gor paket $999
  • 25 frĂ„gor paket $625
  • 15 frĂ„gor paket $450
", + "AlreadyBetaTester": "Du har redan gĂ„tt med i betatestarprogrammet.", + "AbpStudio": "ABP Studio", + "AbpStudio_Description": "ABP Studio Ă€r fortfarande under utveckling. Du kan fylla i formulĂ€ret nedan för att bli en av de första anvĂ€ndarna.", + "AbpStudio_Description1": "ABP Studio Ă€r en plattformsoberoende skrivbordsapplikation för ABP-utvecklare.", + "AbpStudio_Description2": "Det Ă€r vĂ€l integrerat i ABP-ramverket och syftar till att tillhandahĂ„lla en bekvĂ€m utvecklingsmiljö för dig genom att automatisera saker, ge insikter om din lösning, vilket gör det mycket enklare att utveckla, köra och distribuera dina lösningar.", + "AbpStudio_ComingSoon": "Kommer snart Planerat datum för betaversion: Q4 av 2023.", + "AbpStudio_PlannedPreviewDate": "Planerat utgivningsdatum för förhandsvisning: Q4 Ă„r 2023.", + "BetaRequest": "Beta förfrĂ„gan", + "CreateNewSolutions": "Skapa nya lösningar", + "CreateNewSolutions_Description1": "Du kan enkelt skapa allt frĂ„n enkla applikationer till modulĂ€ra monolit- eller mikroservicelösningar med mĂ„nga alternativ. Du fĂ„r en fullstĂ€ndig produktionsfĂ€rdig basprogramvarulösning för ditt företag.", + "ArchitectYourSolutions": "Arkitekt för dina lösningar", + "ArchitectYourSolutions_Description1": "Bygg enklare monolitiskt modulĂ€ra och mikrotjĂ€nstbaserade lösningsstrukturer genom att skapa moduler eller tjĂ€nster och upprĂ€tta relationer mellan dem. Du kan ocksĂ„ installera eller avinstallera förbyggda applikationsmoduler.", + "ExploreYourSolution": "Utforska din lösning", + "ExploreYourSolution_Description1": "ABP Studio visar en vy pĂ„ hög nivĂ„ av komponenterna i din lösning och de moduler som din lösning Ă€r beroende av. Du kan utforska entiteter, tjĂ€nster, HTTP API:er och mycket mer utan att behöva öppna din kodbas.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze": "Kör multiapplikations- eller microservice-lösningar pĂ„ ett kick", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description1": "Kör en, flera eller alla tjĂ€nster med ett enda klick. PĂ„ sĂ„ sĂ€tt Ă€r det mycket enkelt att stoppa en tjĂ€nst, köra den i Visual Studio för att testa eller debugga.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description2": "Se en lista över tjĂ€nster, visa HTTP-begĂ€ran i realtid och antal undantag för varje tjĂ€nst.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description3": "Se alla detaljer om alla HTTP-begĂ€randen som kommer till en tjĂ€nst.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description4": "Utforska undantagsdetaljer i realtid i alla tjĂ€nster, filtrera och sök enkelt.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description5": "Visa applikationsloggar, filtrera efter loggnivĂ„ eller sök efter text.", + "RunMultiApplicationOrMicroserviceSolutionsInABreeze_Description6": "BlĂ€ddra genom anvĂ€ndargrĂ€nssnittet i din applikation utan att lĂ€mna solution runner.", + "IntegrateToYourKubernetesCluster": "Integrera med ditt Kubernetes-kluster", + "IntegrateToYourKubernetesCluster_Description1": "Koppla din lokala utvecklingsmiljö till ett lokalt eller avlĂ€gset Kubernetes-kluster, dĂ€r klustret redan kör din mikrotjĂ€nstlösning.", + "IntegrateToYourKubernetesCluster_Description2": "FĂ„ Ă„tkomst till alla tjĂ€nster i Kubernetes med deras tjĂ€nstenamn som DNS, precis som om de körs pĂ„ din lokala dator.", + "IntegrateToYourKubernetesCluster_Description3": "Interceptera vilken tjĂ€nst som helst i det klustret, sĂ„ att all trafik till den intercepterade tjĂ€nsten automatiskt omdirigeras till din tjĂ€nst som körs i din lokala maskin. NĂ€r din tjĂ€nst behöver anvĂ€nda nĂ„gon tjĂ€nst i Kubernetes omdirigeras trafiken tillbaka till klustret, precis som om din lokala tjĂ€nst körs inuti Kubernetes.", + "GetInformed": "Bli informerad", + "Studio_GetInformed_Description1": "LĂ€mna din kontaktinformation för att fĂ„ information och pröva först nĂ€r ABP Studio har lanserats.", + "Studio_GetInformed_Description2": "Planerat utgivningsdatum för förhandsvisning: Q3 Ă„r 2023.", + "ThankYou!": "Tack sĂ„ mycket!", + "SendBetaRequest": "Skicka Beta förfrĂ„gan", + "YouJoinedTheBetaTesterProgram": "Du har gĂ„tt med i betatestarprogrammet för ABP Studio.", + "PricingExplanation2": "30 dagars pengarna tillbaka-garanti - LĂ€s mer", + "MoneyBackGuaranteeText": "* 30-dagars pengarna-tillbaka-garanti pĂ„ alla licenser! 100% Ă„terbetalning pĂ„ Team-, 60% Ă„terbetalning pĂ„ Business- och Enterprise-licenser inom 30 dagar.", + "MobileApplicationStartupTemplates": "Mallar för uppstart av mobilapplikationer", + "MobileApplicationStartupTemplates_Description1": "Integrerade startmallar för mobilapplikationer för dina ABP-projekt.", + "CreatePowerfulLineOfBusinessApplicationsUsingABPMobileStartupTemplates": "Bygg kraftfulla applikationer för olika branscher med hjĂ€lp av ABP Mobile Startup Templates", + "CreatePowerfulLineOfBusinessApplicationsUsingABPMobileStartupTemplates_Description1": "ABP tillhandahĂ„ller tvĂ„ startmallar för mobilapplikationer som implementerats med React Native och .NET MAUI. NĂ€r du skapar din nya ABP-baserade lösning kommer du ocksĂ„ att ha grundlĂ€ggande startapplikationer som Ă€r anslutna till dina backend-API:er.", + "CreatePowerfulLineOfBusinessApplicationsUsingABPMobileStartupTemplates_Description2": "Applikationen har en förbyggd autentiseringstokencykel, stöd för flera sprĂ„k, stöd för flera behörigheter, inloggning, glömt lösenord, profilhantering och en anvĂ€ndarhanteringssida. Du kan lĂ€gga till din egen affĂ€rslogik och anpassa den utifrĂ„n dina krav.", + "TwoFrameworkOptions": "TvĂ„ alternativ för ramverk", + "TwoFrameworkOptions_Description": "ABP tillhandahĂ„ller bĂ„de React Native och .NET MAUI mobila startup-mallar. PĂ„ sĂ„ sĂ€tt kan du vĂ€lja den som bĂ€st passar dina behov. BĂ„da apparna Ă„teranvĂ€nder kod i den högsta graden mellan iOS- och Android-plattformarna.", + "PreIntegratedToYourBackend": "Förintegrerad till din backend", + "PreIntegratedToYourBackend_Description": "ABP Mobile-applikationer Ă€r förintegrerade med dina backend-API:er. Den fĂ„r en giltig autentiseringstoken frĂ„n servern och gör autentiserade förfrĂ„gningar.", + "MultiLanguage": "FlersprĂ„kig", + "MultiLanguage_Description": "Det stöder redan mer Ă€n 10 sprĂ„k ur lĂ„dan. Du kan ocksĂ„ lĂ€gga till ytterligare sprĂ„k.", + "Arabic": "Arabiska", + "Czech": "Tjeckien", + "English": "Engelska", + "Hungarian": "Ungerska", + "Finnish": "Finska", + "French": "Franska", + "Hindi": "Hindi", + "Portuguese": "Portugisiska", + "Italian": "Italienska", + "Russian": "Ryska", + "Slovak": "Slovakien", + "Turkish": "Turkiska", + "EngageAndRetainYourCustomersWithABPMobileApps": "Engagera och behĂ„ll dina kunder med ABP:s mobilappar", + "EngageAndRetainYourCustomersWithABPMobileApps_Description1": "Dina kunder vill kunna hantera sina produkter och prenumerationer var som helst och nĂ€r som helst. Det krĂ€ver att organisationer skapar mobilappar som gör det möjligt för kunderna att uppfylla sina önskemĂ„l snabbt och smidigt.", + "EngageAndRetainYourCustomersWithABPMobileApps_Description2": "Med ABP Mobile apps kan du skapa högkvalitativa native mobilappar för Android och iOS... med en enda kodbas och utan att kompromissa med sĂ€kerhet, kvalitet eller skalbarhet.", + "OneCodeBaseMultipleDevices": "En kodbas Flera enheter", + "OneCodeBaseMultipleDevices_Description": "ABP:s mobilapplikationer Ă€r plattformsoberoende. De Ă€r redo att installeras och köras pĂ„ iOS- och Android-enheter, och de anpassar sig till olika formfaktorer med hjĂ€lp av en enda kodbas. Utvecklare behöver bara skapa anvĂ€ndargrĂ€nssnittet och front-end-koden en gĂ„ng, det finns inget behov av att anpassa koden för varje enhet du vill stödja.", + "ComesWithTheSourceCode": "Levereras med kĂ€llkoden", + "ComesWithTheSourceCode_Description": "Mobilapparna Ă€r försedda med kĂ€llkod. Anpassa enkelt UX/UI för dina appar för att uppfylla riktlinjerna för varumĂ€rkesprofilering.", + "Purchase_OneYearPrice": "1 Ă„r Pris", + "Purchase_DeveloperSeatCount": "Antal platser för utvecklare", + "Purchase_DevelopersAlreadyIncluded": "{0} utvecklare redan inkluderade", + "1Year": "1 Ă„r", + "{0}Years": "{0} Ă„r", + "1YearLicense": "1 Ă„rs licens", + "{0}YearsLicense": "{0} År Licens", + "1AdditionalDeveloper": "1 ytterligare utvecklare", + "{0}AdditionalDevelopers": "{0} Ytterligare utvecklare", + "Discount": "Rabatt ({0}%)", + "TrainingPack": "Utbildningspaket", + "TrainingPackDiscount": "Rabatt pĂ„ utbildningspaket", + "Purchase_OnboardingTraining_Description": "Denna liveutbildning Ă€r giltig för en klass med 8 elever och denna rabatt Ă€r endast giltig nĂ€r den köps med den nya licensen. LĂ€s mer ", + "Purchase_Save": "{0}% Spara {1}", + "RemoveBasket": "Ta bort frĂ„n korgen", + "WhyABPIOPlatform?": "Varför ABP Platform?", + "DocumentAim": "Detta dokument syftar till att besvara den stora frĂ„gan:", + "DocumentAim_Description": "\"Varför ska du anvĂ€nda ABP Platform istĂ€llet för att skapa en ny lösning frĂ„n grunden?\"", + "DocumentAim_Description2": "Dokumentet presenterar utmaningarna med att bygga en modern mjukvarulösning och förklarar hur ABP hanterar dessa utmaningar.", + "CreatingANewSolution": "Skapa en ny lösning", + "CreatingANewSolution_Description": "NĂ€r du ska starta en ny lösning finns det mĂ„nga frĂ„gor du mĂ„ste stĂ€lla dig sjĂ€lv, och du bör lĂ€gga ner mycket tid innan du börjar skriva din allra första affĂ€rskod.", + "CreatingAnEmptySolution": "Skapa en tom lösning", + "THEPROBLEM": "PROBLEMET", + "CreatingAnEmptySolution_THEPROBLEM_Description": "Även att skapa en nĂ€stan tom lösning Ă€r en utmaning;", + "CreatingAnEmptySolution_THEPROBLEM_Description2": "Hur organiserar du din kodbas mellan olika projekt?", + "CreatingAnEmptySolution_THEPROBLEM_Description3": "Vilka Ă€r lagren och hur samverkar de?", + "CreatingAnEmptySolution_THEPROBLEM_Description4": "Hur integrerar ni med tredjepartsbibliotek?", + "CreatingAnEmptySolution_THEPROBLEM_Description5": "Hur stĂ€ller man in automatiserade tester?", + "ABPSOLUTION": "ABP-LÖSNING", + "CreatingAnEmptySolution_ABPSOLUTION_Description": "ABP tillhandahĂ„ller en vĂ€larkitekterad, skiktad och produktionsklar startup-lösning baserad pĂ„ Domain Driven Design-principerna. Lösningen innehĂ„ller ocksĂ„ en förkonfigurerad enhet och integration test -projekt för varje lager.", + "CommonLibraries": "Gemensamma bibliotek", + "CommonLibraries_THEPROBLEM_Description": "Vilka bibliotek bör du anvĂ€nda för att implementera gemensamma krav? Ekosystemet för programvaruutveckling Ă€r mycket dynamiskt, vilket gör det svĂ„rt att hĂ„lla jĂ€mna steg med de senaste verktygen, biblioteken, trenderna och metoderna.", + "CommonLibraries_ABPSOLUTION_Description": "ABP förintegrerar populĂ€ra, mogna och uppdaterade bibliotek i lösningen. Du behöver inte lĂ€gga tid pĂ„ att integrera dem eller fĂ„ dem att kommunicera med varandra. De fungerar som de ska direkt frĂ„n start.", + "UITheme&Layout": "UI Tema & Layout", + "UITheme&Layout_THEPROBLEM_Description": "NĂ€r man tar itu med anvĂ€ndargrĂ€nssnittet uppstĂ„r en rad olika utmaningar. Det handlar bland annat om att lĂ€gga grunden för ett responsivt, modernt och anpassningsbart UI-kit med ett konsekvent utseende och en mĂ€ngd funktioner som navigeringsmenyer, rubriker, verktygsfĂ€lt, sidfötter, widgetar med mera.", + "UITheme&Layout_THEPROBLEM_Description2": "Även om du vĂ€ljer ett fördesignat tema kan det ta flera dagars utveckling att integrera det sömlöst i ditt projekt. Ett ytterligare hinder ligger i att uppgradera sĂ„dana teman. Ofta blir temats HTML/CSS-struktur sammanflĂ€tad med din UI-kod, vilket gör framtida temaförĂ€ndringar eller uppgraderingar till komplicerade uppgifter. Denna sammanvĂ€vning av kod och design komplicerar flexibiliteten att göra justeringar lĂ€ngs linjen.", + "UITheme&Layout_ABPSOLUTION_Description": "ABP erbjuder ett distinkt temasystem som frigör din UI-kod frĂ„n temabegrĂ€nsningar. Teman existerar isolerat, paketerade som NuGet- eller NPM-paket, vilket gör installation eller uppgradering av teman till en frĂ„ga om minuter. Även om du behĂ„ller möjligheten att utveckla ditt eget tema eller integrera ett befintligt, presenterar ABP en samling polerade och moderna teman.", + "UITheme&Layout_ABPSOLUTION_Description2": "Dessutom finns det leverantörer av UI-komponenter som Telerik och DevExpress. Dessa leverantörer tillhandahĂ„ller dock frĂ€mst enskilda komponenter, vilket innebĂ€r att det Ă€r upp till dig att skapa ditt layoutsystem. NĂ€r du arbetar inom ABP-baserade projekt kan du sömlöst införliva dessa bibliotek, pĂ„ samma sĂ€tt som du skulle göra i alla andra projekt.", + "TestInfrastructure_THEPROBLEM_Description": "Att etablera en robust testmiljö Ă€r en tidskrĂ€vande uppgift. Det handlar om att skapa dedikerade testprojekt inom din lösning, noggrant vĂ€lja ut de verktyg som behövs, skapa mocks för tjĂ€nster och databaser, skapa viktiga basklasser och verktygstjĂ€nster för att minimera redundant kod i testerna och ta itu med olika relaterade uppgifter.", + "TestInfrastructure_ABPSOLUTION_Description": "ABP Startup Templates levereras fĂ€rdigutrustade med konfigurerade testprojekt, vilket effektiviserar processen för dig. Det innebĂ€r att du redan frĂ„n dag ett kan börja skriva din första enhets- eller integrationstestkod utan dröjsmĂ„l.", + "CodingStandards&Training": "Kodningsstandarder och utbildning", + "CodingStandards&Training_THEPROBLEM_Description": "NĂ€r du har konfigurerat lösningen för utveckling mĂ„ste du vanligtvis lĂ€ra utvecklarna hur systemet fungerar och hur man bygger det med hjĂ€lp av samma överenskomna metoder. Även om du ger dem utbildning kan det vara svĂ„rt att hĂ„lla dokumentationen uppdaterad. Med tiden kanske varje utvecklare skriver kod pĂ„ sitt eget sĂ€tt, vilket leder till att reglerna för att skriva kod skiljer sig frĂ„n varandra.", + "CodingStandards&Training_ABPSOLUTION_Description": "ABP-lösningen Ă€r redan snyggt organiserad och har tydliga förklaringar. Steg-för-steg-handledningar och guider visar exakt hur du ska arbeta med ett ABP-projekt.", + "KeepingYourSolutionUpToDate": "HĂ„ll din lösning uppdaterad", + "KeepingYourSolutionUpToDate_THEPROBLEM_Description": "NĂ€r du har pĂ„börjat din utveckling mĂ„ste du hĂ„lla reda pĂ„ de nya versionerna av de bibliotek du anvĂ€nder för uppgraderingar och korrigeringar.", + "KeepingYourSolutionUpToDate_ABPSOLUTION_Description": "Vi uppdaterar regelbundet alla paket till de senaste versionerna och testar dem före den stabila utgĂ„van. NĂ€r du uppdaterar ditt ABP-baserade projekt uppgraderas alla dess beroenden till den senaste tekniken.", + "KeepingYourSolutionUpToDate_ABPSOLUTION_Description2": "Abp update CLI-kommandot hittar och uppgraderar automatiskt alla ABP-beroende NuGet- och NPM-paket i en lösning. Med ABP Ă€r det enklare att hĂ„lla sig till de senaste versionerna.", + "DRY": "Upprepa inte dig sjĂ€lv!", + "DRY_Description": "Att skapa en baslösning tar lĂ„ng tid och krĂ€ver god erfarenhet av arkitektur. Men detta Ă€r bara början! NĂ€r du börjar utveckla kommer du sannolikt att behöva skriva massor av repetitiv kod; det skulle vara fantastiskt om allt detta kunde hanteras automatiskt.", + "DRY_Description2": "ABP automatiserar och förenklar upprepningskoden sĂ„ mycket som möjligt genom att följa principen om konvention framför konfiguration. Det begrĂ€nsar dig dock inte nĂ€r du behöver vĂ€xla till manuell vĂ€xel. Kontrollen ligger alltid i dina hĂ€nder.", + "Authentication": "Autentisering", + "Authentication_THEPROBLEM_Description": "Single Sign On, Active Directory / LDAP-integration, OpenIddict-integration, sociala inloggningar, tvĂ„faktorsautentisering, glömt / Ă„terstĂ€llt lösenord, e-postaktivering, ny anvĂ€ndarregistrering, kontroll av lösenordskomplexitet, lĂ„sning av konto vid misslyckade försök, visning av misslyckade inloggningsförsök ... etc. Vi vet att alla dessa generiska krav Ă€r bekanta för dig. Du Ă€r inte ensam!", + "Authentication_ABPSOLUTION_Description": "ABP tillhandahĂ„ller alla dessa standardgrejer förimplementerade för dig som en Ă„teranvĂ€ndbar kontomodul. Du aktiverar och konfigurerar bara det du behöver.", + "CrossCuttingConcerns_THEPROBLEM_Description": "Cross-Cutting Concerns Ă€r den grundlĂ€ggande upprepningslogik som bör implementeras för varje anvĂ€ndningsfall. NĂ„gra exempel;", + "CrossCuttingConcerns_THEPROBLEM_Description2": "Starta transaktioner, genomföra vid framgĂ„ng och rulla tillbaka vid fel.", + "CrossCuttingConcerns_THEPROBLEM_Description3": "Hantera och rapportera undantag, returnera ett korrekt felsvar till klienterna och hantera felfall pĂ„ klientsidan.", + "CrossCuttingConcerns_THEPROBLEM_Description4": "Implementera auktorisering och validering, returnera korrekta svar och hantera dessa pĂ„ klientsidan.", + "CrossCuttingConcerns_ABPSOLUTION_Description": "ABP automatiserar eller förenklar alla vanliga övergripande problem. Du skriver bara kod som Ă€r viktig för din verksamhet, och ABP hanterar resten genom konventioner.", + "ArchitecturalInfrastructure": "Arkitektonisk infrastruktur", + "ArchitecturalInfrastructure_THEPROBLEM_Description": "Du behöver vanligtvis bygga infrastruktur för att implementera din arkitektur pĂ„ rĂ€tt sĂ€tt. Till exempel implementerar du i allmĂ€nhet Repository-mönstret. Du definierar nĂ„gra basklasser för att förenkla och standardisera skapandet av entiteter, tjĂ€nster, controllers och andra objekt.", + "ArchitecturalInfrastructure_ABPSOLUTION_Description": "ABP tillhandahĂ„ller allt detta och mer dĂ€rtill direkt frĂ„n start. Det Ă€r moget och vĂ€ldokumenterat.", + "EnterpriseApplicationRequirements": "Krav pĂ„ företagsapplikationer", + "EnterpriseApplicationRequirements_THEPROBLEM_Description": "Det finns mĂ„nga krav som du upprepade gĂ„nger mĂ„ste implementera i varje affĂ€rsapplikation;", + "EnterpriseApplicationRequirements_THEPROBLEM_Description2": "Detaljerat behörighetssystem och hantering av behörigheter i anvĂ€ndargrĂ€nssnittet baserat pĂ„ roller och anvĂ€ndare.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description3": "Skriva granskningsloggar och entitetshistorik för att spĂ„ra nĂ€r en anvĂ€ndare Ă€ndrar en databaspost.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description4": "Gör dina enheter mjukt raderade, sĂ„ att de markeras som raderade istĂ€llet för att fysiskt raderas frĂ„n databasen och automatiskt filtrera bort raderade enheter i dina frĂ„gor.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description5": "Skapa abstraktioner och omslag för att konsumera dina backend-API:er frĂ„n frontend-koden.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description6": "UppstĂ€llning i kö och utförande av bakgrundsjobb.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description7": "Hantering av flera tidszoner i ett globalt system.", + "EnterpriseApplicationRequirements_THEPROBLEM_Description8": "Delning av validering, lokalisering och auktoriseringslogik mellan server och klient.", + "EnterpriseApplicationRequirements_ABPSOLUTION_Description": "ABP tillhandahĂ„ller en infrastruktur för att enkelt implementera sĂ„dana krav. Återigen behöver du inte spendera din vĂ€rdefulla tid pĂ„ att implementera alla dessa om och om igen.", + "GeneratingInitialCode&Tooling": "Generering av initialkod och verktyg", + "GeneratingInitialCode&Tooling_THEPROBLEM_Description": "Du kommer att bygga mĂ„nga liknande sidor i en typisk webbapplikation. De flesta av dem kommer att utföra liknande CRUD-operationer. Det Ă€r mycket trĂ„kigt och Ă€ven felbenĂ€get att upprepade gĂ„nger skapa sĂ„dana sidor.", + "GeneratingInitialCode&Tooling_ABPSOLUTION_Description": "ABP Suite kan generera en full-stack CRUD-sida för dina enheter pĂ„ nĂ„gra sekunder. Den genererade koden Ă€r skiktad och ren. Alla standardkrav för validering och auktorisering Ă€r implementerade. Dessutom genereras enhetstestklasser. NĂ€r du vĂ€l har fĂ„tt en helt fungerande sida kan du Ă€ndra den enligt dina affĂ€rsbehov.", + "IntegratingTo3rdPartyLibrariesAndSystems": "Integrering med bibliotek och system frĂ„n tredje part", + "IntegratingTo3rdPartyLibrariesAndSystems_THEPROBLEM_Description": "De flesta bibliotek Ă€r utformade pĂ„ lĂ„g nivĂ„ och du mĂ„ste vanligtvis göra en del arbete för att integrera dem pĂ„ rĂ€tt sĂ€tt utan att upprepa samma integrations- och konfigurationskod överallt i din lösning. Anta till exempel att du mĂ„ste anvĂ€nda RabbitMQ för att implementera din distribuerade hĂ€ndelsebuss. Allt du vill göra Ă€r att skicka ett meddelande till en kö och hantera de inkommande meddelandena. Men du mĂ„ste förstĂ„ meddelandemönster, köer och utbytesdetaljer. För att skriva effektiv kod mĂ„ste du skapa en pool för att hantera anslutningar, klienter och kanaler. Du mĂ„ste ocksĂ„ hantera undantag, ACK-meddelanden, Ă„teranslutning till RabbitMQ vid misslyckanden och mer.", + "IntegratingTo3rdPartyLibrariesAndSystems_ABPSOLUTION_Description": "Till exempel abstraherar ABP:s RabbitMQ Distributed Event Bus-integration alla dessa detaljer. Du skickar och tar emot meddelanden utan krĂ„ngel. Behöver du skriva kod pĂ„ lĂ„g nivĂ„? Inga problem, det kan du alltid göra. ABP begrĂ€nsar dig inte nĂ€r du behöver anvĂ€nda lĂ„gnivĂ„funktioner i det bibliotek du anvĂ€nder.", + "WhyNotBuildYourOwnFramework?": "Varför inte bygga ditt eget ramverk?", + "WhyNotBuildYourOwnFramework_THEPROBLEM_Description": "All infrastruktur, Ă€ven pĂ„ det enklaste sĂ€ttet, tar mycket tid att bygga, underhĂ„lla och dokumentera. Den blir större med tiden och det blir svĂ„rt att underhĂ„lla den i din lösning. Att separera dessa i ett Ă„teranvĂ€ndbart projekt Ă€r utgĂ„ngspunkten för att bygga ditt eget interna ramverk.", + "WhyNotBuildYourOwnFramework_THEPROBLEM_Description2": "Att bygga, dokumentera, utbilda och underhĂ„lla ett internt ramverk Ă€r verkligen svĂ„rt. Om du inte har ett erfaret, dedikerat ramverksteam blir ditt interna ramverk snabbt en odokumenterad Ă€ldre kod som ingen lĂ€ngre kan förstĂ„ och underhĂ„lla. Å andra sidan utvecklas dessa ramverk i allmĂ€nhet av en eller tvĂ„ utvecklare i teamet. Och dessa medarbetare hĂ„ller pĂ„ att bli en kunskapssilo. Det Ă€r bra för dem men dĂ„ligt för företaget eftersom de Ă€r projektets enda punkt för misslyckande -SPOF-. NĂ€r de lĂ€mnar företaget gĂ„r projektet dramatiskt ner.", + "WhyNotBuildYourOwnFramework_ABPSOLUTION_Description": "ABP Ă€r ett community-drivet, vĂ€ldokumenterat, moget och generiskt applikationsramverk. Ett team av mycket erfarna utvecklare arbetar hĂ„rt för att hĂ„lla det uppdaterat, lĂ€tt att förstĂ„ och bekvĂ€mt att anvĂ€nda. Att anvĂ€nda ett sĂ„ stabilt ramverk gör att du kan fokusera pĂ„ din egen affĂ€rskod och fĂ„ hjĂ€lp med ramverket frĂ„n experter nĂ€r du behöver det.", + "ArchitecturalInfrastructure_Description": "SaaS-applikationer, modulĂ€ra system eller mikroservicesystem Ă€r de mest anvĂ€nda modellerna för företagsprogramvara. Att bygga sĂ„dana system krĂ€ver inte bara en god förstĂ„else och erfarenhet utan ocksĂ„ en stark mjukvaruinfrastruktur. Annars kommer du att fĂ„ lĂ€gga ner mycket arbete pĂ„ att stödja dessa arkitektoniska detaljer i din kodbas.", + "Modularity_THEPROBLEM_Description": "Att bygga ett verkligt modulĂ€rt system Ă€r inte lĂ€tt! Alla aspekter av systemet (databas, entiteter, API:er, UI-sidor/komponenter) kan delas upp i moduler, och varje modul kan Ă„teranvĂ€ndas utan andra. Den vanliga ASP.NET Core ger inte en sĂ„dan modulĂ€r arkitektur. Om du behöver det bör du tĂ€nka pĂ„ det frĂ„n grunden.", + "Modularity_ABPSOLUTION_Description": "ABP Ă€r skapat för att vara en modulĂ€r struktur för applikationsutveckling. Varje funktion i ramverket Ă€r utvecklad för att vara kompatibel med modularitet. Dokumentation och guider förklarar hur man utvecklar Ă„teranvĂ€ndbara moduler pĂ„ ett standardiserat sĂ€tt.", + "SaaSMultiTenancy": "SaaS / Multi-tenancy", + "SaaSMultiTenancy_THEPROBLEM_Description": "Multi-tenancy Ă€r ett vanligt sĂ€tt att implementera SaaS-system. Att implementera en konsekvent multi-tenant infrastruktur kan dock bli komplicerat.", + "SaaSMultiTenancy_ABPSOLUTION_Description": "ABP tillhandahĂ„ller en komplett infrastruktur för flera hyresgĂ€ster och abstraherar komplexiteten frĂ„n din företagskod. Din applikationskod kommer att vara mestadels multi-tenancy medveten, medan ABP automatiskt isolerar databasen, cache och andra detaljer om hyresgĂ€sterna frĂ„n varandra. Den stöder en enda databas, per hyresgĂ€stdatabas och hybridmetoder. Den konfigurerar korrekt bibliotek som Microsoft Identity och OpenIddict, som normalt inte Ă€r kompatibla med multi-tenancy.", + "Microservices": "MikrotjĂ€nster", + "Microservices_THEPROBLEM_Description": "Att bygga ett mikrotjĂ€nstsystem krĂ€ver mĂ„nga infrastrukturdetaljer: Autentisering och auktorisering av applikationer och mikrotjĂ€nster samt implementering av asynkrona meddelanden och synkrona (Rest/GRPC) kommunikationsmönster mellan mikrotjĂ€nster Ă€r de mest grundlĂ€ggande frĂ„gorna.", + "Microservices_ABPSOLUTION_Description": "ABP tillhandahĂ„ller tjĂ€nster, guider och exempel som hjĂ€lper dig att implementera din microservice-lösning med hjĂ€lp av branschens standardverktyg.", + "Microservices_ABPSOLUTION_Description2": "ABP:s kommersiella licenser gĂ„r till och med ett steg lĂ€ngre och tillhandahĂ„ller en komplett startmall för att kickstarta din mikroservicelösning.", + "PreBuiltModules": "Förbyggda moduler", + "PreBuiltModules_THEPROBLEM_Description": "Alla har vi liknande men lite olika affĂ€rskrav. Men vi mĂ„ste alla uppfinna hjulet pĂ„ nytt eftersom ingen annans kod kan fungera direkt i vĂ„r lösning. De Ă€r alla inbĂ€ddade delar av en större lösning.", + "PreBuiltModules_ABPSOLUTION_Description": "ABP modules tillhandahĂ„ller mĂ„nga Ă„teranvĂ€ndbara applikationsmoduler som betalning, chatt, filhantering, revisionsloggrapportering ... etc. Alla dessa moduler installeras enkelt i din lösning och fungerar direkt. Vi lĂ€gger stĂ€ndigt till fler moduler.", + "PreBuiltModules_ABPSOLUTION_Description2": "Alla moduler Ă€r utformade sĂ„ att de kan anpassas efter dina affĂ€rsbehov. Om du behöver fullstĂ€ndig kontroll kan du ladda ner den fullstĂ€ndiga kĂ€llkoden för alla moduler och anpassa dem helt utifrĂ„n dina specifika affĂ€rskrav.", + "ABPCommunity": "ABP Gemenskap", + "ABPCommunity_Description": "Slutligen, att vara en del av en stor gemenskap dĂ€r alla följer liknande kodningsstilar och principer och delar en gemensam infrastruktur ger kraft nĂ€r du har problem eller behöver hjĂ€lp med designbeslut. Eftersom vi skriver kod pĂ„ liknande sĂ€tt kan vi hjĂ€lpa varandra mycket bĂ€ttre. ABP Ă€r ett community-stöttat projekt med mer Ă€n 10K stjĂ€rnor pĂ„ GitHub.", + "ABPCommunity_Description2": "Det Ă€r lĂ€tt att dela kod eller till och med Ă„teranvĂ€ndbara bibliotek mellan ABP-utvecklare. En kodsnutt som fungerar för dig kommer ocksĂ„ att fungera för andra. Det finns mĂ„nga exempel och handledningar som du direkt kan implementera i din applikation.", + "ABPCommunity_Description3": "NĂ€r du anlitar en utvecklare som tidigare arbetat med ABP-arkitekturen kommer denne omedelbart att förstĂ„ din lösning och pĂ„börja utvecklingen pĂ„ mycket kort tid.", + "WhyAbpIo_Page_Title": "Varför ABP Platform?", + "AbpStudio_Page_Title": "ABP Studio", + "AbpStudio_Page_Description": "Utforska ABP Studio, en integrerad utvecklingsmiljö för ABP Platform, som förbĂ€ttrar din utvecklingsprocess.", + "CampaignInfo": "Köp en ny licens eller förnya din befintliga licens och fĂ„ ytterligare 2 mĂ„nader utan extra kostnad! Detta erbjudande gĂ€ller för alla licensplaner. Se till att du utnyttjar denna tidsbegrĂ€nsade kampanj för att utöka din tillgĂ„ng till premiumfunktioner och uppgraderingar.", + "HurryUpLastDay": "Skynda pĂ„! Sista dagen: {0}", + "CreatingCRUDPagesWithABPSuite": "Skapa CRUD-sidor med ABP Suite", + "MultipleYearDiscount": "Rabatt för flera Ă„r", + "CampaignDiscountText": "Rabatt pĂ„ ny plattform", + "CampaignDiscountName": "Ny plattform", + "CampaignName:BlackFriday": "Svart fredag", + "MultipleOrganizationInfo": "Se alla dina organisationer", + "AbpStudioBetaAccessInfoTitle": "ABP Studio Beta Access", + "AbpStudioBetaAccessInfoText": "Vi Ă€r glada över att kunna dela med oss av beta-versionen av ABP Studio! Den hĂ€r versionen markerar en viktig milstolpe i vĂ„r utvecklingsresa, och vi Ă€r angelĂ€gna om att samla in din feedback för att göra applikationen Ă€nnu bĂ€ttre.", + "YouAreNotAuthorizedToDownloadStudio": "Du Ă€r inte behörig att ladda ner ABP Studio.", + "OrganizationHasNoDefaultCreditCard": "Din organisation har inget standardkreditkort. LĂ€gg till ett kreditkort för din organisation.", + "YouAreNotAuthorizedToPayThisPaymentRequest": "Du Ă€r inte behörig att betala denna betalningsbegĂ€ran.", + "YouAreNotAuthorizedToCreateBillingInfoForThisPaymentRequest": "Du Ă€r inte behörig att skapa faktureringsinformation för denna betalningsbegĂ€ran.", + "OrganizationNotFound": "Organisationen hittades inte.", + "CannotDeleteDefaultCardBecauseAutoRenewalEnabled": "Du kan inte ta bort kortet just nu eftersom funktionen Auto-Renewal Ă€r aktiverad. För att ta bort kortet mĂ„ste du först avaktivera Auto-Renewal.", + "AreYouSureWantToDeleteThisCard": "Är du sĂ€ker pĂ„ att du vill ta bort det hĂ€r kortet?", + "AreYouSureWantToSetThisCardAsDefault": "Är du sĂ€ker pĂ„ att du vill anvĂ€nda det hĂ€r kortet som standard?", + "OrganizationBillingInfoIsNotSuitableForIyzicoPayment": "Din organisations faktureringsinformation Ă€r inte lĂ€mplig för iyzico-betalning.", + "AutomaticRenewal": "Automatisk förnyelse", + "AutomaticRenewal_Description": "Om du förnyar en licens innan den gĂ„r ut fĂ„r du en rabatt pĂ„ upp till 40 %. Med den automatiska förnyelseprocessen kan du förnya din licens utan att förlora denna rabatt, och din utveckling kommer aldrig att avbrytas. Automatisk förnyelse Ă€r endast tillgĂ€nglig för kreditkortsbetalning. Du kan inaktivera automatisk förnyelse nĂ€r som helst genom att gĂ„ till din organisationshanteringssida. ABP sparar inte din kreditkortsinformation, men vĂ„ra globala betalningsgateways sĂ€krar besparingar.", + "CardNotFoundMessage": "Vill du lĂ€gga till ett nytt kort?", + "CardNotFoundTitle": "Kortet hittades inte", + "AutoRenewalEnabled": "Automatisk förnyelse aktiverad", + "AutoRenewalDisabled": "Automatisk förnyelse Avaktiverad", + "PaymentRequestIdIsNotProvided": "BetalningsförfrĂ„gans ID anges inte.", + "PaymentFailedInfo": "TyvĂ€rr, betalningen misslyckades! Detta kan bero pĂ„ otillrĂ€ckliga medel, ogiltigt kreditkortsnummer eller ogiltig pinkod", + "UsedPayment": "Denna betalning har redan anvĂ€nts", + "ManageLicense": "Hantera licens", + "AbpPlatformLeptonXTheme": "LeptonX Theme för din administrativa instrumentpanel av ABP Platform", + "NoActiveLicence": "Du Ă€r inte berĂ€ttigad till denna Ă„tgĂ€rd! Du har ingen aktiv licens.", + "ABPStudioBetaTester": "För att kunna skicka in din begĂ€ran mĂ„ste du logga in", + "ABPStudioBetaAccess": "ABP Studio Beta Access", + "VisitABPStudio": "Besök ABP Studio", + "EditBillingInformation": "Redigera faktureringsinformation", + "Organization": "Organisation", + "E-Book": "E-bok", + "CreditCards": "Kreditkort", + "BillingInformation": "Faktureringsinformation", + "AddNewCreditCard": "LĂ€gg till nytt kreditkort", + "MyOrganizations_LearnMorePlan": "LĂ€s mer om planer pĂ„ prissĂ€ttningssidan", + "AutoLicenseRenewalIsNotEnabled": "Automatisk licensförnyelse Ă€r inte aktiverad.", + "SetAsDefaultPaymentMethod": "Ange som standardbetalningsmetod", + "{0}PerAdditionalDeveloper": "${0} per ytterligare utvecklare", + "CardAlias": "Alias för kort (valfritt)", + "AbpDoesNotSaveYourPaymentDetails_Description": "Betalningsuppgifterna kommer att sparas i {2} sĂ€kerhetsvalv och du kan ta bort lagrade uppgifter nĂ€r som helst. Aktivering av automatisk förnyelse sĂ€kerstĂ€ller att din ABP-prenumeration automatiskt förnyas innan den löper ut, förutsatt att du har ett giltigt kreditkort. Om du avaktiverar automatisk förnyelse mĂ„ste du förnya din prenumeration manuellt. Om du vill fortsĂ€tta din projektutveckling utan avbrott föreslĂ„r vi att du aktiverar alternativet Automatisk förnyelse.", + "AddBillingInformation": "LĂ€gg till faktureringsinformation", + "YouHaveNoCardsSaved": "Kortet Ă€r inte sparat Ă€nnu.", + "CreateCreditCardModal_BillingDetails_Description": "Du mĂ„ste spara dina faktureringsuppgifter för att kunna lĂ€gga till ditt kreditkort.", + "TaxNo": "Skatt Nej", + "CardNumber": "Kortnummer", + "NameOnCard": "Namn pĂ„ kortet", + "BillingDetails": "Faktureringsinformation", + "ThereIsNoDeveloper": "Ingen utvecklare tillagd.", + "CardDetails": "Debit-/Kreditkortsuppgifter", + "YearCantBeNull": "ÅrsfĂ€ltet fĂ„r inte vara tomt.", + "CardHolderName": "Namn pĂ„ kortet", + "ExpireDate": "UtgĂ„ngsdatum", + "DisplayName:ExpireDate": "UtgĂ„ngsdatum", + "DisplayName:CardHolderName": "Namn pĂ„ kortet", + "CreditCardNumberLengthWarning": "Ogiltigt kortnummer", + "ExpirationWarning": "Ogiltigt utgĂ„ngsdatum", + "CreateCreditCardModal_Description": "NĂ€r du sparar ditt betalkort/kreditkort kommer en tillfĂ€llig avgift pĂ„ 1 USD att godkĂ€nnas för verifiering och Ă„terbetalas omedelbart.", + "ReturnOnInvestmentTitle": "Avkastning pĂ„ investeringar.", + "ReduceYourDevelopmentCostsDescription": "Minska dina utvecklingskostnader med mer Ă€n 50 % med ABP Platform.", + "SettingUpTheArchitectureTitle": "UppsĂ€ttning av arkitekturen", + "DoingEverythingFromScratch": "Att göra allt frĂ„n början", + "SettingUpTheArchitecture_Description1": "Organisera kodbas och lösningsstruktur", + "SettingUpTheArchitecture_Description2": "Identifiera, installera och konfigurera viktiga tredjepartsbibliotek", + "SettingUpTheArchitecture_Description3": "UpprĂ€tta infrastruktur för automatiserad integration och enhetstest", + "SettingUpTheArchitecture_Description4": "FaststĂ€lla och dokumentera kodstandarder, utbilda utvecklingsteamet", + "UsingTheABPFramework": "AnvĂ€nda ABP-plattformen", + "UseABPSettingUpTheArchitecture_Description": "AnvĂ€nd ABP:s mallar för startup-lösningar", + "ReduceCostsWithABP": "Minska kostnaderna med ABP genom att", + "ReduceCostsBy": "80 % till 100 %.", + "DesigningTheUserInterfaceTitle": "Utformning av anvĂ€ndargrĂ€nssnittet", + "DesigningTheUserInterface_Description1": "Skapa eller köp ett UI-tema", + "DesigningTheUserInterface_Description2": "Anpassa anvĂ€ndargrĂ€nssnittets tema till lösningen", + "DesigningTheUserInterface_Description3": "Bygga de viktigaste delarna av anvĂ€ndargrĂ€nssnittet (layout, meny, sidhuvud, sidfot med responsiv design)", + "DesigningTheUserInterface_Description4": "Se till att designen Ă€r konsekvent pĂ„ alla applikationssidor", + "UseABPDesigningTheUserInterface_Description": "AnvĂ€nd ABP:s LeptonX UI Theme", + "DevelopingApplicationFeaturesTitle": "Utveckling av applikationsfunktioner", + "DevelopingApplicationFeatures_Description1": "Utveckla din egen affĂ€rslogik", + "DevelopingApplicationFeatures_Description2": "Utveckla varje sida en efter en", + "DevelopingApplicationFeatures_Description3": "Utveckla gemensamma affĂ€rsmoduler sjĂ€lv", + "DevelopingApplicationFeatures_Description4": "Utveckla autentiseringssystemet (enkel inloggning, 2-faktor autentisering, sociala inloggningar, Ă„terstĂ€llning av lösenord, e-postaktivering etc...)", + "DevelopingApplicationFeatures_Description5": "TillĂ€mpa övergripande frĂ„gor i varje anvĂ€ndningsfall (DB-transaktioner, auktorisering, validering, undantagshantering etc.)", + "DevelopingApplicationFeatures_Description6": "Utveckla gemensamma basklasser och nyttotjĂ€nster", + "DevelopingApplicationFeatures_Description7": "Utveckla gemensamma icke-affĂ€rsmĂ€ssiga krav (revisionsloggning, soft-delete, bakgrundsjobb, behörighetssystem etc.)", + "UseABPDevelopingApplicationFeatures_Description1": "Utveckla din egen affĂ€rslogik", + "UseABPDevelopingApplicationFeatures_Description2": "AnvĂ€nd ABP Suite för att automatiskt generera CRUD-liknande sidor", + "UseABPDevelopingApplicationFeatures_Description3": "AnvĂ€nd direkt ABP:s förbyggda gemensamma applikationsmoduler och anpassa dem utifrĂ„n dina unika krav", + "ReduceCostsBy_2": "40-60 procent", + "WhyABPIoPlatform": "Varför ABP Platform?", + "WhyShouldYouUsetheABPIOPlatform": "Varför ska du anvĂ€nda ABP Platform istĂ€llet för att skapa en ny lösning frĂ„n grunden?", + "ExploreMore": "Utforska mer", + "DocumentIntroducesDescription": "Om du vill veta mer om varför du ska anvĂ€nda ABP Platform istĂ€llet för att skapa en ny lösning frĂ„n grunden kan du lĂ€sa följande dokument.", + "ReturnOnInvestmentPageAbout": "PĂ„ den hĂ€r sidan beskrivs de grundlĂ€ggande stegen i utvecklingen av en programvarulösning och hur ABP Platform minskar utvecklingskostnaderna i varje steg.", + "LearnMore": "LĂ€r dig mer", + "ReturnOfInvestment": "Avkastning pĂ„ investeringar", + "ReturnOnInvestment_Description": "LĂ€r dig hur du kan minska dina utvecklingskostnader med mer Ă€n 50 %.", + "PricingDiscount": "Spara", + "PricingTeamTitle": "Team", + "PricingBusinessTitle": "Företag", + "PricingEnterpriseTitle": "Företag", + "SpecialDiscount": "SĂ€rskild rabatt", + "YourOrganizationOverview": "Översikt över din organisation", + "TrainingDetailsHeaderInfo_TrainingHourSingular": "{0} timme", + "ContactPageError": "VĂ€nligen skicka ditt meddelande via e-post till info@abp.io
HĂ€r Ă€r vad du skrev :", + "GoBack": "GĂ„ tillbaka", + "HereWhatYouWrote": "HĂ€r Ă€r vad du skrev:", + "Sales": "FörsĂ€ljning", + "LicensingPricing": "Licensiering/prissĂ€ttning", + "TrialDemo": "Testversion / Demo", + "TrainingOnboarding": "Utbildning / Onboarding", + "Resellers": "ÅterförsĂ€ljare", + "Others": "Övriga", + "Characters": "KaraktĂ€rer", + "Topic": "Ämne", + "SendUsEmail": "Skicka e-post till oss", + "ErrorExceptionMessage": "Ett fel intrĂ€ffade under behandlingen av din begĂ€ran", + "WatchTakeCodeGeneration": "Titta pĂ„ videon \"Utforska potentialen med kodgenerering: ABP Suite\" Video!", + "StartupTemplatesUser": "AnvĂ€ndare", + "StartupSingleSignOn": "Enkel inloggning", + "Application{0}": "TillĂ€mpning {0}", + "PreBuiltApplicationModulesTitle": "FĂ€rdigbyggda applikationer Moduler.", + "RegisterDemo": "Registrera", + "TrainingDescription": "AnmĂ€l dig till ABP:s utbildningar för att förbĂ€ttra dina fĂ€rdigheter och kunskaper och hĂ„lla dig uppdaterad med den senaste utvecklingen.", + "PurchaseDevelopers": "Utvecklare", + "LinkExpiredMessage": "BetalningslĂ€nken har löpt ut! Kontakta oss pĂ„ sales@volosoft.com för att uppdatera lĂ€nken eller klicka hĂ€r för att navigera till kontaktsidan.", + "YourAccountDisabled": "Ditt anvĂ€ndarkonto Ă€r inaktiverat!", + "WhyChooseAbpTitle": "Varför vĂ€lja ABP? | ABP.IO", + "WhyChooseAbpDescription": "UpptĂ€ck fördelarna med ABP Commercial: modulĂ€r arkitektur, moduler redo för mikrotjĂ€nster, produktivitetsverktyg och robusta funktioner för moderna webbappar för affĂ€rsomrĂ„den.", + "AbpIo_Modern_Title": "ABP.IO - Modern ASP.NET Core plattform för webbapplikationer", + "AbpIo_Modern_Description": "ABP Platform tillhandahĂ„ller ett ramverk med öppen kĂ€llkod ovanpĂ„ ASP.NET Core med Angular-, Blazor- och MVC-grĂ€nssnittsalternativ för att skapa skalbara webbappar för företag.", + "My_Organizations_Page_Title": "Mina organisationer", + "My_Organizations_Page_Description": "Se dina ABP Platform-organisationer för att hantera dina utvecklare, licensförnyelser och uppgraderingar.", + "Members_Page_Title": "{0} - Medlem i gemenskapen | ABP.IO", + "Members_Page_Description": "{0} Ă€r medlem i ABP-communityn. Kolla in bidragen och dra nytta av denna erfarenhet.", + "Framework_Page_Title": "ABP-ramverk", + "Framework_Page_Description": "ABP Framework Ă€r det mest okomplicerade sĂ€ttet att kickstarta ditt projekt! LĂ€r dig mer om ABP Framework's robusta funktioner.", + "CLI_Page_Title": "ABP CLI", + "CLI_Page_Description": "AnvĂ€nd det globala verktyget ABP CLI dotnet för att skapa ett nytt ABP-projekt, uppdatera det, hantera paket och fĂ„ tillgĂ„ng till kĂ€llkoden för ABP-moduler.", + "Mobile_Page_Title": "ABP:s mobila klient", + "Mobile_Page_Description": "Utveckla kraftfulla mobila applikationer med ABP:s funktioner för mobil utveckling, vilket sĂ€kerstĂ€ller kompatibilitet mellan plattformar.", + "ReleasesPageTitle": "ABP Kommersiella meddelanden", + "ReleasesPageDescription": "HĂ„ll dig uppdaterad med de senaste funktionerna och uppdateringarna i ABP Commercial Releases, sĂ„ att dina applikationer Ă€r toppmoderna.", + "GetStartedPageTitle": "Kom snabbt igĂ„ng med ABP Framework med hjĂ€lp av vĂ„r omfattande guide som Ă€r utformad för nya anvĂ€ndare.", + "Community_Page_Title": "ABP Gemenskap", + "Community_Page_Description": "Anslut och samarbeta med andra utvecklare i ABP Community, dela kunskap och resurser.", + "Services_Page_Title": "Ytterligare tjĂ€nster", + "Services_Page_Description": "FĂ„ professionell utveckling och supporttjĂ€nster frĂ„n ABP-teamet eller dess lösningspartners, vilket sĂ€kerstĂ€ller att ditt projekt blir framgĂ„ngsrikt.", + "Contributors_Page_Title": "Bidragsgivare till ABP", + "Contributors_Page_Description": "Möt bidragsgivarna i ABP Community och lĂ€r dig mer om deras roller och bidrag till ramverket.", + "PackagesDetailTitle": "{0} - Paketdetaljer | ABP Framework", + "PackagesDetailDescription": "FĂ„ detaljerad information om paketet {0}, inklusive funktioner och anvĂ€ndning.", + "Raffle_Page_Title": "Utlottning - {0}", + "Raffle_Page_Description": "Delta i ABP:s utlottningar och ha chansen att vinna spĂ€nnande priser genom att engagera dig i ABP:s community.", + "Docs_Page_Title": "ABP-dokumentation", + "Docs_Page_Description": "FĂ„ tillgĂ„ng till omfattande guider och API-referenser i ABP Documentation, vilket underlĂ€ttar utveckling och felsökning.", + "Videos_Page_Title": "{0} - VideoinlĂ€gg | ABP.IO", + "AskQuestionsOnSupport": "Du kan stĂ€lla frĂ„gor pĂ„ ABP Support.", + "MicroserviceApplicationExplanation1": "Skapar en distribuerad lösning.", + "MicroserviceApplicationExplanation2": "Rekommenderas för stora team för att skapa komplexa och skalbara system.", + "CancellationSupport": "Stöd för avbokning", + "CancellationSupportExplanation": "ABP möjliggör en elegant avslutning av asynkrona operationer i applikationer, vilket sĂ€kerstĂ€ller korrekt resursrensning och en responsiv anvĂ€ndarupplevelse.", + "DistributedLocking": "Distribuerad lĂ„sning", + "DistributedLockingExplanation": "ABP:s distribuerade lĂ„ssystem sĂ€kerstĂ€ller att resurser nĂ„s pĂ„ ett ömsesidigt exklusivt sĂ€tt över olika noder i en distribuerad miljö, vilket förhindrar samtidiga konflikter och sĂ€kerstĂ€ller datakonsistens.", + "EncryptionDecryptionServices": "TjĂ€nster för kryptering och dekryptering", + "EncryptionDecryptionServicesExplanation": "ABP tillhandahĂ„ller strĂ€ngkrypteringsfunktion som gör det möjligt att Encrypt och Decrypt strĂ€ngar.", + "BackgroundWorkers": "Bakgrund Arbetstagare", + "BackgroundWorkersExplanation": "Definiera operationer som ska köras i en separat, dedikerad trĂ„d. AnvĂ€nd de inbyggda bakgrundsarbetarna eller integrera dina egna. Hangfire och Quartz integrationer Ă€r redan tillgĂ€ngliga.", + "ConcurrencyCheck": "Kontroll av samtidighet", + "ConcurrencyCheckExplanation": "ABP tillhandahĂ„ller en optimistisk mekanism för samtidighetskontroll för att sĂ€kerstĂ€lla datakonsistens i din applikation och förhindrar att anvĂ€ndare kommer Ă„t eller Ă€ndrar samma data i en databas samtidigt." + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json index 7f440cf205..984a3d28a7 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json @@ -158,7 +158,7 @@ "IndexPageHeroSection": "open sourceWeb Application
Framework
for asp.net core", "UiFramework": "UIæĄ†æž¶", "EmailAddress": "ç””ć­é‚źä»¶ćœ°ć€", - "Mobile": "ç§»ćŠšç””èŻ", + "Mobile": "é€‰æ‹©ç§»ćŠšćș”甚皋ćșæĄ†æž¶", "ReactNative": "React Native", "Strong": "ćŒș性", "Complete": "ćźŒæ•Ž", @@ -476,4 +476,4 @@ "ABPVideoCoursesPageDescription": "é€šèż‡ABP曱队戛ć»șçš„è§†éą‘èŻŸçš‹ć­Šäč ABPæĄ†æž¶çš„ćŸșçĄ€çŸ„èŻ†ă€‚ćœšæœŹè§†éą‘çł»ćˆ—äž­ïŒŒæ‚šć°†ć­Šäč ABPæĄ†æž¶çš„ćŸșæœŹäž»éą˜ă€‚æŻäžȘè§†éą‘äžŠçš„æ•°ć­—éƒœæ˜Żæ čæźć­Šäč æ”çš‹çŒ–憙的。", "ABPVideoCoursesTitle": "ABP ćŸșæœŹè§†éą‘" } -} \ No newline at end of file +} diff --git a/common.props b/common.props index 26b2c2f91a..eb977e8142 100644 --- a/common.props +++ b/common.props @@ -1,8 +1,8 @@ latest - 8.2.3 - 3.2.3 + 8.3.2 + 3.3.2 $(NoWarn);CS1591;CS0436 https://abp.io/assets/abp_nupkg.png https://abp.io/ diff --git a/docs/en/Blog-Posts/2024-05 ABP Unification/post.md b/docs/en/Blog-Posts/2024-05 ABP Unification/post.md index fd7c1198a9..c09f9cc8e2 100644 --- a/docs/en/Blog-Posts/2024-05 ABP Unification/post.md +++ b/docs/en/Blog-Posts/2024-05 ABP Unification/post.md @@ -51,7 +51,7 @@ You can easily download and install ABP Studio, login with your abp.io account a ### The New Pricing Page -Since the [ABP Commercial website](https://commercial.abp.io/) has merged with the main website, you will see the *Pricing* page located on the main menu of the abp.io website. We have completely revised the design and content of this page to better reflect which features are open source and free, and what is included in the commercial licenses. +Since the [ABP Commercial website](https://commercial.abp.io/) has merged with the main website, you will see the *Pricing* page located on the main menu of the abp.io website. We have completely revised the design and content of this page to better reflect which features are open source and free, and what is included in the paid licenses. ![new-pricing](new-pricing.png) @@ -68,7 +68,7 @@ Based on our and customers' experiences, there are some problems with that appro * Getting started, development tutorials, release notes, road map and some other documents are duplicated (or very similar) among ABP Framework and ABP Commercial documents. * For ABP Commercial users, it is not clear if they also need to read the ABP Framework (open source) documentation or not. Also, when they read the framework document, some parts are different for ABP Commercial users, and it is also not clear in some cases. -We are currently working to completely merge the ABP Framework (open source) and ABP Commercial documentation, remove duplications and revisit the contents. We will clearly indicate if a part of a document requires a commercial license. +We are currently working to completely merge the ABP Framework (open source) and ABP Commercial documentation, remove duplications and revisit the contents. We will clearly indicate if a part of a document requires a paid license. The left navigation panel tree is also completely revisited and simplified: diff --git a/docs/en/cli/index.md b/docs/en/cli/index.md index 743f88a632..5ce500fe25 100644 --- a/docs/en/cli/index.md +++ b/docs/en/cli/index.md @@ -105,6 +105,8 @@ abp cli update abp cli update --preview abp cli update --version 1.0.0 abp cli remove +abp cli check-version +abp cli clear-cache ```` ### new @@ -138,12 +140,13 @@ For more samples, go to [ABP CLI Create Solution Samples](new-command-samples.md * `--tiered`: Creates a tiered solution where Web and Http API layers are physically separated. If not specified, it creates a layered solution which is less complex and suitable for most scenarios. (*Available for* ***Team*** *or higher licenses*) * `angular`: Angular UI. There are some additional options for this template: * `--tiered`: The Auth Server project comes as a separate project and runs at a different endpoint. It separates the Auth Server from the API Host application. If not specified, you will have a single endpoint in the server side. (*Available for* ***Team*** *or higher licenses*) - * `--pwa`: Specifies the project as Progressive Web Application. + * `--progressive-web-app` or `-pwa`: Specifies the project as Progressive Web Application. * `blazor-webapp`: Blazor Web App UI. There are some additional options for this template: * `--tiered`: The Auth Server and the API Host project comes as separate projects and run at different endpoints. It has 3 startup projects: *HttpApi.Host*, *AuthServer* and *Blazor* and and each runs on different endpoints. If not specified, you will have a single endpoint for your web project. + * `--progressive-web-app` or `-pwa`: Specifies the project as Progressive Web Application. * `blazor`: Blazor UI. There are some additional options for this template: * `--tiered`The Auth Server project comes as a separate project and runs at a different endpoint. It separates the Auth Server from the API Host application. If not specified, you will have a single endpoint in the server side. (*Available for* ***Team*** *or higher licenses*) - * `--pwa`: Specifies the project as Progressive Web Application. + * `--progressive-web-app` or `-pwa`: Specifies the project as Progressive Web Application. * `blazor-server`: Blazor Server UI. There are some additional options for this template: * `--tiered`: The Auth Server and the API Host project comes as separate projects and run at different endpoints. It has 3 startup projects: *HttpApi.Host*, *AuthServer* and *Blazor* and and each runs on different endpoints. If not specified, you will have a single endpoint for your web project. (*Available for* ***Team*** *or higher licenses*) * `maui-blazor`: Blazor Maui UI (*Available for* ***Team*** *or higher licenses*). There are some additional options for this template: @@ -158,8 +161,12 @@ For more samples, go to [ABP CLI Create Solution Samples](new-command-samples.md * `ef`: Entity Framework Core. * `mongodb`: MongoDB. * `--connection-string` or `-cs`: Overwrites the default connection strings in all `appsettings.json` files. The default connection string is `Server=localhost;Database=MyProjectName;Trusted_Connection=True` for EF Core and it is configured to use the SQL Server. If you want to use the EF Core, but need to change the DBMS, you can change it as [described here](../framework/data/entity-framework-core/other-dbms.md) (after creating the solution). + * `--skip-migrations` or `-sm`: Skips the creating initial database migration step. + * `--skip-migrator` or `-smr`: Skips the run database migrator step. * `--public-website`: Public Website is a front-facing website for describing your project, listing your products and doing SEO for marketing purposes. Users can login and register on your website with this website. This option is only included in PRO templates. + * `--without-cms-kit`: When you add a public website to your solution, it automatically includes the [CmsKit](./../modules/cms-kit-pro/index.md) module. If you don't want to include *CmsKit*, you can use this parameter. * `--separate-tenant-schema`: Creates a different DbContext for tenant schema. If not specified, the tenant schema is shared with the host schema. This option is only included in PRO templates. + * `--sample-crud-page` or `-scp`: It adds the [BookStore](./../tutorials/book-store/index.md) sample to your solution. * `--theme` or `-th`: Specifes the theme. Default theme is `leptonx`. Available themes: * `leptonx`: LeptonX Theme. (*Available for* ***Team*** *or higher licenses*) * `leptonx-lite`: LeptonX-Lite Theme. @@ -176,6 +183,9 @@ For more samples, go to [ABP CLI Create Solution Samples](new-command-samples.md * `ef`: Entity Framework Core. * `mongodb`: MongoDB. * `--connection-string` or `-cs`: Overwrites the default connection strings in all `appsettings.json` files. The default connection string is `Server=localhost;Database=MyProjectName;Trusted_Connection=True` for EF Core and it is configured to use the SQL Server. If you want to use the EF Core, but need to change the DBMS, you can change it as [described here](../framework/data/entity-framework-core/other-dbms.md) (after creating the solution). + * `--skip-migrations` or `-sm`: Skips the creating initial database migration step. + * `--skip-migrator` or `-smr`: Skips the run database migrator step. + * `--sample-crud-page` or `-scp`: It adds the [BookStore](./../tutorials/book-store/index.md) sample to your solution. * `--theme`: Specifes the theme. Default theme is `leptonx`. Available themes: * `leptonx`: LeptonX Theme. (*Available for* ***Team*** *or higher licenses*) * `leptonx-lite`: LeptonX-Lite Theme. @@ -213,6 +223,7 @@ For more samples, go to [ABP CLI Create Solution Samples](new-command-samples.md * `--dont-run-install-libs`: Skip installing client side packages. * `--dont-run-bundling`: Skip bundling for Blazor packages. * `--no-kubernetes-configuration` or `-nkc`: Skips the Kubernetes configuration files. +* `--no-social-logins` or `-nsl`: Skipts the social login configuration. * *Module Options*: You can skip some modules if you don't want to add them to your solution (*Available for* ***Team*** *or higher licenses*). Available commands: * `-no-saas`: Skips the Saas module. * `-no-gdpr`: Skips the GDPR module. diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 7d017e5ba1..7cfe05402a 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -1882,13 +1882,17 @@ "text": "Overview", "path": "samples" }, + { + "text": "EventHub", + "path": "https://github.com/abpframework/eventhub" + }, { "text": "eShopOnAbp", "path": "https://github.com/abpframework/eShopOnAbp" }, { - "text": "EventHub", - "path": "https://github.com/abpframework/eventhub" + "text": "CMS Kit Demo", + "path": "https://github.com/abpframework/cms-kit-demo" }, { "text": "Easy CRM", diff --git a/docs/en/framework/architecture/modularity/basics.md b/docs/en/framework/architecture/modularity/basics.md index 481c1e192a..f92e6edc3b 100644 --- a/docs/en/framework/architecture/modularity/basics.md +++ b/docs/en/framework/architecture/modularity/basics.md @@ -7,7 +7,7 @@ ABP was designed to support to build fully modular applications and systems wher * This document introduces the basics of the module system. * [Module development best practice guide](../best-practices) explains some **best practices** to develop **re-usable application modules** based on **DDD** principles and layers. A module designed based on this guide will be **database independent** and can be deployed as a **microservice** if needed. * [Pre-built application modules](../../../modules) are **ready to use** in any kind of application. -* [Module startup template](../../../solution-templates/layered-web-application) is a jump start way to **create a new module**. +* [Module startup template](../../../solution-templates/application-module) is a jump start way to **create a new module**. * [ABP CLI](../../../cli/index.md) has commands to support modular development. * All other framework features are compatible to the modularity system. diff --git a/docs/en/framework/architecture/multi-tenancy/index.md b/docs/en/framework/architecture/multi-tenancy/index.md index 1431e12aa4..7a8f23c53e 100644 --- a/docs/en/framework/architecture/multi-tenancy/index.md +++ b/docs/en/framework/architecture/multi-tenancy/index.md @@ -10,8 +10,8 @@ Wikipedia [defines](https://en.wikipedia.org/wiki/Multitenancy) the multi-tenanc There are two main side of a typical SaaS / Multi-tenant application: -* A **Tenant** is a customer of the SaaS application that pays money to use the service. -* **Host** is the company that owns the SaaS application and manages the system. +- A **Tenant** is a customer of the SaaS application that pays money to use the service. +- **Host** is the company that owns the SaaS application and manages the system. The Host and the Tenant terms will be used for that purpose in the rest of the document. @@ -36,9 +36,9 @@ Configure(options => ABP supports all the following approaches to store the tenant data in the database; -* **Single Database**: All tenants are stored in a single database. -* **Database per Tenant**: Every tenant has a separate, dedicated database to store the data related to that tenant. -* **Hybrid**: Some tenants share a single databases while some tenants may have their own databases. +- **Single Database**: All tenants are stored in a single database. +- **Database per Tenant**: Every tenant has a separate, dedicated database to store the data related to that tenant. +- **Hybrid**: Some tenants share a single database while some tenants may have their own databases. [Tenant management module](../../../modules/tenant-management.md) (which comes pre-installed with the startup projects) allows you to set a connection string for any tenant (as optional), so you can achieve any of the approaches. @@ -50,9 +50,9 @@ Multi-tenancy system is designed to **work seamlessly** and make your applicatio You should implement the `IMultiTenant` interface for your [entities](../domain-driven-design/entities.md) to make them **multi-tenancy ready**. -**Example: A multi-tenant *Product* entity** +**Example: A multi-tenant _Product_ entity** -````csharp +```csharp using System; using Volo.Abp.Domain.Entities; using Volo.Abp.MultiTenancy; @@ -68,7 +68,7 @@ namespace MultiTenancyDemo.Products public float Price { get; set; } } } -```` +``` `IMultiTenant` interface just defines a `TenantId` property. When you implement this interface, ABP **automatically** [filters](../../infrastructure/data-filtering.md) entities for the current tenant when you query from database. So, you don't need to manually add `TenantId` condition while performing queries. A tenant can not access to data of another tenant by default. @@ -96,9 +96,9 @@ If you set the `TenantId` value for a specific entity object, it will override t `ICurrentTenant` defines the following properties; -* `Id` (`Guid`): Id of the current tenant. Can be `null` if the current user is a host user or the tenant could not be determined from the request. -* `Name` (`string`): Name of the current tenant. Can be `null` if the current user is a host user or the tenant could not be determined from the request. -* `IsAvailable` (`bool`): Returns `true` if the `Id` is not `null`. +- `Id` (`Guid`): Id of the current tenant. Can be `null` if the current user is a host user or the tenant could not be determined from the request. +- `Name` (`string`): Name of the current tenant. Can be `null` if the current user is a host user or the tenant could not be determined from the request. +- `IsAvailable` (`bool`): Returns `true` if the `Id` is not `null`. #### Change the Current Tenant @@ -108,7 +108,7 @@ ABP automatically filters the resources (database, cache...) based on the `ICurr **Example: Get product count of a specific tenant** -````csharp +```csharp using System; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories; @@ -134,11 +134,11 @@ namespace MultiTenancyDemo.Products } } } -```` +``` -* `Change` method can be used in a **nested way**. It restores the `CurrentTenant.Id` to the previous value after the `using` statement. -* When you use `CurrentTenant.Id` inside the `Change` scope, you get the `tenantId` provided to the `Change` method. So, the repository also get this `tenantId` and can filter the database query accordingly. -* Use `CurrentTenant.Change(null)` to change scope to the host context. +- `Change` method can be used in a **nested way**. It restores the `CurrentTenant.Id` to the previous value after the `using` statement. +- When you use `CurrentTenant.Id` inside the `Change` scope, you get the `tenantId` provided to the `Change` method. So, the repository also get this `tenantId` and can filter the database query accordingly. +- Use `CurrentTenant.Change(null)` to change scope to the host context. > Always use the `Change` method with a `using` statement like done in this example. @@ -148,7 +148,7 @@ As mentioned before, ABP handles data isolation between tenants using the [Data **Example: Get count of products in the database, including all the products of all the tenants.** -````csharp +```csharp using System; using System.Threading.Tasks; using Volo.Abp.Data; @@ -181,7 +181,7 @@ namespace MultiTenancyDemo.Products } } -```` +``` See the [Data Filtering document](../../infrastructure/data-filtering.md) for more. @@ -201,15 +201,15 @@ ABP provides an extensible **Tenant Resolving** system for that purpose. Tenant The following resolvers are provided and configured by default; -* `CurrentUserTenantResolveContributor`: Gets the tenant id from claims of the current user, if the current user has logged in. **This should always be the first contributor for the security**. -* `QueryStringTenantResolveContributor`: Tries to find current tenant id from query string parameters. The parameter name is `__tenant` by default. -* `RouteTenantResolveContributor`: Tries to find current tenant id from route (URL path). The variable name is `__tenant` by default. If you defined a route with this variable, then it can determine the current tenant from the route. -* `HeaderTenantResolveContributor`: Tries to find current tenant id from HTTP headers. The header name is `__tenant` by default. -* `CookieTenantResolveContributor`: Tries to find current tenant id from cookie values. The cookie name is `__tenant` by default. +- `CurrentUserTenantResolveContributor`: Gets the tenant id from claims of the current user, if the current user has logged in. **This should always be the first contributor for the security**. +- `QueryStringTenantResolveContributor`: Tries to find current tenant id from query string parameters. The parameter name is `__tenant` by default. +- `RouteTenantResolveContributor`: Tries to find current tenant id from route (URL path). The variable name is `__tenant` by default. If you defined a route with this variable, then it can determine the current tenant from the route. +- `HeaderTenantResolveContributor`: Tries to find current tenant id from HTTP headers. The header name is `__tenant` by default. +- `CookieTenantResolveContributor`: Tries to find current tenant id from cookie values. The cookie name is `__tenant` by default. ###### Problems with the NGINX -You may have problems with the `__tenant` in the HTTP Headers if you're using the [nginx](https://www.nginx.com/) as the reverse proxy server. Because it doesn't allow to use underscore and some other special characters in the HTTP headers and you may need to manually configure it. See the following documents please: +You may have problems with the `__tenant` in the HTTP Headers if you're using the [nginx](https://www.nginx.com/) as the reverse proxy server. Because it doesn't allow to use underscore and some other special characters in the HTTP headers and you may need to manually configure it. See the following documents please: http://nginx.org/en/docs/http/ngx_http_core_module.html#ignore_invalid_headers http://nginx.org/en/docs/http/ngx_http_core_module.html#underscores_in_headers @@ -219,22 +219,24 @@ http://nginx.org/en/docs/http/ngx_http_core_module.html#underscores_in_headers **Example:** -````csharp +```csharp services.Configure(options => { options.TenantKey = "MyTenantKey"; }); -```` +``` -If you change the `TenantKey`, make sure to pass it to `CoreModule` in the Angular client as follows: +If you change the `TenantKey`, make sure to pass it to `provideAbpCore` via `withOptions` method in the Angular client as follows: ```js @NgModule({ - imports: [ - CoreModule.forRoot({ - // ... - tenantKey: 'MyTenantKey' - }), + providers: [ + provideAbpCore( + withOptions({ + // ... + tenantKey: "MyTenantKey", + }) + ), ], // ... }) @@ -249,7 +251,7 @@ import { TENANT_KEY } from '@abp/ng.core'; class SomeComponent { constructor(@Inject(TENANT_KEY) private tenantKey: string) {} -} +} ``` > However, we don't suggest to change this value since some clients may assume the the `__tenant` as the parameter name and they might need to manually configure then. @@ -277,12 +279,12 @@ In a real application, most of times you will want to determine the current tena **Example: Add a subdomain resolver** -````csharp +```csharp Configure(options => { options.AddDomainTenantResolver("{0}.mydomain.com"); }); -```` +``` * `{0}` is the placeholder to determine the current tenant's unique name. * Add this code to the `ConfigureServices` method of your [module](../modularity/basics.md). @@ -293,14 +295,14 @@ Openiddict is the default Auth Server in ABP (since v6.0). When you use OpenIddi ```csharp // using Volo.Abp.OpenIddict.WildcardDomains -PreConfigure(options => +PreConfigure(options => { options.EnableWildcardDomainSupport = true; options.WildcardDomainsFormat.Add("https://{0}.mydomain.com"); }); ``` -You must add this code to the `Configure` method as well. +You must add this code to the `Configure` method as well. ```csharp // using Volo.Abp.MultiTenancy; @@ -312,7 +314,7 @@ Configure(options => ``` -> There is an [example](https://github.com/abpframework/abp-samples/tree/master/DomainTenantResolver) that uses the subdomain to determine the current tenant. +> There is an [example](https://github.com/abpframework/abp-samples/tree/master/DomainTenantResolver) that uses the subdomain to determine the current tenant. If you use a sepereted Auth server, you must install `[Owl.TokenWildcardIssuerValidator](https://www.nuget.org/packages/Owl.TokenWildcardIssuerValidator)` on the `HTTPApi.Host` project @@ -332,7 +334,7 @@ context.Services options.Authority = configuration["AuthServer:Authority"]; options.RequireHttpsMetadata = Convert.ToBoolean(configuration["AuthServer:RequireHttpsMetadata"]); options.Audience = "ExampleProjectName"; - + // start of added block options.TokenValidationParameters.IssuerValidator = TokenWildcardIssuerValidator.IssuerValidator; options.TokenValidationParameters.ValidIssuers = new[] @@ -348,16 +350,16 @@ context.Services You can add implement your custom tenant resolver and configure the `AbpTenantResolveOptions` in your module's `ConfigureServices` method as like below: -````csharp +```csharp Configure(options => { options.TenantResolvers.Add(new MyCustomTenantResolveContributor()); }); -```` +``` `MyCustomTenantResolveContributor` must inherit from the `TenantResolveContributorBase` (or implement the `ITenantResolveContributor`) as shown below: -````csharp +```csharp using System.Threading.Tasks; using Volo.Abp.MultiTenancy; @@ -373,7 +375,7 @@ namespace MultiTenancyDemo.Web } } } -```` +``` * A tenant resolver should set `context.TenantIdOrName` if it can determine it. If not, just leave it as is to allow the next resolver to determine it. * `context.ServiceProvider` can be used if you need to additional services to resolve from the [dependency injection](../../fundamentals/dependency-injection.md) system. @@ -384,9 +386,9 @@ Multi-Tenancy middleware is an ASP.NET Core request pipeline [middleware](https: Multi-Tenancy middleware is typically placed just under the [authentication](https://docs.microsoft.com/en-us/aspnet/core/security/authentication) middleware (`app.UseAuthentication()`): -````csharp +```csharp app.UseMultiTenancy(); -```` +``` > This middleware is already configured in the startup templates, so you normally don't need to manually add it. @@ -406,7 +408,7 @@ The [tenant management module](../../../modules/tenant-management.md) is **inclu **Example: Define tenants in appsettings.json** -````json +```json "Tenants": [ { "Id": "446a5211-3d72-4339-9adc-845151f8ada0", @@ -422,7 +424,7 @@ The [tenant management module](../../../modules/tenant-management.md) is **inclu } } ] -```` +``` > It is recommended to **use the Tenant Management module**, which is already pre-configured when you create a new application with the ABP startup templates. diff --git a/docs/en/framework/fundamentals/dynamic-claims.md b/docs/en/framework/fundamentals/dynamic-claims.md index 44bebd2aea..f326ac444d 100644 --- a/docs/en/framework/fundamentals/dynamic-claims.md +++ b/docs/en/framework/fundamentals/dynamic-claims.md @@ -1,8 +1,8 @@ # Dynamic Claims -When a client authenticates and obtains an access token or an authentication cookie, the claims in that token or cookie are not changed unless it re-authenticates. For most of the claims, that may not be a problem since claims are not frequently changing values. However, some claims may be changed and these changes should be reflected to the current session immediately. For example, we can revoke a role from a user and that should be immediately effective, otherwise user will continue to use that role's permissions until re-login to the application. +When a client authenticates and obtains an access token or an authentication cookie, the claims in that token or cookie are not changed unless it re-authenticates. That is not a problem for most claims since the claim values do not frequently change. However, for some claims, it may be required to immediately see the impact after the claim values change in the current session. For example, if a role is revoked from a user, you want to see its effect in the next request. Otherwise, the user will continue to use that role's permissions until re-login to the application. -ABP's dynamic claims feature is used to automatically and dynamically override the configured claim values in the client's authentication token/cookie by the latest values of these claims. +ABP's dynamic claims feature dynamically overrides the configured claim values in the client's authentication token/cookie with the latest values of these claims. ## How to Use @@ -10,7 +10,7 @@ This feature is disabled by default. You should enable it for your application a > **Beginning from the v8.0, all the [startup templates](../../solution-templates) are pre-configured and the dynamic claims feature is enabled by default. So, if you have created a solution with v8.0 and above, you don't need to make any configuration. Follow the instructions only if you've upgraded from a version lower than 8.0.** -### Enabling the Dynamic Claims +### Enabling / Disabling the Dynamic Claims You can enable it by the following code: @@ -19,7 +19,7 @@ public override void ConfigureServices(ServiceConfigurationContext context) { context.Services.Configure(options => { - options.IsDynamicClaimsEnabled = true; + options.IsDynamicClaimsEnabled = true; //set it "true" to enable "Dynamic Claims" or "false" to disable it. }); } ```` diff --git a/docs/en/framework/ui/angular/images/angular-advanced-entity-filters-with-custom-content-above-filter.png b/docs/en/framework/ui/angular/images/angular-advanced-entity-filters-with-custom-content-above-filter.png index 0feab57342..ac81a885ec 100644 Binary files a/docs/en/framework/ui/angular/images/angular-advanced-entity-filters-with-custom-content-above-filter.png and b/docs/en/framework/ui/angular/images/angular-advanced-entity-filters-with-custom-content-above-filter.png differ diff --git a/docs/en/framework/ui/angular/images/angular-advanced-entity-filters-with-form.png b/docs/en/framework/ui/angular/images/angular-advanced-entity-filters-with-form.png index ef469a3d9d..d0827ed369 100644 Binary files a/docs/en/framework/ui/angular/images/angular-advanced-entity-filters-with-form.png and b/docs/en/framework/ui/angular/images/angular-advanced-entity-filters-with-form.png differ diff --git a/docs/en/framework/ui/angular/images/angular-advanced-entity-filters-without-form.png b/docs/en/framework/ui/angular/images/angular-advanced-entity-filters-without-form.png index 18b7780008..3c3707a857 100644 Binary files a/docs/en/framework/ui/angular/images/angular-advanced-entity-filters-without-form.png and b/docs/en/framework/ui/angular/images/angular-advanced-entity-filters-without-form.png differ diff --git a/docs/en/framework/ui/angular/images/angular-advanced-entity-filters.png b/docs/en/framework/ui/angular/images/angular-advanced-entity-filters.png index 3f381a1cc6..5ae22b56a4 100644 Binary files a/docs/en/framework/ui/angular/images/angular-advanced-entity-filters.png and b/docs/en/framework/ui/angular/images/angular-advanced-entity-filters.png differ diff --git a/docs/en/framework/ui/angular/images/manage-profile-page-new-tab.png b/docs/en/framework/ui/angular/images/manage-profile-page-new-tab.png index 2700ccbe90..6d3145ccd4 100644 Binary files a/docs/en/framework/ui/angular/images/manage-profile-page-new-tab.png and b/docs/en/framework/ui/angular/images/manage-profile-page-new-tab.png differ diff --git a/docs/en/framework/ui/angular/images/manage-profile-page.png b/docs/en/framework/ui/angular/images/manage-profile-page.png index 3df5c0f395..a699c29743 100644 Binary files a/docs/en/framework/ui/angular/images/manage-profile-page.png and b/docs/en/framework/ui/angular/images/manage-profile-page.png differ diff --git a/docs/en/framework/ui/angular/localization.md b/docs/en/framework/ui/angular/localization.md index 601e49d6ba..4ff0744212 100644 --- a/docs/en/framework/ui/angular/localization.md +++ b/docs/en/framework/ui/angular/localization.md @@ -11,7 +11,7 @@ The Localization key format consists of 2 sections which are **Resource Name** a const environment = { //... localization: { - defaultResourceName: 'MyProjectName', + defaultResourceName: "MyProjectName", }, }; ``` @@ -38,7 +38,8 @@ You can also specify a default value as shown below: ```html

- {%{{{ { key: 'Resource::Key', defaultValue: 'Default Value' } | abpLocalization }}}%} + {%{{{ { key: 'Resource::Key', defaultValue: 'Default Value' } | + abpLocalization }}}%}

``` @@ -82,17 +83,17 @@ After that, you are able to use localization service. ```js this.localizationService.instant( - 'AbpIdentity::UserDeletionConfirmation', - 'John' + "AbpIdentity::UserDeletionConfirmation", + "John" ); // with fallback value this.localizationService.instant( { - key: 'AbpIdentity::UserDeletionConfirmation', - defaultValue: 'Default Value', + key: "AbpIdentity::UserDeletionConfirmation", + defaultValue: "Default Value", }, - 'John' + "John" ); // Output @@ -102,12 +103,12 @@ this.localizationService.instant( To get a localized text as [_Observable_](https://rxjs.dev/guide/observable) use `get` method instead of `instant`: ```js -this.localizationService.get('Resource::Key'); +this.localizationService.get("Resource::Key"); // with fallback value this.localizationService.get({ - key: 'Resource::Key', - defaultValue: 'Default Value', + key: "Resource::Key", + defaultValue: "Default Value", }); ``` @@ -118,41 +119,46 @@ Localizations can be determined on backend side. Angular UI gets the localizatio See an example: ```ts -// app.module.ts +import { provideAbpCore, withOptions } from '@abp/ng.core'; @NgModule({ - imports: [ - //...other imports - CoreModule.forRoot({ - localizations: [ - { - culture: 'en', - resources: [ - { - resourceName: 'MyProjectName', - texts: { - Administration: 'Administration', - HomePage: 'Home', + providers: [ + // ... + provideAbpCore( + withOptions({ + ..., + localizations: [ + { + culture: 'en', + resources: [ + { + resourceName: 'MyProjectName', + texts: { + Administration: 'Administration', + HomePage: 'Home', + }, }, - }, - ], - }, - { - culture: 'de', - resources: [ - { - resourceName: 'MyProjectName', - texts: { - Administration: 'Verwaltung', - HomePage: 'Startseite', + ], + }, + { + culture: 'de', + resources: [ + { + resourceName: 'MyProjectName', + texts: { + Administration: 'Verwaltung', + HomePage: 'Startseite', + }, }, - }, - ], - }, - ], - }), - ] + ], + }, + ], + }), + ), + ... + ], }) +export class AppModule {} ``` ...or, you can determine the localizations in a feature module: @@ -256,10 +262,10 @@ Find [styles configuration in angular.json](https://angular.io/guide/workspace-c If you have created and injected chunks for Fontawesome as seen above, you no longer need the lazy loading in the `AppComponent` which was implemented before v2.9. Simply remove them. The `AppComponent` in the template of the new version looks like this: ```js -import { Component } from '@angular/core'; +import { Component } from "@angular/core"; @Component({ - selector: 'app-root', + selector: "app-root", template: ` @@ -274,33 +280,32 @@ Since ABP has more than one language, Angular locale files loads lazily using [W ### registerLocaleFn -`registerLocale` function that exported from `@abp/ng.core/locale` package is a higher order function that accepts `cultureNameLocaleFileMap` object and `errorHandlerFn` function as params and returns Webpack `import` function. A `registerLocale` function must be passed to the `forRoot` of the `CoreModule` as shown below: - -```js -// app.module.ts +`registerLocale` function that exported from `@abp/ng.core/locale` package is a higher order function that accepts `cultureNameLocaleFileMap` object and `errorHandlerFn` function as params and returns Webpack `import` function. A `registerLocale` function must be passed to the `withOptions` of the `provideAbpCore` as shown below: +```ts +import { provideAbpCore, withOptions } from '@abp/ng.core'; import { registerLocale } from '@abp/ng.core/locale'; -// if you have commercial license and the language management module, add the below import -// import { registerLocale } from '@volo/abp.ng.language-management/locale'; - @NgModule({ - imports: [ - // ... - CoreModule.forRoot({ - // ...other options, - registerLocaleFn: registerLocale( - // you can pass the cultureNameLocaleFileMap and errorHandlerFn as optionally - { - cultureNameLocaleFileMap: { 'pt-BR': 'pt' }, - errorHandlerFn: ({ resolve, reject, locale, error }) => { - // the error can be handled here + providers: [ + provideAbpCore( + withOptions({ + ..., + registerLocaleFn: registerLocale( + // you can pass the cultureNameLocaleFileMap and errorHandlerFn as optionally + { + cultureNameLocaleFileMap: { 'pt-BR': 'pt' }, + errorHandlerFn: ({ resolve, reject, locale, error }) => { + // the error can be handled here + }, }, - }, - ) - }), - //... - ] + ), + }), + ), + ... + ], +}) +export class AppModule {} ``` ### Mapping of Culture Name to Angular Locale File Name @@ -320,20 +325,23 @@ import { registerLocale } from '@abp/ng.core/locale'; @NgModule({ - imports: [ + providers: [ // ... - CoreModule.forRoot({ - // ...other options, - registerLocaleFn: registerLocale( - { - cultureNameLocaleFileMap: { - "DotnetCultureName": "AngularLocaleFileName", - "pt-BR": "pt" // example + provideAbpCore( + withOptions({ + ..., + registerLocaleFn: registerLocale( + { + cultureNameLocaleFileMap: { + "DotnetCultureName": "AngularLocaleFileName", + "pt-BR": "pt" // example + }, }, - }, - ) - }), - //... + ) + }), + ), + ] +}) ``` See [all locale files in Angular](https://github.com/angular/angular/tree/master/packages/common/locales). @@ -345,12 +353,12 @@ Add the below code to the `app.module.ts` by replacing `your-locale` placeholder ```js //app.module.ts -import { storeLocaleData } from '@abp/ng.core/locale'; +import { storeLocaleData } from "@abp/ng.core/locale"; import( /* webpackChunkName: "_locale-your-locale-js"*/ /* webpackMode: "eager" */ - '@angular/common/locales/your-locale.js' -).then((m) => storeLocaleData(m.default, 'your-locale')); + "@angular/common/locales/your-locale.js" +).then((m) => storeLocaleData(m.default, "your-locale")); ``` ...or a custom `registerLocale` function can be passed to the `CoreModule`: @@ -373,14 +381,17 @@ export function registerLocale(locale: string) { import { registerLocale } from './register-locale'; @NgModule({ - imports: [ + providers: [ // ... - CoreModule.forRoot({ - // ...other options, - registerLocaleFn: registerLocale - }), + provideAbpCore( + withOptions({ + ..., + registerLocaleFn: registerLocale, + }), + ), //... ] +}) ``` After this custom `registerLocale` function, since the en and fr added to the `webpackInclude`, only en and fr locale files will be created as chunks: diff --git a/docs/en/framework/ui/angular/quick-start.md b/docs/en/framework/ui/angular/quick-start.md index d6f3c2bb77..32e4522937 100644 --- a/docs/en/framework/ui/angular/quick-start.md +++ b/docs/en/framework/ui/angular/quick-start.md @@ -6,8 +6,8 @@ Please follow the steps below to prepare your development environment for Angular. -1. **Install Node.js:** Please visit [Node.js downloads page](https://nodejs.org/en/download/) and download proper Node.js v16 or v18 installer for your OS. An alternative is to install [NVM](https://github.com/nvm-sh/nvm) and use it to have multiple versions of Node.js in your operating system. -2. **[Optional] Install Yarn:** You may install Yarn v1 (not v2) following the instructions on [the installation page](https://classic.yarnpkg.com/en/docs/install). Yarn v1 delivers an arguably better developer experience compared to npm v6 and below. You may skip this step and work with npm, which is built-in in Node.js, instead. +1. **Install Node.js:** Please visit [Node.js downloads page](https://nodejs.org/en/download/) and download proper Node.js `v18.19+` installer for your OS. An alternative is to install [NVM](https://github.com/nvm-sh/nvm) and use it to have multiple versions of Node.js in your operating system. +2. **[Optional] Install Yarn:** You may install Yarn v1.22+ (not v2) following the instructions on [the installation page](https://classic.yarnpkg.com/en/docs/install). Yarn v1 delivers an arguably better developer experience compared to npm v10 and below. You may skip this step and work with npm, which is built-in in Node.js, instead. 3. **[Optional] Install VS Code:** [VS Code](https://code.visualstudio.com/) is a free, open-source IDE which works seamlessly with TypeScript. Although you can use any IDE including Visual Studio or Rider, VS Code will most likely deliver the best developer experience when it comes to Angular projects. ABP project templates even contain plugin recommendations for VS Code users, which VS Code will ask you to install when you open the Angular project folder. Here is a list of recommended extensions: - [Angular Language Service](https://marketplace.visualstudio.com/items?itemName=angular.ng-template) - [Prettier - Code formatter](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) diff --git a/docs/en/framework/ui/blazor/branding.md b/docs/en/framework/ui/blazor/branding.md index 9fea655eb4..81b4244c25 100644 --- a/docs/en/framework/ui/blazor/branding.md +++ b/docs/en/framework/ui/blazor/branding.md @@ -24,8 +24,6 @@ namespace MyCompanyName.MyProjectName.Blazor } ```` -> Currently, setting the `AppName` is only applicable to the [Basic Theme](./basic-theme.md), it does not have any effect on the other [official themes](../../../ui-themes). - The result will be like shown below: ![branding-appname](../../../images/branding-appname.png) diff --git a/docs/en/framework/ui/mvc-razor-pages/branding.md b/docs/en/framework/ui/mvc-razor-pages/branding.md index 53d499031c..46c05d7d7e 100644 --- a/docs/en/framework/ui/mvc-razor-pages/branding.md +++ b/docs/en/framework/ui/mvc-razor-pages/branding.md @@ -26,8 +26,6 @@ namespace MyProject.Web } ```` -> Currently, setting the `AppName` is only applicable to the [Basic Theme](./basic-theme.md), it does not have any effect on the other [official themes](../../../ui-themes). - The result will be like shown below: ![bookstore-added-logo](../../../images/bookstore-added-logo.png) diff --git a/docs/en/get-started/images/abp-studio-created-new-solution.png b/docs/en/get-started/images/abp-studio-created-new-solution.png index 4a7d4f0b01..c089c276f6 100644 Binary files a/docs/en/get-started/images/abp-studio-created-new-solution.png and b/docs/en/get-started/images/abp-studio-created-new-solution.png differ diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-additional-options-microservice.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-additional-options-microservice.png index 87bd86755c..9f9df8991f 100644 Binary files a/docs/en/get-started/images/abp-studio-new-solution-dialog-additional-options-microservice.png and b/docs/en/get-started/images/abp-studio-new-solution-dialog-additional-options-microservice.png differ diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-additional-options.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-additional-options.png new file mode 100644 index 0000000000..4a2d3c2dd2 Binary files /dev/null and b/docs/en/get-started/images/abp-studio-new-solution-dialog-additional-options.png differ diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-database-configurations-efcore.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-database-configurations-efcore.png index e71cbb7036..e9a5bcee19 100644 Binary files a/docs/en/get-started/images/abp-studio-new-solution-dialog-database-configurations-efcore.png and b/docs/en/get-started/images/abp-studio-new-solution-dialog-database-configurations-efcore.png differ diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-database-configurations-mongo.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-database-configurations-mongo.png index f0b0ed136b..4b00156e3f 100644 Binary files a/docs/en/get-started/images/abp-studio-new-solution-dialog-database-configurations-mongo.png and b/docs/en/get-started/images/abp-studio-new-solution-dialog-database-configurations-mongo.png differ diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-database-provider-efcore.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-database-provider-efcore.png index 6f8e937b09..138d1904f5 100644 Binary files a/docs/en/get-started/images/abp-studio-new-solution-dialog-database-provider-efcore.png and b/docs/en/get-started/images/abp-studio-new-solution-dialog-database-provider-efcore.png differ diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-database-provider-mongo.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-database-provider-mongo.png index a1175b81bf..1e3f54a9d8 100644 Binary files a/docs/en/get-started/images/abp-studio-new-solution-dialog-database-provider-mongo.png and b/docs/en/get-started/images/abp-studio-new-solution-dialog-database-provider-mongo.png differ diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-mobile-framework-microservice.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-mobile-framework-microservice.png index b7ccfb2976..7e43e784f3 100644 Binary files a/docs/en/get-started/images/abp-studio-new-solution-dialog-mobile-framework-microservice.png and b/docs/en/get-started/images/abp-studio-new-solution-dialog-mobile-framework-microservice.png differ diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-mobile-framework.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-mobile-framework.png index 20b89c059d..f773d887d8 100644 Binary files a/docs/en/get-started/images/abp-studio-new-solution-dialog-mobile-framework.png and b/docs/en/get-started/images/abp-studio-new-solution-dialog-mobile-framework.png differ diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-optional-modules.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-optional-modules.png new file mode 100644 index 0000000000..992760e3fc Binary files /dev/null and b/docs/en/get-started/images/abp-studio-new-solution-dialog-optional-modules.png differ diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-public-website.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-public-website.png new file mode 100644 index 0000000000..e10d4a965c Binary files /dev/null and b/docs/en/get-started/images/abp-studio-new-solution-dialog-public-website.png differ diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-solution-properties.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-solution-properties.png index 93b3154e7c..7412b4b6e1 100644 Binary files a/docs/en/get-started/images/abp-studio-new-solution-dialog-solution-properties.png and b/docs/en/get-started/images/abp-studio-new-solution-dialog-solution-properties.png differ diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-solution-structure.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-solution-structure.png index 3cdd22f555..310488c1bc 100644 Binary files a/docs/en/get-started/images/abp-studio-new-solution-dialog-solution-structure.png and b/docs/en/get-started/images/abp-studio-new-solution-dialog-solution-structure.png differ diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-ui-framework.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-ui-framework.png index 228c711a1a..d373a55344 100644 Binary files a/docs/en/get-started/images/abp-studio-new-solution-dialog-ui-framework.png and b/docs/en/get-started/images/abp-studio-new-solution-dialog-ui-framework.png differ diff --git a/docs/en/get-started/images/abp-studio-new-solution-dialog-ui-theme.png b/docs/en/get-started/images/abp-studio-new-solution-dialog-ui-theme.png index d17d1d766d..8594f02d58 100644 Binary files a/docs/en/get-started/images/abp-studio-new-solution-dialog-ui-theme.png and b/docs/en/get-started/images/abp-studio-new-solution-dialog-ui-theme.png differ diff --git a/docs/en/get-started/images/abp-studio-quick-start-application-solution-runner.png b/docs/en/get-started/images/abp-studio-quick-start-application-solution-runner.png index 2e4a9aa583..f5ca4c97e7 100644 Binary files a/docs/en/get-started/images/abp-studio-quick-start-application-solution-runner.png and b/docs/en/get-started/images/abp-studio-quick-start-application-solution-runner.png differ diff --git a/docs/en/get-started/images/abp-studio-quick-start-browse-command.png b/docs/en/get-started/images/abp-studio-quick-start-browse-command.png index 186ff2d55d..c97b3c9700 100644 Binary files a/docs/en/get-started/images/abp-studio-quick-start-browse-command.png and b/docs/en/get-started/images/abp-studio-quick-start-browse-command.png differ diff --git a/docs/en/get-started/images/abp-studio-quick-start-browse.png b/docs/en/get-started/images/abp-studio-quick-start-browse.png index d63c20c8ac..47b4bf29cf 100644 Binary files a/docs/en/get-started/images/abp-studio-quick-start-browse.png and b/docs/en/get-started/images/abp-studio-quick-start-browse.png differ diff --git a/docs/en/get-started/images/abp-studio-quick-start-example-applications-in-solution-runner.png b/docs/en/get-started/images/abp-studio-quick-start-example-applications-in-solution-runner.png index 46adf8bfc0..44cef603fb 100644 Binary files a/docs/en/get-started/images/abp-studio-quick-start-example-applications-in-solution-runner.png and b/docs/en/get-started/images/abp-studio-quick-start-example-applications-in-solution-runner.png differ diff --git a/docs/en/get-started/images/solution-runner-public-website.png b/docs/en/get-started/images/solution-runner-public-website.png index a00368ee79..b1e76a4ce6 100644 Binary files a/docs/en/get-started/images/solution-runner-public-website.png and b/docs/en/get-started/images/solution-runner-public-website.png differ diff --git a/docs/en/get-started/layered-web-application.md b/docs/en/get-started/layered-web-application.md index 6757dea556..93e59f8242 100644 --- a/docs/en/get-started/layered-web-application.md +++ b/docs/en/get-started/layered-web-application.md @@ -22,8 +22,8 @@ The following tools should be installed on your development machine: * [Visual Studio 2022](https://visualstudio.microsoft.com/vs/) (v17.3+) for Windows / [Visual Studio for Mac](https://visualstudio.microsoft.com/vs/mac/). [1](#f-editor) * [.NET 8.0+](https://dotnet.microsoft.com/en-us/download/dotnet) {{ if UI != "Blazor" }} -* [Node v16 or v18](https://nodejs.org/) -* [Yarn v1.20+ (not v2)](https://classic.yarnpkg.com/en/docs/install) [2](#f-yarn) or npm v6+ (already installed with Node) +* [Node v18.19+](https://nodejs.org/) +* [Yarn v1.22+ (not v2)](https://classic.yarnpkg.com/en/docs/install) [2](#f-yarn) or npm v10+ (already installed with Node) {{ end }} {{ if Tiered == "Yes" }} * [Redis](https://redis.io/) (as the [distributed cache](../framework/fundamentals/caching.md)). @@ -77,17 +77,25 @@ LeptonX is the suggested UI theme that is proper for production usage. Select on Here, you see all the mobile applications available in that startup solution template. These mobile applications are well-integrated into your solution and can use the same backend with your web application. They are simple (do not have pre-built features as much as the web application) but a very good starting point to build your mobile application. -Pick the one best for you, or select the *None* if you don't want a mobile application in your solution, then click Next to navigate to the *Additional UI options* screen: +Pick the one best for you, or select the *None* if you don't want a mobile application in your solution, then click Next to navigate to the *Public website* screen: -![abp-studio-new-solution-dialog-additional-ui-options](images/abp-studio-new-solution-dialog-additional-ui-options.png) +![abp-studio-new-solution-dialog-public-website](images/abp-studio-new-solution-dialog-public-website.png) That startup solution template also provides an option to create a second web application inside the solution. The second application is called the Public website, an ASP.NET Core MVC / Razor Page application. It can be used to create a public landing/promotion for your product. It is well integrated into the solution (can share the same services, entities, database, and the same authentication logic, for example). If you want, you can also include the [CMS Kit module](../modules/cms-kit) to your solution to add dynamic content features to your web application. -So, either select the *Public website* or skip it and click the Next button for the *Solution Structure* selection: +So, either select the *Public website* or skip it and click the Next button for the *Optional Modules* selection: + +![abp-studio-new-solution-dialog-optional-modules.png](images/abp-studio-new-solution-dialog-optional-modules.png) + +Each item in that list is a pre-built application module. You can click the blue icon near to the module name to get more information about the module. You can leave the list as is (so, it installs the most common and used modules for you) or customize based on your preference. + +Installing a module after creating the solution may require manual steps. So, it is better to decide the modules in the beginning. You can create an example solutions before your real solution to explore the solution and modules. + +Once you select the desired modules, click the *Next* button for the *Solution Structure* screen: ![abp-studio-new-solution-dialog-solution-structure](images/abp-studio-new-solution-dialog-solution-structure.png) -The *Tiered* option is used to physically separate the web application (the UI part) from the backend HTTP APIs. It creates a separate host application that only serves the HTTP (REST) APIs. The web application then performs remote HTTP calls to that application for every operation. If the *Tiered* option is not selected, then the web and HTTP APIs are hosted in a single application, and the calls from the UI layer to the API layer are performed in-process. +It creates a separate host application that only serves the HTTP (REST) APIs. The web application then performs remote HTTP calls to that application for every operation. If the *Tiered* option is not selected, then the web and HTTP APIs are hosted in a single application, and the calls from the UI layer to the API layer are performed in-process. The tiered architecture allows you to host the web (UI) application in a server that can not access to your database server. However, it brings a slight loss of performance (because of the HTTP calls between UI and HTTP API applications) and makes your architecture, development, and deployment more complex. If you don't understand the tiered structure, just skip it. @@ -107,9 +115,13 @@ On that screen, you can decide on your database provider by selecting one of the ![abp-studio-new-solution-dialog-database-configurations](images/abp-studio-new-solution-dialog-database-configurations-mongo.png) {{ end }} -Here, you can select the database management systems (DBMS){{ if DB == "EF" }} and the connection string{{ end }}. Now, we are ready to allow ABP Studio to create our solution. Just click the *Create* button and let the ABP Studio do the rest for you. +Here, you can select the database management systems (DBMS){{ if DB == "EF" }} and the connection string{{ end }}. Click *Next* button to see the *Additional Options*. + +![abp-studio-new-solution-dialog-additional-options](images/abp-studio-new-solution-dialog-additional-options.png) + +If you uncheck the *Kubernetes Configuration* option, the solution will not include the Kubernetes configuration files, such as Helm charts and other Kubernetes-related files. You can also specify *Social Logins*; if you uncheck this option, the solution will not be configured for social login. -After clicking the Create button, the dialog is closed and your solution is loaded into ABP Studio: +Now, we are ready to allow ABP Studio to create our solution. Just click the *Create* button and let the ABP Studio do the rest for you. After clicking the Create button, the dialog is closed and your solution is loaded into ABP Studio: ![abp-studio-created-new-solution](images/abp-studio-created-new-solution.png) @@ -129,7 +141,7 @@ Open the [Solution Runner](../studio/running-applications.md) section on the lef Once you click the *Play* icon on the left side, the section is open in the same place as the Solution Explorer section. ABP Studio also opens the *Application Monitor* view on the main content area. *Application Monitor* shows useful insights for your applications (e.g. *HTTP Request*, *Events* and *Exceptions*) in real-time. You can use it to see the happenings in your applications, so you can easily track errors and many helpful details. -In the Solution Runner section (on the left side) you can see all the runnable applications in the current solution. For the MVC with public website example, we have three applications: +In the Solution Runner section (on the left side) you can see all the runnable applications in the current solution. For the MVC with public website and MAUI mobile example, we have four applications: ![abp-studio-quick-start-example-applications-in-solution-runner](images/abp-studio-quick-start-example-applications-in-solution-runner.png) @@ -230,4 +242,4 @@ Before starting the mobile application, ensure that you configure it for [react- > For example in non-tiered MVC with public website application: -![solution-runner-public-website](images/solution-runner-public-website.png) +![solution-runner-public-website](images/solution-runner-public-website.png) \ No newline at end of file diff --git a/docs/en/get-started/microservice.md b/docs/en/get-started/microservice.md index 9a90be00da..47f1091b14 100644 --- a/docs/en/get-started/microservice.md +++ b/docs/en/get-started/microservice.md @@ -71,7 +71,7 @@ Click the Next button to see *Additional Options* selection: ![abp-studio-new-solution-dialog-additional-options](images/abp-studio-new-solution-dialog-additional-options-microservice.png) -If you unchecked the *Kubernetes Configuration* option, the solution will not include the Kubernetes configuration files which include the Helm charts and other Kubernetes related files. +If you unchecked the *Kubernetes Configuration* option, the solution will not include the Kubernetes configuration files which include the Helm charts and other Kubernetes related files. You can also specify *Social Logins*; if you uncheck this option, the solution will not be configured for social login. Now, we are ready to allow ABP Studio to create our solution. Just click the *Create* button and let the ABP Studio do the rest for you. After clicking the Create button, the dialog is closed and your solution is loaded into ABP Studio: @@ -125,6 +125,8 @@ In the *Solution Runner* section (on the left side) you can see all the runnable > All the leaf items in the *Solution Runner* is called as an *Application* as they are executable applications. +> For a faster start process, first start the *Docker-Dependencies*, then you can start all applications. + As shown in the figure above, the executable applications are grouped into folders like `apps`, `gateways`, `infrastructure`, and `services`. You can start/stop them all, a group (folder) of them, or one by one. Before running the applications, it is good to be sure that all applications are built. To do that, right-click the root item in the *Solution Runner* and select *Build* -> *Build All* action. diff --git a/docs/en/get-started/single-layer-web-application.md b/docs/en/get-started/single-layer-web-application.md index fc86aad667..319fb19c9a 100644 --- a/docs/en/get-started/single-layer-web-application.md +++ b/docs/en/get-started/single-layer-web-application.md @@ -21,8 +21,8 @@ The following tools should be installed on your development machine: * [Visual Studio 2022](https://visualstudio.microsoft.com/vs/) (v17.3+) for Windows / [Visual Studio for Mac](https://visualstudio.microsoft.com/vs/mac/). [1](#f-editor) * [.NET 8.0+](https://dotnet.microsoft.com/en-us/download/dotnet) {{ if UI != "Blazor" }} -* [Node v16 or v18](https://nodejs.org/) -* [Yarn v1.20+ (not v2)](https://classic.yarnpkg.com/en/docs/install) [2](#f-yarn) or npm v6+ (already installed with Node) +* [Node v18.19+](https://nodejs.org/) +* [Yarn v1.22+ (not v2)](https://classic.yarnpkg.com/en/docs/install) [2](#f-yarn) or npm v10+ (already installed with Node) {{ end }} {{ if Tiered == "Yes" }} * [Redis](https://redis.io/) (as the [distributed cache](../framework/fundamentals/caching.md)). diff --git a/docs/en/images/abp-overall-diagram-1600.png b/docs/en/images/abp-overall-diagram-1600.png new file mode 100644 index 0000000000..16d397466a Binary files /dev/null and b/docs/en/images/abp-overall-diagram-1600.png differ diff --git a/docs/en/images/cmskit-module-markedItems.png b/docs/en/images/cmskit-module-markedItems.png new file mode 100644 index 0000000000..52eb61f285 Binary files /dev/null and b/docs/en/images/cmskit-module-markedItems.png differ diff --git a/docs/en/images/cmskit-module-markedItemsFilter.gif b/docs/en/images/cmskit-module-markedItemsFilter.gif new file mode 100644 index 0000000000..641975c892 Binary files /dev/null and b/docs/en/images/cmskit-module-markedItemsFilter.gif differ diff --git a/docs/en/images/docs-referencing.png b/docs/en/images/docs-referencing.png new file mode 100644 index 0000000000..2bc3f5da3c Binary files /dev/null and b/docs/en/images/docs-referencing.png differ diff --git a/docs/en/images/issuemanagement-module-solution.png b/docs/en/images/issuemanagement-module-solution.png index 3e01ff1b92..b224045596 100644 Binary files a/docs/en/images/issuemanagement-module-solution.png and b/docs/en/images/issuemanagement-module-solution.png differ diff --git a/docs/en/images/pen-test-alert-list-8.3.png b/docs/en/images/pen-test-alert-list-8.3.png new file mode 100644 index 0000000000..d0584bde22 Binary files /dev/null and b/docs/en/images/pen-test-alert-list-8.3.png differ diff --git a/docs/en/images/suite-add-existing-solution-8.3.png b/docs/en/images/suite-add-existing-solution-8.3.png new file mode 100644 index 0000000000..1d0cdace0e Binary files /dev/null and b/docs/en/images/suite-add-existing-solution-8.3.png differ diff --git a/docs/en/index.md b/docs/en/index.md index 1e7ec4a91a..187bd6ff83 100644 --- a/docs/en/index.md +++ b/docs/en/index.md @@ -3,29 +3,47 @@ ABP 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. ## Why ABP Platform? +The following pages outline why you should use the ABP Platform and how it is used: -Wondering why you should use the ABP Platform instead of creating a new solution from scratch? [Continue reading here](./others/why-abp-platform.md). +* [Why choose ABP?](https://abp.io/why-choose-abp) +* [How it works?](https://abp.io/how-it-works) +* [Return on investment](https://abp.io/return-on-investment) ## Get Started -The [Getting Started](get-started) guide can be used to create and run ABP based solutions with different options and details. Then you can follow the [Todo Application Tutorial](tutorials/todo) to create your first application with ABP, or build a full-featured and real-life web application by following the [Book Store Application Tutorial](tutorials/book-store/part-01.md). +The [Getting Started](get-started) guide can be used to create and run ABP based solutions with different options and details. + +After getting started, you can read the following documents: + +* [Todo Application Tutorial](tutorials/todo) to create your first ABP application. +* [Book Store Application Tutorial](tutorials/book-store/part-01.md) to build a full-featured and real-life web application with ABP. ### UI Framework Options -ABP can work with any UI framework, while the following frameworks are supported out of the box: +ABP can work with any UI framework, while the following frameworks are supported and well-integrated out of the box: -ui options +ui options ### Database Provider Options -ABP can work with any database provider, while the following providers are supported out of the box: +ABP can work with any database provider, while the following providers are supported and well-integrated out of the box: + +ABP Database Providers + +## The ABP Platform -ABP Database Providers +ABP **bridges the gap** between ASP.NET Core and **real-world business application requirements**, allowing you to focus on your 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-1600](images/abp-overall-diagram-1600.png) ## Exploring the Documentation ABP has a **comprehensive documentation** that not only explains ABP, but also includes **guides** and **samples** to help you on creating a **maintainable solution** by introducing and discussing common **software development principle and best practices**. +The next sections highlight important ABP components and provides links to related documents. + ### The Framework #### Architecture diff --git a/docs/en/modules/account/authority-delegation.md b/docs/en/modules/account/authority-delegation.md index 9a973d65e0..fafe297677 100644 --- a/docs/en/modules/account/authority-delegation.md +++ b/docs/en/modules/account/authority-delegation.md @@ -77,6 +77,8 @@ You can click the `Delegate New User` button to delegate a new user: * You can specify a time range to ensure the delegation is only available within the time range. * You can make multiple delegates to the same user and set different delegate time ranges. +> You have to enter the full username to query and delegate a user. + > The delegation has three states: `Expired`, `Active`, and `Future`. These states are set automatically by checking the specified time interval. ### My delegated users @@ -87,4 +89,4 @@ You can see a list of users who delegated you to login on their behalf of them, You can click the `Login` button to log in to the application as a delegated user and go back to your account by clicking the `Back to my account` icon: -![account-pro-module-delegated-impersonate](../../images/account-pro-module-delegated-impersonate.jpg) \ No newline at end of file +![account-pro-module-delegated-impersonate](../../images/account-pro-module-delegated-impersonate.jpg) diff --git a/docs/en/modules/account/impersonation.md b/docs/en/modules/account/impersonation.md index a086729054..ed008c6418 100644 --- a/docs/en/modules/account/impersonation.md +++ b/docs/en/modules/account/impersonation.md @@ -258,6 +258,20 @@ if (!consoleAndAngularClientId.IsNullOrWhiteSpace()) } ``` +Add `impersonation: { userImpersonation: true, tenantImpersonation: true}` object to `oAuthConfig` of `environment` if not exits. + +```js +export const environment = { + //Other props.. + oAuthConfig: { + //Other props.. + impersonation: { + userImpersonation: true, + tenantImpersonation: true, + }, + }, +``` + ### Blazor WASM It is currently not supported. diff --git a/docs/en/modules/cms-kit/index.md b/docs/en/modules/cms-kit/index.md index ad86be8e04..5c30806028 100644 --- a/docs/en/modules/cms-kit/index.md +++ b/docs/en/modules/cms-kit/index.md @@ -17,6 +17,7 @@ The following features are currently available: * Provides a [**menu**](./menus.md) system to manage public menus dynamically. * Provides a [**global resources**](./global-resources.md) system to add global styles and scripts dynamically. * Provides a [**Dynamic Widget**](./dynamic-widget.md) system to create dynamic widgets for page and blog posts. +* Provides a [**Marked Item**](./marked-items.md) system to mark any kind of resource, like a blog post or a product, as a favorite, starred, flagged, or bookmarked. > You can click on the any feature links above to understand and learn how to use it. diff --git a/docs/en/modules/cms-kit/marked-items.md b/docs/en/modules/cms-kit/marked-items.md new file mode 100644 index 0000000000..b6b0af4173 --- /dev/null +++ b/docs/en/modules/cms-kit/marked-items.md @@ -0,0 +1,123 @@ +# CMS Kit: Marked Item System + +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. + +Marked toggling component allows users to mark your items via pre-defined icons/emojis. Here how the marked toggling components may look like: + +![markedItems](../../images/cmskit-module-markedItems.png) + + +you can also customize the marking icons shown in the toggling components. + +## Enabling the Marked Item Feature + +By default, CMS Kit features are disabled. Therefore, you need to enable the features you want, before starting to use it. You can use the [Global Feature](../../Global-Features.md) system to enable/disable CMS Kit features on development time. Alternatively, you can use the ABP Framework's [Feature System](https://docs.abp.io/en/abp/latest/Features) to disable a CMS Kit feature on runtime. + +> Check the ["How to Install" section of the CMS Kit Module documentation](Index.md#how-to-install) to see how to enable/disable CMS Kit features on development time. + +## Options + +Marking system provides a simple approach to define your entity type with mark types like favorite or starred. For example, if you want to use the marking system for products, you need to define an entity type named `product` with the icon name. + +`CmsKitMarkedItemOptions` can be configured in YourModule.cs, in the `ConfigureServices` method of your [module](https://docs.abp.io/en/abp/latest/Module-Development-Basics). Example: + +```csharp +Configure(options => +{ + options.EntityTypes.Add( + new MarkedItemEntityTypeDefinition( + "product", + StandardMarkedItems.Favorite + ) + ); +}); +``` + +`CmsKitMarkedItemOptions` properties: + +- `EntityTypes`: List of defined entity types (`CmsKitMarkedItemOptions`) in the marking system. + +`MarkedItemEntityTypeDefinition` properties: + +- `EntityType`: Name of the entity type. +- `IconName`: The name of the icon. + +## The Marked Item widget + +The marking system provides a toggle widget to allow users to add/remove the marks from an item. You can place the widget with the item as shown below: + +``` csharp +@await Component.InvokeAsync(typeof (MarkedItemToggleViewComponent), new +{ + entityId = "...", + entityType = "product", + needsConfirmation = true // (optional) +}) +``` +* `entityType` was explained in the previous section. +* `entityId` should be the unique id of the product, in this example. If you have a Product entity, you can use its Id here. +* `needsConfirmation` An optional parameter to let the user confirm when removing the mark. + +# Internals + +## Domain Layer + +#### Aggregates + +This module follows the [Entity Best Practices & Conventions](https://docs.abp.io/en/abp/latest/Best-Practices/Entities) guide. + +##### UserMarkedItem + +A user markedItem represents a user has marking on the item. + +- `UserMarkedItem` (aggregate root): Represents a marked item in the system. + +#### Repositories + +This module follows the [Repository Best Practices & Conventions](https://docs.abp.io/en/abp/latest/Best-Practices/Repositories) guide. + +Following custom repositories are defined for this feature: + +- `IUserMarkedItemRepository` + + +#### Domain services + +This module follows the [Domain Services Best Practices & Conventions](https://docs.abp.io/en/abp/latest/Best-Practices/Domain-Services) guide. + +##### Marked Item Manager + +`MarkedItemManager` is used to perform some operations for the `UserMarkedItem` aggregate root. + +### Application layer + +#### Application services + +- `MarkedItemPublicAppService` (implements `IMarkedItemPublicAppService`): Implements the use cases of marking system. + +### Database providers + +#### Common + +##### Table / collection prefix & schema + +All tables/collections use the `Cms` prefix by default. Set static properties on the `CmsKitDbProperties` class if you need to change the table prefix or set a schema name (if supported by your database provider). + +##### Connection string + +This module uses `CmsKit` for the connection string name. If you don't define a connection string with this name, it fallbacks to the `Default` connection string. + +See the [connection strings](https://docs.abp.io/en/abp/latest/Connection-Strings) documentation for details. + +#### Entity Framework Core + +##### Tables + +- CmsUserMarkedItems + +#### MongoDB + +##### Collections + +- **CmsUserMarkedItems** + diff --git a/docs/en/modules/docs.md b/docs/en/modules/docs.md index 6aaf1f2f0a..dc04339e78 100644 --- a/docs/en/modules/docs.md +++ b/docs/en/modules/docs.md @@ -367,7 +367,7 @@ You can use [ABP](https://github.com/abpframework/abp/) GitHub documents to conf For `SQL` databases, you can use the below `T-SQL` command to insert the specified sample into your `DocsProjects` table: ```mssql -INSERT [dbo].[DocsProjects] ([Id], [Name], [ShortName], [Format], [DefaultDocumentName], [NavigationDocumentName], [MinimumVersion], [DocumentStoreType], [ExtraProperties], [MainWebsiteUrl], [LatestVersionBranchName], [ParametersDocumentName], [ConcurrencyStamp]) VALUES (N'12f21123-e08e-4f15-bedb-ae0b2d939659', N'ABP (FileSystem)', N'abp', N'md', N'Index', N'docs-nav.json', NULL, N'FileSystem', N'{"Path":"C:\\Github\\abp\\docs"}', N'/', NULL, N'', N'12f21123e08e4f15bedbae0b2d939659') +INSERT [dbo].[DocsProjects] ([Id], [Name], [ShortName], [Format], [DefaultDocumentName], [NavigationDocumentName], [MinimumVersion], [DocumentStoreType], [ExtraProperties], [MainWebsiteUrl], [LatestVersionBranchName], [ParametersDocumentName], [ConcurrencyStamp]) VALUES (N'12f21123-e08e-4f15-bedb-ae0b2d939659', N'ABP (GitHub)', N'abp', N'md', N'Index', N'docs-nav.json', NULL, N'GitHub', N'{"GitHubRootUrl":"https://github.com/abpframework/abp/tree/{version}/docs","GitHubAccessToken":"","GitHubUserAgent":""}', N'/', N'dev', N'', N'12f21123e08e4f15bedbae0b2d939659') ``` Be aware that `GitHubAccessToken` is masked. It's a private token and you must get your own token and replace the `***` string. @@ -407,7 +407,7 @@ You can use [ABP](https://github.com/abpframework/abp/) GitHub documents to conf For `SQL` databases, you can use the below `T-SQL` command to insert the specified sample into your `DocsProjects` table: ```mssql -INSERT [dbo].[DocsProjects] ([Id], [Name], [ShortName], [Format], [DefaultDocumentName], [NavigationDocumentName], [MinimumVersion], [DocumentStoreType], [ExtraProperties], [MainWebsiteUrl], [LatestVersionBranchName], [ParametersDocumentName]) VALUES (N'12f21123-e08e-4f15-bedb-ae0b2d939659', N'ABP (FileSystem)', N'abp', N'md', N'Index', N'docs-nav.json', NULL, N'FileSystem', N'{"Path":"C:\\Github\\abp\\docs"}', N'/', NULL, N'') +INSERT [dbo].[DocsProjects] ([Id], [Name], [ShortName], [Format], [DefaultDocumentName], [NavigationDocumentName], [MinimumVersion], [DocumentStoreType], [ExtraProperties], [MainWebsiteUrl], [LatestVersionBranchName], [ParametersDocumentName], [ConcurrencyStamp]) VALUES (N'12f21123-e08e-4f15-bedb-ae0b2d939659', N'ABP (FileSystem)', N'abp', N'md', N'Index', N'docs-nav.json', NULL, N'FileSystem', N'{"Path":"C:\\Github\\abp\\docs"}', N'/', NULL, N'', N'12f21123e08e4f15bedbae0b2d939659') ``` Add one of the sample projects above and run the application. In the menu you will see `Documents` link, click the menu link to open the documents page. @@ -666,9 +666,61 @@ See the following examples: ``` ``` ---- +## Referencing Next & Previous Documents + +The **Docs Module** supports referencing previous and next documents. It's useful if you have a series of documents that are strictly related to each other and need to be followed one after the other. + +To reference the previous and next documents from a document, you should specify the documentation titles and their paths as follows: + +``` + + ````json + //[doc-nav] + { + "Previous": { + "Name": "Overall", + "Path": "testing/overall" + }, + "Next": { + "Name": "Integration tests", + "Path": "testing/integration-tests" + } + } + ```` + +``` + +After you specify the next & previous documents, they will appear at the end of the current documentation like in the following figure: + +![](../images/docs-referencing.png) + +## Single Project Mode + +The **single project mode** allows you to use a single name as a project name in your application. If you are not considering supporting multiple projects with their multiple docs and instead if you have a single project and want to have documentation only for it, it's especially useful for you. +You just need to configure the `DocsUiOptions`, set the single project mode as **enabled** and also define a constant project name: +```csharp +Configure(options => +{ + options.RoutePrefix = "docs"; + options.SingleProjectMode.Enable = true; + options.SingleProjectMode.ProjectName = "abp"; +}); +``` + +## Multi Language Mode + +The **multi language mode** allows you to show a combobox that lists and shows all documentation languages and configures the related languages in routes. + +It's enabled by default and supports multiple languages, but if you are considering only supporting a single language, and don't want to show the language combobox in the sidebar of your docs system, you can configure the `DocsUiOptions` and set the multi language mode support as **false** to disable it: + +```csharp +Configure(options => +{ + options.MultiLanguageMode = false; +}); +``` ## See Also diff --git a/docs/en/modules/openiddict-pro.md b/docs/en/modules/openiddict-pro.md index b2e1cbdb01..b70cd83ac2 100644 --- a/docs/en/modules/openiddict-pro.md +++ b/docs/en/modules/openiddict-pro.md @@ -415,6 +415,17 @@ public override void PreConfigureServices(ServiceConfigurationContext context) } ``` +### Disable Transport Security Requirement + +By default, OpenIddict requires the use of HTTPS for all endpoints. You can disable it if it's needed. You just need to configure the `OpenIddictServerAspNetCoreOptions` and set `DisableTransportSecurityRequirement` as **true**: + +```cs +Configure(options => +{ + options.DisableTransportSecurityRequirement = true; +}); +``` + https://documentation.openiddict.com/configuration/token-formats.html#disabling-jwt-access-token-encryption ### Request/Response Process diff --git a/docs/en/modules/openiddict.md b/docs/en/modules/openiddict.md index feb4f3bccd..5f421d9001 100644 --- a/docs/en/modules/openiddict.md +++ b/docs/en/modules/openiddict.md @@ -375,6 +375,17 @@ public override void PreConfigureServices(ServiceConfigurationContext context) } ``` +### Disable Transport Security Requirement + +By default, OpenIddict requires the use of HTTPS for all endpoints. You can disable it if it's needed. You just need to configure the `OpenIddictServerAspNetCoreOptions` and set `DisableTransportSecurityRequirement` as **true**: + +```cs +Configure(options => +{ + options.DisableTransportSecurityRequirement = true; +}); +``` + https://documentation.openiddict.com/configuration/token-formats.html#disabling-jwt-access-token-encryption ### Request/Response Process diff --git a/docs/en/others/penetration-test-report.md b/docs/en/others/penetration-test-report.md index 524f3fc9a7..c092a856ea 100644 --- a/docs/en/others/penetration-test-report.md +++ b/docs/en/others/penetration-test-report.md @@ -1,6 +1,6 @@ # ABP Penetration Test Report -The ABP Commercial MVC `v8.2.0` application template has been tested against security vulnerabilities by the [OWASP ZAP v2.14.0](https://www.zaproxy.org/) tool. The demo web application was started on the `https://localhost:44349` address. The below alerts have been reported by the pentest tool. These alerts are sorted by the risk level as high, medium, and low. The informational alerts are not mentioned in this document. +The ABP Commercial MVC `v8.3.0` application template has been tested against security vulnerabilities by the [OWASP ZAP v2.14.0](https://www.zaproxy.org/) tool. The demo web application was started on the `https://localhost:44349` address. The below alerts have been reported by the pentest tool. These alerts are sorted by the risk level as high, medium, and low. The informational alerts are not mentioned in this document. Many of these alerts are **false-positive**, meaning the vulnerability scanner detected these issues, but they are not exploitable. It's clearly explained for each false-positive alert why this alert is a false-positive. @@ -10,14 +10,15 @@ In the next sections, you will find the affected URLs, attack parameters (reques There are high _(red flag)_, medium _(orange flag)_, low _(yellow flag)_, and informational _(blue flag)_ alerts. -![penetration-test-8.2.0](../images/pen-test-alert-list-8.2.png) -w +![penetration-test-8.3.0](../images/pen-test-alert-list-8.3.png) + > The informational alerts are not mentioned in this document. These alerts are not raising any risks on your application and they are optional. ### Path Traversal [Risk: High] - False Positive - *[GET] - https://localhost:44349/api/audit-logging/audit-logs?startTime=&endTime=&url=&userName=&applicationName=&clientIpAddress=&correlationId=&httpMethod=audit-logs&httpStatusCode=&maxExecutionDuration=&minExecutionDuration=&hasException=true&sorting=executionTime+desc&skipCount=0&maxResultCount=10* (attack: **httpMethod=audit-logs**) - *[POST] - https://localhost:44349/Account/Login* (attack: **\Login**) +- *[POST] - https://localhost:44349/Account/Register* (attack: **\Register**) - *[POST] - https://localhost:44349/Account/SecurityLogs* (attack: **\SecurityLogs**) - *[POST] - https://localhost:44349/Identity/SecurityLogs* (attack: **\SecurityLogs**) @@ -49,6 +50,18 @@ SQL injection may be possible. SQL injection is a web security vulnerability tha ABP uses Entity Framework Core and LINQ. **It's safe against SQL Injection because it passes all data to the database via SQL parameters.** LINQ queries are not composed by using string manipulation or concatenation, that's why they are not susceptible to traditional SQL injection attacks. Therefore, this is a **false-positive** alert. +### SQL Injection - Authentication Bypass [Risk: High] - False Positive + +* *[POST] — https://localhost:44349/Account/Login* (attack: **false AND 1=1 --**) + +**Description**: + +SQL injection may be possible on a login page, potentially allowing the application's authentication mechanism to be bypassed. + +**Solution**: + +This alert indicates that we must not trust client side input (even if there is client side validation in place) and check all data on the server side. ABP Framework already does that and makes server-side validations while authenticating a user. Therefore this is a **false-positive** alert. + ### Absence of Anti-CSRF Tokens [Risk: Medium] — False Positive * *[GET] - https://localhost:44349/Account/LinkUsers/LinkUsersModal?returnUrl=/SettingManagement* @@ -113,8 +126,8 @@ Configure(options => ### Format String Error [Risk: Medium] - False Positive -- *[GET] — https://localhost:44349/Abp/Languages/Switch?culture=ZAP%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%0A&returnUrl=%2F&uiCulture=ar* -- *[GET] — https://localhost:44349/Abp/ApplicationLocalizationScript?cultureName=ZAP%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%0A* +- *[GET] — https://localhost:44349/Abp/Languages/Switch?culture=ZAP%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%0A&returnUrl=%2F&uiCulture=ar* (with combination of different parameters) +- *[GET] — https://localhost:44349/Abp/ApplicationLocalizationScript?cultureName=ZAP%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%25n%25s%0A* (with combination of different parameters) **Description:** @@ -148,19 +161,21 @@ Injection using XSL transformations may be possible and may allow an attacker to **Explanation**: -This is a **false-positive** alert. v8.2.0 uses .NET 8 and the XSLT transformation is not possible on .NET5 or higher. +This is a **false-positive** alert. v8.3.0 uses .NET 8 and the XSLT transformation is not possible on .NET5 or higher. ### Application Error Disclosure [Risk: Low] — False Positive - *[POST] — https://localhost:44349/Account/ImpersonateUser* +- *[POST] — https://localhost:44349/Saas/Host/Editions* +- *[POST] — https://localhost:44349/Saas/Host/Tenants* **Description:** -The reported page contains an error/warning message that may disclose sensitive information like the location of the file that produced the unhandled exception. This information can be used to launch further attacks against the web application. The alert could be a false positive if the error message is found inside a documentation page. +The reported pages contain an error/warning message that may disclose sensitive information like the location of the file that produced the unhandled exception. This information can be used to launch further attacks against the web application. The alert could be a false positive if the error message is found inside a documentation page. **Explanation:** -This vulnerability was reported as a **positive** alert because the application ran in `Development` mode. ABP Framework throws exceptions for developers in the `Development` environment. We set the environment to `Production` and re-run the test, then the server sent a *500-Internal Error* without the error disclosed. Therefore this alert is **false-positive**. Further information can be found in the following issue: [github.com/abpframework/abp/issues/14177](https://github.com/abpframework/abp/issues/14177#issuecomment-1268206947). +This vulnerability was reported as a **positive** alert because the application ran in `Development` mode. ABP throws exceptions for developers in the `Development` environment. We set the environment to `Production` and re-run the test, then the server sent a *500-Internal Error* without the error disclosed. Therefore this alert is **false-positive**. Further information can be found in the following issue: [github.com/abpframework/abp/issues/14177](https://github.com/abpframework/abp/issues/14177#issuecomment-1268206947). ### Cookie No `HttpOnly` Flag [Risk: Low] — Positive (No need for a fix) @@ -326,89 +341,10 @@ The `X-Content-Type-Options` header allows you to avoid MIME type sniffing by sa You can add the [ABP's Security Header Middleware](../framework/ui/mvc-razor-pages/security-headers.md#security-headers-middleware) into the request pipeline to set the `X-Content-Type-Options` as *no-sniff*. Also, this middleware adds other pre-defined security headers to your application, including `X-XSS-Protection`, `X-Frame-Options` and `Content-Security-Policy` (if it's enabled). Read [Security Headers](../framework/ui/mvc-razor-pages/security-headers.md) documentation for more info. -## Other Alerts - -The following alerts are reported by the community or our customers in v8.1+. - -### Disclosed Microsoft Client Secret [Risk: Medium] - Positive (No need for a fix) - -* *[GET] — https://localhost:44349/setting-management* - -**Description**: - -Secrets shall never be exposed to unauthorized parties. This exposure can result from improper storage, insecure transmission, or inadequate access controls. In this specific case the owner of the user account is authorized to read and modify the secret. In case of administrative accounts, it could lead to further damages, by performing lateral movements, by using the credentials to access other services. - -**Explanation**: - -The endpoint `/setting-management/` requires permission to be visited and can only be accessed via authorized users. It is the setting page to configure the application settings including the *default localization language*, *timezone*, *layout type*, *password settings* and more... - -### Incorrect Session Handling – Insufficient Session Termination [Risk: Low] - Positive - -* *[GET] — https://localhost:44349/Account/Logout* - -**Description**: - -Application logout functionality does not terminate the user's session. This increases the risk of unauthorized application access via successful session hijacking attacks, users leaving their computers unattended, and/or a local attacker utilizing the browser history. On logout, user sessions should be invalidated and all relevant session identifiers, authentication tokens and application state information deleted or overwritten both on server and on client side. - -**Explanation**: - -You can track the status of this case at [github.com/abpframework/abp/issues/19576](https://github.com/abpframework/abp/issues/19576). - -### Information Disclosure via Configuration Scripts [Risk: Low] - Positive (No need for a fix) +## Other Alerts (Fixed) -- *[GET] — https://localhost:44349/Abp/ApplicationConfigurationScript* or *https://localhost:44349/api/abp/application-configuration* -- *[GET] — https://localhost:44349/Abp/ServiceProxyScript* - -**Description**: - -When users authenticate to the application, their browsers issue requests to 2 endpoints that host configuration scripts for the application framework. The first contains information about the passwords that are accepted by the application. This information can be used by the attackers to narrow down their dictionaries and only focus on the possible passwords for their -attacks. The second, on the other hand, discloses some endpoints that are unavailable to the users with low privileges. - -**Explanation**: - -* **Application Configuration Script**: - - These 2 endpoints are used by ABP application templates. The first one `/Abp/ApplicationConfigurationScript` provides configuration and user based definitions with JSON format. This data is important for SPA based applications to get the current language, localization texts, policies, settings, user info, current tenant or time zone information. This is not a data leak. User specific data can only be accessed after user logon. Other data are application-wide used not dangerous for unauthenticated users. For more information check out the [Application Configuration](../framework/api-development/standard-apis/configuration.md) document. - -* **Service Proxy Script**: - - This endpoint provides auto-generated JavaScript AJAX call methods for the backend operations. This may disclosure information about the host API methods. On the other hand, it makes easy to consume the HTTP APIs from JavaScript side. ABP Application Services are automatically converted to JavaScript proxies. But it does not mean that these JavaScript methods can be executed anonymously. The attacker still needs to log in to perform operations. For more information check out the [Service Proxy Script](../framework/ui/mvc-razor-pages/dynamic-javascript-proxies.md) document. If you want to disable this functionality, check out [github.com/abpframework/abp/issues/12297](https://github.com/abpframework/abp/issues/12297) - -### User E-mail Address Enumeration [Risk: Low] - Positive - -* *[GET] — https://localhost:44349/Account/ForgotPassword* - -**Description**: - -It is possible to collect valid email addresses by interacting with the "Forgot Password" function of the -application. This vulnerability is useful to increase the efficiency of brute force attacks. - -**Explanation**: - -If the email is known, it is easier to find the corresponding password. With the "Forgot Password" function, the attacker can enumerate valid email addresses as the function returns `Cannot find the given email` error, when there is no user registered with the provided e-mail address. This vulnerability has been fixed with v8.2, see the related issue for more info: [github.com/abpframework/abp/issues/19588](https://github.com/abpframework/abp/issues/19588). - -### Software Version Disclosure [Risk: Low] - Positive (No need for a fix) - -* *[GET] — https://localhost:44349/* - -**Description**: - -The assessed web server discloses its version number within the HTTP response headers. This information facilitates attackers in planning future attacks and can be used in the automation of the attack process. It is unnecessary to share this information with the clients of the web application. The vulnerability can be verified by issuing HTTP requests and inspecting HTTP response headers. HTTP header "Server" contains the version information. -The following header was received in server responses: `Server: Microsoft-IIS/10.0` or `Server: Microsoft-HTTPAPI/2.0`. - -**Explanation**: - -This is not directly related to ABP. It's a header added by the IIS server. So you can disable this header with the `web.config` file: - -```xml - - - - - - - - -``` +The following alerts were reported by the community or our customers in v8.2 and fixed: -The following issue has been opened for this vulnerability, you can follow it at [github.com/abpframework/abp/issues/19589](https://github.com/abpframework/abp/issues/19589). \ No newline at end of file +* https://github.com/abpframework/abp/issues/19576 +* https://github.com/abpframework/abp/issues/19588 +* https://github.com/abpframework/abp/issues/19589 diff --git a/docs/en/release-info/migration-guides/abp-8-2.md b/docs/en/release-info/migration-guides/abp-8-2.md index cd904f052e..15de922d4f 100644 --- a/docs/en/release-info/migration-guides/abp-8-2.md +++ b/docs/en/release-info/migration-guides/abp-8-2.md @@ -16,9 +16,6 @@ This document is a guide for upgrading ABP v8.x solutions to ABP v8.2. There are Before this version, all of the projects above were targeting multiple frameworks (**netstandard2.0**, **netstandard2.1** and **net8.0**), with this version, we started to only target **net8.0** for these template projects. Note that, all other shared libraries still target multiple frameworks. > This change should not affect your pre-existing solutions and you don't need to make any changes in your application. See the PR for more info: https://github.com/abpframework/abp/pull/19565 -## Upgraded AutoMapper to 13.0.1 - -In this version, **AutoMapper** library version upgraded to 13.0.1. See [the release notes of AutoMapper v13.0.1](https://github.com/AutoMapper/AutoMapper/releases/tag/v13.0.1) for more information. ## Added default padding to `.tab-content` class for Basic Theme @@ -60,4 +57,62 @@ In this version, the Angular UI has been updated to use the Angular version 17.3 The **Session Management** feature allows you to prevent concurrent login and manage user sessions. -In this version, a new entity called `IdentitySession` has been added to the framework and you should create a new migration and apply it to your database. \ No newline at end of file +In this version, a new entity called `IdentitySession` has been added to the framework and you should create a new migration and apply it to your database. + +## Upgraded NuGet Dependencies + +You can see the following list of NuGet libraries that have been upgraded with this release, if you are using one of these packages explicitly, you may consider upgrading them in your solution: + +| Package | Old Version | New Version | +| ---------------------------------------------------------- | ----------- | ----------- | +| AutoMapper | 12.0.1 | 13.0.1 | +| Blazorise | 1.4.1 | 1.5.2 | +| Blazorise.Bootstrap5 | 1.4.1 | 1.5.2 | +| Blazorise.Icons.FontAwesome | 1.4.1 | 1.5.2 | +| Blazorise.Components | 1.4.1 | 1.5.2 | +| Blazorise.DataGrid | 1.4.1 | 1.5.2 | +| Blazorise.Snackbar | 1.4.1 | 1.5.2 | +| Hangfire.AspNetCore | 1.8.6 | 1.8.14 | +| Hangfire.SqlServer | 1.8.6 | 1.8.14 | +| Microsoft.AspNetCore.Authentication.JwtBearer | 8.0.0 | 8.0.4 | +| Microsoft.AspNetCore.Authentication.OpenIdConnect | 8.0.0 | 8.0.4 | +| Microsoft.AspNetCore.Authorization | 8.0.0 | 8.0.4 | +| Microsoft.AspNetCore.Components | 8.0.0 | 8.0.4 | +| Microsoft.AspNetCore.Components.Authorization | 8.0.0 | 8.0.4 | +| Microsoft.AspNetCore.Components.Web | 8.0.0 | 8.0.4 | +| Microsoft.AspNetCore.Components.WebAssembly | 8.0.0 | 8.0.4 | +| Microsoft.AspNetCore.Components.WebAssembly.Server | 8.0.0 | 8.0.4 | +| Microsoft.AspNetCore.Components.WebAssembly.Authentication | 8.0.0 | 8.0.4 | +| Microsoft.AspNetCore.Components.WebAssembly.DevServer | 8.0.0 | 8.0.4 | +| Microsoft.AspNetCore.DataProtection.StackExchangeRedis | 8.0.0 | 8.0.4 | +| Microsoft.AspNetCore.Mvc.NewtonsoftJson | 8.0.0 | 8.0.4 | +| Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation | 8.0.0 | 8.0.4 | +| Microsoft.AspNetCore.Mvc.Testing | 8.0.0 | 8.0.4 | +| Microsoft.AspNetCore.TestHost | 8.0.0 | 8.0.4 | +| Microsoft.AspNetCore.WebUtilities | 8.0.0 | 8.0.4 | +| Microsoft.Data.SqlClient | 8.0.0 | 8.0.4 | +| Microsoft.EntityFrameworkCore | 8.0.0 | 8.0.4 | +| Microsoft.EntityFrameworkCore.Design | 8.0.0 | 8.0.4 | +| Microsoft.EntityFrameworkCore.InMemory | 8.0.0 | 8.0.4 | +| Microsoft.EntityFrameworkCore.Proxies | 8.0.0 | 8.0.4 | +| Microsoft.EntityFrameworkCore.Relational | 8.0.0 | 8.0.4 | +| Microsoft.EntityFrameworkCore.Sqlite | 8.0.0 | 8.0.4 | +| Microsoft.EntityFrameworkCore.SqlServer | 8.0.0 | 8.0.4 | +| Microsoft.EntityFrameworkCore.Tools | 8.0.0 | 8.0.4 | +| Microsoft.Extensions.DependencyInjection.Abstractions | 8.0.0 | 8.0.1 | +| Microsoft.Extensions.FileProviders.Embedded | 8.0.0 | 8.0.4 | +| Microsoft.Extensions.Logging.Abstractions | 8.0.0 | 8.0.1 | +| Microsoft.Extensions.Options | 8.0.0 | 8.0.2 | +| Microsoft.IdentityModel.Protocols.OpenIdConnect | - | 7.5.1 | +| Microsoft.IdentityModel.Tokens | - | 7.5.1 | +| Microsoft.IdentityModel.JsonWebTokens | - | 7.5.1 | +| System.IdentityModel.Tokens.Jwt | - | 7.5.1 | +| OpenIddict.Abstractions | 5.1.0 | 5.5.0 | +| OpenIddict.Core | 5.1.0 | 5.5.0 | +| OpenIddict.Server.AspNetCore | 5.1.0 | 5.5.0 | +| OpenIddict.Validation.AspNetCore | 5.1.0 | 5.5.0 | +| OpenIddict.Validation.ServerIntegration | 5.1.0 | 5.5.0 | +| Oracle.EntityFrameworkCore | 8.21.121 | 8.23.40 | +| Pomelo.EntityFrameworkCore.MySql | 8.0.0 | 8.0.2 | +| SixLabors.ImageSharp | 3.0.2 | 3.1.4 | + diff --git a/docs/en/release-info/migration-guides/abp-8-3.md b/docs/en/release-info/migration-guides/abp-8-3.md new file mode 100644 index 0000000000..50a7f274a4 --- /dev/null +++ b/docs/en/release-info/migration-guides/abp-8-3.md @@ -0,0 +1,68 @@ +# ABP Version 8.3 Migration Guide + +This document is a guide for upgrading ABP v8.x solutions to ABP v8.3. There are some changes in this version that may affect your applications, please read it carefully and apply the necessary changes to your application. + +## Open-Source (Framework) + +### Added `AdminUserName` parameter to `IIdentityDataSeeder.SeedAsync` method + +Prior to this version, `IIdentityDataSeeder.SeedAsync` was used to seed the initial user data with the `admin` as the username, to be able to easily test all applications with all permissions granted. + +In this version on, we allow you to set the default **adminUserName**. So, you can set the default user name to any name you want or leave it as it is and let the username be `admin` as before. + +For example, in the `MyProjectNameDbMigrationService.SeedDataAsync` method (under the domain project's **Data** folder), you can pass the username as below: + +```diff + private async Task SeedDataAsync(Tenant? tenant = null) + { + Logger.LogInformation($"Executing {(tenant == null ? "host" : tenant.Name + " tenant")} database seed..."); + + await _dataSeeder.SeedAsync(new DataSeedContext(tenant?.Id) + .WithProperty(IdentityDataSeedContributor.AdminEmailPropertyName, IdentityDataSeedContributor.AdminEmailDefaultValue) + .WithProperty(IdentityDataSeedContributor.AdminPasswordPropertyName, IdentityDataSeedContributor.AdminPasswordDefaultValue) ++ .WithProperty(IdentityDataSeedContributor.AdminUserNamePropertyName, "your-admin-user-name") + ); + } +``` + +Normally, you don't need to make any changes in your code related to this change. However, if you used the `IIdentityDataSeeder.SeedAsync` method in your application, now also gets additional (and optional) `adminUserName` parameter that you can pass the value on. + +See the PR for more info: https://github.com/abpframework/abp/pull/20131/ + +### Docs Module: Improvements & Single Project Mode Support + +In this version, we made some improvements in the [Docs Module](../../modules/docs.md) and introduced single project mode, which allows you to use a single project name for all of your documents. + +While implementing this new feature, we made some small changes to the existing classes. For example, the constructor methods of the following classes have been changed, and need to be updated in your code, if you use them: + +* `TreeTagHelper.cs`: https://github.com/abpframework/abp/pull/19419/files#diff-e0fb91c1b564d61dedf9dfc60d08e7e0af57b433797fcb3bd664f3fd4768ea0d + +* `MarkdownDocumentToHtmlConverter.cs`: https://github.com/abpframework/abp/pull/19419/files#diff-948e25b2d8851576888f8053b5f2c9416e23576aff95a88ef8ec8ca2841b3622 + +See the PR for more info: https://github.com/abpframework/abp/pull/19419 + +### Updated `datatables.net` to 2.0.2 + +In this version, the `datatables.net` library version was updated from v1.11.4 to v2.0.2. We made all related changes at the framework level and updated the dependency and its resource mapping configurations. Also, we made it backward compatible so it should not directly affect your application. + +However, notice this package is used by the `@abp/aspnetcore.mvc.ui.theme.shared` package, which is used by the official themes. Therefore, if you used any methods from the **datatables.net** library it might be already deprecated or removed. + +See the PR for more info: https://github.com/abpframework/abp/pull/19340 + +### Angular UI + +We wish to formally inform you that ABP version 8.3 has been upgraded to incorporate Angular version 18. Consequently, we recommend migrating your application to [Angular v18](https://angular.dev/update-guide) to ensure compatibility. + +## PRO + +> Please check the **Open-Source (Framework)** section before reading this section. The listed topics might affect your application and you might need to take care of them. + +If you are a paid-license owner and using the ABP's paid version, then please follow the following sections to get informed about the breaking changes and apply the necessary ones: + +### Added RegEx Support to CMS Kit's (PRO) URL Forwarding System + +ABP provides a [URL Forwarding System](../../modules/cms-kit-pro/url-forwarding.md), which allows you to create URLs that redirect to other pages or external websites. Prior to this version, the URL Forwarding System was only working for static URLs and didn't support RegEx. In this version, we introduced the RegEx support for the URL Forwarding System and now you can pass regular expressions for not static URLs. + +Since a new property has been added to the `CmsShortenedUrl` entity, you should create a new migration and apply it to your database. + +> After creating a new migration and applying it to your database, typically you don't need to make any changes, however, if you have overridden a page/method or class related to the URL Forwarding System, you might need to update it accordingly. For this purpose, you can get the source code of the [CMS Kit Module's](../../modules/cms-kit-pro/index.md) and update the related parts in your application. \ No newline at end of file diff --git a/docs/en/release-info/migration-guides/index.md b/docs/en/release-info/migration-guides/index.md index 6670e9ba3a..804b17b376 100644 --- a/docs/en/release-info/migration-guides/index.md +++ b/docs/en/release-info/migration-guides/index.md @@ -2,6 +2,7 @@ The following documents explain how to migrate your existing ABP applications. We write migration documents only if you need to take an action while upgrading your solution. Otherwise, you can easily upgrade your solution using the [abp update command](../upgrading.md). +- [8.x to 8.3](abp-8-3.md) - [8.1 to 8.2](abp-8-2.md) - [8.0 to 8.1](abp-8-1.md) - [7.x to 8.0](abp-8-0.md) diff --git a/docs/en/release-info/release-notes.md b/docs/en/release-info/release-notes.md index d091a5840b..b10282bba7 100644 --- a/docs/en/release-info/release-notes.md +++ b/docs/en/release-info/release-notes.md @@ -2,13 +2,20 @@ This document contains **brief release notes** for each release. Release notes only include **major features** and **visible enhancements**. They don't include all the development done in the related version. To see raw and detailed change logs for every release, please check the related milestone and [the change logs page](https://abp.io/pro-releases) (only for paid license holders). -> If you want to read detailed release posts for each version, please see the [official ABP blog](https://abp.io/blog). +> If you want to read the release notes for each ABP Studio release, check it out from [here](../studio/release-notes.md). -## 8.2 (2024-05-25) +## 8.3 (2024-09-05) -> This version is currently in preview. The final release date is planned for July, 2024. +See the detailed **[blog post / announcement](https://abp.io/blog/announcing-abp-8-3-stable-release)** for the v8.3 release. -See the detailed **[blog post / announcement](https://abp.io/blog/announcing-abp-8-2-release-candidate)** for the v8.2 release. +* CMS Kit: Marked Items & Approvement System for Commenting Feature +* Enhancements on the Docs Module (Google Translation support & new single project mode) +* Using DbFunction for generating more precise SQL commands for Global Query Filters +* CMS Kit (Pro): FAQ System + +## 8.2 (2024-06-26) + +See the detailed **[blog post / announcement](https://abp.io/blog/announcing-abp-8-2-stable-release)** for the v8.2 release. * Blazor Full-Stack Web App UI. * Introducing the `IBlockUiService` for Blazor UI (disables/blocks the page or a part of the page). diff --git a/docs/en/release-info/road-map.md b/docs/en/release-info/road-map.md index 6c14efefda..82da0a0b8e 100644 --- a/docs/en/release-info/road-map.md +++ b/docs/en/release-info/road-map.md @@ -4,55 +4,119 @@ This document provides a road map, release schedule, and planned features for th ## Next Versions -### v8.3 - -The next version will be 8.3 and we will be mostly working on the following topics: - -* CMS Kit: Marked Items/Favorites & Approvement System for Comments -* Docs Module: Added Google Translation Support & Introducing the Single Project Mode -* Using DBFunction for Global Query Filters -* Upgrade Angular Version to v18.1.x -* Improvements on the existing features and provide more guides... - -See the [8.3 milestone](https://github.com/abpframework/abp/milestone/106) for all the issues we've planned to work on. +### v9.0 + +The next version will be 9.0 and planned to release the stable 9.0 version in November 2024. We will be mostly working on the following topics: + +* Framework + * Upgrading to .NET 9.0 + * Google Cloud Storage BLOB Provider + * Better handling localization resources in a microservice scenario + * SSR support for the Angular UI + * Upgrading 3rd-party dependencies + +* ABP Suite + * Multiple navigation properties to the same target entity + * Define navigation properties without target string property dependency + * Improvements one-to-many scenarios + * Access to default code generation templates for customized templates + +* ABP Studio + * Blazor WebApp UI option for the new startup templates + * Execution order (dependency management) for Solution Runner + * Automate more details on new service creation for a microservice solution + * Support multiple concurrent Kubernetes deployment/integration scenarios + * Show the README file when you create a new solution or open an existing solution + * Improve ABP Suite code-generation possibilities for microservice solutions + * Improve the module installation experience + * Auto-install 3rd-party dependencies + * Better handle long log files + * Allow to directly create new solutions with ABP's RC (Release Candidate) versions + * Support Intel processors for Mac computers, support ARM chipset for Windows and support Linux OS + * Improve client proxy generation experience + +* Application modules + * Account module: Support mixed social/local login scenarios + * UI/UX improvements on existing application modules + +* New tutorials + * Modular monolith development + * Microservice development ## Backlog Items -The *Next Versions* section above shows the main focus of the planned versions. However, in each release, we add new features to the core framework and the [application modules](../modules). - -Here is a list of major items in the backlog we are considering working on in the next versions. +The *Next Versions* section above shows the main focus of the planned versions. However, in each release, we add new features to the ABP platform. ### Framework -* [#86](https://github.com/abpframework/abp/issues/86) / GrapQL Integration +The ABP framework is [open source](https://github.com/abpframework/abp) and free for everyone. You can see its [public backlog](https://github.com/abpframework/abp/milestone/2). Here, are some of the important features you can expect from next versions: + * [#236](https://github.com/abpframework/abp/issues/236) / Resource based authorization system -* [#2882](https://github.com/abpframework/abp/issues/2882) / Providing a gRPC integration infrastructure (while it is [already possible](https://github.com/abpframework/abp-samples/tree/master/GrpcDemo) to create or consume gRPC endpoints for your application, we plan to create endpoints for the [standard application modules](../modules)) +* [#2882](https://github.com/abpframework/abp/issues/2882) / Providing a gRPC integration infrastructure (while it is [already possible](https://github.com/abpframework/abp-samples/tree/master/GrpcDemo) to create or consume gRPC endpoints for your application, we plan to create endpoints for the [standard application modules](../modules/index.md)) * [#57](https://github.com/abpframework/abp/issues/57) / Built-in CQRS infrastructure +* [#58](https://github.com/abpframework/abp/issues/58) / Content localization system (multilingual entities) * [#4223](https://github.com/abpframework/abp/issues/4223) / WebHook system * [#162](https://github.com/abpframework/abp/issues/162) / Azure ElasticDB Integration for multitenancy * [#2296](https://github.com/abpframework/abp/issues/2296) / Feature toggling infrastructure -* [#16342](https://github.com/abpframework/abp/issues/16342) / CMS Kit: Meta information for SEO -* [#16260](https://github.com/abpframework/abp/issues/16260) / GCP Blob Storage Provider * [#15932](https://github.com/abpframework/abp/issues/15932) / Introduce ABP Diagnostics Module -* [#16756](https://github.com/abpframework/abp/issues/16756) / Blob Storing - Provider configuration UI * [#16744](https://github.com/abpframework/abp/issues/16744) / State Management API - -### Modules / Themes - -* New styles, components and features for the LeptonX theme. -* Payment module: Invoice system. -* Dynamic dashboard system. -* User guiding module. -* gRPC integration and implementation for all the pre-built modules. -* Chat Module: Deleting messages & conversations - -### Tooling - -* Suite: File, DateOnly and TimeOnly types -* Suite: Export child/detail entity records -* CMS Kit features, including FAQ, spam protection, social media feeds, multi-language support, and so on. - -You can always check the milestone planning and the prioritized backlog issues on [the GitHub repository](https://github.com/abpframework/abp/milestones) for a detailed road map. The backlog items are subject to change. We are adding new items and changing priorities based on the community feedbacks and goals of the project. +* [#17815](https://github.com/abpframework/abp/issues/17815) / Operation Rate Limiting + +### Application Modules / UI Themes + +ABP Platform provides many (free and commercial) [pre-built application modules](../modules/index.md) and modern [UI themes](../ui-themes/index.md). In every release, many enhancements and bugfixes are already done on the existing modules. In addition, here some of the planned features for next versions: + +* LeptonX theme: New layouts, styles and components +* CMS Kit module: Meta information for SEO, media gallery, RSS feed, content versioning, social media streams +* Identity module: Idle session warning +* Payment module: Invoice system +* New module: User notification +* New module: Dynamic dashboard +* New module: User guiding +* New module: Keycloak integration + +### ABP Studio + +[ABP Studio](../studio/index.md) is a cross-platform desktop application for ABP and .NET developers to simplify and automate daily tasks of developers. It has a community (free) edition as well as commercial editions. It is released and versioned independently from the ABP platform and frequently released. + +Here, are some of the important planned features for next ABP Studio versions: + +* Theme builder for the LeptonX theme +* Analyze user solutions to explore entities, domain services, application services, pages and other fundamental objects. +* Add status bar to the built-in browser to easily see errors +* Swagger authentication support for the built-in browser +* Show related requests/events (traces) together in the solution runner panel +* Integrate common tool dashboards into ABP Studio (such a Garana, Redis, RabbitMQ, Kibana, etc) +* Built-in command terminal +* Automate all steps of new service creation for microservice solutions +* Container application type support for Solution Runner (to individually control docker dependencies) +* More options while creating new solutions +* Downloading samples in ABP studio +* Built-in ABP documentation experience +* Auto-execute terminal commands in markdown files +* Compare changed on the startup templates when a new ABP version is published +* Remove unused projects while downloading source code of an existing module +* Testing/hosting applications for module templates +* Easily explore all module and package dependencies of a large solution +* Built-in deployment options +* Rapid application development features +* ABP support integration + +### ABP Suite + +[ABP Suite](../suite/index.md) is a GUI application that is mainly used to generate CRUD style pages in your application. You define your entity and it can generate all the code from the database layer to the UI layer. The generated code is clean and a perfect starting point to implement your custom requirements on top of it. + +Here, are some of the important planned features for next ABP Suite versions: + +* Handle image properties for entities +* Allow to define extra properties for DTOs those are not a part of the entity +* Allow to create pages instead of modals for CRUD page generation +* View-only (detail view) modal/page for an entity +* Export child/detail entity records as a part of export operation for a main (master) entity +* Allow to accept attachments (files) for an entity +* Allow to add custom entity actions for an entity +* Allow to inherit from an existing entity class +* Custom form layouts on CRUD page generation ## Feature Requests diff --git a/docs/en/samples/index.md b/docs/en/samples/index.md index 619eb81484..793a777ad1 100644 --- a/docs/en/samples/index.md +++ b/docs/en/samples/index.md @@ -1,22 +1,34 @@ -# Sample Applications +# ABP Samples Here, a list of official samples built with ABP. +## Event Hub + +A reference application built with ABP. It implements the Domain Driven Design with multiple application layers. + +* [Live demo](https://www.openeventhub.com/) +* [Source code](https://github.com/abpframework/eventhub) + ## eShopOnAbp Reference microservice solution built with ABP and .NET. +* [Live demo](https://www.eshoponabp.com/) * [Source code](https://github.com/abpframework/eShopOnAbp) -## Event Hub +## CMS Kit Demo -A reference application built with ABP. It implements the Domain Driven Design with multiple application layers. +A minimal example website built with the [CMS Kit module](../modules/cms-kit/index.md). -* [Source code](https://github.com/abpframework/eventhub) +* [Live demo](https://cms-kit-demo.abpdemo.com/) +* [Source code](https://github.com/abpframework/cms-kit-demo) ## Easy CRM -A middle-size CRM application built with ABP. [Click here](easy-crm.md) to see the details. +A middle-size CRM application built with ABP. + +* [Live demo](http://easycrm.abp.io/) +* [Click here](easy-crm.md) to see the details and download the source code. ## Book Store diff --git a/docs/en/solution-templates/application-module/index.md b/docs/en/solution-templates/application-module/index.md index a54747dc15..857b4ed936 100644 --- a/docs/en/solution-templates/application-module/index.md +++ b/docs/en/solution-templates/application-module/index.md @@ -15,17 +15,25 @@ dotnet tool install -g Volo.Abp.Studio.Cli Then use the `abp new` command in an empty folder to create a new solution: ```bash -abp new Acme.IssueManagement -t module +abp new-module Acme.BookStore ``` - `Acme.IssueManagement` is the solution name, like *YourCompany.YourProduct*. You can use single level, two-levels or three-levels naming. -### Without User Interface +### Specifying the User Interface -The template comes with MVC, Blazor & Angular user interfaces by default. You can use `--no-ui` option to not include any of these UI layers. +The template comes without a user interface by default. You can use the `mvc`, `blazor`, `blazor-server`, or `angular` options to include any of these UI layers. You can also combine them. For example, you can use `mvc,angular` to include both MVC and Angular UI. To create a module without a user interface, don't specify any value. ````bash -abp new Acme.IssueManagement -t module --no-ui +abp new-module Acme.IssueManagement -u mvc,angular +```` + +#### Specifying the Database Provider + +The template comes with the *EntityFrameworkCore* database provider by default. You can use the `ef` or `mongodb` options to include either of these providers. You can also combine them. For example, you can use `ef,mongodb` to include both EntityFrameworkCore and MongoDB. + +````bash +abp new-module Acme.IssueManagement -d ef,mongodb ```` ## Solution Structure @@ -34,11 +42,10 @@ Based on the options you've specified, you will get a slightly different solutio ![issuemanagement-module-solution](../../images/issuemanagement-module-solution.png) -Projects are organized as `src`, `test` and `host` folders: +Projects are organized as `src` and`test` folders: * `src` folder contains the actual module which is layered based on [DDD](../../framework/architecture/domain-driven-design) principles. * `test` folder contains unit & integration tests. -* `host` folder contains applications with different configurations to demonstrate how to host the module in an application. These are not a part of the module, but useful on development. The diagram below shows the layers & project dependencies of the module: @@ -105,8 +112,6 @@ The solution has multiple test projects, one for each layer: - `.MongoDB.Tests` is used to test MongoDB configuration and custom repositories. - `.TestBase` is a base (shared) project for all tests. -In addition, `.HttpApi.Client.ConsoleTestApp` is a console application (not an automated test project) which demonstrate the usage of HTTP APIs from a Dotnet application. - Test projects are prepared for integration testing; - It is fully integrated to ABP and all services in your application. @@ -117,49 +122,9 @@ You can still create unit tests for your classes which will be harder to write ( > Domain & Application tests are using EF Core. If you remove EF Core integration or you want to use MongoDB for testing these layers, you should manually change project references & module dependencies. -### Host Projects - -The solution has a few host applications to run your module. Host applications are used to run your module in a fully configured application. It is useful on development. Host applications includes some other modules in addition to the module being developed: - -Host applications support two types of scenarios. - -#### Single (Unified) Application Scenario - -If your module has a UI, then `.Web.Unified` application is used to host the UI and API on a single point. It has its own `appsettings.json` file (that includes the database connection string) and EF Core database migrations. - -For the `.Web.Unified` application, there is a single database, named `YourProjectName_Unified` (like *IssueManagement_Unified* for this sample). - -> If you've selected the `--no-ui` option, this project will not be in your solution. - -##### How to Run? - -Set `host/YourProjectName.Web.Unified` as the startup project, run `Update-Database` command for the EF Core from Package Manager Console and run your application. Default username is `admin` and password is `1q2w3E*`. - -#### Separated Deployment & Databases Scenario - -In this scenario, there are three applications; - -* `.AuthServer` application is an authentication server used by other applications. It has its own `appsettings.json` that contains database connection and other configurations. -* `.HttpApi.Host` hosts the HTTP API of the module. It has its own `appsettings.json` that contains database connections and other configurations. -* `.Web.Host` host the UI of the module. This project contains an `appsettings.json` file, but it does not have a connection string because it never connects to the database. Instead, it mainly contains endpoint of the remote API server and the authentication server. - -The diagram below shows the relation of the applications: - -![tiered-solution-applications](../../images/tiered-solution-applications.png) - -`.Web.Host` project uses OpenId Connect Authentication to get identity and access tokens for the current user from the `.AuthServer`. Then uses the access token to call the `.HttpApi.Host`. HTTP API server uses bearer token authentication to obtain claims from the access token to authorize the current user. - -##### Pre-requirements - -* [Redis](https://redis.io/): The applications use Redis as as distributed cache. So, you need to have Redis installed & running. - -##### How to Run? - -You should run the application with the given order: +### Host Project -- First, run the `.AuthServer` since other applications depends on it. -- Then run the `.HttpApi.Host` since it is used by the `.Web.Host` application. -- Finally, you can run the `.Web.Host` project and login to the application using `admin` as the username and `1q2w3E*` as the password. +The solution doesn't have a host application to run your module. However, you can create a [single-layer](../../get-started/single-layer-web-application.md) or [layered](../../get-started/layered-web-application.md) application and [import](../../studio/solution-explorer.md#imports) the created module into the host application. ## UI @@ -172,7 +137,7 @@ The solution will have a folder called `angular` in it. This is where the Angula * _angular/projects/issue-management_ folder contains the Angular module project. * _angular/projects/dev-app_ folder contains a development application that runs your module. -The server-side is similar to the solution described above. `*.HttpApi.Host` project serves the API and the `Angular` demo application consumes it. You will not need to run the `.Web.Host` project though. +The server-side is similar to the solution described above. After you create a *Host* application, the API and the `Angular` demo application consume it. #### How to Run the Angular Development App @@ -195,9 +160,10 @@ The module you will develop depends on two of these ABP packages: _@abp/ng.core_ Once all dependencies are installed, follow the steps below to serve your development app: -1. Make sure `.AuthServer` and `*.HttpApi.Host` projects are up and running. -2. Open your terminal at the root folder, i.e. `angular`. -3. Run `yarn start` or `npm start`. +1. Make sure *Host* application project is up and running. +2. Change the `environment.ts` file in the `angular/projects/dev-app/src/environments` folder to match your *Host* application URL. +3. Open your terminal at the root folder, i.e. `angular`. +4. Run `yarn start` or `npm start`. ![ABP Angular module dev-app project](../../images/angular-module-dev-app-project.png) diff --git a/docs/en/solution-templates/microservice/adding-new-api-gateways.md b/docs/en/solution-templates/microservice/adding-new-api-gateways.md index a026f6e884..415452a3bd 100644 --- a/docs/en/solution-templates/microservice/adding-new-api-gateways.md +++ b/docs/en/solution-templates/microservice/adding-new-api-gateways.md @@ -155,12 +155,6 @@ We should configure the AuthServer for **CORS** and **RedirectAllowedUrls**. } ``` -### Add the New Gateway to the Solution Runner - -We should add the new gateway to the solution runner [profile](../../studio/running-applications.md#profile) for running applications in the ABP Studio. You can follow the steps explained in the [Solution Runner](../../studio/running-applications.md#c-application) document to add the new gateway to the solution runner profile. Afterwards, you can start the new gateway by selecting it in the solution runner. - -![public-gateway-solution-runner](images/public-gateway-solution-runner.png) - ## Creating Helm Chart for the New Gateway If you want to deploy the new gateway to Kubernetes, you should create a Helm chart for the new application. diff --git a/docs/en/solution-templates/microservice/adding-new-applications.md b/docs/en/solution-templates/microservice/adding-new-applications.md index 7e3a53cbae..352b18f763 100644 --- a/docs/en/solution-templates/microservice/adding-new-applications.md +++ b/docs/en/solution-templates/microservice/adding-new-applications.md @@ -120,12 +120,6 @@ Add the new application URL to the `appsettings.json` file in the `Identity` ser } ``` -### Add the New Application to the Solution Runner - -We should add the new application to the solution runner [profile](../../studio/running-applications.md#profile) for running applications in the ABP Studio. You can follow the steps explained in the [Solution Runner](../../studio/running-applications.md#c-application) document to add the new application to the solution runner profile. Afterwards, you can start the new application by selecting it in the solution runner. - -![web-public-solution-runner](images/web-public-solution-runner.png) - ## Docker Configuration for Prometheus If you want to monitor the new application with Prometheus when you debug the solution, you should add the new application to the `prometheus.yml` file in the `etc/docker/prometheus` folder. You can copy the configurations from the existing applications and modify them according to the new application. Below is an example of the `prometheus.yml` file for the `WebPublic` application. diff --git a/docs/en/solution-templates/microservice/adding-new-microservices.md b/docs/en/solution-templates/microservice/adding-new-microservices.md index 2ff864cd0d..9cb482c552 100644 --- a/docs/en/solution-templates/microservice/adding-new-microservices.md +++ b/docs/en/solution-templates/microservice/adding-new-microservices.md @@ -16,6 +16,8 @@ This document explains how to add new microservices to the microservice solution Additionally, there is a folder named `_templates` in the root directory. This folder contains templates you can use to create new microservices, API gateways, and applications. These templates can be customized according to your needs. +![folder-structure](images/folder-structure.png) + ## Adding a New Microservice To add a new microservice to the solution, you can use the `service_nolayers` template. This template creates a new ASP.NET Core application with the necessary configurations and dependencies. Follow the steps below to add a new microservice: @@ -32,6 +34,11 @@ Select the database provider and click the `Create` button. ![create-new-module-db-provider](images/create-new-module-db-provider.png) +When you create a new microservice, you can choose to enable integration with the current solution. If you check *Enable integration*, the new microservice is added to the solution, and the necessary configurations are made automatically, so no manual configuration is needed. If you uncheck the *Enable integration* option, you will need to manually configure the new microservice. You can follow the steps in this documentation, starting from the [Configuring the appsettings.json](#configuring-the-appsettingsjson) section. + + +![create-new-microservice-nolayers-enable-integration](images/create-new-microservice-nolayers-enable-integration.png) + The new microservice is created and added to the solution. You can see the new microservice in the `services` folder. ![product-microservice](images/product-microservice.png) @@ -39,14 +46,12 @@ The new microservice is created and added to the solution. You can see the new m ### Configuring the appsettings.json The new microservice is created with the necessary configurations and dependencies. We should configure several sections by modifying the `appsettings.json` file: - * Set the `Administration` & `AbpBlobStoring` connection strings. - * Set the correct `StringEncryption` key. * Set the `CorsOrigins` to allow the web gateway to access the microservice. * Set the `AuthServer` configurations to enable the microservice to authenticate and authorize users. You can copy the configurations from the existing microservices and modify them according to the new microservice. Below is an example of the `appsettings.json` file for the `ProductService` microservice. -```json +```diff { "ConnectionStrings": { "Administration": "Server=localhost,1434; User Id=sa; Password=myPassw@rd; Database=Bookstore_Administration; TrustServerCertificate=true", @@ -54,15 +59,18 @@ You can copy the configurations from the existing microservices and modify them "ProductService": "Server=localhost,1434; User Id=sa; Password=myPassw@rd; Database=Bookstore_ProductService; TrustServerCertificate=true" }, "App": { - "CorsOrigins": "http://localhost:44333", +- "CorsOrigins": "http://localhost:webgateway_port", ++ "CorsOrigins": "http://localhost:44333", "EnablePII": false }, "Swagger": { "IsEnabled": true }, "AuthServer": { - "Authority": "http://localhost:44387", - "MetaAddress": "http://localhost:44387", +- "Authority": "http://localhost:authserver_port", +- "MetaAddress": "http://localhost:authserver_port", ++ "Authority": "http://localhost:44387", ++ "MetaAddress": "http://localhost:44387", "RequireHttpsMetadata": "false", "SwaggerClientId": "SwaggerTestUI", "Audience": "ProductService" @@ -93,24 +101,24 @@ You can copy the configurations from the existing microservices and modify them "Url": "http://localhost:9200" }, "StringEncryption": { - "DefaultPassPhrase": "PDAWjbshpwlOwNB6" + "DefaultPassPhrase": "PDAWjbshpwlOwNB6" } } ``` ### Configuring the OpenId Options -We should configure the OpenId options by modifying the `OpenIddictDataSeeder` in the `Identity` service. Below is an example of the `OpenIddictDataSeeder` options for the `ProductService` microservice. +We should configure the OpenId options by modifying the `OpenIddictDataSeeder` in the `Identity` service. Below is an example of the `OpenIddictDataSeeder` options for the `Product` microservice. Create API scopes and add the required API scope for Swagger clients in the `CreateApiScopesAsync` and `CreateSwaggerClientsAsync` methods in the `OpenIddictDataSeeder` class. -```csharp +```diff private async Task CreateApiScopesAsync() { await CreateScopesAsync("AuthServer"); await CreateScopesAsync("IdentityService"); await CreateScopesAsync("AdministrationService"); - await CreateScopesAsync("ProductService"); // new service ++ await CreateScopesAsync("ProductService"); } private async Task CreateSwaggerClientsAsync() @@ -120,21 +128,21 @@ private async Task CreateSwaggerClientsAsync() "AuthServer", "IdentityService", "AdministrationService", - "ProductService" // new service ++ "ProductService" }); } ``` Add the redirect URL for the new service in the `CreateSwaggerClientAsync` method. -```csharp +```diff private async Task CreateSwaggerClientAsync(string clientId, string[] scopes) { ... ... ... var administrationServiceRootUrl = _configuration["OpenIddict:Resources:AdministrationService:RootUrl"]!.TrimEnd('/'); - var productServiceServiceRootUrl = _configuration["OpenIddict:Resources:ProductService:RootUrl"]!.TrimEnd('/'); // new service ++ var productServiceRootUrl = _configuration["OpenIddict:Resources:ProductService:RootUrl"]!.TrimEnd('/'); await CreateOrUpdateApplicationAsync( name: clientId, @@ -152,15 +160,15 @@ private async Task CreateSwaggerClientAsync(string clientId, string[] scopes) $"{authServerRootUrl}/swagger/oauth2-redirect.html", $"{identityServiceRootUrl}/swagger/oauth2-redirect.html", $"{administrationServiceRootUrl}/swagger/oauth2-redirect.html", - $"{productServiceServiceRootUrl}/swagger/oauth2-redirect.html", // new service ++ $"{productServiceRootUrl}/swagger/oauth2-redirect.html" } ); } ``` -Add the allowed scope for the web (front-end) application(s) in the `CreateClientsAsync` method. You might have different clients for different UI applications such as web, Angular, React, etc. Ensure you add the new service to the allowed scopes of these clients. +Add the allowed scope for the web (front-end) application(s) in the `CreateClientsAsync` method. You might have different clients for different UI applications such as web, Angular, React, etc. Ensure you add the new microservice to the allowed scopes of these clients. -```csharp +```diff private async Task CreateClientsAsync() { var commonScopes = new List @@ -192,7 +200,7 @@ private async Task CreateClientsAsync() "SaasService", "AuditLoggingService", "AdministrationService", - "ProductService" // new service ++ "ProductService" }).ToList(), redirectUris: new List { $"{webClientRootUrl}signin-oidc" }, postLogoutRedirectUris: new List() { $"{webClientRootUrl}signout-callback-oidc" }, @@ -202,110 +210,130 @@ private async Task CreateClientsAsync() } ``` -Add the new service URL to the `appsettings.json` file in the `Identity` service. +Add the new service URL to the `appsettings.json` file in the `Identity` microservice. In this example we're gonna edit the *Acme.Bookstore.IdentityService* project `appsettings.json` file. -```json +```diff "OpenIddict": { "Applications": { ... }, "Resources": { ... - "ProductService": { - "RootUrl": "http://localhost:44350" - } ++ "ProductService": { ++ "RootUrl": "http://localhost:44350" ++ } } } ``` ### Configuring the AuthServer -We should configure the AuthServer for **CORS** and **RedirectAllowedUrls**. +We should configure the *AuthServer* application `appsettings.json` file for the **CorsOrigins** and **RedirectAllowedUrls** sections. -```json +```diff +... "App": { "SelfUrl": "http://localhost:***", - "CorsOrigins": "...... ,http://localhost:44350", +- "CorsOrigins": "http://localhost:44358,..", ++ "CorsOrigins": "http://localhost:44358,..,http://localhost:44350", "EnablePII": false, - "RedirectAllowedUrls": "...... ,http://localhost:44350" -} +- "RedirectAllowedUrls": "http://localhost:44358,..", ++ "RedirectAllowedUrls": "http://localhost:44358,..,http://localhost:44350" +}, +... ``` ### Configuring the API Gateway -We should configure the API Gateway to allow the web gateway to access the new microservice. First, we should add the **ProductService** sections to the `appsettings.json` file in the `WebGateway` project. +We should configure the API Gateway to access the new microservice. First, add the **Product** sections to the `appsettings.json` file in the `WebGateway` project. In this example we're gonna edit the *Acme.Bookstore.WebGateway* project `appsettings.json` file. -```json +```diff "ReverseProxy": { "Routes": { ... - "ProductService": { - "ClusterId": "ProductService", - "Match": { - "Path": "/api/productservice/{**catch-all}" - } - }, - "ProductServiceSwagger": { - "ClusterId": "ProductService", - "Match": { - "Path": "/swagger-json/ProductService/swagger/v1/swagger.json" - }, - "Transforms": [ - { "PathRemovePrefix": "/swagger-json/ProductService" } - ] - } ++ "Product": { ++ "ClusterId": "Product", ++ "Match": { ++ "Path": "/api/product/{**catch-all}" ++ } ++ }, ++ "ProductSwagger": { ++ "ClusterId": "Product", ++ "Match": { ++ "Path": "/swagger-json/Product/swagger/v1/swagger.json" ++ }, ++ "Transforms": [ ++ { "PathRemovePrefix": "/swagger-json/Product" } ++ ] ++ } }, "Clusters": { ... - "ProductService": { - "Destinations": { - "ProductService": { - "Address": "http://localhost:44350/" - } - } - } ++ "Product": { ++ "Destinations": { ++ "Product": { ++ "Address": "http://localhost:44350/" ++ } ++ } ++ } } } ``` -Afterwards, open the `ProjectNameWebGatewayModule` class in the `WebGateway` and add the `ProductService` to the `ConfigureSwaggerUI` method. +Afterwards, open the `ProjectNameWebGatewayModule` class in the `WebGateway` project and add the `ProductService` to the `ConfigureSwaggerUI` method. In this example we're gonna edit the `BookstoreWebGatewayModule` file. + +```diff +private static void ConfigureSwaggerUI( + IProxyConfig proxyConfig, + SwaggerUIOptions options, + IConfiguration configuration) +{ + foreach (var cluster in proxyConfig.Clusters) + { + options.SwaggerEndpoint($"/swagger-json/{cluster.ClusterId}/swagger/v1/swagger.json", $"{cluster.ClusterId} API"); + } -```csharp -options.OAuthScopes( - "AdministrationService", - "AuthServer", - "IdentityService", - "ProductService" // new service -); + options.OAuthClientId(configuration["AuthServer:SwaggerClientId"]); + options.OAuthScopes( + "AdministrationService", + "AuthServer", + ..., ++ "ProductService" + ); +} ``` ### Configuring the UI Services -We should configure the UI application(s) to allow the new microservice to access through the web gateway. To do this, we should add the new service scope to the `ConfigureAuthentication` method in the `ProjectName...Module` class in the `Web` or `Blazor` application. +We should configure the UI application(s) to allow the new microservice to access through the web gateway. To do this, we should add the new microservice scope to the `ConfigureAuthentication` method in the `ProjectName...Module` class in the `Web` or `Blazor` application. In this example we're gonna edit the `BookstoreWebModule` file. -```csharp -context.Services.AddAuthentication(options => -{ - options.DefaultScheme = "Cookies"; - options.DefaultChallengeScheme = "oidc"; -}) -.AddCookie("Cookies", options => +```diff +private void ConfigureAuthentication(ServiceConfigurationContext context, IConfiguration configuration) { - options.ExpireTimeSpan = TimeSpan.FromDays(365); -}) -.AddAbpOpenIdConnect("oidc", options => -{ - ... - options.Scope.Add("AuthServer"); - options.Scope.Add("IdentityService"); - options.Scope.Add("AdministrationService"); - options.Scope.Add("ProductService"); // new servie -}); + context.Services.AddAuthentication(options => + { + options.DefaultScheme = "Cookies"; + options.DefaultChallengeScheme = "oidc"; + }) + .AddCookie("Cookies", options => + { + options.ExpireTimeSpan = TimeSpan.FromDays(365); + }) + .AddAbpOpenIdConnect("oidc", options => + { + ... + options.Scope.Add("AuthServer"); + options.Scope.Add("IdentityService"); + options.Scope.Add("AdministrationService"); ++ options.Scope.Add("ProductService"); + }); + ... +} ``` Similarly, if you have an Angular application, you should add the new service scope to the `oAuthConfig` in `environment.ts`: -```typescript +```diff const baseUrl = 'http://localhost:4200'; const oAuthConfig = { @@ -313,69 +341,83 @@ const oAuthConfig = { redirectUri: baseUrl, clientId: 'Angular', responseType: 'code', - scope: 'openid profile email roles AuthServer IdentityService AdministrationService ProductService', // new service +- scope: 'openid profile email roles AuthServer IdentityService AdministrationService', ++ scope: 'openid profile email roles AuthServer IdentityService AdministrationService ProductService', requireHttps: false }; ``` -### Add the New Microservice to the Solution Runner - -We should add the new microservice to the solution runner [profile](../../studio/running-applications.md#profile) for running applications in the ABP Studio. You can follow the steps explained in the [Solution Runner](../../studio/running-applications.md#c-application) document to add the new microservice to the solution runner profile. Afterwards, you can start the new microservice by selecting it in the solution runner. - -![product-service-solution-runner](images/product-service-solution-runner.png) - ## Docker Configuration for Prometheus -If you want to monitor the new microservice with Prometheus when you debug the solution, you should add the new microservice to the `prometheus.yml` file in the `etc/docker/prometheus` folder. You can copy the configurations from the existing microservices and modify them according to the new microservice. Below is an example of the `prometheus.yml` file for the `ProductService` microservice. +If you want to monitor the new microservice with Prometheus when you debug the solution, you should add the new microservice to the `prometheus.yml` file in the `etc/docker/prometheus` folder. You can copy the configurations from the existing microservices and modify them according to the new microservice. Below is an example of the `prometheus.yml` file for the `Product` microservice. -```yml - - job_name: 'product' +```diff + - job_name: 'authserver' scheme: http metrics_path: 'metrics' static_configs: - - targets: ['host.docker.internal:44350'] + - targets: ['host.docker.internal:44398'] + ... ++ - job_name: 'product' ++ scheme: http ++ metrics_path: 'metrics' ++ static_configs: ++ - targets: ['host.docker.internal:44350'] ``` ## Creating Helm Chart for the New Microservice If you want to deploy the new microservice to Kubernetes, you should create a Helm chart for the new microservice. -First, we need to add the new microservice to the `build-all-images.ps1` script in the `etc/helm` folder. You can copy the configurations from the existing microservices and modify them according to the new microservice. Below is an example of the `build-all-images.ps1` script for the `ProductService` microservice. +First, we need to add the new microservice to the `build-all-images.ps1` script in the `etc/helm` folder. You can copy the configurations from the existing microservices and modify them according to the new microservice. Below is an example of the `build-all-images.ps1` script for the `Product` microservice. -```powershell -./build-image.ps1 -ProjectPath "../../services/product/Acme.Bookstore.ProductService/Acme.Bookstore.ProductService.csproj" -ImageName bookstore/productservice +```diff +... + ./build-image.ps1 -ProjectPath "../../apps/auth-server/Acme.Bookstore.AuthServer/Acme.Bookstore.AuthServer.csproj" -ImageName bookstore/authserver ++ ./build-image.ps1 -ProjectPath "../../services/product/Acme.Bookstore.ProductService/Acme.Bookstore.ProductService.csproj" -ImageName bookstore/product ``` -Then, we need to add the connection string to the `values.projectname-local.yaml` file in the `etc/helm/projectname` folder. Below is an example of the `values.bookstore-local.yaml` file for the `ProductService` microservice. +Then, we need to add the connection string to the `values.projectname-local.yaml` file in the `etc/helm/projectname` folder. Below is an example of the `values.bookstore-local.yaml` file for the `Product` microservice. -```yaml +```diff global: ... connectionStrings: ... - productService: "Server=[RELEASE_NAME]-sqlserver,1433; Database=Bookstore_ProductService; User Id=sa; Password=myPassw@rd; TrustServerCertificate=True" ++ product: "Server=[RELEASE_NAME]-sqlserver,1433; Database=Bookstore_ProductService; User Id=sa; Password=myPassw@rd; TrustServerCertificate=True" ``` -Afterwards, we need to create a new Helm chart for the new microservice. You can copy the configurations from the existing microservices and modify them according to the new microservice. Below is an example of the `productservice` Helm chart for the `ProductService` microservice. +Afterwards, we need to create a new Helm chart for the new microservice. You can copy the configurations from the existing microservices and modify them according to the new microservice. Below is an example of the `product` Helm chart for the `Product` microservice. + +Product microservice `values.yaml` file. {%{ ```yaml -# values.yaml image: - repository: "bookstore/productservice" + repository: "bookstore/product" tag: "latest" pullPolicy: IfNotPresent swagger: isEnabled: "true" +``` +}%} + +Product microservice `Chart.yaml` file. -# Chart.yaml +{%{ +```yaml apiVersion: v2 -name: productservice +name: product version: 1.0.0 appVersion: "1.0" description: Bookstore Product Service +``` +}%} -# product.yaml +Product microservice `product.yaml` file. + +{%{ +```yaml apiVersion: apps/v1 kind: Deployment metadata: @@ -404,10 +446,15 @@ spec: - name: "ConnectionStrings__AbpBlobStoring" value: "{{ .Values.global.connectionStrings.blobStoring | replace "[RELEASE_NAME]" .Release.Name }}" - name: "ConnectionStrings__ProductService" - value: "{{ .Values.global.connectionStrings.productService | replace "[RELEASE_NAME]" .Release.Name }}" + value: "{{ .Values.global.connectionStrings.product | replace "[RELEASE_NAME]" .Release.Name }}" ... +``` +}%} + +Product microservice `product-service.yaml` file. -# product-service.yaml +{%{ +```yaml apiVersion: v1 kind: Service metadata: @@ -427,32 +474,113 @@ After creating the Helm chart, you can *Refresh Sub Charts* in the ABP Studio. ![kubernetes-refresh-sub-charts](images/kubernetes-refresh-sub-charts.png) -Then, update *Metadata* information right-click the *microservicename* [sub-chart](../../studio/kubernetes.md#subchart), select *Properties* it open *Chart Properties* window. You can edit in the *Metadata* tab. +Then, update *Metadata* information right-click the *microservicename* [sub-chart](../../studio/kubernetes.md#subchart), select *Properties* it open *Chart Properties* window. You should add the following keys in the *Metadata* tab. ![microservice-chart-properties](images/microservice-chart-properties-metadata.png) +- `projectPath`: The path to the microservice host application project. In the bookstore example, this value is `../../services/product/Acme.Bookstore.ProductService/Acme.Bookstore.ProductService.csproj`. +- `imageName`: When we build the Docker image, it uses this value as the Docker image name. We're going to use it in the Helm chart values. +- `projectType`: You can add a Helm chart for Angular and .NET projects, which is why we should explicitly specify the project type. + Add the *Kubernetes Services* in the *Chart Properties* -> *Kubernetes Services* tab. ![microservice-chart-properties-kubernetes-services](images/microservice-chart-properties-kubernetes-services.png) +> This value should be the same as the [solution runner application](./../../studio/running-applications.md#properties) *Kubernetes service* value. It's necessary for browsing because when we connect to the Kubernetes cluster, we should browse the Kubernetes services instead of using the Launch URL. + Last but not least, we need to configure the helm chart environments for identity, auth-server, and gateway applications. +Below is an example of the *Identity* microservice `identity.yaml` file. + {%{ -```yaml -# identity.yaml -# Add this line to the "env:" section -- name: "OpenIddict__Resources__ProductService__RootUrl" - value: "http://{{ .Release.Name }}-productservice" - -# authserver.yaml -# Concat the following lines for "App__CorsOrigins" section -- name: "App__CorsOrigins" - value: "...,http://{{ .Release.Name }}-administration,http://{{ .Release.Name }}-productservice" - -# webapigateway.yaml -# Add this line to the "env:" section -- name: "ReverseProxy__Clusters__ProductService__Destinations__ProductService__Address" - value: "http://{{ .Release.Name }}-productservice" +```diff +apiVersion: apps/v1 +kind: Deployment +metadata: + name: "{{ .Release.Name }}-{{ .Chart.Name }}" +spec: + selector: + matchLabels: + app: "{{ .Release.Name }}-{{ .Chart.Name }}" + template: + metadata: + labels: + app: "{{ .Release.Name }}-{{ .Chart.Name }}" + spec: + containers: + - image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: "{{ .Values.image.pullPolicy }}" + name: "{{ .Release.Name }}-{{ .Chart.Name }}" + ports: + - name: "http" + containerPort: 80 + env: + ... ++ - name: "OpenIddict__Resources__ProductService__RootUrl" ++ value: "http://{{ .Release.Name }}-product" +``` +}%} + +Below is an example of the *AuthServer* application `authserver.yaml` file. + +{%{ +```diff +apiVersion: apps/v1 +kind: Deployment +metadata: + name: "{{ .Release.Name }}-{{ .Chart.Name }}" +spec: + selector: + matchLabels: + app: "{{ .Release.Name }}-{{ .Chart.Name }}" + template: + metadata: + labels: + app: "{{ .Release.Name }}-{{ .Chart.Name }}" + spec: + containers: + - image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: "{{ .Values.image.pullPolicy }}" + name: "{{ .Release.Name }}-{{ .Chart.Name }}" + ports: + - name: "http" + containerPort: 80 + env: + ... + - name: "App__CorsOrigins" +- value: "...,http://{{ .Release.Name }}-administration" ++ value: "...,http://{{ .Release.Name }}-administration,http://{{ .Release.Name }}-product" +``` +}%} + +Below is an example of the *WebApiGateway* application `webapigateway.yaml` file. + +{%{ +```diff +apiVersion: apps/v1 +kind: Deployment +metadata: + name: "{{ .Release.Name }}-{{ .Chart.Name }}" +spec: + selector: + matchLabels: + app: "{{ .Release.Name }}-{{ .Chart.Name }}" + template: + metadata: + labels: + app: "{{ .Release.Name }}-{{ .Chart.Name }}" + spec: + containers: + - image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: "{{ .Values.image.pullPolicy }}" + name: "{{ .Release.Name }}-{{ .Chart.Name }}" + ports: + - name: "http" + containerPort: 80 + env: + ... ++ - name: "ReverseProxy__Clusters__Product__Destinations__Product__Address" ++ value: "http://{{ .Release.Name }}-product" ``` }%} @@ -465,11 +593,11 @@ You can customize the microservice template if needed. Add new configurations, d After adding the new microservice to the solution, you can develop the UI for the new microservice. For .NET applications, you can add the microservice *Contracts* package to the UI application(s) to access the services provided by the new microservice. Afterwards, you can use the [generate-proxy](../../cli/index.md#generate-proxy) command to generate the proxy classes for the new microservice. ```bash -abp generate-proxy -t csharp -url http://localhost:44333/ -m productService --without-contracts +abp generate-proxy -t csharp -url http://localhost:44333/ -m product --without-contracts ``` Next, start creating *Pages* and *Components* for the new microservice in the UI application(s). Similarly, if you have an Angular application, you can use the [generate-proxy](../../cli/index.md#generate-proxy) command to generate the proxy classes for the new microservice and start developing the UI. ```bash -abp generate-proxy -t ng -url http://localhost:44333/ -m productService +abp generate-proxy -t ng -url http://localhost:44333/ -m product ``` \ No newline at end of file diff --git a/docs/en/solution-templates/microservice/images/create-new-microservice-nolayers-enable-integration.png b/docs/en/solution-templates/microservice/images/create-new-microservice-nolayers-enable-integration.png new file mode 100644 index 0000000000..a1aa31887f Binary files /dev/null and b/docs/en/solution-templates/microservice/images/create-new-microservice-nolayers-enable-integration.png differ diff --git a/docs/en/solution-templates/microservice/images/folder-structure.png b/docs/en/solution-templates/microservice/images/folder-structure.png new file mode 100644 index 0000000000..926bfaa3d5 Binary files /dev/null and b/docs/en/solution-templates/microservice/images/folder-structure.png differ diff --git a/docs/en/studio/images/solution-explorer/abp-solution.png b/docs/en/studio/images/solution-explorer/abp-solution.png index 8348e71778..b15e7f46f0 100644 Binary files a/docs/en/studio/images/solution-explorer/abp-solution.png and b/docs/en/studio/images/solution-explorer/abp-solution.png differ diff --git a/docs/en/studio/images/solution-explorer/create-new-microservice-nolayers-enable-integration.png b/docs/en/studio/images/solution-explorer/create-new-microservice-nolayers-enable-integration.png new file mode 100644 index 0000000000..a1aa31887f Binary files /dev/null and b/docs/en/studio/images/solution-explorer/create-new-microservice-nolayers-enable-integration.png differ diff --git a/docs/en/studio/installation.md b/docs/en/studio/installation.md index 11f390f9f3..4dc158e464 100644 --- a/docs/en/studio/installation.md +++ b/docs/en/studio/installation.md @@ -8,7 +8,7 @@ Before you begin the installation process for ABP Studio, ensure that your system meets the following pre-requirements: ### Node -Make sure [Node.js](https://nodejs.org/en) is installed on your system. If you have not installed Node.js, you can download the `v16` or `v18` version from the official [Node.js website](https://nodejs.org/en/download/prebuilt-installer). +Make sure [Node.js](https://nodejs.org/en) is installed on your system. If you have not installed Node.js, you can download the `v18.19+` version from the official [Node.js website](https://nodejs.org/en/download/prebuilt-installer). ### WireGuard (Optional) ABP Studio needs [WireGuard](https://www.wireguard.com/) for Kubernetes operations. You can find the installation instructions for your specific operating system below: diff --git a/docs/en/studio/kubernetes.md b/docs/en/studio/kubernetes.md index 666fdf0a99..f05a30ee04 100644 --- a/docs/en/studio/kubernetes.md +++ b/docs/en/studio/kubernetes.md @@ -150,9 +150,9 @@ Upon disconnection from the cluster, we clean up the hosts file, excluding ingre ![disconnect](./images/kubernetes/disconnect.png) -> When you list the services in the Kubernetes cluster with the `kubectl get svc` command, you should see the *abp-wg-easy* and *abp-wg-easy-vpn* services. After a while, if the *EXTERNAL-IP* is still *pending*, then it can't connect to the cluster. This could be caused by if you try to install the WireGuard VPN to a Docker Desktop Kubernetes cluster more than once. You can delete the previous WireGuard VPN by running the `helm uninstall abp-wg-easy` command in the previous namespace. +> When you list the services in the Kubernetes cluster with the `kubectl get svc` command, you should see the *abp-wg-easy* and *abp-wg-easy-vpn* services. Each WireGuard installation has a unique port number for the related services. If you have multiple WireGuard installations for different Kubernetes profiles or solutions, you can see the port numbers in the *PORT(S)* field when you list them with the `kubectl get svc` command. -> Connecting to the Kubernetes cluster is limited to one instance of ABP Studio at a time. Trying to connect with another instance simultaneously won't work as expected. +> Connecting to the Kubernetes cluster is limited to one instance of ABP Studio at the same time. Trying to connect with another instance simultaneously won't work as expected. ### Intercept a Service diff --git a/docs/en/studio/release-notes.md b/docs/en/studio/release-notes.md index f30d4855af..5140de9647 100644 --- a/docs/en/studio/release-notes.md +++ b/docs/en/studio/release-notes.md @@ -2,6 +2,42 @@ This document contains **brief release notes** for each ABP Studio release. Release notes only include **major features** and **visible enhancements**. Therefore, they don't include all the development done in the related version. +## 0.9.1 (2024-10-10) + +* Fixed the ABP Studio CLI's Bundle Command +* Fixed the Public Web project for the Microservice Template +* Removed the React Native for the Community Edition (open-source) +* Added multiple gateway and UI selection option during microservice creation +* Added External Logins item to user menu for the Blazor templates + +## 0.8.4 (2024-10-07) + +* Fixed the ABP Suite does not open problem for macOS +* Made improvements on the new microservice creation +* Allowed using browser shortcuts (copy, paste, new tab etc.) for macOS +* Prevented application being crashed on solution runner exceptions +* Included `WebApp.Client` project styles in the main application to enable CSS in Isolation + +## 0.8.3 (2024-09-24) + +* Allowed to set Execution Order (or dependency) from Solution Runner +* Added Icons for the Solution Runner's Context Menu +* Fixed MongoDB database issues for the Microservice Template +* Allowed parallel running for background tasks + +## 0.8.2 (2024-09-19) + +* Fixed WireGuard connection random port bug +* Automated steps after microservice solution creation +* Fixed unusable options/features for Trial License +* Fixed blazor-server single-layer template + +## 0.8.1 (2024-09-12) + +* Fixed MySQL connection problem for nolayers template +* Ignored failed solution runner profiles while loading +* Added required ModalBuilder extensions for the imported/installed modules for EF Core + ## 0.8.0 (2024-09-11) * Added `Blazor WebApp UI` to **app-nolayers** and **microservice** templates diff --git a/docs/en/studio/solution-explorer.md b/docs/en/studio/solution-explorer.md index 76e3543269..8aa0ea4404 100644 --- a/docs/en/studio/solution-explorer.md +++ b/docs/en/studio/solution-explorer.md @@ -47,6 +47,8 @@ It is the main solution that you can open with ABP Studio, an ABP solution can c - `Open With` - `Terminal`: Opens the terminal in the solution directory. - `Explorer`: Opens the file explorer in the solution directory. +- `Solution Configuration`: You can see the project creation options in this menu. It opens the *Solution Configuration* window. +- `Open Readme`: Opens the README file in the solution if available. If there is no README file, this option will not be visible. ## Folder @@ -143,6 +145,10 @@ You can choose the database provider for your microservice module. Select one of ![create-new-microservice-nolayers-database-provider](./images/solution-explorer/create-new-microservice-nolayers-database-provider.png) +When you create a microservice, you must edit some [configurations](../solution-templates/microservice/adding-new-microservices.md#configuring-the-appsettingsjson). If you select the *Enable integration* option, it automatically configures the required settings for the microservice to work with the gateway, web, and other modules. + +![create-new-microservice-nolayers-enable-integration](./images/solution-explorer/create-new-microservice-nolayers-enable-integration.png) + After creating the *Microservice (service-nolayers)* module, it will be added to the solution, and you should see the following structure in the solution explorer. ![created-new-microservice-nolayers](./images/solution-explorer/created-new-microservice-nolayers.png) @@ -157,7 +163,7 @@ ABP modules have their own file extension `.abpmdl`, and they are located in the ### Difference Between ABP Module Template and ABP Studio Module Approach -In ABP, creating a module solution using the [CLI](../cli/index.md) results in a solution with numerous projects, some of which may not be necessary for a specific use case. The ABP Studio module approach differs from the ABP module template, offering greater flexibility. With ABP Studio, we can create a module containing only the required projects; for example, an empty module with only the `Domain` and `Application` projects. In this approach, the term [Package](./concepts.md#package) is used for module projects. +In ABP, creating a module solution using the [old CLI](../cli/differences-between-old-and-new-cli.md) results in a solution with numerous projects, some of which may not be necessary for a specific use case. The ABP Studio new module approach differs from the ABP old module template, offering greater flexibility. With ABP Studio, we can create a module containing only the required projects; for example, an empty module with only the `Domain` and `Application` projects. In this approach, the term [Package](./concepts.md#package) is used for module projects. Furthermore, it's important to mention that we can create not just DDD-principled modules. The [Modularity](../framework/architecture/modularity/basics.md) document clarifies the difference between *Framework* and *Application* modules. Basically, every C# project refers to the `Volo.Abp.Core` package and defines the *Module* class as an ABP Class Library. We have the option to develop an infrastructure module using only the *ABP Class Library* packages and provide a module reference to other modules. diff --git a/docs/en/studio/version-compatibility.md b/docs/en/studio/version-compatibility.md index 812db493b9..cd6850fcab 100644 --- a/docs/en/studio/version-compatibility.md +++ b/docs/en/studio/version-compatibility.md @@ -4,6 +4,8 @@ This document provides an overview of the compatibility between various versions | **ABP Studio Version** | **ABP Version** | |------------------------|---------------------------| +| 0.8.4 - 0.9.1 | 8.3.1 | +| 0.8.1 to 0.8.3 | 8.3.0 | | 0.8.0 | 8.2.3 | | 0.7.8 - 0.7.9 | 8.2.2 | | 0.7.4 to 0.7.7 | 8.2.1 | diff --git a/docs/en/suite/add-solution.md b/docs/en/suite/add-solution.md index 0bdd166ef9..e318a45f98 100644 --- a/docs/en/suite/add-solution.md +++ b/docs/en/suite/add-solution.md @@ -14,10 +14,10 @@ } ```` -ABP Suite requires an ABP solution to work on, that's why when you start it, you will see two actions: `Add an existing solution` and `Create a new solution` +ABP Suite requires an ABP solution to work on, that's why when you start it, you need an ABP Solution and it should be added in ABP Suite UI. ## Add an existing solution Add your existing solution which was created from the [ABP Studio](../studio/index.md) or [ABP CLI](../cli/index.md). You have to enter your `YourProject.sln` file path. Also, it works if you enter the directory of the `YourProject.sln` when there's single solution inside. -![Add an existing solution](../images/suite-add-existing-solution-8.1.png) \ No newline at end of file +![Add an existing solution](../images/suite-add-existing-solution-8.3.png) \ No newline at end of file diff --git a/docs/en/suite/create-solution.md b/docs/en/suite/create-solution.md index c140848c7c..a87e73b480 100644 --- a/docs/en/suite/create-solution.md +++ b/docs/en/suite/create-solution.md @@ -16,56 +16,6 @@ ## Create a new solution -Creates a new ABP solution. It's an alternative way of creating an ABP project rather than [ABP CLI](../cli/index.md#new). To create a new ABP Solution, click the **Create a new solution** button. It will open a new dialog for the options. +From ABP Suite v8.3, **create a new solution** option has been removed. Instead, it's suggessted to use [ABP Studio](../studio/index.md) or [ABP CLI](../cli/index.md) to create a new solution. After, creating an ABP Solution, then you can generate CRUD pages via ABP Suite as always. -![Create a new ABP Solution](../images/suite-create-a-new-solution.png) - -You need to provide your *template type*, *project name*, *output folder* where the project will be created in, *UI Framework* as your front-end, *mobile* option (**React Native** or **none**), *database provider*, *database management system* (if the database provider is **Entity Framework Core**) and *connection string*. - -Also, you can add a *public web site* project to your solution, separate tenant schema by choosing the `Separated tenant schema` option and create the solution as tiered with the *Tiered* option which separates `Web` and `HTTP API` projects. - -![Create a new solution](../images/suite-new-solution.png) - -- **Template type:** This is the startup template type of your solution. You can check the all available templates from [here](../solution-templates). - -- **Project name:** This is the solution name and also the prefix for the namespace of your solution. In this example `Acme.BookStore` is the project name. The solution file will be named as `Acme.BookStore.sln`. And the namespaces of `c#` files will start with `Acme.BookStore.*` - -- **Output folder:** This is the directory where the new project will be created. Suite automatically creates the output directory if not exists and places the project folder inside the output directory. See the below folder view for `Acme.BookStore` project. - - ![New Solution Directory](../images/suite-new-solution-directory.png) - -- **Theme:** You can generate your project with one of the 3 themes: `LeptonX`, `Lepton`, and `Basic theme`. - - - `LeptonX` is a new modern and stylish Bootstrap UI theme with different color options. It's is the newest theme and is the default. - - - `Lepton` is a modern, mature, responsive UI theme with different style and color options. - - - `Basic theme` is a minimalist UI theme with plain Bootstrap colors and styles. Ideal if you will build your own UI theme. - -> If you choose **LeptonX**, another option named **Theme style** will show up, you can choose one out of 4 options: `System`, `Dim`, `Dark` or `Light`. - -![suite-new-solution-leptonx-theme](../images/suite-new-solution-leptonx-theme.png) - -- **UI framework:** There are 4 types of UI Frameworks: `MVC`, `Angular`, `Blazor WebAssembly`, `Blazor Server`. Suite works with all of these frameworks. - - - If you choose `Angular` or `Blazor WebAssembly`, two checkbox options will appear at the bottom: - - - `Separate Auth Server`: Separates the Auth Server application from the API host application. If not checked, the server-side will have a single endpoint. - - - `Progressive web application`: Optional Progressive Web Application checkbox. - -- **Mobile:** You can create the template with React Native and MAUI as a mobile framework or without any mobile application support. - -- **Database Provider:** ABP supports 2 database providers: `Entity Framework Core` and `MongoDB`. `Entity Framework Core` supports a variety of database management systems like `MS SQL Server`, `Oracle`, `MySQL` or `PostgreSQL`. See the full list https://docs.microsoft.com/ef/core/providers/?tabs=dotnet-core-cli. On the other hand [MongoDB](https://www.mongodb.com/) is a document-oriented NoSQL database used for high volume data storage. If you have a requirement to work with relational database systems, choose `Entity Framework Core` otherwise choose `MongoDB`. - -- **Database management system:** You can choose your **Database Management System (DBMS)** while creating a new solution. There are 6 types of database management system: `SqlServer` (default), `MySQL`, `SQLite`, `Oracle`, `Oracle-Devart` and `PostgreSQL`. - -- **Connection string:** You can define the connection string for connecting to the database by filling this area. - -- **Public web site:** Creates the solution with an additional public web site project. - -- **Separated tenant schema:** Creates the solution with the separated tenant schema support. Also, it creates a separate DbContext & migration path for tenants to not include host-related tables in tenant databases. - -- **Tiered:** Creates a tiered solution where `Web` and `HTTP API ` layers are physically separated. If not specified, it creates a layered solution which is less complex and suitable for most scenarios. You can leave it unchecked, if you are not sure. - -- **Preview:** Creates the solution in the latest preview version. +> ABP Studio has a shortcut for running [ABP Suite](./index.md) to allow using it without starting it externally and using it on a browser, which means you can create, manage, deploy your applications in a single desktop application and also generate CRUD pages via Suite as a pre-integrated application to ABP Studio. \ No newline at end of file diff --git a/docs/en/tutorials/book-store/part-09.md b/docs/en/tutorials/book-store/part-09.md index e8e0bd328f..c42dd22d8a 100644 --- a/docs/en/tutorials/book-store/part-09.md +++ b/docs/en/tutorials/book-store/part-09.md @@ -558,6 +558,7 @@ Open the `/src/app/route.provider.ts` and add `'BookStore.Books || BookStore.Aut layout: eLayoutType.application, requiredPolicy: 'BookStore.Books || BookStore.Authors', }, +```` The final `configureRoutes` function declaration should be following: @@ -1240,4 +1241,4 @@ That's all! This is a fully working CRUD page, you can create, edit and delete t > **Tip**: If you run the `.DbMigrator` console application after defining a new permission, it automatically grants these new permissions to the admin role and you don't need to manually grant the permissions yourself. -{{end}} \ No newline at end of file +{{end}} diff --git a/docs/en/tutorials/index.md b/docs/en/tutorials/index.md index eeb24824f2..1f03c87d8e 100644 --- a/docs/en/tutorials/index.md +++ b/docs/en/tutorials/index.md @@ -1,7 +1,7 @@ # ABP Tutorials -The following guides explains how to build ABP based applications: +The following introductory tutorials explain how to build applications based on the ABP platform: * [TODO Application](todo/index.md): This is a single-part, quick-start tutorial to build a simple application with ABP. Start with this tutorial if you want to quickly understand how ABP works. * [Book Store Application](book-store/index.md): This is a multi-part, complete tutorial to build a bookstore application with ABP. Start with this tutorial if you want to create a layered solution with ABP and apply DDD best practices. -* [Modular Monolith Application](modular-crm/index.md): This is a multi-part tutorial that demonstrates how to create application modules, compose and communicate them to build a monolith modular web application. \ No newline at end of file +* [Modular Monolith Application](modular-crm/index.md): This is a multi-part tutorial that demonstrates how to create application modules, compose and communicate them to build a monolith modular web application. diff --git a/docs/en/tutorials/microservice/index.md b/docs/en/tutorials/microservice/index.md new file mode 100644 index 0000000000..ee425f8afe --- /dev/null +++ b/docs/en/tutorials/microservice/index.md @@ -0,0 +1,3 @@ +# Microservice Development Tutorial + +This tutorial is work in progress. Please check later. You can check here to [see the draft tutorial](https://github.com/abpframework/abp/blob/microservice-tutorial/docs/en/tutorials/microservice/index.md). diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-add-entity-framework-core-migration-dialog.png b/docs/en/tutorials/modular-crm/images/abp-studio-add-entity-framework-core-migration-dialog.png index c96217ac47..7edec8f3d9 100644 Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-add-entity-framework-core-migration-dialog.png and b/docs/en/tutorials/modular-crm/images/abp-studio-add-entity-framework-core-migration-dialog.png differ diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-add-entity-framework-core-migration.png b/docs/en/tutorials/modular-crm/images/abp-studio-add-entity-framework-core-migration.png index 1629f541d8..857df5f25d 100644 Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-add-entity-framework-core-migration.png and b/docs/en/tutorials/modular-crm/images/abp-studio-add-entity-framework-core-migration.png differ diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-add-new-dd-module.png b/docs/en/tutorials/modular-crm/images/abp-studio-add-new-dd-module.png deleted file mode 100644 index f8a701770e..0000000000 Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-add-new-dd-module.png and /dev/null differ diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-add-new-ddd-module.png b/docs/en/tutorials/modular-crm/images/abp-studio-add-new-ddd-module.png new file mode 100644 index 0000000000..ed11a95f57 Binary files /dev/null and b/docs/en/tutorials/modular-crm/images/abp-studio-add-new-ddd-module.png differ diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-add-new-empty-module.png b/docs/en/tutorials/modular-crm/images/abp-studio-add-new-empty-module.png index 8815d15c44..53d453cd37 100644 Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-add-new-empty-module.png and b/docs/en/tutorials/modular-crm/images/abp-studio-add-new-empty-module.png differ diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-add-new-folder-command.png b/docs/en/tutorials/modular-crm/images/abp-studio-add-new-folder-command.png index 6557599a4e..56c861d4fd 100644 Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-add-new-folder-command.png and b/docs/en/tutorials/modular-crm/images/abp-studio-add-new-folder-command.png differ diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-add-new-package.png b/docs/en/tutorials/modular-crm/images/abp-studio-add-new-package.png index de9e1aa8c5..7e28d708bf 100644 Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-add-new-package.png and b/docs/en/tutorials/modular-crm/images/abp-studio-add-new-package.png differ diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-2.png b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-2.png index 47a5671f7f..308d32c6ad 100644 Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-2.png and b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-2.png differ diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-3.png b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-3.png index e79b72747f..dc51826734 100644 Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-3.png and b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-3.png differ diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-4.png b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-4.png index fa3b5c4e23..b29850cce6 100644 Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-4.png and b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-4.png differ diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-5.png b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-5.png index 4a8ef0ba58..42d7c96cb2 100644 Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-5.png and b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-5.png differ diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-6.png b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-6.png new file mode 100644 index 0000000000..954ea41060 Binary files /dev/null and b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-6.png differ diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-7.png b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-7.png new file mode 100644 index 0000000000..3dea701062 Binary files /dev/null and b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-7.png differ diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-dialog-5.png b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-dialog-5.png new file mode 100644 index 0000000000..ad78c4eee7 Binary files /dev/null and b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-dialog-5.png differ diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-dialog-6.png b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-dialog-6.png new file mode 100644 index 0000000000..bd1c968b03 Binary files /dev/null and b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference-dialog-6.png differ diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference.png b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference.png index 2cbd244a4b..a6870e4c0e 100644 Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference.png and b/docs/en/tutorials/modular-crm/images/abp-studio-add-package-reference.png differ diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-added-ddd-contracts-package.png b/docs/en/tutorials/modular-crm/images/abp-studio-added-ddd-contracts-package.png new file mode 100644 index 0000000000..f451a550d8 Binary files /dev/null and b/docs/en/tutorials/modular-crm/images/abp-studio-added-ddd-contracts-package.png differ diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-build-and-restart-application.png b/docs/en/tutorials/modular-crm/images/abp-studio-build-and-restart-application.png index 010851ee05..889a4251cd 100644 Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-build-and-restart-application.png and b/docs/en/tutorials/modular-crm/images/abp-studio-build-and-restart-application.png differ diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-entity-framework-core-add-migration-order.png b/docs/en/tutorials/modular-crm/images/abp-studio-entity-framework-core-add-migration-order.png index 1e247f069b..b739e59373 100644 Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-entity-framework-core-add-migration-order.png and b/docs/en/tutorials/modular-crm/images/abp-studio-entity-framework-core-add-migration-order.png differ diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-entity-framework-core-update-database.png b/docs/en/tutorials/modular-crm/images/abp-studio-entity-framework-core-update-database.png index bece8dfc12..b28b4e48a0 100644 Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-entity-framework-core-update-database.png and b/docs/en/tutorials/modular-crm/images/abp-studio-entity-framework-core-update-database.png differ diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-graph-build.png b/docs/en/tutorials/modular-crm/images/abp-studio-graph-build.png index 11855d792e..8930bdd062 100644 Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-graph-build.png and b/docs/en/tutorials/modular-crm/images/abp-studio-graph-build.png differ diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-import-module-for-ordering.png b/docs/en/tutorials/modular-crm/images/abp-studio-import-module-for-ordering.png index 94ab70d255..13aab5d477 100644 Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-import-module-for-ordering.png and b/docs/en/tutorials/modular-crm/images/abp-studio-import-module-for-ordering.png differ diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-import-module-ordering.png b/docs/en/tutorials/modular-crm/images/abp-studio-import-module-ordering.png index e62c0dc315..8956033762 100644 Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-import-module-ordering.png and b/docs/en/tutorials/modular-crm/images/abp-studio-import-module-ordering.png differ diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-import-module.png b/docs/en/tutorials/modular-crm/images/abp-studio-import-module.png index 673d303307..7a63894709 100644 Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-import-module.png and b/docs/en/tutorials/modular-crm/images/abp-studio-import-module.png differ diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-new-folder-dialog.png b/docs/en/tutorials/modular-crm/images/abp-studio-new-folder-dialog.png index f726332a37..e1e3065b9c 100644 Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-new-folder-dialog.png and b/docs/en/tutorials/modular-crm/images/abp-studio-new-folder-dialog.png differ diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-open-in-explorer.png b/docs/en/tutorials/modular-crm/images/abp-studio-open-in-explorer.png index ce052d2b17..99c6d26b20 100644 Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-open-in-explorer.png and b/docs/en/tutorials/modular-crm/images/abp-studio-open-in-explorer.png differ diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-open-with-visual-studio-main-app.png b/docs/en/tutorials/modular-crm/images/abp-studio-open-with-visual-studio-main-app.png index 1f879ed795..f4131cfb69 100644 Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-open-with-visual-studio-main-app.png and b/docs/en/tutorials/modular-crm/images/abp-studio-open-with-visual-studio-main-app.png differ diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-open-with-visual-studio.png b/docs/en/tutorials/modular-crm/images/abp-studio-open-with-visual-studio.png index ba96d6f488..2b1bac2db6 100644 Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-open-with-visual-studio.png and b/docs/en/tutorials/modular-crm/images/abp-studio-open-with-visual-studio.png differ diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-ordering-swagger-ui-in-browser.png b/docs/en/tutorials/modular-crm/images/abp-studio-ordering-swagger-ui-in-browser.png new file mode 100644 index 0000000000..304027af9e Binary files /dev/null and b/docs/en/tutorials/modular-crm/images/abp-studio-ordering-swagger-ui-in-browser.png differ diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-solution-runner-graph-build.png b/docs/en/tutorials/modular-crm/images/abp-studio-solution-runner-graph-build.png index ececabbf01..10d210a0be 100644 Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-solution-runner-graph-build.png and b/docs/en/tutorials/modular-crm/images/abp-studio-solution-runner-graph-build.png differ diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-solution-runner-initial-product-page.png b/docs/en/tutorials/modular-crm/images/abp-studio-solution-runner-initial-product-page.png index 480da27d7e..269c55f8b4 100644 Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-solution-runner-initial-product-page.png and b/docs/en/tutorials/modular-crm/images/abp-studio-solution-runner-initial-product-page.png differ diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-solution-runner-orders-page.png b/docs/en/tutorials/modular-crm/images/abp-studio-solution-runner-orders-page.png index f3e9896e8f..fbd419d145 100644 Binary files a/docs/en/tutorials/modular-crm/images/abp-studio-solution-runner-orders-page.png and b/docs/en/tutorials/modular-crm/images/abp-studio-solution-runner-orders-page.png differ diff --git a/docs/en/tutorials/modular-crm/images/abp-studio-swagger-ui-create-order-execute.png b/docs/en/tutorials/modular-crm/images/abp-studio-swagger-ui-create-order-execute.png new file mode 100644 index 0000000000..b0f384f15d Binary files /dev/null and b/docs/en/tutorials/modular-crm/images/abp-studio-swagger-ui-create-order-execute.png differ diff --git a/docs/en/tutorials/modular-crm/images/sql-server-orders-database-table-filled.png b/docs/en/tutorials/modular-crm/images/sql-server-orders-database-table-filled.png new file mode 100644 index 0000000000..75c812593c Binary files /dev/null and b/docs/en/tutorials/modular-crm/images/sql-server-orders-database-table-filled.png differ diff --git a/docs/en/tutorials/modular-crm/images/sql-server-orders-table-content.png b/docs/en/tutorials/modular-crm/images/sql-server-orders-table-content.png deleted file mode 100644 index 1bc432c650..0000000000 Binary files a/docs/en/tutorials/modular-crm/images/sql-server-orders-table-content.png and /dev/null differ diff --git a/docs/en/tutorials/modular-crm/images/visual-studio-ordering-contracts.png b/docs/en/tutorials/modular-crm/images/visual-studio-ordering-contracts.png new file mode 100644 index 0000000000..d9206f6630 Binary files /dev/null and b/docs/en/tutorials/modular-crm/images/visual-studio-ordering-contracts.png differ diff --git a/docs/en/tutorials/modular-crm/images/visual-studio-ordering-controller.png b/docs/en/tutorials/modular-crm/images/visual-studio-ordering-controller.png deleted file mode 100644 index 56a1dad5b1..0000000000 Binary files a/docs/en/tutorials/modular-crm/images/visual-studio-ordering-controller.png and /dev/null differ diff --git a/docs/en/tutorials/modular-crm/part-02.md b/docs/en/tutorials/modular-crm/part-02.md index 14560b3766..de8fd69f92 100644 --- a/docs/en/tutorials/modular-crm/part-02.md +++ b/docs/en/tutorials/modular-crm/part-02.md @@ -41,7 +41,7 @@ We will use the *DDD Module* template for the Product module and the *Empty Modu Right-click the `modules` folder on the *Solution Explorer* panel, and select the *Add* -> *New Module* -> *DDD Module* command: -![abp-studio-add-new-dd-module](images/abp-studio-add-new-dd-module.png) +![abp-studio-add-new-ddd-module](images/abp-studio-add-new-ddd-module.png) This command opens a new dialog to define the properties of the new module. You can use the following values to create a new module named `ModularCrm.Products`: diff --git a/docs/en/tutorials/modular-crm/part-05.md b/docs/en/tutorials/modular-crm/part-05.md index f7d624bcbf..69a9223882 100644 --- a/docs/en/tutorials/modular-crm/part-05.md +++ b/docs/en/tutorials/modular-crm/part-05.md @@ -232,9 +232,215 @@ After the operation completes, you can check your database to see the new `Order ![sql-server-products-database-table](images/sql-server-orders-database-table.png) -## Creating the User Interface +## Creating the Application Service + +We will create an application service to manage the `Order` entities. + +### Defining the Application Service Contract + +We're gonna create the `IOrderAppService` interface under the `ModularCrm.Ordering.Contracts` project but first, we need to add `Volo.Abp.Ddd.Application.Contracts` package reference. + +Right-click the `ModularCrm.Ordering.Contracts` project in the *Solution Explorer* panel and select the *Add Package Reference* command: + +![abp-studio-add-package-reference-6](images/abp-studio-add-package-reference-6.png) + +This command opens a dialog to add a new package reference: + +![abp-studio-add-package-reference-dialog-5](images/abp-studio-add-package-reference-dialog-5.png) + +Select the *NuGet* tab, type `Volo.Abp.Ddd.Application.Contracts` as the *Package name* and write the version of the package you want to install. Please be sure that you are installing the same version as the other ABP packages you are already using. + +Click the *Ok* button. Now you can check the *Packages* under the `ModularCrm.Ordering.Contracts` project *Dependencies* to see the `Volo.Abp.Ddd.Application.Contracts` package is installed: + +![abp-studio-added-ddd-contracts-package](images/abp-studio-added-ddd-contracts-package.png) + +Return to your IDE, open the `ModularCrm.Ordering` module's .NET solution and create an `IOrderAppService` interface under the `Services` folder for `ModularCrm.Ordering.Contracts` project: + +````csharp +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.Application.Services; + +namespace ModularCrm.Ordering.Contracts.Services; + +public interface IOrderAppService : IApplicationService +{ + Task> GetListAsync(); + Task CreateAsync(OrderCreationDto input); +} +```` + +### Defining Data Transfer Objects + +The `GetListAsync` and `CreateAsync` methods will use data transfer objects (DTOs) to communicate with the client. We will create two DTO classes for that purpose. + +Create a `OrderCreationDto` class under the `ModularCrm.Ordering.Contracts` project: + +````csharp +using System; +using System.ComponentModel.DataAnnotations; + +namespace ModularCrm.Ordering.Contracts.Services; + +public class OrderCreationDto +{ + [Required] + [StringLength(150)] + public string CustomerName { get; set; } + + [Required] + public Guid ProductId { get; set; } +} +```` + +Create a `OrderDto` class under the `ModularCrm.Ordering.Contracts` project: + +````csharp +using System; +using ModularCrm.Ordering.Contracts.Enums; + +namespace ModularCrm.Ordering.Contracts.Services; + +public class OrderDto +{ + public Guid Id { get; set; } + public string CustomerName { get; set; } + public Guid ProductId { get; set; } + public OrderState State { get; set; } +} +```` + +The new files under the `ModularCrm.Ordering.Contracts` project should be like the following figure: + +![visual-studio-ordering-contracts](images/visual-studio-ordering-contracts.png) + +### Implementing the Application Service + +Before creating the `OrderAppService` class, we need to add the `Volo.Abp.Ddd.Application` and `Volo.Abp.AutoMapper` packages to the Ordering module. + +Right-click the `ModularCrm.Ordering` package in the *Solution Explorer* panel and select the *Add Package Reference* command: + +![abp-studio-add-package-reference-7](images/abp-studio-add-package-reference-7.png) + +This command opens a dialog to add a new package reference: + +![abp-studio-add-package-reference-dialog-6](images/abp-studio-add-package-reference-dialog-6.png) + +Select the *NuGet* tab, enter `Volo.Abp.Ddd.Application` as the *Package name*, and specify the version of the package you wish to install. Afterward, you can add the `Volo.Abp.AutoMapper` package in the same dialog. Ensure that you install the same version as the other ABP packages you are already using. + +Click the *OK* button. Now we should configure the *AutoMapper* object to map the `Order` entity to the `OrderDto` object. We will create a class named `OrderingApplicationAutoMapperProfile` under the `ModularCrm.Ordering` project: + +````csharp +using AutoMapper; +using ModularCrm.Ordering.Contracts.Services; +using ModularCrm.Ordering.Entities; + +namespace ModularCrm.Ordering; + +public class OrderingApplicationAutoMapperProfile : Profile +{ + public OrderingApplicationAutoMapperProfile() + { + CreateMap(); + } +} +```` -Since this is a non-layered module, we can use entities and repositories directly on the user interface. If you think that is not a good practice, then use the layered module template as we've already done for the *Products* module. But for the Ordering module, we will keep it very simple for this tutorial to show it is also possible. +And configure the `OrderingWebModule` class to use the `OrderingApplicationAutoMapperProfile`: + +````csharp +public override void ConfigureServices(ServiceConfigurationContext context) +{ + //Add these lines + context.Services.AddAutoMapperObjectMapper(); + Configure(options => + { + options.AddMaps(validate: true); + }); +} +```` + +Now, we can implement the `IOrderAppService` interface. Create an `OrderAppService` class under the `Services` folder of the `ModularCrm.Ordering` project: + +````csharp +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using ModularCrm.Ordering.Contracts.Enums; +using ModularCrm.Ordering.Contracts.Services; +using ModularCrm.Ordering.Entities; +using Volo.Abp.Application.Services; +using Volo.Abp.Domain.Repositories; + +namespace ModularCrm.Ordering.Services; + +public class OrderAppService : ApplicationService, IOrderAppService +{ + private readonly IRepository _orderRepository; + + public OrderAppService(IRepository orderRepository) + { + _orderRepository = orderRepository; + ObjectMapperContext = typeof(OrderingWebModule); + } + + public async Task> GetListAsync() + { + var orders = await _orderRepository.GetListAsync(); + return ObjectMapper.Map, List>(orders); + } + + public async Task CreateAsync(OrderCreationDto input) + { + var order = new Order + { + CustomerName = input.CustomerName, + ProductId = input.ProductId, + State = OrderState.Placed + }; + + await _orderRepository.InsertAsync(order); + } +} +```` + +Open the `ModularCrmWebModule` class in the main application's solution (the `ModularCrm` solution), find the `ConfigureAutoApiControllers` method and add the following lines inside that method: + +````csharp +private void ConfigureAutoApiControllers() +{ + Configure(options => + { + options.ConventionalControllers.Create(typeof(ModularCrmApplicationModule).Assembly); + options.ConventionalControllers.Create(typeof(ProductsApplicationModule).Assembly); + + //ADD THE FOLLOWING LINE: + options.ConventionalControllers.Create(typeof(OrderingWebModule).Assembly); + }); +} +```` + +### Creating Example Orders + +This section will create a few example orders using the [Swagger UI](../../framework/api-development/swagger.md). Thus, we will have some sample orders to show on the UI. + +Now, right-click the `ModularCrm` under the `main` folder in the Solution Explorer panel and select the *Dotnet CLI* -> *Graph Build* command. This will ensure that the order module and the main application are built and ready to run. + +After the build process completes, open the Solution Runner panel and click the *Play* button near the solution root. Once the `ModularCrm.Web` application runs, we can right-click it and select the *Browse* command to open the user interface. + +Once you see the user interface of the web application, type `/swagger` at the end of the URL to open the Swagger UI. If you scroll down, you should see the `Orders` API: + +![abp-studio-ordering-swagger-ui-in-browser](images/abp-studio-ordering-swagger-ui-in-browser.png) + +Expand the `/api/app/order` API and click the *Try it out* button. Then, create a few orders by filling in the request body and clicking the *Execute* button: + +![abp-studio-swagger-ui-create-order-execute](images/abp-studio-swagger-ui-create-order-execute.png) + +If you check the database, you should see the entities created in the *Orders* table: + +![sql-server-orders-database-table-filled](images/sql-server-orders-database-table-filled.png) + +## Creating the User Interface ### Creating a `_ViewImports.cshtml` File @@ -257,28 +463,26 @@ Create an `Orders` folder under the `Pages` folder and add an `Index.cshtml` Raz ````csharp using Microsoft.AspNetCore.Mvc.RazorPages; -using ModularCrm.Ordering.Entities; -using System; using System.Collections.Generic; using System.Threading.Tasks; -using Volo.Abp.Domain.Repositories; +using ModularCrm.Ordering.Contracts.Services; namespace ModularCrm.Ordering.Pages.Orders { public class IndexModel : PageModel { - public List Orders { get; set; } + public List Orders { get; set; } - private readonly IRepository _orderRepository; + private readonly IOrderAppService _orderAppService; - public IndexModel(IRepository orderRepository) + public IndexModel(IOrderAppService orderAppService) { - _orderRepository = orderRepository; + _orderAppService = orderAppService; } public async Task OnGetAsync() { - Orders = await _orderRepository.GetListAsync(); + Orders = await _orderAppService.GetListAsync(); } } } @@ -310,14 +514,6 @@ Here, we are injecting a repository to query `Order` entities from the database This page shows a list of orders on the UI. We haven't created a UI to create new orders, and we will not do it to keep this tutorial simple. If you want to learn how to create advanced UIs with ABP, please follow the [Book Store tutorial](../book-store/index.md). -### Creating Some Sample Data - -You can open the database and manually create a few order records to show on the UI: - -![sql-server-orders-table-content](images/sql-server-orders-table-content.png) - -You can get `ProductId` values from the `Products` table and [generate](https://www.guidgenerator.com/) some random GUIDs for other GUID fields. - ### Building the Application Now, we will run the application to see the result. Please stop the application if it is already running. Then open the *Solution Runner* panel, right-click the `ModularCrm.Web` application, and select the *Build* -> *Graph Build* command: @@ -375,11 +571,13 @@ namespace ModularCrm.Ordering `OrderingMenuContributor` implements the `IMenuContributor` interface, which forces us to implement the `ConfigureMenuAsync` method. In that method, we can manipulate the menu items (add new menu items, remove existing menu items or change the properties of existing menu items). The `ConfigureMenuAsync` method is executed whenever the menu is rendered on the UI, so you can dynamically decide how to manipulate the menu items. -After creating such a class, we should configure the `AbpNavigationOptions` to add that contributor. Open the `OrderingWebModule` class in the `ModularCrm.Ordering` project and add the following configuration code into the `ConfigureServices` method (if there is no `ConfigureServices` method, first create it as shown below): +After creating such a class, we should configure the `AbpNavigationOptions` to add that contributor. Open the `OrderingWebModule` class in the `ModularCrm.Ordering` project and add the following configuration code into the `ConfigureServices` method: ````csharp public override void ConfigureServices(ServiceConfigurationContext context) { + //... other configurations + Configure(options => { options.MenuContributors.Add(new OrderingMenuContributor()); diff --git a/docs/en/tutorials/modular-crm/part-06.md b/docs/en/tutorials/modular-crm/part-06.md index 2fd5d82f34..55e04259bb 100644 --- a/docs/en/tutorials/modular-crm/part-06.md +++ b/docs/en/tutorials/modular-crm/part-06.md @@ -145,68 +145,120 @@ ABP Studio adds the package reference and arranges the [module](../../framework/ Now, we can inject and use `IProductIntegrationService` in the Ordering module codebase. -Open the `IndexModel` class (the `IndexModel.cshtml.cs` file under the `Pages/Orders` folder of the `ModularCrm.Ordering` project of the `ModularCrm.Ordering` .NET solution) and change its content as like the following code block: +Open the `OrderAppService` class (the `OrderAppService.cs` file under the `Services` folder of the `ModularCrm.Ordering` project of the `ModularCrm.Ordering` .NET solution) and change its content as like the following code block: ````csharp -using Microsoft.AspNetCore.Mvc.RazorPages; -using ModularCrm.Ordering.Entities; -using ModularCrm.Products.Integration; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using ModularCrm.Ordering.Contracts.Enums; +using ModularCrm.Ordering.Contracts.Services; +using ModularCrm.Ordering.Entities; +using ModularCrm.Products.Integration; +using Volo.Abp.Application.Services; using Volo.Abp.Domain.Repositories; -namespace ModularCrm.Ordering.Pages.Orders +namespace ModularCrm.Ordering.Services; + +public class OrderAppService : ApplicationService, IOrderAppService { - public class IndexModel : PageModel + private readonly IRepository _orderRepository; + private readonly IProductIntegrationService _productIntegrationService; + + public OrderAppService( + IRepository orderRepository, + IProductIntegrationService productIntegrationService) + { + _orderRepository = orderRepository; + _productIntegrationService = productIntegrationService; + ObjectMapperContext = typeof(OrderingWebModule); + } + + public async Task> GetListAsync() { - public List Orders { get; set; } - - // Define a dictionary for Id -> Name conversion - public Dictionary ProductNames { get; set; } + var orders = await _orderRepository.GetListAsync(); + + // Prepare a list of products we need + var productIds = orders.Select(o => o.ProductId).Distinct().ToList(); + var products = (await _productIntegrationService + .GetProductsByIdsAsync(productIds)) + .ToDictionary(p => p.Id, p => p.Name); - private readonly IRepository _orderRepository; - private readonly IProductIntegrationService _productIntegrationService; + var orderDtos = ObjectMapper.Map, List>(orders); - public IndexModel( - IRepository orderRepository, - IProductIntegrationService productIntegrationService) + orderDtos.ForEach(orderDto => { - _orderRepository = orderRepository; - _productIntegrationService = productIntegrationService; - } + orderDto.ProductName = products[orderDto.ProductId]; + }); + + return orderDtos; + } - public async Task OnGetAsync() + public async Task CreateAsync(OrderCreationDto input) + { + var order = new Order { - // Getting the orders from this module's database - Orders = await _orderRepository.GetListAsync(); + CustomerName = input.CustomerName, + ProductId = input.ProductId, + State = OrderState.Placed + }; - // Prepare a list of products we need - var productIds = Orders.Select(o => o.ProductId).Distinct().ToList(); + await _orderRepository.InsertAsync(order); + } +} +```` - // Request the related products from the product integration service - var products = await _productIntegrationService - .GetProductsByIdsAsync(productIds); +And also, open the `OrderDto` class (the `OrderDto.cs` file under the `Services` folder of the `ModularCrm.Ordering.Contracts` project of the `ModularCrm.Ordering` .NET solution) and add a `ProductName` property to it: - // Create a dictionary to get a product name easily by its id - ProductNames = products.ToDictionary(p => p.Id, p => p.Name); - } +````csharp +using System; +using ModularCrm.Ordering.Contracts.Enums; + +namespace ModularCrm.Ordering.Contracts.Services; + +public class OrderDto +{ + public Guid Id { get; set; } + public string CustomerName { get; set; } + public Guid ProductId { get; set; } + public string ProductName { get; set; } // New property + public OrderState State { get; set; } +} +```` + +Lastly, open the `OrderingApplicationAutoMapperProfile` class (the `OrderingApplicationAutoMapperProfile.cs` file under the `Services` folder of the `ModularCrm.Ordering` project of the `ModularCrm.Ordering` .NET solution) and ignore the `ProductName` property in the mapping configuration: + +````csharp +using AutoMapper; +using ModularCrm.Ordering.Contracts.Services; +using ModularCrm.Ordering.Entities; +using Volo.Abp.AutoMapper; + +namespace ModularCrm.Ordering; + +public class OrderingApplicationAutoMapperProfile : Profile +{ + public OrderingApplicationAutoMapperProfile() + { + CreateMap() + .Ignore(x => x.ProductName); // New line } } ```` Let's see what we've changed: -* We have defined a `ProductNames` dictionary. We will use it on the UI to convert product IDs to product names. We are filling that dictionary with products from the product integration service. +* We've added a `ProductName` property to the `OrderDto` class to store the product name. * Injecting the `IProductIntegrationService` interface so we can use it to request products. -* In the `OnGetAsync` method; +* In the `GetListAsync` method; * First getting the orders from the ordering module's database just like done before. * Next, we are preparing a unique list of product IDs since the `GetProductsByIdsAsync` method requests it. * Then we are calling the `IProductIntegrationService.GetProductsByIdsAsync` method to get a `List` object. * In the last line, we are converting the product list to a dictionary, where the key is `Guid Id` and the value is `string Name`. That way, we can easily find a product's name with its ID. + * Finally, we are mapping the orders to `OrderDto` objects and setting the product name by looking up the product ID in the dictionary. -Open the `Index.cshtml` file, and change the `@order.ProductId` part by `@Model.ProductNames[order.ProductId]` to write the product name instead of the product ID. The final `Index.cshtml` content should be the following: +Open the `Index.cshtml` file, and change the `@order.ProductId` part by `@Model.ProductName` to write the product name instead of the product ID. The final `Index.cshtml` content should be the following: ````html @page @@ -219,11 +271,11 @@ Open the `Index.cshtml` file, and change the `@order.ProductId` part by `@Model. @foreach (var order in Model.Orders) { - - Customer: @order.CustomerName
- Product: @Model.ProductNames[order.ProductId]
- State: @order.State -
+ + Customer: @order.CustomerName
+ Product: @order.ProductName
+ State: @order.State +
}
@@ -241,4 +293,3 @@ In the way explained in this section, you can easily create integration services > **Design Tip** > > It is suggested that you keep that type of communication to a minimum and not couple your modules with each other. It can make your solution complicated and may also decrease your system performance. When you need to do it, think about performance and try to make some optimizations. For example, if the Ordering module frequently needs product data, you can use a kind of [cache layer](../../framework/fundamentals/caching.md), so it doesn't make frequent requests to the Products module. Especially if you consider converting your system to a microservice solution in the future, too many direct integration API calls can be a performance bottleneck. - diff --git a/docs/en/tutorials/modular-crm/part-07.md b/docs/en/tutorials/modular-crm/part-07.md index 9dc18648bd..5ddba71421 100644 --- a/docs/en/tutorials/modular-crm/part-07.md +++ b/docs/en/tutorials/modular-crm/part-07.md @@ -56,83 +56,86 @@ namespace ModularCrm.Ordering.Contracts.Events ### Using the `IDistributedEventBus` Service -The `IDistributedEventBus` service publishes events to the event bus. Until this point, the Ordering module has no functionality to create new orders. - -In Part 3, we used ABP's Auto HTTP API Controller feature to expose HTTP APIs from application services automatically. In this section, we will create an ASP.NET Core API controller class to create a new order. In that way, you will also see that it is not different from creating a regular ASP.NET Core controller. - -Open the `ModularCrm.Ordering` module's .NET solution, create a `Controllers` folder in the `ModularCrm.Ordering` project and place a controller class named `OrdersController` in that new folder. The final folder structure should be like that: - -![visual-studio-ordering-controller](images/visual-studio-ordering-controller.png) - -Here is the full `OrdersController` class: +The `IDistributedEventBus` service publishes events to the event bus. Until this point, the Ordering module has no functionality to create new orders. Let's change that and place an order, for that purpose open the `ModularCrm.Ordering` module's .NET solution, and update the `OrderAppService` as follows: ````csharp -using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; using ModularCrm.Ordering.Contracts.Enums; using ModularCrm.Ordering.Contracts.Events; +using ModularCrm.Ordering.Contracts.Services; using ModularCrm.Ordering.Entities; -using System; -using System.ComponentModel.DataAnnotations; -using System.Threading.Tasks; -using Volo.Abp.AspNetCore.Mvc; +using ModularCrm.Products.Integration; +using Volo.Abp.Application.Services; using Volo.Abp.Domain.Repositories; using Volo.Abp.EventBus.Distributed; -namespace ModularCrm.Ordering.Controllers +namespace ModularCrm.Ordering.Services; + +public class OrderAppService : ApplicationService, IOrderAppService { - [Route("api/orders")] - [ApiController] - public class OrdersController : AbpControllerBase + private readonly IRepository _orderRepository; + private readonly IProductIntegrationService _productIntegrationService; + private readonly IDistributedEventBus _distributedEventBus; + + public OrderAppService( + IRepository orderRepository, + IProductIntegrationService productIntegrationService, + IDistributedEventBus distributedEventBus) { - private readonly IRepository _orderRepository; - private readonly IDistributedEventBus _distributedEventBus; + _orderRepository = orderRepository; + _productIntegrationService = productIntegrationService; + _distributedEventBus = distributedEventBus; + ObjectMapperContext = typeof(OrderingWebModule); + } - public OrdersController( - IRepository orderRepository, - IDistributedEventBus distributedEventBus) - { - _orderRepository = orderRepository; - _distributedEventBus = distributedEventBus; - } + public async Task> GetListAsync() + { + var orders = await _orderRepository.GetListAsync(); + + // Prepare a list of products we need + var productIds = orders.Select(o => o.ProductId).Distinct().ToList(); + var products = (await _productIntegrationService + .GetProductsByIdsAsync(productIds)) + .ToDictionary(p => p.Id, p => p.Name); + + var orderDtos = ObjectMapper.Map, List>(orders); - [HttpPost] - public async Task CreateAsync(OrderCreationModel input) + orderDtos.ForEach(orderDto => { - // Create a new Order entity - var order = new Order - { - CustomerName = input.CustomerName, - ProductId = input.ProductId, - State = OrderState.Placed - }; - - // Save it to the database - await _orderRepository.InsertAsync(order); - - // Publish an event so other modules can be informed - await _distributedEventBus.PublishAsync( - new OrderPlacedEto - { - ProductId = order.ProductId, - CustomerName = order.CustomerName - }); - - return Created(); - } + orderDto.ProductName = products[orderDto.ProductId]; + }); - public class OrderCreationModel + return orderDtos; + } + + public async Task CreateAsync(OrderCreationDto input) + { + // Create a new Order entity + var order = new Order { - public Guid ProductId { get; set; } + CustomerName = input.CustomerName, + ProductId = input.ProductId, + State = OrderState.Placed + }; - [Required] - [StringLength(120)] - public string CustomerName { get; set; } - } + // Save it to the database + await _orderRepository.InsertAsync(order); + + // Publish an event so other modules can be informed + await _distributedEventBus.PublishAsync( + new OrderPlacedEto + { + ProductId = order.ProductId, + CustomerName = order.CustomerName + }); } } ```` -The `OrdersController.CreateAsync` method creates a new `Order` entity, saves it to the database and finally publishes an `OrderPlacedEto` event. +The `OrderAppService.CreateAsync` method creates a new `Order` entity, saves it to the database and finally publishes an `OrderPlacedEto` event. ## Subscribing to an Event diff --git a/docs/en/tutorials/todo/layered/index.md b/docs/en/tutorials/todo/layered/index.md index 78f49df9dd..2eef34bbd2 100644 --- a/docs/en/tutorials/todo/layered/index.md +++ b/docs/en/tutorials/todo/layered/index.md @@ -53,7 +53,7 @@ This documentation has a video tutorial on **YouTube**!! You can watch it here: ## Pre-Requirements * An IDE (e.g. [Visual Studio](https://visualstudio.microsoft.com/vs/)) that supports [.NET 8.0+](https://dotnet.microsoft.com/download/dotnet) development. -* [Node v16.x](https://nodejs.org/) +* [Node v18.19+](https://nodejs.org/) {{if DB=="Mongo"}} @@ -65,17 +65,17 @@ This documentation has a video tutorial on **YouTube**!! You can watch it here: We will use the [ABP CLI](../../../cli/index.md) to create new ABP solutions. You can run the following command on a terminal window to install this dotnet tool: -``` +````bash dotnet tool install -g Volo.Abp.Studio.Cli -``` +```` ## Create Your ABP Solution Create an empty folder, open a command-line terminal and execute the following command in the terminal: -``` +````bash abp new TodoApp{{if UI=="Blazor"}} -u blazor{{else if UI=="BlazorServer"}} -u blazor-server{{else if UI=="NG"}} -u angular{{end}}{{if DB=="Mongo"}} -d mongodb{{end}} -``` +```` {{if UI=="NG"}} @@ -107,9 +107,9 @@ However, sometimes this command might need to be manually run. For example, you For such cases, run the `abp install-libs` command on the root directory of your solution to install all required NPM packages: -``` +````bash abp install-libs -``` +```` > We suggest you install [Yarn](https://classic.yarnpkg.com/) to prevent possible package inconsistencies, if you haven't installed it yet. @@ -121,9 +121,9 @@ abp install-libs However, sometimes you might need to run this command manually. To update script & style references without worrying about dependencies, ordering, etc. in a project, you can run this command in the directory of your blazor application: -``` +````bash abp bundle -``` +```` > For more details about managing style and script references in Blazor or MAUI Blazor apps, see [Managing Global Scripts & Styles](../../../framework/ui/blazor/global-scripts-styles.md). @@ -167,9 +167,9 @@ You can explore and test your HTTP API with this UI. If it works, we can run the You can run the application using the following command: -``` +````bash npm start -``` +```` This command takes time, but eventually runs and opens the application in your default browser: @@ -185,7 +185,7 @@ All ready. We can start coding! This application has a single [entity](../../../framework/architecture/domain-driven-design/entities.md) and we'll start by creating it. Create a new `TodoItem` class inside the *TodoApp.Domain* project: -```csharp +````csharp using System; using Volo.Abp.Domain.Entities; @@ -196,7 +196,7 @@ namespace TodoApp public string Text { get; set; } = string.Empty; } } -``` +```` `BasicAggregateRoot` is the simplest base class to create root entities, and `Guid` is the primary key (`Id`) of the entity here. @@ -242,9 +242,9 @@ The startup solution is configured to use Entity Framework Core [Code First Migr Open a command-line terminal in the directory of the *TodoApp.EntityFrameworkCore* project and type the following command: -``` +````bash dotnet ef migrations add Added_TodoItem -``` +```` This will add a new migration class to the project: @@ -252,9 +252,9 @@ This will add a new migration class to the project: You can apply changes to the database using the following command, in the same command-line terminal: -``` +````bash dotnet ef database update -``` +```` > If you are using Visual Studio, you may want to use the `Add-Migration Added_TodoItem` and `Update-Database` commands in the *Package Manager Console (PMC)*. In this case, ensure that {{if UI=="MVC"}}`TodoApp.Web`{{else if UI=="BlazorServer" || UI=="Blazor" || UI=="BlazorWebApp"}}`TodoApp.Blazor`{{else if UI=="Blazor" || UI=="NG"}}`TodoApp.HttpApi.Host`{{end}} is the startup project and `TodoApp.EntityFrameworkCore` is the *Default Project* in PMC. @@ -264,18 +264,18 @@ Next step is to setup the [MongoDB](../../../framework/data/mongodb/index.md) co 1. Add a new property to the class: -```csharp +````csharp public IMongoCollection TodoItems => Collection(); -``` +```` 2. Add the following code inside the `CreateModel` method: -```csharp +````csharp modelBuilder.Entity(b => { b.CollectionName = "TodoItems"; }); -``` +```` {{end}} @@ -293,7 +293,7 @@ An [Application Service](../../../framework/architecture/domain-driven-design/ap We can start by defining an interface for the application service. Create a new `ITodoAppService` interface in the *TodoApp.Application.Contracts* project, as shown below: -```csharp +````csharp using System; using System.Collections.Generic; using System.Threading.Tasks; @@ -308,13 +308,13 @@ namespace TodoApp Task DeleteAsync(Guid id); } } -``` +```` ### Data Transfer Object `GetListAsync` and `CreateAsync` methods return `TodoItemDto`. `ApplicationService` typically gets and returns DTOs ([Data Transfer Objects](../../../framework/architecture/domain-driven-design/data-transfer-objects.md)) instead of entities. So, we should define the DTO class here. Create a new `TodoItemDto` class inside the *TodoApp.Application.Contracts* project: -```csharp +````csharp using System; namespace TodoApp @@ -325,7 +325,7 @@ namespace TodoApp public string Text { get; set; } = string.Empty; } } -``` +```` This is a very simple DTO class that matches our `TodoItem` entity. We are ready to implement the `ITodoAppService`. @@ -333,7 +333,7 @@ This is a very simple DTO class that matches our `TodoItem` entity. We are ready Create a `TodoAppService` class inside the *TodoApp.Application* project, as shown below: -```csharp +````csharp using System; using System.Collections.Generic; using System.Linq; @@ -355,7 +355,7 @@ namespace TodoApp // TODO: Implement the methods here... } } -``` +```` This class inherits from the `ApplicationService` class of the ABP and implements the `ITodoAppService` that was defined before. ABP provides default generic [repositories](../../../framework/architecture/domain-driven-design/entities.md) for the entities. We can use them to perform the fundamental database operations. This class [injects](../../../framework/fundamentals/dependency-injection.md) `IRepository`, which is the default repository for the `TodoItem` entity. We will use it to implement the use cases described before. @@ -363,7 +363,7 @@ This class inherits from the `ApplicationService` class of the ABP and implement Let's start by implementing the `GetListAsync` method: -```csharp +````csharp public async Task> GetListAsync() { var items = await _todoItemRepository.GetListAsync(); @@ -374,7 +374,7 @@ public async Task> GetListAsync() Text = item.Text }).ToList(); } -``` +```` We are simply getting the complete `TodoItem` list from the database, mapping them to `TodoItemDto` objects and returning as the result. @@ -382,7 +382,7 @@ We are simply getting the complete `TodoItem` list from the database, mapping th Next method is `CreateAsync` and we can implement it as shown below: -```csharp +````csharp public async Task CreateAsync(string text) { var todoItem = await _todoItemRepository.InsertAsync( @@ -395,7 +395,7 @@ public async Task CreateAsync(string text) Text = todoItem.Text }; } -``` +```` The repository's `InsertAsync` method inserts the given `TodoItem` to the database and returns the same `TodoItem` object. It also sets the `Id`, so we can use it on the returning object. We are simply returning a `TodoItemDto` by creating from the new `TodoItem` entity. @@ -403,12 +403,12 @@ The repository's `InsertAsync` method inserts the given `TodoItem` to the databa Finally, we can implement the `DeleteAsync` as the following code block: -```csharp +````csharp public async Task DeleteAsync(Guid id) { await _todoItemRepository.DeleteAsync(id); } -``` +```` The application service is ready to be used from the UI layer. @@ -426,7 +426,7 @@ It is time to show the todo items on the UI! Before starting to write the code, Open the `Index.cshtml.cs` file in the `Pages` folder of the *TodoApp.Web* project and replace the content with the following code block: -```csharp +````csharp using System.Collections.Generic; using System.Threading.Tasks; @@ -449,7 +449,7 @@ namespace TodoApp.Web.Pages } } } -``` +```` This class uses the `ITodoAppService` to get the list of todo items and assign the `TodoItems` property. We will use it to render the todo items on the razor page. @@ -743,13 +743,13 @@ You first need to run the `TodoApp.HttpApi.Host` project since the proxy generat Once you run the `TodoApp.HttpApi.Host` project, open a command-line terminal in the `angular` folder and type the following command: -``` +````bash abp generate-proxy -t ng -``` +```` If everything goes well, it should generate an output as shown below: -``` +```bash CREATE src/app/proxy/generate-proxy.json (170978 bytes) CREATE src/app/proxy/README.md (1000 bytes) CREATE src/app/proxy/todo.service.ts (794 bytes) diff --git a/docs/en/tutorials/todo/single-layer/index.md b/docs/en/tutorials/todo/single-layer/index.md index 9afbbd8833..3b4f755c70 100644 --- a/docs/en/tutorials/todo/single-layer/index.md +++ b/docs/en/tutorials/todo/single-layer/index.md @@ -49,7 +49,7 @@ This documentation has a video tutorial on **YouTube**!! You can watch it here: ## Pre-Requirements * An IDE (e.g. [Visual Studio](https://visualstudio.microsoft.com/vs/)) that supports [.NET 8.0+](https://dotnet.microsoft.com/download/dotnet) development. -* [Node v16.x](https://nodejs.org/) +* [Node v18.19+](https://nodejs.org/) {{if DB=="Mongo"}} diff --git a/docs/en/ui-themes/lepton/index.md b/docs/en/ui-themes/lepton/index.md index 8861595d45..ed5c222c39 100644 --- a/docs/en/ui-themes/lepton/index.md +++ b/docs/en/ui-themes/lepton/index.md @@ -7,7 +7,7 @@ The Lepton Theme is a professional theme for the ABP. * Built on the [Bootstrap 5](https://getbootstrap.com) library. * 100% compatible with [Bootstrap 5](https://getbootstrap.com) HTML structure and CSS classes * Responsive & mobile-compatible. -* Provides different style like Material, Dark, Light. +* Provides different styles like Material, Dark, Light. * Provides styles for [Datatables](https://datatables.net). A screenshot from the light style of the theme: @@ -18,7 +18,7 @@ A screenshot from the light style of the theme: ## How to Install -Lepton Theme module is pre-installed in [the startup templates](../../get-started). So, no need to manually install it. +Lepton Theme module can be pre-installed to [the startup templates](../../get-started), if you specify the theme as **LeptonTheme** (see the [CLI documentation](../../cli/index.md)). So, no need to manually install it. ## Packages @@ -73,10 +73,16 @@ See the `LeptonThemeManagementPermissions` class members for all permissions def ### Source code -To download the source-code of the Lepton Theme use the following CLI command +To download the source-code of the Lepton Theme use the following CLI command: +```bash +abp get-source Volo.Abp.LeptonTheme # for new ABP CLI ``` -abp get-source Volo.LeptonTheme + +If you are using the old ABP CLI, you can use the following command: + +```bash +abp get-source Volo.LeptonTheme ``` ## Lepton Theme Customization @@ -86,4 +92,4 @@ Checkout how to customize the Lepton Theme to change your website’s overall lo * [Customizing Lepton Theme for Angular](customizing-lepton-theme.md?UI=NG) * [Customizing Lepton Theme for MVC](customizing-lepton-theme.md?UI=MVC) * [Customizing Lepton Theme for Blazor](customizing-lepton-theme.md?UI=Blazor) -* [Customizing Lepton Theme for Blazor Server](customizing-lepton-theme.md?UI=BlazorServer) \ No newline at end of file +* [Customizing Lepton Theme for Blazor Server](customizing-lepton-theme.md?UI=BlazorServer) diff --git a/framework/src/Volo.Abp.AspNetCore.Abstractions/Volo/Abp/AspNetCore/Authentication/AbpAspNetCoreTokenUnauthorizedErrorInfo.cs b/framework/src/Volo.Abp.AspNetCore.Abstractions/Volo/Abp/AspNetCore/Authentication/AbpAspNetCoreTokenUnauthorizedErrorInfo.cs new file mode 100644 index 0000000000..2702f4f19f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Abstractions/Volo/Abp/AspNetCore/Authentication/AbpAspNetCoreTokenUnauthorizedErrorInfo.cs @@ -0,0 +1,12 @@ +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.AspNetCore.Authentication; + +public class AbpAspNetCoreTokenUnauthorizedErrorInfo : IScopedDependency +{ + public string? Error { get; set; } + + public string? ErrorDescription { get; set; } + + public string? ErrorUri { get; set; } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/Microsoft/Extensions/DependencyInjection/AbpJwtBearerExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/Microsoft/Extensions/DependencyInjection/AbpJwtBearerExtensions.cs index 5f48cc92d5..8973b68a1f 100644 --- a/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/Microsoft/Extensions/DependencyInjection/AbpJwtBearerExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/Microsoft/Extensions/DependencyInjection/AbpJwtBearerExtensions.cs @@ -1,6 +1,7 @@ ï»żusing System; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authentication.JwtBearer; +using Volo.Abp.AspNetCore.Authentication; using Volo.Abp.Security.Claims; namespace Microsoft.Extensions.DependencyInjection; @@ -31,6 +32,33 @@ public static class AbpJwtBearerExtensions return builder.AddJwtBearer(authenticationScheme, displayName, options => { configureOptions?.Invoke(options); + + options.Events ??= new JwtBearerEvents(); + var previousOnChallenge = options.Events.OnChallenge; + options.Events.OnChallenge = async eventContext => + { + await previousOnChallenge(eventContext); + + if (eventContext.Handled || + !string.IsNullOrEmpty(eventContext.Error) || + !string.IsNullOrEmpty(eventContext.ErrorDescription) || + !string.IsNullOrEmpty(eventContext.ErrorUri)) + { + return; + } + + var tokenUnauthorizedErrorInfo = eventContext.HttpContext.RequestServices.GetRequiredService(); + if (string.IsNullOrEmpty(tokenUnauthorizedErrorInfo.Error) && + string.IsNullOrEmpty(tokenUnauthorizedErrorInfo.ErrorDescription) && + string.IsNullOrEmpty(tokenUnauthorizedErrorInfo.ErrorUri)) + { + return; + } + + eventContext.Error = tokenUnauthorizedErrorInfo.Error; + eventContext.ErrorDescription = tokenUnauthorizedErrorInfo.ErrorDescription; + eventContext.ErrorUri = tokenUnauthorizedErrorInfo.ErrorUri; + }; }); } } diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/Volo.Abp.AspNetCore.Authentication.JwtBearer.csproj b/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/Volo.Abp.AspNetCore.Authentication.JwtBearer.csproj index 4d7b852b9c..839053bc90 100644 --- a/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/Volo.Abp.AspNetCore.Authentication.JwtBearer.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/Volo.Abp.AspNetCore.Authentication.JwtBearer.csproj @@ -19,6 +19,7 @@ + diff --git a/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/Volo/Abp/AspNetCore/Authentication/JwtBearer/AbpAspNetCoreAuthenticationJwtBearerModule.cs b/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/Volo/Abp/AspNetCore/Authentication/JwtBearer/AbpAspNetCoreAuthenticationJwtBearerModule.cs index 89d957fe57..c0b9122b7d 100644 --- a/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/Volo/Abp/AspNetCore/Authentication/JwtBearer/AbpAspNetCoreAuthenticationJwtBearerModule.cs +++ b/framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/Volo/Abp/AspNetCore/Authentication/JwtBearer/AbpAspNetCoreAuthenticationJwtBearerModule.cs @@ -7,7 +7,7 @@ using Volo.Abp.Security.Claims; namespace Volo.Abp.AspNetCore.Authentication.JwtBearer; -[DependsOn(typeof(AbpSecurityModule), typeof(AbpCachingModule))] +[DependsOn(typeof(AbpSecurityModule), typeof(AbpCachingModule), typeof(AbpAspNetCoreAbstractionsModule))] public class AbpAspNetCoreAuthenticationJwtBearerModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) @@ -21,5 +21,6 @@ public class AbpAspNetCoreAuthenticationJwtBearerModule : AbpModule context.Services.AddTransient(); context.Services.AddTransient(); } + } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Card/AbpCardBodyTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Card/AbpCardBodyTagHelperService.cs index e50d0a791a..b8462f4b5b 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Card/AbpCardBodyTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Card/AbpCardBodyTagHelperService.cs @@ -32,7 +32,7 @@ public class AbpCardBodyTagHelperService : AbpTagHelperService var small = new TagBuilder("small"); small.Attributes.Add("id", idAttr?.Value?.ToString() + "InfoText"); - small.AddCssClass("form-text text-muted"); + small.AddCssClass("form-text"); small.InnerHtml.Append(localizedText); return small.ToHtmlString(); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/AbpAspNetCoreMvcUiBundlingModule.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/AbpAspNetCoreMvcUiBundlingModule.cs index bdd4cb2a27..f0f7f94439 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/AbpAspNetCoreMvcUiBundlingModule.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/AbpAspNetCoreMvcUiBundlingModule.cs @@ -1,4 +1,6 @@ -ï»żusing Volo.Abp.AspNetCore.Mvc.UI.Bootstrap; +ï»żusing Volo.Abp.AspNetCore.Mvc.Libs; +using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap; +using Volo.Abp.Data; using Volo.Abp.Minify; using Volo.Abp.Modularity; @@ -11,5 +13,14 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling; )] public class AbpAspNetCoreMvcUiBundlingModule : AbpModule { - + public override void ConfigureServices(ServiceConfigurationContext context) + { + if (!context.Services.IsDataMigrationEnvironment()) + { + Configure(options => + { + options.CheckLibs = true; + }); + } + } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/sv.json b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/sv.json new file mode 100644 index 0000000000..66737dc8e1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/sv.json @@ -0,0 +1,13 @@ +{ + "culture": "sv", + "texts": { + "GivenTenantIsNotExist": "Given hyresgĂ€st existerar inte: {0}", + "GivenTenantIsNotAvailable": "Angiven hyresgĂ€st Ă€r inte tillgĂ€nglig: {0}", + "Tenant": "HyresgĂ€st", + "Switch": "VĂ€xla", + "Name": "Namn", + "SwitchTenantHint": "LĂ€mna namnfĂ€ltet tomt för att vĂ€xla till vĂ€rdsidan.", + "SwitchTenant": "Byta hyresgĂ€st", + "NotSelected": "Ej vald" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/DatatablesNet/DatatablesNetScriptContributor.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/DatatablesNet/DatatablesNetScriptContributor.cs index daea15328f..2ad3bb2bdb 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/DatatablesNet/DatatablesNetScriptContributor.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/DatatablesNet/DatatablesNetScriptContributor.cs @@ -10,6 +10,14 @@ public class DatatablesNetScriptContributor : BundleContributor { public override void ConfigureBundle(BundleConfigurationContext context) { - context.Files.AddIfNotContains("/libs/datatables.net/js/jquery.dataTables.js"); + if (context.FileProvider.GetFileInfo("/libs/datatables.net/js/dataTables.min.js").Exists) + { + context.Files.AddIfNotContains("/libs/datatables.net/js/dataTables.min.js"); + } + else + { + //TODO: Compatible code, Remove it after 8.3 rc1. + context.Files.AddIfNotContains("/libs/datatables.net/js/jquery.dataTables.js"); + } } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-extensions.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-extensions.js index b4000d6cbc..e43c7caad9 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-extensions.js +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-extensions.js @@ -90,7 +90,7 @@ var abp = abp || {}; return ""; } - var $button = $(''); + var $button = $(''); if (firstItem.displayNameHtml) { $button.html(abp.utils.isFunction(firstItem.text) ? firstItem.text(record, tableInstance) : firstItem.text); @@ -240,10 +240,17 @@ var abp = abp || {}; if (tableInstance.aoColumns) { columns = tableInstance.aoColumns; - } else { + } else if (abp.utils.isFunction(tableInstance.fnSettings)) { columns = tableInstance.fnSettings().aoColumns; } + if (!columns && abp.utils.isFunction(tableInstance.api)) { + var settings = tableInstance.api().settings(); + if (settings.length === 1 && settings[0].aoColumns) { + columns = settings[0].aoColumns; + } + } + if (!columns) { return; } @@ -271,8 +278,9 @@ var abp = abp || {}; } }; - var _existingApiRenderRowActionsFunction = $.fn.dataTableExt.oApi.renderRowActions; - $.fn.dataTableExt.oApi.renderRowActions = + if ($.fn.dataTableExt.oApi) { + var _existingApiRenderRowActionsFunction = $.fn.dataTableExt.oApi.renderRowActions; + $.fn.dataTableExt.oApi.renderRowActions = function (tableInstance, nRow, aData, iDisplayIndex, iDisplayIndexFull) { if (_existingApiRenderRowActionsFunction) { _existingApiRenderRowActionsFunction(tableInstance, nRow, aData, iDisplayIndex, iDisplayIndexFull); @@ -280,7 +288,8 @@ var abp = abp || {}; renderRowActions(tableInstance, nRow, aData, iDisplayIndex, iDisplayIndexFull); }; - + } + if (!$.fn.dataTable) { return; } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs index 7b68fca32d..379523b659 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcModule.cs @@ -32,6 +32,7 @@ using Volo.Abp.AspNetCore.Mvc.DataAnnotations; using Volo.Abp.AspNetCore.Mvc.DependencyInjection; using Volo.Abp.AspNetCore.Mvc.Infrastructure; using Volo.Abp.AspNetCore.Mvc.Json; +using Volo.Abp.AspNetCore.Mvc.Libs; using Volo.Abp.AspNetCore.Mvc.Localization; using Volo.Abp.AspNetCore.VirtualFileSystem; using Volo.Abp.DependencyInjection; @@ -231,6 +232,7 @@ public class AbpAspNetCoreMvcModule : AbpModule public override void OnApplicationInitialization(ApplicationInitializationContext context) { AddApplicationParts(context); + CheckLibs(context); } private static void AddApplicationParts(ApplicationInitializationContext context) @@ -277,4 +279,9 @@ public class AbpAspNetCoreMvcModule : AbpModule partManager.ApplicationParts.AddIfNotContains(moduleAssembly); } } + + private static void CheckLibs(ApplicationInitializationContext context) + { + context.ServiceProvider.GetRequiredService().CheckLibs(context); + } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs index d2abae0902..3b60e74d78 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionFilter.cs @@ -75,10 +75,18 @@ public class AbpExceptionFilter : IAsyncExceptionFilter, IAbpFilter, ITransientD } else { - context.HttpContext.Response.Headers.Add(AbpHttpConsts.AbpErrorFormat, "true"); - context.HttpContext.Response.StatusCode = (int)context - .GetRequiredService() - .GetStatusCode(context.HttpContext, context.Exception); + if (!context.HttpContext.Response.HasStarted) + { + context.HttpContext.Response.Headers.Add(AbpHttpConsts.AbpErrorFormat, "true"); + context.HttpContext.Response.StatusCode = (int)context + .GetRequiredService() + .GetStatusCode(context.HttpContext, context.Exception); + } + else + { + var logger = context.GetService>(NullLogger.Instance)!; + logger.LogWarning("HTTP response has already started, cannot set headers and status code!"); + } context.Result = new ObjectResult(new RemoteServiceErrorResponse(remoteServiceErrorInfo)); } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionPageFilter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionPageFilter.cs index f404f52e5d..56814718b6 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionPageFilter.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ExceptionHandling/AbpExceptionPageFilter.cs @@ -103,10 +103,17 @@ public class AbpExceptionPageFilter : IAsyncPageFilter, IAbpFilter, ITransientDe } else { - context.HttpContext.Response.Headers.Add(AbpHttpConsts.AbpErrorFormat, "true"); - context.HttpContext.Response.StatusCode = (int)context - .GetRequiredService() - .GetStatusCode(context.HttpContext, context.Exception!); + if (!context.HttpContext.Response.HasStarted) + { + context.HttpContext.Response.Headers.Add(AbpHttpConsts.AbpErrorFormat, "true"); + context.HttpContext.Response.StatusCode = (int)context + .GetRequiredService() + .GetStatusCode(context.HttpContext, context.Exception!); + } + else + { + logger.LogWarning("HTTP response has already started, cannot set headers and status code!"); + } context.Result = new ObjectResult(new RemoteServiceErrorResponse(remoteServiceErrorInfo)); } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/AbpMvcLibsOptions.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/AbpMvcLibsOptions.cs new file mode 100644 index 0000000000..d166528a05 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/AbpMvcLibsOptions.cs @@ -0,0 +1,6 @@ +namespace Volo.Abp.AspNetCore.Mvc.Libs; + +public class AbpMvcLibsOptions +{ + public bool CheckLibs { get; set; } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/AbpMvcLibsService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/AbpMvcLibsService.cs new file mode 100644 index 0000000000..b59cbefa45 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/AbpMvcLibsService.cs @@ -0,0 +1,100 @@ +using System; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using Microsoft.Extensions.FileProviders; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.AspNetCore.Mvc.Libs; + +public class AbpMvcLibsService : IAbpMvcLibsService, ITransientDependency +{ + private Task? _checkLibsTask; + + public virtual void CheckLibs(ApplicationInitializationContext context) + { + var options = context.ServiceProvider.GetRequiredService>().Value; + if (options.CheckLibs) + { + var app = context.GetApplicationBuilderOrNull(); + if (app == null) + { + var logger = context.ServiceProvider.GetRequiredService>(); + logger.LogWarning($"The {nameof(IApplicationBuilder)} is not available. The 'CheckLibs' feature is disabled!"); + return; + } + + app.Use(async (httpContext, next) => + { + if (!await CheckLibsAsyncOnceAsync(httpContext)) + { + httpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError; + httpContext.Response.ContentType = "text/html"; + await httpContext.Response.WriteAsync( + "" + + " " + + " Error - The Libs folder is missing!" + + " " + + " " + + "

⚠️ The Libs folder under the wwwroot/libs directory is empty!

" + + "

The Libs folder contains mandatory NPM Packages for running the project.

" + + "

Make sure you run the abp install-libs CLI tool command.

" + + "

For more information, check out the ABP CLI documentation

" + + " " + + "", + Encoding.UTF8 + ); + return; + } + + await next(httpContext); + }); + } + } + + protected virtual Task CheckLibsAsyncOnceAsync(HttpContext httpContext) + { + if (_checkLibsTask == null) + { + _checkLibsTask = CheckLibsAsync(httpContext); + } + + return _checkLibsTask; + } + + protected virtual Task CheckLibsAsync(HttpContext httpContext) + { + var logger = httpContext.RequestServices.GetRequiredService>(); + try + { + var webHostEnvironment = httpContext.RequestServices.GetRequiredService(); + if (webHostEnvironment.WebRootPath.IsNullOrWhiteSpace()) + { + logger.LogWarning("The 'WebRootPath' is not set! The 'CheckLibs' feature is disabled!"); + return Task.FromResult(true); + } + + var fileProvider = new PhysicalFileProvider(webHostEnvironment.WebRootPath); + var libsFolder = fileProvider.GetDirectoryContents("/libs"); + if (!libsFolder.Exists || !libsFolder.Any()) + { + logger.LogError("The 'wwwroot/libs' folder does not exist or empty!"); + return Task.FromResult(false); + } + } + catch (Exception e) + { + // In case of any exception, log it and return true to prevent crashing the application. + logger.LogError(e, "An error occurred while checking the libs folder!"); + } + + return Task.FromResult(true); + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/IAbpMvcLibsService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/IAbpMvcLibsService.cs new file mode 100644 index 0000000000..98a88184e8 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Libs/IAbpMvcLibsService.cs @@ -0,0 +1,6 @@ +namespace Volo.Abp.AspNetCore.Mvc.Libs; + +public interface IAbpMvcLibsService +{ + void CheckLibs(ApplicationInitializationContext context); +} diff --git a/framework/src/Volo.Abp.AspNetCore.SignalR/Volo/Abp/AspNetCore/SignalR/Authentication/AbpAuthenticationHubFilter.cs b/framework/src/Volo.Abp.AspNetCore.SignalR/Volo/Abp/AspNetCore/SignalR/Authentication/AbpAuthenticationHubFilter.cs index 7f77992ce3..e7e6525093 100644 --- a/framework/src/Volo.Abp.AspNetCore.SignalR/Volo/Abp/AspNetCore/SignalR/Authentication/AbpAuthenticationHubFilter.cs +++ b/framework/src/Volo.Abp.AspNetCore.SignalR/Volo/Abp/AspNetCore/SignalR/Authentication/AbpAuthenticationHubFilter.cs @@ -34,17 +34,6 @@ public class AbpAuthenticationHubFilter : IHubFilter } } - public virtual async Task OnDisconnectedAsync(HubLifetimeContext context, Exception? exception, Func next) - { - var currentPrincipalAccessor = context.ServiceProvider.GetRequiredService(); - var claimsPrincipal = context.Context.User; - await HandleDynamicClaimsPrincipalAsync(claimsPrincipal, context.ServiceProvider, context.Context, true); - using (currentPrincipalAccessor.Change(claimsPrincipal!)) - { - await next(context, exception); - } - } - protected virtual async Task HandleDynamicClaimsPrincipalAsync(ClaimsPrincipal? claimsPrincipal, IServiceProvider serviceProvider, HubCallerContext hubCallerContext, bool skipCheckDynamicClaimsInterval) { if (claimsPrincipal?.Identity != null && diff --git a/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/AbpApplicationBuilderExtensions.cs b/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/AbpApplicationBuilderExtensions.cs index 593992aed4..730fe98533 100644 --- a/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/AbpApplicationBuilderExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Builder/AbpApplicationBuilderExtensions.cs @@ -102,6 +102,7 @@ public static class AbpApplicationBuilderExtensions return app.UseMiddleware(); } + [Obsolete("Replace with AbpClaimsTransformation")] public static IApplicationBuilder UseAbpClaimsMap(this IApplicationBuilder app) { return app.UseMiddleware(); diff --git a/framework/src/Volo.Abp.AspNetCore/Microsoft/Extensions/DependencyInjection/AbpAspNetCoreServiceCollectionExtensions.cs b/framework/src/Volo.Abp.AspNetCore/Microsoft/Extensions/DependencyInjection/AbpAspNetCoreServiceCollectionExtensions.cs index bda87a4e32..c6f8dd7ddc 100644 --- a/framework/src/Volo.Abp.AspNetCore/Microsoft/Extensions/DependencyInjection/AbpAspNetCoreServiceCollectionExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore/Microsoft/Extensions/DependencyInjection/AbpAspNetCoreServiceCollectionExtensions.cs @@ -1,6 +1,7 @@ -ï»żusing System.Linq; +ï»żusing Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; +using Volo.Abp.AspNetCore.Security.Claims; namespace Microsoft.Extensions.DependencyInjection; @@ -20,4 +21,9 @@ public static class AbpAspNetCoreServiceCollectionExtensions return hostingEnvironment; } + + public static IServiceCollection TransformAbpClaims(this IServiceCollection services) + { + return services.AddTransient(); + } } diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/ApplicationInitializationContextExtensions.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/ApplicationInitializationContextExtensions.cs index 045b293489..1f6e3c17bf 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/ApplicationInitializationContextExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/ApplicationInitializationContextExtensions.cs @@ -12,7 +12,14 @@ public static class ApplicationInitializationContextExtensions { public static IApplicationBuilder GetApplicationBuilder(this ApplicationInitializationContext context) { - return context.ServiceProvider.GetRequiredService>().Value!; + var applicationBuilder = context.ServiceProvider.GetRequiredService>().Value; + Check.NotNull(applicationBuilder, nameof(applicationBuilder)); + return applicationBuilder; + } + + public static IApplicationBuilder? GetApplicationBuilderOrNull(this ApplicationInitializationContext context) + { + return context.ServiceProvider.GetRequiredService>().Value; } public static IWebHostEnvironment GetEnvironment(this ApplicationInitializationContext context) diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Security/Claims/AbpClaimsMapMiddleware.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Security/Claims/AbpClaimsMapMiddleware.cs index bb2bedf901..2104edab0a 100644 --- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Security/Claims/AbpClaimsMapMiddleware.cs +++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Security/Claims/AbpClaimsMapMiddleware.cs @@ -1,4 +1,5 @@ -ï»żusing System.Linq; +ï»żusing System; +using System.Linq; using System.Security.Claims; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; @@ -10,6 +11,7 @@ using Volo.Abp.Security.Claims; namespace Volo.Abp.AspNetCore.Security.Claims; +[Obsolete("Replace with AbpClaimsTransformation")] public class AbpClaimsMapMiddleware : AbpMiddlewareBase, ITransientDependency { public async override Task InvokeAsync(HttpContext context, RequestDelegate next) diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Security/Claims/AbpClaimsTransformation.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Security/Claims/AbpClaimsTransformation.cs new file mode 100644 index 0000000000..17e8f0d599 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/Security/Claims/AbpClaimsTransformation.cs @@ -0,0 +1,35 @@ +using System.Linq; +using System.Security.Claims; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authentication; +using Microsoft.Extensions.Options; + +namespace Volo.Abp.AspNetCore.Security.Claims; + +public class AbpClaimsTransformation : IClaimsTransformation +{ + protected IOptions AbpClaimsMapOptions { get; } + + public AbpClaimsTransformation(IOptions abpClaimsMapOptions) + { + AbpClaimsMapOptions = abpClaimsMapOptions; + } + + public virtual Task TransformAsync(ClaimsPrincipal principal) + { + var mapClaims = principal.Claims.Where(claim => AbpClaimsMapOptions.Value.Maps.Keys.Contains(claim.Type)); + + principal.AddIdentity(new ClaimsIdentity(mapClaims.Select( + claim => new Claim( + AbpClaimsMapOptions.Value.Maps[claim.Type](), + claim.Value, + claim.ValueType, + claim.Issuer + ) + ) + ) + ); + + return Task.FromResult(principal); + } +} diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/sv.json b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/sv.json new file mode 100644 index 0000000000..eabdca7cd1 --- /dev/null +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/sv.json @@ -0,0 +1,10 @@ +{ + "culture": "sv", + "texts": { + "Volo.Authorization:010001": "Auktorisering misslyckades! Angiven policy har inte beviljats.", + "Volo.Authorization:010002": "Auktorisering misslyckades! Angiven policy har inte beviljat: {Policynamn}", + "Volo.Authorization:010003": "Auktorisering misslyckades! Given policy har inte beviljats för given resurs: {Resursnamn}", + "Volo.Authorization:010004": "Auktorisering misslyckades! Givet krav har inte beviljats för given resurs: {Resursnamn}", + "Volo.Authorization:010005": "Auktorisering misslyckades! Givet krav har inte beviljats för given resurs: {Resursnamn}" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Autofac/Autofac/Builder/AbpRegistrationBuilderExtensions.cs b/framework/src/Volo.Abp.Autofac/Autofac/Builder/AbpRegistrationBuilderExtensions.cs index 53216b03b9..2ab98adbb4 100644 --- a/framework/src/Volo.Abp.Autofac/Autofac/Builder/AbpRegistrationBuilderExtensions.cs +++ b/framework/src/Volo.Abp.Autofac/Autofac/Builder/AbpRegistrationBuilderExtensions.cs @@ -50,14 +50,18 @@ public static class AbpRegistrationBuilderExtensions ServiceDescriptor serviceDescriptor) where TActivatorData : ReflectionActivatorData { - registrationBuilder.OnActivated(context => + var actions = activatedActionList.GetActions(serviceDescriptor); + if (actions.Any()) { - var serviceActivatedContext = new OnServiceActivatedContext(context.Instance!); - foreach (var action in activatedActionList.GetActions(serviceDescriptor)) + registrationBuilder.OnActivated(context => { - action.Invoke(serviceActivatedContext); - } - }); + var serviceActivatedContext = new OnServiceActivatedContext(context.Instance!); + foreach (var action in actions) + { + action.Invoke(serviceActivatedContext); + } + }); + } return registrationBuilder; } diff --git a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/BackgroundWorkerBase.cs b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/BackgroundWorkerBase.cs index 91bc360f72..0d70ae6aa9 100644 --- a/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/BackgroundWorkerBase.cs +++ b/framework/src/Volo.Abp.BackgroundWorkers/Volo/Abp/BackgroundWorkers/BackgroundWorkerBase.cs @@ -22,8 +22,9 @@ public abstract class BackgroundWorkerBase : IBackgroundWorker protected ILogger Logger => LazyServiceProvider.LazyGetService(provider => LoggerFactory?.CreateLogger(GetType().FullName!) ?? NullLogger.Instance); - protected CancellationTokenSource StoppingTokenSource { get; } - protected CancellationToken StoppingToken { get; } + protected CancellationTokenSource StoppingTokenSource { get; set; } + + protected CancellationToken StoppingToken { get; set; } public BackgroundWorkerBase() { diff --git a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs index a719c62c2a..0e99a94460 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs @@ -480,7 +480,12 @@ public abstract class AbpCrudPageBase< await GetEntitiesAsync(); await InvokeAsync(CreateModal!.Hide); - await Notify.Success(L["SavedSuccessfully"]); + await Notify.Success(GetCreateMessage()); + } + + protected virtual string GetCreateMessage() + { + return UiLocalizer["CreatedSuccessfully"]; } protected virtual async Task UpdateEntityAsync() @@ -519,7 +524,12 @@ public abstract class AbpCrudPageBase< await GetEntitiesAsync(); await InvokeAsync(EditModal!.Hide); - await Notify.Success(L["SavedSuccessfully"]); + await Notify.Success(GetUpdateMessage()); + } + + protected virtual string GetUpdateMessage() + { + return UiLocalizer["SavedSuccessfully"]; } protected virtual async Task DeleteEntityAsync(TListViewModel entity) @@ -546,7 +556,12 @@ public abstract class AbpCrudPageBase< { await GetEntitiesAsync(); await InvokeAsync(StateHasChanged); - await Notify.Success(L["DeletedSuccessfully"]); + await Notify.Success(GetDeleteMessage()); + } + + protected virtual string GetDeleteMessage() + { + return UiLocalizer["DeletedSuccessfully"]; } protected virtual string GetDeleteConfirmationMessage(TListViewModel entity) diff --git a/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiObjectExtensionPropertyInfoExtensions.cs b/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiObjectExtensionPropertyInfoExtensions.cs index a3cd7372a6..2773b88bed 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiObjectExtensionPropertyInfoExtensions.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiObjectExtensionPropertyInfoExtensions.cs @@ -46,6 +46,12 @@ public static class BlazoriseUiObjectExtensionPropertyInfoExtensions public static string? GetDateEditInputFormatOrNull(this IBasicObjectExtensionPropertyInfo property) { + var dataFormatString = property.GetDataFormatStringOrNull(); + if (dataFormatString != null) + { + return dataFormatString; + } + if (property.IsDate()) { return "{0:yyyy-MM-dd}"; @@ -59,6 +65,14 @@ public static class BlazoriseUiObjectExtensionPropertyInfoExtensions return null; } + public static string? GetDataFormatStringOrNull(this IBasicObjectExtensionPropertyInfo property) + { + return property + .Attributes + .OfType() + .FirstOrDefault()?.DataFormatString; + } + public static string? GetTextInputValueOrNull(this IBasicObjectExtensionPropertyInfo property, object? value) { if (value == null) diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/AbpExtensibleDataGrid.razor b/framework/src/Volo.Abp.BlazoriseUI/Components/AbpExtensibleDataGrid.razor index 96ee31a9f1..ae87961e21 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Components/AbpExtensibleDataGrid.razor +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/AbpExtensibleDataGrid.razor @@ -45,9 +45,9 @@ @@ -55,10 +55,10 @@ else { @@ -76,7 +76,7 @@ { - @RenderCustomTableColumnComponent(column.Component, context) + @RenderCustomTableColumnComponent(column.Component, context!) } @@ -84,7 +84,7 @@ { - @RenderCustomTableColumnComponent(column.Component, context) + @RenderCustomTableColumnComponent(column.Component, context!) } diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor index 844dea4950..5e686afbda 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/EntityActions.razor @@ -2,7 +2,7 @@ @if ( Type == ActionType.Dropdown ) { - + @if ( HasPrimaryAction ) {