Browse Source

Merge branch 'dev' into deniz-commercial/L

pull/18955/head
denizdemirkan 2 years ago
parent
commit
52cf679b05
  1. 2
      .github/ISSUE_TEMPLATE/config.yml
  2. 20
      .github/workflows/auto-pr.yml
  3. 16
      Directory.Packages.props
  4. 7
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/ar.json
  5. 8
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/cs.json
  6. 8
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/de.json
  7. 5
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en-GB.json
  8. 13
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json
  9. 8
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/es.json
  10. 8
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/fi.json
  11. 8
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/fr.json
  12. 8
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/hi.json
  13. 8
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/hr.json
  14. 8
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/hu.json
  15. 8
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/is.json
  16. 8
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/it.json
  17. 8
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/nl.json
  18. 8
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/pl-PL.json
  19. 8
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/pt-BR.json
  20. 8
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/ro-RO.json
  21. 7
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/ru.json
  22. 8
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/sk.json
  23. 6
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/sl.json
  24. 8
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/tr.json
  25. 8
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/vi.json
  26. 8
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hans.json
  27. 8
      abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hant.json
  28. 3
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ar.json
  29. 3
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/cs.json
  30. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/de.json
  31. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en-GB.json
  32. 45
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json
  33. 3
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/es.json
  34. 5
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json
  35. 3
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fr.json
  36. 3
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hi.json
  37. 3
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hr.json
  38. 3
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hu.json
  39. 3
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/is.json
  40. 3
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json
  41. 3
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/nl.json
  42. 3
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pl-PL.json
  43. 3
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pt-BR.json
  44. 3
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ro-RO.json
  45. 3
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ru.json
  46. 3
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sk.json
  47. 3
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sl.json
  48. 7
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json
  49. 3
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/vi.json
  50. 3
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json
  51. 3
      abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json
  52. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ar.json
  53. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/cs.json
  54. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/de.json
  55. 3
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en-GB.json
  56. 5
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json
  57. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/es.json
  58. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fi.json
  59. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fr.json
  60. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hi.json
  61. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hr.json
  62. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hu.json
  63. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/is.json
  64. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/it.json
  65. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/nl.json
  66. 6
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pl-PL.json
  67. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pt-BR.json
  68. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ro-RO.json
  69. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ru.json
  70. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sk.json
  71. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sl.json
  72. 17
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json
  73. 5
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/vi.json
  74. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json
  75. 4
      abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hant.json
  76. 4
      docs/en/API/Auto-API-Controllers.md
  77. 24
      docs/en/API/Static-CSharp-API-Clients.md
  78. 239
      docs/en/Blog-Posts/2024-02-16 v8_1_Preview/POST.md
  79. BIN
      docs/en/Blog-Posts/2024-02-16 v8_1_Preview/basic-aggregate-root.png
  80. BIN
      docs/en/Blog-Posts/2024-02-16 v8_1_Preview/bulk-delete-datatable.png
  81. BIN
      docs/en/Blog-Posts/2024-02-16 v8_1_Preview/bulk-delete.png
  82. BIN
      docs/en/Blog-Posts/2024-02-16 v8_1_Preview/cover-image.png
  83. BIN
      docs/en/Blog-Posts/2024-02-16 v8_1_Preview/dotnet-conf-china-2023-watch-party.jpg
  84. BIN
      docs/en/Blog-Posts/2024-02-16 v8_1_Preview/filterable-properties.png
  85. BIN
      docs/en/Blog-Posts/2024-02-16 v8_1_Preview/ndc-london-2024.png
  86. BIN
      docs/en/Blog-Posts/2024-02-16 v8_1_Preview/page-title.png
  87. BIN
      docs/en/Blog-Posts/2024-02-16 v8_1_Preview/suite-include-entities-from-abp-modules.png
  88. 5
      docs/en/CLI.md
  89. 266
      docs/en/Community-Articles/2024-02-12-Global-Error-Handling-in-Angular/POST.md
  90. BIN
      docs/en/Community-Articles/2024-02-12-Global-Error-Handling-in-Angular/error-image-1.png
  91. BIN
      docs/en/Community-Articles/2024-02-12-Global-Error-Handling-in-Angular/error_handling.jpg
  92. BIN
      docs/en/Community-Articles/2024-02-12-Global-Error-Handling-in-Angular/http-request-4.gif
  93. BIN
      docs/en/Community-Articles/2024-02-12-Global-Error-Handling-in-Angular/http-request-5.gif
  94. BIN
      docs/en/Community-Articles/2024-02-12-Global-Error-Handling-in-Angular/http-request-7.gif
  95. BIN
      docs/en/Community-Articles/2024-02-12-Global-Error-Handling-in-Angular/http-request-8.gif
  96. BIN
      docs/en/Community-Articles/2024-02-12-Global-Error-Handling-in-Angular/show-toast-2.gif
  97. 20
      docs/en/Getting-Started-Create-Solution-Single-Layer.md
  98. 19
      docs/en/Getting-Started-Create-Solution.md
  99. 10
      docs/en/Getting-Started-Running-Solution-Single-Layer.md
  100. 17
      docs/en/Getting-Started-Running-Solution.md

2
.github/ISSUE_TEMPLATE/config.yml

@ -2,7 +2,7 @@ blank_issues_enabled: true
contact_links:
- name: Issue with ABP Commercial
url: https://support.abp.io/QA/Questions
about: Please open issues relating to ABP Commercial in support.abp.io.
about: Please open ABP Commercial related issues at https://support.abp.io.
- name: Ask a question (community support)
url: https://stackoverflow.com/questions/tagged/abp
about: Ask a question that will be answered by the ABP community

20
.github/workflows/auto-pr.yml

@ -1,13 +1,13 @@
name: Merge branch dev with prerel-8.1
name: Merge branch dev with rel-8.1
on:
push:
branches:
- prerel-8.1
- rel-8.1
permissions:
contents: read
jobs:
merge-dev-with-prerel-8-1:
merge-dev-with-rel-8-1:
permissions:
contents: write # for peter-evans/create-pull-request to create branch
pull-requests: write # for peter-evans/create-pull-request to create a PR
@ -18,19 +18,19 @@ jobs:
ref: dev
- name: Reset promotion branch
run: |
git fetch origin prerel-8.1:prerel-8.1
git reset --hard prerel-8.1
git fetch origin rel-8.1:rel-8.1
git reset --hard rel-8.1
- name: Create Pull Request
uses: peter-evans/create-pull-request@v3
with:
branch: auto-merge/prerel-8-1/${{github.run_number}}
title: Merge branch dev with prerel-8.1
body: This PR generated automatically to merge dev with prerel-8.1. Please review the changed files before merging to prevent any errors that may occur.
branch: auto-merge/rel-8-1/${{github.run_number}}
title: Merge branch dev with rel-8.1
body: This PR generated automatically to merge dev with rel-8.1. Please review the changed files before merging to prevent any errors that may occur.
reviewers: maliming
token: ${{ github.token }}
- name: Merge Pull Request
env:
GH_TOKEN: ${{ secrets.BOT_SECRET }}
run: |
gh pr review auto-merge/prerel-8-1/${{github.run_number}} --approve
gh pr merge auto-merge/prerel-8-1/${{github.run_number}} --merge --auto --delete-branch
gh pr review auto-merge/rel-8-1/${{github.run_number}} --approve
gh pr merge auto-merge/rel-8-1/${{github.run_number}} --merge --auto --delete-branch

16
Directory.Packages.props

@ -102,26 +102,26 @@
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
<PackageVersion Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="8.0.0" />
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="1.1.1" />
<PackageVersion Include="Minio" Version="6.0.1" />
<PackageVersion Include="Minio" Version="6.0.2" />
<PackageVersion Include="MongoDB.Driver" Version="2.22.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="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.0" />
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.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="9.0.0" />
<PackageVersion Include="OpenIddict.Abstractions" Version="5.1.0" />
<PackageVersion Include="OpenIddict.Core" Version="5.1.0" />
<PackageVersion Include="OpenIddict.Server.AspNetCore" Version="5.1.0" />
<PackageVersion Include="OpenIddict.Validation.AspNetCore" Version="5.1.0" />
<PackageVersion Include="OpenIddict.Validation.ServerIntegration" Version="5.1.0" />
<PackageVersion Include="OpenIddict.Abstractions" Version="5.2.0" />
<PackageVersion Include="OpenIddict.Core" Version="5.2.0" />
<PackageVersion Include="OpenIddict.Server.AspNetCore" Version="5.2.0" />
<PackageVersion Include="OpenIddict.Validation.AspNetCore" Version="5.2.0" />
<PackageVersion Include="OpenIddict.Validation.ServerIntegration" Version="5.2.0" />
<PackageVersion Include="Oracle.EntityFrameworkCore" Version="8.21.121" />
<PackageVersion Include="Polly" Version="8.2.0" />
<PackageVersion Include="Polly.Extensions.Http" Version="3.0.0" />
<PackageVersion Include="Pomelo.EntityFrameworkCore.MySql" Version="8.0.0-beta.2" />
<PackageVersion Include="Pomelo.EntityFrameworkCore.MySql" Version="8.0.0" />
<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" />

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

@ -231,6 +231,11 @@
"BlogProfile": "الملف الشخصي للمدونة",
"Tickets": "التذاكر",
"MeetTheABPCommunity": "ABP <span class=\"gradient-community\">المجتمع</span> معرفة",
"DisplayName:CommunityIndexPagePoll": "استطلاع"
"DisplayName:CommunityIndexPagePoll": "استطلاع",
"OrganizationOverview": "نظرة عامة على المنظمة",
"EmailPreferences": "تفضيلات البريد الإلكتروني",
"DoYouAgreePrivacyPolicy": "بالضغط <i>يشترك</i> الزر الذي توافق عليه <a href=\"https://account.abp.io/Account/TermsConditions\">شروط</a> و <a href=\"https://account.abp.io/Account/Privacy\">سياسة الخصوصية</a>.",
"VideoCourses": "دورات الفيديو",
"Resources": "موارد"
}
}

8
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/cs.json

@ -231,6 +231,12 @@
"BlogProfile": "Profil blogu",
"Tickets": "Vstupenky",
"MeetTheABPCommunity": "ABP <span class=\"gradient-community\">Komunita</span> poznat",
"DisplayName:CommunityIndexPagePoll": "Anketa na stránce s indexem komunity"
"DisplayName:CommunityIndexPagePoll": "Anketa na stránce s indexem komunity",
"OrganizationOverview": "Přehled organizace",
"EmailPreferences": "Předvolby e-mailu",
"DoYouAgreePrivacyPolicy": "Kliknutím <i>předplatit</i> souhlasíte s <a href=\"https://account.abp.io/Account/TermsConditions\">Podmínky</a> a <a href=\"https://account.abp.io/Account/Privacy\">Zásady ochrany osobních údajů</a>.",
"VideoCourses": "Video kurzy",
"Resources": "Zdroje"
}
}

8
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/de.json

@ -230,6 +230,12 @@
"BlogProfile": "Blog-Profil",
"Tickets": "Tickets",
"MeetTheABPCommunity": "ABP <span class=\"gradient-community\">Community</span> kennenlernen",
"DisplayName:CommunityIndexPagePoll": "Community-Indexseite-Umfrage"
"DisplayName:CommunityIndexPagePoll": "Community-Indexseite-Umfrage",
"OrganizationOverview": "Organisationsübersicht",
"EmailPreferences": "E-Mail Einstellungen",
"DoYouAgreePrivacyPolicy": "Beim Klicken <i>Abonnieren</i> Mit der Schaltfläche stimmen Sie dem zu <a href=\"https://account.abp.io/Account/TermsConditions\">Bedingungen</a> Und <a href=\"https://account.abp.io/Account/Privacy\">Datenschutzrichtlinie</a>.",
"VideoCourses": "Videokurse",
"Resources": "Ressourcen"
}
}

5
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en-GB.json

@ -34,6 +34,9 @@
"FreeDDDBook": "Free DDD E-book",
"New": "New",
"Volo.AbpIo.Domain:020005": "License extend year can not be lower than {MinExtendLicenseYear} year and greater than {MaxExtendLicenseYear} years ",
"DisplayName:CommunityIndexPagePoll": "Community Index Page Poll"
"DisplayName:CommunityIndexPagePoll": "Community Index Page Poll",
"OrganizationOverview": "Organization Overview",
"EmailPreferences": "Email Preferences",
"DoYouAgreePrivacyPolicy": "By clicking <i>Subscribe</i> button you agree to the <a href=\"https://account.abp.io/Account/TermsConditions\">Terms & Conditions</a> and <a href=\"https://account.abp.io/Account/Privacy\">Privacy Policy</a>."
}
}

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

