Browse Source

Merge branch 'dev' into pr/17998

pull/17998/head
maliming 3 years ago
parent
commit
6e41c2a962
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 4
      .github/workflows/build-and-test.yml
  2. 46
      Directory.Build.props
  3. 167
      Directory.Packages.props
  4. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalization.csproj
  5. 33
      abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
  6. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/ar.json
  7. 6
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json
  8. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/fi.json
  9. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/hu.json
  10. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/tr.json
  11. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hans.json
  12. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ar.json
  13. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/cs.json
  14. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/de.json
  15. 14
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json
  16. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/es.json
  17. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json
  18. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fr.json
  19. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hi.json
  20. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hu.json
  21. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/is.json
  22. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json
  23. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/nl.json
  24. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pl-PL.json
  25. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pt-BR.json
  26. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ro-RO.json
  27. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ru.json
  28. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sk.json
  29. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sl.json
  30. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json
  31. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/vi.json
  32. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json
  33. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json
  34. 36
      abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json
  35. 3
      abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/en.json
  36. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ar.json
  37. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/cs.json
  38. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/de.json
  39. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en-GB.json
  40. 7
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json
  41. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/es.json
  42. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fi.json
  43. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fr.json
  44. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hi.json
  45. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hu.json
  46. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/is.json
  47. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/it.json
  48. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/nl.json
  49. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pl-PL.json
  50. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pt-BR.json
  51. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ro-RO.json
  52. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ru.json
  53. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sk.json
  54. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sl.json
  55. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json
  56. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/vi.json
  57. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json
  58. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hant.json
  59. 2
      common.props
  60. 4
      configureawait.props
  61. 98
      docs/en/Blog-Posts/2023-09-23-CMS-Kit-Demo/POST.md
  62. BIN
      docs/en/Blog-Posts/2023-09-23-CMS-Kit-Demo/blog-detail.jpg
  63. BIN
      docs/en/Blog-Posts/2023-09-23-CMS-Kit-Demo/blogs.jpg
  64. BIN
      docs/en/Blog-Posts/2023-09-23-CMS-Kit-Demo/cmskit-module-features.png
  65. BIN
      docs/en/Blog-Posts/2023-09-23-CMS-Kit-Demo/homepage.png
  66. BIN
      docs/en/Blog-Posts/2023-09-23-CMS-Kit-Demo/image-gallery-detail.jpg
  67. BIN
      docs/en/Blog-Posts/2023-09-23-CMS-Kit-Demo/image-gallery.jpg
  68. BIN
      docs/en/Blog-Posts/2023-09-23-CMS-Kit-Demo/menu-admin-side.jpg
  69. BIN
      docs/en/Blog-Posts/2023-09-23-CMS-Kit-Demo/pages-admin-side.jpg
  70. BIN
      docs/en/Blog-Posts/2023-09-23-CMS-Kit-Demo/products-abp-commercial.png
  71. 80
      docs/en/Blog-Posts/2023-10-09 v7_4_Release_Stable/POST.md
  72. BIN
      docs/en/Blog-Posts/2023-10-09 v7_4_Release_Stable/abp-community-talk.png
  73. BIN
      docs/en/Blog-Posts/2023-10-09 v7_4_Release_Stable/basta-mainz.png
  74. BIN
      docs/en/Blog-Posts/2023-10-09 v7_4_Release_Stable/cover-image.png
  75. 236
      docs/en/Community-Articles/2023-09-20-Moving-Background-Job-Execution-To-A-Separate-Application/POST.md
  76. BIN
      docs/en/Community-Articles/2023-09-20-Moving-Background-Job-Execution-To-A-Separate-Application/images/1.png
  77. BIN
      docs/en/Community-Articles/2023-09-20-Moving-Background-Job-Execution-To-A-Separate-Application/images/2.png
  78. BIN
      docs/en/Community-Articles/2023-09-20-Moving-Background-Job-Execution-To-A-Separate-Application/images/solution.png
  79. 114
      docs/en/Community-Articles/2023-10-09-How-to-Upload-and-Download-Files-in-the-ABP-Framework-using-Angular/POST.md
  80. 2
      docs/en/Data-Filtering.md
  81. 6
      docs/en/Dependency-Injection.md
  82. 53
      docs/en/Deployment/Configuring-OpenIddict.md
  83. 1
      docs/en/Deployment/Index.md
  84. 34
      docs/en/Deployment/SSL.md
  85. 82
      docs/en/Distributed-Event-Bus.md
  86. 30
      docs/en/Getting-Started-Running-Solution-Single-Layer.md
  87. 36
      docs/en/Getting-Started-Running-Solution.md
  88. 29
      docs/en/Image-Manipulation.md
  89. 5
      docs/en/Migration-Guides/Abp-7_3.md
  90. 27
      docs/en/Migration-Guides/Abp-7_4.md
  91. 77
      docs/en/Migration-Guides/Abp-8_0.md
  92. 9
      docs/en/Modules/Cms-Kit/Index.md
  93. 10
      docs/en/Modules/Cms-Kit/Pages.md
  94. 60
      docs/en/Multi-Tenancy.md
  95. 36
      docs/en/Tutorials/Part-1.md
  96. 32
      docs/en/Tutorials/Todo/Index.md
  97. 32
      docs/en/Tutorials/Todo/Single-Layer/Index.md
  98. 41
      docs/en/UI/Angular/Abp-Window-Service.md
  99. 31
      docs/en/UI/Angular/Multi-Tenancy.md
  100. 24
      docs/en/UI/Angular/Service-Proxies.md

4
.github/workflows/build-and-test.yml

@ -17,6 +17,7 @@ on:
- 'templates/**/*.csproj'
- 'templates/**/*.razor'
- 'Directory.Build.props'
- 'Directory.Packages.props'
pull_request:
paths:
@ -33,6 +34,7 @@ on:
- 'templates/**/*.csproj'
- 'templates/**/*.razor'
- 'Directory.Build.props'
- 'Directory.Packages.props'
types:
- opened
- synchronize
@ -49,7 +51,7 @@ jobs:
- uses: actions/checkout@v2
- uses: actions/setup-dotnet@master
with:
dotnet-version: 7.0.100
dotnet-version: 8.0.100-rc.2.23502.2
- name: chown
run: |

46
Directory.Build.props

@ -1,54 +1,10 @@
<Project>
<PropertyGroup>
<!-- All Microsoft AspNetCore packages -->
<MicrosoftAspNetCorePackageVersion>7.0.10</MicrosoftAspNetCorePackageVersion>
<!-- All Microsoft EntityFrameworkCore packages -->
<MicrosoftEntityFrameworkCorePackageVersion>7.0.10</MicrosoftEntityFrameworkCorePackageVersion>
<!-- All Microsoft packages -->
<MicrosoftPackageVersion>7.0.0</MicrosoftPackageVersion>
<!-- Microsoft.NET.Test.Sdk https://www.nuget.org/packages/Microsoft.NET.Test.Sdk -->
<MicrosoftNETTestSdkPackageVersion>17.2.0</MicrosoftNETTestSdkPackageVersion>
<!-- NSubstitute https://www.nuget.org/packages/NSubstitute -->
<NSubstitutePackageVersion>4.3.0</NSubstitutePackageVersion>
<!-- Shouldly https://www.nuget.org/packages/Shouldly -->
<ShouldlyPackageVersion>4.1.0</ShouldlyPackageVersion>
<!-- xunit https://www.nuget.org/packages/xUnit -->
<xUnitPackageVersion>2.4.1</xUnitPackageVersion>
<!-- xunit.extensibility.execution https://www.nuget.org/packages/xunit.extensibility.execution -->
<xUnitExtensibilityExecutionPackageVersion>2.4.1</xUnitExtensibilityExecutionPackageVersion>
<!-- xunit.runner.visualstudio https://www.nuget.org/packages/xunit.runner.visualstudio -->
<xUnitRunnerVisualstudioPackageVersion>2.4.5</xUnitRunnerVisualstudioPackageVersion>
<!-- Mongo2Go https://www.nuget.org/packages/Mongo2Go -->
<Mongo2GoPackageVersion>3.1.3</Mongo2GoPackageVersion>
<!-- Microsoft.CodeAnalysis https://www.nuget.org/packages/Microsoft.CodeAnalysis -->
<MicrosoftCodeAnalysisPackageVersion>4.2.0</MicrosoftCodeAnalysisPackageVersion>
<!-- NUglify https://www.nuget.org/packages/NUglify -->
<NUglifyPackageVersion>1.20.0</NUglifyPackageVersion>
<!-- Polly https://www.nuget.org/packages/Polly -->
<PollyPackageVersion>7.2.3</PollyPackageVersion>
<IsTestProject Condition="$(MSBuildProjectFullPath.Contains('test')) and ($(MSBuildProjectName.EndsWith('.Tests')) or $(MSBuildProjectName.EndsWith('.TestBase')))">true</IsTestProject>
<!-- OpenIddict https://www.nuget.org/packages/OpenIddict.Core -->
<OpenIddictPackageVersion>4.8.0</OpenIddictPackageVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Condition="'$(IsTestProject)' == 'true'" Include="coverlet.collector" Version="3.1.2">
<PackageReference Condition="'$(IsTestProject)' == 'true'" Include="coverlet.collector">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>

167
Directory.Packages.props

@ -0,0 +1,167 @@
<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="AlibabaCloud.SDK.Dysmsapi20170525" Version="2.0.24" />
<PackageVersion Include="aliyun-net-sdk-sts" Version="3.1.1" />
<PackageVersion Include="Aliyun.OSS.SDK.NetCore" Version="2.13.0" />
<PackageVersion Include="AsyncKeyedLock" Version="6.2.2" />
<PackageVersion Include="Autofac" Version="7.1.0" />
<PackageVersion Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
<PackageVersion Include="Autofac.Extras.DynamicProxy" Version="7.1.0" />
<PackageVersion Include="AutoMapper" Version="12.0.1" />
<PackageVersion Include="AWSSDK.S3" Version="3.7.205.9" />
<PackageVersion Include="AWSSDK.SecurityToken" Version="3.7.202.4" />
<PackageVersion Include="Azure.Messaging.ServiceBus" Version="7.8.1" />
<PackageVersion Include="Azure.Storage.Blobs" Version="12.18.0" />
<PackageVersion Include="Blazorise" Version="1.3.1" />
<PackageVersion Include="Blazorise.Components" Version="1.3.1" />
<PackageVersion Include="Blazorise.DataGrid" Version="1.3.1" />
<PackageVersion Include="Blazorise.Snackbar" Version="1.3.1" />
<PackageVersion Include="Castle.Core" Version="5.1.1" />
<PackageVersion Include="Castle.Core.AsyncInterceptor" Version="2.1.0" />
<PackageVersion Include="CommonMark.NET" Version="0.15.1" />
<PackageVersion Include="Confluent.Kafka" Version="2.2.0" />
<PackageVersion Include="Dapper" Version="2.1.4" />
<PackageVersion Include="Dapr.AspNetCore" Version="1.9.0" />
<PackageVersion Include="Dapr.Client" Version="1.11.0" />
<PackageVersion Include="Devart.Data.Oracle.EFCore" Version="10.1.134.7" />
<PackageVersion Include="DistributedLock.Core" Version="1.0.5" />
<PackageVersion Include="DistributedLock.Redis" Version="1.0.2" />
<PackageVersion Include="EphemeralMongo.Core" Version="1.1.3" />
<PackageVersion Include="EphemeralMongo6.runtime.linux-x64" Version="1.1.3" />
<PackageVersion Include="EphemeralMongo6.runtime.osx-x64" Version="1.1.3" />
<PackageVersion Include="EphemeralMongo6.runtime.win-x64" Version="1.1.3" />
<PackageVersion Include="FluentValidation" Version="11.7.1" />
<PackageVersion Include="Hangfire.AspNetCore" Version="1.8.5" />
<PackageVersion Include="Hangfire.SqlServer" Version="1.8.5" />
<PackageVersion Include="HtmlSanitizer" Version="8.0.723" />
<PackageVersion Include="IdentityModel" Version="6.2.0" />
<PackageVersion Include="IdentityServer4" Version="4.1.2" />
<PackageVersion Include="IdentityServer4.AspNetIdentity" Version="4.1.2" />
<PackageVersion Include="JetBrains.Annotations" Version="2023.2.0" />
<PackageVersion Include="LdapForNet" Version="2.7.15" />
<PackageVersion Include="LibGit2Sharp" Version="0.27.2" />
<PackageVersion Include="Magick.NET-Q16-AnyCPU" Version="13.3.0" />
<PackageVersion Include="MailKit" Version="4.2.0" />
<PackageVersion Include="Markdig.Signed" Version="0.33.0" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.AspNetCore.Authorization" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.AspNetCore.Components" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.AspNetCore.Components.Authorization" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.AspNetCore.Components.Web" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Authentication" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.AspNetCore.Hosting.Abstractions" Version="2.2.0" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Versioning" Version="5.1.0" />
<PackageVersion Include="Microsoft.AspNetCore.Razor.Language" Version="6.0.22" />
<PackageVersion Include="Microsoft.AspNetCore.TestHost" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.AspNetCore.WebUtilities" Version="2.2.0" />
<PackageVersion Include="Microsoft.Bcl.AsyncInterfaces" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.5.0" />
<PackageVersion Include="Microsoft.CSharp" Version="4.7.0" />
<PackageVersion Include="Microsoft.Data.Sqlite" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.InMemory" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Proxies" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.Configuration.CommandLine" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.Configuration.UserSecrets" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.FileProviders.Composite" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.FileProviders.Embedded" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.FileProviders.Physical" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.FileSystemGlobbing" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.Http" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.Identity.Core" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.Localization" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.Options" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.7.2" />
<PackageVersion Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="8.0.0-rc.2" />
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="1.1.1" />
<PackageVersion Include="Minio" Version="6.0.0" />
<PackageVersion Include="MongoDB.Driver" Version="2.21.0" />
<PackageVersion Include="NEST" Version="7.17.5" />
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
<PackageVersion Include="Nito.AsyncEx.Context" Version="5.1.2" />
<PackageVersion Include="Nito.AsyncEx.Coordination" Version="5.1.2" />
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.0-rc.2" />
<PackageVersion Include="NSubstitute" Version="5.1.0" />
<PackageVersion Include="NuGet.Versioning" Version="6.7.0" />
<PackageVersion Include="NUglify" Version="1.21.0" />
<PackageVersion Include="Nullable" Version="1.3.1" />
<PackageVersion Include="Octokit" Version="8.0.1" />
<PackageVersion Include="OpenIddict.Abstractions" Version="4.8.0" />
<PackageVersion Include="OpenIddict.Core" Version="4.8.0" />
<PackageVersion Include="OpenIddict.Server.AspNetCore" Version="4.8.0" />
<PackageVersion Include="OpenIddict.Validation.AspNetCore" Version="4.8.0" />
<PackageVersion Include="OpenIddict.Validation.ServerIntegration" Version="4.8.0" />
<PackageVersion Include="Oracle.EntityFrameworkCore" Version="7.21.8" />
<PackageVersion Include="Polly" Version="8.0.0" />
<PackageVersion Include="Polly.Extensions.Http" Version="3.0.0" />
<PackageVersion Include="Pomelo.EntityFrameworkCore.MySql" Version="8.0.0-beta.1" />
<PackageVersion Include="Quartz" Version="3.7.0" />
<PackageVersion Include="Quartz.Extensions.DependencyInjection" Version="3.7.0" />
<PackageVersion Include="Quartz.Plugins.TimeZoneConverter" Version="3.7.0" />
<PackageVersion Include="Quartz.Serialization.Json" Version="3.3.3" />
<PackageVersion Include="RabbitMQ.Client" Version="6.5.0" />
<PackageVersion Include="Rebus" Version="7.2.1" />
<PackageVersion Include="Rebus.ServiceProvider" Version="9.1.0" />
<PackageVersion Include="Scriban" Version="5.9.0" />
<PackageVersion Include="Serilog" Version="2.11.0" />
<PackageVersion Include="Serilog.AspNetCore" Version="7.0.0" />
<PackageVersion Include="Serilog.Extensions.Hosting" Version="7.0.0" />
<PackageVersion Include="Serilog.Extensions.Logging" Version="7.0.0" />
<PackageVersion Include="Serilog.Sinks.Async" Version="1.5.0" />
<PackageVersion Include="Serilog.Sinks.Console" Version="4.1.0" />
<PackageVersion Include="Serilog.Sinks.File" Version="5.0.0" />
<PackageVersion Include="SharpZipLib" Version="1.4.2" />
<PackageVersion Include="Shouldly" Version="4.0.3" />
<PackageVersion Include="SixLabors.ImageSharp" Version="2.1.6" />
<PackageVersion Include="SixLabors.ImageSharp.Drawing" Version="1.0.0" />
<PackageVersion Include="Slugify.Core" Version="4.0.1" />
<PackageVersion Include="Spectre.Console" Version="0.47.0" />
<PackageVersion Include="StackExchange.Redis" Version="2.6.122" />
<PackageVersion Include="Swashbuckle.AspNetCore" Version="6.5.0" />
<PackageVersion Include="System.Collections.Immutable" Version="8.0.0-rc.2" />
<PackageVersion Include="System.ComponentModel.Annotations" Version="5.0.0" />
<PackageVersion Include="System.Linq.Async" Version="6.0.1" />
<PackageVersion Include="System.Linq.Dynamic.Core" Version="1.3.5" />
<PackageVersion Include="System.Linq.Queryable" Version="4.3.0" />
<PackageVersion Include="System.Runtime.Loader" Version="4.3.0" />
<PackageVersion Include="System.Security.Permissions" Version="8.0.0-rc.2" />
<PackageVersion Include="System.Security.Principal.Windows" Version="5.0.0" />
<PackageVersion Include="System.Text.Encoding.CodePages" Version="8.0.0-rc.2" />
<PackageVersion Include="System.Text.Encodings.Web" Version="8.0.0-rc.2" />
<PackageVersion Include="System.Text.Json" Version="8.0.0-rc.2" />
<PackageVersion Include="TimeZoneConverter" Version="6.1.0" />
<PackageVersion Include="Unidecode.NET" Version="2.1.0" />
<PackageVersion Include="xunit" Version="2.5.1" />
<PackageVersion Include="xunit.extensibility.execution" Version="2.5.1" />
<PackageVersion Include="xunit.runner.visualstudio" Version="2.5.1" />
<PackageVersion Include="coverlet.collector" Version="3.1.2" />
<PackageVersion Include="ConfigureAwait.Fody" Version="3.3.2"/>
<PackageVersion Include="Fody" Version="6.8.0" />
</ItemGroup>
</Project>

2
abp_io/AbpIoLocalization/AbpIoLocalization/AbpIoLocalization.csproj

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard2.0;netstandard2.1;net7.0</TargetFrameworks>
<TargetFrameworks>netstandard2.0;netstandard2.1;net8.0</TargetFrameworks>
</PropertyGroup>
<ItemGroup>

33
abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json

@ -529,6 +529,37 @@
"Colors": "Colors",
"RemoveColor": "Remove Color",
"MaxColorCountWarning": "You can add up to {0} colors",
"MinColorCountWarning": "You must add at least {0} colors"
"MinColorCountWarning": "You must add at least {0} colors",
"RaffleDeletionConfirmationMessage": "Are you sure you want to delete this raffle?",
"CreateRaffle": "Create Raffle",
"RemoveImage": "Remove Image",
"SuccessfullySaved": "Successfully saved",
"Menu:CommunityTalks": "Community Talks",
"Menu:Conferences": "Conferences",
"Menu:OtherLiveEvents": "Other Live Events",
"Menu:SponsoredConferences": "Sponsored Conferences",
"Logo": "Logo",
"Slug": "Slug",
"CompanyUrl": "Company Url",
"TalkTitle": "Talk Title",
"AbstractTopic": "Abstract Topic",
"Bio": "Bio",
"LinkedIn": "LinkedIn",
"Github": "Github",
"Twitch": "Twitch",
"Youtube": "Youtube",
"Twitter": "Twitter",
"PersonalWebsite": "Personal Website",
"VideoId": "Video Id",
"Order": "Order",
"Image1x1": "Image 1x1",
"Image16x9": "Image 16x9",
"Banner": "Banner",
"Speaker": "Speaker",
"SessionDate": "Session Date",
"AddSession": "Add Session",
"AddSponsor": "Add Sponsor",
"SponsorLogo": "Sponsor Logo",
"RegistrationUrl": "Registration Url"
}
}

4
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/ar.json

@ -145,7 +145,7 @@
"Footer_GithubStarCount": "{0} نجمة على GitHub",
"Footer_NugetDownloadCount": "{0} تنزيلات على NuGet",
"AbpDescription": "ABP هو إطار تطبيق مفتوح المصدر يركز على تطوير تطبيقات الويب القائمة على AspNet Core. لا تكرر نفسك، ركز على كود عملك الخاص.",
"Layout_AbpFramework_MetaTitle": "إطار عمل ABP - إطار عمل تطبيق ويب مفتوح المصدر",
"Layout_AbpFramework_MetaTitle": "إطار عمل ABP | إطار تطبيق ويب مفتوح المصدر لـ ASP.NET Core",
"CommunityTalks_CountdownDays": "أيام",
"CommunityTalks_CountdownHours": "ساعات",
"CommunityTalks_CountdownMinutes": "دقيقة",
@ -185,4 +185,4 @@
"CampaignBetweenDates": "من {0} <br>إلى {1}",
"SaveUpTo": "<span>وفر</span> ماقد يصل الى <strong>${0}K</strong>"
}
}
}

6
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json

@ -149,7 +149,7 @@
"Footer_GithubStarCount": "{0} Stars on GitHub",
"Footer_NugetDownloadCount": "{0} Downloads on NuGet",
"AbpDescription": "ABP is an open source application framework focused on AspNet Core based web application development. Don't repeat yourself, focus on your own business code.",
"Layout_AbpFramework_MetaTitle": "ABP Framework - Open Source Web Application Framework",
"Layout_AbpFramework_MetaTitle": "ABP Framework | Open source web application framework for ASP.NET Core",
"CommunityTalks_CountdownDays": "Days",
"CommunityTalks_CountdownHours": "Hrs",
"CommunityTalks_CountdownMinutes": "Min",
@ -221,6 +221,8 @@
"More": "More",
"WhyABPIOPlatform": "Why ABP.IO Platform?",
"AbpStudio": "ABP Studio",
"ExtraMonths": "{0}<span>EXTRA MONTHS</span>"
"ExtraMonths": "{0}<span>EXTRA MONTHS</span>",
"RSS": "RSS",
"RSSFeed": "RSS Feed"
}
}

2
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/fi.json

@ -148,7 +148,7 @@
"Footer_GithubStarCount": "{0} tähteä GitHubissa",
"Footer_NugetDownloadCount": "{0} Lataukset NuGetissä",
"AbpDescription": "ABP on avoimen lähdekoodin sovelluskehys, joka keskittyy AspNet Core -pohjaiseen verkkosovelluskehitykseen. Älä toista itseäsi, vaan keskity omaan yrityskoodiisi.",
"Layout_AbpFramework_MetaTitle": "ABP Framework - avoimen lähdekoodin verkkosovelluskehys",
"Layout_AbpFramework_MetaTitle": "ABP Framework | Avoimen lähdekoodin verkkosovelluskehys ASP.NET Corelle",
"CommunityTalks_CountdownDays": "Pv",
"CommunityTalks_CountdownHours": "T",
"CommunityTalks_CountdownMinutes": "Min",

2
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/hu.json

@ -146,7 +146,7 @@
"Footer_GithubStarCount": "{0} csillagok a GitHubon",
"Footer_NugetDownloadCount": "{0} Letöltések a NuGeten",
"AbpDescription": "Az ABP egy nyílt forráskódú alkalmazás keretrendszer, amely az AspNet Core alapú webalkalmazások fejlesztésére összpontosít. Ne ismételje magát, összpontosítson saját üzleti kódjára.",
"Layout_AbpFramework_MetaTitle": "ABP Framework Nyílt forráskódú webalkalmazás-keretrendszer",
"Layout_AbpFramework_MetaTitle": "ABP Framework | Nyílt forráskódú webalkalmazás-keretrendszer az ASP.NET Core számára",
"CommunityTalks_CountdownDays": "Napok",
"CommunityTalks_CountdownHours": "óra",
"CommunityTalks_CountdownMinutes": "Perc",

2
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/tr.json

@ -140,7 +140,7 @@
"Footer_GithubStarCount": "Github'da {0} Yıldız",
"Footer_NugetDownloadCount": "{0} NuGet indirme",
"AbpDescription": "ABP, AspNet Core tabanlı web uygulaması geliştirmeye odaklanan açık kaynaklı bir uygulama çerçevesidir. Kendinizi tekrar etmeyin, kendi iş kodunuza odaklanın.",
"Layout_AbpFramework_MetaTitle": "ABP Framework - Açık Kaynak Web Uygulama Çerçevesi",
"Layout_AbpFramework_MetaTitle": "ABP Framework | ASP.NET Core için açık kaynaklı web uygulama çerçevesi",
"CommunityTalks_CountdownDays": "Gün",
"CommunityTalks_CountdownHours": "Saat",
"CommunityTalks_CountdownMinutes": "Dk",

2
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hans.json

@ -148,7 +148,7 @@
"Footer_GithubStarCount": "{0} GitHub 上的星星",
"Footer_NugetDownloadCount": "{0} NuGet 下载量",
"AbpDescription": "ABP 是一个开源应用程序框架,专注于基于 AspNet Core 的 Web 应用程序开发。 Don't repeat yourself,专注于自己的业务代码。",
"Layout_AbpFramework_MetaTitle": "ABP 框架 - 开源 Web 应用程序框架",
"Layout_AbpFramework_MetaTitle": "ABP 框架 | ASP.NET Core 的开源 Web 应用程序框架",
"CommunityTalks_CountdownDays": "天",
"CommunityTalks_CountdownHours": "小时",
"CommunityTalks_CountdownMinutes": "分钟",

4
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ar.json

@ -46,6 +46,8 @@
"IndexPageHeroSection": "<span class=\"first-line\"> نظام أساسي كامل لتطوير الويب </ span> <span class=\"second-line\"> </ span> <span class=\"third-line\"> مدمج <img src=\"{0}\" width = \"110\" class=\"ml-1\" /> framework </span>",
"AbpCommercialShortDescription": "يوفر ABP Commercial وحدات تطبيق مسبقة الإنشاء وأدوات تطوير سريعة للتطبيقات وموضوعات واجهة مستخدم احترافية ودعمًا متميزًا والمزيد.",
"LiveDemo": "عرض حي",
"LiveDemoLead": "<a href=\"{0}\">{1}</a> باستخدام حساب ABP الخاص بك، <a href=\"{2}\">{3}</a>إلى abp.io.<br/>أو املأ النموذج أدناه لإنشاء عرض توضيحي مباشر الآن",
"ThereIsAlreadyAnAccountWithTheGivenEmailAddress": "هناك حساب بالفعل باستخدام عنوان البريد الإلكتروني المحدد: <b>{0}</b><br/> يمكنك تسجيل الدخول باستخدام حسابك للمتابعة.",
"GetLicence": "احصل على ترخيص",
"Application": "تطبيق",
"StartupTemplates": "قوالب بدء تشغيل ABP",
@ -129,12 +131,14 @@
"YourFullName": "اسمك الكامل",
"EmailField": "عنوان البريد الإلكتروني",
"YourEmailAddress": "عنوان بريدك الإلكتروني",
"ValidEmailAddressIsRequired": "مطلوب عنوان بريد إلكتروني صالح.",
"HowMayWeHelpYou": "كيف يمكن أن نساعدك؟",
"SendMessage": "أرسل رسالة",
"Success": "النجاح",
"WeWillReplyYou": "لقد تلقينا رسالتك وسنتواصل معك قريبًا.",
"GoHome": "اذهب للمنزل",
"CreateLiveDemo": "إنشاء عرض حي",
"CreateLiveDemoDescription": "بمجرد إرسال هذا النموذج ، ستتلقى رسالة بريد إلكتروني تحتوي على رابط العرض التوضيحي الخاص بك.",
"RegisterToTheNewsletter": "سجل في النشرة الإخبارية لتلقي معلومات بخصوص ABP.IO ، بما في ذلك الإصدارات الجديدة وما إلى ذلك.",
"EnterYourEmailOrLogin": "أدخل عنوان بريدك الإلكتروني لإنشاء العرض التوضيحي أو <a href=\"{0}\"> تسجيل الدخول </a> باستخدام حسابك الحالي.",
"ApplicationTemplate": "نموذج التطبيق",

4
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/cs.json

@ -46,6 +46,8 @@
"IndexPageHeroSection": "<span class=\"first-line\">Kompletní</span><span class=\"second-line\"> platforma pro vývoj webu</span><span class=\"third-line\">vestavěná na <img src= \"{0}\" width=\"110\" class=\"ml-1\" /> framework</span>",
"AbpCommercialShortDescription": "ABP Commercial poskytuje předpřipravené aplikační moduly, nástroje pro rychlý vývoj aplikací, profesionální témata uživatelského rozhraní, prémiovou podporu a další.",
"LiveDemo": "Živá ukázka",
"LiveDemoLead": "<a href=\"{0}\">{1}</a> pomocí vašeho účtu ABP, <a href=\"{2}\">{3}</a> na abp.io.<br/>Nebo vyplňte níže uvedený formulář a vytvořte si nyní živou ukázku",
"ThereIsAlreadyAnAccountWithTheGivenEmailAddress": "Zadaná e-mailová adresa <b>{0}</b> je již registrována.<br/> Můžete se přihlásit se svým účtem a pokračovat.",
"GetLicence": "Získejte licenci",
"Application": "aplikace",
"StartupTemplates": "Spouštěcí šablony",
@ -129,12 +131,14 @@
"YourFullName": "Vaše celé jméno",
"EmailField": "Emailová adresa",
"YourEmailAddress": "Vaše emailová adresa",
"ValidEmailAddressIsRequired": "Je vyžadována platná e-mailová adresa.",
"HowMayWeHelpYou": "Jak vám můžeme pomoci?",
"SendMessage": "Poslat zprávu",
"Success": "Úspěch",
"WeWillReplyYou": "Obdrželi jsme vaši zprávu a brzy se vám ozveme.",
"GoHome": "Jdi domů",
"CreateLiveDemo": "Vytvořit živé demo",
"CreateLiveDemoDescription": "Po odeslání tohoto formuláře obdržíte e-mail obsahující odkaz na vaši ukázku.",
"RegisterToTheNewsletter": "Zaregistrujte se k odběru newsletteru a získejte informace o ABP.IO, včetně nových verzí atd.",
"EnterYourEmailOrLogin": "Chcete-li vytvořit ukázku, zadejte svou e-mailovou adresu nebo se <a href=\"{0}\">přihlaste</a> pomocí svého stávajícího účtu.",
"ApplicationTemplate": "Šablona aplikace",

4
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/de.json

@ -46,6 +46,8 @@
"IndexPageHeroSection": "<span class=\"first-line\">Eine komplette</span><span class=\"second-line\"> Webentwicklungsplattform</span><span class=\"third-line\">aufgebaute <img src= \"{0}\" width=\"110\" class=\"ml-1\" /> Framework</span>",
"AbpCommercialShortDescription": "ABP Commercial bietet vorgefertigte Anwendungsmodule, schnelle Anwendungsentwicklungstools, professionelle UI-Themen, Premium-Support und mehr.",
"LiveDemo": "Live-Demo",
"LiveDemoLead": "<a href=\"{0}\">{1}</a> mit Ihrem ABP-Konto, <a href=\"{2}\">{3}</a> zu abp.io.<br/>Oder füllen Sie das Formular unten aus, um jetzt eine Live-Demo zu erstellen",
"ThereIsAlreadyAnAccountWithTheGivenEmailAddress": "Es gibt bereits ein Konto mit der angegebenen E-Mail-Adresse: <b>{0}</b><br/> Sie können sich mit Ihrem Konto anmelden, um fortzufahren.",
"GetLicence": "Holen Sie sich eine Lizenz",
"Application": "Anwendung",
"StartupTemplates": "Startup-Vorlagen",
@ -129,12 +131,14 @@
"YourFullName": "Ihren vollständigen Namen",
"EmailField": "E-Mail-Addresse",
"YourEmailAddress": "Ihre E-Mail-Adresse",
"ValidEmailAddressIsRequired": "Eine gültige E-Mail-Adresse ist erforderlich.",
"HowMayWeHelpYou": "Wie können wir Ihnen helfen?",
"SendMessage": "Nachricht senden",
"Success": "Erfolg",
"WeWillReplyYou": "Wir haben Ihre Nachricht erhalten und werden uns in Kürze bei Ihnen melden.",
"GoHome": "Nach Hause gehen",
"CreateLiveDemo": "Live-Demo erstellen",
"CreateLiveDemoDescription": "Sobald Sie dieses Formular absenden, erhalten Sie eine E-Mail mit Ihrem Demo-Link.",
"RegisterToTheNewsletter": "Melden Sie sich für den Newsletter an, um Informationen zu ABP.IO, einschließlich Neuerscheinungen etc. zu erhalten.",
"EnterYourEmailOrLogin": "Geben Sie Ihre E-Mail-Adresse ein, um Ihre Demo zu erstellen, oder <a href=\"{0}\">Login</a> mit Ihrem bestehenden Konto.",
"ApplicationTemplate": "Bewerbungsvorlage",

14
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json

@ -49,6 +49,8 @@
"IndexPageHeroSection": "<span class=\"first-line\">A complete</span><span class=\"second-line\"> web development platform</span><span class=\"third-line\">built-on <img src=\"{0}\" width=\"110\" class=\"ml-1\" /> framework</span>",
"AbpCommercialShortDescription": "ABP Commercial provides pre-built application modules, rapid application development tooling, professional UI themes, premium support and more.",
"LiveDemo": "Live Demo",
"LiveDemoLead": "<a href=\"{0}\">{1}</a> using your ABP account, <a href=\"{2}\">{3}</a> to abp.io.<br/>Or fill the form below to create a live demo now",
"ThereIsAlreadyAnAccountWithTheGivenEmailAddress": "There is already an account with the given email address: <b>{0}</b><br/> You can login with your account to proceed.",
"GetLicence": "Get a License",
"Application": "Application",
"StartupTemplates": "Startup Templates",
@ -132,12 +134,14 @@
"LastNameField": "Last Name",
"EmailField": "E-mail Address",
"YourEmailAddress": "Your e-mail address",
"ValidEmailAddressIsRequired": "A valid e-mail address is required.",
"HowMayWeHelpYou": "How may we help you?",
"SendMessage": "Send Message",
"Success": "Success",
"WeWillReplyYou": "We received your message and will be in touch shortly.",
"GoHome": "Go Home",
"CreateLiveDemo": "Create Live Demo",
"CreateLiveDemoDescription": "Once you submit this form, you will receive an email containing your demo link.",
"RegisterToTheNewsletter": "Register for the newsletter to receive information regarding ABP.IO, including new releases etc.",
"EnterYourEmailOrLogin": "Enter your e-mail address to create your demo or <a href=\"{0}\">Login</a> using your existing account.",
"ApplicationTemplate": "Application Template",
@ -417,7 +421,7 @@
"UIFrameworks": "UI Frameworks",
"UsefulLinks": "Useful Links",
"Platform": "Platform",
"CoolestCompaniesUseABPCommercial": "The coolest companies already use <span class=\"fw-6\">ABP Commercial.</span>",
"CoolestCompaniesUseABPCommercial": "The coolest companies already use <span class=\"fw-bold\">ABP Commercial.</span>",
"UserInterface": "User Interface",
"APIGateway": "API Gateway",
"Microservice": "Microservice",
@ -982,7 +986,7 @@
"Summary": "Summary",
"TrainingPack": "Training pack",
"TrainingPackDiscount": "Training pack discount",
"Purchase_OnboardingTraining_Description": "This live training package is discounted when purchased with the new license. This discounted price is valid only for new license purchases. <a href=\"{0}\" class=\"text-white\">Learn more <i class=\"fa fa-external-link ms-1\"></i></a>",
"Purchase_OnboardingTraining_Description": "This live training package is valid for a class of 8 students and this discount is only valid when purchased with the new license. <a href=\"{0}\" class=\"text-white\">Learn more <i class=\"fa fa-external-link ms-1\"></i></a>",
"Purchase_Save": "{0}% <span class=\"save ms-1\">Save {1} {2}</span>",
"RemoveBasket": "Remove from basket",
"WhyABPIOPlatform?": "Why <span class=\"gradient-commercial\">ABP.IO Platform</span>?",
@ -1075,6 +1079,8 @@
"WhyAbpIo_Page_Title": "Why ABP.IO Platform?",
"AbpStudio_Page_Title": "ABP Studio",
"CampaignInfo": "Buy a new license or renew your existing license and <span class=\"text-white\">get an additional 2 months</span> at no additional cost! This offer is valid for all license plans. Ensure you take advantage of this limited-time promotion to expand your access to premium features and upgrades.",
"HurryUpLastDay": "Hurry Up! Last Day: {0}"
"HurryUpLastDay": "Hurry Up! Last Day: {0}",
"CreatingCRUDPagesWithABPSuite": "Creating CRUD pages with ABP Suite",
"Testimonials": "Testimonials"
}
}
}

4
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/es.json

@ -46,6 +46,8 @@
"IndexPageHeroSection": "<span class=\"first-line\"> Una </span> <span class=\"second-line\"> plataforma de desarrollo web completa </span> <span class=\"third-line\"> integrada <img src=\"{0}\" width = \"110\" class=\"ml-1\" /> marco </span>",
"AbpCommercialShortDescription": "ABP Commercial proporciona módulos de aplicaciones prediseñados, herramientas de desarrollo rápido de aplicaciones, temas de interfaz de usuario profesionales, soporte premium y más.",
"LiveDemo": "Demo en vivo",
"LiveDemoLead": "<a href=\"{0}\">{1}</a> usando su cuenta ABP, <a href=\"{2}\">{3}</a> a abp.io.<br/>O complete el siguiente formulario para crear una demostración en vivo ahora",
"ThereIsAlreadyAnAccountWithTheGivenEmailAddress": "Ya existe una cuenta con la dirección de correo electrónico especificada: <b>{0}</b><br/> Puede iniciar sesión con su cuenta para continuar.",
"GetLicence": "Obtener una licencia",
"Application": "Solicitud",
"StartupTemplates": "Plantillas de inicio",
@ -129,12 +131,14 @@
"YourFullName": "Tu nombre completo",
"EmailField": "Dirección de correo electrónico",
"YourEmailAddress": "Tu correo electrónico",
"ValidEmailAddressIsRequired": "Se requiere una dirección de correo electrónico válida.",
"HowMayWeHelpYou": "¿Cómo podemos ayudarle?",
"SendMessage": "Enviar mensaje",
"Success": "Éxito",
"WeWillReplyYou": "Recibimos su mensaje y nos pondremos en contacto a la brevedad.",
"GoHome": "Vete a casa",
"CreateLiveDemo": "Crear demostración en vivo",
"CreateLiveDemoDescription": "Una vez que envíe este formulario, recibirá un correo electrónico con el enlace de su demostración.",
"RegisterToTheNewsletter": "Regístrese para recibir el boletín informativo para recibir información sobre ABP.IO, incluidos nuevos lanzamientos, etc.",
"EnterYourEmailOrLogin": "Ingrese su dirección de correo electrónico para crear su demostración o <a href=\"{0}\"> Iniciar sesión </a> con su cuenta existente.",
"ApplicationTemplate": "Plantilla de aplicación",

4
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json

@ -49,6 +49,8 @@
"IndexPageHeroSection": "<span class=\"first-line\"> Täydellinen </span><span class=\"second-line\"> verkkokehitysympäristö </span><span class=\"third-line\"> sisäänrakennettu <img src=\"{0}\" width = \"110\" class=\"ml-1\" /> kehys </span>",
"AbpCommercialShortDescription": "ABP Commercial tarjoaa valmiita sovellusmoduuleja, nopean sovelluskehitystyökalun, ammattimaiset käyttöliittymäteemat, ensiluokkaisen tuen ja paljon muuta.",
"LiveDemo": "Live-esittely",
"LiveDemoLead": "<a href=\"{0}\">{1}</a> käyttämällä ABP-tiliäsi, <a href=\"{2}\">{3}</a> abp.io: lle.<br/>Tai täytä alla oleva lomake luodaksesi live-esittelyn nyt",
"ThereIsAlreadyAnAccountWithTheGivenEmailAddress": "Sähköpostiosoitteella <b>{0}</b> on jo tili.<br/> Voit kirjautua sisään tilillesi jatkaaksesi.",
"GetLicence": "Hanki lisenssi",
"Application": "Sovellus",
"StartupTemplates": "Käynnistysmallit",
@ -132,12 +134,14 @@
"LastNameField": "Sukunimi",
"EmailField": "Sähköpostiosoite",
"YourEmailAddress": "Sähköpostiosoitteesi",
"ValidEmailAddressIsRequired": "Kelvollinen sähköpostiosoite vaaditaan",
"HowMayWeHelpYou": "Kuinka voimme auttaa sinua?",
"SendMessage": "Lähetä viesti",
"Success": "Menestys",
"WeWillReplyYou": "Saimme viestisi ja otamme sinuun pian yhteyttä.",
"GoHome": "Mene kotiin",
"CreateLiveDemo": "Luo live-esittely",
"CreateLiveDemoDescription": "Kun lähetät tämän lomakkeen, saat sähköpostin, jossa on linkki demoosi.",
"RegisterToTheNewsletter": "Rekisteröidy uutiskirjeeseen saadaksesi tietoa ABP.IO: sta, mukaan lukien uudet julkaisut jne.",
"EnterYourEmailOrLogin": "Kirjoita sähköpostiosoitteesi luodaksesi esittely tai <a href=\"{0}\"> kirjaudu sisään </a> nykyisellä tililläsi.",
"ApplicationTemplate": "Sovelluksen malli",

4
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fr.json