@ -238,6 +238,17 @@
"Packages": "Packages",
"Trainings": "Trainings",
"MeetTheABPCommunity": "Meet the ABP <span class=\"gradient-community\">Community</span>",
"DisplayName:CommunityIndexPagePoll": "Community Index Page Poll"
"DisplayName:CommunityIndexPagePoll": "Community Index Page Poll",
"ReturnOfInvestment": "Return Of Investment",
"PromotionalOffers": "Promotional Offers",
"PromotionalOffersDefinition": "Discounts, seasonal campaigns, etc.",
"EventsDefinition": "Community Talks, Webinars, ABP .NET Conference, etc.",
"ReleaseNotesDefinition": "ABP.IO Platform releases, new products, etc.",
"Newsletter": "Newsletter",
"NewsletterDefinition": "Blog posts, community news, etc.",
"OrganizationOverview": "Organization Overview",
"EmailPreferences": "Email Preferences",
"DoYouAgreePrivacyPolicy": "By clicking <i>Subscribe</i> button you agree to the <a href=\"https://account.abp.io/Account/TermsConditions\">Terms & Conditions</a> and <a href=\"https://account.abp.io/Account/Privacy\">Privacy Policy</a>.",
"VideoCourses" : "Video Courses"
}
}

8
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/es.json

@ -230,6 +230,12 @@
"BlogProfile": "Perfil del blog",
"Tickets": "Entradas",
"MeetTheABPCommunity": "Conozca la ABP<span class=\"gradient-community\">Comunidad</span>",
"DisplayName:CommunityIndexPagePoll": "Encuesta de la página de índice de la comunidad"
"DisplayName:CommunityIndexPagePoll": "Encuesta de la página de índice de la comunidad",
"OrganizationOverview": "Descripción de la organización",
"EmailPreferences": "Preferencias de correo electrónico",
"DoYouAgreePrivacyPolicy": "Haciendo click <i>Suscribir</i> botón estás de acuerdo con el <a href=\"https://account.abp.io/Account/TermsConditions\">Términos</a> y <a href=\"https://account.abp.io/Account/Privacy\">política de privacidad</a>.",
"VideoCourses": "Cursos en vídeo",
"Resources": "Recursos"
}
}

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

@ -231,6 +231,12 @@
"BlogProfile": "Blogin profiili",
"Tickets": "Liput",
"MeetTheABPCommunity": "Tutustu ABP<span class=\"gradient-community\">Yhteisö</span>:n kanssa",
"DisplayName:CommunityIndexPagePoll": "Yhteisön indeksointisivun kysely"
"DisplayName:CommunityIndexPagePoll": "Yhteisön indeksointisivun kysely",
"OrganizationOverview": "Organisaation yleiskatsaus",
"EmailPreferences": "Sähköpostiasetukset",
"DoYouAgreePrivacyPolicy": "Klikkaamalla <i>Tilaa</i> -painiketta hyväksyt <a href=\"https://account.abp.io/Account/TermsConditions\">Ehdot</a> ja <a href=\"https://account.abp.io/Account/Privacy\">Tietosuojakäytäntö</a>.",
"VideoCourses": "Videokurssit",
"Resources": "Resurssit"
}
}

8
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/fr.json

@ -231,6 +231,12 @@
"BlogProfile": "Profil du blog",
"Tickets": "Des billets",
"MeetTheABPCommunity": "Découvrez ABP avec la <span class=\"gradient-community\">Communauté</span>",
"DisplayName:CommunityIndexPagePoll": "Sondage de la page d&#39;accueil de la communauté"
"DisplayName:CommunityIndexPagePoll": "Sondage de la page d&#39;accueil de la communauté",
"OrganizationOverview": "Aperçu de l'organisation",
"EmailPreferences": "Préférences de messagerie",
"DoYouAgreePrivacyPolicy": "En cliquant <i>S'abonner</i> bouton, vous acceptez le <a href=\"https://account.abp.io/Account/TermsConditions\">Termes</a> et <a href=\"https://account.abp.io/Account/Privacy\">politique de confidentialité</a>.",
"VideoCourses": "Cours vidéo",
"Resources": "Ressources"
}
}

8
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/hi.json

@ -231,6 +231,12 @@
"BlogProfile": "ब्लॉग प्रोफ़ाइल",
"Tickets": "टिकट",
"MeetTheABPCommunity": "ABP से मिलें <span class=\"gradient-community\">समुदाय</span>",
"DisplayName:CommunityIndexPagePoll": "सामुदायिक अनुभाग मतदान"
"DisplayName:CommunityIndexPagePoll": "सामुदायिक अनुभाग मतदान",
"OrganizationOverview": "संगठन अवलोकन",
"EmailPreferences": "ईमेल प्राथमिकताएं",
"DoYouAgreePrivacyPolicy": "क्लिक करके <i>सदस्यता लें</i> जिस बटन से आप सहमत हैं <a href=\"https://account.abp.io/Account/TermsConditions\">शर्तें</a> और <a href=\"https://account.abp.io/Account/Privacy\">गोपनीयता नीति</a>.",
"VideoCourses": "वीडियो पाठ्यक्रम",
"Resources": "संसाधन"
}
}

8
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/hr.json

@ -231,6 +231,12 @@
"BlogProfile": "Blog profil",
"Tickets": "Ulaznice",
"MeetTheABPCommunity": "Upoznaj ABP <span class=\"gradient-community\">Zajednicu</span>",
"DisplayName:CommunityIndexPagePoll": "Anketa na stranici indeksa zajednice"
"DisplayName:CommunityIndexPagePoll": "Anketa na stranici indeksa zajednice",
"OrganizationOverview": "Pregled organizacije",
"EmailPreferences": "Postavke e-pošte",
"DoYouAgreePrivacyPolicy": "Klikom <i>Pretplatite se</i> gumb slažete se s <a href=\"https://account.abp.io/Account/TermsConditions\">Pojmovi</a> i <a href=\"https://account.abp.io/Account/Privacy\">Politika privatnosti</a>.",
"VideoCourses": "Video tečajevi",
"Resources": "Resursi"
}
}

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

@ -231,6 +231,12 @@
"BlogProfile": "Blog profil",
"Tickets": "Jegyek",
"MeetTheABPCommunity": "Ismerd meg az ABP-t a <span class=\"gradient-community\">Közösséggel</span>",
"DisplayName:CommunityIndexPagePoll": "Közösségi Indexoldal Szavazás"
"DisplayName:CommunityIndexPagePoll": "Közösségi Indexoldal Szavazás",
"OrganizationOverview": "Szervezet áttekintése",
"EmailPreferences": "E-mail beállítások",
"DoYouAgreePrivacyPolicy": "Kattintással <i>Iratkozz fel</i> gombbal elfogadja a <a href=\"https://account.abp.io/Account/TermsConditions\">Feltételek</a> és <a href=\"https://account.abp.io/Account/Privacy\">Adatvédelmi irányelvek</a>.",
"VideoCourses": "Videó tanfolyamok",
"Resources": "Erőforrások"
}
}

8
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/is.json

@ -231,6 +231,12 @@
"BlogProfile": "Bloggprófíll",
"Tickets": "Miðar",
"MeetTheABPCommunity": "Kynnistuðu ABP <span class=\"gradient-community\">Samfélagið</span>",
"DisplayName:CommunityIndexPagePoll": "Samfélagssnið"
"DisplayName:CommunityIndexPagePoll": "Samfélagssnið",
"OrganizationOverview": "Yfirlit yfir stofnun",
"EmailPreferences": "Tölvupóststillingar",
"DoYouAgreePrivacyPolicy": "Með því að smella <i>Gerast áskrifandi</i> hnappinn sem þú samþykkir <a href=\"https://account.abp.io/Account/TermsConditions\">Skilmálar</a> og <a href=\"https://account.abp.io/Account/Privacy\">Friðhelgisstefna</a>.",
"VideoCourses": "Vídeónámskeið",
"Resources": "Auðlindir"
}
}

8
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/it.json

@ -231,6 +231,12 @@
"BlogProfile": "Profilo del blog",
"Tickets": "Biglietti",
"MeetTheABPCommunity": "Incontra la ABP<span class=\"gradient-community\">comunità</span>",
"DisplayName:CommunityIndexPagePoll": "Sondaggio della pagina indice della comunità"
"DisplayName:CommunityIndexPagePoll": "Sondaggio della pagina indice della comunità",
"OrganizationOverview": "Panoramica dell'organizzazione",
"EmailPreferences": "preferenze email",
"DoYouAgreePrivacyPolicy": "Cliccando <i>sottoscrivi</i> pulsante accetti il <a href=\"https://account.abp.io/Account/TermsConditions\">Termini</a> E <a href=\"https://account.abp.io/Account/Privacy\">politica sulla riservatezza</a>.",
"VideoCourses": "Videocorsi",
"Resources": "Risorse"
}
}

8
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/nl.json

@ -231,6 +231,12 @@
"BlogProfile": "Blogprofiel",
"Tickets": "Kaartjes",
"MeetTheABPCommunity": "Maak kennis met ABP <span class=\"gradient-community\">Gemeenschap</span>",
"DisplayName:CommunityIndexPagePoll": "Gemeenschapsindexpagina-enquête"
"DisplayName:CommunityIndexPagePoll": "Gemeenschapsindexpagina-enquête",
"OrganizationOverview": "Organisatieoverzicht",
"EmailPreferences": "e-mail voorkeuren",
"DoYouAgreePrivacyPolicy": "Door te klikken <i>Abonneren</i> knop waarmee u akkoord gaat <a href=\"https://account.abp.io/Account/TermsConditions\">Voorwaarden</a> En <a href=\"https://account.abp.io/Account/Privacy\">Privacybeleid</a>.",
"VideoCourses": "Videocursussen",
"Resources": "Bronnen"
}
}

8
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/pl-PL.json

@ -231,6 +231,12 @@
"BlogProfile": "Profil bloga",
"Tickets": "Bilety",
"MeetTheABPCommunity": "Maak kennis met ABP <span class=\"gradient-community\">Gemeenschap</span>",
"DisplayName:CommunityIndexPagePoll": "Ankieta na stronie głównej społeczności"
"DisplayName:CommunityIndexPagePoll": "Ankieta na stronie głównej społeczności",
"OrganizationOverview": "Przegląd organizacji",
"EmailPreferences": "Preferencje poczty e-mail",
"DoYouAgreePrivacyPolicy": "Klikając <i>Subskrybuj</i> przycisk, na który wyrażasz zgodę <a href=\"https://account.abp.io/Account/TermsConditions\">Warunki</a> I <a href=\"https://account.abp.io/Account/Privacy\">Polityka prywatności</a>.",
"VideoCourses": "Kursy wideo",
"Resources": "Zasoby"
}
}

8
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/pt-BR.json

@ -231,6 +231,12 @@
"BlogProfile": "Perfil do blog",
"Tickets": "Ingressos",
"MeetTheABPCommunity": "Conheça a ABP com a <span class=\"gradient-community\">Comunidade</span>",
"DisplayName:CommunityIndexPagePoll": "Enquete da página inicial da comunidade"
"DisplayName:CommunityIndexPagePoll": "Enquete da página inicial da comunidade",
"OrganizationOverview": "Visão geral da organização",
"EmailPreferences": "Preferências de Email",
"DoYouAgreePrivacyPolicy": "Clicando <i>Se inscrever</i> botão você concorda com o <a href=\"https://account.abp.io/Account/TermsConditions\">Termos</a> e <a href=\"https://account.abp.io/Account/Privacy\">política de Privacidade</a>.",
"VideoCourses": "Cursos em vídeo",
"Resources": "Recursos"
}
}

8
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/ro-RO.json

@ -231,6 +231,12 @@
"BlogProfile": "Profil blog",
"Tickets": "bilete",
"MeetTheABPCommunity": "Cunoaște ABP cu <span class=\"gradient-community\">Comunitatea</span>",
"DisplayName:CommunityIndexPagePoll": "Sondajul de pe pagina de index a comunității"
"DisplayName:CommunityIndexPagePoll": "Sondajul de pe pagina de index a comunității",
"OrganizationOverview": "Prezentare a organizației",
"EmailPreferences": "preferinte de email",
"DoYouAgreePrivacyPolicy": "Dând clicuri <i>Abonati-va</i> butonul sunteți de acord cu <a href=\"https://account.abp.io/Account/TermsConditions\">Termeni</a> și <a href=\"https://account.abp.io/Account/Privacy\">Politica de confidențialitate</a>.",
"VideoCourses": "Cursuri video",
"Resources": "Resurse"
}
}

7
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/ru.json

@ -237,6 +237,11 @@
"Packages": "Пакеты",
"Trainings": "Тренинги",
"MeetTheABPCommunity": "Познакомьтесь с ABP с <span class=\"gradient-community\">Сообществом</span>",
"DisplayName:CommunityIndexPagePoll": "Опрос на главной странице сообщества"
"DisplayName:CommunityIndexPagePoll": "Опрос на главной странице сообщества",
"OrganizationOverview": "Обзор организации",
"EmailPreferences": "Настройки электронной почты",
"DoYouAgreePrivacyPolicy": "Кликнув <i>Подписаться</i> кнопку вы соглашаетесь с <a href=\"https://account.abp.io/Account/TermsConditions\">Условия</a> и <a href=\"https://account.abp.io/Account/Privacy\">политика конфиденциальности</a>.",
"VideoCourses": "Видео курсы",
}
}

8
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/sk.json

@ -231,6 +231,12 @@
"BlogProfile": "Profil blogu",
"Tickets": "Vstupenky",
"MeetTheABPCommunity": "Spoznajte ABP s <span class=\"gradient-community\">Komunitou</span>",
"DisplayName:CommunityIndexPagePoll": "Anketa na stránke indexu komunity"
"DisplayName:CommunityIndexPagePoll": "Anketa na stránke indexu komunity",
"OrganizationOverview": "Prehľad organizácie",
"EmailPreferences": "Predvoľby e-mailu",
"DoYouAgreePrivacyPolicy": "Kliknutím <i>Prihlásiť sa na odber</i> súhlasíte s <a href=\"https://account.abp.io/Account/TermsConditions\">Podmienky</a> a <a href=\"https://account.abp.io/Account/Privacy\">Zásady ochrany osobných údajov</a>.",
"VideoCourses": "Video kurzy",
"Resources": "Zdroje"
}
}

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

@ -231,6 +231,10 @@
"BlogProfile": "Blog profil",
"Tickets": "Vstopnice",
"MeetTheABPCommunity": "Spoznajte ABP z <span class=\"gradient-community\">Skupnostjo</span>",
"DisplayName:CommunityIndexPagePoll": "Anketa na strani z indeksom skupnosti"
"DisplayName:CommunityIndexPagePoll": "Anketa na strani z indeksom skupnosti",
"OrganizationOverview": "Pregled organizacije",
"EmailPreferences": "E-poštne nastavitve",
"DoYouAgreePrivacyPolicy": "S klikom <i>Naročite se</i> gumb se strinjate z <a href=\"https://account.abp.io/Account/TermsConditions\">Pogoji</a> in <a href=\"https://account.abp.io/Account/Privacy\">Politika zasebnosti</a>.",
"VideoCourses": "Video tečaji"
}
}

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

@ -181,6 +181,12 @@
"Raffles": "Çekilişler",
"HowItWorks": "Nasıl Çalışıyor?",
"WhyABPIOPlatform": "Neden ABP.IO Platform?",
"ReleaseNotes": "Sürüm Notları"
"ReleaseNotes": "Sürüm Notları",
"Resources": "Kaynaklar",
"VideoCourses": "Video Kurslar",
"OrganizationOverview": "Organizasyon Detayı",
"EmailPreferences": "E-posta Tercihleri",
"DoYouAgreePrivacyPolicy": "<i>Abone Ol</i> butonuna tıklayarak <a href=\"https://account.abp.io/Account/TermsConditions\">Şartlar</a> ve <a href=\"https://account.abp.io/Account/Privacy\">Gizlilik Politikası</a> kurallarımızı kabul etmiş olursunuz."
}
}

8
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/vi.json

@ -230,6 +230,12 @@
"BlogProfile": "Hồ sơ blog",
"Tickets": "Vé",
"MeetTheABPCommunity": "Gặp gỡ ABP với <span class=\"gradient-community\">Cộng đồng</span>",
"DisplayName:CommunityIndexPagePoll": "Bình chọn trang chủ cộng đồng"
"DisplayName:CommunityIndexPagePoll": "Bình chọn trang chủ cộng đồng",
"OrganizationOverview": "Tổng quan về tổ chức",
"EmailPreferences": "Tuỳ chọn email",
"DoYouAgreePrivacyPolicy": "Bằng cách nhấp chuột <i>Đặt mua</i> nút bạn đồng ý với <a href=\"https://account.abp.io/Account/TermsConditions\">Điều kiện</a> Và <a href=\"https://account.abp.io/Account/Privacy\">Chính sách bảo mật</a>.",
"VideoCourses": "Khóa học video",
"Resources": "Tài nguyên"
}
}

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

@ -231,6 +231,12 @@
"BlogProfile": "博客简介",
"Tickets": "门票",
"MeetTheABPCommunity": "与 ABP 一起认识 <span class=\"gradient-community\">社区</span>",
"DisplayName:CommunityIndexPagePoll": "社区首页投票"
"DisplayName:CommunityIndexPagePoll": "社区首页投票",
"OrganizationOverview": "组织概况",
"EmailPreferences": "电子邮件首选项",
"DoYouAgreePrivacyPolicy": "通过点击 <i>订阅</i> 按钮表示您同意 <a href=\"https://account.abp.io/Account/TermsConditions\">条款</a> 和 <a href=\"https://account.abp.io/Account/Privacy\">隐私政策</a>。",
"VideoCourses": "视频课程",
"Resources": "资源"
}
}

8
abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hant.json

@ -231,6 +231,12 @@
"BlogProfile": "部落格簡介",
"Tickets": "門票",
"MeetTheABPCommunity": "與 ABP 一起認識 <span class=\"gradient-community\">社群</span>",
"DisplayName:CommunityIndexPagePoll": "社區首頁調查"
"DisplayName:CommunityIndexPagePoll": "社區首頁調查",
"OrganizationOverview": "组织概况",
"EmailPreferences": "电子邮件首选项",
"DoYouAgreePrivacyPolicy": "通过点击 <i>订阅</i> 按钮表示您同意 <a href=\"https://account.abp.io/Account/TermsConditions\">条款</a> 和 <a href=\"https://account.abp.io/Account/Privacy\">隐私政策</a>。",
"VideoCourses": "视频课程",
"Resources": "资源"
}
}

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

@ -797,6 +797,9 @@
"UsedPayment": "لقد تم استخدام هذه الدفعة بالفعل",
"ManageLicense": "التحكم في الترخيص",
"AbpPlatformLeptonXTheme": "سمة LeptonX للوحة تحكم المشرف الخاصة بك من قبل <span class=\"gradient-commercial\">ABP Platform</span>",
"Previous": "سابق",
"PricingDiscount": "تخفيض",
"YourOrganizationOverview": "Your Organization Overview",
"TrainingDetailsHeaderInfo_TrainingHourSingular": "{0} ساعة"
}
}

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

@ -411,6 +411,9 @@
"UsedPayment": "Tato platba již byla použita",
"ManageLicense": "Správa licence",
"AbpPlatformLeptonXTheme": "LeptonX téma pro váš správce účtu od <span class=\"gradient-commercial\">ABP Platform</span>",
"Previous": "Předchozí",
"PricingDiscount": "Sleva",
"YourOrganizationOverview": "Přehled vaší organizace",
"TrainingDetailsHeaderInfo_TrainingHourSingular": "{0} hodina",
"TrainingDetailsHeaderInfo_TrainingHour": "{0} hodin"
}

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

@ -392,8 +392,10 @@
"UsedPayment": "Diese Zahlung wurde bereits verwendet",
"ManageLicense": "Lizenz verwalten",
"AbpPlatformLeptonXTheme": "LeptonX-Theme für Ihr Admin-Dashboard von <span class=\"gradient-commercial\">ABP Platform</span>",
"Previous": "Vorherige",
"PricingDiscount": "Rabatt",
"YourOrganizationOverview": "Ihre Organisationsübersicht",
"TrainingDetailsHeaderInfo_TrainingHourSingular": "{0} Stunde",
"TrainingDetailsHeaderInfo_TrainingHour": "{0} Stunden"
}
}

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

@ -114,6 +114,8 @@
"MultipleOrganizationInfo": "See All Your Organizations",
"PaymentFailedInfo": "Sorry, payment failed! This could be due to insufficient funds, invalid credit card numbers or invalid pin",
"UsedPayment": "This payment has been already used",
"Previous": "Previous",
"YourOrganizationOverview": "Your Organization Overview",
"TrainingDetailsHeaderInfo_TrainingHourSingular": "{0} hour",
"TrainingDetailsHeaderInfo_TrainingHour": "{0} hours"
}

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

@ -1143,6 +1143,51 @@
"CreditCardNumberLengthWarning": "Invalid card number",
"ExpirationWarning": "Invalid expiration date",
"CreateCreditCardModal_Description": "When saving your debit/credit card, a temporary $1 charge will be authorized for verification and promptly refunded.",
"ReturnOfInvestmentTitle": "Return of <span class=\"gradient-commercial\">Investment</span>",
"ReduceYourDevelopmentCostsDescription": "Reduce your development costs by more than 50% with the ABP Framework. How? Keep reading...",
"SettingUpTheArchitectureTitle": "Setting Up the Architecture",
"DoingEverythingFromScratch": "Doing everything from scratch",
"SettingUpTheArchitecture_Description1": "Organize code base and solution structure",
"SettingUpTheArchitecture_Description2": "Determine, install and configure essential 3rd-party libraries",
"SettingUpTheArchitecture_Description3": "Setup automated integration and unit test infrastructure",
"SettingUpTheArchitecture_Description4": "Determine and document code standards, train the development team",
"UsingTheABPFramework": "Using the ABP Framework",
"UseABPSettingUpTheArchitecture_Description": "Use ABP's startup solution templates",
"ReduceCostsWithABP": "Reduce Costs with ABP by",
"ReduceCostsBy": "80% to 100%",
"DesigningTheUserInterfaceTitle": "Designing the User Interface",
"DesigningTheUserInterface_Description1": "Create or buy a UI theme",
"DesigningTheUserInterface_Description2": "Adapt the UI theme to the solution",
"DesigningTheUserInterface_Description3": "Build the essential UI parts (layout, menu, header, footer with responsive design)",
"DesigningTheUserInterface_Description4": "Ensure the design consistency across application pages",
"UseABPDesigningTheUserInterface_Description": "Use ABP's LeptonX UI Theme",
"DevelopingApplicationFeaturesTitle": "Developing the Application Features",
"DevelopingApplicationFeatures_Description1": "Develop your own business logic",
"DevelopingApplicationFeatures_Description2": "Develop every page one by one",
"DevelopingApplicationFeatures_Description3": "Develop common business modules yourself",
"DevelopingApplicationFeatures_Description4": "Develop the authentication system (single sign on, 2 factor auth, social logins, reset password, email activation, etc...)",
"DevelopingApplicationFeatures_Description5": "Apply cross-cutting concerns in every use case (DB transactions, authorization, validation, exception handling, etc...)",
"DevelopingApplicationFeatures_Description6": "Develop common base classes and utility services",
"DevelopingApplicationFeatures_Description7": "Develop common non-business requirements (audit logging, soft-delete, background jobs, permission system, etc.)",
"UseABPDevelopingApplicationFeatures_Description1": "Develop your own business logic",
"UseABPDevelopingApplicationFeatures_Description2": "Use ABP Suite to automatically generate CRUD-like pages",
"UseABPDevelopingApplicationFeatures_Description3": "Directly use ABP's pre-built common application modules and customize based on your unique requirements",
"ReduceCostsBy_2": "40% to 60%",
"WhyABPIoPlatform": "Why ABP.IO Platform?",
"WhyShouldYouUsetheABPIOPlatform": "Why should you use the ABP.IO Platform instead of creating a new solution from scratch?",
"ExploreMore": "Explore More",
"DocumentIntroducesDescription": "If you want to <b>learn more details</b> about why should you use the ABP.IO Platform instead of creating a new solution from scratch, read the following document: ",
"ReturnOfInvestmentPageAbout": "This page covers the fundamental steps of developing a software solution and explains how the ABP.IO Platform reduces your development costs at each step.",
"LearnMore": "Learn More",
"ReturnOfInvestment": "Return of Investment",
"ReturnOfInvestment_Description": "Learn how to reduce your development costs by more than %50.",
"Previous": "Previous",
"PricingDiscount": "Save",
"PricingTeamTitle": "Team",
"PricingBusinessTitle": "Business",
"PricingEnterpriseTitle": "Enterprise",
"SpecialDiscount": "Special Discount",
"YourOrganizationOverview": "Your Organization Overview",
"TrainingDetailsHeaderInfo_TrainingHourSingular": "{0} hour"
}
}

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