@ -46,6 +46,8 @@
"IndexPageHeroSection": "<span class=\"first-line\">Une plate-forme de développement Web</span><span class=\"second-line\"> complète </span><span class=\"third-line\"> intégrée <img src=\"{0}\" width = \"110\" class=\"ml-1\" /> cadre </span>",
"AbpCommercialShortDescription": "ABP Commercial fournit des modules d'application prédéfinis, des outils de développement rapide d'applications, des thèmes d'interface utilisateur professionnels, un support premium et plus encore.",
"LiveDemo": "Démo en direct",
"LiveDemoLead": "<a href=\"{0}\">{1}</a> en utilisant votre compte ABP, <a href=\"{2}\">{3}</a> à abp.io.<br/>Ou remplissez le formulaire ci-dessous pour créer une démo en direct maintenant",
"ThereIsAlreadyAnAccountWithTheGivenEmailAddress": "Il existe déjà un compte avec l'adresse e-mail fournie: <b>{0}</b><br/> Vous pouvez vous connecter avec votre compte pour continuer.",
"GetLicence": "Obtenez une licence",
"Application": "Application",
"StartupTemplates": "Modèles de démarrage",
@ -129,12 +131,14 @@
"YourFullName": "Votre nom complet",
"EmailField": "Adresse e-mail",
"YourEmailAddress": "Votre adresse email",
"ValidEmailAddressIsRequired": "Une adresse e-mail valide est requise.",
"HowMayWeHelpYou": "Comment pouvons nous vous aider?",
"SendMessage": "Envoyer le message",
"Success": "Succès",
"WeWillReplyYou": "Nous avons reçu votre message et vous contacterons sous peu.",
"GoHome": "Retour à l'acceuil",
"CreateLiveDemo": "Créer une démo en direct",
"CreateLiveDemoDescription": "Une fois que vous avez soumis ce formulaire, vous recevrez un e-mail contenant le lien de votre démo.",
"RegisterToTheNewsletter": "Inscrivez-vous à la newsletter pour recevoir des informations concernant ABP.IO, y compris les nouvelles versions, etc.",
"EnterYourEmailOrLogin": "Saisissez votre adresse e-mail pour créer votre démo ou <a href=\"{0}\"> Connectez-vous </a> à l'aide de votre compte existant.",
"ApplicationTemplate": "Modèle d'application",

4
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hi.json

@ -46,6 +46,8 @@
"IndexPageHeroSection": "<span class=\"first-line\">एक पूर्ण</span><span class=\"second-line\"> वेब डेवलपमेंट प्लेटफॉर्म</span><span class=\"third-line\">बिल्ट-ऑन <img src=\"{0}\" width=\"110\" class=\"ml-1\" /> Framework</span>",
"AbpCommercialShortDescription": "एबीपी कमर्शियल प्री-बिल्ट एप्लिकेशन मॉड्यूल, रैपिड एप्लिकेशन डेवलपमेंट टूलिंग, पेशेवर यूआई थीम, प्रीमियम सपोर्ट आदि प्रदान करता है।",
"LiveDemo": "लाइव डेमो",
"LiveDemoLead": "<a href=\"{0}\">{1}</a> अपने एबीपी खाते का उपयोग करते हुए, <a href=\"{2}\">{3}</a> abp.io पर आपका स्वागत है। <br/> या अब एक लाइव डेमो बनाने के लिए नीचे दिए गए फॉर्म को भरें",
"ThereIsAlreadyAnAccountWithTheGivenEmailAddress": "दिए गए ईमेल पते <b>{0}</b> के साथ पहले से ही एक खाता है। <br/> आप अपने खाते से लॉगिन करके आगे बढ़ सकते हैं।",
"GetLicence": "एक लाइसेंस प्राप्त करें",
"Application": "आवेदन",
"StartupTemplates": "स्टार्टअप टेम्पलेट",
@ -129,12 +131,14 @@
"YourFullName": "आपका पूरा नाम",
"EmailField": "ईमेल पता",
"YourEmailAddress": "आपका ईमेल पता",
"ValidEmailAddressIsRequired": "एक वैध ईमेल पता आवश्यक है।",
"HowMayWeHelpYou": "हम कैसे आपकी सहायता कर सकते हैं?",
"SendMessage": "मेसेज भेजें",
"Success": "सफलता",
"WeWillReplyYou": "हमें आपका संदेश प्राप्त हुआ और शीघ्र ही संपर्क में आएगा।",
"GoHome": "घर जाओ",
"CreateLiveDemo": "लाइव डेमो बनाएँ",
"CreateLiveDemoDescription": "एक बार जब आप इस फॉर्म को जमा करते हैं, तो आपको अपने डेमो लिंक को समेत एक ईमेल प्राप्त होगा।",
"RegisterToTheNewsletter": "ABP.IO के बारे में जानकारी प्राप्त करने के लिए न्यूज़लेटर के लिए रजिस्टर करें, जिसमें नई रिलीज़ आदि शामिल हैं।",
"EnterYourEmailOrLogin": "अपना डेमो बनाने के लिए अपना ई-मेल पता दर्ज करें या अपने मौजूदा खाते का उपयोग करके <a href=\"{0}\">लॉगिन करें</a>।",
"ApplicationTemplate": "एप्लिकेशन टेम्पलेट",

4
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hu.json

@ -49,6 +49,8 @@
"IndexPageHeroSection": "<span class=\"first-line\">Teljes</span><span class=\"second-line\"> webfejlesztői platform</span><span class=\"third-line\">beépített <img src= \"{0}\" width=\"110\" class=\"ml-1\" /> keretrendszer</span>",
"AbpCommercialShortDescription": "Az ABP Commercial előre beépített alkalmazásmodulokat, gyors alkalmazásfejlesztési eszközöket, professzionális felhasználói felületi témákat, prémium támogatást és még sok mást kínál.",
"LiveDemo": "Élő Demo",
"LiveDemoLead": "<a href=\"{0}\">{1}</a> az ABP-fiókjával, <a href=\"{2}\">{3}</a> az abp.io-ra.<br/>Vagy töltse ki az alábbi űrlapot, hogy most létrehozzon egy élő bemutatót",
"ThereIsAlreadyAnAccountWithTheGivenEmailAddress": "Már van fiók a megadott e-mail címmel: <b>{0}</b><br/> Bejelentkezhet a fiókjával a folytatáshoz.",
"GetLicence": "Szerezzen engedélyt",
"Application": "Alkalmazás",
"StartupTemplates": "Indítási sablonok",
@ -132,12 +134,14 @@
"LastNameField": "Vezetéknév",
"EmailField": "Email cím",
"YourEmailAddress": "Az email címed",
"ValidEmailAddressIsRequired": "Érvényes e-mail cím szükséges",
"HowMayWeHelpYou": "Hogyan segíthetünk?",
"SendMessage": "Üzenet küldése",
"Success": "Siker",
"WeWillReplyYou": "Megkaptuk üzenetét, és hamarosan felvesszük Önnel a kapcsolatot.",
"GoHome": "Hazamenni",
"CreateLiveDemo": "Élő bemutató létrehozása",
"CreateLiveDemoDescription": "Miután elküldte ezt a űrlapot, e-mailt kap, amely tartalmazza a bemutató linkjét.",
"RegisterToTheNewsletter": "Regisztráljon a hírlevélre, hogy információkat kapjon az ABP.IO-ról, beleértve az új kiadásokat stb.",
"EnterYourEmailOrLogin": "Adja meg e-mail címét a bemutató létrehozásához, vagy <a href=\"{0}\">jelentkezzen be</a> meglévő fiókjával.",
"ApplicationTemplate": "Alkalmazássablon",

4
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/is.json

@ -46,6 +46,8 @@
"IndexPageHeroSection": "<span class=\"first-line\">Heilstætt</span><span class=\"second-line\"> vefþróunar umhverfi </span><span class=\"third-line\">byggt á <img src=\"{0}\" width=\"110\" class=\"ml-1\" /> ABP</span>",
"AbpCommercialShortDescription": "ABP Commercial býður upp á forsmíðaðar forritareiningar, tól sem hraða þróun, fagmanlega hannaðar UI þemur, úrvals stuðning og fleira.",
"LiveDemo": "Virkt sýnidæmi",
"LiveDemoLead": "<a href=\"{0}\">{1}</a> með þínum ABP reikningi, <a href=\"{2}\">{3}</a> til abp.io.<br/>Eða fylltu út formið hér að neðan til að búa til virkt sýnidæmi núna",
"ThereIsAlreadyAnAccountWithTheGivenEmailAddress": "Það er nú þegar reikningur með þessu netfangi: <b>{0}</b><br/> Þú getur skráð þig inn með þínum reikningi til að halda áfram.",
"GetLicence": "Sækja Leyfi",
"Application": "Umsókn",
"StartupTemplates": "Byrjunar Sniðmát",
@ -129,12 +131,14 @@
"YourFullName": "Þitt fulla nafn",
"EmailField": "Netfang",
"YourEmailAddress": "Netfangið þitt",
"ValidEmailAddressIsRequired": "Netfangið þarf að vera gilt.",
"HowMayWeHelpYou": "Hvernig getum við aðstoðað þig?",
"SendMessage": "Senda skilaboð",
"Success": "Heppnaðist",
"WeWillReplyYou": "Við höfum móttekið skilaboðin þín og munum hafa samband innan tíðar.",
"GoHome": "Fara heim",
"CreateLiveDemo": "Búa til Live Demo",
"CreateLiveDemoDescription": "Þegar þú sendir þetta form, færðu tölvupóst sem inniheldur tengilinn þinn.",
"RegisterToTheNewsletter": "Skráning á póstlista fyrir fréttabréf með upplýsingum um ABP.IO, þ.á.m. nýjar útgáfur o.s.frv..",
"EnterYourEmailOrLogin": "Settu inn netfangið þitt til að búa til kynningu eða <a href=\"{0}\">Login</a> með þínum notandareikningi.",
"ApplicationTemplate": "Forritssniðmát",

4
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json

@ -46,6 +46,8 @@
"IndexPageHeroSection": "<span class=\"first-line\"> Una completa </span><span class=\"second-line\"> piattaforma di sviluppo web </span><span class=\"third-line\"> integrata <img src=\"{0}\" width=\"110\" class=\"ml-1\" /> framework </span>",
"AbpCommercialShortDescription": "ABP Commercial fornisce moduli applicativi predefiniti, strumenti per lo sviluppo rapido di applicazioni, temi dell'interfaccia utente professionale, supporto premium e altro ancora.",
"LiveDemo": "Dimostrazione dal vivo",
"LiveDemoLead": "<a href=\"{0}\">{1}</a> utilizzando il tuo account ABP, <a href=\"{2}\">{3}</a> a abp.io.<br/>O compilare il modulo sottostante per creare una demo live ora",
"ThereIsAlreadyAnAccountWithTheGivenEmailAddress": "Esiste già un account con l'indirizzo email specificato: <b>{0}</b><br/> Puoi accedere con il tuo account per procedere.",
"GetLicence": "Ottieni una licenza",
"Application": "Applicazione",
"StartupTemplates": "Modelli di avvio",
@ -129,12 +131,14 @@
"YourFullName": "Il tuo nome completo",
"EmailField": "Indirizzo e-mail",
"YourEmailAddress": "Il tuo indirizzo di posta elettronica",
"ValidEmailAddressIsRequired": "È richiesto un indirizzo email valido.",
"HowMayWeHelpYou": "Come possiamo aiutarti?",
"SendMessage": "Invia messaggio",
"Success": "Successo",
"WeWillReplyYou": "Abbiamo ricevuto il tuo messaggio e ti contatteremo a breve.",
"GoHome": "Torna all'inizio",
"CreateLiveDemo": "Crea demo live",
"CreateLiveDemoDescription": "Una volta inviato questo modulo, riceverai un'e-mail contenente il link alla tua demo.",
"RegisterToTheNewsletter": "Registrati alla newsletter per ricevere informazioni su ABP.IO, comprese le nuove versioni ecc.",
"EnterYourEmailOrLogin": "Inserisci il tuo indirizzo e-mail per creare la tua demo o <a href=\"{0}\"> Accedi </a> utilizzando il tuo account esistente.",
"ApplicationTemplate": "Modello di applicazione",

4
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/nl.json

@ -46,6 +46,8 @@
"IndexPageHeroSection": "<span class=\"first-line\">Een compleet</span><span class=\"second-line\"> webontwikkelingsplatform</span><span class=\"third-line\">ingebouwd <img src= \"{0}\" width=\"110\" class=\"ml-1\" /> raamwerk</span>",
"AbpCommercialShortDescription": "ABP Commercial biedt kant-en-klare applicatiemodules, tooling voor snelle applicatieontwikkeling, professionele UI-thema's, premium ondersteuning en meer.",
"LiveDemo": "Live demonstratie",
"LiveDemoLead": "<a href=\"{0}\">{1}</a> met behulp van uw ABP-account, <a href=\"{2}\">{3}</a> naar abp.io.<br/>Of vul het onderstaande formulier in om nu een live demo te maken",
"ThereIsAlreadyAnAccountWithTheGivenEmailAddress": "Er is al een account met het opgegeven e-mailadres: <b>{0}</b><br/> U kunt inloggen met uw account om door te gaan.",
"GetLicence": "Verkrijg een licentie",
"Application": "Sollicitatie",
"StartupTemplates": "Opstartsjablonen",
@ -129,12 +131,14 @@
"YourFullName": "Je volledige naam",
"EmailField": "E-mailadres",
"YourEmailAddress": "Jouw e-mailadres",
"ValidEmailAddressIsRequired": "Een geldig e-mailadres is vereist.",
"HowMayWeHelpYou": "Hoe kunnen we je helpen?",
"SendMessage": "Bericht versturen",
"Success": "Succes",
"WeWillReplyYou": "We hebben uw bericht ontvangen en nemen spoedig contact met u op.",
"GoHome": "Ga naar huis",
"CreateLiveDemo": "Live demo maken",
"CreateLiveDemoDescription": "Zodra u dit formulier indient, ontvangt u een e-mail met uw demolink.",
"RegisterToTheNewsletter": "Schrijf je in voor de nieuwsbrief om informatie over ABP.IO te ontvangen, inclusief nieuwe releases etc.",
"EnterYourEmailOrLogin": "Voer uw e-mailadres in om uw demo te maken of <a href=\"{0}\">Log in</a> met uw bestaande account.",
"ApplicationTemplate": "Toepassingssjabloon",

4
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pl-PL.json

@ -46,6 +46,8 @@
"IndexPageHeroSection": "<span class=\"first-line\">A complete</span><span class=\"second-line\"> web development platform</span><span class=\"third-line\">built-on <img src=\"{0}\" width=\"110\" class=\"ml-1\" /> framework</span>",
"AbpCommercialShortDescription": "ABP Commercial zapewnia gotowe moduły aplikacji, narzędzia do szybkiego tworzenia aplikacji, profesjonalne motywy interfejsu użytkownika, wsparcie premium i nie tylko.",
"LiveDemo": "Demo na żywo",
"LiveDemoLead": "<a href=\"{0}\">{1}</a> korzystając z konta ABP, <a href=\"{2}\">{3}</a> to abp.io.<br/>Lub wypełnij poniższy formularz, aby utworzyć teraz demo na żywo",
"ThereIsAlreadyAnAccountWithTheGivenEmailAddress": "Istnieje już konto o podanym adresie e-mail: <b>{0}</b><br/> Możesz się zalogować na swoje konto, aby kontynuować.",
"GetLicence": "Uzyskaj licencję",
"Application": "Podanie",
"StartupTemplates": "Szablony startowe",
@ -129,12 +131,14 @@
"YourFullName": "Twoje pełne imię",
"EmailField": "Adres e-mail",
"YourEmailAddress": "Twój adres email",
"ValidEmailAddressIsRequired": "Wymagany jest prawidłowy adres e-mail.",
"HowMayWeHelpYou": "Jak możemy Ci pomóc?",
"SendMessage": "Wyślij wiadomość",
"Success": "Powodzenie",
"WeWillReplyYou": "Otrzymaliśmy Twoją wiadomość i wkrótce się z Tobą skontaktujemy.",
"GoHome": "Idź do domu",
"CreateLiveDemo": "Utwórz demo na żywo",
"CreateLiveDemoDescription": "Po wysłaniu tego formularza otrzymasz e-mail z linkiem do swojego demo.",
"RegisterToTheNewsletter": "Zarejestruj się do newslettera, aby otrzymywać informacje dotyczące ABP.IO, w tym nowości itp.",
"EnterYourEmailOrLogin": "Wprowadź swój adres e-mail, aby utworzyć demo lub <a href=\"{0}\">Zaloguj się</a> przy użyciu istniejącego konta.",
"ApplicationTemplate": "Szablon aplikacji",

4
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pt-BR.json

@ -46,6 +46,8 @@
"IndexPageHeroSection": "<span class=\"first-line\"> Uma completa </span> <span class=\"second-line\"> plataforma de desenvolvimento web </span> <span class=\"third-line\"> integrada <img src=\"{0}\" width = \"110\" class=\"ml-1\" /> estrutura </span>",
"AbpCommercialShortDescription": "ABP Commercial fornece módulos de aplicativos pré-construídos, ferramentas de desenvolvimento rápido de aplicativos, temas de UI profissionais, suporte premium e muito mais.",
"LiveDemo": "Demonstração ao vivo",
"LiveDemoLead": "<a href=\"{0}\">{1}</a> usando sua conta ABP, <a href=\"{2}\">{3}</a> para abp.io.<br/>Ou preencha o formulário abaixo para criar uma demonstração ao vivo agora",
"ThereIsAlreadyAnAccountWithTheGivenEmailAddress": "Já existe uma conta com o endereço de e-mail fornecido: <b>{0}</b><br/> Você pode fazer login com sua conta para continuar.",
"GetLicence": "Obtenha uma licença",
"Application": "Aplicativo",
"StartupTemplates": "Modelos de inicialização",
@ -129,12 +131,14 @@
"YourFullName": "Seu nome completo",
"EmailField": "Endereço de e-mail",
"YourEmailAddress": "Seu endereço de email",
"ValidEmailAddressIsRequired": "Um endereço de e-mail válido é obrigatório.",
"HowMayWeHelpYou": "Como podemos ajudá-lo?",
"SendMessage": "Enviar mensagem",
"Success": "Sucesso",
"WeWillReplyYou": "Recebemos sua mensagem e entraremos em contato em breve.",
"GoHome": "Ir para casa",
"CreateLiveDemo": "Criar demonstração ao vivo",
"CreateLiveDemoDescription": "Depois de enviar este formulário, você receberá um e-mail contendo o link da sua demonstração.",
"RegisterToTheNewsletter": "Cadastre-se no boletim informativo para receber informações sobre ABP.IO, incluindo novos lançamentos etc.",
"EnterYourEmailOrLogin": "Digite seu endereço de e-mail para criar sua demonstração ou <a href=\"{0}\"> Faça login </a> usando sua conta existente.",
"ApplicationTemplate": "Modelo de aplicativo",

4
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ro-RO.json

@ -46,6 +46,8 @@
"IndexPageHeroSection": "<span class=\"first-line\">A complete</span><span class=\"second-line\"> web development platform</span><span class=\"third-line\">built-on <img src=\"{0}\" width=\"110\" class=\"ml-1\" /> framework</span>",
"AbpCommercialShortDescription": "ABP Commercial oferă module de aplicaţii pre-construite, instrumente de dezvoltare rapidă a aplicaţiilor, teme UI profesionale, asistenţă premium şi multe altele.",
"LiveDemo": "Live Demo",
"LiveDemoLead": "<a href=\"{0}\">{1}</a> folosind contul ABP, <a href=\"{2}\">{3}</a> la abp.io.<br/>Sau completaţi formularul de mai jos pentru a crea un demo live acum",
"ThereIsAlreadyAnAccountWithTheGivenEmailAddress": "Există deja un cont cu adresa de email specificată: <b>{0}</b><br/> Puteţi să vă autentificaţi cu contul dumneavoastră pentru a continua.",
"GetLicence": "Obţine o licenţă",
"Application": "Application",
"StartupTemplates": "Şabloane de lansare",
@ -129,12 +131,14 @@
"YourFullName": "Numele dumneavoastră complet",
"EmailField": "Adresa de email",
"YourEmailAddress": "Adresa dumneavoastră de email",
"ValidEmailAddressIsRequired": "Vă rugăm să introduceţi o adresă de email validă.",
"HowMayWeHelpYou": "Cum vă putem ajuta?",
"SendMessage": "Trimite mesaj",
"Success": "Succes",
"WeWillReplyYou": "Am primit mesajul dumneavoastră şi vă vom contacta cât de repede posibil.",
"GoHome": "Navigaţi acasă",
"CreateLiveDemo": "Crează Demo Live",
"CreateLiveDemoDescription": "După ce trimiteţi acest formular, veţi primi un email care conţine link-ul demo-ului dumneavoastră.",
"RegisterToTheNewsletter": "Înregistraţi-va la newsletter pentru a primi informaţii despre ABP.IO, inclusiv lansări noi etc.",
"EnterYourEmailOrLogin": "Introduceţi-vă adresa de email pentru a vă crea demo-ul sau <a href=\"{0}\">Autentificaţi-vă</a> folosind contul existent.",
"ApplicationTemplate": "Application Template",

4
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ru.json