@ -392,6 +392,9 @@
"UsedPayment": "Este pago ya ha sido utilizado.",
"ManageLicense": "Gestionar licencia",
"AbpPlatformLeptonXTheme": "Tema LeptonX para su panel de administración por <span class=\"gradient-commercial\">ABP Platform</span>",
"Previous": "Anterior",
"PricingDiscount": "Descuento",
"YourOrganizationOverview": "Descripción general de su organización",
"TrainingDetailsHeaderInfo_TrainingHourSingular": "{0} hora",
"TrainingDetailsHeaderInfo_TrainingHour": "{0} horas"
}

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

@ -831,8 +831,11 @@
"MultipleOrganizationInfo": "Katso kaikki organisaatiosi",
"PaymentFailedInfo": "Anteeksi, maksu epäonnistui! ",
"UsedPayment": "Tämä maksu on jo käytetty",
"ManageLicense": "Hallinnoi lisenssiä",
"ManageLicense": "Hallinnoi lisenssiä",
"AbpPlatformLeptonXTheme": "LeptonX-teema hallintapaneelillesi ABP Platformin toimesta <span class=\"gradient-commercial\">ABP Platform</span>",
"Previous": "Edellinen",
"PricingDiscount": "Alennus",
"YourOrganizationOverview": "Organisaation yleiskatsaus",
"TrainingDetailsHeaderInfo_TrainingHourSingular": "{0} tunti"
}
}

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

@ -411,6 +411,9 @@
"UsedPayment": "Ce paiement a déjà été utilisé",
"ManageLicense": "Gérer la licence",
"AbpPlatformLeptonXTheme": "Thème LeptonX pour votre tableau de bord administrateur par <span class=\"gradient-commercial\">ABP Platform</span>",
"Previous": "Précédent",
"PricingDiscount": "Rabais",
"YourOrganizationOverview": "Aperçu de votre organisation",
"TrainingDetailsHeaderInfo_TrainingHourSingular": "{0} heure",
"TrainingDetailsHeaderInfo_TrainingHour": "{0} heures"
}

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

@ -410,6 +410,9 @@
"UsedPayment": "इस भुगतान का उपयोग पहले ही किया जा चुका है",
"ManageLicense": "लाइसेंस प्रबंधन",
"AbpPlatformLeptonXTheme": "ABP Platform द्वारा आपके व्यवस्थापक डैशबोर्ड के लिए LeptonX थीम",
"Previous": "पहले का",
"PricingDiscount": "छूट",
"YourOrganizationOverview": "आपके संगठन का अवलोकन",
"TrainingDetailsHeaderInfo_TrainingHourSingular": "{0} घंटा",
"TrainingDetailsHeaderInfo_TrainingHour": "{0} घंटे"
}

3
abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hr.json

@ -1089,6 +1089,9 @@
"UsedPayment": "Ovo plaćanje je već iskorišteno",
"ManageLicense": "Upravljanje licencom",
"AbpPlatformLeptonXTheme": "LeptonX Tema za vašu administratorsku nadzornu ploču od strane <span class=\"gradient-commercial\">ABP Platform</span>",
"Previous": "Prethodno",
"PricingDiscount": "Popust",
"YourOrganizationOverview": "Pregled vaše organizacije",
"TrainingDetailsHeaderInfo_TrainingHourSingular": "{0} sat"
}
}

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

@ -759,6 +759,9 @@
"UsedPayment": "Ezt a fizetést már felhasználták",
"ManageLicense": "Licenc kezelése",
"AbpPlatformLeptonXTheme": "LeptonX téma az Adminisztrációs Vezérlőpultjához az <span class=\"gradient-commercial\">ABP Platform</span> által",
"Previous": "Előző",
"PricingDiscount": "Kedvezmény",
"YourOrganizationOverview": "Az Ön szervezetének áttekintése",
"TrainingDetailsHeaderInfo_TrainingHourSingular": "{0} óra"
}
}

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

@ -389,6 +389,9 @@
"UsedPayment": "Þessi greiðsla hefur þegar verið notuð",
"ManageLicense": "Stjórna leyfi",
"AbpPlatformLeptonXTheme": "LeptonX Þema fyrir stjórnborð stjórnanda þíns af <span class=\"gradient-commercial\">ABP Platform</span>",
"Previous": "Fyrri",
"PricingDiscount": "Afsláttur",
"YourOrganizationOverview": "Yfirlit yfir stofnunina þína",
"TrainingDetailsHeaderInfo_TrainingHourSingular": "{0} klukkustund",
"TrainingDetailsHeaderInfo_TrainingHour": "{0} klukkustundir"
}

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

@ -410,6 +410,9 @@
"UsedPayment": "Questo pagamento è già stato utilizzato",
"ManageLicense": "Gestisci la licenza",
"AbpPlatformLeptonXTheme": "Tema LeptonX per la tua bacheca amministrativa di <span class=\"gradient-commercial\">ABP Platform</span>",
"Previous": "Precedente",
"PricingDiscount": "Sconto",
"YourOrganizationOverview": "Panoramica della tua organizzazione",
"TrainingDetailsHeaderInfo_TrainingHourSingular": "{0} ora",
"TrainingDetailsHeaderInfo_TrainingHour": "{0} ore"
}

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

@ -389,6 +389,9 @@
"UsedPayment": "Deze betaling is al gebruikt",
"ManageLicense": "Licentie beheren",
"AbpPlatformLeptonXTheme": "LeptonX-thema voor uw beheerdersdashboard door <span class=\"gradient-commercial\">ABP Platform</span>",
"Previous": "Vorig",
"PricingDiscount": "Korting",
"YourOrganizationOverview": "Uw organisatieoverzicht",
"TrainingDetailsHeaderInfo_TrainingHourSingular": "{0} uur",
"TrainingDetailsHeaderInfo_TrainingHour": "{0} uur"
}

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

@ -389,6 +389,9 @@
"UsedPayment": "Ta płatność została już wykorzystana",
"ManageLicense": "Zarządzaj licencją",
"AbpPlatformLeptonXTheme": "Motyw LeptonX dla Twojej konsoli administracyjnej od <span class=\"gradient-commercial\">ABP Platform</span>",
"Previous": "Poprzedni",
"PricingDiscount": "Rabat",
"YourOrganizationOverview": "Przegląd Twojej organizacji",
"TrainingDetailsHeaderInfo_TrainingHourSingular": "{0} godzina",
"TrainingDetailsHeaderInfo_TrainingHour": "{0} godzin"
}

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

@ -412,6 +412,9 @@
"UsedPayment": "Este pagamento já foi usado",
"ManageLicense": "Gerenciar Licença",
"AbpPlatformLeptonXTheme": "Tema LeptonX para o seu Painel de Administração por <span class=\"gradient-commercial\">ABP Platform</span>",
"Previous": "Anterior",
"PricingDiscount": "Desconto",
"YourOrganizationOverview": "Visão geral da sua organização",
"TrainingDetailsHeaderInfo_TrainingHourSingular": "{0} hora",
"TrainingDetailsHeaderInfo_TrainingHour": "{0} horas"
}

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

@ -389,6 +389,9 @@
"UsedPayment": "Această plată a fost deja utilizată",
"ManageLicense": "Administrare licență",
"AbpPlatformLeptonXTheme": "Tema LeptonX pentru panoul tău de administrare de la <span class=\"gradient-commercial\">ABP Platform</span>",
"Previous": "Anterior",
"PricingDiscount": "Reducere",
"YourOrganizationOverview": "Prezentare generală a organizației dvs",
"TrainingDetailsHeaderInfo_TrainingHourSingular": "{0} oră",
"TrainingDetailsHeaderInfo_TrainingHour": "{0} ore"
}

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

@ -1090,6 +1090,9 @@
"UsedPayment": "Этот платеж уже использован",
"ManageLicense": "Управление лицензией",
"AbpPlatformLeptonXTheme": "Тема LeptonX для вашей панели администратора от <span class=\"gradient-commercial\">ABP Platform</span>",
"Previous": "Предыдущий",
"PricingDiscount": "Скидка",
"YourOrganizationOverview": "Обзор вашей организации",
"TrainingDetailsHeaderInfo_TrainingHourSingular": "{0} час"
}
}

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

@ -408,6 +408,9 @@
"UsedPayment": "Táto platba už bola použitá",
"ManageLicense": "Spravovať licenciu",
"AbpPlatformLeptonXTheme": "Téma LeptonX pre váš administratívny panel od <span class=\"gradient-commercial\">ABP Platform</span>",
"Previous": "Predchádzajúce",
"PricingDiscount": "Zľava",
"YourOrganizationOverview": "Prehľad vašej organizácie",
"TrainingDetailsHeaderInfo_TrainingHourSingular": "{0} hodina",
"TrainingDetailsHeaderInfo_TrainingHour": "{0} hodín"
}

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

@ -389,6 +389,9 @@
"UsedPayment": "To plačilo je že bilo uporabljeno",
"ManageLicense": "Upravljanje licenco",
"AbpPlatformLeptonXTheme": "LeptonX Tema za vaš upraviteljski nadzorni pult s strani <span class=\"gradient-commercial\">ABP Platform</span>",
"Previous": "Prejšnja",
"PricingDiscount": "Popust",
"YourOrganizationOverview": "Pregled vaše organizacije",
"TrainingDetailsHeaderInfo_TrainingHourSingular": "{0} ura",
"TrainingDetailsHeaderInfo_TrainingHour": "{0} ur"
}

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

@ -274,7 +274,7 @@
"LiveTrainingSupport": "Canlı eğitim ve destek",
"AndMore": "ve dahası",
"AdditionalDeveloperLicense": "Ek geliştirici lisansı",
"ProjectCount": "proje sayısı",
"ProjectCount": "Proje sayısı",
"AllProModules": "Tüm profesyonel modüller",
"AllProThemes": "Tüm profesyonel temalar",
"AllProStartupTemplates": "Tüm profesyonel başlangıç şablonları",
@ -615,7 +615,7 @@
"TotalDeveloperPrice": "Toplam Geliştirici Fiyatı",
"Purchase_PricePerDeveloper": "<span>{0}</span> geliştirici başına",
"Purchase_IncludedDeveloperInfo": "{0} {1} dahil.",
"Purchase_LicenseExtraDeveloperPurchaseMessage": "<span class=\"fw-6\">{0} lisansı</span> {1} geliştirici(ler) içerir. Şimdi veya daha sonra ek geliştiriciler ekleyebilirsiniz.",
"Purchase_LicenseExtraDeveloperPurchaseMessage": "<span class=\"fw-6\">{0} lisansı</span> {1} geliştirici içerir. Şimdi veya daha sonra ek geliştirici ekleyebilirsiniz.",
"StartupTemplates_Page_Title": "ABP Başlangıç Şablonları",
"StartupTemplates_Page_Description": "ABP Commercial, her düzeyde karmaşıklığa sahip projeler oluşturmanıza olanak tanır. Önceden oluşturulmuş iki ana başlangıç projesi sunar. Gereksinimlerinize yakın olanı seçebilir ve bunun üzerine kendi özel projenizi oluşturabilirsiniz.",
"MicroserviceStartupSolutionForDotnet": ".NET için Mikroservis Başlatma Projesi",
@ -999,6 +999,9 @@
"MyOrganizations_Detail_LicenseExpiryDate": "Bitiş Tarihi",
"ManageLicense": "Lisansı Yönet",
"AbpPlatformLeptonXTheme": "<span class=\"gradient-commercial\">ABP Platform</span> Yönetici Kontrol Paneliniz için LeptonX Teması",
"Previous": "Önceki",
"PricingDiscount": "İndirim",
"YourOrganizationOverview": "Organizasyon Detayı",
"TrainingDetailsHeaderInfo_TrainingHourSingular": "{0} saat"
}
}

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

@ -389,6 +389,9 @@
"UsedPayment": "Khoản thanh toán này đã được sử dụng",
"ManageLicense": "Quản lý Giấy phép",
"AbpPlatformLeptonXTheme": "Chủ đề LeptonX cho Bảng điều khiển quản trị của bạn bởi <span class=\"gradient-commercial\">ABP Platform</span>",
"Previous": "Trước",
"PricingDiscount": "Popust",
"YourOrganizationOverview": "Tổng quan về tổ chức của bạn",
"TrainingDetailsHeaderInfo_TrainingHourSingular": "{0} giờ",
"TrainingDetailsHeaderInfo_TrainingHour": "{0} giờ"
}

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

@ -1091,6 +1091,9 @@
"UsedPayment": "该付款已被使用",
"ManageLicense": "管理许可证",
"AbpPlatformLeptonXTheme": "由 <span class=\"gradient-commercial\">ABP Platform</span> 提供的您的管理仪表板的 LeptonX 主题",
"Previous": "以前的",
"PricingDiscount": "折扣",
"YourOrganizationOverview": "您的组织概览",
"TrainingDetailsHeaderInfo_TrainingHourSingular": "{0} 小时"
}
}

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

@ -1080,6 +1080,9 @@
"UsedPayment": "该付款已被使用",
"ManageLicense": "管理許可證",
"AbpPlatformLeptonXTheme": "由 <span class=\"gradient-commercial\">ABP Platform</span> 提供的您的管理儀表板的 LeptonX 主題",
"Previous": "以前的",
"PricingDiscount": "折扣",
"YourOrganizationOverview": "您的组织概览",
"TrainingDetailsHeaderInfo_TrainingHourSingular": "{0} 小时"
}
}

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

@ -467,6 +467,8 @@
"Title": "العنوان",
"TitlePlaceholder": "مطور برامج، مدير تكنولوجيا المعلومات، إلخ.",
"Characters": "الأحرف",
"ABPTestimonialDescription": "ABP Framework: دعونا نسمع شهادتك"
"ABPTestimonialDescription": "ABP Framework: دعونا نسمع شهادتك",
"LeaveUsReview": "ترك لنا المراجعة",
"DocumentationButtonTitle": "توثيق"
}
}

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

@ -467,6 +467,8 @@
"Title": "Titul",
"TitlePlaceholder": "Vývojář softwaru, CTO atd.",
"Characters": "znaky",
"ABPTestimonialDescription": "ABP Framework: Pojďme slyšet vaši referenci"
"ABPTestimonialDescription": "ABP Framework: Pojďme slyšet vaši referenci",
"LeaveUsReview": "Zanechte nám recenzi",
"DocumentationButtonTitle": "Dokumentace"
}
}

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

@ -467,6 +467,8 @@
"Title": "Titel",
"TitlePlaceholder": "Softwareentwickler, CTO usw.",
"Characters": "zeichen",
"ABPTestimonialDescription": "ABP Framework: Lass uns deine Bewertung hören"
"ABPTestimonialDescription": "ABP Framework: Lass uns deine Bewertung hören",
"LeaveUsReview": "Hinterlassen Sie uns eine Bewertung",
"DocumentationButtonTitle": "Dokumentation"
}
}

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

@ -271,6 +271,7 @@
"DDDBookEmailBody": "Thank you. <br /> To download your book, <a href=\"{0}\">click here</a>.",
"SubscribeToNewsletter": "Subscribe to the newsletter to get information about happenings in the ABP.IO Platform, like new releases, posts, offers, and more.",
"FirstEdition": "First Edition",
"SelectUITheme": "Select UI Theme"
"SelectUITheme": "Select UI Theme",
"LeaveUsReview": "Leave us review"
}
}

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

@ -478,6 +478,9 @@
"PasswordLength": "The field Password must be a string with a maximum length of 32.",
"PasswordRequired": "The Password field is required.",
"AddressLength": "The field Address must be a string with a maximum length of 255.",
"GenderRequired": "The Gender field is required."
"GenderRequired": "The Gender field is required.",
"LeaveUsReview": "Leave us review",
"DocumentationButtonTitle": "Documentation"
}
}

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

@ -467,6 +467,8 @@
"Title": "Título",
"TitlePlaceholder": "Desarrollador de software, CTO, etc.",
"Characters": "caracteres",
"ABPTestimonialDescription": "ABP Framework: Escuchemos tu testimonio"
"ABPTestimonialDescription": "ABP Framework: Escuchemos tu testimonio",
"LeaveUsReview": "Déjanos tu reseña",
"DocumentationButtonTitle": "Documentación"
}
}

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

@ -467,6 +467,8 @@
"Title": "Titteli",
"TitlePlaceholder": "Ohjelmistokehittäjä, CTO, jne.",
"Characters": "hahmot",
"ABPTestimonialDescription": "ABP Framework: Kuunnellaanpa sinun suosittelua"
"ABPTestimonialDescription": "ABP Framework: Kuunnellaanpa sinun suosittelua",
"LeaveUsReview": "Jätä meille arvostelu",
"DocumentationButtonTitle": "Dokumentointi"
}
}

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

@ -467,6 +467,8 @@
"Title": "Titre",
"TitlePlaceholder": "Développeur de logiciels, CTO, etc.",
"Characters": "caractères",
"ABPTestimonialDescription": "ABP Framework : Écoutons votre témoignage"
"ABPTestimonialDescription": "ABP Framework : Écoutons votre témoignage",
"LeaveUsReview": "Laissez-nous votre avis",
"DocumentationButtonTitle": "Documentation"
}
}

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

@ -467,6 +467,8 @@
"Title": "शीर्षक",
"TitlePlaceholder": "सॉफ़्टवेयर डेवेलपर, सीटीओ, आदि।",
"Characters": "अक्षर",
"ABPTestimonialDescription": "ABP Framework: आइए आपका प्रशंसापत्र सुनें"
"ABPTestimonialDescription": "ABP Framework: आइए आपका प्रशंसापत्र सुनें",
"LeaveUsReview": "हमें समीक्षा छोड़ें",
"DocumentationButtonTitle": "प्रलेखन"
}
}

4
abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hr.json

@ -467,6 +467,8 @@
"Title": "Naslov",
"TitlePlaceholder": "Razvojni inženjer, CTO, itd.",
"Characters": "znakovi",
"ABPTestimonialDescription": "ABP Framework: Hajde da čujemo tvoje iskustvo"
"ABPTestimonialDescription": "ABP Framework: Hajde da čujemo tvoje iskustvo",
"LeaveUsReview": "Ostavite nam recenziju",
"DocumentationButtonTitle": "Dokumentacija"
}
}

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

@ -467,6 +467,8 @@
"Title": "Cím",
"TitlePlaceholder": "Szoftvertervező, CTO, stb.",
"Characters": "karakterek",
"ABPTestimonialDescription": "ABP Framework: Halljuk az Ön beszámolóját"
"ABPTestimonialDescription": "ABP Framework: Halljuk az Ön beszámolóját",
"LeaveUsReview": "Hagyjon véleményt nekünk",
"DocumentationButtonTitle": "Dokumentáció"
}
}

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

@ -467,6 +467,8 @@
"Title": "Titill",
"TitlePlaceholder": "Hugbúnaðarþróunarmiðill, CTO o.s.frv.",
"Characters": "stafir",
"ABPTestimonialDescription": "ABP Framework: Við skulum heyra vitnisburð þinn"
"ABPTestimonialDescription": "ABP Framework: Við skulum heyra vitnisburð þinn",
"LeaveUsReview": "Skildu eftir okkur umsögn",
"DocumentationButtonTitle": "Skjöl"
}
}

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

@ -468,5 +468,7 @@
"TitlePlaceholder": "Sviluppatore di software, CTO ecc.",
"Characters": "caratteri",
"ABPTestimonialDescription": "ABP Framework: Ascoltiamo la tua testimonianza",
"LeaveUsReview": "Lasciaci una recensione",
"DocumentationButtonTitle": "Documentazione"
}
}

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

@ -467,6 +467,8 @@
"Title": "Titel",
"TitlePlaceholder": "Softwareontwikkelaar, CTO enz.",
"Characters": "tekens",
"ABPTestimonialDescription": "ABP Framework: Laten we uw getuigenis horen"
"ABPTestimonialDescription": "ABP Framework: Laten we uw getuigenis horen",
"LeaveUsReview": "Laat ons een beoordeling achter",
"DocumentationButtonTitle": "Documentatie"
}
}

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

@ -467,6 +467,8 @@
"Title": "Tytuł",
"TitlePlaceholder": "Programista, CTO itp.",
"Characters": "znaki",
"ABPTestimonialDescription": "Struktura ABP: Posłuchajmy Twojej opinii"
"ABPTestimonialDescription": "Struktura ABP: Posłuchajmy Twojej opinii",
"LeaveUsReview": "Zostaw nam recenzję",
"DocumentationButtonTitle": "Dokumentacja"
}
}
}

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

@ -467,6 +467,8 @@
"Title": "Título",
"TitlePlaceholder": "Desenvolvedor de software, CTO etc.",
"Characters": "caracteres",
"ABPTestimonialDescription": "Estrutura ABP: vamos ouvir seu depoimento"
"ABPTestimonialDescription": "Estrutura ABP: vamos ouvir seu depoimento",
"LeaveUsReview": "Deixe-nos uma avaliação",
"DocumentationButtonTitle": "Documentação"
}
}

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

@ -467,6 +467,8 @@
"Title": "Titlu",
"TitlePlaceholder": "Dezvoltator software, CTO etc.",
"Characters": "caractere",
"ABPTestimonialDescription": "Cadrul ABP: Haideți să vă ascultăm mărturia"
"ABPTestimonialDescription": "Cadrul ABP: Haideți să vă ascultăm mărturia",
"LeaveUsReview": "Lasă-ne o recenzie",
"DocumentationButtonTitle": "Documentație"
}
}

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

@ -465,6 +465,8 @@
"Title": "Заголовок",
"TitlePlaceholder": "Разработчик программного обеспечения, технический директор и т. д.",
"Characters": "Символы",
"ABPTestimonialDescription": "ABP Framework: давайте послушаем ваш отзыв"
"ABPTestimonialDescription": "ABP Framework: давайте послушаем ваш отзыв",
"LeaveUsReview": "Оставьте нам отзыв",
"DocumentationButtonTitle": "Документация"
}
}

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

@ -467,6 +467,8 @@
"Title": "Názov",
"TitlePlaceholder": "Vývojár softvéru, CTO atď.",
"Characters": "znaky",
"ABPTestimonialDescription": "Rámec ABP: Vypočujme si vaše svedectvo"
"ABPTestimonialDescription": "Rámec ABP: Vypočujme si vaše svedectvo",
"LeaveUsReview": "Zanechajte nám recenziu",
"DocumentationButtonTitle": "Dokumentácia"
}
}

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

@ -467,6 +467,8 @@
"Title": "Naslov",
"TitlePlaceholder": "Razvijalec programske opreme, tehnični direktor itd.",
"Characters": "znaki",
"ABPTestimonialDescription": "Ogrodje ABP: poslušajmo vaše pričevanje"
"ABPTestimonialDescription": "Ogrodje ABP: poslušajmo vaše pričevanje",
"LeaveUsReview": "Pustite nam oceno",
"DocumentationButtonTitle": "Dokumentacija"
}
}

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