@ -46,6 +46,8 @@
"IndexPageHeroSection": "<span class=\"first-line\"> Полная </span> <span class=\"second-line\"> платформа веб-разработки </span> <span class=\"third-line\"> встроенная <img src=\"{0}\" width = \"110\" class=\"ml-1\" /> каркас </span>",
"AbpCommercialShortDescription": "ABP Commercial предоставляет готовые модули приложений, инструменты для быстрой разработки приложений, профессиональные темы пользовательского интерфейса, поддержку премиум-класса и многое другое.",
"LiveDemo": "Живая демонстрация",
"LiveDemoLead": "<a href=\"{0}\">{1}</a> используя свою учетную запись ABP, <a href=\"{2}\">{3}</a> на abp.io. <br/> Или заполните форму ниже, чтобы создать живую демонстрацию прямо сейчас",
"ThereIsAlreadyAnAccountWithTheGivenEmailAddress": "Уже есть учетная запись с указанным адресом электронной почты: <b>{0}</b><br/> Вы можете войти в свою учетную запись, чтобы продолжить.",
"GetLicence": "Получить лицензию",
"Application": "заявка",
"StartupTemplates": "Шаблоны запуска",
@ -129,12 +131,14 @@
"YourFullName": "Ваше полное имя",
"EmailField": "Адрес электронной почты",
"YourEmailAddress": "Ваш адрес электронной почты",
"ValidEmailAddressIsRequired": "Требуется действительный адрес электронной почты.",
"HowMayWeHelpYou": "Как мы можем Вам помочь?",
"SendMessage": "Отправить сообщение",
"Success": "Успех",
"WeWillReplyYou": "Мы получили ваше сообщение и скоро свяжемся с вами.",
"GoHome": "Иди домой",
"CreateLiveDemo": "Создать живую демонстрацию",
"CreateLiveDemoDescription": "После отправки этой формы вы получите электронное письмо со ссылкой на демонстрацию.",
"RegisterToTheNewsletter": "Подпишитесь на рассылку новостей, чтобы получать информацию о ABP.IO, в том числе о новых выпусках и т. Д.",
"EnterYourEmailOrLogin": "Введите свой адрес электронной почты, чтобы создать демоверсию, или <a href=\"{0}\"> войдите </a>, используя существующую учетную запись.",
"ApplicationTemplate": "Шаблон приложения",

4
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sk.json

@ -46,6 +46,8 @@
"IndexPageHeroSection": "<span class=\"first-line\">Kompletná</span><span class=\"second-line\"> web vývojová platforma</span><span class=\"third-line\">postavená na <img src=\"{0}\" width=\"110\" class=\"ml-1\" /> frameworku</span>",
"AbpCommercialShortDescription": "ABP Commercial poskytuje predpripravené aplikačné moduly, nástroje na rýchly vývoj aplikácií, profesionálne témy používateľského rozhrania, prémiovú podporu a ďalšie.",
"LiveDemo": "Live ukážka",
"LiveDemoLead": "<a href=\"{0}\">{1}</a> použitím vášho ABP účtu, <a href=\"{2}\">{3}</a> na abp.io.<br/>Alebo vyplňte nižšie uvedený formulár a vytvorte si teraz live ukážku",
"ThereIsAlreadyAnAccountWithTheGivenEmailAddress": "Už existuje účet s danou emailovou adresou: <b>{0}</b><br/> Môžete sa prihlásiť pomocou svojho účtu a pokračovať.",
"GetLicence": "Získajte licenciu",
"Application": "Aplikácia",
"StartupTemplates": "Štartovacie šablóny",
@ -129,12 +131,14 @@
"YourFullName": "Vaše celé meno",
"EmailField": "Emailová adresa",
"YourEmailAddress": "Vaša emailová adresa",
"ValidEmailAddressIsRequired": "Je potrebná platná emailová adresa.",
"HowMayWeHelpYou": "Ako vám môžeme pomôcť?",
"SendMessage": "Odoslať správu",
"Success": "Úspech",
"WeWillReplyYou": "Dostali sme vašu správu a čoskoro vás budeme kontaktovať.",
"GoHome": "Prejsť Domov",
"CreateLiveDemo": "Vytvoriť live ukážku",
"CreateLiveDemoDescription": "Po odoslaní tohto formulára obdržíte e-mail obsahujúci odkaz na vašu ukážku.",
"RegisterToTheNewsletter": "Zaregistrujte sa na odber noviniek a dostávajte informácie o ABP.IO, vrátane nových verzií atď.",
"EnterYourEmailOrLogin": "Zadajte svoju emailovú adresu a vytvorte si ukážku alebo sa <a href=\"{0}\">prihláste</a> pomocou svojho existujúceho konta.",
"ApplicationTemplate": "Šablóna žiadosti",

4
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sl.json

@ -46,6 +46,8 @@
"IndexPageHeroSection": "<span class=\"first-line\">Popolna</span><span class=\"second-line\"> platforma za spletno razvoj</span><span class=\"third-line\">vgrajena <img src= \"{0}\" width=\"110\" class=\"ml-1\" /> okvir</span>",
"AbpCommercialShortDescription": "ABP Commercial ponuja vnaprej izdelane aplikacijske module, orodja za hiter razvoj aplikacij, profesionalne teme uporabniškega vmesnika, vrhunsko podporo in še več.",
"LiveDemo": "Demo v živo",
"LiveDemoLead": "<a href=\"{0}\">{1}</a> s svojim ABP računom, <a href=\"{2}\">{3}</a> na abp.io.<br/>Ali izpolnite spodnji obrazec, da ustvarite demo v živo zdaj",
"ThereIsAlreadyAnAccountWithTheGivenEmailAddress": "Za navedeni e-poštni naslov že obstaja račun: <b>{0}</b><br/> Lahko se prijavite s svojim računom, da nadaljujete.",
"GetLicence": "Pridobite licenco",
"Application": "Aplikacija",
"StartupTemplates": "Predloge za zagon",
@ -129,12 +131,14 @@
"YourFullName": "Tvoje polno ime",
"EmailField": "Email naslov",
"YourEmailAddress": "Vaš email naslov",
"ValidEmailAddressIsRequired": "Veljaven e-poštni naslov je obvezen",
"HowMayWeHelpYou": "Kako vam lahko pomagamo?",
"SendMessage": "Pošlji sporočilo",
"Success": "uspeh",
"WeWillReplyYou": "Prejeli smo vaše sporočilo in vas bomo v kratkem kontaktirali.",
"GoHome": "Pojdi domov",
"CreateLiveDemo": "Ustvari demo v živo",
"CreateLiveDemoDescription": "Ko pošljete ta obrazec, boste prejeli e-poštno sporočilo s povezavo do svojega demo.",
"RegisterToTheNewsletter": "Registrirajte se za glasilo, če želite prejemati informacije o ABP.IO, vključno z novimi izdajami itd.",
"EnterYourEmailOrLogin": "Vnesite svoj e-poštni naslov, če želite ustvariti predstavitev, ali <a href=\"{0}\">Prijavite se</a> z obstoječim računom.",
"ApplicationTemplate": "Predloga aplikacije",

4
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json

@ -48,6 +48,8 @@
"IndexPageHeroSection": "<span class=\"first-line\">A complete</span><span class=\"second-line\"> web development platform</span><span class=\"third-line\">built-on <img src=\"{0}\" width=\"110\" class=\"ml-1\" /> framework</span>",
"AbpCommercialShortDescription": "ABP Commercial, önceden oluşturulmuş uygulama modülleri, hızlı uygulama geliştirme araçları, profesyonel UI temaları, premium destek ve daha fazlasını sağlar.",
"LiveDemo": "Canlı Demo",
"LiveDemoLead": "<a href=\"{0}\">{1}</a> ABP hesabınızı kullanarak, <a href=\"{2}\">{3}</a> abp.io'ya hoş geldiniz.<br/>Veya aşağıdaki formu doldurarak şimdi canlı bir demo oluşturun",
"ThereIsAlreadyAnAccountWithTheGivenEmailAddress": "Zaten <b>{0}</b> e-posta adresiyle bir hesap var.<br/> Devam etmek için hesabınızla giriş yapabilirsiniz.",
"GetLicence": "Lisans Alın",
"Application": "Başvuru",
"StartupTemplates": "Başlangıç Şablonları",
@ -131,12 +133,14 @@
"YourFullName": "Tam adınız",
"EmailField": "E-posta Adresi",
"YourEmailAddress": "E-posta adresiniz",
"ValidEmailAddressIsRequired": "Geçerli bir e-posta adresi gereklidir",
"HowMayWeHelpYou": "Size nasıl yardımcı olabiliriz?",
"SendMessage": "Mesaj gönder",
"Success": "Başarı",
"WeWillReplyYou": "Mesajınızı aldık ve kısa süre içinde sizinle iletişime geçeceğiz.",
"GoHome": "Eve git",
"CreateLiveDemo": "Canlı Demo Oluştur",
"CreateLiveDemoDescription": "Bu formu gönderdikten sonra, demo bağlantınızı içeren bir e-posta alacaksınız.",
"RegisterToTheNewsletter": "ABP.IO hakkında yeni yayınlar vb. dahil olmak üzere bilgi almak için haber bültenine kaydolun.",
"EnterYourEmailOrLogin": "Demonuzu oluşturmak için e-posta adresinizi girin veya mevcut hesabınızı kullanarak <a href=\"{0}\">Giriş yapın</a>.",
"ApplicationTemplate": "Uygulama Şablonu",

4
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/vi.json

@ -46,6 +46,8 @@
"IndexPageHeroSection": "<span class=\"first-line\"> Nền tảng phát triển web hoàn chỉnh </span> <span class=\"second-line\"> </span> <span class=\"third-line\"> được tích hợp sẵn <img src=\"{0}\" width = \"110\" class=\"ml-1\" /> khung </span>",
"AbpCommercialShortDescription": "ABP Commercial cung cấp các mô-đun ứng dụng được tạo sẵn, công cụ phát triển ứng dụng nhanh chóng, các chủ đề giao diện người dùng chuyên nghiệp, hỗ trợ cao cấp và hơn thế nữa.",
"LiveDemo": "Bản thử trực tiếp",
"LiveDemoLead": "<a href=\"{0}\">{1}</a> hoặc <a href=\"{2}\">{3}</a> đến abp.io. <br/> Hoặc điền vào biểu mẫu bên dưới để tạo bản trình diễn trực tiếp ngay bây giờ",
"ThereIsAlreadyAnAccountWithTheGivenEmailAddress": "Đã có một tài khoản với địa chỉ email đã cho: <b> {0} </b> <br/> Bạn có thể đăng nhập vào tài khoản của mình để tiếp tục.",
"GetLicence": "Nhận giấy phép",
"Application": "Ứng dụng",
"StartupTemplates": "Mẫu khởi động",
@ -129,12 +131,14 @@
"YourFullName": "Tên đầy đủ của bạn",
"EmailField": "Địa chỉ email",
"YourEmailAddress": "Địa chỉ email của bạn",
"ValidEmailAddressIsRequired": "Địa chỉ email hợp lệ là bắt buộc",
"HowMayWeHelpYou": "Chúng tôi có thể giúp gì cho bạn?",
"SendMessage": "Gửi tin nhắn",
"Success": "Sự thành công",
"WeWillReplyYou": "Chúng tôi đã nhận được tin nhắn của bạn và sẽ sớm liên hệ với bạn.",
"GoHome": "Về nhà",
"CreateLiveDemo": "Tạo bản trình diễn trực tiếp",
"CreateLiveDemoDescription": "Sau khi bạn gửi biểu mẫu này, bạn sẽ nhận được một email chứa liên kết bản demo của mình.",
"RegisterToTheNewsletter": "Đăng ký nhận bản tin để nhận thông tin về ABP.IO, bao gồm các bản phát hành mới, v.v.",
"EnterYourEmailOrLogin": "Nhập địa chỉ e-mail của bạn để tạo bản demo hoặc <a href=\"{0}\"> Đăng nhập </a> bằng tài khoản hiện có của bạn.",
"ApplicationTemplate": "Mẫu ứng dụng",

4
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json

@ -49,6 +49,8 @@
"IndexPageHeroSection": "<span class=\"first-line\">一个完整的</span><span class=\"second-line\">web开发平台</span><span class=\"third-line\">基于 <img src=\"{0}\" width=\"110\" class=\"ml-1\" /> 框架</span>",
"AbpCommercialShortDescription": "ABP商业版提供了预构建的应用程序模块, 快速的应用程序开发工具, 专业的UI主题, 高级支持等.",
"LiveDemo": "在线演示",
"LiveDemoLead": "<a href=\"{0}\">{1}</a> 到你的ABP账户, <a href=\"{2}\">{3}</a> 到 abp.io.<br/>或者填写下面的表单立即创建在线演示",
"ThereIsAlreadyAnAccountWithTheGivenEmailAddress": "已经有一个使用此电子邮件地址的帐户: <b>{0}</b><br/> 你可以使用你的帐户登录继续.",
"GetLicence": "获得许可",
"Application": "应用程序",
"StartupTemplates": "启动模板",
@ -132,12 +134,14 @@
"LastNameField": "姓氏",
"EmailField": "E-mail地址",
"YourEmailAddress": "你的e-mail地址",
"ValidEmailAddressIsRequired": "请输入有效的e-mail地址",
"HowMayWeHelpYou": "需要获得购买帮助?(提供中文服务)",
"SendMessage": "发送消息",
"Success": "成功",
"WeWillReplyYou": "你的消息已经发送! 我们会在短时间内给你答复.",
"GoHome": "回到主页面",
"CreateLiveDemo": "创建在线演示",
"CreateLiveDemoDescription": "一旦你提交此表单,你将收到一封包含你的演示链接的电子邮件.",
"RegisterToTheNewsletter": "注册到时事简报以获取有关ABP.IO的消息,比如新发布的内容.",
"EnterYourEmailOrLogin": "输入你的e-mail地址来创建你的演示或者使用你的已有账号<a href=\"{0}\">登录</a>.",
"ApplicationTemplate": "应用程序模板",

4
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json

@ -48,6 +48,8 @@
"IndexPageHeroSection": "<span class=\"first-line\">一個完整的</span><span class=\"second-line\">web開發平臺</span><span class=\"third-line\">基於 <img src=\"{0}\" width=\"110\" class=\"ml-1\" /> 框架</span>",
"AbpCommercialShortDescription": "ABP商業版提供了預構建的應用程序模塊, 快速的應用程序開發工具, 專業的UI主題, 高級支持等.",
"LiveDemo": "在線演示",
"LiveDemoLead": " <a href=\"{0}\">{1}</a> 使用你的ABP賬號, <a href=\"{2}\">{3}</a> 到 abp.io.<br/>或者填寫下面的表單立即創建一個在線演示",
"ThereIsAlreadyAnAccountWithTheGivenEmailAddress": "已經有一個使用該電子郵件地址的賬號: <b>{0}</b><br/> 你可以使用你的賬號登錄以繼續.",
"GetLicence": "獲得許可",
"Application": "應用程序",
"StartupTemplates": "啟動模板",
@ -131,12 +133,14 @@
"YourFullName": "你的全名",
"EmailField": "E-mail地址",
"YourEmailAddress": "你的e-mail地址",
"ValidEmailAddressIsRequired": "請輸入有效的e-mail地址",
"HowMayWeHelpYou": "我們如何幫助你",
"SendMessage": "發送消息",
"Success": "成功",
"WeWillReplyYou": "你的消息已經發送! 我們會在短時間內給你答復.",
"GoHome": "回到主頁面",
"CreateLiveDemo": "創建在線演示",
"CreateLiveDemoDescription": "一旦你提交此表單,你將收到一封包含你的演示鏈接的電子郵件.",
"RegisterToTheNewsletter": "註冊到時事簡報以獲取有關ABP.IO的消息,比如新發布的內容.",
"EnterYourEmailOrLogin": "輸入你的e-mail地址來創建你的演示或者使用你的已有賬號<a href=\"{0}\">登錄</a>.",
"ApplicationTemplate": "應用程序模板",

36
abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json

@ -200,11 +200,12 @@
"Leave": "Leave",
"LoginToJoin": "Login to join",
"ToEnd:": "To end:",
"ToStart:": "To start:",
"days": "days",
"hrs": "hrs",
"min": "min",
"sec": "sec",
"Winners:": "Winners:",
"Winners": "Winners",
"To{0}LuckyWinners": "to {0} lucky winner(s)",
"ActiveRaffles": "Active <span class=\"gradient-community\">Raffles</span>",
"UpcomingRaffles": "Upcoming <span class=\"gradient-community\">Raffles</span>",
@ -214,10 +215,39 @@
"RaffleSubscriptionCodeInputMessage": "This raffle requires a registration code. Please enter the registration code below:",
"RaffleSubscriptionCodeInputErrorMessage": "The registration code is incorrect. Please try again.",
"GoodJob!": "Good Job!",
"RaffleJoinSuccessMessage": "You are successfully registered tor the raffle. You will be informed via email if you win the prize!",
"RaffleJoinSuccessMessage": "You are successfully registered for the raffle. You will be informed via email if you win the prize!",
"RaffleLoginAndRegisterMessage": "You should sign in to join a raffle. You can create an account for free if you haven't registered yet.",
"Ok": "Ok",
"SeeDetails": "See Details",
"WaitingForDraw": "Waiting for draw"
"WaitingForTheDraw": "Waiting for the draw",
"AllAttendees": "All Attendees",
"SeeRaffleDetail": "See Raffle Detail",
"SeeRaffle": "See Raffle",
"ParticipationIsComplete!": "Participation is complete!",
"ABPCoreDevelopmentTeam": "ABP Core Development Team",
"RegisterTheEvent": "Register the Event",
"GoToConferencePage": "Go to Conference Page",
"BuyTicket": "Buy Ticket",
"SeeEvent": "See Event",
"PreviousEvents": "<span class=\"text-secondary\">Previous</span> Events",
"OtherLiveEvents": "Other Live Events",
"SponsoredConferences": "Sponsored Conferences",
"SponsoredConferencesDescription": "We are honoring to support .NET communities and events for software developers.",
"UpcomingEvents": "<span class=\"text-info\">Upcoming</span> Events",
"UpcomingCommunityTalkEventDescription": "The live shows, hosted by the ABP Team, are casual sessions full of community content, demos, Q&A, and discussions around what's happening in ABP.",
"UpcomingConferenceEventDescription": "ABP .NET Conference is a virtual event for the .NET Developer community to come together and listen to talks about the .NET world, common software development practices and the open source ABP Framework.",
"LastOneYear": "Last 1 Year",
"AllTimes": "All Times",
"TopContributors": "Top Contributors",
"{0}Posts": "{0} Posts",
"LATESTPOSTS": "LATEST POSTS",
"NoContributorsFound": "No contributors found!",
"LatestPost": "Latest post",
"MEMBERSINCE{0}": "MEMBER SINCE {0}",
"CopyLink": "Copy Link",
"ShareOnTwitter": "Share on Twitter",
"ShareOnLinkedIn": "Share on LinkedIn",
"MoreFrom{0}": "More from {0}",
"SeeAllFrom{0}": "See all from {0}"
}
}

3
abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/en.json

@ -3,6 +3,7 @@
"texts": {
"Buy": "Buy",
"SeeBookDetails": "See Book Details",
"MasteringAbpFrameworkEBookDescription": "This book will help you gain a complete understanding of the framework and modern web application development techniques."
"MasteringAbpFrameworkEBookDescription": "This book will help you gain a complete understanding of the framework and modern web application development techniques.",
"Feedback": "Feedback"
}
}

2
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ar.json

@ -16,7 +16,7 @@
"Tutorial": "الدورة التعليمية",
"UsingCLI": "باستخدام واجهة الأوامر CLI",
"SeeDetails": "انظر التفاصيل",
"AbpShortDescription": "إطار عمل ABP هو بنية أساسية كاملة لإنشاء تطبيقات ويب حديثة باتباع أفضل ممارسات واتفاقيات تطوير البرامج.",
"AbpShortDescription": "يعد ABP Framework بنية تحتية كاملة لإنشاء حلول برمجية ذات بنيات حديثة تعتمد على النظام الأساسي ASP.NET Core.",
"SourceCodeUpper": "الكود الأصل",
"LatestReleaseLogs": "أحدث سجلات الإصدار",
"Infrastructure": "البنية التحتية",

2
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/cs.json

@ -16,7 +16,7 @@
"Tutorial": "Tutorial",
"UsingCLI": "Pomocí CLI",
"SeeDetails": "Zobrazit podrobnosti",
"AbpShortDescription": "ABP Framework je kompletní infrastruktura pro vytváření moderních webových aplikací podle osvědčených postupů a konvencí vývoje softwaru.",
"AbpShortDescription": "ABP Framework je kompletní infrastruktura pro vytváření softwarových řešení s moderními architekturami založenými na platformě ASP.NET Core.",
"SourceCodeUpper": "ZDROJOVÝ KÓD",
"LatestReleaseLogs": "Nejnovější protokoly vydání",
"Infrastructure": "Infrastruktura",

2
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/de.json

@ -16,7 +16,7 @@
"Tutorial": "Lernprogramm",
"UsingCLI": "mit CLI",
"SeeDetails": "Details ansehen",
"AbpShortDescription": "ABP Framework ist eine vollständige Infrastruktur zum Erstellen moderner Webanwendungen unter Befolgung von Best Practices und Konventionen für Softwareentwicklung.",
"AbpShortDescription": "ABP Framework ist eine vollständige Infrastruktur zur Erstellung von Softwarelösungen mit modernen Architekturen basierend auf der ASP.NET Core-Plattform.",
"SourceCodeUpper": "QUELLCODE",
"LatestReleaseLogs": "Akteulle Release",
"Infrastructure": "Infrastrutkur",

2
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en-GB.json