@ -154,7 +154,7 @@
"AndMore": "ve dahası...",
"Code": "Kod",
"Result": "Sonuç",
"SeeTheDocumentForMoreInformation": "Daha fazlası için <a href=\"{1}\">{0} dökümantasyonuna</a> göz atın.",
"SeeTheDocumentForMoreInformation": "Daha fazlası için <a href=\"{1}\">{0} dokümantasyonuna</a> göz atın.",
"IndexPageHeroSection": "<span class=\"first-line shine\"><strong>open source</strong></span><span class=\"second-line text-uppercase\">Web Application<br />Framework </span><span class=\"third-line shine2\"><strong>for asp.net core</strong></span>",
"UiFramework": "UI Framework",
"EmailAddress": "E-Posta Adresi",
@ -178,7 +178,7 @@
"ProgressiveWebApplication": "Progresif Web Uygulaması",
"UseslatestPreVersion": "En son yayın öncesi sürümünü kullanır",
"ReadTheDocumentation": "<span class=\"text-primary\">Belgeleri okuyun</span><span class=\"text-success\"></span>",
"Documentation": "Dökümanlar",
"Documentation": "Dokümanlar",
"GettingStartedTutorial": "Başlarken Eğitimi",
"ApplicationDevelopmentTutorial": "Uygulama Geliştirme Eğitimi",
"TheStartupTemplate": "Başlangıç Şablonu",
@ -214,7 +214,7 @@
"Packages": "Paketler",
"NugetPackages": "Nuget Paketleri",
"NPMPackages": "NPM Paketleri",
"SeeDocs": "Dökümanı Görüntüle",
"SeeDocs": "Dokümanı Görüntüle",
"None": "Hiçbiri",
"Application": "Uygulama",
"ApplicationExplanation": "Domain Driven Design pratikleri üzerine oluşturulmuş çok katmanlı bir çözüm oluşturur. Bakıma ve geliştirmeye açık kod tabanına ihtiyaç duyan uzun süreli projeler için önerilir.",
@ -227,7 +227,7 @@
"License": "Lisans",
"ProjectCreationSuccessMessage": "Projeniz başarıyla oluşturulmuştur",
"HowToRunSolution": "Uygulamayı Nasıl Çalıştırabiliriz?",
"GettingStartedMessage": "Uygulamanızı nasıl yapılandıracağınızı ve çalıştıracağınızı öğrenmek için başlanıç dökümanına bakınız.",
"GettingStartedMessage": "Uygulamanızı nasıl yapılandıracağınızı ve çalıştıracağınızı öğrenmek için başlanıç dokümanına bakınız.",
"WebAppDevTutorial": "Web Uygulaması Geliştirme Öğreticisi",
"WebAppDevTutorialMessage": "Adım adım web uygulaması geliştirme örneği için web uygulaması geliştirme öğreticisine bakınız.",
"CommunityPosts": "Topluluk Makaleleri",
@ -238,7 +238,6 @@
"ClientSideDevelopmentDocumentationMessage": "Kullanıcı arayüzü (istemci tarafı) geliştirmeyle ilgili temel noktaları öğrenmek için {0} belgesine bakın.",
"DatabaseProviderDocumentationMessage": "Veritabanı katmanı geliştirmeyle ilgili temel noktaları öğrenmek için {0} belgesine bakın.",
"ABPCommercialExplanationMessage": "ABP Commercial, ABP Framework için premium modüller, temalar, araçlar ve destek sağlar.",
"ImplementingDDD": "Domain Driven Design'ı Uygulayın",
"DDDBookExplanation": "ABP Framework ile Domain Driven Design'ın uygulanması için pratik bir kılavuz.",
"Overview": "Genel Bakış",
"DDDBookPracticalGuide": "Bu kitap Domain Driven Design'ın uygulanması için pratik bir kılavuz görevi görür. Uygulama ayrıntıları ABP Framework altyapısına dayanırken, temel kavramlar, prensipler ve modeller bir .NET çözümü olmasa bile her türlü çözümde uygulanabilir.",
@ -290,7 +289,7 @@
"AbpNewCommandExplanation": "ABP başlangıç şablonlarını kullanarak yeni çözümler oluşturur.",
"AbpAddModuleCommandExplanation": "Çözümünüze önceden oluşturulmuş uygulama modülleri yükler",
"ExploreAllCLICommands": "Tüm CLI komutlarını keşfedin",
"ExploreDocumentationAndGuides": "Kapsamlı belge ve kılavuzları keşfedin.",
"ExploreDocumentationAndGuides": "Kapsamlı doküman ve kılavuzları keşfedin.",
"Documentations": "Belgeler",
"Views": "Görünümler",
"ReadMore": "Daha fazla oku",
@ -427,7 +426,11 @@
"PasswordLength": "Şifre alanı maksimum 32 karakter olmalıdır.",
"PasswordRequired": "Şifre alanı zorunludur.",
"AddressLength": "Adres alanı maksimum uzunluğu 255 karakter olmalıdır.",
"GenderRequired": "Cinsiyet alanı zorunludur."
"GenderRequired": "Cinsiyet alanı zorunludur.",
"LeaveUsReview": "Yorumunuzu paylaşın",
"BuildingMicroserviceSolutionsShortDescription": "Bu kitap, ABP Framework kullanarak mikroservis tabanlı uygulamalar geliştirmek ve yönetmek için bir başvuru rehberidir.",
"VideoCourses": "Video Kurslar",
"DocumentationButtonTitle": "Dokümantasyon"
}
}

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

@ -467,6 +467,9 @@
"Title": "Tiêu đề",
"TitlePlaceholder": "Nhà phát triển phần mềm, CTO, v.v.",
"Characters": "Ký tự",
"ABPTestimonialDescription": "Khung ABP: Hãy nghe lời chứng thực của bạn"
"ABPTestimonialDescription": "Khung ABP: Hãy nghe lời chứng thực của bạn",
"LeaveUsReview": "Để lại cho chúng tôi xem xét",
"DocumentationButtonTitle": "Tài liệu"
}
}

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

@ -469,6 +469,8 @@
"Title": "标题",
"TitlePlaceholder": "软件开发人员、CTO等",
"Characters": "字符",
"ABPTestimonialDescription": "ABP 框架:让我们听听您的感言"
"ABPTestimonialDescription": "ABP 框架:让我们听听您的感言",
"LeaveUsReview": "给我们留下评论",
"DocumentationButtonTitle": "文档"
}
}

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

@ -469,6 +469,8 @@
"Title": "标题",
"TitlePlaceholder": "软件开发人员、CTO等",
"Characters": "字符",
"ABPTestimonialDescription": "ABP 框架:让我们听听您的感言"
"ABPTestimonialDescription": "ABP 框架:让我们听听您的感言",
"LeaveUsReview": "给我们留下评论",
"DocumentationButtonTitle": "文档"
}
}

4
docs/en/API/Auto-API-Controllers.md

@ -12,9 +12,9 @@ Basic configuration is simple. Just configure `AbpAspNetCoreMvcOptions` and use
[DependsOn(BookStoreApplicationModule)]
public class BookStoreWebModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
public override void PreConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpAspNetCoreMvcOptions>(options =>
PreConfigure<AbpAspNetCoreMvcOptions>(options =>
{
options
.ConventionalControllers

24
docs/en/API/Static-CSharp-API-Clients.md

@ -65,8 +65,9 @@ Now, it's ready to configure the application for the static client proxy generat
````csharp
[DependsOn(
typeof(AbpHttpClientModule) //used to create client proxies
)]
typeof(AbpHttpClientModule), //used to create client proxies
typeof(AbpVirtualFileSystemModule) //virtual file system
)]
public class MyClientAppModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
@ -75,6 +76,12 @@ public class MyClientAppModule : AbpModule
context.Services.AddStaticHttpClientProxies(
typeof(MyClientAppModule).Assembly
);
// Include the generated app-generate-proxy.json in the virtual file system
Configure<AbpVirtualFileSystemOptions>(options =>
{
options.FileSets.AddEmbedded<MyClientAppModule>();
});
}
}
````
@ -84,8 +91,9 @@ public class MyClientAppModule : AbpModule
````csharp
[DependsOn(
typeof(AbpHttpClientModule), //used to create client proxies
typeof(AbpVirtualFileSystemModule), //virtual file system
typeof(BookStoreApplicationContractsModule) //contains the application service interfaces
)]
)]
public class MyClientAppModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
@ -94,6 +102,12 @@ public class MyClientAppModule : AbpModule
context.Services.AddStaticHttpClientProxies(
typeof(BookStoreApplicationContractsModule).Assembly
);
// Include the generated app-generate-proxy.json in the virtual file system
Configure<AbpVirtualFileSystemOptions>(options =>
{
options.FileSets.AddEmbedded<MyClientAppModule>();
});
}
}
````
@ -139,7 +153,7 @@ This command should generate the following files under the `ClientProxies` folde
* `BookClientProxy.Generated.cs` is the actual generated proxy class in this example. `BookClientProxy` is a `partial` class * where you can write your custom code (ABP won't override it).
* `IBookAppService.cs` is the app service.
* `BookDto.cs` is the Dto class which uses by app service.
* `app-generate-proxy.json` contains information about the remote HTTP endpoint, so ABP can properly perform HTTP requests.
* `app-generate-proxy.json` contains information about the remote HTTP endpoint, so ABP can properly perform HTTP requests. This file must be configured as an embedded resource in your project, so that it can be found by the virtual file system.
#### Without Contracts
@ -152,7 +166,7 @@ This command should generate the following files under the `ClientProxies` folde
![generated-static-client-proxies](../images/generated-static-client-proxies-without-contracts.png)
* `BookClientProxy.Generated.cs` is the actual generated proxy class in this example. `BookClientProxy` is a `partial` class where you can write your custom code (ABP won't override it).
* `app-generate-proxy.json` contains information about the remote HTTP endpoint, so ABP can properly perform HTTP requests.
* `app-generate-proxy.json` contains information about the remote HTTP endpoint, so ABP can properly perform HTTP requests. This file must be configured as an embedded resource in your project, so that it can be found by the virtual file system.
> `generate-proxy` command generates proxies for only the APIs you've defined in your application. If you are developing a modular application, you can specify the `-m` (or `--module`) parameter to specify the module you want to generate proxies. See the *generate-proxy* section in the [ABP CLI](../CLI.md) documentation for other options.

239
docs/en/Blog-Posts/2024-02-16 v8_1_Preview/POST.md

@ -0,0 +1,239 @@
# ABP.IO Platform 8.1 RC Has Been Released
Today, we are happy to release the [ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) version **8.1 RC** (Release Candidate). This blog post introduces the new features and important changes in this new version.
Try this version and provide feedback for a more stable version of ABP v8.1! Thanks to all of you.
## Get Started with the 8.1 RC
Follow the steps below to try version 8.1.0 RC today:
1) **Upgrade** the ABP CLI to version `8.1.0-rc.1` using a command line terminal:
````bash
dotnet tool update Volo.Abp.Cli -g --version 8.1.0-rc.1
````
**or install** it if you haven't before:
````bash
dotnet tool install Volo.Abp.Cli -g --version 8.1.0-rc.1
````
2) Create a **new application** with the `--preview` option:
````bash
abp new BookStore --preview
````
See the [ABP CLI documentation](https://docs.abp.io/en/abp/latest/CLI) for all the available options.
> You can also use the [Get Started](https://abp.io/get-started) page to generate a CLI command to create a new application.
You can use any IDE that supports .NET 8.x, like [Visual Studio 2022](https://visualstudio.microsoft.com/downloads/).
## Migration Guides
There are a few breaking changes in this version that may affect your application.
Please see the following migration documents, if you are upgrading from v8.x or earlier:
* [ABP Framework 8.0 to 8.1 Migration Guide](https://docs.abp.io/en/abp/8.1/Migration-Guides/Abp-8_1)
* [ABP Commercial 8.0 to 8.1 Migration Guide](https://docs.abp.io/en/commercial/8.1/migration-guides/v8_1)
## What's New with ABP Framework 8.1?
In this section, I will introduce some major features released in this version.
Here is a brief list of titles explained in the next sections:
* Introducing the `ExposeKeyedServiceAttribute`
* Custom Menu Component Support for MVC UI
* Introducing the `DisableAbpFeaturesAttribute`
### Introducing the `ExposeKeyedServiceAttribute`
[Keyed dependency injection (DI) services](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-8.0#keyed-services) were added to the built-in DI container as a new feature with .NET 8.0. This is an important feature, which allows for registering and retrieving DI services using keys/names.
In this version, we have introduced the `ExposeKeyedServiceAttribute` to allow you to automatically register keyed services by conventions:
```csharp
[ExposeKeyedService<ITaxCalculator>("taxCalculator")]
[ExposeKeyedService<ICalculator>("calculator")]
public class TaxCalculator: ICalculator, ITaxCalculator, ICanCalculate, ITransientDependency
{
}
```
In the example above, the `TaxCalculator` class exposes the `ITaxCalculator` interface with the key `taxCalculator` and the `ICalculator` interface with the key `calculator`.
Thanks to that, then you can use the [`FromKeyedServicesAttribute`](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.fromkeyedservicesattribute?view=dotnet-plat-ext-8.0) to resolve a certain keyed service in the constructor:
```csharp
public class MyClass
{
//...
public MyClass([FromKeyedServices("taxCalculator")] ITaxCalculator taxCalculator)
{
TaxCalculator = taxCalculator;
}
}
```
> Notice that the `ExposeKeyedServiceAttribute` only exposes the keyed services. So, you can not inject the `ITaxCalculator` or `ICalculator` interfaces in your application without using the `FromKeyedServicesAttribute` as shown in the example above.
> If you want to learn more about the keyed dependency injection services, please refer to [Microsoft's documentation](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-8.0#keyed-services) and [ABP Framework's Dependency Injection document](https://docs.abp.io/en/abp/8.1/Dependency-Injection#exposekeyedservice-attribute).
### Custom Menu Component Support for MVC UI
In this version, we have introduced the **custom menu component support**, which allows you to use a custom component for a certain menu item.
You can use the `UseComponent` extension method while defining menu items to use your custom component for the related menu item:
```csharp
context.Menu.Items.Add(
new ApplicationMenuItem("Custom.1", "My Custom Menu", "#")
.UseComponent(typeof(MyMenuComponent)));
```
Then, for the related menu item, your custom component will be rendered on the UI.
### Introducing the `DisableAbpFeaturesAttribute`
In this version, we have introduced the `DisableAbpFeaturesAttribute` to allow you to disable interceptors, middlewares, and MVC filters for a specific controller.
For example, you may want to disable interceptors for a certain controller, but you may also don't want to disable middlewares and mvc filters, in that case, you can use the `DisableAbpFeaturesAttribute` as follows:
```csharp
[Route("api/my-endpoint")]
[DisableAbpFeatures(DisableInterceptors = true, DisableMiddleware = false, DisableMvcFilters = false)]
public class MyController : AbpController
{
}
```
This can be useful if you have some APIs that are used frequently but you don't need all the features of ABP Framework.
> **Note:** If you want to disable all interceptors, middlewares, and filters for a certain controller, then you can use the `[DisableAbpFeatures]` without the need to specify the parameters, they are disabled by default.
## What's New with ABP Commercial 8.1?
We've also worked on ABP Commercial to align the features and changes made in the ABP Framework. The following sections introduce a few new features coming with ABP Commercial 8.1.
### Suite: New Features
In this version, we mostly worked on ABP Suite and implemented some wanted features, such as *bulk delete*, *filterable properties*, *customizable page title*, *allowing establishing relationships with installed ABP modules' entities* and *supporting the `BasicAggregateRoot` as the base class*.
#### Bulk Delete
From this version on, ABP Suite allows you to perform bulk deletion of records based on specified criteria.
![](bulk-delete.png)
To enable *bulk delete support*, you should enable the *Bulk delete* option in the CRUD page generation page, along with the *Create user interface* option (they are enabled by default). When you enable the *bulk delete support*, you will see the checkboxes for each line in the datatable:
![](bulk-delete-datatable.png)
By selecting these checkboxes, you can delete all records in the current datatable (10 records by default), or delete all records in the database (by selecting *select all xx items* selection), or delete any records you want by selecting them one by one.
> **Note:** This feature has already been implemented for MVC & Blazor UIs, but not implemented for Angular UI yet. We aim to implement it for Angular UI with *v8.1.0-rc.2*.
#### Filterable Properties
ABP Suite has been generating advanced filters for entities for a while and before this version, if you enabled the *create user interface* option, then all of the properties that you specified were included in the advanced filter section automatically.
In this version, we have introduced the **filterable properties** feature to allow you to select which properties should be filterable and which are not:
![](filterable-properties.png)
Now, you have full control to select which properties should be included as filter inputs and shown on the advanced filters section on your generated pages.
In other words, once, you select a property as *not filterable*, then the property will not be included in the filter inputs and in the advanced filter section. Also, if there are not any filterable properties for an entity, then the advanced filters section will not be generated.
#### Customizable Page Title
In this version on, ABP Suite allows you to specify the page title for the current entity.
![](page-title.png)
You just need to specify the *page title* on the CRUD page generation page for a specific entity and then it will be used as a localization key in the application (and also will be localized - for example, if you specify it as 'MyPageTitle', then it will be localized in English as 'My Page Title'), so you can localize it for different languages later on.
#### Allowing Establishing Relationships with Installed ABP Modules' Entities
In this version, ABP Suite allows you to establish one-to-many relationship with pre-installed ABP Modules. You can add any entity from pre-installed ABP modules as a navigation property, by checking the **Include entities from ABP modules** checkbox in the navigation property model and choosing the related module entity as in the following figure:
![](suite-include-entities-from-abp-modules.png)
In the example above, the `IdentityUser` entity is selected as the navigation property but you can also choose any entity from the installed ABP modules in the navigation property model.
> **Note:** Ensure that your solution is built properly before establishing relationship between your own entity and a module entity because ABP Suite scans assemblies and finds which ABP modules you are using and lists their entities in the navigation property model if you have checked the **Include entities from ABP modules** checkbox.
#### Support `BasicAggregateRoot` Base Class
In this version on, ABP Suite allows you to choose the `BasicAggregateRoot` as the base class while generating an entity:
![](basic-aggregate-root.png)
> You can choose the [BasicAggregateRoot](https://github.com/abpframework/abp/blob/dev/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/BasicAggregateRoot.cs) if you want to create an aggregate root without the `IHasExtraProperties` and `IHasConcurrencyStamp` interfaces implemented (extra properties & concurrency check).
### ABP Studio v0.6.5 Has Been Released!
We have just released v0.6.5 for ABP Studio and with this version, we fixed many minor bugs reported by you, started supporting running multiple ABP Studio instances, and added important features, such as adding a public website to the new microservice template, and so on...
In addition to all of this, we continue to enrich ABP Studio's documentation as always and you can read them at [https://docs.abp.io/en/commercial/latest/studio/overview](https://docs.abp.io/en/commercial/latest/studio/overview).
Please try ABP Studio v0.6.5 and [provide feedback](https://support.abp.io/QA/Questions/6416/ABP-Studio-Bugs--Issues) to help us release more stable versions. Thanks in advance!
## Community News
### .NET Conf China 2023 Watch Party
![](dotnet-conf-china-2023-watch-party.jpg)
ABP.IO was thrilled to sponsor the first .NET Community event in 2024 held in Shenzen on January 14, 2024.
The event included four wonderful technical lectures to reveal big data and AI's potential opportunities and innovations. It was a transfer of knowledge and a platform for communication and cooperation among technology enthusiasts and we are happy to be attended.
> If you want to learn more about the .NET Conf China 2023 Watch Party event, please check [the blog post](https://blog.abp.io/abp/2024-First-Community-Event).
### Volosoft Attended NDC London 2024
![](ndc-london-2024.png)
Core team members of the ABP Framework, [Halil Ibrahim Kalkan](https://twitter.com/hibrahimkalkan), [Alper Ebicoglu](https://twitter.com/alperebicoglu), [Engincan Veske](https://twitter.com/EngincanVeske), and [Bige Beşikci Yaman](https://twitter.com/bigedediki) attended [NDC London 2024](https://ndclondon.com/) from the 31st of January to the 2nd of February.
It was the 5th time in a row we were a proud sponsor of NDC London. It, now, basically feels like home spending 3 days in Queen Elizabeth Centre II with NDC London for the [ABP.IO](https://abp.io/) team to be there.
These 3 days with the team were all about chatting and having fun with amazing attendees and speakers. We met with talented and passionate software developers and introduced the [open source ABP Framework](https://github.com/abpframework/abp) - web application framework built on ASP.NET Core and [ABP Commercial](https://commercial.abp.io/) - the complete web application development platform built on open source ABP Framework - to them.
> We shared our insights and key highlights from the NDC London 2024 event, which you can find at [https://blog.abp.io/abp/NDC-London-2024-ABP.IO-Key-Highlights](https://blog.abp.io/abp/NDC-London-2024-ABP.IO-Key-Highlights).
### New ABP Community Articles
There are exciting articles contributed by the ABP community as always. I will highlight some of them here:
* [Every Programmer Should Know #2: Optimistic Concurrency Control](https://community.abp.io/posts/every-programmer-should-know-2-optimistic-concurrency-control-sms9xs9n) by [Berkan Sasmaz](https://github.com/berkansasmaz)
* [Global Error Handling in Angular](https://community.abp.io/posts/global-error-handling-in-angular-gjcb2f1e) by [Sinan Öztürk](https://github.com/Sinan997)
* [ABP Framework goes Azure](https://community.abp.io/posts/abp-framework-goes-azure-ub4u5ax5) by [Bart Van Hoey](https://github.com/bartvanhoey)
* [ABP Supports .NET8](https://community.abp.io/posts/abp-supports-.net8-e4gve6ih) by [Alper Ebicoglu](https://community.abp.io/members/alper)
* [Engincan Veske](https://github.com/EngincanV) has created **three** new community articles:
* [ABP Now Supports Keyed Services!](https://community.abp.io/posts/abp-now-supports-keyed-services-6k92wz7h)
* [Mutation Testing in C# with Stryker](https://community.abp.io/posts/mutation-testing-in-c-with-stryker-tp6u599h)
* [ABP Suite: Best CRUD Page Generation Tool for .NET](https://community.abp.io/posts/abp-suite-best-crud-page-generation-tool-for-.net-cmm9xs3n)
* [Ahmed Tarek](https://github.com/AhmedTarekHasan) has created **nine** new community articles:
* [📑 Cover IO Based Apps With Unit Tests in .NET C# 🧪](https://community.abp.io/posts/-cover-io-based-apps-with-unit-tests-in-.net-c--zp6kip2r)
* [Better Enhanced Repository Pattern Implementation in .NET C#](https://community.abp.io/posts/better-enhanced-repository-pattern-implementation-in-.net-c-hpkbxr3l)
* [When Not To Use DI, IoC, and IoC Containers in .NET C#](https://community.abp.io/posts/when-not-to-use-di-ioc-and-ioc-containers-in-.net-c-n769hq8u)
* [⏰ Best Practice for Using Timers in .NET C# ⏳](https://community.abp.io/posts/-best-practice-for-using-timers-in-.net-c--3cqvew5o)
* [How to Fully Cover .NET C# Console Application With Unit Tests](https://community.abp.io/posts/how-to-fully-cover-.net-c-console-application-with-unit-tests-3h248yhe)
* [Web Scraping in .NET C#](https://community.abp.io/posts/web-scraping-in-.net-c-6pkp1abi)
* [Step by step guide to develop a Fluent API from scratch in .NET C# using the Builder Design Pattern](https://community.abp.io/posts/step-by-step-guide-to-develop-a-fluent-api-from-scratch-in-.net-c-using-the-builder-design-pattern-sbww0vky)
* [A Best Practice for Designing Interfaces in .NET C#](https://community.abp.io/posts/a-best-practice-for-designing-interfaces-in-.net-c-9xqc4h8d)
* [Invariance, Covariance, and Contravariance in .NET C#](https://community.abp.io/posts/invariance-covariance-and-contravariance-in-.net-c-9blmuhme)
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/posts/submit) to the ABP Community.
## Conclusion
This version comes with some new features and a lot of enhancements to the existing features. You can see the [Road Map](https://docs.abp.io/en/abp/8.1/Road-Map) documentation to learn about the release schedule and planned features for the next releases. Please try ABP v8.1 RC and provide feedback to help us release a more stable version.
Thanks for being a part of this community!

BIN
docs/en/Blog-Posts/2024-02-16 v8_1_Preview/basic-aggregate-root.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
docs/en/Blog-Posts/2024-02-16 v8_1_Preview/bulk-delete-datatable.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

BIN
docs/en/Blog-Posts/2024-02-16 v8_1_Preview/bulk-delete.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

BIN
docs/en/Blog-Posts/2024-02-16 v8_1_Preview/cover-image.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 KiB

BIN
docs/en/Blog-Posts/2024-02-16 v8_1_Preview/dotnet-conf-china-2023-watch-party.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

BIN
docs/en/Blog-Posts/2024-02-16 v8_1_Preview/filterable-properties.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

BIN
docs/en/Blog-Posts/2024-02-16 v8_1_Preview/ndc-london-2024.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

BIN
docs/en/Blog-Posts/2024-02-16 v8_1_Preview/page-title.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

BIN
docs/en/Blog-Posts/2024-02-16 v8_1_Preview/suite-include-entities-from-abp-modules.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

5
docs/en/CLI.md

@ -48,8 +48,9 @@ Here, is the list of all available commands before explaining their details:
* **`logout`**: Logouts from your computer if you've authenticated before.
* **`bundle`**: Generates script and style references for ABP Blazor and MAUI Blazor project.
* **`install-libs`**: Install NPM Packages for MVC / Razor Pages and Blazor Server UI types.
* **`clear-download-cache`** Clears the templates download cache.
* **`clear-download-cache`**: Clears the templates download cache.
* **`trust-version`**: Trusts the user's version and does not check if the version exists or not. If the template with the given version is found in the cache, it will be used, otherwise throws an exception.
### help
Shows basic usages of the ABP CLI.

266
docs/en/Community-Articles/2024-02-12-Global-Error-Handling-in-Angular/POST.md

@ -0,0 +1,266 @@
# Global Error Handling in Angular
![Error Handling](error_handling.jpg)
Error handling is how we deal with errors that go wrong when we are running a program. There is no code that runs perfectly forever :) Things can go wrong and your application might crash. **So, in order to run your program smoothly you must handle errors.** It is just not for keeping your application in a running state. It is also useful to show messages about the error to the client. Like what went wrong, why it is not allowed to access this page etc.
### How to handle errors
- First of all, you have to catch them 😀. You can catch them via **try-catch block**. See an example;
#### Create an basic error
```ts
({} as any).doSomething()
```
![Error Image](error-image-1.png)
#### Handle it
```ts
try {
({} as any).doSomething();
} catch (error) {
this.toastService.showError(error.message);
}
```
![toast-gif](show-toast-2.gif)
- See, we catch the error and handle it.
- In this case, we know where the error will be thrown. Most of the time we won't know where the error will appear. Should we cover the entire application with try-catch blocks? Of course not 😀
- **We are going to handle errors globally**. Angular provides a great way to do it. Let's do it step by step;
### 1.Create a **service** and implement the **`ErrorHandler`** interface.
```ts
import { ErrorHandler, Injectable, inject } from '@angular/core';
import { ToastService } from './toast.service';
@Injectable({
providedIn: 'root'
})
export class CustomErrorHandlerService implements ErrorHandler {
toastService = inject(ToastService);
//This method comes from interface
handleError(error: any): void {
this.toastService.showError(error.message);
}
}
```
### 2.Provide the service by using the **`ErrorHandler`** class from **`@angular/core`**.
```ts
import { ErrorHandler } from '@angular/core';
providers: [
{ provide: ErrorHandler, useExisting: CustomErrorHandlerService }
]
```
![toast-gif](show-toast-2.gif)
- It behaves exactly the same. Nice, now we catch the entire errors in one simple service.
- Is it that simple? I wish it is but it's not 😀. This handling mechanism only works synchronously. When we start making http requests, our **`CustomErrorHandlerService`** won't catch the errors.
## How to handle HTTP Requests
Make an HTTP request and check if it's working.
![http-request](http-request-4.gif)
As you can see it doesn’t work. So how can we catch the http errors? with **`catchError()`** operator in rxjs or **`observer object`**. I will go with **`catchError()`** operator.
```ts
getTodo(id: number) {
this.http
.get(`https://jsonplaceholder.typicode.com/todos/${id}`)
.pipe(catchError((err) => {
this.toastService.showError(err.message);
return EMPTY;
})
)
.subscribe(todo => this.todo = todo);
}
```
![http-request](http-request-5.gif)
- So are we going to add this **`catchError()`** operator to the entire http requests? **NO, we will use HTTP Interceptors!**
- Let's do it step by step.
### 1.Remove catchError pipe
```ts
getTodo(id: number) {
this.http.get('https://jsonplaceholder.typicode.com/todos/${id}').subscribe(todo => this.todo = todo);
}
```
### 2.Create an HTTP Interceptor
```ts
import { Injectable, inject } from '@angular/core';
import { HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';
import { EMPTY, catchError } from 'rxjs';
import { ToastService } from './toast.service';
@Injectable({
providedIn: 'root'
})
export class ToastInterceptor implements HttpInterceptor {
toastService = inject(ToastService);
intercept(req: HttpRequest<any>, next: HttpHandler) {
return next.handle(req).pipe(catchError((error) => {
this.toastService.showError(error.message);
return EMPTY;
}));
}
}
```
### 3.Provide the interceptor
```ts
import { HTTP_INTERCEPTORS} from '@angular/common/http';
providers: [
{ provide: HTTP_INTERCEPTORS, useExisting: ToastInterceptor, multi: true }
]
```
Now everything has set up. Let's make an HTTP request and try again.
![http-request](http-request-5.gif)
- So, now we are handling http errors globally. Whenever an error occurs, it will be catched from interceptor and will be showed via toast message.
- But this method has a one little disadvantage. What if we dont want to show toast message for a spesific case? [related issue about this problem](https://github.com/angular/angular/issues/18155).
- **[ABP Framework](https://abp.io/) has great solution for this problem. Let's understand the solution and apply it straightforwardly.**
- Create a singleton service called **`HttpErrorReporterService`.** This service is going to store **HttpError** in a subject, and share the httpError as an observable for subscribers.
- Create a new service called **`RestService`** which is a layer on top of **`HttpClient`**, this new service is able to get a skipHandleError parameter. If skipHandleError value is **false** then it will be reported to the **`HttpErrorReporterService`** otherwise error will be throwed.
- Create a service called **`ErrorHandler`**, This service is going to subscribe to observable in **`HttpErrorReporterService`** and handle the errors (in our case we will show toast message).
- When i first see this solution, i loved it. For more information and detail you can check the source code from the links below;
- [**Http Error Reporter Service**](https://github.com/abpframework/abp/blob/360a3395aa0e44fb77574ea7eac745e8ba94b82e/npm/ng-packs/packages/core/src/lib/services/http-error-reporter.service.ts#L6)
- [**Rest Service**](https://github.com/abpframework/abp/blob/360a3395aa0e44fb77574ea7eac745e8ba94b82e/npm/ng-packs/packages/core/src/lib/services/rest.service.ts#L4)
- [**Error Handler**](https://github.com/abpframework/abp/blob/360a3395aa0e44fb77574ea7eac745e8ba94b82e/npm/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts#L19)
You can copy the source codes from ABP or use ABP directly 😀
Lets simulate the solution in our application, this simulation is not suitable for your application it just for demonstration.
**Rest Service**
```ts
import { HttpClient, HttpRequest } from '@angular/common/http';
import { Injectable, inject } from '@angular/core';
import { HttpErrorReporterService } from './http-error-reporter.service';
import { catchError, throwError } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class RestService {
http = inject(HttpClient);
httpErrorReporterService = inject(HttpErrorReporterService);
request(req: HttpRequest<any> | { method: string, url: string; }, skipHandleError = false) {
const { method, url } = req;
return this.http.request(method, url).pipe(catchError((err) => {
if (!skipHandleError) {
this.httpErrorReporterService.reportError(err);
}
return throwError(() => err);
}));
}
}
```
**HttpErrorReporterService**
```ts
import { HttpErrorResponse } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class HttpErrorReporterService {
private _error$ = new Subject<HttpErrorResponse>();
get error$() {
return this._error$.asObservable();
}
reportError(error: HttpErrorResponse) {
this._error$.next(error);
}
}
```
**ErrorHandler**
```ts
import { Injectable, inject } from '@angular/core';
import { HttpErrorReporterService } from './http-error-reporter.service';
import { ToastService } from './toast.service';
@Injectable({
providedIn: 'root'
})
export class ErrorHandlerService {
httpErrorReporterService = inject(HttpErrorReporterService);
toastMessageService = inject(ToastService);
constructor(){
this.httpErrorReporterService.error$.subscribe((error) => {
this.toastMessageService.showError(error.message);
});
}
}
```
Now lets make an http request to check is it working
```ts
restService = inject(RestService);
getTodo() {
this.restService.request(
{ method: 'GET', url: 'https://jsonplaceholder.typicode.com/todos/1111' },
).subscribe(todo => {
this.todo = todo;
});
}
```
![http-request](http-request-7.gif)
Now let's pass **true to the `skipHandleError` parameter**, let's see if the **errorHandler** going to skip this error or not.
```ts
restService = inject(RestService);
getTodo() {
this.restService.request(
{ method: 'GET', url: '<https://jsonplaceholder.typicode.com/todos/1111>' },
skipHandleError: true,
).subscribe(todo => {
this.todo = todo;
});
}
```
![http-request](http-request-8.gif)
### Conclusion
- To handle synchronous errors globally, you can use [Error Handler](https://angular.io/api/core/ErrorHandler).
- To handle http errors globally, you can use [HTTP - interceptor](https://angular.io/guide/http-interceptor-use-cases). But in this method, you won't be able to skip specific cases. I recommend you use the ABP Framework's solution.
Thanks for reading, if you have any advice please share it with me in the comments.

BIN
docs/en/Community-Articles/2024-02-12-Global-Error-Handling-in-Angular/error-image-1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

BIN
docs/en/Community-Articles/2024-02-12-Global-Error-Handling-in-Angular/error_handling.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
docs/en/Community-Articles/2024-02-12-Global-Error-Handling-in-Angular/http-request-4.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

BIN
docs/en/Community-Articles/2024-02-12-Global-Error-Handling-in-Angular/http-request-5.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

BIN
docs/en/Community-Articles/2024-02-12-Global-Error-Handling-in-Angular/http-request-7.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

BIN
docs/en/Community-Articles/2024-02-12-Global-Error-Handling-in-Angular/http-request-8.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

BIN
docs/en/Community-Articles/2024-02-12-Global-Error-Handling-in-Angular/show-toast-2.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

20
docs/en/Getting-Started-Create-Solution-Single-Layer.md

@ -8,6 +8,20 @@
}
````
````json
//[doc-nav]
{
"Next": {
"Name": "Running the solution",
"Path": "Getting-Started-Running-Solution-Single-Layer"
},
"Previous": {
"Name": "Setup Your Development Environment",
"Path": "Getting-Started-Setup-Environment-Single-Layer"
}
}
````
> This document assumes that you prefer to use **{{ UI_Value }}** as the UI framework and **{{ DB_Value }}** as the database provider. For other options, please change the preference on top of this document.
## Create a New Project
@ -45,8 +59,4 @@ Configure<AbpUnitOfWorkDefaultOptions>(options =>
> Or you can delete that code since `Auto` is already the default behavior.
{{ end }}
## Next Step
* [Running the solution](Getting-Started-Running-Solution-Single-Layer.md)
{{ end }}

19
docs/en/Getting-Started-Create-Solution.md

@ -8,6 +8,19 @@
"Tiered": ["Yes", "No"]
}
````
````json
//[doc-nav]
{
"Next": {
"Name": "Running the solution",
"Path": "Getting-Started-Running-Solution"
},
"Previous": {
"Name": "Setup Your Development Environment",
"Path": "Getting-Started-Setup-Environment"
}
}
````
> This document assumes that you prefer to use **{{ UI_Value }}** as the UI framework and **{{ DB_Value }}** as the database provider. For other options, please change the preference on top of this document.
@ -66,8 +79,4 @@ Configure<AbpUnitOfWorkDefaultOptions>(options =>
> Or you can delete that code since `Auto` is already the default behavior.
{{ end }}
## Next Step
* [Running the solution](Getting-Started-Running-Solution.md)
{{ end }}

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

@ -8,6 +8,16 @@
}
````
````json
//[doc-nav]
{
"Previous": {
"Name": "Creating a new solution",
"Path": "Getting-Started-Create-Solution-Single-Layer"
}
}
````
> This document assumes that you prefer to use **{{ UI_Value }}** as the UI framework and **{{ DB_Value }}** as the database provider. For other options, please change the preference on top of this document.
## Create the Database

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

@ -9,6 +9,16 @@
}
````
````json
//[doc-nav]
{
"Previous": {
"Name": "Creating a new solution",
"Path": "Getting-Started-Create-Solution"
}
}
````
> This document assumes that you prefer to use **{{ UI_Value }}** as the UI framework and **{{ DB_Value }}** as the database provider. For other options, please change the preference on top of this document.
## Create the Database
@ -258,9 +268,4 @@ It may take a longer time for the first build. Once it finishes, it opens the An
{{ end }}
Enter **admin** as the username and **1q2w3E*** as the password to login to the application. The application is up and running. You can start developing your application based on this startup template.
## See Also
* [Web Application Development Tutorial](Tutorials/Part-1.md)
* [Application Startup Template](Startup-Templates/Application.md)
Enter **admin** as the username and **1q2w3E*** as the password to login to the application. The application is up and running. You can start developing your application based on this startup template.

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

Loading…
Cancel
Save