@ -15,7 +15,7 @@
"Tutorial": "Tutorial",
"UsingCLI": "Using CLI",
"SeeDetails": "See Details",
"AbpShortDescription": "ABP Framework is a complete infrastructure to create modern web applications by following the software development best practices and conventions.",
"AbpShortDescription": "ABP Framework is a complete infrastructure for creating software solutions with modern architectures based on the ASP.NET Core platform.",
"SourceCodeUpper": "SOURCE CODE",
"LatestReleaseLogs": "Latest release logs",
"Infrastructure": "Infrastructure",

7
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json

@ -16,7 +16,7 @@
"Tutorial": "Tutorial",
"UsingCLI": "Using CLI",
"SeeDetails": "See Details",
"AbpShortDescription": "ABP Framework is a complete infrastructure to create modern web applications by following the best practices and conventions of software development.",
"AbpShortDescription": "ABP Framework is a complete infrastructure for creating software solutions with modern architectures based on the ASP.NET Core platform.",
"SourceCodeUpper": "SOURCE CODE",
"LatestReleaseLogs": "Latest release logs",
"Infrastructure": "Infrastructure",
@ -174,6 +174,7 @@
"CreateProjectWizard": "This wizard creates a new project from the startup template which is properly configured to jump start your project.",
"TieredOption": "Creates a tiered solution where Web and Http API layers are physically separated. If not checked, creates a layered solution which is less complex and suitable for most scenarios.",
"SeparateIdentityServerOption": "Separates the server side into two applications: The first one is for the identity server and the second one is for your server side HTTP API.",
"SeparateAuthenticationServerOption": "Separates the server side into two applications: The first one is for the authentication server and the second one is for your server side HTTP API.",
"ProgressiveWebApplicationOption": "Specifies the project as Progressive Web Application",
"UseslatestPreVersion": "Uses the latest pre-release version",
"ReadTheDocumentation": "Read The Documentation",
@ -296,6 +297,7 @@
"EnterYouEmailToGetNews": "Enter your email to get the latest news about the ABP Framework",
"Tiered": "Tiered",
"SeparateIdentityServer": "Separate Identity Server",
"SeparateAuthenticationServer": "Separate Authentication Server",
"ProgressiveWebApplication": "Progressive Web Application",
"Preview": "Preview",
"CreateANewSolution": "Create a new solution",
@ -430,6 +432,7 @@
"PackageDetailPage_ManualInstallationDescription2": "Then add the <code>{0}</code> dependency to your <a href=\"https://docs.abp.io/en/abp/latest/Module-Development-Basics\">module class</a> as shown in the following example",
"PackageDetailPage_SeeDocumentation": "<a href=\"{0}\">See the documentation</a> to learn how to use this package in your applications.",
"PackageDetailPage_InstallingUsingPMC": "3: Installing with the Package Manager Console",
"PackageDetailPage_InstallingUsingPMCDescription1": "Open the <strong>Package Manager Console</strong> in Visual Studio (Tools -> Nuget Package Manager -> Package Manager Console) and execute the following command"
"PackageDetailPage_InstallingUsingPMCDescription1": "Open the <strong>Package Manager Console</strong> in Visual Studio (Tools -> Nuget Package Manager -> Package Manager Console) and execute the following command",
"UIOptions": "UI Options"
}
}

2
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/es.json

@ -16,7 +16,7 @@
"Tutorial": "Tutorial",
"UsingCLI": "Usando CLI",
"SeeDetails": "Ver detalles",
"AbpShortDescription": "ABP Framework es una completa infraestructure para crear modernas aplicaciones web que sigue las mejores prácticas y convenciones de desarrollo de software.",
"AbpShortDescription": "ABP Framework es una infraestructura completa para la creación de soluciones de software con arquitecturas modernas basadas en la plataforma ASP.NET Core.",
"SourceCodeUpper": "CÓDIGO FUENTE",
"LatestReleaseLogs": "Últimos registros de lanzamiento",
"Infrastructure": "infraestructura",

2
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fi.json

@ -16,7 +16,7 @@
"Tutorial": "Opetusohjelma",
"UsingCLI": "CLI:n käyttö",
"SeeDetails": "Katso yksityiskohdat",
"AbpShortDescription": "ABP Framework on täydellinen infrastruktuuri nykyaikaisten verkkosovellusten luomiseen noudattamalla ohjelmistokehityksen parhaita käytäntöjä ja käytäntöjä.",
"AbpShortDescription": "ABP Framework on täydellinen infrastruktuuri ohjelmistoratkaisujen luomiseen moderneilla arkkitehtuureilla, jotka perustuvat ASP.NET Core -alustaan.",
"SourceCodeUpper": "LÄHDEKOODI",
"LatestReleaseLogs": "Uusimmat julkaisulokit",
"Infrastructure": "Infrastruktuuri",

2
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fr.json

@ -16,7 +16,7 @@
"Tutorial": "Didacticiel",
"UsingCLI": "Utilisation de la CLI",
"SeeDetails": "Voir les détails",
"AbpShortDescription": "ABP Framework est une infrastructure complète pour créer des applications Web modernes en suivant les meilleures pratiques et conventions de développement logiciel.",
"AbpShortDescription": "ABP Framework est une infrastructure complète pour créer des solutions logicielles avec des architectures modernes basées sur la plateforme ASP.NET Core.",
"SourceCodeUpper": "CODE SOURCE",
"LatestReleaseLogs": "Derniers journaux de version",
"Infrastructure": "Infrastructure",

2
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hi.json

@ -16,7 +16,7 @@
"Tutorial": "ट्यूटोरियल",
"UsingCLI": "सीएलआई का उपयोग करना",
"SeeDetails": "विवरण देखें",
"AbpShortDescription": "एबीपी फ्रेमवर्क सॉफ्टवेयर विकास सर्वोत्तम प्रथाओं और सम्मेलनों का पालन करके आधुनिक वेब एप्लिकेशन बनाने के लिए एक पूर्ण बुनियादी ढांचा है।",
"AbpShortDescription": "ABP फ्रेमवर्क ASP.NET कोर प्लेटफॉर्म पर आधारित आधुनिक आर्किटेक्चर के साथ सॉफ्टवेयर समाधान बनाने के लिए एक संपूर्ण बुनियादी ढांचा है।",
"SourceCodeUpper": "सोर्स कोड",
"LatestReleaseLogs": "नवीनतम रिलीज़ लॉग",
"Infrastructure": "भूमिकारूप व्यवस्था",

2
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hu.json

@ -16,7 +16,7 @@
"Tutorial": "Oktatóanyag",
"UsingCLI": "CLI használata",
"SeeDetails": "Lásd a részleteket",
"AbpShortDescription": "Az ABP Framework egy komplett infrastruktúra modern webalkalmazások létrehozásához, követve a szoftverfejlesztés legjobb gyakorlatait és konvencióit.",
"AbpShortDescription": "Az ABP Framework egy komplett infrastruktúra modern architektúrákkal rendelkező szoftvermegoldások létrehozásához, amelyek az ASP.NET Core platformon alapulnak.",
"SourceCodeUpper": "FORRÁSKÓD",
"LatestReleaseLogs": "Legújabb kiadási naplók",
"Infrastructure": "Infrastruktúra",

2
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/is.json

@ -16,7 +16,7 @@
"Tutorial": "Kennsla",
"UsingCLI": "Nota CLI",
"SeeDetails": "Sjá meira",
"AbpShortDescription": "ABP Framework hefur fullkomna innviði til að búa til nútímaleg vefforrit með því að fylgja bestu starfsháttum og venjum hugbúnaðarþróunar.",
"AbpShortDescription": "ABP Framework er fullkominn innviði til að búa til hugbúnaðarlausnir með nútíma arkitektúr sem byggir á ASP.NET Core pallinum.",
"SourceCodeUpper": "FRUMKÓÐI",
"LatestReleaseLogs": "Nýjustu útgáfuupplýsingar",
"Infrastructure": "Innviðir",

2
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/it.json

@ -16,7 +16,7 @@
"Tutorial": "Tutorial",
"UsingCLI": "Utilizzo della CLI",
"SeeDetails": "Vedi i dettagli",
"AbpShortDescription": "ABP Framework è un'infrastruttura completa per creare applicazioni Web moderne seguendo le migliori pratiche e convenzioni di sviluppo software.",
"AbpShortDescription": "ABP Framework è un'infrastruttura completa per la creazione di soluzioni software con architetture moderne basate sulla piattaforma ASP.NET Core.",
"SourceCodeUpper": "CODICE SORGENTE",
"LatestReleaseLogs": "Ultimi note di rilascio",
"Infrastructure": "Infrastruttura",

2
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/nl.json

@ -16,7 +16,7 @@
"Tutorial": "zelfstudie",
"UsingCLI": "CLI . gebruiken",
"SeeDetails": "Zie de details",
"AbpShortDescription": "ABP Framework is een complete infrastructuur om moderne webapplicaties te creëren door de best practices en conventies voor softwareontwikkeling te volgen.",
"AbpShortDescription": "ABP Framework is een complete infrastructuur voor het creëren van softwareoplossingen met moderne architecturen gebaseerd op het ASP.NET Core-platform.",
"SourceCodeUpper": "BRONCODE",
"LatestReleaseLogs": "Laatste release-logboeken",
"Infrastructure": "Infrastructuur",

2
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pl-PL.json

@ -16,7 +16,7 @@
"Tutorial": "Instruktaż",
"UsingCLI": "Korzystanie z CLI",
"SeeDetails": "Patrz szczegóły",
"AbpShortDescription": "ABP Framework to kompletna infrastruktura do tworzenia nowoczesnych aplikacji internetowych zgodnie z najlepszymi praktykami i konwencjami tworzenia oprogramowania.",
"AbpShortDescription": "ABP Framework to kompletna infrastruktura do tworzenia rozwiązań programowych o nowoczesnych architekturach w oparciu o platformę ASP.NET Core.",
"SourceCodeUpper": "KOD ŹRÓDŁOWY",
"LatestReleaseLogs": "Dzienniki ostatnich wydań",
"Infrastructure": "Infrastruktura",

2
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pt-BR.json

@ -16,7 +16,7 @@
"Tutorial": "Tutorial",
"UsingCLI": "Usando CLI",
"SeeDetails": "Ver detalhes",
"AbpShortDescription": "ABP é uma arquitetura completa e uma forte infraestrutura para criar aplicativos da web modernos! Segue as melhores práticas e convenções para fornecer uma sólida experiência de desenvolvimento.",
"AbpShortDescription": "ABP Framework é uma infraestrutura completa para criação de soluções de software com arquiteturas modernas baseadas na plataforma ASP.NET Core.",
"SourceCodeUpper": "CÓDIGO FONTE",
"LatestReleaseLogs": "Últimos registros de lançamento",
"Infrastructure": "Infraestrutura",

2
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ro-RO.json

@ -16,7 +16,7 @@
"Tutorial": "Tutorial",
"UsingCLI": "Folosind CLI",
"SeeDetails": "Vedeţi detalii",
"AbpShortDescription": "ABP Framework este o infrastructură completă pentru crearea aplicaţiilor moderne web prin folosirea celor mai bune practici şi convenţii de dezvoltare software.",
"AbpShortDescription": "ABP Framework este o infrastructură completă pentru crearea de soluții software cu arhitecturi moderne bazate pe platforma ASP.NET Core.",
"SourceCodeUpper": "COD SURSĂ",
"LatestReleaseLogs": "Cele mai recente jurnale de lansare",
"Infrastructure": "Infrastructura",

2
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ru.json

@ -16,7 +16,7 @@
"Tutorial": "Руководство",
"UsingCLI": "Использование CLI",
"SeeDetails": "Смотрите подробности",
"AbpShortDescription": "ABP Framework - это полная инфраструктура для создания современных веб-приложений с соблюдением лучших практик и соглашений в области разработки программного обеспечения.",
"AbpShortDescription": "ABP Framework — это полноценная инфраструктура для создания программных решений с современной архитектурой на базе платформы ASP.NET Core.",
"SourceCodeUpper": "ИСХОДНЫЙ КОД",
"LatestReleaseLogs": "Журналы последних выпусков",
"Infrastructure": "Инфраструктура",

2
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sk.json

@ -16,7 +16,7 @@
"Tutorial": "Návod",
"UsingCLI": "Pomocou CLI",
"SeeDetails": "Pozri podrobnosti",
"AbpShortDescription": "ABP Framework je kompletná infraštruktúra na vytváranie moderných webových aplikácií podľa najlepších postupov a konvencií vývoja softvéru.",
"AbpShortDescription": "ABP Framework je kompletná infraštruktúra na vytváranie softvérových riešení s modernými architektúrami založenými na platforme ASP.NET Core.",
"SourceCodeUpper": "ZDROJOVÝ KÓD",
"LatestReleaseLogs": "Najnovšie release logy",
"Infrastructure": "Infraštruktúra",

2
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sl.json

@ -16,7 +16,7 @@
"Tutorial": "Vadnica",
"UsingCLI": "Uporaba CLI",
"SeeDetails": "Glejte Podrobnosti",
"AbpShortDescription": "ABP Framework je popolna infrastruktura za ustvarjanje sodobnih spletnih aplikacij z upoštevanjem najboljših praks in konvencij pri razvoju programske opreme.",
"AbpShortDescription": "ABP Framework je celovita infrastruktura za ustvarjanje programskih rešitev s sodobnimi arhitekturami, ki temeljijo na platformi ASP.NET Core.",
"SourceCodeUpper": "IZVORNA KODA",
"LatestReleaseLogs": "Najnovejši dnevniki izdaje",
"Infrastructure": "Infrastruktura",

2
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json

@ -16,7 +16,7 @@
"Tutorial": "Öğretici",
"UsingCLI": "CLI Kullanmak",
"SeeDetails": "Detayları Görüntüle",
"AbpShortDescription": "ABP modern web uygulamaları geliştirmek için eksiksiz bir mimari ve günlü bir altyapıdır! Size SOLID geliştirme tecrübelerini sunmak için en iyi uygulama ve kuralları takip eder.",
"AbpShortDescription": "ABP Framework, ASP.NET Core platformunu temel alan modern mimarilerle yazılım çözümleri oluşturmaya yönelik eksiksiz bir altyapıdır.",
"SourceCodeUpper": "KAYNAK KOD",
"LatestReleaseLogs": "Son release kayıtları",
"Infrastructure": "Altyapı",

2
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/vi.json

@ -16,7 +16,7 @@
"Tutorial": "Hướng dẫn",
"UsingCLI": "Sử dụng CLI",
"SeeDetails": "Xem chi tiết",
"AbpShortDescription": "ABP Framework là một cơ sở hạ tầng hoàn chỉnh để tạo ra các ứng dụng web hiện đại bằng cách tuân theo các quy ước và thực tiễn tốt nhất về phát triển phần mềm.",
"AbpShortDescription": "ABP Framework là cơ sở hạ tầng hoàn chỉnh để tạo ra các giải pháp phần mềm có kiến trúc hiện đại dựa trên nền tảng ASP.NET Core.",
"SourceCodeUpper": "MÃ NGUỒN",
"LatestReleaseLogs": "Nhật ký phát hành mới nhất",
"Infrastructure": "Cơ sở hạ tầng",

2
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json

@ -16,7 +16,7 @@
"Tutorial": "教程",
"UsingCLI": "使用CLI",
"SeeDetails": "见详细",
"AbpShortDescription": "ABP是用于创建现代Web应用程序的完整架构和强大的基础设施! 遵循最佳实践和约定,为你提供SOLID开发经验.",
"AbpShortDescription": "ABP Framework 是一个完整的基础架构,用于创建基于 ASP.NET Core 平台的现代架构的软件解决方案。",
"SourceCodeUpper": "源代码",
"LatestReleaseLogs": "最新发布日志",
"Infrastructure": "基础设施",

2
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hant.json

@ -16,7 +16,7 @@
"Tutorial": "教學",
"UsingCLI": "使用CLI",
"SeeDetails": "看詳細",
"AbpShortDescription": "ABP是用於建立現代Web應用程式的完整架構和強大的基礎設施! 遵循最佳實作和約定,為您提供SOLID開發經驗.",
"AbpShortDescription": "ABP Framework 是一個完整的基礎架構,用於建立基於 ASP.NET Core 平台的現代架構的軟體解決方案。",
"SourceCodeUpper": "原始碼",
"LatestReleaseLogs": "最新發佈日誌",
"Infrastructure": "基礎設施",

2
common.props

@ -18,7 +18,7 @@
<None Include="..\..\NuGet.md" Pack="true" PackagePath="\"/>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1">
<PackageReference Include="Microsoft.SourceLink.GitHub">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>

4
configureawait.props

@ -1,7 +1,7 @@
<Project>
<ItemGroup Condition="'$(Configuration)' == 'Release'">
<PackageReference Include="ConfigureAwait.Fody" Version="3.3.1" PrivateAssets="All" />
<PackageReference Include="Fody" Version="6.6.1">
<PackageReference Include="ConfigureAwait.Fody" PrivateAssets="All" />
<PackageReference Include="Fody">
<PrivateAssets>All</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>

98
docs/en/Blog-Posts/2023-09-23-CMS-Kit-Demo/POST.md

@ -0,0 +1,98 @@
# Unleash the Power of ABP CMS Kit: A Dynamic Content Showcase
We're excited to introduce to you [ABP](https://abp.io/)'s [CMS Kit Module](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Index) – a versatile module that empowers you to build your own dynamic content website with ease. In this introductory blog post, we'll first take a look at the **CMS Kit Module** and then we'll take you on a journey through our **CMS Kit Demo Application**, showcasing the incredible capabilities of this feature-rich module.
## Overview of the CMS Kit Module
At the heart of ABP's CMS Kit Module is a robust Content Management System (CMS) designed to simplify content creation and management. With the CMS Kit, you have the tools to build your own dynamic content website, complete with a range of features tailored to your specific needs. It provides core **building blocks** and fully working sub-systems to create your own website with the CMS features or use the building blocks in your websites for any purpose.
### CMS Kit: The Building Blocks (a.k.a Features)
The following features are currently available and ready to use:
* **Blogging**: Create your blog and publish posts (with markdown / HTML support)
* **Dynamic Pages**: Create pages with dynamic URLs (with markdown / HTML support)
* **Dynamic Menu**: Manage your application’s main menu on the fly
* **Tagging**: Tag any kind of content, like a blog post
* **Comments**: Allow users to comment and discuss in your application
* **Reactions**: Allow users to react to your content using simple smileys
* **Rating**: Reusable component to rate other contents
* **Global Resources**: Dynamically add CSS / JavaScript to your pages or blog posts
* **Dynamic Widgets**: Build widgets and use them in dynamic content, like blog posts
> For more information, please check the [CMS Kit Module documentation](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Index). In the documentation, you can see descriptions for each feature, learn how to install & configure the module, and much more...
### CMS Kit Pro: The Building Blocks (a.k.a Features)
CMS Kit Pro is a part of [ABP Commercial](https://commercial.abp.io/) and provides additional features. The following features are provided by the CMS Kit Pro Module:
* **Contact Form**: Easily add a «contact us» form to your website
* **Newsletter**: Allow users to subscribe to your newsletter (with multiple categories)
* **URL Forwarding**: Create short URLs or redirect users to other pages (for example: [abp.io/dapr](https://abp.io/dapr))
* **Poll**: Create quick polls for your users
* **Page Feedback**: Collect feedbacks from users for your content
> For more information, check the [CMS Kit Pro Module documentation](https://docs.abp.io/en/commercial/latest/modules/cms-kit/index).
## Explore the CMS Kit Demo Application
As the core ABP development team, we've created a sample application to showcase the incredible capabilities of the ABP's CMS Kit Module. You can explore the source code of the application on our [GitHub repository](https://github.com/abpframework/cms-kit-demo) to get a deeper understanding of how the CMS Kit works under the hood. While developing the application, we aimed to build a real-world application and use almost all of the CMS Kit Features.
In the next sections, we will provide a detailed walkthrough of the application and highlight each CMS Kit feature that has been incorporated into it.
### Dynamic Menu Creation with CMS Kit's Menu System
One of the standing out features of the CMS Kit is its [Menu System](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Menus), which allows for the creation and dynamic ordering of application menu items. Say goodbye to static menus; with CMS Kit, you have the power to tailor your menu structure according to your evolving content needs.
You can see the homepage of the application in the following figure:
![](homepage.png)
The application menu items in the navbar are **created & ordered dynamically** with the [CMS Kit's Menu System](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Menus):
![](menu-admin-side.jpg)
### Custom Implementations with Comment & Reaction Features
Our demo application goes a step further by demonstrating custom implementations, such as an **image gallery**, seamlessly integrated with CMS Kit's [Comment](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Comments) & [Reaction](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Reactions) Features:
| Gallery | Detail Page |
|------------------------ |-----------------------|
| ![](image-gallery.jpg) | ![](image-gallery-detail.jpg) |
It's pretty easy to integrate CMS Kit Features such as Comments & Reactions into your existing pages. You can check the [source code of the application](https://github.com/abpframework/cms-kit-demo/blob/main/src/CmsKitDemo/Pages/Gallery/Detail.cshtml) and see how to integrate the features.
### Robust Blogging Capabilities
Blogging has never been easier! With the CMS Kit's [Blogging Feature](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Blogging), you can effortlessly manage your blog content, complete with [Ratings](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Ratings), [Comments](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Comments), [Tags](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Tags), and [Reactions](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Reactions) features as enabled:
| Blog | Blog Post |
|------------------------ |-----------------------|
| ![](blogs.jpg) | ![](blog-detail.jpg) |
You can enable/disable CMS Kit Features per blog on the admin side easily:
![](cmskit-module-features.png)
### Dynamic Pages with Style and Script Integration
*Products* pages showcase the flexibility of the CMS Kit's [Pages Feature](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Pages), allowing for dynamic content creation, style customization, and script integration. Your website can now truly reflect your unique brand and content style.
You can create pages with dynamic URLs on the admin side:
![](pages-admin-side.jpg)
After you have created the page, you can access it via `/{slug}` URL on the public-web side:
![](products-abp-commercial.png)
## What's Next?
Please try the CMS Kit Module now and provide [feedback](https://github.com/abpframework/abp) to help us to build a more effective content management kit!
## Resources
* [CMS Kit Demo: Source Code](https://github.com/abpframework/cms-kit-demo)
* [cms-kit-demo.abp.io](https://cms-kit-demo.abp.io/)
* [CMS Kit Module documentation](https://docs.abp.io/en/abp/latest/Modules/Cms-Kit/Index)
* [CMS Kit Pro Module documentation](https://docs.abp.io/en/commercial/latest/modules/cms-kit/index)

BIN
docs/en/Blog-Posts/2023-09-23-CMS-Kit-Demo/blog-detail.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

BIN
docs/en/Blog-Posts/2023-09-23-CMS-Kit-Demo/blogs.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

BIN
docs/en/Blog-Posts/2023-09-23-CMS-Kit-Demo/cmskit-module-features.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
docs/en/Blog-Posts/2023-09-23-CMS-Kit-Demo/homepage.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

BIN
docs/en/Blog-Posts/2023-09-23-CMS-Kit-Demo/image-gallery-detail.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

BIN
docs/en/Blog-Posts/2023-09-23-CMS-Kit-Demo/image-gallery.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

BIN
docs/en/Blog-Posts/2023-09-23-CMS-Kit-Demo/menu-admin-side.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

BIN
docs/en/Blog-Posts/2023-09-23-CMS-Kit-Demo/pages-admin-side.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

BIN
docs/en/Blog-Posts/2023-09-23-CMS-Kit-Demo/products-abp-commercial.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

80
docs/en/Blog-Posts/2023-10-09 v7_4_Release_Stable/POST.md

@ -0,0 +1,80 @@
# ABP.IO Platform 7.4 Final Has Been Released!
[ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) 7.4 versions have been released today.
## What's New With Version 7.4?
All the new features were already explained in detail in the [7.4 RC Announcement Post](https://blog.abp.io/abp/ABP.IO-Platform-7-4-RC-Has-Been-Published), so no need to go over them again. Check it out for more details.
## Getting Started with 7.4
### Creating New Solutions
You can create a new solution with the ABP Framework version 7.4 by either using the `abp new` command or generating the CLI command on the [get started page](https://abp.io/get-started).
> See the [getting started document](https://docs.abp.io/en/abp/latest/Getting-Started) for more.
### How to Upgrade an Existing Solution
#### Install/Update the ABP CLI
First of all, install the ABP CLI or upgrade it to the latest version.
If you haven't installed it yet:
```bash
dotnet tool install -g Volo.Abp.Cli
```
To update the existing CLI:
```bash
dotnet tool update -g Volo.Abp.Cli
```
#### Upgrading Existing Solutions with the ABP Update Command
[ABP CLI](https://docs.abp.io/en/abp/latest/CLI) provides a handy command to update all the ABP related NuGet and NPM packages in your solution with a single command:
```bash
abp update
```
Run this command in the root folder of your solution.
## Migration Guides
There are breaking changes in this version that may affect your application.
Please see the following migration documents, if you are upgrading from v7.3:
* [ABP Framework 7.3 to 7.4 Migration Guide](https://docs.abp.io/en/abp/7.4/Migration-Guides/Abp-7_4)
## Community News
### ABP Community Talks 2023.7: Build Your Content Management System with .NET
We as the ABP team organized the [**ABP Community Talks 2023.7: Build Your Content Management System with .NET**](https://community.abp.io/events/build-your-own-cms-with-.net-a-first-look-at-abps-content-management-system-kit-3nfvm9ix) event to explore the depths of the CMS Kit Module and its real-world applications. The talk delved into the intricacies of the CMS Kit Module, providing valuable insights into its features and functionalities. Attendees had the opportunity to witness the module in action through live demonstrations and interactive Q&A sessions.
For those who missed the live session, you can catch up on all the enriching discussions and demonstrations by watching the record below 👇:
<iframe width="560" height="315" src="https://www.youtube.com/embed/S9__Hnu29tI?si=vrLWLI3NQX2eaSMD" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
### BASTA! Mainz 2023
![](basta-mainz.png)
BASTA! Mainz 2023 has wrapped up, and what an extraordinary journey it has been! We have shared our impressions, highlights, and the incredible impact it had on the tech community in Germany and beyond in a blog post, which you can find at [https://blog.abp.io/abp/BASTA-Mainz-2023-What-a-Blast-in-Germany](https://blog.abp.io/abp/BASTA-Mainz-2023-What-a-Blast-in-Germany).
### New ABP Community Posts
There are exciting articles contributed by the ABP community as always. I will highlight some of them here:
* [Moving Background Job Execution To A Separate Application](https://community.abp.io/posts/moving-background-job-execution-to-a-separate-application-my9cgo9a) by [liangshiwei](https://github.com/RealLowis).
* [Cascading Option Loading with Extensions System in ABP Angular](https://community.abp.io/posts/cascading-option-loading-with-extensions-system-in-abp-angular-gcxgp0v9) by [Masum Ulu](https://twitter.com/masumulu).
* [How to use domain-based tenant resolver in ABP with Angular and OpenIddict](https://community.abp.io/posts/how-to-use-domainbased-tenant-resolver-in-abp-with-angular-and-openiddict-v9y8da7v) by [Mahmut Gündoğdu](https://twitter.com/MahmutGundogdu).
Thanks to the ABP Community for all the content they have published. You can also [post your ABP-related (text or video) content](https://community.abp.io/articles/submit) to the ABP Community.
## About the Next Version
The next feature version will be 8.0. You can follow the [release planning here](https://github.com/abpframework/abp/milestones). Please [submit an issue](https://github.com/abpframework/abp/issues/new) if you have any problems with this version.

BIN
docs/en/Blog-Posts/2023-10-09 v7_4_Release_Stable/abp-community-talk.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

BIN
docs/en/Blog-Posts/2023-10-09 v7_4_Release_Stable/basta-mainz.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 KiB

BIN
docs/en/Blog-Posts/2023-10-09 v7_4_Release_Stable/cover-image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 233 KiB

236
docs/en/Community-Articles/2023-09-20-Moving-Background-Job-Execution-To-A-Separate-Application/POST.md

@ -0,0 +1,236 @@
# Moving Background Job Execution To A Separate Application
In this article, I will show you how to move the background job execution to a separate application.
Here are some benefits of doing this:
* If your background jobs consume high system resources (CPU, RAM or Disk), then you can deploy that background application to a dedicated server so it won't affect your application's performance.
* You can scale your background job application independently from your web application. For example, you can deploy multiple instances of your background job application to a Kubernetes cluster and scale it easily.
Here are some disadvantages of doing this:
* You need to deploy and maintain at least two applications instead of one.
* You need to implement a mechanism to share the common code between your applications. For example, you can create a shared project and add it to your applications as a project reference.
## Source code
You can find the source code of the application at [abpframework/abp-samples](https://github.com/abpframework/abp-samples/tree/master/SeparateBackgroundJob).
You can check the PR to see the changes step by step: [abpframework/abp-samples#250](https://github.com/abpframework/abp-samples/pull/250)
## Creating the Web Application
First, we need to create a new web application using the ABP CLI:
```bash
abp new SeparateBackgroundJob -t app
```
* Create a shared project named `SeparateBackgroundJob.Common.Shared` to share the `BackgroundJob` and `BackgroundJobArgs` classes between the web and job executor applications.
* Install the `Volo.Abp.BackgroundJobs.Abstractions` package to the `SeparateBackgroundJob.Common.Shared` project.
Add the `SeparateBackgroundJobCommonSharedModule` class to the `SeparateBackgroundJob.Common.Shared` project:
```csharp
[DependsOn(typeof(AbpBackgroundJobsAbstractionsModule))]
public class SeparateBackgroundJobCommonSharedModule : AbpModule
{
}
```
Add the `MyReportJob` and `MyReportJobArgs` classes to the `SeparateBackgroundJob.Common.Shared` project:
```csharp
public class MyReportJob : AsyncBackgroundJob<MyReportJobArgs>, ITransientDependency
{
public override Task ExecuteAsync(MyReportJobArgs args)
{
Logger.LogInformation("Executing MyReportJob with args: {0}", args.Content);
return Task.CompletedTask;
}
}
public class MyReportJobArgs
{
public string? Content { get; set; }
}
```
Add the `SeparateBackgroundJob.Common.Shared` project reference to the `SeparateBackgroundJob.Domain` project and add `SeparateBackgroundJobCommonSharedModule` to the `DependsOn` attribute of the `SeparateBackgroundJobDomainModule` class:
```csharp
[DependsOn(
typeof(SeparateBackgroundJobDomainSharedModule),
typeof(AbpAuditLoggingDomainModule),
typeof(AbpBackgroundJobsDomainModule),
typeof(AbpFeatureManagementDomainModule),
typeof(AbpIdentityDomainModule),
typeof(AbpOpenIddictDomainModule),
typeof(AbpPermissionManagementDomainOpenIddictModule),
typeof(AbpPermissionManagementDomainIdentityModule),
typeof(AbpSettingManagementDomainModule),
typeof(AbpTenantManagementDomainModule),
typeof(AbpEmailingModule),
typeof(SeparateBackgroundJobCommonSharedModule) //Add this line
)]
public class SeparateBackgroundJobDomainModule : AbpModule
```
Open the `Index.cshtml` and replace the content with the following code:
```csharp
@page
@using Microsoft.AspNetCore.Mvc.Localization
@using SeparateBackgroundJob.Localization
@using Volo.Abp.Users
@model SeparateBackgroundJob.Web.Pages.IndexModel
@inject IHtmlLocalizer<SeparateBackgroundJobResource> L
@inject ICurrentUser CurrentUser
@section styles {
<abp-style src="/Pages/Index.css"/>
}
@section scripts {
<abp-script src="/Pages/Index.js"/>
}
<div class="container">
<abp-card>
<abp-card-header>
<abp-card-title>
Add NEW BACKGROUND JOB
</abp-card-title>
</abp-card-header>
<abp-card-body>
<form id="NewItemForm" method="post" class="row row-cols-lg-auto g-3 align-items-center">
<div class="col-12">
<div class="input-group">
<input id="ReportContent" required name="ReportContent" type="text" class="form-control" placeholder="enter text...">
</div>
</div>
<div class="col-12">
<button type="submit" class="btn btn-primary">Add</button>
</div>
</form>
</abp-card-body>
</abp-card>
</div>
```
Open the `Index.cshtml.cs` and replace the content with the following code:
```csharp
public class IndexModel : SeparateBackgroundJobPageModel
{
private readonly IBackgroundJobManager _backgroundJobManager;
[BindProperty(SupportsGet = true)]
public string? ReportContent { get; set; }
public IndexModel(IBackgroundJobManager backgroundJobManager)
{
_backgroundJobManager = backgroundJobManager;
}
public void OnGet()
{
}
public async Task OnPostAsync()
{
await _backgroundJobManager.EnqueueAsync(new MyReportJobArgs
{
Content = ReportContent
});
Alerts.Success("Job is queued!");
}
}
```
Run the application and navigate to the home page. You should see the following page:
![1](images/1.png)
When you enter some text and click the **Add** button, the job will be queued and executed in the web application:
## Creating the Console Application
Now we split the background job execution to a separate console application.
Open the `SeparateBackgroundJobWebModule` class to disable the background job execution in the web application:
```csharp
public class SeparateBackgroundJobWebModule : AbpModule
{
....
public override void ConfigureServices(ServiceConfigurationContext context)
{
...
//Disable background job execution in the web application
Configure<AbpBackgroundJobOptions>(options =>
{
options.IsJobExecutionEnabled = false;
});
}
...
}
```
* Create a new console application using the ABP CLI:
```bash
abp new BackgroundJobExecutor -t console
```
* Add the `BackgroundJobExecutor` project to the solution of the web application.
* Add the `SeparateBackgroundJob.Common.Shared` project reference to the `BackgroundJobExecutor` project.
* Install the `Volo.Abp.BackgroundJobs.EntityFrameworkCore` and `Volo.Abp.EntityFrameworkCore.SqlServer` packages to the `BackgroundJobExecutor` project.
Update the `BackgroundJobExecutorModule` class as follows:
```csharp
[DependsOn(
typeof(AbpAutofacModule),
typeof(AbpBackgroundJobsEntityFrameworkCoreModule),
typeof(AbpEntityFrameworkCoreSqlServerModule),
typeof(SeparateBackgroundJobCommonSharedModule)
)]
public class BackgroundJobExecutorModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpDbContextOptions>(options =>
{
options.UseSqlServer();
});
}
....
}
```
Open the `appsettings.json` file to configure the [connection string](https://docs.abp.io/en/abp/latest/Connection-Strings#configure-the-connection-strings):
```json
{
"ConnectionStrings": {
"AbpBackgroundJobs": "Server=(LocalDb)\\MSSQLLocalDB;Database=SeparateBackgroundJob;Trusted_Connection=True"
}
}
```
> You must use the same connection string for the web application, `AbpBackgroundJobs` is the default connection string name for the background job module.
The solution structure should look like this:
![solution](images/solution.png)
Now, run the web and console application. When you enter some text and click the **Add** button, the job will be queued and executed in the console application:
![2](images/2.png)

BIN
docs/en/Community-Articles/2023-09-20-Moving-Background-Job-Execution-To-A-Separate-Application/images/1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

BIN
docs/en/Community-Articles/2023-09-20-Moving-Background-Job-Execution-To-A-Separate-Application/images/2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 KiB

BIN
docs/en/Community-Articles/2023-09-20-Moving-Background-Job-Execution-To-A-Separate-Application/images/solution.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

114
docs/en/Community-Articles/2023-10-09-How-to-Upload-and-Download-Files-in-the-ABP-Framework-using-Angular/POST.md

@ -0,0 +1,114 @@
# How to Upload and Download Files in the ABP Framework using Angular
In this article, I will describe how to upload and download files with the ABP framework using Angular as the UI template, most of the code is compatible with all template types. In this article, I just gather some information in one post. Nothing is new. I Googled how to manage files in ABP and I didn't find anything. So I decided write a simple article as an answer to this question.
### Creating App Service.
An empty AppService that uses `IRemoteStreamContent` was created. ABP describes the IRemoteStreamContent as:
> ABP Framework provides a special type, IRemoteStreamContent to be used to get or return streams in the application services.
```csharp
public class StorageAppService: AbpFileUploadDownloadDemoAppService // <- a inherited from ApplicationService. `ProjectName`+'AppService'.
{
public Guid UploadFile(IRemoteStreamContent file)
{
Stream fs = file.GetStream();
//save your file with guid or implement your logic
var id = Guid.NewGuid();
var filePath = "Insert your file path here/" + id.ToString();
using var stream = new FileStream(filePath, FileMode.Create);
fs.CopyTo(stream);
return id;
}
public IRemoteStreamContent DownloadFile(Guid FileName)
{
//find your file with guid or implement your logic
var filePath = "Insert your file path here" ;
var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
return new RemoteStreamContent(fs);
}
}
```
When you want to upload a file, app service param must be IRemoteStreamContent or RemoteStreamContent. You should be able to access a file data with the getStream method in the AppService. After that, There is no ABP spesific code. It's a c# spesific class. You can save a file system, move somewhere or serilize as base64 etc.
when you want to download a file, A method should return IRemoteStreamContent or RemoteStreamContent.
RemoteStreamContent gets a required parameter. The parameter type must be Stream. (FileStream, MemoryStream, Custom etc...)
For more information please read the topic in the Documentation: https://docs.abp.io/en/abp/latest/Application-Services#working-with-streams
### Creating Angular proxy services
ABP creates proxy files with the `abp generate-proxy -t ng` command. let's check the code.
```javascript
uploadFileByFile = (file: FormData, config?: Partial<Rest.Config>) =>
this.restService.request<any, string>({
method: 'POST',
responseType: 'text',
url: '/api/app/storage/upload-file',
body: file,
},
{ apiName: this.apiName,...config });
```
The function name is a little bit weird but let's focus the first parameter. The type of file param is `FormData`. FormData is a native object in JavaSript Web API. See the details. https://developer.mozilla.org/en-US/docs/Web/API/FormData .
How to use the `uploadFileByFile` function.
```javascript
const myFormData = new FormData();
myFormData.append('file', inputFile); // file must match variable name in AppService
storageService.uploadFileByFile(myFormData).subscribe()
```
The inputFile type is File. In most cases it comes from the `<input type="File">`, File belongs to the Javacsript Web Api. see the details https://developer.mozilla.org/en-US/docs/Web/API/File
Let's continue with "download"
```javascript
downloadFileByFileName = (FileName: string, config?: Partial<Rest.Config>) =>
this.restService.request<any, Blob>({
method: 'POST',
responseType: 'blob',
url: '/api/app/storage/download-file',
params: { fileName: FileName },
},
{ apiName: this.apiName,...config });
```
The return type of function is Blob. Blob is another javacript object. See the details: https://developer.mozilla.org/en-US/docs/Web/API/Blob.
Now our code is not ABP Spesific. It is just javascript code. If you don't want to save the blob, here I asked my best AI friend ChatGPT. `Hello, chat! The programming lang is javascript. My variable type is Blob. How do I save file to client's machine?`
Our the gifted friend gives us the code
```javascript
function saveBlobToFile(blob, fileName) {
// Create a blob URL
const blobURL = window.URL.createObjectURL(blob);
// Create an anchor element for the download
const a = document.createElement("a");
a.href = blobURL;
a.download = fileName || 'download.dat'; // Provide a default file name if none is provided
// Append the anchor to the document
document.body.appendChild(a);
// Simulate a click on the anchor to initiate the download
a.click();
// Clean up: remove the anchor and revoke the blob URL
document.body.removeChild(a);
window.URL.revokeObjectURL(blobURL);
}
// Usage example
const blob = new Blob(['Hello, World!'], { type: 'text/plain' });
saveBlobToFile(blob, 'hello.txt');
```

2
docs/en/Data-Filtering.md

@ -227,7 +227,7 @@ protected override Expression<Func<TEntity, bool>> CreateFilterExpression<TEntit
e => !IsActiveFilterEnabled || EF.Property<bool>(e, "IsActive");
expression = expression == null
? isActiveFilter
: CombineExpressions(expression, isActiveFilter);
: QueryFilterExpressionHelper.CombineExpressions(expression, isActiveFilter);
}
return expression;

6
docs/en/Dependency-Injection.md

@ -1,12 +1,12 @@
# Dependency Injection
ABP's Dependency Injection system is developed based on Microsoft's [dependency injection extension](https://medium.com/volosoft/asp-net-core-dependency-injection-best-practices-tips-tricks-c6e9c67f9d96) library (Microsoft.Extensions.DependencyInjection nuget package). So, it's documentation is valid in ABP too.
ABP's Dependency Injection system is developed based on Microsoft's [dependency injection extension](https://medium.com/volosoft/asp-net-core-dependency-injection-best-practices-tips-tricks-c6e9c67f9d96) library (Microsoft.Extensions.DependencyInjection nuget package). So, its documentation is valid in ABP too.
> While ABP has no core dependency to any 3rd-party DI provider. However, it's required to use a provider that supports dynamic proxying and some other advanced features to make some ABP features properly work. Startup templates come with [Autofac](https://autofac.org/) installed. See [Autofac integration](Autofac-Integration.md) document for more information.
## Modularity
Since ABP is a modular framework, every module defines it's own services and registers via dependency injection in it's own separate [module class](Module-Development-Basics.md). Example:
Since ABP is a modular framework, every module defines its own services and registers via dependency injection in its own separate [module class](Module-Development-Basics.md). Example:
````C#
public class BlogModule : AbpModule
@ -210,7 +210,7 @@ public class TaxAppService : ApplicationService
}
````
``TaxAppService`` gets ``ITaxCalculator`` in it's constructor. The dependency injection system automatically provides the requested service at runtime.
``TaxAppService`` gets ``ITaxCalculator`` in its constructor. The dependency injection system automatically provides the requested service at runtime.
Constructor injection is preffered way of injecting dependencies to a class. In that way, the class can not be constructed unless all constructor-injected dependencies are provided. Thus, the class explicitly declares it's required services.

53
docs/en/Deployment/Configuring-OpenIddict.md

@ -2,61 +2,46 @@
This document introduces how to configure `OpenIddict` in the `AuthServer` project.
There are different configurations in the `AuthServer` project for `Development` and `Production` environment.
There are different configurations in the `AuthServer` project for the `Development` and `Production` environments.
````csharp
public override void PreConfigureServices(ServiceConfigurationContext context)
{
var hostingEnvironment = context.Services.GetHostingEnvironment();
// Development environment
if (hostingEnvironment.IsDevelopment())
{
PreConfigure<AbpOpenIddictAspNetCoreOptions>(options =>
{
// This is default value, you can remove this line.
options.AddDevelopmentEncryptionAndSigningCertificate = true;
});
}
// Production or Staging environment
if (!hostingEnvironment.IsDevelopment())
{
PreConfigure<AbpOpenIddictAspNetCoreOptions>(options =>
{
options.AddDevelopmentEncryptionAndSigningCertificate = false;
});
PreConfigure<OpenIddictServerBuilder>(builder =>
{
builder.AddSigningCertificate(GetSigningCertificate(hostingEnvironment));
builder.AddEncryptionCertificate(GetSigningCertificate(hostingEnvironment));
//...
});
PreConfigure<AbpOpenIddictAspNetCoreOptions>(options =>
{
options.AddDevelopmentEncryptionAndSigningCertificate = false;
});
PreConfigure<OpenIddictServerBuilder>(serverBuilder =>
{
serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "00000000-0000-0000-0000-000000000000");
});
}
}
private X509Certificate2 GetSigningCertificate(IWebHostEnvironment hostingEnv)
{
return new X509Certificate2(Path.Combine(hostingEnv.ContentRootPath, "authserver.pfx"), "00000000-0000-0000-0000-000000000000");
}
````
## Development Environment
We've enabled `AddDevelopmentEncryptionAndSigningCertificate` by default on development environment, It registers (and generates if necessary) a user-specific development encryption/development signing certificate. This is a certificate used for signing and encrypting the tokens and for **development environment only**.
We've enabled `AddDevelopmentEncryptionAndSigningCertificate` by default on the development environment. It registers (and generates if necessary) a user-specific development encryption/development signing certificate. This is a certificate used for signing and encrypting the tokens and for **development environment only**.
`AddDevelopmentEncryptionAndSigningCertificate` cannot be used in applications deployed on IIS or Azure App Service: trying to use them on IIS or Azure App Service will result in an exception being thrown at runtime (unless the application pool is configured to [load a user profile](https://learn.microsoft.com/en-us/iis/manage/configuring-security/application-pool-identities#user-profile)).
To avoid that, consider creating self-signed certificates and storing them in the X.509 certificates storage of the host machine(s). This is the way we do it in production environment.
To avoid that, consider creating self-signed certificates and storing them in the X.509 certificates storage of the host machine(s). This is the way we do it in the production environment.
## Production Environment
We've disabled `AddDevelopmentEncryptionAndSigningCertificate` in production environment and tried to setup signing and encrypting certificates using `authserver.pfx`.
We've disabled `AddDevelopmentEncryptionAndSigningCertificate` in the production environment and tried to setup signing and encrypting certificates using `openiddict.pfx` file.
You can use the `dotnet dev-certs https -v -ep authserver.pfx -p 00000000-0000-0000-0000-000000000000` command to generate the `authserver.pfx` certificate.
You can use the `dotnet dev-certs https -v -ep openiddict.pfx -p 00000000-0000-0000-0000-000000000000` command to generate the `authserver.pfx` certificate.
> `00000000-0000-0000-0000-000000000000` is the password of the certificate, you can change it to any password you want.
> Also, please remember to copy `authserver.pfx` to the [Content Root Folder](https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.hosting.ihostingenvironment.contentrootpath?view=aspnetcore-7.0) of the `AuthServer` website.
> Also, please remember to copy `openiddict.pfx` to the [Content Root Folder](https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.hosting.ihostingenvironment.contentrootpath?view=aspnetcore-7.0) of the `AuthServer` website.
> It is recommended to use **two** RSA certificates, distinct from the certificate(s) used for HTTPS: one for encryption, one for signing.
For more information, please refer to: https://documentation.openiddict.com/configuration/encryption-and-signing-credentials.html#registering-a-certificate-recommended-for-production-ready-scenarios

1
docs/en/Deployment/Index.md

@ -6,6 +6,7 @@ However, there are some topics that you should care about when you are deploying
## Guides
* [Configuring SSL certificate(HTTPS)](SSL.md): Explains how to configure SSL certificate(HTTPS) for your application.
* [Configuring for OpenIddict](Configuring-OpenIddict.md): Notes for some essential configurations for OpenIddict.
* [Configuring for Production](Configuring-Production.md): Notes for some essential configurations for production environments.
* [Optimization for Production](Optimizing-Production.md): Tips and suggestions for optimizing your application on production environments.

34
docs/en/Deployment/SSL.md

@ -0,0 +1,34 @@
# Configuring Configuring SSL certificate(HTTPS)
A website needs an SSL certificate in order to keep user data secure, verify ownership of the website, prevent attackers from creating a fake version of the site, and gain user trust.
This document introduces how to get and use SSL certificate(HTTPS) for your application.
## Get a SSL Certificate from a Certificate Authority
You can get a SSL certificate from a certificate authority (CA) such as [Let's Encrypt](https://letsencrypt.org/) or [Cloudflare](https://www.cloudflare.com/learning/ssl/what-is-an-ssl-certificate/) and so on.
Once you have a certificate, you need to configure your web server to use it. The following references show how to configure your web server to use a certificate.
* [Host ASP.NET Core on Linux with Apache: HTTPS configuration](https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-apache)
* [Host ASP.NET Core on Linux with Nginx: HTTPS configuration](https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx)
* [How to Set Up SSL on IIS 7 or later](https://learn.microsoft.com/en-us/iis/manage/configuring-security/how-to-set-up-ssl-on-iis)
## Create a Self-Signed Certificate
You can create a self-signed certificate for testing purposes or internal use.
There is an article about [how to create a self-signed certificate](https://learn.microsoft.com/en-us/dotnet/core/additional-tools/self-signed-certificates-guide), If you are using IIS, you can use the following this document to [obtain a Certificate](https://learn.microsoft.com/en-us/iis/manage/configuring-security/how-to-set-up-ssl-on-iis#obtain-a-certificate)
## Common Problems
### The remote certificate is invalid because of errors in the certificate chain: UntrustedRoot
This error may occur when using IIS. You need to trust your certificate by `Manage computer certificates`.
## References
* [ABP commercial IIS Deployment](https://docs.abp.io/en/commercial/latest/startup-templates/application/deployment-iis)
* [HTTPS in ASP.NET Core](https://learn.microsoft.com/en-us/aspnet/core/security/enforcing-ssl)
* [Let's Encrypt](https://letsencrypt.org/getting-started)
* [Cloudflare's Free SSL / TLS](https://www.cloudflare.com/application-services/products/ssl/)

82
docs/en/Distributed-Event-Bus.md

@ -438,19 +438,23 @@ Enabling the event outbox and inbox systems require a few manual steps for your
### Enabling event outbox
Open your `DbContext` class (EF Core or MongoDB), implement the `IHasEventOutbox` interface. You should end up by adding a `DbSet` property into your `DbContext` class:
Enabling event outbox depends on your database provider.
#### Enabling event outbox for Entity Framework Core
Open your `DbContext` class, implement the `IHasEventOutbox` interface. You should end up by adding a `DbSet` property into your `DbContext` class:
```csharp
public DbSet<OutgoingEventRecord> OutgoingEvents { get; set; }
```
Add the following lines inside the `OnModelCreating` method of your `DbContext` class (only for EF Core):
Add the following lines inside the `OnModelCreating` method of your `DbContext` class:
```csharp
builder.ConfigureEventOutbox();
```
For EF Core, use the standard `Add-Migration` and `Update-Database` commands to apply changes into your database (you can skip this step for MongoDB). If you want to use the command-line terminal, run the following commands in the root directory of the database integration project:
Use the standard `Add-Migration` and `Update-Database` commands to apply changes into your database. If you want to use the command-line terminal, run the following commands in the root directory of the database integration project:
```bash
dotnet ef migrations add "Added_Event_Outbox"
@ -469,23 +473,55 @@ Configure<AbpDistributedEventBusOptions>(options =>
});
````
> **IMPORTANT**: Outbox sending service uses distributed locks to ensure only a single instance of your application consumes the outbox queue concurrently. Distributed locking key should be unique per database. The `config` object (in the preceding code example) has a `DatabaseName` property, which is used in the distributed lock key to ensure the uniqueness. `DatabaseName` is automatically set by the `UseDbContext` method, getting the database name from the `ConnectionStringName` attribute of the `YourDbContext` class. So, if you have multiple databases in your system, ensure that you use the same connection string name for the same database, but different connection string names for different databases. If you can't ensure that, you can manually set `config.DatabaseName` (after the `UseDbContext` line) to ensure that uniqueness.
#### Enabling event outbox for MongoDB
Open your `DbContext` class, implement the `IHasEventOutbox` interface. You should end up by adding a `IMongoCollection` property into your `DbContext` class:
```csharp
public IMongoCollection<OutgoingEventRecord> OutgoingEvents => Collection<OutgoingEventRecord>();
```
Add the following lines inside the `CreateModel` method of your `DbContext` class:
```csharp
modelBuilder.ConfigureEventOutbox();
```
Finally, write the following configuration code inside the `ConfigureServices` method of your [module class](Module-Development-Basics.md) (replace `YourDbContext` with your own `DbContext` class):
````csharp
Configure<AbpDistributedEventBusOptions>(options =>
{
options.Outboxes.Configure(config =>
{
config.UseMongoDbContext<MyProjectNameDbContext>();
});
});
````
#### Distributed Locking for Outbox
> **IMPORTANT**: Outbox sending service uses distributed locks to ensure only a single instance of your application consumes the outbox queue concurrently. Distributed locking key should be unique per database. The `config` object (in the `options.Outboxes.Configure(...)` method) has a `DatabaseName` property, which is used in the distributed lock key to ensure the uniqueness. `DatabaseName` is automatically set by the `UseDbContext` method, getting the database name from the `ConnectionStringName` attribute of the `YourDbContext` class. So, if you have multiple databases in your system, ensure that you use the same connection string name for the same database, but different connection string names for different databases. If you can't ensure that, you can manually set `config.DatabaseName` (after the `UseDbContext` line) to ensure that uniqueness.
### Enabling event inbox
Open your `DbContext` class (EF Core or MongoDB), implement the `IHasEventInbox` interface. You should end up by adding a `DbSet` property into your `DbContext` class:
Enabling event inbox depends on your database provider.
#### Enabling event inbox for Entity Framework Core
Open your `DbContext` class, implement the `IHasEventInbox` interface. You should end up by adding a `DbSet` property into your `DbContext` class:
```csharp
public DbSet<IncomingEventRecord> IncomingEvents { get; set; }
```
Add the following lines inside the `OnModelCreating` method of your `DbContext` class (only for EF Core):
Add the following lines inside the `OnModelCreating` method of your `DbContext` class:
```csharp
builder.ConfigureEventInbox();
```
For EF Core, use the standard `Add-Migration` and `Update-Database` commands to apply changes into your database (you can skip this step for MongoDB). If you want to use the command-line terminal, run the following commands in the root directory of the database integration project:
Use the standard `Add-Migration` and `Update-Database` commands to apply changes into your database. If you want to use the command-line terminal, run the following commands in the root directory of the database integration project:
```bash
dotnet ef migrations add "Added_Event_Inbox"
@ -504,7 +540,35 @@ Configure<AbpDistributedEventBusOptions>(options =>
});
````
**IMPORTANT**: Inbox processing service uses distributed locks to ensure only a single instance of your application consumes the inbox queue concurrently. Distributed locking key should be unique per database. The `config` object (in the preceding code example) has a `DatabaseName` property, which is used in the distributed lock key to ensure the uniqueness. `DatabaseName` is automatically set by the `UseDbContext` method, getting the database name from the `ConnectionStringName` attribute of the `YourDbContext` class. So, if you have multiple databases in your system, ensure that you use the same connection string name for the same database, but different connection string names for different databases. If you can't ensure that, you can manually set `config.DatabaseName` (after the `UseDbContext` line) to ensure that uniqueness.
#### Enabling event inbox for MongoDB
Open your `DbContext` class, implement the `IHasEventInbox` interface. You should end up by adding a `IMongoCollection` property into your `DbContext` class:
```csharp
public IMongoCollection<IncomingEventRecord> IncomingEvents => Collection<IncomingEventRecord>();
```
Add the following lines inside the `CreateModel` method of your `DbContext` class:
```csharp
modelBuilder.ConfigureEventInbox();
```
Finally, write the following configuration code inside the `ConfigureServices` method of your [module class](Module-Development-Basics.md) (replace `YourDbContext` with your own `DbContext` class):
````csharp
Configure<AbpDistributedEventBusOptions>(options =>
{
options.Inboxes.Configure(config =>
{
config.UseMongoDbContext<MyProjectNameDbContext>();
});
});
````
#### Distributed Locking for Inbox
> **IMPORTANT**: Inbox processing service uses distributed locks to ensure only a single instance of your application consumes the inbox queue concurrently. Distributed locking key should be unique per database. The `config` object (in the `options.Inboxes.Configure(...)` method) has a `DatabaseName` property, which is used in the distributed lock key to ensure the uniqueness. `DatabaseName` is automatically set by the `UseDbContext` method, getting the database name from the `ConnectionStringName` attribute of the `YourDbContext` class. So, if you have multiple databases in your system, ensure that you use the same connection string name for the same database, but different connection string names for different databases. If you can't ensure that, you can manually set `config.DatabaseName` (after the `UseDbContext` line) to ensure that uniqueness.
### Additional Configuration
@ -529,7 +593,7 @@ Here, the following properties are available on the `config` object:
* `IsSendingEnabled` (default: `true`): You can set to `false` to disable sending outbox events to the actual event bus. If you disable this, events can still be added to outbox, but not sent. This can be helpful if you have multiple applications (or application instances) writing to outbox, but use one of them to send the events.
* `Selector`: A predicate to filter the event (ETO) types to be used for this configuration. Should return `true` to select the event. It selects all the events by default. This is especially useful if you want to ignore some ETO types from the outbox, or want to define named outbox configurations and group events within these configurations. See the *Named Configurations* section.
* `ImplementationType`: Type of the class that implements the database operations for the outbox. This is normally set when you call `UseDbContext` as shown before. See *Implementing a Custom Outbox/Inbox Database Provider* section for advanced usages.
* `DatabaseName`: Unique database name for the database that is used for this outbox configuration. See the **IMPORTANT** paragraph at the end of the *Enabling event outbox* section.
* `DatabaseName`: Unique database name for the database that is used for this outbox configuration. See the **IMPORTANT** paragraph at the end of the *Enabling event outbox/inbox* sections.
#### Inbox configuration

30
docs/en/Getting-Started-Running-Solution-Single-Layer.md

@ -50,7 +50,37 @@ Before running the application, you need to create the database and seed the ini
dotnet run --migrate-database
```
## Before Running the Application
### Installing the Client-Side Packages
[ABP CLI](CLI.md) runs the `abp install-libs` command behind the scenes to install the required NPM packages for your solution while creating the application.
However, sometimes this command might need to be manually run. For example, you need to run this command, if you have cloned the application, or the resources from *node_modules* folder didn't copy to *wwwroot/libs* folder, or if you have added a new client-side package dependency to your solution.
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.
{{if UI=="Blazor" || UI=="BlazorServer"}}
### Bundling and Minification
`abp bundle` command offers bundling and minification support for client-side resources (JavaScript and CSS files) for Blazor projects. This command automatically run when you create a new solution with the [ABP CLI](CLI.md).
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](UI/Blazor/Global-Scripts-Styles.md).
{{end}}
## Run the Application

36
docs/en/Getting-Started-Running-Solution.md

@ -89,11 +89,43 @@ Right click to the `.DbMigrator` project and select **Set as StartUp Project**
{{ end }}
## Before Running the Application
### Installing the Client-Side Packages
[ABP CLI](CLI.md) runs the `abp install-libs` command behind the scenes to install the required NPM packages for your solution while creating the application.
However, sometimes this command might need to be manually run. For example, you need to run this command, if you have cloned the application, or the resources from *node_modules* folder didn't copy to *wwwroot/libs* folder, or if you have added a new client-side package dependency to your solution.
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.
{{if UI=="Blazor" || UI=="BlazorServer"}}
### Bundling and Minification
`abp bundle` command offers bundling and minification support for client-side resources (JavaScript and CSS files) for Blazor projects. This command automatically run when you create a new solution with the [ABP CLI](CLI.md).
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](UI/Blazor/Global-Scripts-Styles.md).
{{end}}
## Run the Application
{{ if UI == "MVC" || UI == "BlazorServer" }}
> Before starting the application, run `abp install-libs` command in your Web directory to restore the client-side libraries. This will populate the `libs` folder.
> **Note**: Before starting the application, run `abp install-libs` command in your Web directory to restore the client-side libraries. This will populate the `libs` folder.
{{ if Tiered == "Yes" }}
@ -163,8 +195,6 @@ You can see the application APIs and test them here. Get [more info](https://swa
### Running the Blazor Application (Client Side)
Go to the Blazor project folder, open a command line terminal, type the `abp bundle -f` command (If the project was created by ABP Cli tool, you don't need to do this).
Ensure that the `.Blazor` project is the startup project and run the application.
> Use Ctrl+F5 in Visual Studio (instead of F5) to run the application without debugging. If you don't have a debug purpose, this will be faster.

29
docs/en/Image-Manipulation.md

@ -76,8 +76,8 @@ public interface IImageResizer
**Example usage:**
```csharp
var result = await _imageResizer.ResizeAsync(
stream, /* A stream object that represents an image */
var resizeResult = await _imageResizer.ResizeAsync(
imageStream, /* A stream object that represents an image */
new ImageResizeArgs
{
Width = 100,
@ -88,6 +88,16 @@ var result = await _imageResizer.ResizeAsync(
);
```
> **Note:** If `resizeResult.State` returns 'Done', then it means that the resize operation was successful. However, if it returns any other state than 'Done', the stream you're using might be corrupted. Therefore, you can perform a check like the one below and assign the correct stream to the main stream:
```csharp
if (resizeResult.Result is not null && imageStream != resizeResult.Result && resizeResult.Result.CanRead)
{
await imageStream.DisposeAsync();
imageStream = resizeResult.Result;
}
```
> You can use `MimeTypes.Image.Jpeg` constant instead of the `image/jpeg` magic string used in that example.
### ImageResizeArgs
@ -170,12 +180,23 @@ public interface IImageCompressor
**Example usage:**
```csharp
var result = await _imageCompressor.CompressAsync(
stream, /* A stream object that represents an image */
var compressResult = await _imageCompressor.CompressAsync(
imageStream, /* A stream object that represents an image */
mimeType: "image/jpeg"
);
```
> **Note:** If `compressResult.State` returns 'Done', then it means that the compression operation was successful. However, if it returns any other state than 'Done', the stream you're using might be corrupted. Therefore, you can perform a check like the one below and assign the correct stream to the main stream:
```csharp
if (compressResult.Result is not null && imageStream != compressResult.Result && compressResult.Result.CanRead)
{
await imageStream.DisposeAsync();
imageStream = compressResult.Result;
}
```
### ImageCompressResult
The `ImageCompressResult` is a generic class that is used to return the result of the image compression operations. It has the following properties:

5
docs/en/Migration-Guides/Abp-7_3.md

@ -25,4 +25,7 @@ This feature comes with a small restriction. If you use any C# code used inside
For example, `<script @string.Empty></script>` will no longer work. However, you can use the C# code for an attribute of script tag, for example, `<script src="@string.Empty"></script>` is completely valid and won't cause any problem.
> Note: You should not use any C# code used inside the script tag, even if you don't use this feature. Because it might cause errors.
> Note: You should not use any C# code used inside the script tag, even if you don't use this feature. Because it might cause errors.
## Angular UI
We would like to inform you that ABP Framework version 7.3 uses Angular version 16. Please migrate your applications to Angular 16. [Update angular](https://update.angular.io/)

27
docs/en/Migration-Guides/Abp-7_4.md

@ -2,6 +2,12 @@
This document is a guide for upgrading ABP v7.3 solutions to ABP v7.4. There are a few changes in this version that may affect your applications, please read it carefully and apply the necessary changes to your application.
## Bumped the `Microsoft.Extensions.FileProviders.Embedded` Package Version To v7.0.10
In this version, the `Microsoft.Extensions.FileProviders.Embedded` (and other `Microsoft.*` packages) upgraded to the latest version, which is v7.0.10. Therefore, in your solution, you should update the `Microsoft.Extensions.FileProviders.Embedded` package (and other `Microsoft.*` packages) version to v7.0.10. This package typically would be in your `Domain.Shared` project and other projects that have embedded resource(s). So, search this package through your solution and update it accordingly.
> You can check [this issue](https://github.com/abpframework/abp/pull/17516) to see the updated package versions.
## Renamed the `AddGlobalFilters<>` method as `FilterQueryable<>` in `IMongoDbRepositoryFilterer`
ABP Framework provides services to automatically filter data on querying from a database. Prior to this version, creating a new class that derives from the `MongoDbRepositoryFilterer` and overriding its `AddGlobalFilters` method was needed for implementing a data filter for [MongoDB](../MongoDB.md).
@ -81,7 +87,7 @@ In this version, ABP Framework introduces the `IdentityUserIntegrationService`,
This is a breaking change for microservice solutions because of the following two reasons and it should be considered:
* `IdentityUserIntegrationService` provides non-authorized services. This is not breaking the application, but should be taken care of. Since, everyone can use the service to retrieve some information for a certain user (for example, the role names of a user).
* `IdentityUserIntegrationService` provides non-authorized services. This is not breaking the application but should be taken care of. Since, everyone can use the service to retrieve some information for a certain user (for example, the role names of a user).
* Secondly, since integration services are not exposed by default anymore as explained in the *Exposing Integration Services* section above, you should explicitly enable exposing integration services. Otherwise, the operation will fail and you'll get a `404` error from the identity microservice.
To expose integration services and controllers, you can configure the `AbpAspNetCoreMvcOptions` and set the `ExposeIntegrationServices` property as *true* in the `ConfigureServices` method of your [module class](../Module-Development-Basics.md):
@ -92,3 +98,22 @@ Configure<AbpAspNetCoreMvcOptions>(options =>
options.ExposeIntegrationServices = true;
});
```
## Blazor UI
If you use Blazor WASM or Blazor Server UI, you should follow this section.
### Bumped the `Blazorise` dependencies to `1.3.1`
In this version, the `Blazorise` dependencies are upgraded to the `1.3.1` version. you should upgrade Blazorise packages to `1.3.1` in your `Blazor.csproj` file.
The following packages are included in the templates by default:
- `Blazorise.Bootstrap5`
- `Blazorise.Icons.FontAwesome`
- `Blazorise.Components`
> _If your project depends on more blazorise packages, then you should upgrade all of them._
> You should execute `dotnet build` & `abp bundle` commands in the Blazor project if you are using the Blazor WebAssembly.
### Bumped the `Microsoft.AspNetCore.Components.*` dependency to `7.0.10`
In this version, the `Microsoft.AspNetCore.Components.*` dependencies are upgraded to the `7.0.10` version. Therefore, you should upgrade the `Microsoft.AspNetCore.Components.Web` and `Microsoft.AspNetCore.Components.WebAssembly` packages to `7.0.10` in your `Blazor.csproj` file.
## Angular UI
We would like to inform you that ABP Framework version 7.4 uses Angular version 16. Please migrate your applications to Angular 16. [Update angular](https://update.angular.io/)

77
docs/en/Migration-Guides/Abp-8_0.md

@ -0,0 +1,77 @@
# ABP Version 8.0 Migration Guide
This document is a guide for upgrading ABP v7.4.x solutions to ABP v8.0.x.
## Upgraded NuGet Dependencies
The following NuGet libraries have been upgraded:
| Package | Old Version | New Version |
| ------------------- | ----------- | ----------- |
| All Microsoft packages | 7.x | 8.x |
| Microsoft.CodeAnalysis | 4.2.0 | 4.5.0 |
| NUglify | 1.20.0 | 1.21.0 |
| Polly | 7.2.3 | 8.0.0 |
| aliyun-net-sdk-sts | 3.1.0 | 3.1.1 |
| Autofac | 7.0.0 | 7.1.0 |
| Autofac.Extras.DynamicProxy | 6.0.1 | 7.1.0 |
| AutoMapper | 12.0.0 | 12.0.1 |
| AsyncKeyedLock | 6.2.1 | 6.2.2 |
| AWSSDK.S3 | 3.7.9.2 | 3.7.205.9 |
| AWSSDK.SecurityToken | 3.7.1.151 | 3.7.202.4 |
| Azure.Storage.Blobs | 12.15.0 | 12.18.0 |
| ConfigureAwait.Fody | 3.3.1 | 3.3.2 |
| Confluent.Kafka | 1.8.2 | 2.2.0 |
| Dapper | 2.0.123 | 2.1.4 |
| Dapr.Client | 1.11.0 | 1.9.0 |
| DistributedLock.Core | 1.0.4 | 1.0.5 |
| DistributedLock.Redis | 1.0.1 | 1.0.2 |
| EphemeralMongo.Core | 1.1.0 | 1.1.3 |
| EphemeralMongo6.runtime.linux-x64 | 1.1.0 | 1.1.3 |
| EphemeralMongo6.runtime.osx-x64 | 1.1.0 | 1.1.3 |
| EphemeralMongo6.runtime.win-x64 | 1.1.0 | 1.1.3 |
| FluentValidation | 11.0.1 | 11.7.1 |
| Fody | 6.6.1 | 6.8.0 |
| Hangfire.AspNetCore | 1.8.2 | 1.8.5 |
| Hangfire.SqlServer | 1.8.2 | 1.8.5 |
| HtmlSanitizer | 5.0.331 | 8.0.723 |
| IdentityModel | 6.0.0 | 6.2.0 |
| IdentityServer4.AspNetIdentity | 4.1.1 | 4.1.2 |
| JetBrains.Annotations | 2022.1.0 | 2023.2.0 |
| LibGit2Sharp | 0.26.2 | 0.27.2 |
| Magick.NET-Q16-AnyCPU | 13.2.0 | 13.3.0 |
| MailKit | 3.2.0 | 4.2.0 |
| Markdig.Signed | 0.26.0 | 0.33.0 |
| Microsoft.AspNetCore.Mvc.Versioning | 5.0.0 | 5.1.0 |
| Microsoft.AspNetCore.Razor.Language | 6.0.8 | 6.0.22 |
| Microsoft.NET.Test.Sdk | 17.2.0 | 17.7.2 |
| Minio | 4.0.6 | 6.0.0 |
| MongoDB.Driver | 2.19.1 | 2.21.0 |
| NEST | 7.14.1 | 7.17.5 |
| Newtonsoft.Json | 13.0.1 | 13.0.3 |
| NSubstitute | 4.3.0 | 5.1.0 |
| NSubstitute.Analyzers.CSharp | 1.0.15 | 1.0.16 |
| NuGet.Versioning | 5.11.0 | 6.7.0 |
| Octokit | 0.50.0 | 8.0.1 |
| Quartz | 3.4.0 | 3.7.0 |
| Quartz.Extensions.DependencyInjection | 3.4.0 | 3.7.0 |
| Quartz.Plugins.TimeZoneConverter | 3.4.0 | 3.7.0 |
| RabbitMQ.Client | 6.3.0 | 6.5.0 |
| Rebus | 6.6.5 | 7.2.1 |
| Rebus.ServiceProvider | 7.0.0 | 9.1.0 |
| Scriban | 5.4.4 | 5.9.0 |
| Serilog.AspNetCore | 5.0.0 | 7.0.0 |
| Serilog.Extensions.Hosting | 3.1.0 | 7.0.0 |
| Serilog.Extensions.Logging | 3.1.0 | 7.0.0 |
| Serilog.Sinks.Async | 1.4.0 | 1.5.0 |
| SharpZipLib | 1.3.3 | 1.4.2 |
| Shouldly | 4.1.0 | 4.2.1 |
| SixLabors.ImageSharp | 1.0.4 | 2.1.6 |
| Slugify.Core | 3.0.0 | 4.0.1 |
| Spectre.Console | 0.46.1-preview.0.7 | 0.47.0 |
| Swashbuckle.AspNetCore | 6.2.1 | 6.5.0 |
| System.Linq.Dynamic.Core | 1.3.3 | 1.3.5 |
| TimeZoneConverter | 5.0.0 | 6.1.0 |
| xunit | 2.4.1 | 2.5.1 |
| xunit.extensibility.execution | 2.4.1 | 2.5.1 |
| xunit.runner.visualstudio | 2.4.5 | 2.5.1 |

9
docs/en/Modules/Cms-Kit/Index.md

@ -83,9 +83,9 @@ See the [connection strings](https://docs.abp.io/en/abp/latest/Connection-String
## Entity Extensions
[Module entity extension](https://docs.abp.io/en/abp/latest/Module-Entity-Extensions) system is a **high-level** extension system that allows you to **define new properties** for existing entities of the dependent modules. It automatically **adds properties to the entity**, **database**, **HTTP API and user interface** in a single point.
[Module entity extension](https://docs.abp.io/en/abp/latest/Module-Entity-Extensions) system is a **high-level** extension system that allows you to **define new properties** for existing entities of the dependent modules. It automatically **adds properties to the entity**, **database**, **HTTP API, and user interface** in a single point.
To extend entities of the CMS Kit Pro module, open your `YourProjectNameModuleExtensionConfigurator` class inside of your `DomainShared` project and change the `ConfigureExtraProperties` method like shown below.
To extend entities of the CMS Kit module, open your `YourProjectNameModuleExtensionConfigurator` class inside of your `DomainShared` project and change the `ConfigureExtraProperties` method like shown below.
```csharp
public static void ConfigureExtraProperties()
@ -132,14 +132,13 @@ public static void ConfigureExtraProperties()
* `ConfigureCmsKit(...)` method is used to configure the entities of the CMS Kit module.
* `cmsKit.ConfigureBlog(...)` is used to configure the **Blog** entity of the CMS Kit module. You can add or update your extra properties of the
**Blog** entity.
* `cmsKit.ConfigureBlog(...)` is used to configure the **Blog** entity of the CMS Kit module. You can add or update your extra properties on the **Blog** entity.
* `cmsKit.ConfigureBlogPost(...)` is used to configure the **BlogPost** entity of the CMS Kit module. You can add or update your extra properties of the **BlogPost** entity.
* You can also set some validation rules for the property that you defined. In the above sample, `RequiredAttribute` and `StringLengthAttribute` were added for the property named **"BlogPostDescription"**.
* When you define the new property, it will automatically add to **Entity**, **HTTP API** and **UI** for you.
* When you define the new property, it will automatically add to **Entity**, **HTTP API**, and **UI** for you.
* Once you define a property, it appears in the create and update forms of the related entity.
* New properties also appear in the datatable of the related page.

10
docs/en/Modules/Cms-Kit/Pages.md

@ -22,13 +22,13 @@ CMS Kit module admin side adds the following items to the main menu, under the *
#### Page Management
Pages page is used to manage dynamic pages in the system.
**Pages** page is used to manage dynamic pages in the system. You can create/edit pages with dynamic routes and contents on this page:
![pages-page](../../images/cmskit-module-pages-page.png)
![pages-edit](../../images/cmskit-module-pages-edit.png)
You can create or edit an existing page on this page.
After you have created pages, you can set one of them as a *home page*. Then, whenever anyone navigates to your application's homepage, they see the dynamic content of the page that you have defined on this page.
![pages-edit](../../images/cmskit-module-pages-edit.png)
![pages-page](../../images/cmskit-module-pages-page.png)
When you create a page, you can access the created page via `/{slug}` URL.
Also when you create a page, you can access the created page via `/{slug}` URL.

60
docs/en/Multi-Tenancy.md

@ -273,7 +273,7 @@ Configure<AbpAspNetCoreMultiTenancyOptions>(options =>
##### Domain/Subdomain Tenant Resolver
In a real application, most of times you will want to determine current tenant either by subdomain (like mytenant1.mydomain.com) or by the whole domain (like mytenant.com). If so, you can configure the `AbpTenantResolveOptions` to add the domain tenant resolver.
In a real application, most of times you will want to determine the current tenant either by subdomain (like mytenant1.mydomain.com) or by the whole domain (like mytenant.com). If so, you can configure the `AbpTenantResolveOptions` to add the domain tenant resolver.
**Example: Add a subdomain resolver**
@ -284,11 +284,65 @@ Configure<AbpTenantResolveOptions>(options =>
});
````
* `{0}` is the placeholder to determine current tenant's unique name.
* `{0}` is the placeholder to determine the current tenant's unique name.
* Add this code to the `ConfigureServices` method of your [module](Module-Development-Basics.md).
* This should be done in the *Web/API Layer* since the URL is a web related stuff.
> There is an [example](https://github.com/abpframework/abp-samples/tree/master/DomainTenantResolver) that uses the subdomain to determining the current tenant.
Openiddict is the default Auth Server in ABP (since v6.0). When you use OpenIddict, you must add this code to the `PreConfigure` method as well.
```csharp
// using Volo.Abp.OpenIddict.WildcardDomains
PreConfigure<AbpOpenIddictWildcardDomainOptions>(options =>
{
options.EnableWildcardDomainSupport = true;
options.WildcardDomainsFormat.Add("https://{0}.mydomain.com");
});
```
You must add this code to the `Configure` method as well.
```csharp
// using Volo.Abp.MultiTenancy;
Configure<AbpTenantResolveOptions>(options =>
{
options.AddDomainTenantResolver("{0}.mydomain.com");
});
```
> 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
```bash
dotnet add package Owl.TokenWildcardIssuerValidator
```
Then fix the options of the `.AddJwtBearer` block
```csharp
// using using Owl.TokenWildcardIssuerValidator;
context.Services
.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
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[]
{
"https://{0}.mydomain.com:44349/" //the port may different
};
// end of added block
});
```
##### Custom Tenant Resolvers

36
docs/en/Tutorials/Part-1.md

@ -36,6 +36,8 @@ This tutorial has multiple versions based on your **UI** and **Database** prefer
> If you encounter the "filename too long" or "unzip" error on Windows, please see [this guide](../KB/Windows-Path-Too-Long-Fix.md).
> After downloading the source code, you might need to run some commands before running the application. See the _After Creating the Solution_ section below for more information.
{{if UI == "MVC" && DB == "EF"}}
### Video Tutorial
@ -48,6 +50,38 @@ This part is also recorded as a video tutorial and **<a href="https://www.youtub
Before starting the development, create a new solution named `Acme.BookStore` and run it by following the [getting started tutorial](../Getting-Started.md).
## After Creating the Solution
### Installing the Client-Side Packages
[ABP CLI](../CLI.md) runs the `abp install-libs` command behind the scenes to install the required NPM packages for your solution while creating the application.
However, sometimes this command might need to be manually run. For example, you need to run this command, if you have cloned the application, or the resources from *node_modules* folder didn't copy to *wwwroot/libs* folder, or if you have added a new client-side package dependency to your solution.
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.
{{if UI=="Blazor" || UI=="BlazorServer"}}
### Bundling and Minification
`abp bundle` command offers bundling and minification support for client-side resources (JavaScript and CSS files) for Blazor projects. This command automatically run when you create a new solution with the [ABP CLI](../CLI.md).
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](../UI/Blazor/Global-Scripts-Styles.md).
{{end}}
## Create the Book Entity
**Domain layer** in the startup template is separated into two projects:
@ -204,7 +238,7 @@ This will add a new migration class to the project:
> It's good to have some initial data in the database before running the application. This section introduces the [Data Seeding](../Data-Seeding.md) system of the ABP framework. You can skip this section if you don't want to create the data seeding, but it is suggested to follow along and learn this useful ABP Framework feature.
Create a class deriving from the `IDataSeedContributor` in the `*.Domain` project by copying the following code:
Create a class that implements the `IDataSeedContributor` interface in the `*.Domain` project by copying the following code:
```csharp
using System;

32
docs/en/Tutorials/Todo/Index.md

@ -97,6 +97,38 @@ If you are using Visual Studio, right click on the `TodoApp.DbMigrator` project,
{{end}}
### Before Running the Application
#### Installing the Client-Side Packages
[ABP CLI](../../CLI.md) runs the `abp install-libs` command behind the scenes to install the required NPM packages for your solution while creating the application.
However, sometimes this command might need to be manually run. For example, you need to run this command, if you have cloned the application, or the resources from *node_modules* folder didn't copy to *wwwroot/libs* folder, or if you have added a new client-side package dependency to your solution.
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.
{{if UI=="Blazor" || UI=="BlazorServer"}}
#### Bundling and Minification
`abp bundle` command offers bundling and minification support for client-side resources (JavaScript and CSS files) for Blazor projects. This command automatically run when you create a new solution with the [ABP CLI](../../CLI.md).
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](../../UI/Blazor/Global-Scripts-Styles.md).
{{end}}
### Run the Application
{{if UI=="MVC" || UI=="BlazorServer"}}

32
docs/en/Tutorials/Todo/Single-Layer/Index.md

@ -101,6 +101,38 @@ dotnet run --migrate-database
This command will create the database and seed the initial data for you. Then you can run the application.
### Before Running the Application
#### Installing the Client-Side Packages
[ABP CLI](../../../CLI.md) runs the `abp install-libs` command behind the scenes to install the required NPM packages for your solution while creating the application.
However, sometimes this command might need to be manually run. For example, you need to run this command, if you have cloned the application, or the resources from *node_modules* folder didn't copy to *wwwroot/libs* folder, or if you have added a new client-side package dependency to your solution.
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.
{{if UI=="Blazor" || UI=="BlazorServer"}}
#### Bundling and Minification
`abp bundle` command offers bundling and minification support for client-side resources (JavaScript and CSS files) for Blazor projects. This command automatically run when you create a new solution with the [ABP CLI](../../../CLI.md).
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](../../../UI/Blazor/Global-Scripts-Styles.md).
{{end}}
### Run the Application
{{if UI=="MVC" || UI=="BlazorServer"}}

41
docs/en/UI/Angular/Abp-Window-Service.md

@ -0,0 +1,41 @@
# Abp Window Service
## Download Blob as File
AbpWindowService is an Angular service designed to provide utility methods related to window operations. The service has a `downloadBlob` function, which is used for downloading blobs as files within the context of a web application.
### Usage
To make use of the `AbpWindowService` in your Angular application, follow the steps below:
### Injection
Firstly, ensure that the service is injected into the component or any other Angular entity where you wish to use it.
```js
import { AbpWindowService } from '@abp/ng.core';
constructor(private abpWindowService: AbpWindowService) { }
// or
// private abpWindowService = inject(AbpWindowService)
```
### Downloading a Blob
Once you have the service injected, you can use the downloadBlob method to initiate the download of blob data as a file. For instance:
```js
someMethod() {
const myBlob = new Blob(["Hello, World!"], { type: "text/plain" });
this.abpWindowService.downloadBlob(myBlob, "hello.txt");
}
```
### Permissions & Considerations
Ensure that you have appropriate permissions and user interactions before triggering a download. Since downloadBlob initiates a download programmatically, it's best to tie this action to direct user interactions, such as button clicks, to prevent unexpected behaviors or browser restrictions.
### DOCUMENT Token in Service
Angular, being a platform-agnostic framework, is designed to support not only browser-based applications but also other environments like server-side rendering (SSR) through Angular Universal. This design philosophy introduces challenges when accessing global browser-specific objects like window or document directly. To address this, Angular provides a DOCUMENT token that can be used to inject the document object into Angular entities like components and services.

31
docs/en/UI/Angular/Multi-Tenancy.md

@ -125,6 +125,37 @@ After this replacement, the app will use the following URLs:
The app sends the `__tenant` header that contains the current tenant id on each request.
### Handling Domain-based Tenant not found
When the application is initialized and a domain-based tenant is active, it makes a request for to validate the tenant. If it cannot be located, the Angular application calls the function. The function displays an error message, but the functionality can be customized by injecting the `TENANT_NOT_FOUND_BY_NAME` token into the function.
Example:
```ts
import { TENANT_NOT_FOUND_BY_NAME } from '@abp/ng.core';
@NgModule({
imports: [
// removed for clarity
],
providers: [
// removed for clarity
{
provide: TENANT_NOT_FOUND_BY_NAME,
useFactory: function () {
return () => {
window.location.replace('https://abp.io');
};
},
},
],
declarations: [AppComponent],
bootstrap: [AppComponent],
})
export class AppModule {}
```
## See Also
- [Multi Tenancy in ABP](../../Multi-Tenancy.md)

24
docs/en/UI/Angular/Service-Proxies.md

@ -18,7 +18,9 @@ Run the following command in the **root folder** of the angular application:
abp generate-proxy -t ng
```
The command without any parameters creates proxies only for your own application's services and places them in your default Angular application. There are several parameters you may use to modify this behavior. See the [CLI documentation](../../CLI) for details.
### Note
- If you're utilizing NX, be aware that the Angular schematics-based ABP package may not work as expected. Instead, there's a specialized package for NX-based repositories named @abp/nx.generators. We recommend using this generator for your package. For detailed instructions and more information, refer to this section.
- The command without any parameters creates proxies for your own application's services only and places them in your default Angular application. There are several parameters you may use to modify this behavior. See the [Details](#abp-nx-proxy-generator).
The generated files will be placed in a folder called `proxy` at the root of the target project.
@ -140,6 +142,26 @@ export class BookComponent implements OnInit {
> Please [see this article](https://github.com/abpframework/abp/blob/dev/docs/en/Blog-Posts/2020-09-07%20Angular-Service-Proxies/POST.md) to learn more about service proxies.
### ABP NX Proxy Generator
For projects that utilize NX, the @abp/nx.generators package offers seamless integration. Essentially, this package serves as a wrapper specifically tailored for NX-based repositories
**Installation**
To incorporate this package into your project, run the following command:
```bash
yarn add @abp/nx.generators
```
### Usage
To use the generator, execute the following command:
```bash
yarn nx generate @abp/nx.generators:generate-proxy
// or
yarn nx g @abp/nx.generators:generate-proxy
```
**Note:** The parameters you'd use with this generator are consistent with the standard ABP proxy generator.
### Known Limitations
When you run a project on Visual Studio using IIS Express as the web server, there will be no remote access to your endpoints. This is the default behavior of IIS Express since it explicitly protects you from the security risks of running over the network. However, that will cause the proxy generator to fail because it needs a response from the `/api/abp/api-definition` endpoint. You may serve your endpoints via Kestrel to avoid this. Running `dotnet run` in your command line (at your project folder) will do that for you.

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save