ABP framework is a modular, themeable, microservice compatible application development framework for ASP.NET Core. It provides a complete architecture and a strong infrastructure to let you focus on your own business code rather than repeating yourself for every new project. It is based on the best practices of software development and popular tools you already know.
ABP framework is completely free, open source and community-driven. It also provides a free theme and some pre-built modules (e.g. identity management and tenant management).
",
@@ -196,19 +196,19 @@
"ChangingDevelopers": "Can I change the registered developers of my organization in the future?",
"ChangingDevelopersExplanation": "In addition to adding new developers to your license, you can also change the existing developers (you can remove a developer and add a new one to the same seat) without any additional cost.",
"WhatHappensWhenLicenseEnds": "What happens when my license period ends?",
- "WhatHappensWhenLicenseEndsExplanation1": "The ABP Commercial license is a perpetual license. After your license expires, you can continue developing your project. And you are not obliged to renew your license. Your license comes with a one-year update and support plan out of the box. In order to continue to get new features, performance enhancements, bug fixes, support and continue using ABP Suite, you need to renew your license. When your license expires, you will not get the following benefits:",
+ "WhatHappensWhenLicenseEndsExplanation1": "The ABP Commercial license is a perpetual license. After your license expires, you can continue developing your project. And you are not obliged to renew your license. Your license comes with a one-year update and support plan out of the box. In order to continue to get new features, performance enhancements, bug fixes, support and continue using ABP Suite, you need to renew your license. When your license expires;",
"WhatHappensWhenLicenseEndsExplanation2": "You can not create new solutions using the ABP Commercial, but you can continue developing your existing applications forever.",
"WhatHappensWhenLicenseEndsExplanation3": "You will be able to get updates for the modules and themes within your MINOR version (except RC or Preview versions). For example: if you are using v3.2.0 of a module, you can still get updates for v3.2.x (v3.2.1, v3.2.5... etc.) of that module. But you cannot get updates for the next major or minor version (like v3.3.0, v3.3.3, 4.x.x.. etc.). For example, when your license expired, the latest release was v4.4.3, and later, it published both 4.4.4 version and 4.5.0 version, you would be able to access the v4.4.X but you wouldn't be access the v4.5.X.",
"WhatHappensWhenLicenseEndsExplanation4": "You can not install new modules and themes added to the ABP Commercial platform after your license ends.",
"WhatHappensWhenLicenseEndsExplanation5": "You can not use the ABP Suite.",
"WhatHappensWhenLicenseEndsExplanation6": "You can not get the premium support anymore.",
- "WhatHappensWhenLicenseEndsExplanation7": "You can extend (renew) your license if you want to continue getting these benefits. If you extend your license within 1 month after your license expires, the following discounts will be applied: Team License {0}; Business License {1}; Enterprise License {2}.",
+ "WhatHappensWhenLicenseEndsExplanation7": "You can extend (renew) your license if you want to continue getting these benefits. If you extend your license within {3} days after your license expires, the following discounts will be applied: Team License {0}; Business License {1}; Enterprise License {2}.",
"discountForYears": "{0}% discount for {1} year(s)",
"WhatHappensWhenLicenseEndsExplanation8": "The ABP projects you generated are not stored on our servers. Therefore, it is your responsibility to keep the source code you download. When your license expires, there's no way to get your generated ABP project source code.",
"WhenShouldIRenewMyLicense": "When should I renew my license?",
- "WhenShouldIRenewMyLicenseExplanation": "If you renew your license within 1 month after your license expires, the following discounts will be applied: Team License {0}; Business License {1}; Enterprise License {2}. However, if you renew your license after 1 month since the expiry date of your license, the renewal price will be the same as the license purchase price and there will be no discount on your renewal.",
+ "WhenShouldIRenewMyLicenseExplanation": "If you renew your license within {3} days after your license expires, the following discounts will be applied: Team License {0}; Business License {1}; Enterprise License {2}. However, if you renew your license after {3} days since the expiry date of your license, the renewal price will be the same as the license purchase price and there will be no discount on your renewal.",
"TrialPlan": "Do you have a trial plan?",
- "TrialPlanExplanation": "It has a 14 days trial period for the ABP Commercial team license. For more information visit here. Furthermore, for the Team licenses we provide a 30 days money-back guarantee. You can just request a refund in the first 30 days. For the Business and Enterprise licenses, we provide 60% refund in 30 days. This is because Business and Enterprise licenses include the full source code of all the modules and the themes.",
+ "TrialPlanExplanation": "No, there is no trial version for ABP Commercial. You can check the community edition to understand the code quality and approaches. We also offer a 30-day money-back guarantee for the Team license, no questions asked! You can request a refund within the first 30 days. We provide a 60% refund within 30 days for Business and Enterprise licenses. This is because the Business and Enterprise licenses contain the full source-code of all the modules and themes.",
"DoYouAcceptBankWireTransfer": "Do you accept bank wire transfers?",
"DoYouAcceptBankWireTransferExplanation": "Yes, we accept bank wire transfers. After sending the license fee via bank transfer, send your receipt and requested license type to accounting@volosoft.com. Our international bank account information:",
"HowToUpgrade": "How to upgrade existing applications when a new version is available?",
@@ -511,7 +511,7 @@
"AddBasket": "Add to Basket",
"SendTrainingRequest": "Send Training Request",
"OnlyEnglishVersionOfThisDocumentIsTheRecentAndValid": "* The English version of this document is the most up-to-date and the English version will prevail in any dispute.",
- "Pricing_Page_Title": "Plans & Pricing",
+ "Pricing_Page_Title": "Pricing & Plans",
"Pricing_Page_Description": "Choose the features and functionality your business needs today. Buy an ABP Commercial license and create unlimited projects.",
"Pricing_Page_HurryUp": "Hurry Up!",
"Pricing_Page_BuyLicense": "Buy a license at 2021 prices until January 16!",
@@ -597,7 +597,7 @@
"Purchase_PricePerDeveloper": "{0} {1} per developer",
"Purchase_IncludedDeveloperInfo": "{0} {1} included.",
"Purchase_LicenseExtraDeveloperPurchaseMessage": "The {0} license contains {1} developer(s). You can add additional developers now or later.",
- "StartupTemplates_Page_Title": "The Startup Templates",
+ "StartupTemplates_Page_Title": "ABP Startup Templates",
"StartupTemplates_Page_Description": "ABP Commercial allows you to build solutions with any level of complexity. It provides two main pre-built startup solutions. You can select the one close to your requirements and build your own custom solution on top of it.",
"MicroserviceStartupSolutionForDotnet": "Microservice Startup Solution for .NET",
"MonolithSolutionForDotnet": "Monolith (modular) Solution for .NET",
@@ -622,12 +622,11 @@
"Faq_Page_Currency": "Currency",
"Faq_Page_VatNumber": "VAT number",
"Faq_Page_OtherCurrenciesInfo": "For other currencies, see all accounts",
- "ModuleDetail_Page_Title": "Module Detail - {0}",
"ProjectCreatedSuccess_Page_Title": "Your project created",
"ProjectCreatedSuccess_Page_Description": "Your ABP project created successfully!",
- "Suite_Page_Title": "ABP Suite - Create CRUD Pages",
+ "Suite_Page_Title": "ABP Suite",
"Suite_Page_Description": "ABP Commercial provides rapid application development tooling to increase developer productivity. ABP Suite allows you to create CRUD pages easily.",
- "Themes_Page_Title": "Modern and Functional UI Themes",
+ "Themes_Page_Title": "ABP Themes",
"Themes_Page_Description": "ABP Commercial provides multiple professional, modern UI themes. Create a free demo to have a quick view of what the UI looks like.",
"Tools_Page_Title": "Rapid Application Development Tools",
"Tools_Page_Description": "ABP Commercial provides rapid application development tooling to increase developer productivity. ABP Suite allows you to create CRUD pages easily.",
@@ -818,6 +817,15 @@
"DeletingMemberWarningMessage": "\"{0}\" will be removed from the developer list. If you want, you can assign this empty seat to another developer later.",
"AdditionalInfo": "If the developer seats are above your requirements, you can reduce them. You can email at info@abp.io to remove some of your developer seats. Clearing unused developer seats will reduce the license renewal cost. If you want, you can re-purchase additional developer seats within your active license period. Note that, since there are {0} developers in this license package, you cannot reduce this number.",
"LinkExpiredErrorMessage": "The link you are trying to access is expired.",
- "ExpirationDate": "Expiration Date"
+ "ExpirationDate": "Expiration Date",
+ "SpringCampaignDiscount": "Spring Campaign Discount",
+ "WhyUseAbpIoPlatform": "Why should I use the ABP.IO Platform instead of creating a new solution from scratch?",
+ "WhyUseAbpIoPlatformFaqExplanation": "See that document for a detailed explanation of why using ABP.IO Platform has a significant advantage over doing everything yourself.",
+ "EulaPageTitle": "End User License Agreement (EULA)",
+ "PrivacyPolicyPageTitle": "Privacy Policy - Cookie Policy",
+ "TermsConditionsPageTitle": "Terms and Conditions",
+ "TrainingsPageTitle": "ABP Training Packages",
+ "ModulesPageTitle": "ABP Pre-Built Application Modules",
+ "Volo.AbpIo.Commercial:040001": "API Access Key is incorrect."
}
}
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/es.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/es.json
index 7625f777eb..88ce642703 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/es.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/es.json
@@ -190,7 +190,7 @@
"ChangingDevelopers": "¿Puedo cambiar los desarrolladores registrados de mi organización en el futuro?",
"ChangingDevelopersExplanation": "Además de agregar nuevos desarrolladores a su licencia, también puede cambiar los desarrolladores existentes (puede eliminar un desarrollador y agregar uno nuevo al mismo puesto) sin ningún costo adicional.",
"WhenShouldIRenewMyLicense": "¿Cuándo debo renovar mi licencia?",
- "WhenShouldIRenewMyLicenseExplanation": "Si renueva su licencia dentro de 1 mes después de su vencimiento, se aplicarán los siguientes descuentos: Licencia de equipo {0}% de descuento, Licencia comercial {1}% de descuento, Licencia empresarial {2}% de descuento . Si renueva su licencia 1 mes después de la fecha de vencimiento de su licencia, el precio de renovación será el mismo que el precio de compra de la licencia y no habrá descuento en su renovación.",
+ "WhenShouldIRenewMyLicenseExplanation": "Si renueva su licencia dentro de {3} dias después de su vencimiento, se aplicarán los siguientes descuentos: Licencia de equipo {0}% de descuento, Licencia comercial {1}% de descuento, Licencia empresarial {2}% de descuento . Si renueva su licencia {3} dias después de la fecha de vencimiento de su licencia, el precio de renovación será el mismo que el precio de compra de la licencia y no habrá descuento en su renovación.",
"TrialPlan": "¿Tiene un plan de prueba?",
"DoYouAcceptBankWireTransfer": "¿Aceptan transferencia bancaria?",
"DoYouAcceptBankWireTransferExplanation": "Sí, aceptamos transferencia bancaria. Después de enviar la tarifa de la licencia mediante transferencia bancaria, envíenos un correo electrónico a accounting@abp.io con su recibo y el tipo de licencia solicitada. Nuestra información de cuenta bancaria internacional:",
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json
index c2b09e4c5b..dc3c374d78 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json
@@ -9,15 +9,18 @@
"QuestionCount": "Jäljellä olevat/yhteensä kysymykset",
"Unlimited": "Rajoittamaton",
"Owners": "Omistajat",
+ "Owner": "Omistaja",
"AddMember": "Lisää jäsen",
- "AddOwner": "Lisää omistaja",
- "AddDeveloper": "Lisää kehittäjä",
+ "AddNewOwner": "Lisää uusi omistaja",
+ "AddNewDeveloper": "Lisää uusi kehittäjä",
"UserName": "Käyttäjätunnus",
"Name": "Nimi",
"EmailAddress": "Sähköpostiosoite",
"Developers": "Kehittäjät",
"LicenseType": "Lisenssi-tyyppi",
"Manage": "Hallitse",
+ "SetDefault": "Aseta oletukseksi",
+ "DefaultOrganization": "Oletus",
"StartDate": "Aloituspäivämäärä",
"EndDate": "Päättymispäivä",
"Modules": "Moduulit",
@@ -60,8 +63,6 @@
"Themes": "Teemat",
"JoinOurNewsletter": "Liity uutiskirjeemme",
"Send": "Lähettää",
- "Learn": "Oppia",
- "AdditionalServices": "Lisäpalvelut",
"WhatIsABPFramework": "MIKÄ ON ABP-KEHYS?",
"OpenSourceBaseFramework": "Avoimen lähdekoodin peruskehys",
"ABPFrameworkExplanation": "
ABP Commercial perustuu ABP Frameworkiin, avoimen lähdekoodin ja yhteisövetoiseen verkkosovelluskehykseen ASP.NET Core -sovellukselle.
ABP Framework tarjoaa erinomaisen infrastruktuurin ylläpitettävien, laajennettavien tiedostojen kirjoittamiseen. ja testattava koodi parhailla käytänteillä.
Rakennettu ja integroitu jo tunnettujen suosittujen työkalujen kanssa. Matala oppimiskäyrä, helppo sopeutuminen, mukava kehitys.
",
@@ -127,6 +128,8 @@
"TellUsWhatYouNeed": "Kerro meille mitä tarvitset.",
"YourMessage": "Viestisi",
"YourFullName": "Koko nimesi",
+ "FirstNameField": "Etunimi",
+ "LastNameField": "Sukunimi",
"EmailField": "Sähköpostiosoite",
"YourEmailAddress": "Sähköpostiosoitteesi",
"HowMayWeHelpYou": "Kuinka voimme auttaa sinua?",
@@ -141,7 +144,7 @@
"ApplicationTemplateExplanation": "Sovelluksen käynnistysmallia käytetään uuden verkkosovelluksen luomiseen.",
"EfCoreProvider": "Entity Framework (tukee SQL Serveriä, MySQL: ää, PostgreSQL: ää, Oracle ja muita )",
"AlreadyIncludedInTemplateModules": "Seuraavat moduulit ovat jo mukana ja määritetty tähän malliin:",
- "ApplicationTemplateArchitecture": "Tämä sovellusmalli tukee myös porrastettua arkkitehtuuria, jossa käyttöliittymäkerros, API-kerros ja todennuspalvelu on fyysisesti erotettu.",
+ "ApplicationTemplateArchitecture": "Tämä sovellusmalli tukee myös monikerros arkkitehtuuria, jossa käyttöliittymäkerros, API-kerros ja todennuspalvelu on fyysisesti erotettu.",
"SeeTheGuideOrGoToTheLiveDemo": "Katso teknistä tietoa tästä mallista kehittäjän oppaasta tai siirry live-esittelyyn.",
"DeveloperGuide": "Kehittäjän opas",
"ModuleTemplate": "Moduulimalli",
@@ -157,6 +160,8 @@
"SearchQuestionPlaceholder": "Hae usein kysyttyjä kysymyksiä",
"WhatIsTheABPCommercial": "Mikä on ABP-kauppa?",
"WhatAreDifferencesThanAbpFramework": "Mitä eroja on avoimen lähdekoodin ABP Frameworkilla ja ABP Commercialilla?",
+ "AbpCommercialMetaTitle": "ABP Commercial - täydellinen verkkokehitysalusta: {0} | ABP Commercial",
+ "AbpCommercialMetaDescription": "ABP Commercial on joukko valmiita sovellusmoduuleja, nopean kehityksen työkaluja, käyttöliittymäteemoja ja palveluita, jotka on rakennettu avoimen lähdekoodin ABP-kehyksen päälle.",
"ABPCommercialExplanation": "ABP Commercial on joukko ensiluokkaisia moduuleja, työkaluja, teemoja ja palveluja, jotka on rakennettu avoimen lähdekoodin ABP-kehyksen päälle. ABP Commercial kehittää ja tukee samaa tiimiä ABP-kehyksen takana.",
"WhatAreDifferencesThanABPFrameworkExplanation": "
ABP-kehys on modulaarinen, teemoitettava, mikropalvelujen kanssa yhteensopiva sovelluskehys ASP.NET Core -sovellukselle. Se tarjoaa täydellisen arkkitehtuurin ja vahvan infrastruktuurin, joka saa sinut keskittymään omaan yrityskoodiin sen sijaan, että toistat itsesi jokaisessa uudessa projektissa. Se perustuu ohjelmistokehityksen parhaisiin käytäntöihin ja jo tiedettyihin suosittuihin työkaluihin.
ABP-kehykset ovat täysin ilmaisia, avoimen lähdekoodin ja yhteisölähtöisiä. Se tarjoaa myös ilmaisen teeman ja joitain valmiita moduuleja (esim. Henkilöllisyyden hallinta ja vuokralaisten hallinta).
",
"VisitTheFrameworkVSCommercialDocument": "Vieraile seuraavalla linkillä saadaksesi lisätietoja {1} ",
@@ -178,6 +183,7 @@
"ChangingLicenseType": "Voinko muuttaa lisenssityyppiäni tulevaisuudessa?",
"ChangingLicenseTypeExplanation": "Voit aina lisätä uusia kehittäjiä samaan lisenssityyppiin. Katso myös \"Kuinka monta kehittäjää voi työskennellä ABP Commercialilla?\". Voit myös päivittää korkeampaan lisenssiin maksamalla lasketun hintaeron. Kun päivität korkeampaan lisenssisuunnitelmaan, saat uuden suunnitelman edut, mutta lisenssin päivitys ei muuta lisenssin voimassaolon päättymispäivää.",
"LicenseExtendUpgradeDiff": "Mitä eroa on lisenssin laajennuksella ja päivityksellä?",
+ "LicenseExtendUpgradeDiffExplanation": "Pidentäminen: pidentämällä/uusimalla lisenssiä saat jatkossakin premium-tuen ja saat isoja tai pieniä päivityksiä moduuleille ja teemoille. Lisäksi voit jatkaa uusien projektien luomista. Ja voit silti käyttää ABP Suitea, joka nopeuttaa kehitystäsi. Kun jatkat lisenssiäsi, lisenssin voimassaolopäivään lisätään 1 vuosi. Päivitys: Päivittämällä lisenssisi siirryt korkeampaan lisenssisuunnitelmaan, jonka avulla saat lisäetuja. Tutustu lisenssien vertailutaulukkoon nähdäksesi erot lisenssisuunnitelmien välillä. Toisaalta, kun päivität, lisenssisi viimeinen voimassaolopäivä ei muutu! Jos haluat pidentää lisenssin päättymispäivää, sinun on jatkettava lisenssiäsi.",
"LicenseRenewalCost": "Mitkä ovat lisenssin uusimiskustannukset vuoden kuluttua?",
"LicenseRenewalCostExplanation": "Standardin tiimilisenssin uusimishinta (pidennys) on ${0}, normaalin yrityslisenssin hinta on {1} $ ja normaalin yrityslisenssin hinta on {2} $. Jos olet jo asiakas, kirjaudu sisään tiliisi ja tarkista käytettävissä olevat uusimishinnat.",
"HowDoIRenewMyLicense": "Kuinka uusin lisenssin?",
@@ -189,9 +195,20 @@
"IsSourceCodeIncludedExplanation4": "
Moduulin lähdekoodin sisällyttäminen ratkaisuun antaa sinulle maksimaalisen vapauden mukauttaa moduulia. Tällöin moduulia ei voida päivittää automaattisesti, kun uusi versio julkaistaan.
Mikään lisensseistä ei sisällä ABP Suiten lähdekoodia, joka on ulkoinen työkalu, joka tuottaa koodia sinulle ja auttaa kehitykseen.
",
"ChangingDevelopers": "Voinko muuttaa organisaationi rekisteröityneitä kehittäjiä tulevaisuudessa?",
"ChangingDevelopersExplanation": "Uusien kehittäjien lisäämisen lisenssiin lisäksi voit myös muuttaa olemassa olevia kehittäjiä (voit poistaa kehittäjän ja lisätä uuden samalle paikalle) ilman lisäkustannuksia.",
+ "WhatHappensWhenLicenseEnds": "Mitä tapahtuu, kun lisenssikauteni päättyy?",
+ "WhatHappensWhenLicenseEndsExplanation1": "ABP Commercial -lisenssi on ikuinen lisenssi. Kun lisenssi päättyy, voit jatkaa projektisi kehittämistä. Etkä ole velvollinen uusimaan lisenssiäsi. Lisenssisi mukana tulee yhden vuoden päivitys- ja tukisuunnitelma suoraan pakkauksesta. Jotta voit jatkossakin saada uusia ominaisuuksia, suorituskykyparannuksia, vikakorjauksia, tukea ja jatkaa ABP Suiten käyttöä, sinun on uusittava lisenssi. Kun lisenssi päättyy;",
+ "WhatHappensWhenLicenseEndsExplanation2": "Et voi luoda uusia ratkaisuja ABP Commercialin avulla, mutta voit jatkaa olemassa olevien sovellusten kehittämistä ikuisesti.",
+ "WhatHappensWhenLicenseEndsExplanation3": "Voit saada päivityksiä moduuleihin ja teemoihin MINOR-versiossasi (lukuun ottamatta RC- tai Preview-versioita). Esimerkiksi: jos käytät moduulin v3.2.0 versiota, voit silti saada päivityksiä kyseisen moduulin v3.2.x versiolle (v3.2.1, v3.2.5... jne.). Mutta et voi saada päivityksiä seuraavaan pää- tai pienempään versioon (kuten v3.3.0, v3.3.3.3, 4.x.x.. jne.). Esimerkiksi, kun lisenssisi päättyi, uusin julkaisu oli v4.4.3, ja myöhemmin julkaistiin sekä 4.4.4.4 että 4.5.0-versio, voit käyttää v4.4.X-versiota, mutta et v4.5.X-versiota.",
+ "WhatHappensWhenLicenseEndsExplanation4": "Et voi asentaa uusia moduuleja ja teemoja, jotka on lisätty ABP Commercial -alustaan lisenssisi päätyttyä.",
+ "WhatHappensWhenLicenseEndsExplanation5": "Et voi käyttää ABP Suitea.",
+ "WhatHappensWhenLicenseEndsExplanation6": "Et voi enää saada premium-tukea.",
+ "WhatHappensWhenLicenseEndsExplanation7": "Voit jatkaa (uusia) lisenssiäsi, jos haluat jatkaa näiden etujen saamista. Jos jatkat lisenssiäsi {3} päivää kuluessa lisenssin vanhenemisesta, seuraavat alennukset sovelletaan: Tiimilisenssi {0}; Toimilupa {1}; Yrityslisenssi {2}.",
+ "discountForYears": "{0}% de remise pendant {1} an(s)",
+ "WhatHappensWhenLicenseEndsExplanation8": "Luomiasi ABP-projekteja ei tallenneta palvelimillemme. Siksi on sinun vastuullasi säilyttää lataamasi lähdekoodi. Kun lisenssisi vanhenee, luotua ABP-projektin lähdekoodia ei ole mahdollista saada.",
"WhenShouldIRenewMyLicense": "Milloin minun pitäisi uusia lisenssini?",
"WhenShouldIRenewMyLicenseExplanation": "Jos uusit lisenssisi 1 kuukauden kuluessa lisenssin vanhenemisesta, seuraavat alennukset sovelletaan: Team License {0} ; Business License {1} ; Enterprise License {2} ; . Jos uusit lisenssisi 1 kuukauden lisenssin päättymispäivän jälkeen, uusimishinta on sama kuin lisenssin ostohinta, eikä uusimisesta saa alennusta.",
"TrialPlan": "Onko sinulla kokeilusuunnitelma?",
+ "TrialPlanExplanation": "Ei, ABP Commercialille ei ole kokeiluversiota. Voit tarkistaa yhteisön versiosta ymmärtääksesi koodin laadun ja lähestymistavat. Tarjoamme myös 30 päivän rahat takaisin -takuun Team-lisenssille ilman kysymyksiä! Voit pyytää hyvitystä ensimmäisten 30 päivän sisällä. Tarjoamme 60 %:n hyvityksen 30 päivän kuluessa Business- ja Enterprise-lisensseistä. Tämä johtuu siitä, että Business- ja Enterprise-lisenssit sisältävät kaikkien moduulien ja teemojen täyden lähdekoodin.",
"DoYouAcceptBankWireTransfer": "Hyväksytkö pankkisiirron?",
"DoYouAcceptBankWireTransferExplanation": "Kyllä, hyväksymme pankkisiirron. Kun olet lähettänyt lisenssimaksun pankkisiirrolla, lähetä meille sähköposti osoitteeseen accounting@abp.io kuittisi ja pyydetty lisenssityyppi. Kansainväliset pankkitilitietomme:",
"HowToUpgrade": "Kuinka päivittää olemassa olevia sovelluksia, kun uusi versio on saatavilla?",
@@ -348,41 +365,462 @@
"WeWillSendYouADownloadLink": "Linkki e-kirjan latausta varten on lähetetty osoitteeseen {0}. Tarkista postilaatikkosi/roskapostisi/roskapostilaatikot!",
"InvalidFormInputs": "Ole hyvä ja kirjoita lomakkeessa ilmoitetut voimassa olevat tiedot.",
"DDDBookEmailBody": "Kiitos. Lataa kirjasi napsauttamalla tätä.",
- "FreeDDDEBook": "Ilmainen DDD e-kirja",
"StartFree": "Aloita ilmaiseksi",
"FreeTrial": "Ilmainen kokeilu",
"AcceptsMarketingCommunications": " Kyllä, haluaisin saada ABP Commercial -markkinointiviestintää.",
"PurposeOfUsage": "Käytön tarkoitus",
- "Industry": "Ala",
"Choose": "- Valitse -",
"CompanyOrganizationName": "Yrityksen/organisaation nimi",
"CompanySize": "Yhtiön koko",
"Next": "Seuraava",
"StartTrial": "Aloita ilmainen kokeilujaksoni",
- "ContactUsIssues": "Ota yhteyttä, jos sinulla on ongelmia",
+ "ContactUsQuestions": "Ota yhteyttä, jos sinulla on kysyttävää",
"TrialActivatedWarning": "Käyttäjällä on oikeus vain yhteen ilmaiseen kokeilujaksoon. Olet jo käyttänyt kokeilujaksosi.",
+ "ActivationRequirement": "Olet viimeisen askeleen päässä kokeilujakson aloittamisesta. Tarkistettuasi tietosi aktivoimme lisenssisi. Kun käyttölupasi on aktivoitu, lähetämme sähköpostin osoitteeseen {0}. Älä huoli, tämä prosessi ei vie kauan!",
"SaveAndDownload": "Tallenna ja lataa",
"CompanyNameValidationMessage": "Yrityksen nimi on liian pitkä!",
"AddressValidationMessage": "Osoite on liian pitkä!",
"TaxNoValidationMessage": "TAX/ALV-numero on liian pitkä!",
"NotesValidationMessage": "Huomautuskenttä on liian pitkä!",
"CheckYourBillingInfo": "Voit luoda laskun vain kerran! Tarkista laskutustietosi ennen laskun luomista.",
- "Volo.AbpIo.Commercial:030000": "Olet jo käyttänyt kokeilujaksosi.",
- "Volo.AbpIo.Commercial:030001": "Tämä organisaation nimi on jo olemassa.",
"StartYourFreeTrial": "Aloita ilmainen kokeilujaksosi",
"TrialLicenseModelInvalidErrorMessage": "Yksi seuraavista kentistä on virheellinen: maan nimi, yrityksen koko, toimiala tai käyttötarkoitus.",
"Trial": "Oikeudenkäynti",
"Purchased": "Osti",
- "PurchaseLicense": "Osta {0} lisenssi",
+ "PurchaseNow": "Osta nyt",
"PurchaseTrialLicenseMessage": "Lisenssisi viimeinen voimassaolopäivä on {0}. Jos haluat jatkaa ilmaisen kokeilujakson aikana luomiesi projektien käyttöä, sinun on vaihdettava lisenssiavaimet appsettings.secrets.json-tiedostoissasi. Tässä on lisenssiavaimesi:",
"TrialLicenseExpireMessage": "Käytät kokeiluversiota, ja kokeilukäyttölupasi vanhenee {0}.",
"TryForFree": "Kokeile ilmaiseksi",
"TrialLicenseExpiredInfo": "Kokeilulisenssijaksosi on umpeutunut!",
- "CommercialNewsletterConfirmationMessage": "Hyväksyn käyttöehdot ja tietosuojakäytännön .",
- "ContinueWithNewOrganization": "Jatka uudessa organisaatiossa",
+ "DowngradeLicensePlan": "Voinko tulevaisuudessa vaihtaa alempaan lisenssisuunnitelmaan?",
+ "DowngradeLicensePlanExplanation": "Et voi alentaa olemassa olevaa lisenssisuunnitelmaa. Voit kuitenkin ostaa uuden alemman lisenssisuunnitelman ja jatkaa kehitystyötäsi uudella lisenssillä. Kun olet ostanut alemman lisenssin, sinun tarvitsee vain kirjautua uuteen lisenssisuunnitelmaan ABP CLI -komennolla: ` abp login -o `.",
+ "LicenseTransfer": "Voiko lisenssin siirtää kehittäjältä toiselle?",
+ "LicenseTransferExplanation": "Kyllä! Kun ostat lisenssin, sinusta tulee lisenssin haltija, joten sinulla on pääsy organisaation hallintasivulle. Organisaatiolla on omistaja- ja kehittäjäroolit. Omistajat voivat hallita kehittäjäpaikkoja ja määrittää kehittäjiä. Kukin nimetty kehittäjä kirjautuu ABP CLI -komennolla järjestelmään, ja sillä on kehitys- ja tukioikeudet.",
+ "UserOwnerDescription": "Organisaation 'omistaja' on tämän tilin järjestelmänvalvoja. Hän johtaa organisaatiota ostamalla lisenssejä ja allokoimalla kehittäjiä. 'Omistaja' ei voi kirjoittaa koodia ABP Commercial -projekteihin, ladata ABP-näyteprojekteja eikä esittää kysymyksiä tukisivustolla. Jos haluat tehdä kaikki nämä, sinun on lisättävä itsesi myös kehittäjäksi.",
+ "UserDeveloperDescription": "'Kehittäjät' voivat kirjoittaa koodia ABP Commercial -projekteihin, ladata ABP-näyteprojekteja ja esittää kysymyksiä tukisivustolla. Toisaalta 'kehittäjät' eivät voi hallita tätä organisaatiota.",
+ "RemoveCurrentUserFromOrganizationWarningMessage": "Olet poistamassa itsesi omasta organisaatiostasi. Et voi enää hallinnoida tätä organisaatiota, vahvistatko?",
+ "RenewExistingOrganizationOrCreateNewOneMessage": "Voit uusia organisaatiosi lisenssin napsauttamalla alla olevaa \"Pidennä nyt\" -painiketta, jolloin voit pidentää lisenssin voimassaolopäivää yhdellä vuodella. Jos jatkat maksamista, sinulla on uusi organisaatio. Haluatko jatkaa uudessa organisaatiossa?",
+ "PurchaseTrialOrganizationOrCreateNewOneMessage": "Sinulla on koekäyttölupa. Voit ostaa kokeiluversion lisenssin napsauttamalla Osta nyt -painiketta. Jos jatkat maksamista, sinulla on uusi organisaatio. Haluatko jatkaa uudessa organisaatiossa?",
+ "ExtendNow": "Laajenna nyt",
+ "CreateNewOrganization": "Luo uusi organisaatio",
"RenewLicenseEarly": "Jos uusin ajokorttini etuajassa, saanko koko vuoden?",
"RenewLicenseEarylExplanation": "Kun uusit lisenssisi ennen lisenssin vanhenemispäivää, lisenssin voimassaolopäivään lisätään 1 vuosi. Jos lisenssisi vanhenee esimerkiksi {0}-06-06 ja uusit sen {0}-01-01, uusi lisenssisi päättymispäivä on {1}-06-06.",
- "discountForYears": "{0}% de remise pendant {1} an(s)",
- "BlackFridayDiscount": "Black Friday -alennus"
+ "OpenSourceWebApplication": "Avoimen lähdekoodin verkkosovellus",
+ "CompleteWebDevelopment": "Täydellinen verkkokehitys",
+ "ABPFrameworkDescription": "ABP Framework on täydellinen infrastruktuuri nykyaikaisten verkkosovellusten luomiseen noudattamalla ohjelmistokehityksen parhaita käytäntöjä ja käytäntöjä.",
+ "CommunityDescription": "Jaa kokemuksesi ABP Frameworkista!",
+ "GetStarted": "Aloita",
+ "Views": "näkymät",
+ "LatestPosts": "Uusimmat viestit",
+ "PreBuiltApplication": "Valmiiksi rakennettu sovellus",
+ "DatabaseProviders": "Tietokannan tarjoajat",
+ "UIFrameworks": "UI-kehykset",
+ "UsefulLinks": "Hyödyllisiä linkkejä",
+ "Platform": "Alusta",
+ "CoolestCompaniesUseABPCommercial": "Tyylikkäimmät yritykset käyttävät jo ABP Commercialia.",
+ "UserInterface": "Käyttöliittymä",
+ "APIGateway": "API-yhdyskäytävä",
+ "Microservice": "Mikropalvelu",
+ "Database": "Tietokanta",
+ "Architecture": "Arkkitehtuuri",
+ "MicroserviceArchitectureExplanation": "Tämä on täydellinen ratkaisuarkkitehtuuri, joka koostuu useista sovelluksista, API-yhdyskäytävistä, mikropalveluista ja tietokannoista, jotta voidaan rakentaa skaalautuva mikropalveluratkaisu uusimmalla tekniikalla.",
+ "BusinessLogic": "Liiketoimintalogiikka",
+ "DataAccessLayer": "Tietojen käyttökerros",
+ "Monolith": "Monoliitti",
+ "ModularArchitectureExplanation": "Tämä käynnistysmalli tarjoaa kerroksellisen, modulaarisen ja DDD-pohjaisen ratkaisuarkkitehtuurin puhtaan ja ylläpidettävän koodikannan luomiseksi.",
+ "SeeDetails": "Katso yksityiskohdat",
+ "SeeDocumentation": "Tutustu dokumentaatioon",
+ "Bs5Compatible": "Bootstrap 5 -yhteensopiva ammattiteema, täydellinen järjestelmänvalvojan verkkosivustollesi.",
+ "LeptonXTheme": "LeptonX teema",
+ "LeptonXDark": "LeptonX tumma",
+ "LeptonXLight": "LeptonX vaalea",
+ "LeptonXSemiDark": "LeptonX puolitumma",
+ "BuiltOnBs5Library": "Pohjautuu Bootstrap 5 -kirjastoon",
+ "FullyCompatibleWithBs5": "100 % yhteensopiva Bootstrap 5:n HTML-rakenteen ja CSS-luokkien kanssa",
+ "ResponsiveAndMobileCompatible": "Responsiivinen, mobiiliyhteensopiva, RTL-tuki",
+ "ProvidesStylesForDatatables": "Tarjoaa tyylejä tietotaulukoille",
+ "MultipleLayoutOptions": "Useita asetteluvaihtoehtoja",
+ "EasilyInstallAndUpgrade": "Asenna ja päivitä helposti",
+ "SupportForum": "Tukifoorumi",
+ "TrustedBy": "Luotettu",
+ "OurPricing": "Hinnoittelumme",
+ "Plans": "Suunnitelmat",
+ "NameSurname": "Nimi sukunimi",
+ "Unspecified": "Määrittelemätön",
+ "LicenceType": "Lisenssityyppi",
+ "LicenseDiscountWarning": "TÄMÄ ALENNUSSIVU KÄYTTÄÄ OLETUSALENNUSKOODIA JA VOLOSOFT-KEHITTÄJILLE. ALLA OLEVAT OSTOLINKIT EIVÄT TOIMI.",
+ "DiscountedLicenseExplanation": "Nämä lisenssihinnat ovat pienille startup-yrityksille, yksittäisille kehittäjille, opiskelijoille, voittoa tavoittelemattomille järjestöille ja projekteille!",
+ "General": "Yleiset",
+ "License": "Lisenssi",
+ "Development": "Kehitys",
+ "Payment": "Maksu",
+ "WatchExplainerVideo": "Tavataan! Katso selittävä video",
+ "LightDarkAndSemiDarkThemes": "Vaalea, tumma ja puolitumma",
+ "LeptonXThemeExplanation": "Lepton Theme voi muuttaa teemaasi järjestelmäasetustesi mukaan.",
+ "PRO": "PRO",
+ "WelcomeToABPCommercial": "Tervetuloa ABP Commercialiin!",
+ "YourAccountDetails": "Tilisi tiedot",
+ "OrganizationName": "Organisaation nimi",
+ "AddDevelopers": "Lisää kehittäjiä",
+ "StartDevelopment": "Aloita kehittäminen",
+ "CreateAndRunApplicationUsingStartupTemplate": "Opi luomaan ja suorittamaan uusi verkkosovellus ABP Commercial -käynnistysmallin avulla.",
+ "CommunityDescription2": "community.abp.io on paikka, jossa ihmiset voivat jakaa ABP-aiheisia artikkeleita. Etsi artikkeleita, opetusohjelmia, koodinäytteitä, tutkimuksia ja tapaa ihmisiä samalla taajuudella kuin sinä.",
+ "UseABPSuiteExplanation": "Lataa moduulien ja teemojen lähdekoodi ABP Suiten avulla.",
+ "ManageModulesWithSuite": "Voit myös hallita ABP-moduulejasi Suiten avulla.",
+ "LearnHowToInstallSuite": "Opi asentamaan ja käyttämään ABP Suitea.",
+ "SeeMore": "Katso lisää",
+ "SeeLess": "Katso Vähemmän",
+ "LayeredSolutionStructure": "Kerrostettu ratkaisurakenne",
+ "LayeredSolutionStructureExplanation": "Ratkaisu on kerrostettu Domain Driven Design -periaatteiden ja -mallien perusteella, jotta liiketoimintalogiikkasi voidaan eristää infrastruktuurista ja integraatioista ja maksimoida koodin ylläpidettävyys ja uudelleenkäytettävyys. ABP Framework tarjoaa jo abstraktioita, perusluokkia ja oppaita DDD:n toteuttamiseen sovelluksessasi.",
+ "MultipleUIOptions": "Useita käyttöliittymävaihtoehtoja",
+ "MultipleUIOptionsExplanation": "Rakastamme erilaisia tapoja luoda käyttöliittymä. Tämä käynnistysratkaisu tarjoaa kolme erilaista käyttöliittymäkehysvaihtoehtoa yrityssovelluksellesi.",
+ "MultipleDatabaseOptions": "Useita tietokantavaihtoehtoja",
+ "MultipleDatabaseOptionsExplanation": "Sinulla on kaksi tietokannan tarjoajavaihtoehtoa (sen lisäksi, että voit käyttää molempia yhdessä sovelluksessa). Käytä Entity Framework Corea työskennelläksesi minkä tahansa relaatiotietokannan kanssa ja käytä valinnaisesti Dapperia, kun sinun on kirjoitettava matalan tason kyselyitä parantaaksesi suorituskykyä. MongoDB on toinen vaihtoehto, jos haluat käyttää dokumenttipohjaista NoSQL-tietokantaa. Vaikka nämä palveluntarjoajat ovat hyvin integroituja, abstrakteja ja esikonfiguroituja, voit itse asiassa olla vuorovaikutuksessa minkä tahansa tietokantajärjestelmän kanssa, jota voit käyttää .NET:n kanssa.",
+ "ModularArchitectureExplanation2": "Modulaarisuus on ensiluokkainen kansalainen ABP.IO-alustalla. Kaikki sovelluksen toiminnot on jaettu hyvin eristettyihin valinnaisiin moduuleihin. Käynnistysratkaisussa on valmiiksi asennettuna perus ABP Commercial -moduulit. Voit myös luoda omia moduuleita rakentaaksesi modulaarisen järjestelmän omalle sovelluksellesi.",
+ "MultiTenancyForSaasBusiness": "Monivuokraus SaaS-yrityksellesi",
+ "MultiTenancyForSaasBusinessExplanation": "ABP Commercial tarjoaa täydellisen, päästä-päähän usean vuokrausjärjestelmän SaaS-järjestelmien (Software-as-a-Service) luomiseen. Sen avulla vuokralaiset voivat jakaa tai käyttää omia tietokantojaan tietokantojen luonti- ja siirtojärjestelmässä.",
+ "MicroserviceStartupSolution": "Mikropalvelun käynnistysratkaisu",
+ "MicroserviceArchitectureExplanation2": "Voit hankkia sen seuraavaan mikropalvelujärjestelmääsi hyödyntääksesi valmiiksi rakennetun perusratkaisun ja laadukkaan kokemuksen.",
+ "PreIntegratedTools": "Esiintegroitu suosittuihin työkaluihin",
+ "PreIntegratedToolsExplanation": "Ratkaisu on jo integroitu alan standardityökaluihin ja teknologioihin, mutta voit aina muuttaa niitä ja integroida suosikkityökaluihisi.",
+ "SingleSignOnAuthenticationServer": "Kertakirjautumisen todennuspalvelin",
+ "SingleSignOnAuthenticationServerExplanation": "Ratkaisussa on todennuspalvelinsovellus, jota muut sovellukset käyttävät kertakirjautumispalvelimena API-käyttöoikeuksien hallintaominaisuuksilla. Se perustuu IdentityServeriin.",
+ "WebAppsWithGateways": "2 verkkosovellusta kahdella API-yhdyskäytävällä",
+ "WebAppsWithGatewaysExplanation": "Ratkaisu sisältää kaksi verkkosovellusta, joista jokaisessa on oma API-yhdyskäytävä (BFF - Backend For Frontend -malli).",
+ "BackOfficeApplication": "Back Office -sovellus",
+ "BackOfficeApplicationExplanation": "Järjestelmäsi todellinen verkkosovellus, jossa on useita käyttöliittymäkehysvaihtoehtoja. Voit luoda minkä tahansa yrityssovelluksen.",
+ "LandingWebsite": "Julkinen sivusto",
+ "LandingWebsiteExplanation": "Yleinen etusivu/julkinen verkkosivusto, jota voidaan käyttää useisiin tarkoituksiin, kuten yrityksesi esittelyyn, tuotteiden myymiseen jne.",
+ "ABPFrameworkEBook": "Mastering ABP Framework e-kirja",
+ "MasteringAbpFrameworkEBookDescription": "Sisältyy ABP Commercial -lisenssiisi",
+ "FullName": "Koko nimi",
+ "LicenseTypeNotCorrect": "Lisenssityyppi ei ole oikea!",
+ "Trainings": "Koulutukset",
+ "ChooseTrainingPlaceholder": "Valitse koulutus...",
+ "DoYouNeedTrainings": "Tarvitsetko jotain näistä koulutuksista?",
+ "DoYouNeedTraining": "Tarvitsetko {0} koulutusta?",
+ "GetInTouchUs": "Ota yhteyttä meihin",
+ "ForMoreInformationClickHere": "Saat lisätietoja napsauttamalla tätä.",
+ "IsGetOnboardingTraining": "Haluaisitko perehdytys- ja verkkosovelluskehityskoulutukseen?",
+ "OnboardingWebApplicationDevelopmentTrainingMessage": "Voit ajoittaa koulutuskalenterisi ottamalla yhteyttä osoitteeseen {0} organisaation luomisen jälkeen",
+ "CustomPurchaseMessage": "Ota meihin yhteyttä napsauttamalla {0} seuraavaa vaihetta varten.",
+ "Note": "Huomautus",
+ "AdditionalNote": "Lisähuomautus",
+ "OnboardingTrainingFaqTitle": "Onko teillä ABP onboarding -koulutusta?",
+ "OnboardingTrainingFaqExplanation": "Kyllä, meillä on ABP-koulutuspalvelut, jotka auttavat sinua saamaan ABP-projektisi käyntiin nopeasti. Opit ABP:stä ABP:n ydintiimin jäseneltä ja saat valmiudet aloittaa ABP-projektisi. Perehdytyskoulutuksessa kerromme kuinka perustat kehitysympäristösi, asennat tarvittavat työkalut ja luot täysin toimivan CRUD-sivun. Koulutus toteutetaan livenä ja Zoom-sovellusta käytetään ja olemme avoimia muiden online-kokousalustojen käyttöön. Koulutuksen kieli on englanti. Voit myös esittää kysymyksiäsi ABP:stä istuntojen aikana. Molemmille osapuolille suunnitellaan sopiva aika ja päivämäärä. Saat lisätietoja ottamalla yhteyttä meihin osoitteessa info@abp.io.",
+ "AddBasket": "Lisää ostoskoriin",
+ "SendTrainingRequest": "Lähetä koulutuspyyntö",
+ "OnlyEnglishVersionOfThisDocumentIsTheRecentAndValid": "* Tämän asiakirjan englanninkielinen versio on ajan tasalla ja englanninkielinen versio toimii ensisijaisena kaikissa riita-asioissa.",
+ "Pricing_Page_Title": "Suunnitelmat ja hinnoittelu",
+ "Pricing_Page_Description": "Valitse yrityksesi tarvitsemat ominaisuudet ja toiminnot tänään. Osta ABP Commercial -lisenssi ja luo rajattomasti projekteja.",
+ "Pricing_Page_HurryUp": "Kiirehdi!",
+ "Pricing_Page_BuyLicense": "Osta lisenssi 2021 hinnoilla 16. tammikuuta asti!",
+ "Pricing_Page_ValidForExistingCustomers": "Koskee myös nykyisiä asiakkaita ja lisenssien uusimista.",
+ "Pricing_Page_Hint1": "Lisenssihinta sisältää tietyn määrän kehittäjäpaikkoja. Jos sinulla on enemmän kehittäjiä, voit aina ostaa lisää paikkoja.",
+ "Pricing_Page_Hint2": "Voit ostaa lisää kehittäjälisenssejä nyt tai tulevaisuudessa. Lisenssit ovat paikkaperusteisia, joten voit siirtää paikan kehittäjältä toiselle.",
+ "Pricing_Page_Hint3": "Voit kehittää rajoittamattoman määrän erilaisia tuotteita lisenssilläsi.",
+ "Pricing_Page_Hint4": "ABP Suite on työkalu, joka auttaa kehitystäsi parantamaan tuottavuuttasi. Se tukee CRUD-sivujen luomista ja uusien projektien luomista.",
+ "Pricing_Page_Hint5": "Voit käyttää kaikkia valmiita moduuleja sovelluksissasi.",
+ "Pricing_Page_Hint6": "Voit käyttää kaikkia valmiita teemoja sovelluksissasi.",
+ "Pricing_Page_Hint7": "Käynnistysmalli on Visual Studio -ratkaisu, jonka avulla pääset alkuun projektissasi. Kaikki perusmoduulit on lisätty ja valmiiksi määritetty sinua varten.",
+ "Pricing_Page_Hint8": "Mastering ABP Framework -e-kirja selittää, kuinka .NET-ratkaisuja toteutetaan parhaiden käytäntöjen avulla. Sitä myydään Amazon.com-sivustolla ja voit ladata kirjan ilmaiseksi lisenssisi puitteissa.",
+ "Pricing_Page_Hint9": "Voit ladata minkä tahansa moduulin lähdekoodin. Voit halutessasi lisätä lähdekoodin ratkaisuusi tehdäksesi radikaaleja muutoksia tai säilyttää sen itsellesi turvallisuussyistä.",
+ "Pricing_Page_Hint10": "Lisenssit ovat elinikäisiä. Tämä tarkoittaa, että voit jatkaa sovelluksesi kehittämistä ikuisesti. Uusimman version käyttö ja tuen saaminen myönnetään lisenssijakson sisällä (1 vuosi, ellet uusi sitä).",
+ "Pricing_Page_Hint11": "Ei rajoituksia käyttöönotolle! Voit ottaa käyttöön niin monelle palvelimelle kuin haluat, mukaan lukien pilvipalvelut tai paikan päällä.",
+ "Pricing_Page_Hint12": "Voit päivittää moduulit, teemat ja työkalut uusimpaan versioon aktiivisen lisenssijaksosi aikana. Kun lisenssisi vanhenee, sinun on uusittava se, jotta voit jatkaa päivitysten saamista virheenkorjauksista, uusista ominaisuuksista ja parannuksista.",
+ "Pricing_Page_Hint13": "Voit saada premium-tuen vuodeksi (voit uusia lisenssin jatkaaksesi sitä).",
+ "Pricing_Page_Hint14": "Team- ja Business-lisensseillä on tapausten/kysymysten määräraja. Jos ostat lisää kehittäjälisenssejä, tapahtumarajasi kasvaa {0} (Tiimilisenssi) tai {1} (Business License) kehittäjää kohden.",
+ "Pricing_Page_Hint15": "Vain Enterprise License sisältää yksityisen tuen. Voit lähettää sähköpostia suoraan ABP-tiimille tai esittää kysymyksiä osoitteessa support.abp.io yksityisellä lippuvaihtoehdolla. Yksityiset liput eivät ole yleisön nähtävissä.",
+ "Pricing_Page_Hint16": "Voit ladata kaikkien ABP-teemojen lähdekoodin. Voit halutessasi lisätä lähdekoodin ratkaisuusi tehdäksesi radikaaleja muutoksia tai säilyttää sen itsellesi turvallisuussyistä.",
+ "Pricing_Page_Testimonial_1": "ABP Commercial antoi SC Venturesille mahdollisuuden toimittaa pankkitason usean vuokralaisen siilotietokanta SaaS-alustan yhdeksässä kuukaudessa tukemaan myyntisaamisten / ostovelkojen toimitusketjun rahoitusta merkittävien arvolaskujen kautta useilta integroiduilta ankkureilta. ABP:n modulaarisuus mahdollisti sen, että tiimi toimitti ennätysajassa, läpäisi kaiken VAPT:n ja ottaa käyttöön konttimuotoisen mikropalvelupinon täyden CI/CD:n ja putkien kautta tuotantoon.",
+ "Pricing_Page_Testimonial_2": "Näemme ABP Commercialin käytön arvon mukautettujen kehitysprojektien yleiskustannusten vähentämiseen. Ja tiimi pystyy yhdistämään koodimallin eri projektivirroissa. Näemme viitekehyksessä enemmän mahdollisuuksia rakentaa uusia ominaisuuksia nopeammin kuin ennen. Luotamme, että näemme jatkuvasti ABP Commercialin hyödyntämisen arvon.",
+ "Pricing_Page_Testimonial_3": "Rakastamme ABP:tä. Meidän ei tarvitse kirjoittaa kaikkea tyhjästä. Aloitamme valmiista ominaisuuksista ja keskitymme vain siihen, mitä todella tarvitsemme kirjoittaa. Lisäksi ABP on hyvin suunniteltu ja koodi on korkealaatuista ja siinä on vähemmän bugeja. Jos joutuisimme kirjoittamaan kaiken tarvitsemamme itse, joudumme ehkä viettämään vuosia. Jälleen kerran pidämme siitä, että uusi versio, ongelmankorjaus tai parannus ilmestyy hyvin pian joka toinen viikko. Emme odota liian kauan.",
+ "Pricing_Page_Testimonial_4": "ABP Commercial on loistava tuote, jota suosittelen. Kaupalliset tuotteet markkinoille asiakkaillemme yhdellä konfiguroitavalla alustalla. Kehyksen ja työkalujen tarjoama aloitus jokaiselle joukkueelle on jokaisen sentin arvoinen. ABP Commercial sopi parhaiten tarpeisiimme.",
+ "Pricing_Page_Testimonial_5": "ABP Framework ei ole vain viitekehys, vaan se on myös opas projektin kehittämiseen/hallintaan, koska se tarjoaa DDD-, GenericRepository-, DI-, Microservice- ja Modularity-koulutusta. Vaikka et itse käyttäisikään kehystä, voit kehittää itseäsi docs.abp.io:lla, joka on hyvin ja ammattimaisesti valmisteltu (OpenIddict, Redis, Quartz jne.). Koska monet asiat on rakennettu valmiiksi, se lyhentää projektin kehitysaikaa merkittävästi (kuten kirjautumissivu, poikkeusten käsittely, tietojen suodatus, kylvö, tarkastusloki, lokalisointi, automaattinen API-ohjain jne.). Esimerkkinä sovelluksestamme olen käyttänyt paikallista tapahtumaväylää varastonhallintaan. Pystyn siis hallitsemaan tilausliikkeitä kirjoittamalla varastokäsittelijäksi. On hienoa olla hukkaamatta aikaa CreationTimelle, CreatorId:lle. Ne täytetään automaattisesti.",
+ "AbpBookDownloadArea_ClaimYourEBook": "Lunasta Mastering ABP Framework -e-kirja",
+ "AddMemberModal_Warning_1": "Jos käyttäjätunnusta, jota yrität lisätä, ei ole järjestelmässä, pyydä tiimisi jäsentä rekisteröitymään osoitteessa {0} a> ja jakaa hänen tilinsä käyttäjätunnus kanssasi.",
+ "MyOrganizations_Detail_WelcomeMessage": "Tervetuloa organisaatioosi, {0}",
+ "MyOrganizations_Detail_OrganizationManagement": "Organisaation hallinta",
+ "OrganizationDisplayName": "Organisaation näyttönimi",
+ "MyOrganizations_Detail_EditDisplayName": "Muokkaa näyttönimeä",
+ "MyOrganizations_Detail_UpgradeYourLicense": "Päivitä lisenssisi",
+ "MyOrganizations_Detail_LicenseStartAndExpiryDate": "Lisenssin alkamispäivä - viimeinen voimassaolopäivä",
+ "MyOrganizations_Detail_OwnerRightInfo": "Käytät {0} {1} omistajan oikeuksistasi.",
+ "MyOrganizations_Detail_CopyApiKey": "Kopioi avain",
+ "MyOrganizations_Detail_ApiKeyDescription": "API-avain on {1}-palvelussa isännöivien PRO-pakettien tunnus.",
+ "MyOrganizations_Detail_YourPrivateNugetSource": "Yksityinen NuGet-lähteesi on {0}",
+ "MyOrganizations_Detail_PrivateNugetSourceWarning": "Tämä lisätään automaattisesti syötteeksi NuGet.Configiin ABP-ratkaisussasi. Älä jaa yksityistä avaintasi luvattomien käyttäjien kanssa!",
+ "MyOrganizations_Detail_DeveloperSeatInfo": "Käytät {0} {1} kehittäjäpaikastasi.",
+ "NeedMoreSeatsForYourTeam": "Tarvitsetko lisää paikkoja tiimillesi?",
+ "MyOrganizations_Detail_PricePerYear": "{0} / vuosi",
+ "MyOrganizations_Detail_PurchaseDeveloperSeats": "Osta kehittäjäistuimet",
+ "Invoices": "Laskut",
+ "RequestInvoice": "Pyydä lasku",
+ "OrderNumber": "Tilausnumero",
+ "Date": "Päivämäärä",
+ "Products": "Tuotteet",
+ "TotalPrice": "Kokonaishinta",
+ "ThereIsNoInvoice": "Ei ole laskua",
+ "MyOrganizations_Detail_PaymentProviderInfo": "Jos olet ostanut käyttöluvan {0}-yhdyskäytävän kautta, se lähettää PDF-laskun sähköpostiosoitteeseesi, katso {0}-laskutus. ",
+ "MyOrganizations_Detail_PayUInfo": "Jos olet ostanut PayU-yhdyskäytävän kautta, napsauta \"Pyydä lasku\" -painiketta ja täytä laskutustiedot.",
+ "MyOrganizations_Detail_ConclusionInfo": "Laskupyyntösi saatetaan päätökseen {0} arkipäivän kuluessa.",
+ "ExtendYourLicense": "Laajenna {0}-lisenssiäsi",
+ "Continue": "Jatka",
+ "PurchaseLicense": "Osta {0} lisenssi",
+ "DownloadInvoiceModal_DownloadInvoice": "Lataa lasku",
+ "DownloadInvoiceModal_SaveInformationOnlyOnce": "Voit tallentaa laskutustietosi vain kerran.",
+ "InvoiceModal_EnterCompanyName": "Anna yrityksesi virallinen nimi...",
+ "InvoiceModal_EnterCompanyAddress": "Anna laillinen yrityksesi osoite...",
+ "InvoiceModal_EnterTaxNumber": "Anna vero-/alv-numerosi, jos se on saatavilla...",
+ "RequestInvoiceModal_EnterNotes": "Kirjoita lisäviestisi laskustasi...",
+ "PrePayment_PayWithIyzico": "Maksat Iyzicolla",
+ "ContinueToCheckout": "Jatka Checkoutiin",
+ "PrePayment_IyzicoRedirectionInfo": "Sinut ohjataan Iyzico Payment Gatewaylle viimeistelemään ostoksesi turvallisesti.",
+ "PrePayment_IyzicoAcceptVisaAndMasterCard": "Iyzico hyväksyy Visa- ja MasterCard-kortit.",
+ "Purchase": "Osta",
+ "AcceptTermsAndConditions": "Olen lukenut, ymmärtänyt ja hyväksyn tietosuojakäytännön, käyttöehdot ja EULA:n.",
+ "AcceptTermsAndConditionsWarningMessage": "Hyväksy tietosuojakäytäntö ja ehdot",
+ "SelectGatewayToContinue": "Valitse yhdyskäytävä jatkaaksesi!",
+ "GatewaySelection_SelectGateway": "Valitse maksuyhdyskäytävä",
+ "GatewaySelection_RedirectionMessage": "Seuraavaksi sinut ohjataan tapahtumaa varten valitun maksuyhdyskäytävän verkkosivustolle.",
+ "PaymentSucceed_PaymentSuccessMessage": "Maksu suoritettu",
+ "PaymentSucceed_ThanksForPurchase": "Kiitos ostoksestasi!",
+ "PaymentSucceed_CreateYourOrganization": "Luo organisaatiosi",
+ "PaymentSucceed_AddMeAsDeveloper": "Olen myös kehittäjä, lisää minut kehittäjäksi organisaatiooni.",
+ "PaymentSucceed_CreateOrganization": "Luo organisaatio",
+ "PaymentSucceed_OrganizationDescription": "Organisaatio koostuu kehittäjistä ja omistajista. Kehittäjät ovat käyttäjiä, jotka kirjoittavat koodia ABP-projektiin ja hyötyvät {1}-verkkosivustosta. Omistajat ovat käyttäjiä, jotka jakavat kehittäjäpaikkoja ja hallinnoivat lisensointia.",
+ "PaymentSucceed_ViewOrganization": "Napsauta tästä nähdäksesi organisaation",
+ "Purchase_TotalAnnualPrice": "YHTEENSÄ (vuosimaksu)",
+ "Purchase_TrainingPrice": "Koulutuksen hinta",
+ "Purchase_OnboardingTraining": "ABP:n perehdytys ja verkkosovelluskehitys live-koulutus",
+ "TotalDeveloperPrice": "Kehittäjän kokonaishinta",
+ "Purchase_PricePerDeveloper": "{0} {1} kehittäjää kohden",
+ "Purchase_IncludedDeveloperInfo": "{0} {1} mukana.",
+ "Purchase_LicenseExtraDeveloperPurchaseMessage": "{0} lisenssi sisältää {1} kehittäjää. Voit lisätä uusia kehittäjiä nyt tai myöhemmin.",
+ "StartupTemplates_Page_Title": "Käynnistysmallit",
+ "StartupTemplates_Page_Description": "ABP Commercialin avulla voit rakentaa minkä tahansa monimutkaisia ratkaisuja. Se tarjoaa kaksi pääasiallista valmiiksi rakennettua käynnistysratkaisua. Voit valita tarpeitasi vastaavan ja rakentaa oman mukautetun ratkaisun sen päälle.",
+ "MicroserviceStartupSolutionForDotnet": "Mikropalvelu käynnistysmalli .NET:ille",
+ "MonolithSolutionForDotnet": "Monoliitti (modulaarinen) Ratkaisu .NET:ille",
+ "TrainingDetailsHeaderInfo_TrainingHour": "{0} tunti(a)",
+ "Trainings_Content": "Koulutuksen sisältö",
+ "Trial_Page_StartYourFreeTrial": "Aloita ilmainen kokeilujaksosi",
+ "TrialLicenseFeatures": "Voit hyötyä kaikista ABP:n kaupallisista ominaisuuksista",
+ "TrialPeriodDays": "Sinulla on {0} päivän tiimilisenssi",
+ "TrialForumSupportIncident": "Sinulla on {0} keskustelupalstan tukitapausta",
+ "Contact_Page_Title": "Ota yhteyttä ABP:n kehitystiimiin",
+ "Contact_Page_Description": "Ota yhteyttä ABP:n kehitystiimiin, jos tarvitset apua tai kerro ajatuksesi ja mielipiteesi! ABP-tukitiimi on valmis auttamaan.",
+ "Demo_Page_Title": "Luo demo",
+ "Demo_Page_Description": "Luo ilmainen demo nähdäksesi esimerkkisovelluksen, joka on luotu käyttämällä ABP Commercial -käynnistysmallia. Älä toista itseäsi yleisten hakemusvaatimusten suhteen.",
+ "Discounted_Page_Title": "Alennettu hinnoittelu",
+ "Discounted_Page_Description": "Valitse yrityksesi tänään tarvitsemat ominaisuudet ja toiminnot. Osta ABP Commercial -lisenssi ja luo rajattomasti projekteja",
+ "Faq_Page_Title": "Usein kysytyt kysymykset (FAQ)",
+ "Faq_Page_Description": "Onko sinulla kysymyksiä? Hae usein kysyttyjä kysymyksiä tai kysy meiltä yhteydenottolomakkeella.",
+ "Faq_Page_SwiftCode": "Swift-koodi",
+ "Faq_Page_BankName": "Pankin nimi",
+ "Faq_Page_AccountName": "Tilin nimi",
+ "Faq_Page_AccountNumber": "Tilinumero",
+ "Faq_Page_Currency": "Valuutta",
+ "Faq_Page_VatNumber": "ALV-numero",
+ "Faq_Page_OtherCurrenciesInfo": "Jos haluat lisätietoja muista valuutoista, katso kaikki tilit",
+ "ModuleDetail_Page_Title": "Moduulin tiedot - {0}",
+ "ProjectCreatedSuccess_Page_Title": "Projektisi on luotu",
+ "ProjectCreatedSuccess_Page_Description": "ABP-projektisi luotu onnistuneesti!",
+ "Suite_Page_Title": "ABP Suite - Luo CRUD-sivuja",
+ "Suite_Page_Description": "ABP Commercial tarjoaa nopeat sovelluskehitystyökalut kehittäjien tuottavuuden lisäämiseksi. ABP Suiten avulla voit luoda CRUD-sivuja helposti.",
+ "Themes_Page_Title": "Modernit ja toimivat käyttöliittymäteemat",
+ "Themes_Page_Description": "ABP Commercial tarjoaa useita ammattimaisia, moderneja käyttöliittymäteemoja. Luo ilmainen demo nähdäksesi nopeasti, miltä käyttöliittymä näyttää.",
+ "Tools_Page_Title": "Nopeat sovelluskehitystyökalut",
+ "Tools_Page_Description": "ABP Commercial tarjoaa nopeat sovelluskehitystyökalut kehittäjien tuottavuuden lisäämiseksi. ABP Suiten avulla voit luoda CRUD-sivuja helposti.",
+ "DeveloperPrice": "Kehittäjän hinta",
+ "AdditionalDeveloperPaymentInfoSection_AdditionalDevelopers": "{0} kehittäjät",
+ "LicenseRemainingDays": " {0} päivän ajan",
+ "ExtendPaymentInfoSection_Description": "Pidentämällä/uusimalla käyttölupaasi saat edelleen premium-tuen. Voit myös saada suurempia tai pieniä päivityksiä moduuleille ja teemoille. Voit jatkaa uusien projektien luomista. Voit silti käyttää ABP Suitea, joka nopeuttaa kehitystäsi.",
+ "LicenseRenewalPrice": "Lisenssin uusimisen hinta",
+ "LicensePrice": "Lisenssin hinta",
+ "TrialLicensePaymentInfoSection_Description": "Osta käyttölupa: Ostamalla lisenssin saat edelleen premium-tuen. Voit myös saada suurempia tai pieniä päivityksiä moduuleille ja teemoille. Voit jatkaa uusien projektien luomista. Voit edelleen käyttää ABP Suitea, joka nopeuttaa kehitystäsi. Katso käyttölupien vertailutaulukko, jolla voit tarkistaa lisenssityyppien väliset erot.",
+ "SelectTargetLicense": "Valitse kohdelisenssi",
+ "UpgradePaymentInfoSection_ExtendMyLicenseForOneYear": "Kyllä, jatka lisenssini voimassaolopäivää 1 vuodella.",
+ "UpgradePaymentInfoSection_WantToExtendLicense": "Haluatko jatkaa lisenssiäsi vielä {0} vuodella?",
+ "UpgradePaymentInfoSection_UpgradingWillNotExtendLicense": "Päivitys ei pidennä lisenssisi vanhenemispäivää!",
+ "UpgradePaymentInfoSection_LicenseUpgradeDescription": "Päivittämällä lisenssisi ylennät korkeampaan lisenssityyppiin, mikä antaa sinulle lisäetuja. Katso lisenssityyppien väliset erot lisenssivertailutaulukosta.",
+ "Landing_Page_CustomerStories": "Asiakkaiden tarinoita",
+ "Landing_Page_OurGreatCustomers": "Hienot asiakkaamme",
+ "Landing_Page_WebApplicationFramework": "Web Application Framework",
+ "Landing_Page_WebDevelopmentPlatform": "Web-kehitysalusta",
+ "Landing_Page_CompleteWebDevelopmentPlatform": "Täydellinen Web-kehitysalusta",
+ "Landing_Page_TryFreeDemo": "Kokeile ilmaista demoa",
+ "Landing_Page_StartingPointForWebApplications": "Lähtökohta ASP.NET Core -pohjaisille verkkosovelluksille! Se perustuu parhaan verkkokehityksen ABP-kehykseen.",
+ "Landing_Page_AbpProvidesSoftwareInfrastructure": "ABP Framework tarjoaa ohjelmistoinfrastruktuurin erinomaisten verkkosovellusten kehittämiseen parhaiden käytäntöjen kanssa.",
+ "Landing_Page_MicroserviceCompatibleArchitecture": "Microservice-yhteensopiva arkkitehtuuri",
+ "Landing_Page_PreBuiltApplicationModulesAndThemes": "Valmiiksi rakennetut sovellusmoduulit ja teemat",
+ "Landing_Page_MultiTenantArchitecture": "Monivuokraus arkkitehtuuri",
+ "Landing_Page_MultiTenancyDescription": "SaaS-sovellukset on tehty helpoksi! Integroitu monivuokraus tietokannasta käyttöliittymään.",
+ "Landing_Page_DDDIntroduction": "Suunniteltu ja kehitetty DDD-mallien ja -periaatteiden perusteella. Tarjoaa kerrostetun mallin sovelluksellesi.",
+ "Landing_Page_CrossCuttingConcernsInfo": "Täydellinen infrastruktuuri valtuutukseen, validointiin, poikkeusten käsittelyyn, välimuistiin, tarkastuslokiin, tapahtumien hallintaan ja muuhun.",
+ "Landing_Page_PreBuiltApplicationModules": "Valmiiksi rakennetut sovellusmoduulit, jotka sisältävät yleisimmät verkkosovellusvaatimukset.",
+ "Landing_Page_ChatModule": "Keskustelut",
+ "Landing_Page_DocsModule": "Asiakirjat",
+ "Landing_Page_FileManagementModule": "Tiedostonhallinta",
+ "Landing_Page_CustomerStory_1": "ABP Commercial antoi SC Venturesille mahdollisuuden toimittaa pankkitason usean vuokralaisen siilotietokanta SaaS-alustan yhdeksässä kuukaudessa tukemaan myyntisaamisten / ostovelkojen toimitusketjun rahoitusta merkittävien arvolaskujen kautta useilta integroiduilta ankkureilta. ABP:n modulaarisuus mahdollisti sen, että tiimi toimitti ennätysajassa, läpäisi kaiken VAPT:n ja siirsi konttipohjaisen mikropalvelupinon täyden CI/CD:n ja putkien kautta tuotantoon.",
+ "Landing_Page_CustomerStory_2": "Näemme ABP Commercialin käytön arvon mukautettujen kehitysprojektien yleiskustannusten vähentämiseen. Ja tiimi pystyy yhdistämään koodimallin eri projektivirroissa. Näemme viitekehyksessä enemmän mahdollisuuksia rakentaa uusia ominaisuuksia nopeammin kuin ennen. Luotamme, että näemme jatkuvasti ABP Commercialin hyödyntämisen arvon.",
+ "Landing_Page_CustomerStory_3": "Rakastamme ABP:tä. Meidän ei tarvitse kirjoittaa kaikkea tyhjästä. Aloitamme valmiista ominaisuuksista ja keskitymme vain siihen, mitä todella tarvitsemme kirjoittaa. Lisäksi ABP on hyvin suunniteltu ja koodi on korkealaatuista ja siinä on vähemmän bugeja. Jos joutuisimme kirjoittamaan kaiken tarvitsemamme itse, joudumme ehkä viettämään vuosia. Jälleen kerran pidämme siitä, että uusi versio, ongelmankorjaus tai parannus julkaistaan hyvin pian\n joka toinen viikko. Emme odota liian kauan.",
+ "Landing_Page_CustomerStory_4": "ABP Commercial on loistava tuote, jota suosittelen. Kaupalliset tuotteet markkinoille asiakkaillemme yhdellä konfiguroitavalla alustalla. Kehyksen ja työkalujen tarjoama aloitus jokaiselle joukkueelle on jokaisen sentin arvoinen. ABP Commercial sopi parhaiten tarpeisiimme.",
+ "Landing_Page_AdditionalServices": "Mukautettu tai volyymilisenssi, perehdytys, suora koulutus ja tuki, mukautettu projektikehitys, olemassa olevien projektien siirtäminen ja paljon muuta...",
+ "Landing_Page_IncludedDeveloperLicenses": "Mukana {0} kehittäjälisenssi",
+ "Landing_Page_SeeOnDemo": "Katso Demosta",
+ "Landing_Page_LeptonThemes": "Lepton-teemat",
+ "Landing_Page_AccountModuleDescription_1": "Tämä moduuli toteuttaa sovelluksen todennusjärjestelmän;",
+ "Landing_Page_AccountModuleDescription_2": "Tarjoaa kirjautumissivun, jossa on käyttäjätunnus ja salasana",
+ "Landing_Page_AccountModuleDescription_3": "Tarjoaa rekisteröintisivun uuden tilin luomista varten.",
+ "Landing_Page_AccountModuleDescription_4": "Tarjoaa unohdin salasanan -sivun salasanan palautus -linkin lähettämistä varten sähköpostitse.",
+ "Landing_Page_AccountModuleDescription_5": "Tarjoaa sähköpostivahvistustoiminnon käyttöliittymän kanssa.",
+ "Landing_Page_AccountModuleDescription_6": "Toteuttaa kaksivaiheisen todennuksen (tekstiviesti ja sähköposti).",
+ "Landing_Page_AccountModuleDescription_7": "Toteuttaa käyttäjän lukituksen (lukitsee tilin määritetyksi ajaksi, kun tietty määrä epäonnistuneita kirjautumisia tapahtuu virheellisten tunnistetietojen vuoksi tietyn ajanjakson sisällä).",
+ "Landing_Page_AccountModuleDescription_8": "Toteuttaa Identity Server -todennuspalvelimen käyttöliittymän ja toiminnot.",
+ "Landing_Page_AccountModuleDescription_9": "Mahdollistaa vaihtamisen vuokralaisten välillä usean vuokralaisen ympäristössä.",
+ "Landing_Page_AccountModuleDescription_10": "Mahdollistaa sovelluksen käyttöliittymän kielen muuttamisen.",
+ "Landing_Page_AuditLoggingModuleDescription_1": "Tämä moduuli tarjoaa tarkastuslokin raportoinnin käyttöliittymän valvontainfrastruktuurille. Mahdollistaa tarkastuslokimerkintöjen ja entiteettimuutoslokien etsimisen, suodattamisen ja näyttämisen.",
+ "Landing_Page_AuditLoggingModuleDescription_2": "Tarkastuslokikirjaus sisältää tärkeitä tietoja jokaisesta asiakaspyynnöstä:",
+ "Landing_Page_AuditLoggingModuleDescription_3": "URL, selain, IP-osoite, asiakkaan nimi",
+ "Landing_Page_AuditLoggingModuleDescription_4": "Käyttäjä",
+ "Landing_Page_AuditLoggingModuleDescription_5": "HTTP-metodi, HTTP-vastauksen tilakoodi",
+ "Landing_Page_AuditLoggingModuleDescription_6": "Onnistuminen/epäonnistuminen, poikkeustiedot, jos saatavilla",
+ "Landing_Page_AuditLoggingModuleDescription_7": "Pyynnön suoritusaika",
+ "Landing_Page_AuditLoggingModuleDescription_8": "Entiteetit on luotu, poistettu tai päivitetty tässä pyynnössä (muuttunein ominaisuuksin).",
+ "Landing_Page_BloggingModuleDescription_1": "Tämä moduuli lisää yksinkertaisen blogin ABP-sovellukseesi;",
+ "Landing_Page_BloggingModuleDescription_2": "Mahdollistaa useiden blogien luomisen yhdessä sovelluksessa.",
+ "Landing_Page_BloggingModuleDescription_3": "Tukee Markdown-formaattia.",
+ "Landing_Page_BloggingModuleDescription_4": "Mahdollistaa kommentin kirjoittamisen viestiin.",
+ "Landing_Page_BloggingModuleDescription_5": "Mahdollistaa tunnisteiden liittämisen blogikirjoituksiin.",
+ "Landing_Page_BloggingModuleDescription_6": "Katso blog.abp.io-verkkosivusto elävänä esimerkkinä blogimoduulista.",
+ "Landing_Page_ChatModuleDescription_1": "Tätä moduulia käytetään reaaliaikaiseen viestintään sovelluksen käyttäjien välillä.",
+ "Landing_Page_ChatModuleDescription_2": "Reaaliaikainen viestintä chat-sivulla.",
+ "Landing_Page_ChatModuleDescription_3": "Hae käyttäjiltä uusia keskusteluja sovelluksessa.",
+ "Landing_Page_ChatModuleDescription_4": "Yhteystiedot viimeaikaisista keskusteluista.",
+ "Landing_Page_ChatModuleDescription_5": "Uusi viesti-ilmoitukset, kun käyttäjä katselee toista sivua.",
+ "Landing_Page_ChatModuleDescription_6": "Lukemattomien viestien kokonaismäärä -merkki valikkokuvakkeessa.",
+ "Landing_Page_ChatModuleDescription_7": "Lukemattomien viestien määrä jokaisessa keskustelussa.",
+ "Landing_Page_ChatModuleDescription_8": "Lazy Load -keskustelut.",
+ "Landing_Page_DocsModuleDescription_1": "Tätä moduulia käytetään teknisen dokumentaation web-sivustojen luomiseen;",
+ "Landing_Page_DocsModuleDescription_2": "Sisäänrakennettu GitHub-integraatio: Kirjoita ja hallitse asiakirjoja suoraan GitHubissa.",
+ "Landing_Page_DocsModuleDescription_3": "Versiointi-tuki integroitu suoraan GitHub-julkaisuihin.",
+ "Landing_Page_DocsModuleDescription_4": "Tukee monia kieltä (varatuki oletuskielelle).",
+ "Landing_Page_DocsModuleDescription_5": "Tukee Markdown- ja HTML-formaatteja.",
+ "Landing_Page_DocsModuleDescription_6": "Tarjoaa navigointi- ja ääriviivat-osion.",
+ "Landing_Page_DocsModuleDescription_7": "Mahdollistaa useiden projektien dokumentaation yhdessä sovelluksessa.",
+ "Landing_Page_DocsModuleDescription_8": "Linkit tiedostoon GitHubissa, jotta kuka tahansa voi helposti osallistua klikkaamalla Muokkaa-linkkiä.",
+ "Landing_Page_DocsModuleDescription_9": "GitHub-lähteen lisäksi mahdollistaa tavallisen kansion käytön dokumentaatiolähteenä.",
+ "Landing_Page_FileManagementModuleDescription_1": "Lataa, lataa ja järjestä tiedostoja hierarkkisessa kansiorakenteessa.",
+ "Landing_Page_FileManagementModuleDescription_2": "Tätä moduulia käytetään tiedostojen lataamiseen, lataamiseen ja järjestämiseen hierarkkisessa kansiorakenteessa. Se on myös yhteensopiva usean vuokrauksen kanssa, ja voit määrittää vuokralaisten kokonaiskokorajan.",
+ "Landing_Page_FileManagementModuleDescription_3": "Tämä moduuli perustuu BLOB-tallennusjärjestelmään, joten se voi käyttää eri tallennuspalveluita tiedoston sisällön tallentamiseen.",
+ "Landing_Page_IdentityModuleDescription_1": "Tämä moduuli toteuttaa sovelluksen käyttäjä- ja roolijärjestelmän;",
+ "Landing_Page_IdentityModuleDescription_2": "Luotu käyttäen Microsoftin ASP.NET Core Identity -kirjastoa.",
+ "Landing_Page_IdentityModuleDescription_3": "Hallinnoi rooleja ja käyttäjiä järjestelmässä. Käyttäjällä voi olla useita rooleja.",
+ "Landing_Page_IdentityModuleDescription_4": "Aseta käyttöoikeudet rooli- ja käyttäjätasoilla.",
+ "Landing_Page_IdentityModuleDescription_5": "Ota käyttöön tai poista käytöstä kaksivaihetodennus ja käyttäjän lukitus käyttäjää kohti.",
+ "Landing_Page_IdentityModuleDescription_6": "Hallinnoi perus käyttäjäprofiilia ja salasanaa.",
+ "Landing_Page_IdentityModuleDescription_7": "Hallitse vaatimustyyppejä järjestelmässä, aseta vaatimuksia rooleille ja käyttäjille.",
+ "Landing_Page_IdentityModuleDescription_8": "Asetussivu salasanan monimutkaisuuden, käyttäjän kirjautumisen, tilin ja lukituksen hallintaa varten.",
+ "Landing_Page_IdentityModuleDescription_9": "Tukee LDAP-todennusta.",
+ "Landing_Page_IdentityModuleDescription_10": "Tarjoaa sähköpostin ja puhelinnumeron vahvistuksen.",
+ "Landing_Page_IdentityModuleDescription_11": "Tukee sosiaalisen kirjautumisen integraatioita (Twitter, Facebook, GitHub jne.).",
+ "Landing_Page_IdentityModuleDescription_12": "Hallinnoi järjestelmän organisaatioyksiköitä.",
+ "Landing_Page_PaymentModuleDescription_1": "Tarjoaa integroinnin eri maksuyhdyskäytäville.",
+ "Landing_Page_PaymentModuleDescription_2": "Tämä moduuli integroi maksuyhdyskäytäviä, joten saat helposti maksuja asiakkailtasi.",
+ "Landing_Page_PaymentModuleDescription_3": "Tämä moduuli tukee seuraavia maksuyhdyskäytäviä",
+ "Welcome_Page_UseSameCredentialForCommercialWebsites": "Käytä samoja kirjautumistietoja sekä commercial.abp.io- että support.abp.io.",
+ "WatchCrudPagesVideo": "Katso \"CRUD-sivujen luominen ABP Suiten avulla\" -video!",
+ "WatchGeneratingFromDatabaseVideo": "Katso \"ABP Suite: CRUD-sivujen luominen olemassa olevista tietokantataulukoista\" -video!",
+ "WatchTakeCloserLookVideo": "Katso \"Katso tarkemmin koodin sukupolvea: ABP Suite\" -video!",
+ "ConfirmedEmailAddressRequiredToStartTrial": "Sinulla tulee olla vahvistettu sähköpostiosoite, jotta voit aloittaa kokeilukäyttöoikeuden.",
+ "EmailVerificationMailNotSent": "Sähköpostivahvistusviestiä ei voitu lähettää.",
+ "GetConfirmationEmail": "Klikkaa tätä saadaksesi vahvistussähköpostin, jos et ole saanut sitä aiemmin.",
+ "WhichLicenseTypeYouAreInterestedIn": "Mistä lisenssityypistä olet kiinnostunut?",
+ "DontTakeOurWordForIt": "Älä luota sanaamme...",
+ "ReadAbpCommercialUsersWantYouToKnow": "Lue, mitä ABP Commercialin käyttäjät haluavat sinun tietävän",
+ "Testimonial_ShortDescription_1": "ABP:n modulaarisuus mahdollisti tiimin toimituksen ajoissa.",
+ "Testimonial_ShortDescription_2": "Rakenna uusia ominaisuuksia nopeammin kuin ennen.",
+ "Testimonial_ShortDescription_3": "Aloitamme valmiista ominaisuuksista ja keskitymme vain siihen, mitä todella tarvitsee kirjoittaa.",
+ "Testimonial_ShortDescription_4": "ABP Commercial sopi parhaiten tarpeisiimme.",
+ "OnlineReviewersOnAbpCommercial": "Online-arvostelut ABP Commercialista",
+ "SeeWhatToldAboutAbpCommercial": "Katso, mitä ABP Commercialista on kerrottu, ja kirjoita ajatuksesi, jos haluat.",
+ "BlazoriseLicense": "Pitääkö meidän ostaa Blazorise-lisenssi?",
+ "BlazoriseLicenseExplanation": "Meillä on Volosoftin ja Megabitin välinen sopimus, jonka mukaan Blazorise-lisenssi on niputettu ABP Commercial -tuotteisiin, joten asiakkaidemme ei tarvitse ostaa ylimääräistä Blazorise-lisenssiä.",
+ "ExtendPaymentInfoSection_DeveloperPrice": "{0}x lisäkehittäjä(ä)",
+ "ExtendPaymentInfoSection_DiscountRate": "Alennus {0} %",
+ "TotalNetPrice": "Nettohinta yhteensä",
+ "EFCore": "Entity Framework Core",
+ "All": "Kaikki",
+ "Mvc": "MVC",
+ "DataBaseProvider": "Tietojen tarjoaja",
+ "UIFramework": "UI Framework",
+ "LeptonXThemeForDashboard": "LeptonX-teema järjestelmänvalvojan hallintapaneelillesi",
+ "AbpPlatform": "ABP-alusta",
+ "YouDeserveGoodUXUI": "Ansaitset hyvän käyttöliittymän ja paremman UX:n. ABP:n LeptonX Theme on täällä palvelemassa sitä.",
+ "ViewLiveDemo": "Katso live-teeman esittely",
+ "GetLeptonX": "Hanki LeptonX nyt",
+ "SeeLeptonXDocumentation": "Katso LeptonX-dokumentaatio",
+ "SimplifiedMenu": "Yksinkertaistettu valikko",
+ "SimplifiedMenuDescription": "Löydät etsimäsi sivun helposti suodattamalla valikkoa",
+ "YourFavoritePages": "Suosikkisivusi ulottuvillasi",
+ "YourFavoritePagesDescription": "Lisää tai poista sivu helposti suosikeista napsauttamalla tähtikuvaketta sivun oikeassa yläkulmassa.",
+ "BreadCrumbs": "Leivänmurut (Breadcrumbs) saumattomaan sivun vaihtamiseen",
+ "BreadCrumbsDescription": "Breadcrumbin avulla voit siirtyä samalla tasolla oleville sivuille yhdellä napsautuksella, vaikka vasen valikko olisi suljettu, ja se toimii sekä tabletilla että mobiililaitteella responsiivisesti!",
+ "YourMenu": "Valikko kuten haluat",
+ "YourMenuDescription": "Mukauta käyttäjävalikon suoraan napsautettavat kuvakkeet ja avattavat ruudut haluamallasi tavalla. Käyttäjävalikko on täysin muokattavissa tarpeidesi mukaan",
+ "RtlSupport": "RTL-tuki kielellesi",
+ "RtlSupportDescription": "LeptonX Theme tukee RTL:ää kielelläsi. Kielivaihtoehdot ovat asetusvalikossa, jotta voit vaihtaa kieltä.",
+ "YourColors": "Värit hallintapaneelin käyttöliittymässä",
+ "YourColorsDescription": "LeptonX Theme toimii järjestelmäasetustesi mukaan, ja siinä on kojelaudan vaalea teema, kojelaudan tumma teema ja kojelaudan puolitumma teema.",
+ "ArrangeContentWidth": "Järjestä sisällön leveys helposti",
+ "ArrangeContentWidthDescription": "Muuta helposti sisältöalueen leveyttä.",
+ "LeptonXCompatibleWith": "LeptonX-teema on yhteensopiva",
+ "MobileResponsiveTemplate": "Mobiiliresponsiivinen malli",
+ "MobileResponsiveTemplateDescription1": "Käytä LeptonX-hallintapaneelia miltä tahansa haluamaltasi laitteelta.",
+ "MobileResponsiveTemplateDescription2": "Se on suunniteltu käytettäväksi helposti kaikissa laitteissasi. Se on responsiivinen mobiililaitteissa ja tablet-koossa.",
+ "TopMenuLayoutOption": "Ylävalikon asetteluvaihtoehto",
+ "TopMenuLayoutOptionDescription1": "Jos haluat määrittää verkkosivustollesi saman järjestelmänvalvojan hallintapaneelin, voit tehdä sen LeptonX-teemalla!",
+ "TopMenuLayoutOptionDescription2": "Kokeile vain LeptonX:n ylävalikkoasettelua, jotta se tapahtuu!",
+ "EasilyCustomizable": "Helposti muokattavissa brändisi väreihin",
+ "EasilyCustomizableDescription1": "Voit mukauttaa LeptonX-teemaa vain muutamalla SCSS-muuttujalla. Ei ohittamista, ei ylimääräistä CSS-kuormaa!",
+ "EasilyCustomizableDescription2": "LeptonX:n avulla voit järjestää järjestelmänvalvojan kojelautasi haluamallasi tavalla.",
+ "IndependentLayout": "Itsenäinen ulkoasu ja sisältöalue",
+ "IndependentLayoutDescription1": "LeptonX:n asetteluinfrastruktuuri suunniteltiin täysin erillään sisällöstä.",
+ "IndependentLayoutDescription2": "Tämä tarkoittaa, että voit vapaasti suunnitella projektisi muulla sisältörakenteella kuin Bootstrapilla, jos haluat.",
+ "MostUsedLibraries": "Useimmat käytetyt LeptonX:ään integroidut kirjastot",
+ "MostUsedLibrariesDescription1": "LeptonX sisältää eniten käytetyt kirjastosi. Sen avulla voit käyttää vaivattomasti kirjastoja, kuten ApexCharts, DataTables, DropZone, FullCalender, JSTree, Select2, Toast.",
+ "MostUsedLibrariesDescription2": "LeptonX tukee myös MVC Angular- ja Blazor-spesifisiä kirjastoja.",
+ "CreateAndCustomize": "Luo ja mukauta tarvitsemasi sivut sekunneissa LeptonX mukautetuilla sivuilla",
+ "CreateAndCustomizeDescription": "Käyttämällä LeptonX-teemaa sinulla on myös pääsy monille valmiiksi tehdyille html-sivuille. Näitä ovat monet sivut, kuten kirjautumissivu, blogi, UKK, tilausluettelo, lasku, hinnoittelu, tiedostojen hallinta.",
+ "LeptonThemeForAdmin": "Lepton-teema järjestelmänvalvojan hallintapaneelillesi",
+ "LeptonThemeForAdminDescription": "Lepton-teema on edelleen saatavilla ja sitä ylläpidetään. Jos haluat siirtyä LeptonX-teemaan Lepton-teeman käyttäjänä, voit katsoa ohjeista ohjeita.",
+ "LeptonCompatibleWith": "Lepton-teema on yhteensopiva",
+ "BlackFridayDiscount": "Black Friday -alennus",
+ "UpgradePaymentInfoSection_DeveloperPrice": "{0} {1} lisäkehittäjälle",
+ "Upgrade": "Päivitä",
+ "Renewal": "Uusiminen",
+ "UpgradePaymentInfoSection_LicensePrice": "{0} lisenssi",
+ "UpgradePaymentInfoSection_LicenseRenewalPrice": "Lisenssin uusiminen",
+ "Total": "Kaikki yhteensä",
+ "SupportPolicyFaqTitle": "Mikä on tukipolitiikkanne?",
+ "SupportPolicyFaqExplanation": "Tuemme vain aktiivista ja edellistä pääversiota. Emme takaa korjausjulkaisua 3. ja vanhemmille pääversioille. Jos aktiivinen versio on esimerkiksi 7.0.0, julkaisemme korjaustiedostoja sekä versioista 6.x.x että 7.x.x. Lisäksi tarjoamme tukea vain ABP Frameworkiin ja ABP Commercialiin liittyville ongelmille. Tämä tarkoittaa, että tukea ei anneta kolmannen osapuolen sovelluksille, pilvipalveluille ja muille ABP-tuotteiden käyttämille oheiskirjastoille. Käytämme kaupallisesti kohtuullisia keinoja tarjotaksemme asiakkaillemme teknistä tukea \"Volosoft Bilisim A.S\"-yhtiön virallisina työaikoina. Toisaalta emme sitoudu palvelutasosopimuksen (SLA) mukaiseen vastausaikaan, mutta pyrimme vastaamaan teknisiin ongelmiin mahdollisimman nopeasti virallisten työaikojemme puitteissa. Ellei asiakkaan kanssa ole tehty erityistä sopimusta, tarjoamme tukea vain osoitteessa https://support.abp.io. Meillä on myös yksityinen sähköpostituki, joka on vain Enterprise-lisenssin haltijoiden käytettävissä.",
+ "TotalDevelopers": "Yhteensä {0} kehittäjää",
+ "CustomPurchaseExplanation": "Räätälöity sinun tarpeidesi mukaan",
+ "WhereDidYouHearAboutUs": "Mistä kuulit meistä?",
+ "Twitter": "Twitter",
+ "Facebook": "Facebook",
+ "Youtube": "YouTube",
+ "Google": "Google",
+ "Github": "GitHub",
+ "Friend": " Ystävältä",
+ "Other": "Muu",
+ "WhereDidYouHearAboutUs_explain": "Täsmennä ...",
+ "DeletingMemberWarningMessage": "\"{0}\" poistetaan kehittäjäluettelosta. Jos haluat, voit määrittää tämän tyhjän paikan myöhemmin toiselle kehittäjälle.",
+ "AdditionalInfo": "Jos kehittäjäistuimet ylittävät vaatimukset, voit vähentää niitä. Voit poistaa joitain kehittäjäpaikkojasi lähettämällä sähköpostia osoitteeseen info@abp.io. Käyttämättömien kehittäjäpaikkojen tyhjentäminen vähentää lisenssin uusimiskustannuksia. Voit halutessasi ostaa uudelleen lisää kehittäjäpaikkoja aktiivisen lisenssijaksosi aikana. Huomaa, että koska tässä lisenssipaketissa on {0} kehittäjää, et voi vähentää tätä määrää.",
+ "LinkExpiredErrorMessage": "Linkki, jota yrität käyttää, on vanhentunut.",
+ "ExpirationDate": "Viimeinen käyttöpäivä",
+ "SpringCampaignDiscount": "Kevään kampanja-alennus",
+ "WhyUseAbpIoPlatform": "Miksi minun pitäisi käyttää ABP.IO-alustaa sen sijaan, että luon uuden ratkaisun tyhjästä?",
+ "WhyUseAbpIoPlatformFaqExplanation": "Katso kyseisestä asiakirjasta yksityiskohtainen selitys siitä, miksi ABP.IO Platformin käyttäminen on huomattavasti edullisempaa kuin kaiken tekeminen itse."
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fr.json
index 786485ae48..0588062ad8 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fr.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fr.json
@@ -190,7 +190,7 @@
"ChangingDevelopers": "Puis-je changer les développeurs enregistrés de mon organisation à l'avenir?",
"ChangingDevelopersExplanation": "En plus d'ajouter de nouveaux développeurs à votre licence, vous pouvez également modifier les développeurs existants (vous pouvez supprimer un développeur et en ajouter un nouveau sur le même siège) sans aucun coût supplémentaire.",
"WhenShouldIRenewMyLicense": "Quand dois-je renouveler ma licence?",
- "WhenShouldIRenewMyLicenseExplanation": "Si vous renouvelez votre licence dans 1 mois après l'expiration de votre licence, les remises suivantes seront appliquées : licence d'équipe {0} ; licence commerciale {1} ; licence d'entreprise {2}. Toutefois, si vous renouveler votre licence après 1 mois depuis la date d'expiration de votre licence, le prix de renouvellement sera le même que le prix d'achat de la licence et il n'y aura pas de remise sur votre renouvellement.",
+ "WhenShouldIRenewMyLicenseExplanation": "Si vous renouvelez votre licence dans {3} jours après l'expiration de votre licence, les remises suivantes seront appliquées : licence d'équipe {0} ; licence commerciale {1} ; licence d'entreprise {2}. Toutefois, si vous renouveler votre licence après {3} jours depuis la date d'expiration de votre licence, le prix de renouvellement sera le même que le prix d'achat de la licence et il n'y aura pas de remise sur votre renouvellement.",
"TrialPlan": "Avez-vous un plan d'essai?",
"DoYouAcceptBankWireTransfer": "Acceptez-vous les virements bancaires?",
"DoYouAcceptBankWireTransferExplanation": "Oui, nous acceptons les virements bancaires. Après avoir envoyé les frais de licence par virement bancaire, envoyez-nous par e-mail à accounting@abp.io votre reçu et le type de licence demandé. Nos coordonnées bancaires internationales :",
@@ -383,6 +383,24 @@
"RenewLicenseEarly": "Si je renouvelle ma licence plus tôt, obtiendrai-je l'année complète ?",
"RenewLicenseEarylExplanation": "Lorsque vous renouvelez votre licence avant la date d'expiration de votre licence, 1 an sera ajouté à la date d'expiration de votre licence. Par exemple, si votre licence expire le {0}-06-06 et que vous la renouvelez le {0}-01-01, la nouvelle date d'expiration de votre licence sera le {1}-06-06.",
"discountForYears": "{0} % de remise pendentif {1} an(s)",
- "BlackFridayDiscount": "Remise Black Friday"
+ "BlackFridayDiscount": "Remise Black Friday",
+ "OnboardingTrainingFaqTitle": "Avez-vous une formation d'accueil ABP ?",
+ "OnboardingTrainingFaqExplanation": "Oui, nous avons des services de formation ABP pour vous aider à démarrer rapidement votre projet ABP. Vous en apprendrez plus sur l'ABP auprès d'un membre de l'équipe principale d'ABP et vous acquerrez les compétences nécessaires pour commencer votre projet ABP. Dans la formation d'intégration, nous vous expliquerons comment configurer votre environnement de développement, installer les outils requis, créer une page CRUD entièrement fonctionnelle. La formation sera en direct et l'application Zoom sera utilisée, et nous sommes ouverts à l'utilisation d'autres plateformes de réunion en ligne. La langue de la formation sera l'anglais. Vous pouvez également poser vos questions sur l'ABP pendant les séances. Une heure et une date convenables seront prévues pour les deux parties. Pour obtenir plus d'informations, contactez-nous à info@abp.io.",
+ "SupportPolicyFaqTitle": "Quelle est votre politique de soutien ?",
+ "SupportPolicyFaqExplanation": "Nous ne prenons en charge que la version active et la version majeure précédente. Nous ne garantissons pas la publication d'un correctif pour la troisième version majeure et la version majeure antérieure. Par exemple, si la version active est 7.0.0, nous publierons des correctifs pour les versions 6.x.x et 7.x.x. En outre, nous n'assurons le support que pour les problèmes liés à ABP Framework et ABP Commercial. Cela signifie qu'aucun support n'est fourni pour les applications tierces, les services cloud et les autres bibliothèques périphériques utilisées par les produits ABP. Nous ferons des efforts commercialement raisonnables pour fournir à nos clients une assistance technique pendant les heures de bureau officielles de \"Volosoft Bilisim A.S\". D'autre part, nous ne nous engageons pas à respecter un accord de niveau de service (SLA) sur le temps de réponse, mais nous essaierons de répondre aux problèmes techniques aussi rapidement que possible pendant nos heures de travail officielles. Sauf accord spécial avec le client, nous ne fournissons une assistance qu'à l'adresse https://support.abp.io. Nous disposons également d'une assistance privée par courrier électronique, qui n'est accessible qu'aux détenteurs d'une licence d'entreprise.",
+ "DowngradeLicensePlan": "Puis-je passer à un plan de licence inférieur à l'avenir ?",
+ "DowngradeLicensePlanExplanation": "Vous ne pouvez pas rétrograder votre plan de licence existant. Mais vous pouvez acheter un nouveau plan de licence inférieur et continuer votre développement sur la nouvelle licence. Après avoir acheté une licence inférieure, il vous suffit de vous connecter à votre nouveau plan de licence via la commande CLI d'ABP : ` abp login -o `.",
+ "LicenseTransfer": "Une licence peut-elle être transférée d'un développeur à un autre ?",
+ "LicenseTransferExplanation": "Oui ! Lorsque vous achetez une licence, vous en devenez le détenteur et vous avez donc accès à la page de gestion de l'organisation. Une organisation a des rôles de propriétaire et de développeur. Les propriétaires peuvent gérer les sièges des développeurs et leur assigner des développeurs. Chaque développeur assigné se connectera au système via la commande ABP CLI et disposera d'autorisations de développement et de support.",
+ "WhatHappensWhenLicenseEnds": "Que se passe-t-il à la fin de la période de validité de ma licence ?",
+ "WhatHappensWhenLicenseEndsExplanation1": "La licence commerciale ABP est une licence perpétuelle. Après l'expiration de votre licence, vous pouvez continuer à développer votre projet. Vous n'êtes pas obligé de renouveler votre licence. Votre licence est livrée avec un plan de mise à jour et d'assistance d'un an. Pour continuer à bénéficier des nouvelles fonctionnalités, des améliorations de performance, des corrections de bogues, de l'assistance et continuer à utiliser ABP Suite, vous devez renouveler votre licence. Lorsque votre licence expire ;",
+ "WhatHappensWhenLicenseEndsExplanation2": "Vous ne pouvez pas créer de nouvelles solutions à l'aide d'ABP Commercial, mais vous pouvez continuer à développer vos applications existantes pour toujours.",
+ "WhatHappensWhenLicenseEndsExplanation3": "Vous pourrez obtenir des mises à jour pour les modules et thèmes de votre version MINOR (à l'exception des versions RC ou Preview). Par exemple : si vous utilisez la version 3.2.0 d'un module, vous pouvez toujours obtenir des mises à jour pour la version 3.2.x (v3.2.1, v3.2.5... etc.) de ce module. Mais vous ne pouvez pas obtenir de mises à jour pour la prochaine version majeure ou mineure (comme v3.3.0, v3.3.3, 4.x.x.. etc.). Par exemple, lorsque votre licence a expiré, la dernière version était la v4.4.3, et plus tard, la version 4.4.4 et la version 4.5.0 ont été publiées, vous pourrez accéder à la v4.4.X mais vous ne pourrez pas accéder à la v4.5.X.",
+ "WhatHappensWhenLicenseEndsExplanation4": "Vous ne pouvez pas installer les nouveaux modules et thèmes ajoutés à la plateforme ABP Commercial après l'expiration de votre licence.",
+ "WhatHappensWhenLicenseEndsExplanation5": "Vous ne pouvez pas utiliser la suite ABP.",
+ "WhatHappensWhenLicenseEndsExplanation6": "Vous ne pouvez plus bénéficier du support premium.",
+ "WhatHappensWhenLicenseEndsExplanation7": "Vous pouvez prolonger (renouveler) votre licence si vous souhaitez continuer à bénéficier de ces avantages. Si vous prolongez votre licence dans {3} jours après l'expiration de votre licence, les remises suivantes seront appliquées : Licence d'équipe {0} ; Licence commerciale {1} ; Licence Entreprise {2}.",
+ "BlazoriseLicense": "Faut-il acheter une licence Blazorise ?",
+ "BlazoriseLicenseExplanation": "Nous avons conclu un accord entre Volosoft et Megabit, dans le cadre duquel la licence Blazorise est intégrée aux produits ABP Commercial, de sorte que nos clients n'ont pas besoin d'acheter une licence Blazorise supplémentaire."
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hi.json
index 1d420c4202..2d16ac121d 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hi.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hi.json
@@ -190,7 +190,7 @@
"ChangingDevelopers": "क्या मैं भविष्य में अपने संगठन के पंजीकृत डेवलपर्स को बदल सकता हूं?",
"ChangingDevelopersExplanation": "अपने लाइसेंस में नए डेवलपर्स को जोड़ने के अलावा, आप मौजूदा डेवलपर्स को भी बदल सकते हैं (आप एक डेवलपर को हटा सकते हैं और एक ही सीट पर एक नया जोड़ सकते हैं) बिना किसी अतिरिक्त लागत के।",
"WhenShouldIRenewMyLicense": "मुझे अपना लाइसेंस कब नवीनीकृत करना चाहिए?",
- "WhenShouldIRenewMyLicenseExplanation": "यदि आप अपने लाइसेंस की समय सीमा समाप्त होने के बाद 1 महीने के भीतर अपना लाइसेंस नवीनीकृत करते हैं, तो निम्नलिखित छूटें लागू होंगी: टीम लाइसेंस {0} ; व्यवसाय लाइसेंस {1} ; एंटरप्राइज़ लाइसेंस {2} . यदि आप अपने लाइसेंस की समाप्ति तिथि के बाद 1 महीने अपने लाइसेंस का नवीनीकरण करते हैं, तो नवीनीकरण मूल्य लाइसेंस खरीद मूल्य के समान होगा और आपके नवीनीकरण पर कोई छूट नहीं होगी।",
+ "WhenShouldIRenewMyLicenseExplanation": "यदि आप अपने लाइसेंस की समय सीमा समाप्त होने के बाद {3} दिन के भीतर अपना लाइसेंस नवीनीकृत करते हैं, तो निम्नलिखित छूटें लागू होंगी: टीम लाइसेंस {0} ; व्यवसाय लाइसेंस {1} ; एंटरप्राइज़ लाइसेंस {2} . यदि आप अपने लाइसेंस की समाप्ति तिथि के बाद {3} दिन अपने लाइसेंस का नवीनीकरण करते हैं, तो नवीनीकरण मूल्य लाइसेंस खरीद मूल्य के समान होगा और आपके नवीनीकरण पर कोई छूट नहीं होगी।",
"TrialPlan": "क्या आपके पास एक परीक्षण योजना है?",
"DoYouAcceptBankWireTransfer": "क्या आप बैंक वायर ट्रांसफर स्वीकार करते हैं?",
"DoYouAcceptBankWireTransferExplanation": "हां, हम बैंक वायर ट्रांसफर स्वीकार करते हैं। बैंक हस्तांतरण के माध्यम से लाइसेंस शुल्क भेजने के बाद, हमें अपनी रसीद और अनुरोधित लाइसेंस के प्रकार accounting@abp.io पर ईमेल करें। हमारे अंतरराष्ट्रीय बैंक खाते की जानकारी:",
@@ -381,5 +381,25 @@
"CommercialNewsletterConfirmationMessage": "मैं नियम और शर्तों और गोपनीयता नीति से सहमत हूं .",
"discountForYears": "{1}वर्ष(वर्षों) के लिए {0}% छूट",
"BlackFridayDiscount": "ब्लैक फ्राइडे छूट",
+ "OnboardingTrainingFaqTitle": "क्या आपके पास एबीपी ऑनबोर्डिंग प्रशिक्षण है?",
+ "OnboardingTrainingFaqExplanation": "हां, आपके एबीपी प्रोजेक्ट को तेजी से शुरू करने में आपकी मदद करने के लिए हमारे पास एबीपी प्रशिक्षण सेवाएं हैं। आप ABP कोर टीम के सदस्य से ABP के बारे में जानेंगे और आपको अपना ABP प्रोजेक्ट शुरू करने का कौशल प्राप्त होगा। ऑनबोर्डिंग प्रशिक्षण में, हम समझाएंगे कि अपने विकास के माहौल को कैसे स्थापित करें, आवश्यक उपकरण कैसे स्थापित करें, पूरी तरह कार्यात्मक CRUD पेज कैसे बनाएं। प्रशिक्षण लाइव होगा और जूम एप्लिकेशन का उपयोग किया जाएगा, और हम अन्य ऑनलाइन मीटिंग प्लेटफॉर्म का उपयोग करने के लिए तैयार हैं। प्रशिक्षण की भाषा अंग्रेजी होगी। आप सत्रों के दौरान ABP के बारे में अपने प्रश्न भी पूछ सकते हैं। दोनों पक्षों के लिए एक सुविधाजनक समय और तारीख की योजना बनाई जाएगी। अधिक जानकारी प्राप्त करने के लिए, info@abp.io पर हमसे संपर्क करें।",
+ "SupportPolicyFaqTitle": "आपकी समर्थन नीति क्या है?",
+ "SupportPolicyFaqExplanation": "हम केवल सक्रिय और पिछले प्रमुख संस्करण का समर्थन करते हैं। हम तीसरे और पुराने प्रमुख संस्करणों के लिए पैच रिलीज़ की गारंटी नहीं देते हैं। उदाहरण के लिए, यदि सक्रिय संस्करण 7.0.0 है, तो हम 6.x.x और 7.x.x दोनों के लिए पैच रिलीज़ जारी करेंगे। इसके अलावा, हम केवल ABP फ्रेमवर्क और ABP कमर्शियल संबंधित मुद्दों के लिए समर्थन प्रदान करते हैं। इसका मतलब है कि तीसरे पक्ष के अनुप्रयोगों, क्लाउड सेवाओं और एबीपी उत्पादों द्वारा उपयोग किए जाने वाले अन्य परिधीय पुस्तकालयों के लिए कोई समर्थन नहीं दिया गया है। हम अपने ग्राहकों को \"Volosoft Bilisim A.S\" के आधिकारिक व्यावसायिक घंटों के दौरान तकनीकी सहायता प्रदान करने के लिए व्यावसायिक रूप से उचित प्रयासों का उपयोग करेंगे। दूसरी ओर, हम सर्विस-लेवल एग्रीमेंट (SLA) प्रतिक्रिया समय के लिए प्रतिबद्ध नहीं हैं, लेकिन हम अपने आधिकारिक कामकाजी घंटों के भीतर जितनी जल्दी हो सके तकनीकी मुद्दों पर प्रतिक्रिया देने का प्रयास करेंगे। जब तक ग्राहक के साथ कोई विशेष समझौता नहीं किया जाता है, हम केवल https://support.abp.io पर सहायता प्रदान करते हैं। हमारे पास निजी ईमेल समर्थन भी है, जो केवल एंटरप्राइज़ लाइसेंस धारकों के लिए उपलब्ध है।",
+ "DowngradeLicensePlan": "क्या मैं भविष्य में कम लाइसेंस योजना में डाउनग्रेड कर सकता हूँ?",
+ "DowngradeLicensePlanExplanation": "आप अपनी मौजूदा लाइसेंस योजना को डाउनग्रेड नहीं कर सकते। लेकिन आप नया लोअर लाइसेंस प्लान खरीद सकते हैं और नए लाइसेंस पर अपना विकास जारी रख सकते हैं। आपके द्वारा कम लाइसेंस खरीदने के बाद, आपको एबीपी सीएलआई कमांड के माध्यम से अपनी नई लाइसेंस योजना में प्रवेश करने की आवश्यकता है: `एबीपी लॉगिन <उपयोगकर्ता नाम> -ओ <संगठन>`।",
+ "LicenseTransfer": "क्या लाइसेंस एक डेवलपर से दूसरे डेवलपर को ट्रांसफर किया जा सकता है?",
+ "LicenseTransferExplanation": "हाँ! जब आप लाइसेंस खरीदते हैं, तो आप लाइसेंस धारक बन जाते हैं, इसलिए आपके पास संगठन प्रबंधन पृष्ठ तक पहुंच होगी। एक संगठन में मालिक और डेवलपर की भूमिकाएँ होती हैं। मालिक डेवलपर सीटों का प्रबंधन कर सकते हैं और डेवलपर्स को असाइन कर सकते हैं। प्रत्येक असाइन किया गया डेवलपर सिस्टम में ABP CLI कमांड के माध्यम से लॉगिन करेगा और उसके पास विकास और समर्थन अनुमतियाँ होंगी।",
+ "RenewLicenseEarly": "अगर मैं अपना लाइसेंस जल्दी रिन्यू करता हूं, तो क्या मुझे पूरा साल मिलेगा?",
+ "RenewLicenseEarylExplanation": "जब आप अपनी लाइसेंस समाप्ति तिथि से पहले अपने लाइसेंस का नवीनीकरण करते हैं, तो आपकी लाइसेंस समाप्ति तिथि में 1 वर्ष जोड़ दिया जाएगा। उदाहरण के लिए, यदि आपका लाइसेंस {0}-06-06 को समाप्त हो रहा है और आप इसे {0}-01-01 को नवीनीकृत करते हैं, तो आपकी नई लाइसेंस समाप्ति तिथि {1}-06-06 होगी।",
+ "WhatHappensWhenLicenseEnds": "मेरी लाइसेंस अवधि समाप्त होने पर क्या होता है?",
+ "WhatHappensWhenLicenseEndsExplanation1": "ABP वाणिज्यिक लाइसेंस एक स्थायी लाइसेंस है। आपका लाइसेंस समाप्त होने के बाद, आप अपना प्रोजेक्ट विकसित करना जारी रख सकते हैं। और आप अपने लाइसेंस को नवीनीकृत करने के लिए बाध्य नहीं हैं। आपका लाइसेंस एक साल के अपडेट और आउट ऑफ बॉक्स सपोर्ट प्लान के साथ आता है। नई सुविधाएँ, प्रदर्शन संवर्द्धन, बग फिक्स, समर्थन और ABP सूट का उपयोग जारी रखने के लिए, आपको अपने लाइसेंस को नवीनीकृत करने की आवश्यकता है। जब आपका लाइसेंस समाप्त हो जाता है;",
+ "WhatHappensWhenLicenseEndsExplanation2": "आप ABP कमर्शियल का उपयोग करके नए समाधान नहीं बना सकते, लेकिन आप अपने मौजूदा एप्लिकेशन को हमेशा के लिए विकसित करना जारी रख सकते हैं।",
+ "WhatHappensWhenLicenseEndsExplanation3": "आप अपने लघु संस्करण (आरसी या पूर्वावलोकन संस्करणों को छोड़कर) के भीतर मॉड्यूल और थीम के लिए अपडेट प्राप्त करने में सक्षम होंगे। उदाहरण के लिए: यदि आप किसी मॉड्यूल के v3.2.0 का उपयोग कर रहे हैं, तब भी आप उस मॉड्यूल के v3.2.x (v3.2.1, v3.2.5... आदि) के लिए अपडेट प्राप्त कर सकते हैं। लेकिन आप अगले प्रमुख या लघु संस्करण (जैसे v3.3.0, v3.3.3, 4.x.x.. आदि) के लिए अपडेट प्राप्त नहीं कर सकते। उदाहरण के लिए, जब आपका लाइसेंस समाप्त हो गया था, तो नवीनतम रिलीज़ v4.4.3 थी, और बाद में, इसने 4.4.4 संस्करण और 4.5.0 संस्करण दोनों को प्रकाशित किया, आप v4.4.X का उपयोग करने में सक्षम होंगे, लेकिन आप नहीं होंगे v4.5.X तक पहुंचें।",
+ "WhatHappensWhenLicenseEndsExplanation4": "आपका लाइसेंस समाप्त होने के बाद आप ABP कमर्शियल प्लेटफॉर्म में जोड़े गए नए मॉड्यूल और थीम इंस्टॉल नहीं कर सकते।",
+ "WhatHappensWhenLicenseEndsExplanation5": "आप एबीपी सूट का उपयोग नहीं कर सकते।",
+ "WhatHappensWhenLicenseEndsExplanation6": "अब आप प्रीमियम समर्थन प्राप्त नहीं कर सकते।",
+ "WhatHappensWhenLicenseEndsExplanation7": "यदि आप इन लाभों को प्राप्त करना जारी रखना चाहते हैं तो आप अपने लाइसेंस का विस्तार (नवीनीकरण) कर सकते हैं। यदि आप अपना लाइसेंस समाप्त होने के बाद {3} दिन के भीतर अपना लाइसेंस बढ़ाते हैं, तो निम्नलिखित छूट लागू होंगी: टीम लाइसेंस {0}; व्यवसाय लाइसेंस {1}; उद्यम लाइसेंस {2}।",
+ "BlazoriseLicense": "क्या हमें ब्लेज़ोराइज़ लाइसेंस खरीदने की ज़रूरत है?",
+ "BlazoriseLicenseExplanation": "हमारे पास Volosoft और Megabit के बीच एक समझौता है, इस समझौते के साथ Blazorise लाइसेंस को ABP वाणिज्यिक उत्पादों के साथ बंडल किया गया है, इसलिए हमारे ग्राहकों को एक अतिरिक्त Blazorise लाइसेंस खरीदने की आवश्यकता नहीं है।"
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hu.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hu.json
index b144988670..b481c362e6 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hu.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hu.json
@@ -160,7 +160,7 @@
"SearchQuestionPlaceholder": "Keressen a gyakran ismételt kérdések között",
"WhatIsTheABPCommercial": "Mi az az ABP Commercial?",
"WhatAreDifferencesThanAbpFramework": "Mi a különbség a nyílt forráskódú ABP Framework és az ABP Commercial között?",
- "AbpCommercialMetaTitle": "ABP Commercial – Teljes webfejlesztési platform: {0} | ABP Commercial",
+ "AbpCommercialMetaTitle": "{0} | ABP Commercial",
"AbpCommercialMetaDescription": "Az ABP Commercial a nyílt forráskódú ABP keretrendszerre épülő előre beépített alkalmazásmodulok, gyorsfejlesztő eszközök, UI témák és szolgáltatások készlete.",
"ABPCommercialExplanation": "Az ABP Commercial prémium modulok, eszközök, témák és szolgáltatások készlete a nyílt forráskódú ABP keretrendszerre épül fel. Az ABP Commercial-t ugyanaz a csapat fejleszti és támogatja az ABP keretrendszer mögött.",
"WhatAreDifferencesThanABPFrameworkExplanation": "
Az ABP-keretrendszer egy moduláris, tematikus, mikroszolgáltatásokkal kompatibilis alkalmazásfejlesztési keretrendszer az ASP.NET Core számára. Teljes architektúrát és erős infrastruktúrát biztosít ahhoz, hogy a saját üzleti kódjára összpontosítson, ahelyett, hogy megismételné magát minden új projektnél. A szoftverfejlesztés bevált gyakorlatain és a már ismert népszerű eszközökön alapul.
Az ABP keretrendszer teljesen ingyenes, nyílt forráskódú és közösségvezérelt. Ingyenes témát és néhány előre beépített modult is biztosít (pl. személyazonosság-kezelés és bérlőkezelés).
",
@@ -206,9 +206,9 @@
"discountForYears": "{0}% kedvezmény {1} évre",
"WhatHappensWhenLicenseEndsExplanation8": "Az Ön által generált ABP projekteket nem tároljuk a szervereinken. Ezért az Ön felelőssége a letöltött forráskód megőrzése. Amikor a licensze lejár, nincs mód a generált ABP projekt forráskódjának lekérésére.",
"WhenShouldIRenewMyLicense": "Mikor kell megújítanom a jogosítványomat?",
- "WhenShouldIRenewMyLicenseExplanation": "Ha a licenc lejártát követő 1 hónapon belül megújítja a licencet, a következő kedvezmények érvényesek: Csapatlicenc {0}; Üzleti engedély {1}; Vállalati licenc {2}. Ha azonban a licenc lejárati dátuma óta 1 hónap után megújítja a licencet, a megújítási ár megegyezik a licenc vásárlási árával, és nem jár kedvezmény a megújításra.",
+ "WhenShouldIRenewMyLicenseExplanation": "Ha a licenc lejártát követő {3} nap megújítja a licencet, a következő kedvezmények érvényesek: Csapatlicenc {0}; Üzleti engedély {1}; Vállalati licenc {2}. Ha azonban a licenc lejárati dátuma óta 1 hónap után megújítja a licencet, a megújítási ár megegyezik a licenc vásárlási árával, és nem jár kedvezmény a megújításra.",
"TrialPlan": "Van próbaterv?",
- "TrialPlanExplanation": "14 napos próbaidővel rendelkezik az ABP Commercial csapat licenszéhez. További információért látogasson el ide . Továbbá a Team licenszekre 30 napos pénz-visszafizetési garanciát biztosítunk. Az első 30 napban csak visszatérítést kérhet. A Business és Enterprise licenszek esetén 30 napon belül 60%-os visszatérítést biztosítunk. Ennek az az oka, hogy a Business és Enterprise licenszek tartalmazzák az összes modul és téma teljes forráskódját.",
+ "TrialPlanExplanation": "Nem, az ABP Commercialhoz nincs próbaverzió. Tekintse meg a közösségi kiadást, hogy megértse a kód minőségét és megközelítéseit. A Team licencre 30 napos pénz-visszafizetési garanciát is vállalunk, kérdés nélkül! Az első 30 napon belül kérheti a visszatérítést. Üzleti és vállalati licencek esetén 60% visszatérítést biztosítunk 30 napon belül. Ennek az az oka, hogy a Business és Enterprise licencek tartalmazzák az összes modul és téma teljes forráskódját.",
"DoYouAcceptBankWireTransfer": "Elfogadja a banki átutalást?",
"DoYouAcceptBankWireTransferExplanation": "Igen, elfogadunk banki átutalást. Miután banki átutalással elküldte a licencdíjat, küldje el nekünk e-mailben az accounting@abp.io címre nyugtát és a kért engedély típusát. Nemzetközi bankszámlánk információi:",
"HowToUpgrade": "Hogyan lehet frissíteni a meglévő alkalmazásokat, ha új verzió érhető el?",
@@ -623,7 +623,6 @@
"Faq_Page_Currency": "Valuta",
"Faq_Page_VatNumber": "Adószám",
"Faq_Page_OtherCurrenciesInfo": "A többi pénznemhez lásd az összes fiókot",
- "ModuleDetail_Page_Title": "Modul részletei – {0}",
"ProjectCreatedSuccess_Page_Title": "A projekt létrehozva",
"ProjectCreatedSuccess_Page_Description": "ABP projektje sikeresen létrejött!",
"Suite_Page_Title": "ABP Suite – CRUD oldalak létrehozása",
@@ -750,4 +749,4 @@
"TotalNetPrice": "Total Net Price",
"BlackFridayDiscount": "Black Friday Kedvezmény"
}
-}
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/is.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/is.json
index 7e5c856f4e..ff0c6cc417 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/is.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/is.json
@@ -190,7 +190,7 @@
"ChangingDevelopers": "Get ég breytt skráðum forriturum fyrirtækisins míns í framtíðinni?",
"ChangingDevelopersExplanation": "Til viðbótar við að bæta nýjum verktaka við leyfi þitt geturðu einnig breytt núverandi forriturum (þú getur fjarlægt verktaka og bætt nýjum við) án aukakostnaðar.",
"WhenShouldIRenewMyLicense": "Hvenær ætti ég að endurnýja leyfið mitt?",
- "WhenShouldIRenewMyLicenseExplanation": "Ef þú endurnýjar leyfið þitt innan eins mánaðar eftir að leyfið þitt rennur út verða eftirfarandi afslættir notaðir: Team Leyfi {0}% afsláttur, Business License {1}% afsláttur, Enterprise License {2}% afsláttur . Ef þú endurnýjar leyfið þitt 1 mánuði eftir að leyfið rennur út, verður endurnýjunarverðið það sama og kaupverð leyfisins og enginn afsláttur af endurnýjun þinni.",
+ "WhenShouldIRenewMyLicenseExplanation": "Ef þú endurnýjar leyfið þitt innan {3} dagar eftir að leyfið þitt rennur út verða eftirfarandi afslættir notaðir: Team Leyfi {0}% afsláttur, Business License {1}% afsláttur, Enterprise License {2}% afsláttur . Ef þú endurnýjar leyfið þitt {3} dagar eftir að leyfið rennur út, verður endurnýjunarverðið það sama og kaupverð leyfisins og enginn afsláttur af endurnýjun þinni.",
"TrialPlan": "Ertu með prufuáætlun?",
"DoYouAcceptBankWireTransfer": "Samþykki þið bankamillifærslu?",
"DoYouAcceptBankWireTransferExplanation": "Já, við tökum við bankamillifærslu. Eftir að hafa sent leyfisgjaldið með millifærslu skaltu senda okkur tölvupóst á accounting@abp.io kvittun þína og tegund leyfis sem óskað er eftir. Upplýsingar um alþjóðlega bankareikninginn okkar:",
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json
index 76637fee4b..ccd74fd005 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json
@@ -190,7 +190,7 @@
"ChangingDevelopers": "Posso cambiare gli sviluppatori registrati della mia organizzazione in futuro?",
"ChangingDevelopersExplanation": "Oltre ad aggiungere nuovi sviluppatori alla tua licenza, puoi anche Modifica gli sviluppatori esistenti (puoi rimuovere uno sviluppatore e aggiungerne uno nuovo alla stessa postazione) senza alcun costo aggiuntivo.",
"WhenShouldIRenewMyLicense": "Quando devo rinnovare la mia licenza?",
- "WhenShouldIRenewMyLicenseExplanation": "Se rinnovi la licenza entro 1 mese dopo la scadenza della licenza, verranno applicati i seguenti sconti: Licenza Team {0} ; Licenza Business {1} ; Licenza Enterprise {2} . Se rinnovi la licenza 1 mese dopo la data di scadenza della licenza, il prezzo di rinnovo sarà lo stesso del prezzo di acquisto della licenza e non ci saranno sconti sul rinnovo.",
+ "WhenShouldIRenewMyLicenseExplanation": "Se rinnovi la licenza entro {3} giorni dopo la scadenza della licenza, verranno applicati i seguenti sconti: Licenza Team {0} ; Licenza Business {1} ; Licenza Enterprise {2} . Se rinnovi la licenza {3} giorni dopo la data di scadenza della licenza, il prezzo di rinnovo sarà lo stesso del prezzo di acquisto della licenza e non ci saranno sconti sul rinnovo.",
"TrialPlan": "Hai un piano di prova?",
"DoYouAcceptBankWireTransfer": "Accettate bonifici bancari?",
"DoYouAcceptBankWireTransferExplanation": "Sì, accettiamo bonifico bancario. Dopo aver inviato il canone tramite bonifico bancario, inviaci un'e-mail a accounting@abp.io con la ricevuta e il tipo di licenza richiesta. Le nostre informazioni sul conto bancario internazionale:",
@@ -380,6 +380,26 @@
"TrialLicenseExpiredInfo": "Il periodo della tua licenza di prova è scaduto!",
"CommercialNewsletterConfirmationMessage": "Accetto i Termini e condizioni e la Informativa sulla privacy .",
"discountForYears": "{0}% di sconto per {1} anno/i",
- "BlackFridayDiscount": "Sconto Black Friday"
+ "BlackFridayDiscount": "Sconto Black Friday",
+ "OnboardingTrainingFaqTitle": "Avete un corso di formazione ABP per l'onboarding?",
+ "OnboardingTrainingFaqExplanation": "Sì, abbiamo i servizi di formazione ABP per aiutarti a far partire rapidamente il tuo progetto ABP. Imparerai a conoscere ABP da un membro del core team ABP e otterrai le competenze per iniziare il tuo progetto ABP. Nella formazione onboarding, spiegheremo come configurare il tuo ambiente di sviluppo, installare gli strumenti richiesti, creare una pagina CRUD completamente funzionante. La formazione sarà in diretta e verrà utilizzata l'applicazione Zoom e siamo aperti all'utilizzo di altre piattaforme di riunioni online. La lingua della formazione sarà l'inglese. Puoi anche porre le tue domande sull'ABP durante le sessioni. Verrà pianificata una data e un orario convenienti per entrambe le parti. Per ulteriori informazioni, contattaci all'indirizzo info@abp.io.",
+ "SupportPolicyFaqTitle": "Qual è la vostra politica di assistenza?",
+ "SupportPolicyFaqExplanation": "Supportiamo solo la versione principale attiva e quella precedente. Non garantiamo il rilascio di patch per la terza e la precedente versione principale. Ad esempio, se la versione attiva è la 7.0.0, rilasceremo patch sia per la 6.x.x che per la 7.x.x. Inoltre, forniamo supporto solo per i problemi relativi ad ABP Framework e ABP Commercial. Ciò significa che non viene fornito alcun supporto per le applicazioni di terze parti, i servizi cloud e altre librerie periferiche utilizzate dai prodotti ABP. Faremo tutto il possibile per fornire ai nostri clienti assistenza tecnica durante gli orari di lavoro ufficiali di Volosoft Bilisim A.S.. D'altra parte, non ci impegniamo a rispettare i tempi di risposta di un accordo sul livello di servizio (SLA), ma cercheremo di rispondere ai problemi tecnici il più rapidamente possibile entro i nostri orari di lavoro ufficiali. A meno che non venga stipulato un accordo speciale con il cliente, forniamo assistenza solo all'indirizzo https://support.abp.io. Disponiamo anche di un supporto privato via e-mail, disponibile solo per i titolari di licenza Enterprise.",
+ "DowngradeLicensePlan": "Posso passare a un piano di licenza inferiore in futuro?",
+ "DowngradeLicensePlanExplanation": "Non è possibile effettuare il downgrade del piano di licenza esistente. È però possibile acquistare un nuovo piano di licenza inferiore e continuare lo sviluppo con la nuova licenza. Dopo aver acquistato una licenza inferiore, è sufficiente effettuare il login al nuovo piano di licenza tramite il comando ABP CLI: abp login -o `.",
+ "LicenseTransfer": "È possibile trasferire una licenza da uno sviluppatore a un altro?",
+ "LicenseTransferExplanation": "Sì! Quando si acquista una licenza, si diventa il titolare della licenza e quindi si ha accesso alla pagina di gestione dell'organizzazione. Un'organizzazione ha ruoli di proprietario e di sviluppatore. I proprietari possono gestire i posti di sviluppatore e assegnare gli sviluppatori. Ogni sviluppatore assegnato accederà al sistema tramite il comando ABP CLI e avrà i permessi di sviluppo e di assistenza.",
+ "RenewLicenseEarly": "Se rinnovo la mia licenza in anticipo, avrò l'intero anno?",
+ "RenewLicenseEarylExplanation": "Quando si rinnova la licenza prima della data di scadenza, viene aggiunto 1 anno alla data di scadenza della licenza. Ad esempio, se la licenza scade il {0}-06-06 e viene rinnovata il {0}-01-01, la nuova data di scadenza della licenza sarà {1}-06-06.",
+ "WhatHappensWhenLicenseEnds": "Cosa succede quando termina il periodo di licenza?",
+ "WhatHappensWhenLicenseEndsExplanation1": "La licenza commerciale ABP è una licenza perpetua. Dopo la scadenza della licenza, potete continuare a sviluppare il vostro progetto. Non siete obbligati a rinnovare la licenza. La licenza viene fornita con un piano di aggiornamento e supporto di un anno. Per continuare a ottenere nuove funzionalità, miglioramenti delle prestazioni, correzioni di bug, supporto e continuare a utilizzare ABP Suite, è necessario rinnovare la licenza. Quando la licenza scade;",
+ "WhatHappensWhenLicenseEndsExplanation2": "Non è possibile creare nuove soluzioni utilizzando ABP Commercial, ma è possibile continuare a sviluppare le applicazioni esistenti per sempre.",
+ "WhatHappensWhenLicenseEndsExplanation3": "Sarà possibile ottenere gli aggiornamenti per i moduli e i temi della propria versione MINOR (ad eccezione delle versioni RC o Preview). Ad esempio, se si utilizza la versione 3.2.0 di un modulo, è ancora possibile ottenere gli aggiornamenti per la versione 3.2.x (v3.2.1, v3.2.5... ecc.) di quel modulo. Ma non è possibile ottenere aggiornamenti per la versione maggiore o minore successiva (come v3.3.0, v3.3.3, 4.x.x... ecc.). Ad esempio, quando la vostra licenza è scaduta, l'ultima release era la v4.4.3 e in seguito sono state pubblicate sia la versione 4.4.4 che la versione 4.5.0, sarete in grado di accedere alla v4.4.X ma non alla v4.5.X.",
+ "WhatHappensWhenLicenseEndsExplanation4": "Non è possibile installare nuovi moduli e temi aggiunti alla piattaforma ABP Commercial dopo la scadenza della licenza.",
+ "WhatHappensWhenLicenseEndsExplanation5": "Non è possibile utilizzare la suite ABP.",
+ "WhatHappensWhenLicenseEndsExplanation6": "Non è più possibile ottenere il supporto premium.",
+ "WhatHappensWhenLicenseEndsExplanation7": "Puoi estendere (rinnovare) la tua licenza se desideri continuare a ottenere questi vantaggi. Se estendi la licenza entro {3} giorni dalla scadenza della licenza, verranno applicati i seguenti sconti: Licenza Team {0}; Licenza commerciale {1}; Licenza aziendale {2}.",
+ "BlazoriseLicense": "Dobbiamo acquistare la licenza di Blazorise?",
+ "BlazoriseLicenseExplanation": "Abbiamo un accordo tra Volosoft e Megabit, con il quale la licenza di Blazorise viene fornita in bundle con i prodotti commerciali ABP, pertanto i nostri clienti non hanno bisogno di acquistare una licenza Blazorise aggiuntiva."
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/nl.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/nl.json
index b2c2caec7f..cc7a076848 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/nl.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/nl.json
@@ -190,7 +190,7 @@
"ChangingDevelopers": "Kan ik de geregistreerde ontwikkelaars van mijn organisatie in de toekomst wijzigen?",
"ChangingDevelopersExplanation": "Naast het toevoegen van nieuwe ontwikkelaars aan uw licentie, kunt u ook de bestaande ontwikkelaars wijzigen (u kunt een ontwikkelaar verwijderen en een nieuwe toevoegen aan dezelfde stoel) zonder extra kosten.",
"WhenShouldIRenewMyLicense": "Wanneer moet ik mijn licentie verlengen?",
- "WhenShouldIRenewMyLicenseExplanation": "Als u uw licentie verlengt binnen 1 maand nadat uw licentie is verlopen, worden de volgende kortingen toegepast: Teamlicentie {0}% korting, Zakelijke licentie {1}% korting, Enterprise-licentie {2}% korting . Als u uw licentie 1 maand na de vervaldatum van uw licentie verlengt, is de verlengingsprijs gelijk aan de aankoopprijs van de licentie en wordt er geen korting op uw verlenging gegeven.",
+ "WhenShouldIRenewMyLicenseExplanation": "Als u uw licentie verlengt binnen {3} dagen nadat uw licentie is verlopen, worden de volgende kortingen toegepast: Teamlicentie {0}% korting, Zakelijke licentie {1}% korting, Enterprise-licentie {2}% korting . Als u uw licentie {3} dagen na de vervaldatum van uw licentie verlengt, is de verlengingsprijs gelijk aan de aankoopprijs van de licentie en wordt er geen korting op uw verlenging gegeven.",
"TrialPlan": "Heb je een proefplan?",
"DoYouAcceptBankWireTransfer": "Accepteert u bankoverschrijvingen?",
"DoYouAcceptBankWireTransferExplanation": "Ja, we accepteren bankoverschrijvingen. Nadat u de licentievergoeding via bankoverschrijving heeft verzonden, stuurt u een e-mail naar accounting@abp.io met uw kwitantie en het type licentie dat u heeft aangevraagd. Onze internationale bankrekeninggegevens:",
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pl-PL.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pl-PL.json
index a640fe8f4f..4aa4f6616f 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pl-PL.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pl-PL.json
@@ -190,7 +190,7 @@
"ChangingDevelopers": "Czy mogę w przyszłości zmienić zarejestrowanych programistów mojej organizacji?",
"ChangingDevelopersExplanation": "Oprócz dodawania nowych programistów do swojej licencji możesz również zmieniać istniejących programistów (możesz usunąć programistę i dodać nowego do tego samego stanowiska) bez żadnych dodatkowych kosztów.",
"WhenShouldIRenewMyLicense": "Kiedy powinienem odnowić licencję?",
- "WhenShouldIRenewMyLicenseExplanation": "Jeśli odnowisz licencję w ciągu 1 miesiąca po wygaśnięciu licencji, zostaną zastosowane następujące rabaty: licencja zespołowa {0}% rabatu, licencja biznesowa {1}% rabatu, licencja Enterprise {2}% rabatu . Jeśli odnowisz licencję 1 miesiąc po dacie wygaśnięcia licencji, cena odnowienia będzie taka sama jak cena zakupu licencji i nie będzie rabatu na odnowienie.",
+ "WhenShouldIRenewMyLicenseExplanation": "Jeśli odnowisz licencję w ciągu {3} dni po wygaśnięciu licencji, zostaną zastosowane następujące rabaty: licencja zespołowa {0}% rabatu, licencja biznesowa {1}% rabatu, licencja Enterprise {2}% rabatu . Jeśli odnowisz licencję 1 miesiąc po dacie wygaśnięcia licencji, cena odnowienia będzie taka sama jak cena zakupu licencji i nie będzie rabatu na odnowienie.",
"TrialPlan": "Czy masz plan próbny?",
"DoYouAcceptBankWireTransfer": "Czy akceptujesz przelew bankowy?",
"DoYouAcceptBankWireTransferExplanation": "Tak, akceptujemy przelew bankowy. Po wysłaniu opłaty licencyjnej przelewem bankowym wyślij nam e-mail na adres accounting@abp.io z potwierdzeniem odbioru i rodzajem żądanej licencji. Informacje o naszych międzynarodowych kontach bankowych:",
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pt-BR.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pt-BR.json
index 4dd117e52a..4e06b40112 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pt-BR.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pt-BR.json
@@ -178,6 +178,7 @@
"ChangingLicenseType": "Posso atualizar meu tipo de licença mais tarde?",
"ChangingLicenseTypeExplanation": "Você pode atualizar para uma licença superior pagando a diferença dentro do período de sua licença ativa. Ao atualizar para um plano de licença superior, você obtém os benefícios do novo plano, mas a atualização da licença não altera a data de expiração da licença. Além disso, você também pode adicionar novas licenças de desenvolvedor à sua licença existente, consulte \"Quantos desenvolvedores podem trabalhar no comercial ABP?\"",
"LicenseExtendUpgradeDiff": "Qual é a diferença entre extensão de licença e atualização?",
+ "LicenseExtendUpgradeDiffExplanation": "Extensão: ao estender/renovar sua licença, você continuará a obter suporte premium e obter atualizações principais ou secundárias para os módulos e temas. Além disso, você poderá continuar criando novos projetos. E você ainda poderá utilizar o ABP Suite que agiliza seu desenvolvimento. Ao estender sua licença, 1 ano é adicionado à data de expiração da licença. Atualização: Ao atualizar sua licença, você será promovido para um plano de licença superior que lhe permitirá obter benefícios adicionais. Confira a tabela de comparação de licenças para ver as diferenças entre os planos de licença. Por outro lado, quando você atualizar, a data de expiração de sua licença não será alterada! Para estender a data de término de sua licença, você precisa estender sua licença.",
"LicenseRenewalCost": "Qual é o custo de renovação da licença após 1 ano?",
"LicenseRenewalCostExplanation": "O preço de renovação (extensão) da Licença de equipe padrão é $ {0}, a Licença comercial padrão é $ {1} e a Licença corporativa padrão é $ {2}. Se você já é um cliente, faça login em sua conta para verificar os preços de renovação disponíveis.",
"HowDoIRenewMyLicense": "Como eu renovo minha licença?",
@@ -190,7 +191,7 @@
"ChangingDevelopers": "Posso mudar os desenvolvedores registrados da minha organização no futuro?",
"ChangingDevelopersExplanation": "Além de adicionar novos desenvolvedores à sua licença, você também pode alterar os desenvolvedores existentes (você pode remover um desenvolvedor e adicionar um novo ao mesmo assento) sem nenhum custo adicional.",
"WhenShouldIRenewMyLicense": "Quando devo renovar minha licença?",
- "WhenShouldIRenewMyLicenseExplanation": "Se você renovar sua licença em 1 mês após a expiração da licença, os seguintes descontos serão aplicados: Licença de equipe {0} ; Licença de negócios {1} ; Licença empresarial {2} . Se você renovar sua licença 1 mês após a data de expiração de sua licença, o preço de renovação será o mesmo que o preço de compra da licença e não haverá desconto em sua renovação.",
+ "WhenShouldIRenewMyLicenseExplanation": "Se você renovar sua licença em {3} dias após a expiração da licença, os seguintes descontos serão aplicados: Licença de equipe {0} ; Licença de negócios {1} ; Licença empresarial {2} . Se você renovar sua licença {3} dias após a data de expiração de sua licença, o preço de renovação será o mesmo que o preço de compra da licença e não haverá desconto em sua renovação.",
"TrialPlan": "Você tem um plano experimental?",
"DoYouAcceptBankWireTransfer": "Você aceita transferência bancária?",
"DoYouAcceptBankWireTransferExplanation": "Sim, aceitamos transferência bancária. Após enviar a taxa de licença por transferência bancária, envie-nos um e-mail para accounting@abp.io com seu recibo e o tipo de licença solicitada. Nossas informações de conta bancária internacional:",
@@ -380,6 +381,27 @@
"TrialLicenseExpiredInfo": "Seu período de licença de teste expirou!",
"CommercialNewsletterConfirmationMessage": "Eu concordo com os Termos e Condições e a Política de Privacidade ",
"discountForYears": "{0}% de desconto por {1} ano(s)",
- "BlackFridayDiscount": "Desconto de Black Friday"
+ "BlackFridayDiscount": "Desconto de Black Friday",
+ "WhyUseAbpIoPlatform": "Por que devo usar a plataforma ABP.IO em vez de criar uma nova solução a partir do zero?",
+ "WhyUseAbpIoPlatformFaqExplanation": "Veja esse documento para uma explicação detalhada do porquê de usar a Plataforma ABP.IO tem uma vantagem significativa sobre fazer tudo você mesmo.",
+ "OnboardingTrainingFaqTitle": "Você tem treinamento de ABP a bordo?",
+ "SupportPolicyFaqTitle": "Qual é sua política de apoio?",
+ "SupportPolicyFaqExplanation": "Nós apoiamos apenas a versão ativa e a versão principal anterior. Não garantimos o lançamento de um patch para a 3ª e mais antigas versões principais. Por exemplo, se a versão ativa for a 7.0.0, lançaremos correções tanto para a 6.x.x como para a 7.x.x.x. Além disso, fornecemos suporte somente para questões relacionadas ao ABP Framework e ABP Commercial. Isso significa que nenhum suporte é dado para as aplicações de terceiros, serviços de nuvem e outras bibliotecas periféricas usadas pelos produtos ABP. Usaremos esforços comercialmente razoáveis para fornecer suporte técnico a nossos clientes durante o horário comercial oficial da \"Volosoft Bilisim A.S\". Por outro lado, não nos comprometemos com um acordo de nível de serviço (SLA) de tempo de resposta, mas tentaremos responder às questões técnicas o mais rápido possível dentro de nosso horário oficial de trabalho. A menos que um acordo especial seja feito com o cliente, fornecemos suporte somente em https://support.abp.io. Também temos suporte privado por e-mail, que só está disponível para os detentores de licenças empresariais.",
+ "DowngradeLicensePlan": "Posso baixar para um plano de licença mais baixo no futuro?",
+ "DowngradeLicensePlanExplanation": "Você não pode rebaixar seu plano de licença existente. Mas você pode adquirir um novo plano de licença inferior e continuar seu desenvolvimento com a nova licença. Após adquirir uma licença inferior, você só precisa fazer o login em seu novo plano de licença via comando ABP CLI: abp login -o `.",
+ "LicenseTransfer": "Uma licença pode ser transferida de um desenvolvedor para outro?",
+ "LicenseTransferExplanation": "Sim! Ao adquirir uma licença, você se torna o detentor da licença, portanto, você terá acesso à página de gerenciamento da organização. Uma organização tem funções de proprietário e desenvolvedor. Os proprietários podem gerenciar os cargos de desenvolvedor e designar desenvolvedores. Cada desenvolvedor designado fará login via comando ABP CLI no sistema e terá permissões de desenvolvimento e suporte.",
+ "BlazoriseLicense": "Precisamos comprar a licença Blazorise?",
+ "BlazoriseLicenseExplanation": "Temos um acordo entre a Volosoft e a Megabit, com este acordo a licença Blazorise é agregada aos produtos comerciais da ABP, portanto, nossos clientes não precisam comprar uma licença Blazorise extra.",
+ "RenewLicenseEarly": "Se eu renovar minha licença mais cedo, terei o ano todo",
+ "RenewLicenseEarylExplanation": "Quando você renovar sua licença antes da data de expiração, 1 ano será adicionado à data de expiração de sua licença. Por exemplo, se sua licença expirar em {0}-06-06 e você a renovar em {0}-01-01, sua nova data de expiração será {1}-06-06.",
+ "WhatHappensWhenLicenseEnds": "O que acontece quando meu período de licença termina?",
+ "WhatHappensWhenLicenseEndsExplanation1": "A licença comercial da ABP é uma licença perpétua. Após a expiração de sua licença, você pode continuar desenvolvendo seu projeto. E você não é obrigado a renovar sua licença. Sua licença vem com uma atualização de um ano e um plano de suporte fora da caixa. A fim de continuar a obter novos recursos, melhorias de desempenho, correção de bugs, suporte e continuar usando o ABP Suite, você precisa renovar sua licença. Quando sua licença expirar;",
+ "WhatHappensWhenLicenseEndsExplanation2": "Você não pode criar novas soluções usando o ABP Commercial, mas pode continuar desenvolvendo suas aplicações existentes para sempre.",
+ "WhatHappensWhenLicenseEndsExplanation3": "Você poderá obter atualizações para os módulos e temas dentro de sua versão MINOR (exceto as versões RC ou Preview). Por exemplo: se você estiver usando a v3.2.0 de um módulo, você ainda poderá obter atualizações para a v3.2.x (v3.2.1, v3.2.5... etc.) desse módulo. Mas você não pode obter atualizações para a próxima versão maior ou menor (como v3.3.0, v3.3.3, 4.x.x... etc.). Por exemplo, quando sua licença expirou, a última versão foi a v4.4.3, e mais tarde, publicou tanto a versão 4.4.4 quanto a 4.5.0, você poderia acessar a v4.4.X, mas não poderia acessar a v4.5.X.",
+ "WhatHappensWhenLicenseEndsExplanation4": "Você não pode instalar novos módulos e temas adicionados à plataforma comercial da ABP após o término de sua licença.",
+ "WhatHappensWhenLicenseEndsExplanation5": "Você não pode usar o ABP Suite",
+ "WhatHappensWhenLicenseEndsExplanation6": "Você não pode mais obter o apoio de premium.",
+ "WhatHappensWhenLicenseEndsExplanation7": "Você pode estender (renovar) sua licença se quiser continuar obtendo esses benefícios. Se você estender sua licença dentro de {3} dias após a expiração de sua licença, os seguintes descontos serão aplicados: Licença de equipe {0}; Licença Comercial {1}; Licença empresarial {2}."
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ro-RO.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ro-RO.json
index c1eeae7448..358bd87038 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ro-RO.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ro-RO.json
@@ -190,7 +190,7 @@
"ChangingDevelopers": "Pe viitor, pot schimba dezvoltatorii ataşaţi organizaţiei mele?",
"ChangingDevelopersExplanation": "În plus faţă de adăugarea de noi dezvoltatori la licenţa dumneavoastră, puteţi schimba şi dezvoltatorii existenţi(puteţi elimina un dezvoltator şi adăuga unul nou în locul lui) fără costuri suplimentare.",
"WhenShouldIRenewMyLicense": "Când ar trebui să-mi reînnoiesc licenţa?",
- "WhenShouldIRenewMyLicenseExplanation": "Dacă vă reînnoiți licența în termen de o lună de la expirarea licenței, se vor aplica următoarele reduceri: Licență de echipă {0}% reducere, Licență de afaceri {1}% reducere, Licență Enterprise {2}% reducere . Dacă vă reînnoiți licența la 1 lună după data de expirare a licenței, prețul de reînnoire va fi același cu prețul de achiziție a licenței și nu va exista nicio reducere la reînnoirea dvs.",
+ "WhenShouldIRenewMyLicenseExplanation": "Dacă vă reînnoiți licența în termen de {3} de zile de la expirarea licenței, se vor aplica următoarele reduceri: Licență de echipă {0}% reducere, Licență de afaceri {1}% reducere, Licență Enterprise {2}% reducere . Dacă vă reînnoiți licența la {3} de zile după data de expirare a licenței, prețul de reînnoire va fi același cu prețul de achiziție a licenței și nu va exista nicio reducere la reînnoirea dvs.",
"TrialPlan": "Aveţi un plan de încercare?",
"DoYouAcceptBankWireTransfer": "Acceptaţi transfer bancar?",
"DoYouAcceptBankWireTransferExplanation": "Da, acceptăm transfer bancar. După ce ați trimis taxa de licență prin transfer bancar, trimiteți-ne un e-mail la accounting@abp.io chitanța dvs. și tipul de licență solicitat. Informațiile noastre internaționale despre contul nostru bancar:",
@@ -381,4 +381,4 @@
"CommercialNewsletterConfirmationMessage": "Sunt de acord cu Termenii și condițiile și cu Politica de confidențialitate .",
"BlackFridayDiscount": "Black Friday Discount"
}
-}
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ru.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ru.json
index 7a0427083e..8c53bc9ea8 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ru.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ru.json
@@ -190,7 +190,7 @@
"ChangingDevelopers": "Могу ли я сменить зарегистрированных разработчиков моей организации в будущем?",
"ChangingDevelopersExplanation": "Помимо добавления новых разработчиков к вашей лицензии, вы также можете изменить существующих разработчиков (вы можете удалить разработчика и добавить нового на то же место) без каких-либо дополнительных затрат.",
"WhenShouldIRenewMyLicense": "Когда мне следует продлить лицензию?",
- "WhenShouldIRenewMyLicenseExplanation": "Если вы продлите лицензию в течение 1 месяца после истечения срока действия лицензии, будут применяться следующие скидки: групповая лицензия {0}% скидка, бизнес-лицензия {1}% скидка, корпоративная лицензия {2}% скидка . Если вы продлеваете лицензию через 1 месяц после даты истечения срока действия лицензии, цена продления будет такой же, как цена покупки лицензии, и при продлении скидки не будет.",
+ "WhenShouldIRenewMyLicenseExplanation": "Если вы продлите лицензию в течение {3} дней после истечения срока действия лицензии, будут применяться следующие скидки: групповая лицензия {0}% скидка, бизнес-лицензия {1}% скидка, корпоративная лицензия {2}% скидка . Если вы продлеваете лицензию {3} дней после даты истечения срока действия лицензии, цена продления будет такой же, как цена покупки лицензии, и при продлении скидки не будет.",
"TrialPlan": "У вас есть пробный план?",
"DoYouAcceptBankWireTransfer": "Вы принимаете банковский перевод?",
"DoYouAcceptBankWireTransferExplanation": "Да, мы принимаем банковский перевод. После отправки платы за лицензию банковским переводом отправьте нам электронное письмо по адресу accounting@abp.io, квитанцию и тип запрошенной лицензии. Информация о нашем международном банковском счете:",
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sk.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sk.json
index 0bb203a2ca..b0a6d6490e 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sk.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sk.json
@@ -190,7 +190,7 @@
"ChangingDevelopers": "Môžem v budúcnosti zmeniť registrovaných vývojárov svojej organizácie?",
"ChangingDevelopersExplanation": "Okrem pridávania nových vývojárov do licencie môžete tiež meniť existujúcich vývojárov (môžete odstrániť vývojára a pridať nového na to isté miesto) bez akýchkoľvek ďalších nákladov.",
"WhenShouldIRenewMyLicense": "Kedy si mám obnoviť licenciu?",
- "WhenShouldIRenewMyLicenseExplanation": "Ak si licenciu obnovíte do 1 mesiaca po vypršaní platnosti licencie, budú sa uplatňovať tieto zľavy: Tímová licencia {0} ; Obchodná licencia {1} ; Enterprise licencia {2} . Ak si licenciu obnovíte 1 mesiac po dátume skončenia platnosti licencie, cena za obnovenie bude rovnaká ako cena za nákup licencie a na obnovenie nebude poskytnutá žiadna zľava.",
+ "WhenShouldIRenewMyLicenseExplanation": "Ak si licenciu obnovíte do 30 dní po vypršaní platnosti licencie, budú sa uplatňovať tieto zľavy: Tímová licencia {0} ; Obchodná licencia {1} ; Enterprise licencia {2} . Ak si licenciu obnovíte 30 dní po dátume skončenia platnosti licencie, cena za obnovenie bude rovnaká ako cena za nákup licencie a na obnovenie nebude poskytnutá žiadna zľava.",
"TrialPlan": "Máte skúšobný plán?",
"DoYouAcceptBankWireTransfer": "Prijímate bankový prevod?",
"DoYouAcceptBankWireTransferExplanation": "Áno, akceptujeme bankový prevod. Po odoslaní licenčného poplatku bankovým prevodom nám pošlite e-mail na adresu accounting@abp.io svoje potvrdenie a požadovaný typ licencie. Informácie o našom medzinárodnom bankovom účte:",
@@ -380,6 +380,24 @@
"TrialLicenseExpiredInfo": "Vaše skúšobné licenčné obdobie vypršalo!",
"CommercialNewsletterConfirmationMessage": "I agree to the Terms & Conditions and Privacy Policy.",
"discountForYears": "{0} % odpusteného prívesku {1} an(ov)",
- "BlackFridayDiscount": "Black Friday zľava"
+ "BlackFridayDiscount": "Black Friday zľava",
+ "OnboardingTrainingFaqTitle": "Máte školenie ABP onboarding?",
+ "OnboardingTrainingFaqExplanation": "Áno, máme školiace služby ABP, ktoré vám pomôžu rýchlo spustiť váš projekt ABP. Dozviete sa o ABP od hlavného člena tímu ABP a získate zručnosti na začatie vášho projektu ABP. Na onboardingovom školení vám vysvetlíme, ako nastaviť vaše vývojové prostredie, nainštalovať požadované nástroje, vytvoriť plne funkčnú stránku CRUD. Školenie bude prebiehať naživo a bude sa používať aplikácia Zoom a sme otvorení využívaniu ďalších platforiem online stretnutí. Jazykom školenia bude angličtina. Svoje otázky o ABP môžete klásť aj počas sedení. Pre obe strany bude naplánovaný vhodný čas a dátum. Ak chcete získať ďalšie informácie, kontaktujte nás na adrese info@abp.io.",
+ "SupportPolicyFaqTitle": "Aká je vaša politika podpory?",
+ "SupportPolicyFaqExplanation": "Podporujeme iba aktívnu a predchádzajúcu hlavnú verziu. Nezaručujeme vydanie opravy pre 3. a staršiu hlavnú verziu. Napríklad, ak je aktívna verzia 7.0.0, vydáme opravné verzie pre 6.x.x aj 7.x.x. Okrem toho poskytujeme podporu len pre problémy súvisiace s ABP Framework a ABP Commercial. To znamená, že neposkytujeme podporu pre aplikácie tretích strán, cloudové služby a iné periférne knižnice používané produktmi ABP. Vynaložíme komerčne primerané úsilie, aby sme našim zákazníkom poskytli technickú podporu počas oficiálnej pracovnej doby spoločnosti \"Volosoft Bilisim A.S\". Na druhej strane sa nezaväzujeme k času odozvy podľa dohody o úrovni služieb (SLA), ale budeme sa snažiť reagovať na technické problémy čo najrýchlejšie v rámci našej oficiálnej pracovnej doby. Ak sa so zákazníkom nedohodnete inak, poskytujeme podporu len na adrese https://support.abp.io. Máme aj súkromnú e-mailovú podporu, ktorá je k dispozícii len držiteľom licencie Enterprise.",
+ "DowngradeLicensePlan": "Môžem v budúcnosti prejsť na nižší licenčný plán?",
+ "DowngradeLicensePlanExplanation": "Existujúci licenčný plán nemôžete znížiť. Môžete si však zakúpiť nový nižší licenčný plán a pokračovať vo vývoji s novou licenciou. Po zakúpení nižšej licencie sa stačí prihlásiť do nového licenčného plánu prostredníctvom príkazu ABP CLI: abp login -o `.",
+ "LicenseTransfer": "Môže sa licencia preniesť z jedného vývojára na druhého?",
+ "LicenseTransferExplanation": "Áno! Keď si zakúpite licenciu, stanete sa jej držiteľom, a teda budete mať prístup na stránku správy organizácie. Organizácia má roly vlastníka a vývojára. Vlastníci môžu spravovať miesta pre vývojárov a priraďovať vývojárov. Každý pridelený vývojár sa prihlási do systému prostredníctvom príkazu ABP CLI a bude mať oprávnenia na vývoj a podporu.",
+ "WhatHappensWhenLicenseEnds": "Čo sa stane po skončení licenčného obdobia?",
+ "WhatHappensWhenLicenseEndsExplanation1": "Komerčná licencia ABP je trvalá licencia. Po skončení platnosti licencie môžete pokračovať vo vývoji svojho projektu. A nie ste povinní licenciu obnovovať. Vaša licencia sa dodáva s ročným plánom aktualizácií a podpory už v balení. Ak chcete naďalej získavať nové funkcie, vylepšenia výkonu, opravy chýb, podporu a pokračovať v používaní balíka ABP Suite, musíte svoju licenciu obnoviť. Keď vaša licencia vyprší;",
+ "WhatHappensWhenLicenseEndsExplanation2": "Pomocou ABP Commercial nemôžete vytvárať nové riešenia, ale môžete navždy pokračovať vo vývoji existujúcich aplikácií.",
+ "WhatHappensWhenLicenseEndsExplanation3": "Budete môcť získať aktualizácie modulov a tém v rámci svojej verzie MINOR (okrem verzií RC alebo Preview). Napríklad: ak používate modul vo verzii 3.2.0, stále môžete získať aktualizácie pre verziu 3.2.x (v3.2.1, v3.2.5... atď.) tohto modulu. Nemôžete však získať aktualizácie pre ďalšiu hlavnú alebo vedľajšiu verziu (napríklad v3.3.0, v3.3.3, 4.x.x... atď.). Napríklad, keď vám vypršala licencia, posledná verzia bola v4.4.3 a neskôr bola zverejnená verzia 4.4.4 aj 4.5.0, budete mať prístup k verzii v4.4.X, ale nebudete mať prístup k verzii v4.5.X.",
+ "WhatHappensWhenLicenseEndsExplanation4": "Po skončení platnosti vašej licencie nemôžete inštalovať nové moduly a témy pridané do platformy ABP Commercial.",
+ "WhatHappensWhenLicenseEndsExplanation5": "Balík ABP Suite nemôžete používať.",
+ "WhatHappensWhenLicenseEndsExplanation6": "Už nemôžete získať prémiovú podporu.",
+ "WhatHappensWhenLicenseEndsExplanation7": "Ak chcete naďalej využívať tieto výhody, môžete si licenciu predĺžiť (obnoviť). Ak predĺžite svoju licenciu do 30 dní po vypršaní platnosti licencie, budú sa uplatňovať nasledujúce zľavy: Tímová licencia {0}; Obchodná licencia {1}; Podniková licencia {2}",
+ "BlazoriseLicense": "Musíme si kúpiť licenciu Blazorise?",
+ "BlazoriseLicenseExplanation": "Máme dohodu medzi spoločnosťami Volosoft a Megabit, na základe ktorej je licencia Blazorise pribalená k produktom ABP Commercial, preto si naši zákazníci nemusia kupovať ďalšiu licenciu Blazorise."
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sl.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sl.json
index 5abffa2189..85acb70552 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sl.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sl.json
@@ -190,7 +190,7 @@
"ChangingDevelopers": "Ali lahko v prihodnosti spremenim registrirane razvijalce svoje organizacije?",
"ChangingDevelopersExplanation": "Poleg dodajanja novih razvijalcev vaši licenci lahko spremenite tudi obstoječe razvijalce (lahko odstranite razvijalca in dodate novega na isto mesto) brez dodatnih stroškov.",
"WhenShouldIRenewMyLicense": "Kdaj naj podaljšam licenco?",
- "WhenShouldIRenewMyLicenseExplanation": "Če licenco podaljšate v 1 mesecu po poteku licence, bodo uporabljeni naslednji popusti: licenca za ekipo {0} % popusta, poslovna licenca {1} % popusta, licenca za podjetje {2} % popusta . Če podaljšate licenco 1 mesec po datumu poteka veljavnosti licence, bo cena podaljšanja enaka nakupni ceni licence in pri podaljšanju ne bo popusta.",
+ "WhenShouldIRenewMyLicenseExplanation": "Če licenco podaljšate v {3} dni po poteku licence, bodo uporabljeni naslednji popusti: licenca za ekipo {0} % popusta, poslovna licenca {1} % popusta, licenca za podjetje {2} % popusta . Če podaljšate licenco {3} dni po datumu poteka veljavnosti licence, bo cena podaljšanja enaka nakupni ceni licence in pri podaljšanju ne bo popusta.",
"TrialPlan": "Ali imate poskusni načrt?",
"DoYouAcceptBankWireTransfer": "Ali sprejemate bančno nakazilo?",
"DoYouAcceptBankWireTransferExplanation": "Da, sprejemamo bančno nakazilo. Ko pošljete licenčnino prek bančnega nakazila, nam pošljite e-pošto na accounting@abp.io vaše potrdilo o prejemu in vrsto zahtevane licence. Naši podatki o mednarodnem bančnem računu:",
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json
index 9a21d6de0a..c40b46f3c1 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json
@@ -193,7 +193,7 @@
"ChangingDevelopers": "Gelecekte kuruluşumun kayıtlı geliştiricilerini değiştirebilir miyim?",
"ChangingDevelopersExplanation": "Lisansınıza yeni geliştiriciler eklemenin yanı sıra mevcut geliştiricileri de herhangi bir ek ücret ödemeden değiştirebilirsiniz (bir geliştiriciyi kaldırıp aynı koltuğa yeni bir tane ekleyebilirsiniz).",
"WhenShouldIRenewMyLicense": "Ehliyetimi ne zaman yenilemeliyim?",
- "WhenShouldIRenewMyLicenseExplanation": "Lisansınızın süresi dolduktan sonra 1 ay içinde lisansınızı yenilerseniz, aşağıdaki indirimler uygulanacaktır: Takım Lisansı %{0} indirim, İşletme Lisansı %{1} indirim, Kurumsal Lisans %{2} indirim . Lisansınızın sona erme tarihinden 1 ay sonra lisansınızı yenilerseniz, yenileme fiyatı lisans satın alma fiyatı ile aynı olacak ve yenilemenizde indirim yapılmayacaktır.",
+ "WhenShouldIRenewMyLicenseExplanation": "Lisansınızın süresi dolduktan sonra {3} gün içinde lisansınızı yenilerseniz, aşağıdaki indirimler uygulanacaktır: Takım Lisansı %{0} indirim, İşletme Lisansı %{1} indirim, Kurumsal Lisans %{2} indirim . Lisansınızın sona erme tarihinden {3} gün sonra lisansınızı yenilerseniz, yenileme fiyatı lisans satın alma fiyatı ile aynı olacak ve yenilemenizde indirim yapılmayacaktır.",
"TrialPlan": "Deneme planınız var mı?",
"DoYouAcceptBankWireTransfer": "Banka havalesini kabul ediyor musunuz?",
"DoYouAcceptBankWireTransferExplanation": "Evet, banka havalesini kabul ediyoruz. Lisans ücretini banka havalesi yoluyla gönderdikten sonra, dekontunuzu ve talep edilen lisans türünü accounting@abp.io adresinden bize e-posta ile gönderin. Uluslararası banka hesap bilgilerimiz:",
@@ -391,18 +391,18 @@
"AddNewDeveloper": "Yeni geliştirici ekle",
"FirstNameField": "Ad",
"LastNameField": "Soyad",
- "AbpCommercialMetaTitle": "ABP Commercial - Eksiksiz Web Geliştirme Platformu : {0} | ABP Commercial",
+ "AbpCommercialMetaTitle": " {0} | ABP Commercial",
"AbpCommercialMetaDescription": "ABP Commercial, açık kaynaklı ABP çerçevesinin üzerine inşa edilmiş önceden oluşturulmuş uygulama modülleri, hızlı geliştirme araçları, kullanıcı arayüzü temaları ve hizmetlerinden oluşan bir settir.",
- "WhatHappensWhenLicenseEnds": "Lisans sürem sona erdiğinde ne olacak?",
+ "WhatHappensWhenLicenseEnds": "Lisans sürem sona erdiğinde ne olacak?",
"WhatHappensWhenLicenseEndsExplanation1": "ABP Ticari lisansı kalıcı bir lisanstır. Lisansınızın süresi dolduktan sonra projenizi geliştirmeye devam edebilirsiniz. Ve lisansınızı yenilemek zorunda değilsiniz. Lisansınız kutudan bir yıllık güncelleme ve destek planı ile birlikte gelir. Yeni özellikler, performans geliştirmeleri, hata düzeltmeleri, destek almaya devam etmek ve ABP Suite'i kullanmaya devam etmek için lisansınızı yenilemeniz gerekir. Lisansınızın süresi dolduğunda aşağıdaki avantajlardan yararlanamazsınız:",
"WhatHappensWhenLicenseEndsExplanation2": "ABP Ticari'yi kullanarak yeni çözümler oluşturamazsınız, ancak mevcut uygulamalarınızı sonsuza kadar geliştirmeye devam edebilirsiniz.",
"WhatHappensWhenLicenseEndsExplanation3": "MINOR sürümünüzdeki modüller ve temalar için güncellemeleri alabileceksiniz (RC veya Önizleme sürümleri hariç). Örneğin: bir modülün v3.2.0 sürümünü kullanıyorsanız, bu modülün v3.2.x (v3.2.1, v3.2.5... vb.) sürümleri için güncellemeleri almaya devam edebilirsiniz. Ancak bir sonraki büyük veya küçük sürüm için güncelleme alamazsınız (v3.3.0, v3.3.3, 4.x.x... gibi). Örneğin, lisansınızın süresi dolduğunda, en son sürüm v4.4.3 idi ve daha sonra hem 4.4.4 sürümünü hem de 4.5.0 sürümünü yayınladı, v4.4.X'e erişebilirsiniz, ancak v4.5.X'e erişemezsiniz.",
"WhatHappensWhenLicenseEndsExplanation4": "Lisansınız sona erdikten sonra ABP Ticari platformuna eklenen yeni modülleri ve temaları yükleyemezsiniz.",
"WhatHappensWhenLicenseEndsExplanation5": "ABP Suite'i kullanamazsınız.",
"WhatHappensWhenLicenseEndsExplanation6": "Artık premium desteği alamazsınız.",
- "WhatHappensWhenLicenseEndsExplanation7": "Bu avantajlardan yararlanmaya devam etmek istiyorsanız lisansınızı uzatabilirsiniz (yenileyebilirsiniz). Lisansınızın süresi dolduktan sonra 1 ay içinde lisansınızı uzatırsanız, aşağıdaki indirimler uygulanacaktır: Takım Lisansı {0} % indirim, İşletme Lisansı %{1} indirim, Kurumsal Lisans %{2} indirim.",
+ "WhatHappensWhenLicenseEndsExplanation7": "Bu avantajlardan yararlanmaya devam etmek istiyorsanız lisansınızı uzatabilirsiniz (yenileyebilirsiniz). Lisansınızın süresi dolduktan sonra {3} gün içinde lisansınızı uzatırsanız, aşağıdaki indirimler uygulanacaktır: Takım Lisansı {0} % indirim, İşletme Lisansı %{1} indirim, Kurumsal Lisans %{2} indirim.",
"WhatHappensWhenLicenseEndsExplanation8": "Oluşturduğunuz ABP projeleri sunucularımızda saklanmamaktadır. Bu nedenle indirdiğiniz kaynak kodunu saklamak sizin sorumluluğunuzdadır. Lisansınızın süresi dolduğunda, oluşturulan ABP proje kaynak kodunuzu almanın bir yolu yoktur.",
- "TrialPlanExplanation": "ABP Ticari takım lisansı için 14 günlük deneme süresi var. Daha fazla bilgi için burayı ziyaret edin. Ayrıca, Takım lisansları için 30 günlük para iade garantisi veriyoruz. Sadece ilk 30 gün içinde geri ödeme talebinde bulunabilirsiniz. İşletme ve Kurumsal lisansları için 30 gün içinde %60 geri ödeme sağlıyoruz. Bunun nedeni, İşletme ve Kurumsal lisanslarının tüm modüllerin ve temaların tam kaynak kodunu içermesidir.",
+ "TrialPlanExplanation": "Hayır, ABP Commercial için deneme sürümü yoktur. Kod kalitesini ve yaklaşımları anlamak için topluluk sürümünü kontrol edebilirsiniz. Ayrıca, Takım lisansları için 30 günlük para iade garantisi veriyoruz. Sadece ilk 30 gün içinde geri ödeme talebinde bulunabilirsiniz. İşletme ve Kurumsal lisansları için 30 gün içinde %60 geri ödeme sağlıyoruz. Bunun nedeni, İşletme ve Kurumsal lisanslarının tüm modüllerin ve temaların tam kaynak kodunu içermesidir.",
"ContactUsQuestions": "Herhangi bir sorunuz varsa bizimle iletişime geçin",
"ActivationRequirement": "Denemenizi başlatmanıza son bir adım kaldı. Bilgilerinizi kontrol ettikten sonra lisansınızı etkinleştireceğiz. Lisansınız etkinleştirildiğinde, {0} adresine bir e-posta göndereceğiz. Merak etmeyin bu süreç uzun sürmeyecek!",
"PurchaseNow": "Şimdi satın al",
@@ -419,7 +419,7 @@
"OpenSourceWebApplication": "Açık Kaynak Web Uygulaması",
"CompleteWebDevelopment": "Tam Web Geliştirme",
"ABPFrameworkDescription": "ABP Framework, yazılım geliştirme ve sözleşmelerin en iyi uygulamalarını takip ederek modern web uygulamaları oluşturmak için eksiksiz bir altyapıdır.",
- "CommunityDescription": "ABP Çerçevesi ile ilgili deneyimlerinizi paylaşın!",
+ "CommunityDescription": "ABP Çerçevesi ile ilgili deneyimlerinizi paylaşın!",
"GetStarted": "Başlayın",
"Views": "Görünümler",
"LatestPosts": "Son Gönderiler",
@@ -441,7 +441,7 @@
"ModularArchitectureExplanation": "Bu başlangıç şablonu, temiz ve sürdürülebilir bir kod tabanı oluşturmak için katmanlı, modüler ve DDD tabanlı bir çözüm mimarisi sağlar.",
"SeeDetails": "Ayrıntıları Gör",
"SeeDocumentation": "Belgelere göz atın",
- "Bs5Compatible": "Bootstrap 5 uyumlu profesyonel tema, yönetici web siteniz için mükemmel.",
+ "Bs5Compatible": "Bootstrap 5 uyumlu profesyonel tema, yönetici web siteniz için mükemmel.",
"LeptonXTheme": "LeptonX Tema",
"LeptonXDark": "LeptonX Koyu",
"LeptonXLight": "LeptonX Açık",
@@ -454,7 +454,7 @@
"EasilyInstallAndUpgrade": "Kolay kurulum ve yükseltme",
"SupportForum": "Destek Forumu",
"TrustedBy": "Güvenenler",
- "OurPricing": "Fiyatlandırmamız",
+ "OurPricing": "Fiyatlandırmamız",
"Plans": "Planlar",
"NameSurname": "Ad Soyad",
"Unspecified": "Belirtilmemiş",
@@ -465,7 +465,7 @@
"License": "Lisans",
"Development": "Geliştirme",
"Payment": "Ödeme",
- "WatchExplainerVideo": "Hadi Tanışalım! Açıklayıcı Videoyu İzleyin",
+ "WatchExplainerVideo": "Hadi Tanışalım! Açıklayıcı Videoyu İzleyin",
"LightDarkAndSemiDarkThemes": "Açık, koyu ve yarı koyu temalar",
"LeptonXThemeExplanation": "Lepton Teması, temanızı sistem ayarlarınıza göre değiştirebilir.",
"PRO": "PRO",
@@ -522,7 +522,7 @@
"AddBasket": "Sepete Ekle",
"SendTrainingRequest": "Eğitim Talebi Gönder",
"OnlyEnglishVersionOfThisDocumentIsTheRecentAndValid": "* Bu belgenin İngilizce versiyonu en güncel olanıdır ve herhangi bir anlaşmazlıkta İngilizce versiyonu geçerli olacaktır.",
- "Pricing_Page_Title": "Planlar ve Fiyatlandırma",
+ "Pricing_Page_Title": "Fiyatlandırma ve Planlar",
"Pricing_Page_Description": "İşletmenizin bugün ihtiyaç duyduğu özellikleri ve işlevselliği seçin. Bir ABP Ticari lisansı satın alın ve sınırsız proje oluşturun.",
"Pricing_Page_HurryUp": "Acele edin!",
"Pricing_Page_BuyLicense": "16 Ocak'a kadar 2021 fiyatlarıyla lisans satın alın!",
@@ -607,7 +607,7 @@
"Purchase_PricePerDeveloper": "{0} {1} geliştirici başına",
"Purchase_IncludedDeveloperInfo": "{0} {1} dahil.",
"Purchase_LicenseExtraDeveloperPurchaseMessage": "{0} lisansı {1} geliştirici(ler) içerir. Şimdi veya daha sonra ek geliştiriciler ekleyebilirsiniz.",
- "StartupTemplates_Page_Title": "Başlangıç Şablonları",
+ "StartupTemplates_Page_Title": "ABP Başlangıç Şablonları",
"StartupTemplates_Page_Description": "ABP Commercial, her düzeyde karmaşıklığa sahip çözümler oluşturmanıza olanak tanır. Önceden oluşturulmuş iki ana başlangıç çözümü sunar. Gereksinimlerinize yakın olanı seçebilir ve bunun üzerine kendi özel çözümünüzü oluşturabilirsiniz.",
"MicroserviceStartupSolutionForDotnet": ".NET için Mikro Hizmet Başlatma Çözümü",
"MonolithSolutionForDotnet": ".NET için Monolith (modüler) Çözüm",
@@ -632,12 +632,11 @@
"Faq_Page_Currency": "Para Birimi",
"Faq_Page_VatNumber": "Vergi Numarası",
"Faq_Page_OtherCurrenciesInfo": "Diğer para birimleri için tüm hesaplar bölümüne bakınız",
- "ModuleDetail_Page_Title": "Modül Detayı - {0}",
"ProjectCreatedSuccess_Page_Title": "Projeniz oluşturuldu",
"ProjectCreatedSuccess_Page_Description": "ABP projeniz başarıyla oluşturuldu!",
- "Suite_Page_Title": "ABP Suite - CRUD Sayfaları Oluşturun",
+ "Suite_Page_Title": "ABP Suite",
"Suite_Page_Description": "ABP Commercial, geliştirici verimliliğini artırmak için hızlı uygulama geliştirme araçları sağlar. ABP Suite, CRUD sayfalarını kolayca oluşturmanızı sağlar.",
- "Themes_Page_Title": "Modern ve İşlevsel Kullanıcı Arayüzü Temaları",
+ "Themes_Page_Title": "ABP Temaları",
"Themes_Page_Description": "ABP Commercial birden fazla profesyonel, modern kullanıcı arayüzü teması sunar. Kullanıcı arayüzünün neye benzediğini hızlıca görmek için ücretsiz bir demo oluşturun.",
"Tools_Page_Title": "Hızlı Uygulama Geliştirme Araçları",
"Tools_Page_Description": "ABP Commercial, geliştirici verimliliğini artırmak için hızlı uygulama geliştirme araçları sağlar. ABP Suite, CRUD sayfalarını kolayca oluşturmanızı sağlar.",
@@ -655,7 +654,7 @@
"UpgradePaymentInfoSection_LicenseUpgradeDescription": "Lisansınızı yükselterek, ek avantajlar elde etmenizi sağlayacak daha yüksek bir lisans türüne terfi edeceksiniz. Lisans türleri arasındaki farkları kontrol etmek için lisans karşılaştırma tablosuna bakın.",
"Landing_Page_CustomerStories": "Müşteri Hikayeleri",
"Landing_Page_OurGreatCustomers": "Büyük Müşterilerimiz",
- "Landing_Page_WebApplicationFramework": "Web Uygulama Çerçevesi",
+ "Landing_Page_WebApplicationFramework": "Web Uygulama Çerçevesi",
"Landing_Page_WebDevelopmentPlatform": "Web Geliştirme Platformu",
"Landing_Page_CompleteWebDevelopmentPlatform": "Tam Web Geliştirme Platformu",
"Landing_Page_TryFreeDemo": "Ücretsiz Demo Dene",
@@ -722,7 +721,7 @@
"Landing_Page_DocsModuleDescription_9": "GitHub kaynağına ek olarak, dokümantasyon kaynağı olarak bir klasörün kullanılmasına izin verir.",
"Landing_Page_FileManagementModuleDescription_1": "Dosyaları hiyerarşik bir klasör yapısı içinde yükleyin, indirin ve düzenleyin.",
"Landing_Page_FileManagementModuleDescription_2": "Bu modül, dosyaları hiyerarşik bir klasör yapısında yüklemek, indirmek ve düzenlemek için kullanılır. Ayrıca çoklu kiracılığa uyumludur ve kiracılarınız için toplam boyut sınırını belirleyebilirsiniz.",
- "Landing_Page_FileManagementModuleDescription_3": "Bu modül BLOB Depolama sistemine dayanmaktadır, bu nedenle dosya içeriklerini depolamak için farklı depolama sağlayıcıları kullanabilir.",
+ "Landing_Page_FileManagementModuleDescription_3": "Bu modül BLOB Depolama sistemine dayanmaktadır, bu nedenle dosya içeriklerini depolamak için farklı depolama sağlayıcıları kullanabilir.",
"Landing_Page_IdentityModuleDescription_1": "Bu modül bir uygulamanın Kullanıcı ve Rol sistemini uygular;",
"Landing_Page_IdentityModuleDescription_2": "Microsoft'un ASP.NET Core Identity kütüphanesi üzerine inşa edilmiştir.",
"Landing_Page_IdentityModuleDescription_3": "Sistemdeki rolleri ve kullanıcıları yönetin. Bir kullanıcının birden çok role sahip olmasına izin verilir.",
@@ -746,6 +745,11 @@
"EmailVerificationMailNotSent": "E-posta doğrulama postası gönderilemedi.",
"GetConfirmationEmail": "Daha önce bir onay e-postası almadıysanız almak için buraya tıklayın.",
"WhichLicenseTypeYouAreInterestedIn": "Hangi lisans türüyle ilgileniyorsunuz?",
- "BlackFridayDiscount": "Kara Cuma İndirimi"
+ "BlackFridayDiscount": "Kara Cuma İndirimi",
+ "EulaPageTitle": "Son Kullanıcı Lisans Sözleşmesi (EULA)",
+ "PrivacyPolicyPageTitle": "Gizlilik Politikası - Çerez Politikası",
+ "TermsConditionsPageTitle": "Şartlar ve Koşullar",
+ "TrainingsPageTitle": "ABP Eğitim Paketleri",
+ "ModulesPageTitle": "ABP Önceden Oluşturulmuş Uygulama Modülleri"
}
-}
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/vi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/vi.json
index 4d0666772a..e5ed696808 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/vi.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/vi.json
@@ -190,7 +190,7 @@
"ChangingDevelopers": "Tôi có thể thay đổi các nhà phát triển đã đăng ký của tổ chức của mình trong tương lai không?",
"ChangingDevelopersExplanation": "Ngoài việc thêm các nhà phát triển mới vào giấy phép của mình, bạn cũng có thể thay đổi các nhà phát triển hiện có (bạn có thể xóa một nhà phát triển và thêm một nhà phát triển mới vào cùng một chỗ ngồi) mà không phải trả thêm bất kỳ chi phí nào.",
"WhenShouldIRenewMyLicense": "Khi nào tôi nên gia hạn giấy phép của mình?",
- "WhenShouldIRenewMyLicenseExplanation": "Nếu bạn gia hạn giấy phép của mình trong vòng 1 tháng sau khi giấy phép của bạn hết hạn, các chiết khấu sau sẽ được áp dụng: Giảm giá {0}% cho Giấy phép Nhóm, Giảm giá {1}% Giấy phép Kinh doanh, Giảm giá {2}% Giấy phép Doanh nghiệp . Nếu bạn gia hạn giấy phép 1 tháng sau ngày giấy phép hết hạn, giá gia hạn sẽ giống như giá mua giấy phép và sẽ không có chiết khấu khi gia hạn của bạn.",
+ "WhenShouldIRenewMyLicenseExplanation": "Nếu bạn gia hạn giấy phép của mình trong vòng {3} ngày sau khi giấy phép của bạn hết hạn, các chiết khấu sau sẽ được áp dụng: Giảm giá {0}% cho Giấy phép Nhóm, Giảm giá {1}% Giấy phép Kinh doanh, Giảm giá {2}% Giấy phép Doanh nghiệp . Nếu bạn gia hạn giấy phép {3} ngày sau ngày giấy phép hết hạn, giá gia hạn sẽ giống như giá mua giấy phép và sẽ không có chiết khấu khi gia hạn của bạn.",
"TrialPlan": "Bạn có kế hoạch dùng thử không?",
"DoYouAcceptBankWireTransfer": "Bạn có chấp nhận chuyển khoản ngân hàng không?",
"DoYouAcceptBankWireTransferExplanation": "Có, chúng tôi chấp nhận chuyển khoản ngân hàng. Sau khi gửi phí cấp phép qua chuyển khoản ngân hàng, hãy gửi email cho chúng tôi theo địa chỉ accounting@abp.io biên lai của bạn và loại giấy phép được yêu cầu. Thông tin tài khoản ngân hàng quốc tế của chúng tôi:",
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json
index be657892f7..06e0c6ca9e 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json
@@ -160,7 +160,7 @@
"SearchQuestionPlaceholder": "搜索常见的问题",
"WhatIsTheABPCommercial": "什么是ABP商业版?",
"WhatAreDifferencesThanAbpFramework": "ABP框架与ABP商业版有什么不同?",
- "AbpCommercialMetaTitle": "ABP 商业版 - 完整的网页开发平台 : {0} | ABP 商业版 ",
+ "AbpCommercialMetaTitle": " {0} | ABP 商业版 ",
"AbpCommercialMetaDescription": "ABP 商业版是在开源ABP框架之上构建的一组预构建应用程序模块、快速开发工具、UI主题和服务架构",
"ABPCommercialExplanation": "ABP商业版是一套基于开源ABP框架之上的高级模块,工具,主题和服务. ABP商业版由ABP框架背后的同一团队开发和支持.",
"WhatAreDifferencesThanABPFrameworkExplanation": "
",
@@ -202,13 +202,13 @@
"WhatHappensWhenLicenseEndsExplanation4": "你不能在你的许可证到期后安装ABP商业平台上添加的新模块和主题。",
"WhatHappensWhenLicenseEndsExplanation5": "你不能使用ABP Suite。",
"WhatHappensWhenLicenseEndsExplanation6": "你不能再获得高级支持。",
- "WhatHappensWhenLicenseEndsExplanation7": "如果您想继续获得这些好处,您可以延长(续订)您的许可证。 如果您在许可证到期后 1 个月内延长许可证,将应用以下折扣:团队许可证 {0}; 营业执照{1}; 企业许可证 {2}。",
+ "WhatHappensWhenLicenseEndsExplanation7": "如果您想继续获得这些好处,您可以延长(续订)您的许可证。 如果您在许可证到期后 {3} 天内延长许可证,将应用以下折扣:团队许可证 {0}; 营业执照{1}; 企业许可证 {2}。",
"discountForYears": "{0}% 折扣 {1} 年",
"WhatHappensWhenLicenseEndsExplanation8": "您生成的 ABP 项目未存储在我们的服务器上。 因此,您有责任保留下载的源代码。 当您的许可证到期时,将无法获取您生成的 ABP 项目源代码。",
"WhenShouldIRenewMyLicense": "我什么时候应该续订我的许可?",
- "WhenShouldIRenewMyLicenseExplanation": "如果您在许可证到期后 1 个月 内续订许可证,将适用以下折扣:团队许可证 {0}; 营业执照{1}; 企业许可证 {2}。 但是,如果您在许可证到期后 1 个月 后续订许可证,则续订价格将与许可证购买价格相同,并且您的续订不会有任何折扣。",
+ "WhenShouldIRenewMyLicenseExplanation": "如果您在许可证到期后 {3} 天 内续订许可证,将适用以下折扣:团队许可证 {0}; 营业执照{1}; 企业许可证 {2}。 但是,如果您在许可证到期后 {3} 天 后续订许可证,则续订价格将与许可证购买价格相同,并且您的续订不会有任何折扣。",
"TrialPlan": "你们有试用计划吗?",
- "TrialPlanExplanation": "ABP商业团队许可证有14天的试用期。若要了解更多信息,请访问这里。此外,我们为团队许可证提供30天的金额返还保证。你只需要在30天内请求退款。商业和企业许可证将提供60%的金额返还保证。这是因为商业和企业许可证包含了所有模块和主题的全部源代码。",
+ "TrialPlanExplanation": "不,ABP商业版没有试用版。您可以通过查看社区版了解代码质量和方法。我们还为团队许可证提供30天无条件退款保证!您可以在前30天内申请退款。对于商业和企业许可证,我们在30天内提供60%的退款。这是因为商业和企业许可证包含所有模块和主题的完整源代码。",
"DoYouAcceptBankWireTransfer": "你们接受银行电汇吗?",
"DoYouAcceptBankWireTransferExplanation": "是的,我们接受银行电汇。 在通过银行转账发送许可费后,将您的收据和所需的许可类型通过电子邮件发送至accounting@abp.io。 我们的国际银行账户信息:",
"HowToUpgrade": "可用新版本时如何升级现有应用程序?",
@@ -369,7 +369,6 @@
"FreeTrial": "免费试用",
"AcceptsMarketingCommunications": " 是的,我想接收 ABP 商业营销通讯。",
"PurposeOfUsage": "使用目的",
- "Industry": "行业",
"Choose": "- 选择 -",
"CompanyOrganizationName": "公司/组织名称",
"CompanySize": "公司规模",
@@ -512,7 +511,7 @@
"AddBasket": "添加到购物车",
"SendTrainingRequest": "发送培训请求",
"OnlyEnglishVersionOfThisDocumentIsTheRecentAndValid": "* 本文件的英文版本为最新版本,如有任何争议,以英文版本为准。",
- "Pricing_Page_Title": "计划 & 定价",
+ "Pricing_Page_Title": "价格和计划",
"Pricing_Page_Description": "现在就选择您的业务及需要的特性和功能。 购买 ABP 商业许可证创建无限量项目。",
"Pricing_Page_HurryUp": "赶快行动吧!",
"Pricing_Page_BuyLicense": "在 1 月 16 日前以 2021 年价格 购买许可证!",
@@ -598,7 +597,7 @@
"Purchase_PricePerDeveloper": "{0} {1} 每个开发者",
"Purchase_IncludedDeveloperInfo": "{0} {1} 包括在内。",
"Purchase_LicenseExtraDeveloperPurchaseMessage": "{0} 许可 包含 {1} 个开发者。 您可以现在或以后添加其他开发人员。",
- "StartupTemplates_Page_Title": "启动模板",
+ "StartupTemplates_Page_Title": "ABP启动模板",
"StartupTemplates_Page_Description": "ABP 商业版 允许您构建任何复杂程度的解决方案。 它提供了两种主要的预构建启动解决方案。 您可以选择最接近您要求的解决方案,并在此基础上构建您自己的定制解决方案。",
"MicroserviceStartupSolutionForDotnet": ".NET 微服务启动解决方案",
"MonolithSolutionForDotnet": ".NET 的单体(模块化)解决方案",
@@ -623,12 +622,11 @@
"Faq_Page_Currency": "货币",
"Faq_Page_VatNumber": "增值税号",
"Faq_Page_OtherCurrenciesInfo": "对于其他货币,请参阅所有账户",
- "ModuleDetail_Page_Title": "模块详细信息 - {0}",
"ProjectCreatedSuccess_Page_Title": "您的项目已创建",
"ProjectCreatedSuccess_Page_Description": "您的 ABP 项目创建成功!",
- "Suite_Page_Title": "ABP 套件 - 创建 CRUD 页面",
+ "Suite_Page_Title": "ABP Suite",
"Suite_Page_Description": "ABP Commercial 提供快速应用程序开发工具以提高开发人员的工作效率。 ABP 套件 允许您轻松创建 CRUD 页面。",
- "Themes_Page_Title": "现代和实用的 UI 主题",
+ "Themes_Page_Title": "ABP主题",
"Themes_Page_Description": "ABP 商业版 提供多种专业、现代的 UI 主题。 创建免费演示以快速查看 UI 的外观。",
"Tools_Page_Title": "快速应用程序开发工具",
"Tools_Page_Description": "ABP 商业版 提供快速应用程序开发工具以提高开发人员的工作效率。 ABP 套件 允许您轻松创建 CRUD 页面。",
@@ -804,6 +802,29 @@
"UpgradePaymentInfoSection_LicenseRenewalPrice": "许可证续订",
"Total": "总计",
"SupportPolicyFaqTitle": "您的支持政策是什么?",
- "SupportPolicyFaqExplanation": "我们只支持有效的和以前的主要版本。 我们不保证为第 3 个和更早的主要版本发布补丁。 例如,如果有效版本是 7.0.0,我们将发布 6.x.x 和 7.x.x 的补丁版本。 此外,我们仅对 ABP Framework 和 ABP Commercial 相关问题提供支持。 这意味着不支持 ABP 产品使用的第 3 方应用程序、云服务和其他外围库。 我们将尽商业上合理的努力在“Volosoft Bilisim A.S”的正式营业时间内为我们的客户提供技术支持。 另一方面,我们不承诺服务级别协议 (SLA) 响应时间,但我们会尽量在我们的官方工作时间内尽快响应技术问题。 除非与客户达成特殊协议,否则我们仅在 https://support.abp.io 上提供支持。 我们还提供私人电子邮件支持,仅适用于企业许可证持有者。"
+ "SupportPolicyFaqExplanation": "我们只支持有效的和以前的主要版本。 我们不保证为第 3 个和更早的主要版本发布补丁。 例如,如果有效版本是 7.0.0,我们将发布 6.x.x 和 7.x.x 的补丁版本。 此外,我们仅对 ABP Framework 和 ABP Commercial 相关问题提供支持。 这意味着不支持 ABP 产品使用的第 3 方应用程序、云服务和其他外围库。 我们将尽商业上合理的努力在“Volosoft Bilisim A.S”的正式营业时间内为我们的客户提供技术支持。 另一方面,我们不承诺服务级别协议 (SLA) 响应时间,但我们会尽量在我们的官方工作时间内尽快响应技术问题。 除非与客户达成特殊协议,否则我们仅在 https://support.abp.io 上提供支持。 我们还提供私人电子邮件支持,仅适用于企业许可证持有者。",
+ "TotalDevelopers": "{0}位开发者",
+ "CustomPurchaseExplanation": "定制您的特定需求",
+ "WhereDidYouHearAboutUs": "您是从哪里了解到我们的?",
+ "Twitter": "Twitter",
+ "Facebook": "Facebook",
+ "Youtube": "YouTube",
+ "Google": "Google",
+ "Github": "GitHub",
+ "Friend": "朋友介绍",
+ "Other": "其他",
+ "WhereDidYouHearAboutUs_explain": "请说明...",
+ "DeletingMemberWarningMessage": "\"{0}\"将从开发者列表中删除。如果您愿意,您可以将此空位分配给另一个开发者。",
+ "AdditionalInfo": "如果开发人员席位超出您的要求,您可以减少它们。 您可以发送电子邮件至 info@abp.io 以删除您的一些开发人员席位。 清除未使用的开发人员席位将降低许可证续订成本。 如果需要,您可以在有效许可期限内重新购买额外的开发人员席位。 请注意,由于此许可证中有 {0} 个开发人员,因此您无法减少此数量。",
+ "LinkExpiredErrorMessage": "您正在尝试访问的链接已过期。",
+ "ExpirationDate": "过期时间",
+ "SpringCampaignDiscount": "春季促销折扣",
+ "WhyUseAbpIoPlatform": "为什么我应该使用 ABP.IO 平台而不是从头开始创建新的解决方案?\n",
+ "WhyUseAbpIoPlatformFaqExplanation": "请参阅该文件以详细解释为什么使用ABP.IO平台比自己做所有事情有显著的优势。",
+ "EulaPageTitle": "最终用户许可协议(EULA)",
+ "PrivacyPolicyPageTitle": "隐私政策 - Cookies政策",
+ "TermsConditionsPageTitle": "条款和条件",
+ "TrainingsPageTitle": "ABP培训套餐",
+ "ModulesPageTitle": "ABP内置的应用模块"
}
}
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json
index f3c9575cd2..19afb1a5bb 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json
@@ -192,7 +192,7 @@
"ChangingDevelopers": "我將來可以更改我組織的註冊開發人員嗎?",
"ChangingDevelopersExplanation": "除了將新的開發人員添加到你的許可中之外,你還可以更改現有的開發人員(可以刪除一個開發人員並將新的開發人員添加到同一位置),而無需任何額外費用.",
"WhenShouldIRenewMyLicense": "我什麽時候應該續訂我的許可?",
- "WhenShouldIRenewMyLicenseExplanation": "如果您在許可證到期後 1 個月內續訂許可證,將享受以下折扣:團隊許可證 {0} ; 商業許可證 {1} ;企業許可證 {2}. 如果您在許可證到期後 1 個月續訂許可證,續訂價格將與許可證購買價格相同,並且續訂不會有折扣。",
+ "WhenShouldIRenewMyLicenseExplanation": "如果您在許可證到期後 {3} 天內續訂許可證,將享受以下折扣:團隊許可證 {0} ; 商業許可證 {1} ;企業許可證 {2}. 如果您在許可證到期後 {3} 天續訂許可證,續訂價格將與許可證購買價格相同,並且續訂不會有折扣。",
"TrialPlan": "你們有試用計劃嗎?",
"DoYouAcceptBankWireTransfer": "你們接受銀行電匯嗎?",
"DoYouAcceptBankWireTransferExplanation": "是的,我們接受銀行電匯。 在通過銀行轉賬發送許可費後,將您的收據和所需的許可類型通過電子郵件發送至accounting@abp.io。 我們的國際銀行賬戶信息:",
@@ -384,6 +384,24 @@
"BlazoriseLicense": "我们是否需要购买Blazorise许可证?",
"BlazoriseLicenseExplanation": "我公司Volosoft和公司Megabit之间有合作协议,根据此协议,购买将同时包含了Blazorise许可证与ABP商业产品,因此我们的客户不需要再额外购买Blazorise许可证。",
"discountForYears": "{0}% 折扣 {1} 年",
- "BlackFridayDiscount": "黑色星期五折扣"
+ "BlackFridayDiscount": "黑色星期五折扣",
+ "OnboardingTrainingFaqTitle": "你們有 ABP 入職培訓嗎?",
+ "OnboardingTrainingFaqExplanation": "是的,我們有 ABP 培訓服務來幫助您快速啟動 ABP 項目。您將從 ABP 核心團隊成員那裡了解 ABP,並獲得開始您的 ABP 項目的技能。在入職培訓中,我們將解釋如何設置您的開發環境、安裝所需的工具、創建功能齊全的 CRUD 頁面。培訓將進行直播並使用 Zoom 應用程序,我們對使用其他在線會議平台持開放態度。培訓語言為英語。您也可以在會議期間提出有關 ABP 的問題。將為雙方計劃一個方便的時間和日期。要獲取更多信息,請通過 info@abp.io 聯繫我們。",
+ "SupportPolicyFaqTitle": "您的支持政策是什麼?",
+ "SupportPolicyFaqExplanation": "我們只支持活動和以前的主要版本。我們不保證為第 3 個和更早的主要版本發布補丁。例如,如果活動版本是 7.0.0,我們將發布 6.x.x 和 7.x.x 的補丁版本。此外,我們僅對 ABP Framework 和 ABP Commercial 相關問題提供支持。這意味著不支持 ABP 產品使用的第 3 方應用程序、雲服務和其他外圍庫。我們將盡商業上合理的努力,在“Volosoft Bilisim A.S”的正式營業時間內為我們的客戶提供技術支持。另一方面,我們不承諾服務級別協議 (SLA) 響應時間,但我們會盡量在我們的官方工作時間內盡快響應技術問題。除非與客戶達成特殊協議,否則我們僅在 https://support.abp.io 上提供支持。我們還提供私人電子郵件支持,僅適用於企業許可證持有者。",
+ "DowngradeLicensePlan": "我以後可以降級到更低的許可計劃嗎?",
+ "DowngradeLicensePlanExplanation": "您不能降級現有的許可計劃。但是您可以購買新的較低許可計劃並在新許可上繼續您的開發。購買較低的許可證後,您只需通過 ABP CLI 命令登錄到新的許可證計劃:`abp login -o `。",
+ "LicenseTransfer": "許可證可以從一個開發商轉讓給另一個開發商嗎?",
+ "LicenseTransferExplanation": "是的!購買許可證後,您將成為許可證持有者,因此您可以訪問組織管理頁面。組織具有所有者和開發者角色。所有者可以管理開發者席位並分配開發者。每個指定的開發人員將通過 ABP CLI 命令登錄到系統,並將擁有開發和支持權限。",
+ "RenewLicenseEarly": "如果我提前更新我的駕照,我會得到一整年嗎?",
+ "RenewLicenseEarylExplanation": "當您在許可證到期日期之前續訂許可證時,您的許可證到期日期將增加 1 年。例如,如果您的許可證在 {0}-06-06 到期,而您在 {0}-01-01 續簽,則新的許可證到期日期將為 {1}-06-06。",
+ "WhatHappensWhenLicenseEnds": "當我的許可期限結束時會發生什麼?",
+ "WhatHappensWhenLicenseEndsExplanation1": "ABP 商業許可是永久許可。許可證到期後,您可以繼續開發您的項目。而且您沒有義務更新您的許可證。您的許可證附帶開箱即用的一年更新和支持計劃。為了繼續獲得新功能、性能增強、錯誤修復、支持和繼續使用 ABP Suite,您需要更新您的許可證。當您的許可證到期時;",
+ "WhatHappensWhenLicenseEndsExplanation2": "您無法使用 ABP Commercial 創建新的解決方案,但您可以永遠繼續開發現有的應用程序。",
+ "WhatHappensWhenLicenseEndsExplanation3": "您將能夠在您的次要版本(RC 或預覽版除外)中獲取模塊和主題的更新。例如:如果您正在使用模塊的 v3.2.0,您仍然可以獲得該模塊的 v3.2.x(v3.2.1、v3.2.5...等)的更新。但是您無法獲得下一個主要或次要版本的更新(如 v3.3.0、v3.3.3、4.x.x.. 等)。比如你的license過期了,最新發布的是v4.4.3,後來又發布了4.4.4和4.5.0兩個版本,你可以訪問v4.4.X,但是你就不行了訪問 v4.5.X。",
+ "WhatHappensWhenLicenseEndsExplanation4": "許可證到期後,您將無法安裝添加到 ABP 商業平台的新模塊和主題。",
+ "WhatHappensWhenLicenseEndsExplanation5": "您不能使用 ABP 套件。",
+ "WhatHappensWhenLicenseEndsExplanation6": "您無法再獲得高級支持。",
+ "WhatHappensWhenLicenseEndsExplanation7": "如果您想繼續獲得這些好處,您可以延長(更新)您的許可證。如果您在許可到期後 {3} 天 內延長許可,將應用以下折扣:團隊許可 {0};營業執照{1};企業許可證{2}。"
}
-}
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ar.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ar.json
index 0264fe4e31..84c3b34110 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ar.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ar.json
@@ -187,6 +187,7 @@
"Index_Page_CommunityIntroduction": "إن هذا محور لإطار عمل ABP و.NET وتطوير البرامج. يمكنك قراءة المقالات ومشاهدة مقاطع الفيديو التعليمية والحصول على معلومات حول تقدم تطوير ABP والأحداث المتعلقة بـ ABP ومساعدة المطورين الآخرين ومشاركة خبرتك مع منتدى ABP.",
"TagsInArticle": "العلامات في المقال",
"WelcomeToABP": "أهلا بكم في ABP",
- "IConsentToMedium": ".https://medium.com/volosoft أوافق على نشر هذا المنشور على"
+ "IConsentToMedium": ".https://medium.com/volosoft أوافق على نشر هذا المنشور على",
+ "DiscordPageTitle": "مجتمع ABP Discord"
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json
index 8cfb154295..24d07c54bf 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json
@@ -184,6 +184,9 @@
"Layout_MetaDescription": "ABP Community is an environment where people can share posts about ABP framework and follows the projects.",
"Index_Page_CommunityIntroduction": "This is a hub for ABP Framework, .NET and software development. You can read the articles, watch the video tutorials, get informed about ABP’s development progress and ABP-related events, help other developers and share your expertise with the ABP community.",
"TagsInArticle": "Tags in article",
- "IConsentToMedium": "I consent to the publication of this post at https://medium.com/volosoft."
+ "IConsentToMedium": "I consent to the publication of this post at https://medium.com/volosoft.",
+ "SearchResultsFor": "Search results for \"{0}\"",
+ "SeeMoreVideos": "See more videos",
+ "DiscordPageTitle": "ABP Discord Community"
}
}
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/fi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/fi.json
index be267cebc0..d090608518 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/fi.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/fi.json
@@ -2,21 +2,20 @@
"culture": "fi",
"texts": {
"Permission:CommunityPost": "Yhteisön artikkeli",
- "Permission:Edit": "Muokata",
+ "Permission:Edit": "Muokkaus",
"Waiting": "Odottaa",
"Approved": "Hyväksytty",
"Rejected": "Hylätty",
- "Wait": "Odota",
- "Approve": "Hyväksyä",
- "Reject": "Hylätä",
+ "Wait": "Odottaa",
+ "Approve": "Hyväksy",
+ "Reject": "Hylkää",
"ReadPost": "Lue artikkeli",
"Status": "Tila",
"ContentSource": "Sisältölähde",
"Details": "Yksityiskohdat",
- "Url": "URL-osoite",
"Title": "Otsikko",
"CreationTime": "Luomisaika",
- "Save": "Tallentaa",
+ "Save": "Tallenna",
"SameUrlAlreadyExist": "Sama URL-osoite on jo olemassa, jos haluat lisätä tämän artikkelin, vaihda URL-osoite!",
"UrlIsNotValid": "URL-osoite ei kelpaa.",
"UrlNotFound": "URL-osoitetta ei löydy.",
@@ -29,14 +28,12 @@
"ContributionGuide": "Contribution Guide",
"BugReport": "Virhe raportti",
"SeeAllPosts": "Katso kaikki viestit",
- "WelcomeToABPCommunity!": "Tervetuloa ABP Community!",
- "MyProfile": "Profiilini",
- "MyOrganizations": "Omat organisaatiot",
+ "WelcomeToABP": "Tervetuloa ABP:hen",
"EmailNotValid": "Ole hyvä ja syötä toimiva sähköpostiosoite.",
"FeatureRequest": "Ominaisuuspyyntö",
"CreatePostTitleInfo": "Viestiluettelossa näytettävän viestin nimi.",
"CreatePostSummaryInfo": "Lyhyt yhteenveto viestistä, joka näytetään postituslistalla.",
- "CreatePostCoverInfo": "Lisää tehokkaan artikkelin luomiseksi kansikuva. Lataa 16:9 -kuvasuhteen kuvat parhaan näkymän saamiseksi. Tiedoston enimmäiskoko: 1MB.",
+ "CreatePostCoverInfo": "Lisää kansikuva, jotta voit luoda tehokkaan viestin. Lataa 16:9 -kuvasuhteen kuvat parhaan näkymän saamiseksi. Tiedoston enimmäiskoko: 1MB.",
"ThisExtensionIsNotAllowed": "Tätä laajennusta ei sallita.",
"TheFileIsTooLarge": "Tiedosto on liian suuri.",
"GoToThePost": "Siirry artikkeliin",
@@ -45,7 +42,7 @@
"Done": "Tehty",
"Open": "Avata",
"Closed": "Suljettu",
- "LatestQuestionOnThe": "Viimeisin kysymys",
+ "RecentQuestionFrom": "Viimeisin kysymys henkilöltä {0}",
"Stackoverflow": "Pinoaminen",
"Votes": "ääntä",
"Answer": "Vastaus",
@@ -59,7 +56,7 @@
"QuestionItemErrorMessage": "Viimeisimmät kysymystiedot Stackoverflow'sta epäonnistui.",
"Oops": "Oho!",
"CreatePostSuccessMessage": "Artikkeli on lähetetty onnistuneesti. Se julkaistaan sivuston järjestelmänvalvojan tarkistuksen jälkeen.",
- "ChooseCoverImage": "Valitse kansikuva...",
+ "Browse": "Selaa",
"CoverImage": "Kansikuva",
"ShareYourExperiencesWithTheABPFramework": "Jaa kokemuksesi ABP-puitteista!",
"Optional": "Valinnainen",
@@ -80,7 +77,7 @@
"LatestGithubAnnouncements": "Viimeisimmät Github-ilmoitukset",
"SeeAllAnnouncements": "Katso kaikki ilmoitukset",
"LatestBlogPost": "Viimeisin blogiviesti",
- "Edit": "Muokata",
+ "Edit": "Muokkaa",
"ProfileImageChange": "Vaihda profiilikuva",
"BlogItemErrorMessage": "Viimeisimpiä blogiviestitietoja ei saatu ABP: ltä.",
"PlannedReleaseDate": "Suunniteltu julkaisupäivä",
@@ -88,6 +85,8 @@
"PostRequestFromGithubIssue": "Artikkelipyyntöjä ei ole nyt.",
"LatestPosts": "Uusimmat viestit",
"ArticleRequests": "Artikkelipyynnöt",
+ "ArticleRequestsDescription": "Haluatko nähdä tietyn sisällön täällä? Voit pyytää yhteisöä luomaan sen!",
+ "LatestContentRequests": "Uusimmat sisältöpyynnöt",
"AllPostRequests": "Katso kaikki artikkelipyynnöt",
"SubscribeToTheNewsletter": "Tilaa uutiskirje",
"NewsletterEmailDefinition": "Hanki tietoa ABP: n tapahtumista, kuten uusista julkaisuista, ilmaisista lähteistä, artikkeleista ja muusta.",
@@ -102,20 +101,19 @@
"Language": "Kieli",
"CreatePostLanguageInfo": "Viestin sisällön kieli.",
"VideoPost": "Videoposti",
- "Post": "Artikla",
- "Read": "Lukea",
+ "Post": "Artikkeli",
+ "Read": "Lue",
"CreateGithubPostUrlInfo": "Artikkelin alkuperäinen GitHub-URL-osoite.",
- "CreateVideoContentUrlInfo": "Viestin alkuperäinen Youtube-URL-osoite.",
+ "CreateVideoContentUrlInfo": "Artikkelin alkuperäinen Youtube-URL-osoite.",
"CreateExternalPostUrlInfo": "Artikkelin alkuperäinen ulkoinen URL-osoite.",
"VideoContentForm": "Lähetä video YouTubessa",
"GithubPostForm": "Lähetä artikkeli GitHubista",
"ExternalPostForm": "Lähetä ulkoinen sisältö",
- "HowToPost": "Kuinka lähettää?",
+ "HowToPost": "Kuinka lähettää viesti?",
"Posts": "Viestit",
"VideoUrl": "Videon URL-osoite",
"GithubPostUrl": "Github-artikkelien URL-osoite",
"ExternalPostUrl": "Ulkoisen artikkelin URL-osoite",
- "CreatePostCoverInfo": "Lisää kansikuva, jotta voit luoda tehokkaan viestin. Lataa 16:9 -kuvasuhteen kuvat parhaan näkymän saamiseksi. Tiedoston enimmäiskoko: 1MB.",
"ThankYouForContribution": "Kiitos osallistumisesta ABP Community.",
"GithubPost": "Github-artikkeli",
"GithubPostSubmitStepOne": "1. Kirjoita artikkeli mistä tahansa julkisesta GitHub-arkistosta Markdown-muodossa. esimerkki ",
@@ -144,6 +142,50 @@
"Volo.AbpIo.Domain:060002": "Artikkelin sisältö ei ole saatavilla Githubin (\"{PostUrl}\") -resurssista.",
"Volo.AbpIo.Domain:060003": "Artikkelin sisältöä ei löytynyt!",
"SeeMore": "Katso Lisää",
- "IConsentToMedium": "Hyväksyn tämän viestin julkaisemisen osoitteessa https://medium.com/volosoft."
+ "JoinTheABPCommunity": "Liity ABP-yhteisöön",
+ "ABPCommunityTalks": "ABP Community Talks",
+ "LiveDemo": "Live-demo",
+ "GetLicense": "Hanki lisenssi",
+ "GetStarted": "Aloita",
+ "SourceCode": "Lähdekoodi",
+ "LeaveComment": "Jätä kommentti",
+ "ShowMore": "Näytä lisää",
+ "NoPublishedPostsYet": "Ei vielä julkaistuja viestejä.",
+ "Name": "Nimi",
+ "Surname": "Sukunimi",
+ "WebSite": "Verkkosivusto",
+ "FullURL": "Koko URL-osoite",
+ "JobTitle": "Työnimike",
+ "Prev": "Ed",
+ "Previous": "Edellinen",
+ "Next": "Seuraava",
+ "Share": "Jaa",
+ "SortBy": "Järjestä",
+ "NoPublishedEventsYet": "Ei vielä julkaistuja tapahtumia.",
+ "SubscribeYoutubeChannel": "Tilaa Youtube-kanava",
+ "Enum:EventType:0": "Keskustelut",
+ "MemberNotPublishedPostYet": "Tämä jäsen ei ole vielä julkaissut yhtään viestiä.",
+ "TimeAgo": "{0} sitten",
+ "Discord_Page_JoinCommunityMessage": "Liity ABP Discord -yhteisöön",
+ "Discord_Page_Announce": "Meillä on ilo julkistaa ABP Community Discord Server!",
+ "Discord_Page_Description_1": "ABP-yhteisö on kasvanut ensimmäisestä päivästä lähtien. Halusimme viedä sen seuraavaan vaiheeseen luomalla virallisen ABP Discord -palvelimen, jotta ABP-yhteisö voi olla vuorovaikutuksessa toistensa kanssa käyttämällä pikaviestinnän ihmeitä.",
+ "Discord_Page_Description_2": "ABP Community Discord Server on paikka, jossa voit esitellä luomuksiasi ABP Frameworkin avulla, jakaa sinulle toimivia vinkkejä, saada viimeisimmät uutiset ja ilmoitukset ABP Frameworkista, keskustella vain yhteisön jäsenten kanssa ideoiden vaihtamiseksi ja pitää hauskaa!",
+ "Discord_Page_Description_3": "Tämä ABP Community Discord -palvelin on virallinen, ja ABP Core Team on läsnä palvelimella valvomassa.",
+ "Discord_Page_JoinToServer": "Liity ABP Discord Serveriin",
+ "Events_Page_MetaTitle": "ABP-yhteisötapahtumat",
+ "Events_Page_MetaDescription": "ABP-tiimin isännöimät live-ohjelmat ovat rentoja istuntoja, jotka ovat täynnä yhteisöllistä sisältöä, demoja, kysymyksiä ja vastauksia sekä keskusteluja siitä, mitä ABP:ssä tapahtuu.",
+ "Events_Page_Title": "ABPyhteisön keskustelut",
+ "Members_Page_WritingFromUser": "Lue kirjoittajan {0} kirjoitus ABP-yhteisössä.",
+ "Post_Create_Page_MetaTitle": "Uusi viesti",
+ "Post_Create_Page_MetaDescription": "Luo viestisi, jotta voit jakaa kokemuksiasi ABP-kehyksestä ja osallistua ABP-yhteisöön.",
+ "Post_Create_Page_CreateNewPost": "Luo uusi viesti",
+ "Post_Index_Page_MetaDescription": "ABP Communityn tarkoituksena on luoda osallistumisen mahdollistava ympäristö ABP-kehystä käyttäville kehittäjille.",
+ "Layout_Title": "{0} | ABP-yhteisö",
+ "Layout_MetaDescription": "ABP Community on ympäristö, jossa ihmiset voivat jakaa julkaisuja ABP-kehyksestä ja seurata projekteja.",
+ "Index_Page_CommunityIntroduction": "Tämä on ABP Frameworkin, .NET:n ja ohjelmistokehityksen keskus. Voit lukea artikkeleita, katsoa opetusvideoita, saada tietoa ABP:n kehityksen edistymisestä ja ABP:hen liittyvistä tapahtumista, auttaa muita kehittäjiä ja jakaa asiantuntemustasi ABP-yhteisön kanssa.",
+ "TagsInArticle": "Tagit artikkelissa",
+ "IConsentToMedium": "Hyväksyn tämän viestin julkaisemisen osoitteessa https://medium.com/volosoft.",
+ "SearchResultsFor": "Hakutulokset haulle \"{0}\"",
+ "SeeMoreVideos": "Katso lisää videoita"
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/tr.json
index f3b7a791c8..81c659c500 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/tr.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/tr.json
@@ -190,6 +190,7 @@
"Layout_Title": "{0} | ABP Topluluğu",
"Layout_MetaDescription": "ABP Topluluğu, insanların ABP çerçevesi hakkında paylaşımlarda bulunabileceği ve projeleri takip edebileceği bir ortamdır.",
"Index_Page_CommunityIntroduction": "Burası ABP Çerçevesi, .NET ve yazılım geliştirme için bir merkezdir. Makaleleri okuyabilir, eğitim videolarını izleyebilir, ABP'nin gelişim süreci ve ABP ile ilgili etkinlikler hakkında bilgi alabilir, diğer geliştiricilere yardımcı olabilir ve uzmanlığınızı ABP topluluğu ile paylaşabilirsiniz.",
- "IConsentToMedium": "Bu yazının https://medium.com/volosoft adresinde yayınlanmasına izin veriyorum."
+ "IConsentToMedium": "Bu yazının https://medium.com/volosoft adresinde yayınlanmasına izin veriyorum.",
+ "DiscordPageTitle": "ABP Discord Topluluğu"
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/zh-Hans.json
index d460707b70..6d2083ed76 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/zh-Hans.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/zh-Hans.json
@@ -13,7 +13,6 @@
"Status": "状态",
"ContentSource": "内容来源",
"Details": "详情",
- "Url": "url",
"Title": "标题",
"CreationTime": "创建时间",
"Save": "保存",
@@ -185,6 +184,9 @@
"Layout_MetaDescription": "ABP 社区是一个人们可以分享有关 ABP 框架的帖子并关注项目的环境。",
"Index_Page_CommunityIntroduction": "这是 ABP 框架、.NET 和软件开发的中心。 您可以阅读文章,观看视频教程,了解 ABP 的开发进度和 ABP 相关事件,帮助其他开发人员并与 ABP 社区分享您的专业知识。",
"TagsInArticle": "文章中的标签",
- "IConsentToMedium": "我同意在 https://medium.com/volosoft 上发布这篇文章。"
+ "IConsentToMedium": "我同意在 https://medium.com/volosoft 上发布这篇文章。",
+ "SearchResultsFor": " span class=\"fw-bold\">\"{0}\"的搜索结果",
+ "SeeMoreVideos": "查看更多视频",
+ "DiscordPageTitle": "ABP Discord社区"
}
-}
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/fi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/fi.json
new file mode 100644
index 0000000000..201c63e800
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/fi.json
@@ -0,0 +1,6 @@
+{
+ "culture": "fi",
+ "texts": {
+ "Buy": "Osta"
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/zh-Hans.json
index df772fa60b..2bbfd5b749 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/zh-Hans.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/zh-Hans.json
@@ -1,5 +1,6 @@
{
"culture": "zh-Hans",
"texts": {
+ "Buy": "购买"
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Support/Localization/Resources/fi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Support/Localization/Resources/fi.json
new file mode 100644
index 0000000000..87bd42a2cd
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Support/Localization/Resources/fi.json
@@ -0,0 +1,6 @@
+{
+ "culture": "fi",
+ "texts": {
+ "FAQ": "FAQ"
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ar.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ar.json
index 791062cfbc..592665c698 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ar.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ar.json
@@ -404,6 +404,9 @@
"SeeTheScreenshot": "انظر الى الصورة",
"Details": "التفاصيل",
"ApplicationModuleExplanation1": "إنشاء حل وحدة تطبيق ذات طبقات كاملة وقابلة لإعادة الاستخدام.",
- "ApplicationModuleExplanation2": "يمكنك استخدام هذا الخيار لإنشاء وحدات نمطية لتطبيقك المعياري."
+ "ApplicationModuleExplanation2": "يمكنك استخدام هذا الخيار لإنشاء وحدات نمطية لتطبيقك المعياري.",
+ "CreateSolutionFolder": "إنشاء مجلد الحل",
+ "CreateSolutionFolderOption": "يحدد ما إذا كان المشروع سيكون في مجلد جديد في مجلد الإخراج أو مجلد الإخراج مباشرة.",
+ "BooksPageTitle": "كتب ABP"
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/cs.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/cs.json
index 636bdf818f..7fa321b7b9 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/cs.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/cs.json
@@ -274,7 +274,8 @@
"FirstEdition": "První vydání",
"ThankYou": "Děkuji!",
"CheckboxMandatory": "Chcete-li pokračovat, musíte toto zaškrtnout!",
- "SelectUITheme": "Vyberte téma uživatelského rozhraní"
-
+ "SelectUITheme": "Vyberte téma uživatelského rozhraní",
+ "CreateSolutionFolder": "Vytvořit složku řešení",
+ "CreateSolutionFolderOption": "Určuje, zda bude projekt v nové složce ve výstupní složce nebo přímo výstupní složce."
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/de.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/de.json
index f978fb8784..28821200c8 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/de.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/de.json
@@ -274,7 +274,8 @@
"FirstEdition": "Erste Ausgabe",
"ThankYou": "Dankeschön!",
"CheckboxMandatory": "Sie müssen dies überprüfen, um fortzufahren!",
- "SelectUITheme": "Wählen Sie UI-Design aus"
-
+ "SelectUITheme": "Wählen Sie UI-Design aus",
+ "CreateSolutionFolder": "Lösungsordner erstellen",
+ "CreateSolutionFolderOption": "Gibt an, ob sich das Projekt in einem neuen Ordner im Ausgabeordner oder direkt im Ausgabeordner befindet."
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json
index 35698cd39c..63e795efee 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json
@@ -416,6 +416,9 @@
"CompanyInfo": "Company Info",
"Date": "Date",
"WhoWeAre_Partner": "Who We Are",
- "WhoWeAre_Expert": "About Me"
+ "WhoWeAre_Expert": "About Me",
+ "CreateSolutionFolder": "Create Solution Folder",
+ "CreateSolutionFolderOption": "Specifies if the project will be in a new folder in the output folder or directly the output folder.",
+ "BooksPageTitle": "ABP Books"
}
}
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/es.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/es.json
index f63600d48a..88f28ede88 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/es.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/es.json
@@ -274,7 +274,8 @@
"FirstEdition": "Primera edición",
"ThankYou": "¡Gracias!",
"CheckboxMandatory": "¡Debes marcar esto para continuar!",
- "SelectUITheme": "Seleccione el tema de la interfaz de usuario"
-
+ "SelectUITheme": "Seleccione el tema de la interfaz de usuario",
+ "CreateSolutionFolder": "Crear carpeta de soluciones",
+ "CreateSolutionFolderOption": "Especifica si el proyecto estará en una nueva carpeta en la carpeta de salida o directamente en la carpeta de salida."
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fi.json
index bcfa1901a6..c41f58399d 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fi.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fi.json
@@ -2,7 +2,7 @@
"culture": "fi",
"texts": {
"GetStarted": "Aloitus - Käynnistysmallit",
- "Create": "Luoda",
+ "Create": "Luo",
"NewProject": "Uusi projekti",
"DirectDownload": "Suora lataus",
"ProjectName": "Projektin nimi",
@@ -14,7 +14,7 @@
"CreateNow": "Luo nyt",
"TheStartupProject": "Käynnistysprojekti",
"Tutorial": "Opetusohjelma",
- "UsingCLI": "CLI: n käyttö",
+ "UsingCLI": "CLI:n käyttö",
"SeeDetails": "Katso yksityiskohdat",
"AbpShortDescription": "ABP Framework on täydellinen infrastruktuuri nykyaikaisten verkkosovellusten luomiseen noudattamalla ohjelmistokehityksen parhaita käytäntöjä ja käytäntöjä.",
"SourceCodeUpper": "LÄHDEKOODI",
@@ -23,9 +23,9 @@
"Architecture": "Arkkitehtuuri",
"Modular": "Modulaarinen",
"DontRepeatYourself": "Älä toista itseäsi",
- "DeveloperFocused": "Kehittäjä kohdennettu",
- "FullStackApplicationInfrastructure": "Täyden pinon sovellusinfrastruktuuri.",
- "DomainDrivenDesign": "Toimialueohjattu suunnittelu",
+ "DeveloperFocused": "Kehittäjä-kohdennettu",
+ "FullStackApplicationInfrastructure": "Full stack sovellusinfrastruktuuri.",
+ "DomainDrivenDesign": "Domain Driven Design",
"DomainDrivenDesignExplanation": "Suunniteltu ja kehitetty DDD-mallien ja -periaatteiden perusteella. Tarjoaa kerrostetun mallin sovelluksellesi.",
"Authorization": "Valtuutus",
"AuthorizationExplanation": "Edistynyt käyttöoikeudet käyttäjän, roolin ja tarkan käyttöjärjestelmän avulla. Rakennettu Microsoft Identity -kirjastoon.",
@@ -64,7 +64,7 @@
"TransactionManagement": "Tapahtumien hallinta",
"AuditLogging": "Tarkastusten kirjaaminen",
"Caching": "Välimuisti",
- "Multitenancy": "Monivärinen",
+ "Multitenancy": "Monivuokraus",
"DataFiltering": "Tietojen suodatus",
"ConventionOverConfiguration": "Kokoonpanon määritys",
"ConventionOverConfigurationExplanation": "ABP toteuttaa oletusarvoisesti yleiset sovelluskäytännöt minimaalisella tai nolla-kokoonpanolla.",
@@ -136,8 +136,8 @@
"ValueObject": "Arvo-objekti",
"ApplicationService": "Sovelluspalvelu",
"DataTransferObject": "Tiedonsiirtokohde",
- "AggregateRootEntity": "Kokonaisjuuri, entiteetti",
- "AutoRESTAPIsExplanation": "ABP voi määrittää sovelluspalvelut automaattisesti API-ohjaimiksi sopimuksen mukaan.",
+ "AggregateRootEntity": "Aggregate Root, entiteetti",
+ "AutoRESTAPIsExplanation": "ABP voi määrittää sovelluspalvelut automaattisesti API-kontrollereiksi sopimuksen mukaan.",
"DynamicClientProxiesExplanation": "Kuluta helposti API: si JavaScript- ja C# -asiakkailta.",
"DistributedEventBusWithRabbitMQIntegrationExplanation": "Julkaise ja kuluta jaettuja tapahtumia helposti käyttämällä sisäänrakennettua hajautettua tapahtumaväylää, jossa on käytettävissä RabbitMQ-integraatio.",
"TestInfrastructureExplanation": "Kehys on kehitetty yksikkö- ja integraatiotestaus ajatellen. Tarjoaa sinulle perusluokkia helpottamaan. Käynnistysmalleissa on valmiiksi konfiguroitu testaus.",
@@ -159,9 +159,9 @@
"UiFramework": "Käyttöliittymäkehys",
"EmailAddress": "Sähköpostiosoite",
"Mobile": "Matkapuhelin",
- "ReactNative": "Reagoi Native",
+ "ReactNative": "React Native",
"Strong": "Vahva",
- "Complete": "Saattaa loppuun",
+ "Complete": "Valmis",
"BasedLayeringModel": "Perustuva kerrosmalli",
"Microservice": "Mikropalvelu",
"Compatible": "Yhteensopiva",
@@ -172,8 +172,9 @@
"DynamicClientProxyDocument": "Katso dynaamisen asiakkaan välityspalvelimen dokumentaatiot JavaScript ja C#.",
"EmailSMSAbstractionsDocument": "Katso lisätietoja sähköpostitse ja tekstiviestien lähettäminen -asiakirjoista.",
"CreateProjectWizard": "Tämä ohjattu toiminto luo uuden projektin käynnistysmallista, joka on määritetty oikein aloittamaan projekti.",
- "TieredOption": "Luo porrastetun ratkaisun, jossa Web- ja Http-API-kerrokset erotetaan fyysisesti. Jos sitä ei ole valittu, luodaan kerrostettu ratkaisu, joka on vähemmän monimutkainen ja sopii useimpiin tilanteisiin.",
+ "TieredOption": "Luo monikerros ratkaisun, jossa Web- ja Http-API-kerrokset erotetaan fyysisesti. Jos sitä ei ole valittu, luodaan kerrostettu ratkaisu, joka on vähemmän monimutkainen ja sopii useimpiin tilanteisiin.",
"SeparateIdentityServerOption": "Erottaa palvelinpuolen kahteen sovellukseen: Ensimmäinen on identiteettipalvelimelle ja toinen palvelinpuolen HTTP-sovellusliittymälle.",
+ "ProgressiveWebApplicationOption": "Määrittää projektin progressiiviseksi verkkosovellukseksi (PWA)",
"UseslatestPreVersion": "Käyttää uusinta julkaisua edeltävää versiota",
"ReadTheDocumentation": " Lue Dokumentaatio ",
"Documentation": "Dokumentointi",
@@ -214,7 +215,11 @@
"SeeDocs": "Katso Docs",
"None": "Ei mitään",
"Application": "Sovellus",
+ "ApplicationExplanation": "Luo täysin kerrostetun ratkaisun, joka perustuu Domain Driven Design -käytäntöihin. Suositellaan pitkäaikaisiin projekteihin, jotka tarvitsevat ylläpidettävän ja laajennettavan koodikannan.",
+ "ApplicationNoLayer": "Sovellus (yksi kerros)",
+ "ApplicationNoLayerExplanation": "Luo yksikerroksisen verkkosovelluksen. Suositellaan yksinkertaisemman ja helposti ymmärrettävän arkkitehtuurin sovelluksen rakentamiseen.",
"Module": "Moduuli",
+ "ModuleExplanation": "Luo uudelleenkäytettävän, täysin kerrostetun sovellusmoduuliratkaisun. Voit käyttää tätä vaihtoehtoa luodaksesi moduuleja modulaariselle sovelluksellesi.",
"PackageName": "Paketin nimi",
"LicenseURL": "Lisenssin URL-osoite",
"License": "Lisenssi",
@@ -274,7 +279,145 @@
"FirstEdition": "Ensimmäinen painos",
"ThankYou": "Kiitos!",
"CheckboxMandatory": "Sinun on tarkistettava tämä jatkaaksesi!",
- "SelectUITheme": "Valitse käyttöliittymän teema"
-
+ "CreateSolutionFolder": "Luo ratkaisukansio",
+ "CreateSolutionFolderOption": "Määrittää, onko projekti tuloskansion uudessa kansiossa vai suoraan tulostekansiossa.",
+ "UserInterface": "Käyttöliittymä",
+ "APIGateway": "API-yhdyskäytävä",
+ "Database": "Tietokanta",
+ "Saas": "Saas",
+ "OpenSourceWebApp": "Avoimen lähdekoodin verkkosovellus",
+ "Framework": "Framework",
+ "AuditLoggingExplanation": "Seuraa automaattisesti kaikkia järjestelmäsi toimintoja ja tietojen muutoksia.",
+ "AbpNewCommandExplanation": "Luo uusia ratkaisuja käyttämällä ABP-käynnistysmalleja.",
+ "AbpAddModuleCommandExplanation": "Asenna valmiiksi rakennetut sovellusmoduulit ratkaisuusi",
+ "AbpUpdateCommandExplanation": "Päivittää automaattisesti kaikki ABP:hen liittyvät NuGet- ja NPM-paketit ratkaisussasi.",
+ "ExploreAllCLICommands": "Tutustu kaikkiin CLI-komentoihin",
+ "ExploreDocumentationAndGuides": "Tutustu kattavaan dokumentaatioon ja oppaisiin.",
+ "Documentations": "Dokumentointi",
+ "Views": "Näkymät",
+ "EnterYouEmailToGetNews": "Kirjoita sähköpostiosoitteesi saadaksesi viimeisimmät uutiset ABP Frameworkista",
+ "Tiered": "Monikerros",
+ "SeparateIdentityServer": "Erillinen identiteettipalvelin",
+ "ProgressiveWebApplication": "Progressiivinen verkkosovellus",
+ "Preview": "Esikatsele",
+ "CreateANewSolution": "Luo uusi ratkaisu",
+ "ABPFrameworkFeatures": "ABP-kehyksen Ominaisuudet",
+ "Commercial": "Kaupallinen",
+ "ThirdPartyTools": "Kolmannen osapuolen työkalut",
+ "Back": "Takaisin",
+ "Community": "Yhteisö",
+ "SeeMore": "Katso lisää",
+ "DetailsOfTheEBook": "E-kirjan tiedot",
+ "JoinOurMarketingNewsletter": "Liity markkinointiuutiskirjeeseemme",
+ "FrameworkNewsletterConfirmationMessage": "Hyväksyn käyttöehdot ja tietosuojakäytäntö.",
+ "GetYourFreeEBook": "Hanki ilmainen DDD-e-kirjasi ",
+ "EverythingYouNeedToKnow": "Kaikki mitä sinun tarvitsee tietää.",
+ "PreOrderNow": "Ennakkotilaa nyt",
+ "UITheming": "UI Theming",
+ "UIThemingExplanation": "Luo uudelleenkäytettäviä käyttöliittymäteemoja ja asetteluja tai käytä jotakin valmiista käyttöliittymäteemoista.",
+ "DataFilteringExplanation2": "Suodata automaattisesti tietokannan kyselyt toteuttaaksesi helposti malleja, kuten pehmeän poiston ja usean vuokrauksen.",
+ "NeedHelp": "Tarvitsetko apua?",
+ "GiveYourProjectAName": "Anna projektillesi nimi",
+ "SelectProjectType": "Valitse Projektin tyyppi",
+ "SelectUIFramework": "Valitse UI Framework",
+ "SelectDatabaseProvider": "Valitse Tietokannan tarjoaja",
+ "SelectDatabaseManagementSystem": "Valitse Tietokannan hallintajärjestelmä",
+ "InstallingTheABPCLI": "ABP CLI:n asentaminen",
+ "CreateYourProjectNow": "Luo projektisi nyt",
+ "OrderOn": "Tilaa {0}",
+ "DownloadFreeDDDBook": "Lataa ilmainen DDD-kirja",
+ "WhatIsABPFramework": "Mikä on ABP-kehys?",
+ "TenantDatabase": "Vuokralaisen {0} tietokanta",
+ "SharedDatabase": "Jaettu tietokanta",
+ "ConnectionResolver": "Yhteyden ratkaisija",
+ "TenantBasedDataFilter": "Vuokralaispohjainen tietosuodatin",
+ "ApplicationCode": "Sovelluskoodi",
+ "TenantResolution": "Vuokralaisen päättely",
+ "TenantUser": "Vuokralaisen {0} käyttäjä",
+ "CardTitle": "Kortin otsikko",
+ "View": "Näytä",
+ "Model": "Malli",
+ "Email": "Sähköposti",
+ "Password": "Salasana",
+ "Address": "Osoite",
+ "Gender": "Sukupuoli",
+ "Male": "Mies",
+ "Female": "Nainen",
+ "Submit": "Lähetä",
+ "Unspecified": "Määrittelemätön",
+ "StaticFileMiddleware": "Staattisen tiedoston väliohjelmisto",
+ "RazorViewEngine": "Razor View Engine",
+ "PhysicalFiles": "Fyysiset tiedostot (wwwroot)",
+ "EmbeddedFiles": "Upotetut tiedostot (DLL)",
+ "DynamicFiles": "Dynaamiset tiedostot (muisti)",
+ "BuildSolutionsWithAbp": "Rakenna ylläpidettäviä .NET-ratkaisuja noudattamalla ohjelmistokehityksen parhaita käytäntöjä käyttämällä ABP:tä.",
+ "BuyOnAmazon": "Osta Amazonista",
+ "BuyOnPackt": "Osta Packtista",
+ "Discounted": "Alennettu",
+ "MasteringAbpFramework_Book_KeyFeatures": "Avainominaisuudet",
+ "MasteringAbpFramework_Book_Key_Features_Description_1": "Luo kestäviä, ylläpidettäviä, modulaarisia ja skaalautuvia ohjelmistoratkaisuja ABP Frameworkin avulla.",
+ "MasteringAbpFramework_Book_Key_Features_Description_2": "Opi toteuttamaan SOLID-periaatteita ja verkkotunnuslähtöistä suunnittelua verkkosovelluksissasi.",
+ "MasteringAbpFramework_Book_Key_Features_Description_3": "Tutustu kuinka ABP Framework nopeuttaa kehityssykliäsi automatisoimalla toistuvia tehtäviä.",
+ "MasteringAbpFramework_Book_Description": "Kirjan kuvaus",
+ "MasteringAbpFramework_Book_Description_Details_1": "ABP Framework on täydellinen infrastruktuuri nykyaikaisten verkkosovellusten luomiseen seuraavilla ohjelmistoilla\n parhaiden käytäntöjen ja käytäntöjen kehittäminen. ABP:n korkean tason kehyksen ja ekosysteemin avulla voit\n ottaa käyttöön Älä toista itseäsi (DRY) -periaatteen ja keskittyä liiketoimintakoodiisi.",
+ "MasteringAbpFramework_Book_Description_Details_2": "Tämä ABP Frameworkin luojan kirjoittama kirja auttaa sinua saamaan täydellisen käsityksen\n frameworkista ja modernit verkkosovellusten kehitystekniikat. Vaiheittaisilla selityksillä olennaisista\n käsitteitä ja käytännön esimerkeistä, ymmärrät nykyaikaisen verkkoratkaisun vaatimukset ja kuinka ABP\n Framework tekee omien ratkaisujen kehittämisestä miellyttävää. Löydät yleiset vaatimukset\n yritysverkkosovellusten kehittämiseen ja ABP:n tarjoamaan infrastruktuuriin tutustumiseen. Läpi\n kirjan, opit ohjelmistokehityksen parhaita käytäntöjä ylläpidettävien ja modulaaristen verkkosovellusten rakentamiseen.",
+ "MasteringAbpFramework_Book_Description_Details_3": "Tämän kirjan luettuasi pystyt luomaan täydellisen verkkoratkaisun, jota on helppo kehittää,\n huoltaa ja testata.",
+ "MasteringAbpFramework_Book_WhatYouWillLearn": "Mitä opit",
+ "MasteringAbpFramework_Book_What_You_Will_Learn_1": "Määritä kehitysympäristö ja aloita ABP Frameworkin käyttö.",
+ "MasteringAbpFramework_Book_What_You_Will_Learn_2": "Työskentele Entity Framework Coren ja MongoDB:n kanssa kehittääksesi tiedon käyttökerroksesi.",
+ "MasteringAbpFramework_Book_What_You_Will_Learn_3": "Ymmärrä monialaiset huolenaiheet ja kuinka ABP automatisoi toistuvia tehtäviä.",
+ "MasteringAbpFramework_Book_What_You_Will_Learn_4": "Ota hallintaan toimialuelDomain Driven Design -ähtöisen suunnittelun toteuttaminen ABP Frameworkin avulla.",
+ "MasteringAbpFramework_Book_What_You_Will_Learn_5": "Rakenna käyttöliittymäsivuja ja komponentteja ASP.NET Core MVC:llä (Razor Pages) ja Blazorilla.",
+ "MasteringAbpFramework_Book_What_You_Will_Learn_6": "Työskentele monivuokrauksen kanssa modulaaristen verkkosovellusten luomiseksi.",
+ "MasteringAbpFramework_Book_What_You_Will_Learn_7": "Ymmärrä modulaarisuus ja luo uudelleenkäytettäviä sovellusmoduuleja.",
+ "MasteringAbpFramework_Book_What_You_Will_Learn_8": "Kirjoita yksikkö-, integrointi- ja käyttöliittymätestejä ABP Frameworkin avulla.",
+ "MasteringAbpFramework_Book_WhoIsThisBookFor": "Kenelle tämä kirja on tarkoitettu",
+ "MasteringAbpFramework_Book_WhoIsThisBookFor_Description": "Tämä kirja on tarkoitettu verkkokehittäjille, jotka haluavat oppia ohjelmistoarkkitehtuureja ja parhaita käytäntöjä\n ylläpidettävien web-pohjaisten ratkaisujen kehittämiseen Microsoft-tekniikoilla ja ABP Frameworkilla. C#:n\n ja ASP.NET Core: perustiedot tarvitaan tätä kirjaa luettaessa.",
+ "ComputersAndTechnology": "Tietokoneet ja tekniikka",
+ "BuildingMicroserviceSolutions": "Building Microservice Solutions",
+ "MicroserviceBookPracticalGuide": "Tämä kirja on opas mikropalvelupohjaisten sovellusten kehittämiseen ja hallintaan ABP-kehyksen avulla. Siinä viitataan .NET Microservice Sample Reference Application: eShopOnContainers -sovellukseen ja käsitellään ABP Frameworkia käyttäviä arkkitehtonisia suunnittelu- ja toteutusmenetelmiä. Tämän kirjan loppuun mennessä opit, kuinka ABP lähestyy yleisiä mikropalveluiden monimutkaisia ongelmia, kuten valtuutusta, hajautettuja tapahtumia, mikropalvelujen välistä viestintää, käyttöönottoa jne.",
+ "IntroducingTheSolution": "Esittelyssä eShopOnAbp-ratkaisu",
+ "RunningTheSolution": "Ratkaisun suorittaminen",
+ "UnderstandingTheAuthenticationSystem": "Todennusjärjestelmän ymmärtäminen",
+ "ExploringTheApplications": "Sovellusten tutkiminen",
+ "UnderstandingTheAPIGateways": "API-yhdyskäytävien ymmärtäminen",
+ "DevelopingTheMicroservices": "Mikropalveluiden kehittäminen",
+ "UnderstandingTheInfrastructure": "Infrastruktuurin ymmärtäminen",
+ "DiggingInTheUseCases": "Käyttötapausten kuvaaminen",
+ "DeployingTheSolution": "Ratkaisun käyttöönotto",
+ "ThisBookIsInDraftStageAndIsNotCompletedYet": "Tämä kirja on luonnosvaiheessa eikä ole vielä valmis.",
+ "Authors": "Tekijät",
+ "MicroserviceEBook": "Microservice E-Book",
+ "SelectUITheme": "Valitse käyttöliittymän teema",
+ "LeptonXLiteTheme": "LeptonX Lite -teema",
+ "BasicTheme": "Perusteema",
+ "LeptonXLiteThemeInfo": " Moderni ja tyylikäs Bootstrap-käyttöliittymäteema. Ihanteellinen, jos haluat tuotantovalmiin käyttöliittymäteeman. Tämä on uusin teema ja oletuksena.",
+ "BasicThemeInfo": "Minimalistinen käyttöliittymäteema tavallisilla Bootstrap-väreillä ja -tyyleillä. Ihanteellinen, jos rakennat oman käyttöliittymäteeman.",
+ "SeeDocumentation": "Katso dokumentaatio.",
+ "SeeFullScreen": "🖼️ Katso kuvakaappaus",
+ "BuildingMicroserviceSolutionsShortDescription": "Tämä kirja on opas mikropalvelupohjaisten sovellusten kehittämiseen ja hallintaan ABP-kehyksen avulla.",
+ "InstallAbpCliMessage": "Asenna ABP CLI komentoriviltä, jos et ole asentanut sitä aiemmin:",
+ "Terminal": "Terminaali",
+ "Copy": "Kopio",
+ "RunTheFollowingCommand": "Suorita seuraava komento komentorivillä:",
+ "ChangeSolutionOptionsBelow": "Voit muuttaa alla olevia ratkaisuvaihtoehtoja.",
+ "MultiLayerApplication": "Monikerroksinen sovellus",
+ "MultiLayerApplicationExplanation1": "Luo täysin kerrostetun ratkaisun, joka perustuu Domain Driven Designin käytäntöihin.",
+ "MultiLayerApplicationExplanation2": "Suositellaan pitkäaikaisiin projekteihin, jotka tarvitsevat ylläpidettävän ja laajennettavan koodikannan.",
+ "SingleLayerApplication": "Single-layer sovellus",
+ "SingleLayerApplicationExplanation1": "Luo yksikerroksisen verkkosovelluksen.",
+ "SingleLayerApplicationExplanation2": "Suositellaan yksinkertaisemman ja helposti ymmärrettävän arkkitehtuurin sovelluksen rakentamiseen.",
+ "ApplicationModule": "Sovellus moduuli",
+ "SeeTheScreenshot": "Katso kuvakaappaus",
+ "ApplicationModuleExplanation1": "Luo uudelleenkäytettävän, täysin kerrostetun sovellusmoduuliratkaisun.",
+ "ApplicationModuleExplanation2": "Voit käyttää tätä vaihtoehtoa luodaksesi moduuleja modulaariselle sovelluksellesi.",
+ "Expert_": "Asiantuntija",
+ "Partner_": "Kumppanuus",
+ "WebSite": "Verkkosivusto",
+ "Expert_Year": "Asiantuntijavuosi",
+ "CompanyInfo": "Yritystiedot",
+ "Date": "Päivämäärä",
+ "WhoWeAre_Partner": "Keitä olemme",
+ "WhoWeAre_Expert": "Minusta"
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fr.json
index 90314de979..e66bc4082a 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fr.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/fr.json
@@ -274,7 +274,8 @@
"FirstEdition": "Première édition",
"ThankYou": "Merci!",
"CheckboxMandatory": "Vous devez vérifier cela pour continuer !",
- "SelectUITheme": "Sélectionnez le thème de l'interface utilisateur"
-
+ "SelectUITheme": "Sélectionnez le thème de l'interface utilisateur",
+ "CreateSolutionFolder": "Créer un dossier de solutions",
+ "CreateSolutionFolderOption": "Spécifie si le projet sera dans un nouveau dossier dans le dossier de sortie ou directement dans le dossier de sortie."
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hi.json
index 35232cf828..1b4bd1c879 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hi.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hi.json
@@ -274,7 +274,8 @@
"FirstEdition": "प्रथम संस्करण",
"ThankYou": "शुक्रिया!",
"CheckboxMandatory": "आगे बढ़ने के लिए आपको इसे जांचना होगा!",
- "SelectUITheme": "यूआई थीम का चयन करें"
-
+ "SelectUITheme": "यूआई थीम का चयन करें",
+ "CreateSolutionFolder": "समाधान फ़ोल्डर बनाएँ",
+ "CreateSolutionFolderOption": "निर्दिष्ट करता है कि प्रोजेक्ट आउटपुट फ़ोल्डर या सीधे आउटपुट फ़ोल्डर में एक नए फ़ोल्डर में होगा या नहीं।"
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hu.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hu.json
index 2a6ebf2feb..a3f4d84e26 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hu.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/hu.json
@@ -392,6 +392,8 @@
"LeptonXLiteThemeInfo": "Modern és stílusos Bootstrap UI téma. Ideális, ha gyártásra kész felhasználói felület témát szeretne. Ez a legújabb téma, és az alapértelmezett.",
"BasicThemeInfo": "Minimalista felhasználói felület téma egyszerű Bootstrap színekkel és stílusokkal. Ideális, ha saját felhasználói felület témát készít.",
"SeeDocumentation": "Lásd a dokumentációt .",
- "SeeFullScreen": "🖼️ Nézze meg a képernyőképet"
+ "SeeFullScreen": "🖼️ Nézze meg a képernyőképet",
+ "CreateSolutionFolder": "Hozzon létre megoldási mappát",
+ "CreateSolutionFolderOption": "Meghatározza, hogy a projekt egy új mappában legyen-e a kimeneti mappában vagy közvetlenül a kimeneti mappában."
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/is.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/is.json
index f3449c4798..15941b2f20 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/is.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/is.json
@@ -274,7 +274,8 @@
"FirstEdition": "Fyrsta útgáfa",
"ThankYou": "Þakka þér!",
"CheckboxMandatory": "Þú þarft að smella hér til að halda áfram!",
- "SelectUITheme": "Veldu UI þema"
-
+ "SelectUITheme": "Veldu UI þema",
+ "CreateSolutionFolder": "Búðu til lausnarmöppu",
+ "CreateSolutionFolderOption": "Tilgreinir hvort verkefnið verður í nýrri möppu í úttaksmöppunni eða beint í framleiðslumöppunni."
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/it.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/it.json
index 2e37c54280..5cc16b4646 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/it.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/it.json
@@ -274,7 +274,8 @@
"FirstEdition": "Prima Edizione",
"ThankYou": "Grazie!",
"CheckboxMandatory": "Devi mettere la spunta su questo per procedere!",
- "SelectUITheme": "Seleziona Tema dell'interfaccia utente"
-
+ "SelectUITheme": "Seleziona Tema dell'interfaccia utente",
+ "CreateSolutionFolder": "Crea cartella della soluzione",
+ "CreateSolutionFolderOption": "Specifica se il progetto si troverà in una nuova cartella nella cartella di output o direttamente nella cartella di output."
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/nl.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/nl.json
index eb3ac12a86..4bc2cffb2a 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/nl.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/nl.json
@@ -274,7 +274,8 @@
"FirstEdition": "Eerste editie",
"ThankYou": "Bedankt!",
"CheckboxMandatory": "Je moet dit aanvinken om verder te gaan!",
- "SelectUITheme": "Selecteer UI-thema"
-
+ "SelectUITheme": "Selecteer UI-thema",
+ "CreateSolutionFolder": "Oplossingsmap maken",
+ "CreateSolutionFolderOption": "Geeft aan of het project zich in een nieuwe map in de uitvoermap bevindt of direct in de uitvoermap."
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pl-PL.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pl-PL.json
index 1adc7b009f..cb33d69ab6 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pl-PL.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pl-PL.json
@@ -274,7 +274,8 @@
"FirstEdition": "Pierwsza edycja",
"ThankYou": "Dziękuję Ci!",
"CheckboxMandatory": "Musisz to sprawdzić, aby kontynuować!",
- "SelectUITheme": "Wybierz motyw interfejsu"
-
+ "SelectUITheme": "Wybierz motyw interfejsu",
+ "CreateSolutionFolder": "Utwórz folder rozwiązania",
+ "CreateSolutionFolderOption": "Określa, czy projekt znajdzie się w nowym folderze w folderze wyjściowym, czy bezpośrednio w folderze wyjściowym."
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pt-BR.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pt-BR.json
index 75fc4d8864..b468c06403 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pt-BR.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pt-BR.json
@@ -274,7 +274,8 @@
"FirstEdition": "Primeira edição",
"ThankYou": "Obrigado!",
"CheckboxMandatory": "Você precisa verificar isso para continuar!",
- "SelectUITheme": "Selecione o tema da interface do usuário"
-
+ "SelectUITheme": "Selecione o tema da interface do usuário",
+ "CreateSolutionFolder": "Criar Pasta de Solução",
+ "CreateSolutionFolderOption": "Especifica se o projeto estará em uma nova pasta na pasta de saída ou diretamente na pasta de saída."
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ro-RO.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ro-RO.json
index e91664d726..003309aa74 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ro-RO.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ro-RO.json
@@ -275,7 +275,7 @@
"ThankYou": "Vă mulţumim!",
"CheckboxMandatory": "Trebuie să bifaţi asta pentru a continua!",
"SelectUITheme": "Selectați Tema UI",
-
-
+ "CreateSolutionFolder": "Creați folderul de soluții",
+ "CreateSolutionFolderOption": "Specifică dacă proiectul va fi într-un folder nou în folderul de ieșire sau direct folderul de ieșire."
}
}
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ru.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ru.json
index 05378ac5e1..8df80b7422 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ru.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ru.json
@@ -274,6 +274,8 @@
"FirstEdition": "Первое издание",
"ThankYou": "Спасибо!",
"CheckboxMandatory": "Вам необходимо проверить это, чтобы продолжить!",
- "SelectUITheme": "Выберите тему пользовательского интерфейса"
+ "SelectUITheme": "Выберите тему пользовательского интерфейса",
+ "CreateSolutionFolder": "Создать папку решения",
+ "CreateSolutionFolderOption": "Указывает, будет ли проект находиться в новой папке в выходной папке или непосредственно в выходной папке."
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sk.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sk.json
index a7cdab3afd..f578158624 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sk.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sk.json
@@ -274,7 +274,8 @@
"FirstEdition": "Prvá edícia",
"ThankYou": "Ďakujem!",
"CheckboxMandatory": "Ak chcete pokračovať, musíte to skontrolovať!",
- "SelectUITheme": "Vyberte tému používateľského rozhrania"
-
+ "SelectUITheme": "Vyberte tému používateľského rozhrania",
+ "CreateSolutionFolder": "Vytvorte priečinok riešení",
+ "CreateSolutionFolderOption": "Určuje, či bude projekt v novom priečinku vo výstupnom priečinku alebo priamo vo výstupnom priečinku."
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sl.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sl.json
index b7a60ef904..c7a1f495f2 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sl.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/sl.json
@@ -274,7 +274,8 @@
"FirstEdition": "Prva izdaja",
"ThankYou": "Hvala vam!",
"CheckboxMandatory": "Za nadaljevanje morate to preveriti!",
- "SelectUITheme": "Izberite temo uporabniškega vmesnika"
-
+ "SelectUITheme": "Izberite temo uporabniškega vmesnika",
+ "CreateSolutionFolder": "Ustvarite mapo rešitev",
+ "CreateSolutionFolderOption": "Podaja, ali bo projekt v novi mapi v izhodni mapi ali neposredno v izhodni mapi."
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json
index 969bd72694..6834f5da0d 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json
@@ -374,7 +374,10 @@
"MasteringAbpFramework_Book_WhoIsThisBookFor_Description": "Bu kitap, Microsoft teknolojilerini ve ABP Çerçevesini kullanarak sürdürülebilir web tabanlı çözümler\n oluşturmak için yazılım mimarilerini ve en iyi uygulamaları öğrenmek isteyen web geliştiricileri içindir.\n Bu kitaba başlamak için temel C# ve ASP.NET Core bilgisi gereklidir.",
"ComputersAndTechnology": "Bilgisayar ve Teknoloji",
"ThisBookIsInDraftStageAndIsNotCompletedYet": "Bu kitap taslak aşamasındadır ve henüz tamamlanmamıştır.",
- "SelectUITheme": "Vyberte téma uživatelského rozhraní"
+ "CreateSolutionFolder": "Çözüm Klasörü Oluşturun",
+ "CreateSolutionFolderOption": "Projenin çıktı klasöründe yeni bir klasörde mi yoksa doğrudan çıktı klasöründe mi olacağını belirtir.",
+ "SelectUITheme": "UI Temasını Seçin",
+ "BooksPageTitle": "ABP Kitapları"
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/vi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/vi.json
index faa0b53211..b67ff75480 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/vi.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/vi.json
@@ -274,7 +274,8 @@
"FirstEdition": "Ấn bản đầu tiên",
"ThankYou": "Cảm ơn bạn!",
"CheckboxMandatory": "Bạn cần kiểm tra điều này để tiếp tục!",
- "SelectUITheme": "Chọn chủ đề giao diện người dùng"
-
+ "SelectUITheme": "Chọn chủ đề giao diện người dùng",
+ "CreateSolutionFolder": "Tạo thư mục giải pháp",
+ "CreateSolutionFolderOption": "Chỉ định xem dự án sẽ nằm trong một thư mục mới trong thư mục đầu ra hay trực tiếp trong thư mục đầu ra."
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json
index a6ef45db1d..7fca00dd3e 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json
@@ -408,6 +408,17 @@
"ApplicationModule": "应用程序模块",
"SeeTheScreenshot": "如截图所示",
"ApplicationModuleExplanation1": "创建可重用的、完全分层的应用程序模块解决方案。",
- "ApplicationModuleExplanation2": "您可以使用此选项为您的模块化应用程序创建模块。"
+ "ApplicationModuleExplanation2": "您可以使用此选项为您的模块化应用程序创建模块。",
+ "Expert_": "专家",
+ "Partner_": "合作伙伴",
+ "WebSite": "网站",
+ "Expert_Year": "专业年限",
+ "CompanyInfo": "公司信息",
+ "Date": "日期",
+ "WhoWeAre_Partner": "关于我们",
+ "WhoWeAre_Expert": "关于我",
+ "CreateSolutionFolder": "创建解决方案文件夹",
+ "CreateSolutionFolderOption": "指定项目是位于输出文件夹中的新文件夹中,还是直接位于输出文件夹中。",
+ "BooksPageTitle": "ABP书籍"
}
}
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hant.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hant.json
index baa41ba088..e3e3ded37c 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hant.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hant.json
@@ -274,7 +274,8 @@
"FirstEdition": "第一版",
"ThankYou": "謝謝!",
"CheckboxMandatory": "你需要檢查這個才能繼續!",
- "SelectUITheme": "選擇 UI 主題"
-
+ "SelectUITheme": "選擇 UI 主題",
+ "CreateSolutionFolder": "創建解決方案文件夾",
+ "CreateSolutionFolderOption": "指定項目是位於輸出文件夾中的新文件夾中,還是直接位於輸出文件夾中。"
}
}
\ No newline at end of file
diff --git a/common.props b/common.props
index 22b86f2a2f..8c0959fa3c 100644
--- a/common.props
+++ b/common.props
@@ -1,7 +1,7 @@
latest
- 7.1.1
+ 7.2.0$(NoWarn);CS1591;CS0436https://abp.io/assets/abp_nupkg.pnghttps://abp.io/
diff --git a/docs/en/Background-Jobs-Hangfire.md b/docs/en/Background-Jobs-Hangfire.md
index c6c3d69ad7..ca2067980e 100644
--- a/docs/en/Background-Jobs-Hangfire.md
+++ b/docs/en/Background-Jobs-Hangfire.md
@@ -66,6 +66,8 @@ After you have installed these NuGet packages, you need to configure your projec
}
````
+> You have to configure a storage for Hangfire.
+
2. If you want to use hangfire's dashboard, you can add `UseHangfireDashboard` call in the `OnApplicationInitialization` method in `Module` class
````csharp
diff --git a/docs/en/Background-Jobs.md b/docs/en/Background-Jobs.md
index 84e746f73d..c6e19fb48a 100644
--- a/docs/en/Background-Jobs.md
+++ b/docs/en/Background-Jobs.md
@@ -75,6 +75,42 @@ This job simply uses `IEmailSender` to send emails (see [email sending document]
A background job should not hide exceptions. If it throws an exception, the background job is automatically re-tried after a calculated waiting time. Hide exceptions only if you don't want to re-run the background job for the current argument.
+#### Cancelling Background Jobs
+
+If your background task is cancellable, then you can use the standard [Cancellation Token](Cancellation-Token-Provider.md) system to obtain a `CancellationToken` to cancel your job when requested. See the following example that uses the `ICancellationTokenProvider` to obtain the cancellation token:
+
+```csharp
+using System;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Logging;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Threading;
+
+namespace MyProject
+{
+ public class LongRunningJob : AsyncBackgroundJob, ITransientDependency
+ {
+ private readonly ICancellationTokenProvider _cancellationTokenProvider;
+
+ public LongRunningJob(ICancellationTokenProvider cancellationTokenProvider)
+ {
+ _cancellationTokenProvider = cancellationTokenProvider;
+ }
+
+ public override async Task ExecuteAsync(LongRunningJobArgs args)
+ {
+ foreach (var id in args.Ids)
+ {
+ _cancellationTokenProvider.Token.ThrowIfCancellationRequested();
+ await ProcessAsync(id); // code omitted for brevity
+ }
+ }
+ }
+}
+```
+
+> A cancellation operation might be needed if the application is shutting down and we don't want to block the application in the background job. This example throws an exception if the cancellation is requested. So, the job will be retried the next time the application starts. If you don't want that, just return from the `ExecuteAsync` method without throwing any exception (you can simply check the `_cancellationTokenProvider.Token.IsCancellationRequested` property).
+
#### Job Name
Each background job has a name. Job names are used in several places. For example, RabbitMQ provider uses job names to determine the RabbitMQ Queue names.
diff --git a/docs/en/Background-Workers-Hangfire.md b/docs/en/Background-Workers-Hangfire.md
index 5a456b1092..9506eb97a7 100644
--- a/docs/en/Background-Workers-Hangfire.md
+++ b/docs/en/Background-Workers-Hangfire.md
@@ -40,6 +40,50 @@ public class YourModule : AbpModule
> Hangfire background worker integration provides an adapter `HangfirePeriodicBackgroundWorkerAdapter` to automatically load any `PeriodicBackgroundWorkerBase` and `AsyncPeriodicBackgroundWorkerBase` derived classes as `IHangfireBackgroundWorker` instances. This allows you to still to easily switch over to use Hangfire as the background manager even you have existing background workers that are based on the [default background workers implementation](Background-Workers.md).
+## Configuration
+
+You can install any storage for Hangfire. The most common one is SQL Server (see the [Hangfire.SqlServer](https://www.nuget.org/packages/Hangfire.SqlServer) NuGet package).
+
+After you have installed these NuGet packages, you need to configure your project to use Hangfire.
+
+1.First, we change the `Module` class (example: `HttpApiHostModule`) to add Hangfire configuration of the storage and connection string in the `ConfigureServices` method:
+
+````csharp
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ var configuration = context.Services.GetConfiguration();
+ var hostingEnvironment = context.Services.GetHostingEnvironment();
+
+ //... other configarations.
+
+ ConfigureHangfire(context, configuration);
+ }
+
+ private void ConfigureHangfire(ServiceConfigurationContext context, IConfiguration configuration)
+ {
+ context.Services.AddHangfire(config =>
+ {
+ config.UseSqlServerStorage(configuration.GetConnectionString("Default"));
+ });
+ }
+````
+
+> You have to configure a storage for Hangfire.
+
+2. If you want to use hangfire's dashboard, you can add `UseHangfireDashboard` call in the `OnApplicationInitialization` method in `Module` class
+
+````csharp
+ public override void OnApplicationInitialization(ApplicationInitializationContext context)
+ {
+ var app = context.GetApplicationBuilder();
+
+ // ... others
+
+ app.UseHangfireDashboard(); //should add to the request pipeline before the app.UseConfiguredEndpoints()
+ app.UseConfiguredEndpoints();
+ }
+````
+
## Create a Background Worker
`HangfireBackgroundWorkerBase` is an easy way to create a background worker.
diff --git a/docs/en/Blog-Posts/2023-03-15-Migration-Mssql-Postgresql/POST.md b/docs/en/Blog-Posts/2023-03-15-Migration-Mssql-Postgresql/POST.md
new file mode 100644
index 0000000000..14571157b6
--- /dev/null
+++ b/docs/en/Blog-Posts/2023-03-15-Migration-Mssql-Postgresql/POST.md
@@ -0,0 +1,37 @@
+# Migrating from MS-SQL to Postgresql
+
+
+
+## Introduction
+
+Database migration is a common practice for organizations that want to move from one database system to another. This can be for a variety of reasons, including cost, performance, and features. In this article, we will discuss the process of migrating a database from MS-SQL to PostgreSQL, the challenges that may arise during the migration, and how to overcome them. And we recently moved the main database of https://abp.io platform from MS-SQL to PostgreSQL.
+
+In our case, we decided to switch our database from Microsoft SQL Server (MS-SQL) to PostgreSQL because we wanted to move our on-premise platform to Azure. We’ve also found out that the cost of the license for MS-SQL on Azure was significantly higher than PostgreSQL. After conducting a cost-benefit analysis, we decided to migrate our database to PostgreSQL to save costs.
+
+Before migrating to Azure, we decided to switch our database from MS-SQL to PostgreSQL on-premise first. This gave us the opportunity to test and fine-tune the migration process before making the final switch to Azure.
+
+## Challenges
+
+Despite using a third-party tool(DBConvert for MySQL & PostgreSQL) for the migration, we faced three main problems when exporting data to PostgreSQL. Firstly, some tables with plain text had utf-8 encoding problems. We overcame this problem by dump-restoring these tables.
+
+
+
+
+Secondly, our database had to be case-insensitive, but PostgreSQL does not have this as a default configuration. We handled it using `citext` with the ABP migration service.
+
+
+
+
+
+
+While everything was proceeding very smooth, we faced one last problem: importing binary data, such as the content of the NuGet packages. It was hard to understand that the binaries of the NuGet packages were different. Our paid commercial NuGet packages are being stored as binary data in the database. Therefore, it was the most compelling part of this migration to transfer the NuGet packages. Fortunately, we overcame the binary error. And we decided to write a custom .NET tool to move only the binary data from MS-SQL to PostgreSQL, thanks to the ABP Core team!
+
+
+## Conclusion
+
+One of the benefits of using PostgreSQL is the low license costs of the Azure platform. As the main contributors of ABP, we also use ABP Framework under the hood of our abp.io websites, we could easily switch to PostgreSQL. For those who want to switch their ABP project to PostgreSQL, check out [docs.abp.io/en/abp/latest/Entity-Framework-Core-PostgreSQL](https://docs.abp.io/en/abp/latest/Entity-Framework-Core-PostgreSQL). We had not used any MS-SQL specific function, therefore there was no need to make any changes in the repository classes. This means that the applications that were previously using MS-SQL can seamlessly switch to PostgreSQL without any modifications.
+
+Thanks to the flexibility of ABP, it has [PostgreSQL package](https://www.nuget.org/packages/Volo.Abp.EntityFrameworkCore.PostgreSql) which is 100% compatible with PostgreSQL. This helped us to make this migration very smooth and seamless.
+
+In conclusion, migrating a database from MS-SQL to PostgreSQL can be challenging, but it can bring significant cost savings in the long run. By testing and fine-tuning the migration process before making the final switch, we were able to overcome the challenges we’d faced during the migration process. Thanks to the flexibility of ABP, we were able to make the transition with minimal code changes. Also we didn't see any big performance differences between MS-SQL and PostgreSQL.
+
diff --git a/docs/en/Blog-Posts/2023-03-15-Migration-Mssql-Postgresql/images/citext-1.jpg b/docs/en/Blog-Posts/2023-03-15-Migration-Mssql-Postgresql/images/citext-1.jpg
new file mode 100644
index 0000000000..4dc01228fa
Binary files /dev/null and b/docs/en/Blog-Posts/2023-03-15-Migration-Mssql-Postgresql/images/citext-1.jpg differ
diff --git a/docs/en/Blog-Posts/2023-03-15-Migration-Mssql-Postgresql/images/citext-2.jpg b/docs/en/Blog-Posts/2023-03-15-Migration-Mssql-Postgresql/images/citext-2.jpg
new file mode 100644
index 0000000000..a70b0312bf
Binary files /dev/null and b/docs/en/Blog-Posts/2023-03-15-Migration-Mssql-Postgresql/images/citext-2.jpg differ
diff --git a/docs/en/Blog-Posts/2023-03-15-Migration-Mssql-Postgresql/images/citext-3.jpg b/docs/en/Blog-Posts/2023-03-15-Migration-Mssql-Postgresql/images/citext-3.jpg
new file mode 100644
index 0000000000..c8a95d61a5
Binary files /dev/null and b/docs/en/Blog-Posts/2023-03-15-Migration-Mssql-Postgresql/images/citext-3.jpg differ
diff --git a/docs/en/Blog-Posts/2023-03-15-Migration-Mssql-Postgresql/images/db-converter.jpg b/docs/en/Blog-Posts/2023-03-15-Migration-Mssql-Postgresql/images/db-converter.jpg
new file mode 100644
index 0000000000..9c5371d36c
Binary files /dev/null and b/docs/en/Blog-Posts/2023-03-15-Migration-Mssql-Postgresql/images/db-converter.jpg differ
diff --git a/docs/en/Blog-Posts/2023-03-15-Migration-Mssql-Postgresql/images/mssql-postges.png b/docs/en/Blog-Posts/2023-03-15-Migration-Mssql-Postgresql/images/mssql-postges.png
new file mode 100644
index 0000000000..c1766bc713
Binary files /dev/null and b/docs/en/Blog-Posts/2023-03-15-Migration-Mssql-Postgresql/images/mssql-postges.png differ
diff --git a/docs/en/Blog-Posts/2023-03-15-Migration-Mssql-Postgresql/images/mssql.png b/docs/en/Blog-Posts/2023-03-15-Migration-Mssql-Postgresql/images/mssql.png
new file mode 100644
index 0000000000..2333842ea6
Binary files /dev/null and b/docs/en/Blog-Posts/2023-03-15-Migration-Mssql-Postgresql/images/mssql.png differ
diff --git a/docs/en/Blog-Posts/2023-03-15-Migration-Mssql-Postgresql/images/sql-server-to-postgres.jpg b/docs/en/Blog-Posts/2023-03-15-Migration-Mssql-Postgresql/images/sql-server-to-postgres.jpg
new file mode 100644
index 0000000000..645de45341
Binary files /dev/null and b/docs/en/Blog-Posts/2023-03-15-Migration-Mssql-Postgresql/images/sql-server-to-postgres.jpg differ
diff --git a/docs/en/Blog-Posts/2023-03-16-Migration-Abp.io-Azure/POST.md b/docs/en/Blog-Posts/2023-03-16-Migration-Abp.io-Azure/POST.md
new file mode 100644
index 0000000000..82384b3f67
--- /dev/null
+++ b/docs/en/Blog-Posts/2023-03-16-Migration-Abp.io-Azure/POST.md
@@ -0,0 +1,49 @@
+
+# On-Prem to Azure: Migration of abp.io Platform to Azure
+
+
+
+
+Migrating a Kubernetes platform with a database from our own dedicated servers to Azure can be a compelling task, but it can be a necessary one to take advantage of the benefits that the cloud service offers. In this post, we will discuss the reasons for migrating from a on-premise platform to Azure, the steps taken to create and configure the [abp.io platform](https://abp.io) on Azure, and the benefits gained from the migration.
+
+### On-Premise Server: The old platform
+
+There were several reasons for migrating from the old on-premise platform to Azure. First, the Kubernetes cluster and the database were on the same Windows server. Additionally, the Linux virtual machines in Kubernetes were on the Windows server and had limited resources. Furthermore, the Kubernetes maintenance was quite challenging, which was another reason for the migration.
+
+### Reasons for Moving to Azure: The new platform
+
+The decision to move to the cloud was made to eliminate the disadvantages of the old platform. The migration to Azure meant that the resources would be independent of each other but faster in terms of communicating with each other. The platform would also take advantage of cloud security and availability. The managed Kubernetes service that Azure offers comes with autoscaling and loadbalancing, which makes the platform more reliable. Finally, the migration to Azure would provide a better quality service to global customers and the community.
+
+### Before Moving to Azure
+
+Before migrating to Azure, we decided to switch our database from MS-SQL to PostgreSQL on-premise first. This gave us the opportunity to test and fine-tune the migration process before making the final switch to Azure.You can check the details of database migration from this article [Migrating from MS-SQL to Postgresql](https://community.abp.io/posts/migrating-from-mssql-to-postgresql-lbi5anlv).
+
+The platform was tested in a staging environment created on Azure with the same resources as the production environment. The staging environment was used to test and optimize the migration process, including the migration of data from the old platform to Azure, which was tested multiple times to ensure success.
+
+### Creating and Configuring the abp.io Platform on Azure
+
+Several steps were taken to create and configure the abp.io platform on Azure. [Terraform](https://www.terraform.io/) was used to create the infrastructure (VM, Private Network, AKS, Postgresql Flexible Server...), while [Ansible](https://www.ansible.com/) was used to configure the Azure resources like Terraform, Helm, Kubectl, Docker, VPN, Redis, Prometheus, Grafana, ElasticSearch, Kibana and so on.... Azure DevOps pipelines and release were used for AKS deployment. The most time-consuming part in this process was to prepare, test and optimize the terraform and ansible settings files.
+
+To access our platform, which is configured on a private network in Azure, we require a VPN connection. To enable this, we have installed [Wireguard](https://www.wireguard.com/) - an open source VPN service - by creating a virtual machine using Terraform and configuring it with Ansible in Azure. This approach has made the process efficient and streamlined.
+
+
+
+The most important step was to transfer the data in both the database and Kubernetes of the volumes. rsync (remote sync commands) were used to transfer the data from Kubernetes volumes to Azure NFS through the VPN machine. Additionally, `pg_dump` and `pg_restore` were used to transfer the PostgreSQL database through the machine with VPN.
+
+Before the production environment, the data migration was tested many times for the staging environment. We estimated this migration to take max 1.5 hours. The ABP community was informed that there may be interruptions during the hours designated for the transition to Azure. To inform our customers and community, we created a status page before this migration. The new status page is [status.abp.io](https://status.abp.io). From now on we wil make all the infrastructural announcements on [status.abp.io](https://status.abp.io). We used [Upptime](https://upptime.js.org) which is an open-source uptime monitor and status page provider. During the migration of the production environment, the websites and databases were still up and running. After the data transfer, the only remaining step was to direct the traffic of the already standing abp.io sites to the Azure Kubernetes service via Cloudflare.
+
+We would like to happily state that **we were offline for only 4 minutes** during this transition.
+
+
+
+
+### Benefits of Moving to Azure
+
+The migration to Azure resulted in several benefits. The platform is now more reliable, scalable, secure, solid with built-in one-click backup and recovery capabilities for abp.io. Additionally, the critical resources are in a private network, making them more secure than the old environment. When we initially compared the speed of our abp.io sites before and after migrating to Azure, we were pleasantly surprised by the significant improvement in performance. To be honest, we did not expect such a speed increase.
+
+
+
+In conclusion, migrating a Kubernetes platform with a database from on-premise to Azure is a complex process that requires careful planning and execution. However, the benefits gained from the migration make the process worthwhile. By moving to Azure, the abp.io platform now has a more reliable and available infrastructure that is more secure than the old environment. The migration also resulted in significant improvements in connection speeds, which ultimately provides a better service to global customers and the community.
+
+
+
diff --git a/docs/en/Blog-Posts/2023-03-16-Migration-Abp.io-Azure/images/abpio-azure.png b/docs/en/Blog-Posts/2023-03-16-Migration-Abp.io-Azure/images/abpio-azure.png
new file mode 100644
index 0000000000..18e2379268
Binary files /dev/null and b/docs/en/Blog-Posts/2023-03-16-Migration-Abp.io-Azure/images/abpio-azure.png differ
diff --git a/docs/en/Blog-Posts/2023-03-16-Migration-Abp.io-Azure/images/az-infra.png b/docs/en/Blog-Posts/2023-03-16-Migration-Abp.io-Azure/images/az-infra.png
new file mode 100644
index 0000000000..facbb4141b
Binary files /dev/null and b/docs/en/Blog-Posts/2023-03-16-Migration-Abp.io-Azure/images/az-infra.png differ
diff --git a/docs/en/Blog-Posts/2023-03-16-Migration-Abp.io-Azure/images/speed.png b/docs/en/Blog-Posts/2023-03-16-Migration-Abp.io-Azure/images/speed.png
new file mode 100644
index 0000000000..a9c99ea321
Binary files /dev/null and b/docs/en/Blog-Posts/2023-03-16-Migration-Abp.io-Azure/images/speed.png differ
diff --git a/docs/en/Blog-Posts/2023-03-16-Migration-Abp.io-Azure/images/terra-wire.png b/docs/en/Blog-Posts/2023-03-16-Migration-Abp.io-Azure/images/terra-wire.png
new file mode 100644
index 0000000000..ad003ac362
Binary files /dev/null and b/docs/en/Blog-Posts/2023-03-16-Migration-Abp.io-Azure/images/terra-wire.png differ
diff --git a/docs/en/Blog-Posts/2023-03-23 v7_1_Release_Stable/POST.md b/docs/en/Blog-Posts/2023-03-23 v7_1_Release_Stable/POST.md
new file mode 100644
index 0000000000..0cecf0fb72
--- /dev/null
+++ b/docs/en/Blog-Posts/2023-03-23 v7_1_Release_Stable/POST.md
@@ -0,0 +1,82 @@
+# ABP.IO Platform 7.1 Final Has Been Released!
+
+[ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) 7.1 versions have been released today.
+
+## What's New With Version 7.1?
+
+All the new features were already explained in detail in the [7.1 RC Announcement Post](https://blog.abp.io/abp/ABP.IO-Platform-7.1-RC-Has-Been-Published), so no need to go over them again. Check it out for more details.
+
+## Getting Started with 7.1
+
+### Creating New Solutions
+
+You can create a new solution with the ABP Framework version 7.1 by either using the `abp new` command or generating the CLI command on the [get started page](https://abp.io/get-started).
+
+> See the [getting started document](https://docs.abp.io/en/abp/latest/Getting-Started) for more.
+
+### How to Upgrade an Existing Solution
+
+#### Install/Update the ABP CLI
+
+First of all, install the ABP CLI or upgrade it to the latest version.
+
+If you haven't installed it yet:
+
+```bash
+dotnet tool install -g Volo.Abp.Cli
+```
+
+To update the existing CLI:
+
+```bash
+dotnet tool update -g Volo.Abp.Cli
+```
+
+#### Upgrading Existing Solutions with the ABP Update Command
+
+[ABP CLI](https://docs.abp.io/en/abp/latest/CLI) provides a handy command to update all the ABP related NuGet and NPM packages in your solution with a single command:
+
+```bash
+abp update
+```
+
+Run this command in the root folder of your solution.
+
+## Migration Guides
+
+This version includes a very minor breaking change and it doesn't affect most of the applications. Check [the migration guide](https://docs.abp.io/en/abp/7.1/Migration-Guides/Abp-7_1) for the details.
+
+## Community News
+
+## ABP Community Talks 2023.2
+
+The next ABP Community Talks will take place on March 30, at 18:00 (UTC).
+
+
+
+In this episode, core ABP Framework developers will discuss the benefits of using the ABP Framework as a .NET developer instead of creating your own solution from scratch. They will answer most of the common doubts about using ABP and application frameworks in general. You will better understand how ABP makes a developer’s life easier and more enjoyable while cutting production costs. We will also have a question - answer session after the talk, as always. I think this talk will be useful for every .NET developer whether they use ABP or not.
+
+**[CLICK HERE to register for the event and join us](https://kommunity.com/volosoft/events/abp-community-talks-20232-why-use-abp-framework-as-a-net-developer-e3254183)**.
+
+## Introducing the first ABP .NET Conference!
+
+As the ABP team, we've executed more than 10 [online events](https://community.abp.io/events) and gained a good experience of software talks. In May, we are organizing a full-featured software conference, named **ABP Dotnet Conference 2023**!
+
+
+
+We are still organizing the speakers, talks and schedule. There will be 12 sessions about software development and .NET. These will also include a few ABP-related talks. You can **follow https://abp.io/conference website** and buy early bird tickets from now.
+
+### New ABP Community Posts
+
+There are exciting articles contributed by the ABP community as always. I will highlight some of them here:
+
+* [Creating Dockerfile for ABP Applications](https://community.abp.io/posts/creating-dockerfile-for-abp-applications-caj4fkxa) by [Anto Subash](https://community.abp.io/members/antosubash)
+* [IdentityUser Relationship and Extending it](https://community.abp.io/posts/identityuser-relationship-and-extending-it-xtv79mpx) by [Onur Pıçakçı](https://community.abp.io/members/onurpicakci)
+* [Streamline Localization in Your ABP Project](https://community.abp.io/posts/streamline-localization-in-your-abp-project-1t12rmjc) by [Salih Özkara](https://community.abp.io/members/salih)
+* [.Net Microservice template with ABP](https://community.abp.io/posts/.net-microservice-template-with-abp-53r52ryy) by [Anto Subash](https://community.abp.io/members/antosubash)
+
+Thanks to the ABP Community for all the content they have published. You can also [post your ABP related (text or video) content](https://community.abp.io/articles/submit) to the ABP Community.
+
+## About the Next Version
+
+The next feature version will be 7.2. You can follow the [release planning here](https://github.com/abpframework/abp/milestones). Please [submit an issue](https://github.com/abpframework/abp/issues/new) if you have any problems with this version.
diff --git a/docs/en/Blog-Posts/2023-03-23 v7_1_Release_Stable/abp-comm-talks-2023-2.png b/docs/en/Blog-Posts/2023-03-23 v7_1_Release_Stable/abp-comm-talks-2023-2.png
new file mode 100644
index 0000000000..730e48dc0b
Binary files /dev/null and b/docs/en/Blog-Posts/2023-03-23 v7_1_Release_Stable/abp-comm-talks-2023-2.png differ
diff --git a/docs/en/Blog-Posts/2023-03-23 v7_1_Release_Stable/abp-conf-2023.png b/docs/en/Blog-Posts/2023-03-23 v7_1_Release_Stable/abp-conf-2023.png
new file mode 100644
index 0000000000..889ddbdc0a
Binary files /dev/null and b/docs/en/Blog-Posts/2023-03-23 v7_1_Release_Stable/abp-conf-2023.png differ
diff --git a/docs/en/Blog-Posts/2023-03-24-status.abp.io/POST.md b/docs/en/Blog-Posts/2023-03-24-status.abp.io/POST.md
new file mode 100644
index 0000000000..42fd131f3b
--- /dev/null
+++ b/docs/en/Blog-Posts/2023-03-24-status.abp.io/POST.md
@@ -0,0 +1,114 @@
+# Creating a Custom Status Page for abp.io with Upptime
+
+## Introduction
+In today's digital world, providing reliable and transparent information about your platform's availability is essential to maintaining trust among your community and customers. With the growing number of abp.io users, we needed a dedicated status page [status.abp.io](https://status.abp.io/) to keep everyone informed about our platform's health. To achieve this, we utilized the open-source project [Upptime](https://upptime.js.org/) and built a custom status page on [GitHub Pages](https://pages.github.com/). In this article, we'll guide you through the process of creating our own status page and customizing it to suit our needs.
+
+
+
+## Why we chose Upptime
+[Upptime](https://github.com/upptime/upptime) is an open-source, easy-to-use, and cost-effective solution for monitoring websites and APIs. It offers essential features, such as downtime alerts, response time monitoring, and status history. We decided to use Upptime because of its compatibility with GitHub Pages, ease of customization, comprehensive [documentation ](https://upptime.js.org/docs/) and discord notifications.
+
+
+
+#### Advantages of Upptime
+* Open-source: Allows easy customization and community support.
+
+* GitHub Pages compatibility: Seamless integration with GitHub Pages for hosting.
+
+* Cost-effective: Utilizes GitHub Actions, which provides free monitoring within the GitHub Actions usage limits.
+
+* Comprehensive documentation: Easy-to-follow instructions for setting up and customizing the status page.
+
+#### Disadvantages of Upptime
+* Limited monitoring capabilities: Upptime offers basic monitoring features but lacks advanced capabilities found in dedicated monitoring tools.
+
+* Dependence on GitHub Actions: Upptime relies on GitHub Actions, which may pose limitations for users unfamiliar with GitHub's ecosystem or those with large-scale projects.
+
+* No built-in alerting system: Users must rely on third-party integrations or custom solutions for notifications, requiring additional configuration.
+
+* Limited customization options: Upptime allows for some customization, but options are limited compared to comprehensive monitoring platforms.
+
+* Self-hosted limitations: As a self-hosted solution, users are responsible for maintaining and managing their own infrastructure, which may not be ideal for those who prefer a fully managed monitoring solution.
+
+
+## How to set up the status page on GitHub Pages
+To get started with our custom status page, we followed the instructions in the [Upptime documentation](https://upptime.js.org/docs/). Here's a summary of the steps we took:
+
+* Fork the Upptime [template repository](https://github.com/upptime/upptime) to our own GitHub account as [abpio-status](https://github.com/abpframework/abpio-status).
+
+* Configure the GitHub Actions workflow. We configured the GitHub Actions workflow by adding the following lines to the [`.github/workflows/uptime.yml`](https://github.com/abpframework/abpio-status/blob/master/.github/workflows/uptime.yml)
+
+* Add the monitored endpoints. We added the monitored endpoints (our abp.io websites) to the [.upptimerc.yml](https://github.com/abpframework/abpio-status/blob/master/.upptimerc.yml) file. This file is located in the root of the repository and contains a list of URLs that Upptime monitors.
+
+```yaml
+sites:
+ - name: abp.io
+ url: https://abp.io/health-status
+ - name: community.abp.io
+ url: https://community.abp.io/health-status
+ - name: commercial.abp.io
+ url: https://commercial.abp.io/health-status
+ - name: nuget.abp.io
+ url: https://nuget.abp.io/health-status
+ - name: docs.abp.io
+ url: https://docs.abp.io/health-status
+ - name: support.abp.io
+ url: https://support.abp.io/health-status
+ - name: blog.abp.io
+ url: https://blog.abp.io/health-status
+ - name: commercial-demo.abp.io
+ url: https://commercial-demo.abp.io/health-status
+```
+* Enable GitHub Pages. Finally, we enabled GitHub Pages for our forked repository by going to the repository's settings and selecting the gh-pages branch as the source. This made our status page accessible at [status.abp.io](https://status.abp.io/).
+
+## Customizing the status page
+
+After setting up the default Upptime status page, we focused on customizing it to align with our brand and provide a consistent experience for our community and customers. We made the following changes:
+
+* Updating the logo and favicon. We replaced the default logo and favicon with our own abp.io branded assets. This involved adding the new image files to the repository and updating the references in the `.upptimerc.yml` file:
+
+* Customizing the color scheme and typography. We customized the color scheme and typography to match our corporate identity by editing the `.upptimerc.yml` file:
+
+```yaml
+status-website:
+ theme: dark
+ # Add your custom domain name, or remove the `cname` line if you don't have a domain
+ # Uncomment the `baseUrl` line if you don't have a custom domain and add your repo name there
+ cname: status.abp.io
+ # baseUrl: /abpio-status
+ logoUrl: https://commercial.abp.io/assets/svg/abp-logo-light.svg
+ favicon: https://raw.githubusercontent.com/abpframework/abpio-status/master/assets/abp-logo-without-text.svg
+ faviconSvg: https://raw.githubusercontent.com/abpframework/abpio-status/master/assets/abp-logo-without-text.svg
+```
+## Creating GitHub Issues for Maintenance Information on status.abp.io
+
+To provide maintenance information for your status page, you can create GitHub issues in your repository. This allows you to inform your users about planned downtime or ongoing maintenance work.
+
+
+
+## Discord Notifications
+
+### Create a Discord Webhook
+
+To set up Discord notifications for your status.abp.io status page using [Upptime documentation](https://upptime.js.org/docs/notifications#discord), follow these steps:
+
+* In Discord, go to "Server Settings" > "Integrations" > "Create Webhook."
+* Customize the Webhook name, choose a channel, and copy the Webhook URL.
+
+### Configure GitHub Actions
+* In your Upptime repository, go to the "Settings" tab.
+* Click on "Secrets" and then "New repository secret."
+* Add secret: Name it DISCORD_WEBHOOK_URL and paste the Webhook URL as the value.
+* Add environment variables NOTIFICATION_DISCORD_WEBHOOK and NOTIFICATION_DISCORD set it to true.
+
+Your status page will now send notifications to your Discord channel whenever there's a change in your platform's status.
+
+
+
+
+## Conclusion
+If your primary goal is to create a simple, cost-effective status page with basic monitoring features, Upptime is an excellent choice. Its open-source nature, seamless integration with GitHub Pages, and comprehensive documentation make it a user-friendly option.
+
+If you require advanced monitoring capabilities or prefer a fully managed monitoring solution, you may want to explore dedicated monitoring tools, such as Pingdom, Uptime Robot, or Datadog. These tools typically offer more robust monitoring features, built-in alerting systems, and customizable dashboards.
+
+Creating a custom status page for abp.io using Upptime and GitHub Pages proved to be an efficient and cost-effective solution. By following the documentation and customizing the template, we were able to provide our community and customers with a reliable source of information about our platform's availability. With this new status page [status.abp.io](https://status.abp.io/), we can continue to build trust and transparency as our platform grows and evolves.
diff --git a/docs/en/Blog-Posts/2023-03-24-status.abp.io/images/discord.png b/docs/en/Blog-Posts/2023-03-24-status.abp.io/images/discord.png
new file mode 100644
index 0000000000..b9f66bfead
Binary files /dev/null and b/docs/en/Blog-Posts/2023-03-24-status.abp.io/images/discord.png differ
diff --git a/docs/en/Blog-Posts/2023-03-24-status.abp.io/images/gh-status.png b/docs/en/Blog-Posts/2023-03-24-status.abp.io/images/gh-status.png
new file mode 100644
index 0000000000..b48229b479
Binary files /dev/null and b/docs/en/Blog-Posts/2023-03-24-status.abp.io/images/gh-status.png differ
diff --git a/docs/en/Blog-Posts/2023-03-24-status.abp.io/images/issue.png b/docs/en/Blog-Posts/2023-03-24-status.abp.io/images/issue.png
new file mode 100644
index 0000000000..39fda7a869
Binary files /dev/null and b/docs/en/Blog-Posts/2023-03-24-status.abp.io/images/issue.png differ
diff --git a/docs/en/Blog-Posts/2023-03-24-status.abp.io/images/status-abpio.png b/docs/en/Blog-Posts/2023-03-24-status.abp.io/images/status-abpio.png
new file mode 100644
index 0000000000..528a5755d7
Binary files /dev/null and b/docs/en/Blog-Posts/2023-03-24-status.abp.io/images/status-abpio.png differ
diff --git a/docs/en/CLI.md b/docs/en/CLI.md
index 9feb810730..49b5ca830b 100644
--- a/docs/en/CLI.md
+++ b/docs/en/CLI.md
@@ -164,6 +164,7 @@ For more samples, go to [ABP CLI Create Solution Samples](CLI-New-Command-Sample
* `--local-framework-ref --abp-path`: Uses local projects references to the ABP framework instead of using the NuGet packages. This can be useful if you download the ABP Framework source code and have a local reference to the framework from your application.
* `--no-random-port`: Uses template's default ports.
* `--skip-installing-libs` or `-sib`: Skip installing client side packages.
+* `--with-public-website`: **Public Website** is a front-facing website for describing your project, listing your products and doing SEO for marketing purposes. Users can login and register on your website with this website.
See some [examples for the new command](CLI-New-Command-Samples.md) here.
diff --git a/docs/en/Community-Articles/2023-02-22-Streamline-Localization-In-Your-ABP-Project/POST.md b/docs/en/Community-Articles/2023-02-22-Streamline-Localization-In-Your-ABP-Project/POST.md
new file mode 100644
index 0000000000..63936521c6
--- /dev/null
+++ b/docs/en/Community-Articles/2023-02-22-Streamline-Localization-In-Your-ABP-Project/POST.md
@@ -0,0 +1,44 @@
+## Streamline Localization in Your ABP Project
+
+Making localization changes to an ABP project can be a daunting task, especially if you're dealing with multiple languages and translations. During development, it's easy to overlook some changes and that leads to inconsistencies across different languages. Fortunately, I have developed a tool that can help streamline the localization process and ensure consistency across different languages.
+
+The tool is a console application that uses JSON files to manage localization keys and their translations. It addresses three common scenarios that can arise during localization:
+
+
+1. When the argument count of a key changes, it can be difficult to update the translations for all languages. My tool solves this problem by scanning all JSON files in the project folder and identifying any keys that have mismatched argument counts. It then offers two options to the user: delete the mismatched translations or export them as a JSON file for manual editing.
+
+2. When a new key is added to the project, forgetting to add its translations to all the other languages is easy. My tool helps to avoid this issue by scanning the default language's JSON file and identifying any keys that don't have translations in other languages. It then exports these keys as a JSON file that can be used to add missing translations.
+
+3. When a key's name is changed, it's important to update its translations in all the other languages. My tool makes this task simple by scanning all the JSON files in the project folder and updating any translations of the old key name with the new one.
+
+The tool also includes an export feature that allows users to modify translations outside of the application and import them back into the JSON files.
+
+## How it Helps
+
+With my Localization Key Synchronizer tool, you can perform complex localization changes more quickly and easily than by manually sifting through files and making changes one-by-one. This can save you significant time and effort, especially if you're working with a large number of languages or translations.
+
+## How it Works
+
+When you run the Localization Key Synchronizer tool, it presents you with three options:
+
+1. Find Asynchronous Keys
+2. Apply Changes in the Exported File
+3. Replace Keys
+
+If you select "Find Asynchronous Keys," the tool prompts you to enter the default language path. Once you've entered the path, the tool displays all of the JSON files in the same folder as a multi-select list. After selecting one or more files, you are asked whether you want to find keys that do not match the number of arguments, missing keys, or both. If you select "Missing Keys," the tool prompts you to enter the absolute path to export the missing keys. After you've entered the path, the export process starts, and the tool closes.
+
+
+
+If you select "Apply Changes in the Exported File" at the main menu, the tool prompts you to enter the path to the exported file. After you've entered the path, the import process starts, and the tool closes.
+
+
+
+If you select "Replace Keys," the tool prompts you to enter the localization folder path, the old key, the new key, and the JSON files to apply the changes to. Once you've entered all the required information and made your selections, the tool performs the replacements and closes.
+
+
+
+## Conclusion
+
+If you're struggling to manage localization changes in an ABP project, give my Localization Key Synchronizer tool a try. It can help streamline your workflow and make the process much more manageable. You can find the tool on [GitHub](https://github.com/abpframework/abp/tree/dev/tools/localization-key-synchronizer).
+
+To use the tool, simply run the console application and follow the prompts. It's a user-friendly solution that helps to ensure localization consistency in your ABP project. Give it a try and let me know what you think!
diff --git a/docs/en/Community-Articles/2023-02-22-Streamline-Localization-In-Your-ABP-Project/images/Part1.gif b/docs/en/Community-Articles/2023-02-22-Streamline-Localization-In-Your-ABP-Project/images/Part1.gif
new file mode 100644
index 0000000000..f2e6b66e64
Binary files /dev/null and b/docs/en/Community-Articles/2023-02-22-Streamline-Localization-In-Your-ABP-Project/images/Part1.gif differ
diff --git a/docs/en/Community-Articles/2023-02-22-Streamline-Localization-In-Your-ABP-Project/images/Part2.gif b/docs/en/Community-Articles/2023-02-22-Streamline-Localization-In-Your-ABP-Project/images/Part2.gif
new file mode 100644
index 0000000000..9bc70d361d
Binary files /dev/null and b/docs/en/Community-Articles/2023-02-22-Streamline-Localization-In-Your-ABP-Project/images/Part2.gif differ
diff --git a/docs/en/Community-Articles/2023-02-22-Streamline-Localization-In-Your-ABP-Project/images/Part3.gif b/docs/en/Community-Articles/2023-02-22-Streamline-Localization-In-Your-ABP-Project/images/Part3.gif
new file mode 100644
index 0000000000..8a8ae32d25
Binary files /dev/null and b/docs/en/Community-Articles/2023-02-22-Streamline-Localization-In-Your-ABP-Project/images/Part3.gif differ
diff --git a/docs/en/Community-Articles/2023-03-15-Migration-Mssql-Postgresql/POST.md b/docs/en/Community-Articles/2023-03-15-Migration-Mssql-Postgresql/POST.md
new file mode 100644
index 0000000000..14571157b6
--- /dev/null
+++ b/docs/en/Community-Articles/2023-03-15-Migration-Mssql-Postgresql/POST.md
@@ -0,0 +1,37 @@
+# Migrating from MS-SQL to Postgresql
+
+
+
+## Introduction
+
+Database migration is a common practice for organizations that want to move from one database system to another. This can be for a variety of reasons, including cost, performance, and features. In this article, we will discuss the process of migrating a database from MS-SQL to PostgreSQL, the challenges that may arise during the migration, and how to overcome them. And we recently moved the main database of https://abp.io platform from MS-SQL to PostgreSQL.
+
+In our case, we decided to switch our database from Microsoft SQL Server (MS-SQL) to PostgreSQL because we wanted to move our on-premise platform to Azure. We’ve also found out that the cost of the license for MS-SQL on Azure was significantly higher than PostgreSQL. After conducting a cost-benefit analysis, we decided to migrate our database to PostgreSQL to save costs.
+
+Before migrating to Azure, we decided to switch our database from MS-SQL to PostgreSQL on-premise first. This gave us the opportunity to test and fine-tune the migration process before making the final switch to Azure.
+
+## Challenges
+
+Despite using a third-party tool(DBConvert for MySQL & PostgreSQL) for the migration, we faced three main problems when exporting data to PostgreSQL. Firstly, some tables with plain text had utf-8 encoding problems. We overcame this problem by dump-restoring these tables.
+
+
+
+
+Secondly, our database had to be case-insensitive, but PostgreSQL does not have this as a default configuration. We handled it using `citext` with the ABP migration service.
+
+
+
+
+
+
+While everything was proceeding very smooth, we faced one last problem: importing binary data, such as the content of the NuGet packages. It was hard to understand that the binaries of the NuGet packages were different. Our paid commercial NuGet packages are being stored as binary data in the database. Therefore, it was the most compelling part of this migration to transfer the NuGet packages. Fortunately, we overcame the binary error. And we decided to write a custom .NET tool to move only the binary data from MS-SQL to PostgreSQL, thanks to the ABP Core team!
+
+
+## Conclusion
+
+One of the benefits of using PostgreSQL is the low license costs of the Azure platform. As the main contributors of ABP, we also use ABP Framework under the hood of our abp.io websites, we could easily switch to PostgreSQL. For those who want to switch their ABP project to PostgreSQL, check out [docs.abp.io/en/abp/latest/Entity-Framework-Core-PostgreSQL](https://docs.abp.io/en/abp/latest/Entity-Framework-Core-PostgreSQL). We had not used any MS-SQL specific function, therefore there was no need to make any changes in the repository classes. This means that the applications that were previously using MS-SQL can seamlessly switch to PostgreSQL without any modifications.
+
+Thanks to the flexibility of ABP, it has [PostgreSQL package](https://www.nuget.org/packages/Volo.Abp.EntityFrameworkCore.PostgreSql) which is 100% compatible with PostgreSQL. This helped us to make this migration very smooth and seamless.
+
+In conclusion, migrating a database from MS-SQL to PostgreSQL can be challenging, but it can bring significant cost savings in the long run. By testing and fine-tuning the migration process before making the final switch, we were able to overcome the challenges we’d faced during the migration process. Thanks to the flexibility of ABP, we were able to make the transition with minimal code changes. Also we didn't see any big performance differences between MS-SQL and PostgreSQL.
+
diff --git a/docs/en/Community-Articles/2023-03-15-Migration-Mssql-Postgresql/images/citext-1.jpg b/docs/en/Community-Articles/2023-03-15-Migration-Mssql-Postgresql/images/citext-1.jpg
new file mode 100644
index 0000000000..4dc01228fa
Binary files /dev/null and b/docs/en/Community-Articles/2023-03-15-Migration-Mssql-Postgresql/images/citext-1.jpg differ
diff --git a/docs/en/Community-Articles/2023-03-15-Migration-Mssql-Postgresql/images/citext-2.jpg b/docs/en/Community-Articles/2023-03-15-Migration-Mssql-Postgresql/images/citext-2.jpg
new file mode 100644
index 0000000000..a70b0312bf
Binary files /dev/null and b/docs/en/Community-Articles/2023-03-15-Migration-Mssql-Postgresql/images/citext-2.jpg differ
diff --git a/docs/en/Community-Articles/2023-03-15-Migration-Mssql-Postgresql/images/citext-3.jpg b/docs/en/Community-Articles/2023-03-15-Migration-Mssql-Postgresql/images/citext-3.jpg
new file mode 100644
index 0000000000..c8a95d61a5
Binary files /dev/null and b/docs/en/Community-Articles/2023-03-15-Migration-Mssql-Postgresql/images/citext-3.jpg differ
diff --git a/docs/en/Community-Articles/2023-03-15-Migration-Mssql-Postgresql/images/db-converter.jpg b/docs/en/Community-Articles/2023-03-15-Migration-Mssql-Postgresql/images/db-converter.jpg
new file mode 100644
index 0000000000..9c5371d36c
Binary files /dev/null and b/docs/en/Community-Articles/2023-03-15-Migration-Mssql-Postgresql/images/db-converter.jpg differ
diff --git a/docs/en/Community-Articles/2023-03-15-Migration-Mssql-Postgresql/images/sql-server-to-postgres.jpg b/docs/en/Community-Articles/2023-03-15-Migration-Mssql-Postgresql/images/sql-server-to-postgres.jpg
new file mode 100644
index 0000000000..645de45341
Binary files /dev/null and b/docs/en/Community-Articles/2023-03-15-Migration-Mssql-Postgresql/images/sql-server-to-postgres.jpg differ
diff --git a/docs/en/Community-Articles/2023-03-20- IdentityUser-Relationships/Post.md b/docs/en/Community-Articles/2023-03-20- IdentityUser-Relationships/Post.md
new file mode 100644
index 0000000000..48db4e9557
--- /dev/null
+++ b/docs/en/Community-Articles/2023-03-20- IdentityUser-Relationships/Post.md
@@ -0,0 +1,307 @@
+## Introduction
+In this article, I will talk about the relationships of IdentityUser in every web application that can be created with the ABP framework. When you read this article, you will learn how to extend the user entity in the applications you develop using the ABP framework with a primitive type, extending the user by associating the user with another entity (User-many-to-one-X).
+
+
+## Creating the Solution
+>For the source code of the application: https://github.com/onurpicakci/Abp-Identity-Relationship
+
+In this article we will use EF Core as the database provider and MVC as the user interface framework. But Angular, Blazor Server and Blazor WebAssembly also work. ABP Framework offers starter templates to get started faster. We can create a new starter template using the ABP CLI:
+
+```bash
+abp new IdentityRelationship
+```
+
+After the project is created, you can run the `IdentityRelationship.DbMigrator` project to create the database and seed the initial data. You can then run the `IdentityRelationship.Web` project to see our application run.
+
+> The default admin username is **admin** and the password is **1q2w3E\***
+
+
+
+## Module Entity Extensions
+
+The module entity extension system is a high level extension system that allows you to define new properties for existing entities of the depended modules. It automatically adds properties to the entity, database, HTTP API and the user interface in a single point.
+
+### Extending the User Entity With a Primitive Type
+
+Open the `IdentityRelationshipModuleExtensionConfigurator` class inside the `Domain.Shared` project of your solution and change the `ConfigureExtraProperties` method as shown below to add an `IdentificationNumber` property to the `IdentityUser` entity of the [Identity Module](https://docs.abp.io/en/abp/latest/Modules/Identity).
+
+```csharp
+public static void ConfigureExtraProperties()
+{
+ OneTimeRunner.Run(() =>
+ {
+ ObjectExtensionManager.Instance.Modules()
+ .ConfigureIdentity(identity =>
+ {
+ identity.ConfigureUser(user =>
+ {
+ user.AddOrUpdateProperty( //property type: string
+ "IdentificationNumber", //property name
+ property =>
+ {
+ //validation rules
+ property.Attributes.Add(string.Empty);
+ property.Attributes.Add(
+ new StringLengthAttribute(64) {
+ MinimumLength = 4
+ }
+ );
+
+ //...other configurations for this property
+ }
+ );
+ });
+ });
+ });
+}
+```
+> This method is called inside the IdentityRelationshipDomainSharedModule at the beginning of the application. OneTimeRunner is a utility class that guarantees to execute this code only one time per application, since multiple calls are unnecessary.
+
+If you want to localize, open the `IdentityRelationship.Domain.Shared` project and create a new localization in your `/Localization/IdentityRelationship/en.json` file.
+
+```json
+ "IdentificationNumber": "Identification Number"
+ ```
+Once you define a property, it appears in the create and update forms of the related entity:
+
+ 
+
+ New properties also appear in the data table of the related page:
+
+ 
+
+
+## Navigation Properties / Foreign Keys
+
+It is supported to add an extension property to an entity that is the Id of another entity (foreign key).
+
+### Example: Let's associate a department in the database with a user
+
+First, create a `Departments` folder in the `IdentityRelationship.Domain` project and add the `Department` class inside:
+```csharp
+using System;
+using Volo.Abp.Domain.Entities;
+
+namespace IdentityRelationship.Departments;
+
+public class Department : AggregateRoot
+{
+ public string Name { get; set; }
+}
+```
+
+EF Core requires that you relate the entities with your `DbContext`. The easiest way to do so is adding a DbSet property to the `IdentityRelationshipDbContext` class in the `IdentityRelationship.EntityFrameworkCore` project, as shown below:
+
+```csharp
+ public DbSet Departments { get; set; }
+```
+
+Then in the `IdentityRelationship.EntityFrameworkCore` project of your solution, open the `/EntityFrameworkCore/IdentityRelationshipEfCoreEntityExtensionMappings` class and update your code:
+
+```csharp
+public static class IdentityRelationshipEfCoreEntityExtensionMappings
+{
+ private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner();
+
+ public static void Configure()
+ {
+ IdentityRelationshipGlobalFeatureConfigurator.Configure();
+ IdentityRelationshipModuleExtensionConfigurator.Configure();
+
+ OneTimeRunner.Run(() =>
+ {
+ ObjectExtensionManager.Instance
+ .MapEfCoreProperty(
+ "DepartmentId",
+ (entityBuilder, propertyBuilder) => { propertyBuilder.HasMaxLength(128); }
+ );
+
+ });
+ }
+}
+```
+
+This class can be used to map these extra properties to table fields in the database. Please read [this](https://docs.abp.io/en/abp/latest/Customizing-Application-Modules-Extending-Entities?_ga=2.21022651.140118448.1679289046-1173891759.1672473062) document to improve your understanding of what we are doing.
+
+We need to create a new migration to see the changes in the database. Open your `EntityFrameworkCore` project in the terminal and run the following command (this depends on the IDE you are using).
+
+
+
+```bash
+dotnet ef migrations add Create_Department_Entity
+```
+
+Finally, run the `IdentityRelationship.DbMigrator` project to update the database.
+
+When you look at your database, you can see that the `Department` table has been added and `DepartmentId` has been added to your `AbpUsers` table.
+
+
+
+
+
+> It's good to have some initial data in the database before running the application. This section introduces the [Data Seeding](https://docs.abp.io/en/abp/latest/Data-Seeding) system of the ABP framework. You can skip this section if you don't want to create the data seeding, but it is suggested to follow along and learn this useful ABP Framework feature.
+
+Create a class deriving from the `IDataSeedContributor` in the `IdentityRelationship.Domain` project by copying the following code:
+
+```csharp
+using System;
+using System.Threading.Tasks;
+using IdentityRelationship.Departments;
+using Volo.Abp.Data;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Domain.Repositories;
+
+namespace IdentityRelationship;
+
+public class IdentityRelationshipDataSeederContributor
+ : IDataSeedContributor, ITransientDependency
+{
+ private readonly IRepository _departmentRepository;
+
+ public IdentityRelationshipDataSeederContributor(IRepository departmentRepository)
+ {
+ _departmentRepository = departmentRepository;
+ }
+
+ public async Task SeedAsync(DataSeedContext context)
+ {
+ if (await _departmentRepository.GetCountAsync() <= 0)
+ {
+ await _departmentRepository.InsertAsync(
+ new Department
+ {
+ Name = "Human Resources"
+ },
+ autoSave: true
+ );
+
+ await _departmentRepository.InsertAsync(
+ new Department
+ {
+ Name = "Production"
+ },
+ autoSave: true
+ );
+ }
+ }
+}
+```
+- This code simply uses the `IRepository` (the default [repository](https://docs.abp.io/en/abp/latest/Repositories)) to insert two books to the database in case there weren't any books in it.
+
+Run the `IdentityRelationship.DbMigrator` application to update the database:
+
+
+
+Again, open the `IdentityRelationshipModuleExtensionConfigurator` class in the Domain.Shared project and add the following code:
+
+```csharp
+
+user.AddOrUpdateProperty(
+ "DepartmentId",
+ property =>
+ {
+ property.UI.Lookup.Url = "/api/app/department";
+ property.UI.Lookup.DisplayPropertyName = "name";
+ }
+);
+```
+
+The `UI.Lookup.Url` option takes a URL to get the list of departments to select on the edit/create forms. This endpoint can be a typical controller, an auto API controller or any type of endpoint that returns a proper JSON response.
+
+To localize, open the `IdentityRelationship.Domain.Shared` project and add it to your `/Localization/IdentityRelationship/en.json` file:
+
+```json
+"DepartmentId": "Department"
+```
+
+Create a `Departments` folder in the `IdentityRelationship.Application.Contracts` project of your solution and add the `DepartmentDto` class in it
+
+```csharp
+using System;
+using Volo.Abp.Application.Dtos;
+namespace IdentityRelationship.Departments;
+
+public class DepartmentDto : EntityDto
+
+{
+ public string Name { get; set; }
+}
+```
+Now let's create an `IDepartmentAppService` interface in the `Departments` folder
+
+```csharp
+using System.Threading.Tasks;
+using Volo.Abp.Application.Dtos;
+using Volo.Abp.Application.Services;
+
+namespace IdentityRelationship.Departments;
+
+public interface IDepartmentAppService : IApplicationService
+{
+ public Task> GetAsync();
+}
+```
+
+Time to implement the `IDepartmentAppService` interface. Create a `Departments` folder in your `IdentityRelationship.Application` project and add the `DepartmentAppService` class inside.
+
+```csharp
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using IdentityRelationship.Departments;
+using Volo.Abp.Application.Dtos;
+using Volo.Abp.Domain.Repositories;
+
+namespace IdentityRelationship.Department;
+
+public class DepartmentAppService : IdentityRelationshipAppService, IDepartmentAppService
+{
+ private readonly IRepository _departmentRepository;
+
+ public DepartmentAppService(IRepository departmentRepository)
+ {
+ _departmentRepository = departmentRepository;
+ }
+
+ public async Task> GetAsync()
+ {
+ var departments = await _departmentRepository.GetListAsync();
+ return new ListResultDto(
+ ObjectMapper.Map, List>(departments));
+ }
+}
+```
+`DepartmentAppService `is using the `ObjectMapper` to convert the `Department` objects to `DepartmentDto` objects. So, we need to define this mapping in the AutoMapper configuration.
+
+Open the `IdentityRelationshipApplicationAutoMapperProfile` class inside the `IdentityRelationship.Application` project and add the following line to the constructor:
+
+```csharp
+using AutoMapper;
+using IdentityRelationship.Departments;
+
+namespace IdentityRelationship;
+
+public class IdentityRelationshipApplicationAutoMapperProfile : Profile
+{
+ public IdentityRelationshipApplicationAutoMapperProfile()
+ {
+ CreateMap();
+ }
+}
+```
+
+Run your `IdentityRelationship.Web` project and add a department to one of your users.
+
+
+
+And it shows the department name on the data table:
+
+
+
+## Conclusion
+In this article I talked about the use of the IdentityUser relationship and how to extend it. Thank you for reading the article, I hope it was useful. See you soon!
+
+## References
+- https://docs.abp.io/en/abp/latest/Module-Entity-Extensions
+- https://learn.microsoft.com/en-us/ef/core/modeling/relationships
+- https://community.abp.io/posts/how-to-add-custom-properties-to-the-user-entity-rixchoha
\ No newline at end of file
diff --git a/docs/en/Community-Articles/2023-03-20- IdentityUser-Relationships/images/database-tables.png b/docs/en/Community-Articles/2023-03-20- IdentityUser-Relationships/images/database-tables.png
new file mode 100644
index 0000000000..a1cef0bc26
Binary files /dev/null and b/docs/en/Community-Articles/2023-03-20- IdentityUser-Relationships/images/database-tables.png differ
diff --git a/docs/en/Community-Articles/2023-03-20- IdentityUser-Relationships/images/identification-number.png b/docs/en/Community-Articles/2023-03-20- IdentityUser-Relationships/images/identification-number.png
new file mode 100644
index 0000000000..75fdd94768
Binary files /dev/null and b/docs/en/Community-Articles/2023-03-20- IdentityUser-Relationships/images/identification-number.png differ
diff --git a/docs/en/Community-Articles/2023-03-20- IdentityUser-Relationships/images/open-terminal.png b/docs/en/Community-Articles/2023-03-20- IdentityUser-Relationships/images/open-terminal.png
new file mode 100644
index 0000000000..9f1069d02b
Binary files /dev/null and b/docs/en/Community-Articles/2023-03-20- IdentityUser-Relationships/images/open-terminal.png differ
diff --git a/docs/en/Community-Articles/2023-03-20- IdentityUser-Relationships/images/run-dbmigrator.png b/docs/en/Community-Articles/2023-03-20- IdentityUser-Relationships/images/run-dbmigrator.png
new file mode 100644
index 0000000000..6e42848862
Binary files /dev/null and b/docs/en/Community-Articles/2023-03-20- IdentityUser-Relationships/images/run-dbmigrator.png differ
diff --git a/docs/en/Community-Articles/2023-03-20- IdentityUser-Relationships/images/solution-image.png b/docs/en/Community-Articles/2023-03-20- IdentityUser-Relationships/images/solution-image.png
new file mode 100644
index 0000000000..cd54f473f4
Binary files /dev/null and b/docs/en/Community-Articles/2023-03-20- IdentityUser-Relationships/images/solution-image.png differ
diff --git a/docs/en/Community-Articles/2023-03-20- IdentityUser-Relationships/images/user-department.png b/docs/en/Community-Articles/2023-03-20- IdentityUser-Relationships/images/user-department.png
new file mode 100644
index 0000000000..feb97234c3
Binary files /dev/null and b/docs/en/Community-Articles/2023-03-20- IdentityUser-Relationships/images/user-department.png differ
diff --git a/docs/en/Community-Articles/2023-03-20- IdentityUser-Relationships/images/users-page-department.png b/docs/en/Community-Articles/2023-03-20- IdentityUser-Relationships/images/users-page-department.png
new file mode 100644
index 0000000000..c923c9fc4b
Binary files /dev/null and b/docs/en/Community-Articles/2023-03-20- IdentityUser-Relationships/images/users-page-department.png differ
diff --git a/docs/en/Community-Articles/2023-03-20- IdentityUser-Relationships/images/users-page.png b/docs/en/Community-Articles/2023-03-20- IdentityUser-Relationships/images/users-page.png
new file mode 100644
index 0000000000..5622e11373
Binary files /dev/null and b/docs/en/Community-Articles/2023-03-20- IdentityUser-Relationships/images/users-page.png differ
diff --git a/docs/en/Community-Articles/2023-03-20- IdentityUser-Relationships/images/users-table.png b/docs/en/Community-Articles/2023-03-20- IdentityUser-Relationships/images/users-table.png
new file mode 100644
index 0000000000..81b2cf90dd
Binary files /dev/null and b/docs/en/Community-Articles/2023-03-20- IdentityUser-Relationships/images/users-table.png differ
diff --git a/docs/en/Community-Articles/2023-03-20-Dapper/POST.md b/docs/en/Community-Articles/2023-03-20-Dapper/POST.md
new file mode 100644
index 0000000000..491c9a010c
--- /dev/null
+++ b/docs/en/Community-Articles/2023-03-20-Dapper/POST.md
@@ -0,0 +1,297 @@
+# Using Dapper with the ABP Framework
+
+[Dapper](https://github.com/DapperLib/Dapper) is a simple and lightweight object mapper for .NET. A key feature of Dapper is its [high performance](https://github.com/DapperLib/Dapper#performance) compared to other ORMs. In this article, I will show how to use it in your ABP projects. But, we'll see when to use it first.
+
+### Source Code
+
+You can find the [full source code of the demo application here](https://github.com/abpframework/abp-samples/tree/master/Dapper).
+
+## When to Use Dapper?
+
+In the ABP Framework, we suggest to use Dapper in combination with Entity Framework Core (EF Core) for the following reasons:
+
+* EF Core is much easier to use (you don't need to manually write SQL queries and work with low level database objects).
+* EF Core abstracts different DBMS dialects, so it will be easier to change your DBMS later.
+* The EF Core's change tracking system automatically updates the changes in the database.
+* EF Core is better compatible with Object Oriented Programming (OOP) practices and is more type safe to work with. So, the EF Core code is more understandable and maintainable.
+
+In most of your use cases, you typically work with one or a few entities and a maintainable codebase can be chosen instead of a slight performance difference. However, there may be certain places in your application where it matters:
+
+* You may work with a lot of entities, so you'd like to query faster (Indeed, EF Core's [AsNoTracking()](https://learn.microsoft.com/en-us/ef/core/querying/tracking) extension can help in most cases).
+* You may be performing too many database operations in a single request.
+* EF Core may not create an optimized SQL query and you may want to manually write it for better performance.
+
+For such cases, Dapper can be a good choice. You can easily write SQL queries and bind the result to your objects.
+
+## Creating a new ABP Solution
+
+To demonstrate the useage of Dapper, I've created an ABP solution. You can find the [full source code of the demo application here](https://github.com/abpframework/abp-samples/tree/master/Dapper). If you want to create the same solution from scratch, follow the steps below:
+
+Install the ABP CLI if you haven't installed it before:
+
+````bash
+dotnet tool install -g Volo.Abp.Cli
+````
+
+Create a new solution with the ABP Framework's non-layered startup template with MVC UI and EF Core database:
+
+````bash
+abp new DapperDemo -t app-nolayers
+````
+
+> The startup template and UI selection don't matter for this article. I selected these options to keep the demo solution simple.
+
+After creating the solution, run the following command to migrate the database (run the command in the folder of the `.csproj` file:
+
+````csharp
+dotnet run --migrate-database
+````
+
+> If you've created a layered solution, then run the `DbMigrator` application inside the solution. If you have trouble by creating the solution, please refer to the [Quick Start](https://docs.abp.io/en/abp/latest/Tutorials/Todo/Single-Layer/Index) document.
+
+## Setting Up the Entity Framework Core Part
+
+We will use EF Core with Dapper, so we need to configure EF Core first. I will use the following `Book` entity as an example:
+
+````csharp
+public class Book : AuditedAggregateRoot
+{
+ public string Name { get; set; }
+ public DateTime PublishDate { get; set; }
+ public float Price { get; set; }
+}
+````
+
+If you are using a layered solution, entities are located in the `Domain` project. For my demo solution, I just placed it in the `Entities` folder of the single-layer project:
+
+
+
+Once I created the `Book` entity, I should add it to my `DbContext` class:
+
+````csharp
+public class DapperDemoDbContext : AbpDbContext
+{
+ // 1: ADD A DBSET PROPERTY
+ public DbSet Books { get; set; }
+
+ public DapperDemoDbContext(DbContextOptions options)
+ : base(options)
+ {
+ }
+
+ protected override void OnModelCreating(ModelBuilder builder)
+ {
+ //...other code parts
+
+ // 2: MAP YOUR ENTITY TO A DATABASE TABLE
+ builder.Entity(b =>
+ {
+ b.ToTable("Books");
+ b.Property(x => x.Name).IsRequired().HasMaxLength(128);
+ });
+ }
+}
+
+````
+
+Now, we can add a new database migration:
+
+````bash
+dotnet ef migrations add Added_Book
+````
+
+And apply the changes to the database:
+
+````bash
+dotnet ef database update
+````
+
+At this point, you should be able to see the Books table if you check your database:
+
+
+
+> As you see, the `Books` table contains more fields than the `Book` entity's property count. Other properties are inherited from the `AuditedAggregateRoot` table. You could inherit from the `BasicAggregateRoot` class if you don't want these properties.
+
+## Seeding the Database
+
+ABP's [data seeding](https://docs.abp.io/en/abp/latest/Data-Seeding) system is a great way to add some test data to the database. The following class inserts two books to the `Books` table when I migrate the database:
+
+````csharp
+public class DapperDemoDataSeederContributor : IDataSeedContributor, ITransientDependency
+{
+ private readonly IRepository _bookRepository;
+
+ public DapperDemoDataSeederContributor(IRepository bookRepository)
+ {
+ _bookRepository = bookRepository;
+ }
+
+ public async Task SeedAsync(DataSeedContext context)
+ {
+ if (await _bookRepository.GetCountAsync() > 0)
+ {
+ return;
+ }
+
+ await _bookRepository.InsertAsync(
+ new Book
+ {
+ Name = "1984",
+ PublishDate = new DateTime(1949, 6, 8),
+ Price = 19.84f
+ }
+ );
+
+ await _bookRepository.InsertAsync(
+ new Book
+ {
+ Name = "The Hitchhiker's Guide to the Galaxy",
+ PublishDate = new DateTime(1995, 9, 27),
+ Price = 42.0f
+ }
+ );
+ }
+}
+````
+
+After creating the `DapperDemoDataSeederContributor` class, I can re-run the following command:
+
+````bash
+dotnet run --migrate-database
+````
+
+Now, I can see the records in the database:
+
+
+
+Now, everything is ready to try querying from the `Books` table with Dapper.
+
+## Using Dapper Without the Integration Package
+
+ABP provides an integration package for Dapper. However, I first want to demonstrate using Dapper without the integration package.
+
+### Installing the Dapper Package
+
+First, install the [Dapper](https://www.nuget.org/packages/Dapper) package to your project. You can use a command-line terminal, locate the root path of your project (`.csproj` file that you want to install it in) and run the following command:
+
+````bash
+dotnet add package Dapper
+````
+
+> If your application is layered, then we suggest to add the `Dapper` package to your `EntityFrameworkCore` integration project in your solution.
+
+### Executing a Dapper Query
+
+I will query from the `Books` table, but I don't want to use the `Book` entity to map the result (because I don't need all the properties). So, I am creating a new class for the query result:
+
+````csharp
+public class BookDataView
+{
+ public Guid Id { get; set; }
+ public string Name { get; set; }
+ public float Price { get; set; }
+}
+````
+
+Now, we can use Dapper's `QueryAsync` extension method as shown below:
+
+````csharp
+public class DemoService : ITransientDependency
+{
+ private readonly IRepository _bookRepository;
+
+ public DemoService(IRepository bookRepository)
+ {
+ _bookRepository = bookRepository;
+ }
+
+ [UnitOfWork]
+ public virtual async Task> GetListAsync()
+ {
+ var database = (await _bookRepository.GetDbContextAsync()).Database;
+ var dbConnection = database.GetDbConnection();
+ var dbTransaction = database.CurrentTransaction?.GetDbTransaction();
+
+ var queryResult = await dbConnection.QueryAsync(
+ "SELECT Id, Name, Price FROM Books",
+ transaction: dbTransaction
+ );
+
+ return queryResult.ToList();
+ }
+}
+````
+
+Let's examine this class:
+
+* I've injected the ABP's standard [generic repository](https://docs.abp.io/en/abp/latest/Repositories) service into the `DemoService` constructor.
+* `_bookRepository.GetDbContextAsync()` returns the underlying `DbContext` object of EF Core. We need to have the [Volo.Abp.EntityFrameworkCore](https://www.nuget.org/packages/Volo.Abp.EntityFrameworkCore) package reference to be able to access that method. If you have created a single-layer solution, the reference will already have existed. If you have created a layered solution you may need to manually add this package to the project that contains the `DemoService` class. Because the layered solution isolates the EF Core dependency from the rest of the solution.
+* Dapper needs a `DbConnection` and a `DbTransaction` object (as optional) to execute a query. We are getting them over the `database` object obtained from the `DbContext`. We suggest to always pass the current `DbTransaction` object while working with Dapper. Because, if there is a database transaction on the same database connection that you execute queries on, and you don't pass the transaction object, you'll get an exception.
+* Finally, we can use Dapper's `QueryAsync` extension method to execute the database query.
+* Notice that the `GetListAsync` method is made as `virtual` and marked with the `UnitOfWork` attribute to enable the [Unit Of Work](https://docs.abp.io/en/abp/latest/Unit-Of-Work) for that method. It ensures the database connection is available in the body of the `GetListAsync` method.
+
+That's all. You can execute any Dapper operation using the `DbConnection` and `DbTransaction` objects obtained from the `_bookRepository` object. Please refer to Dapper's documentation for other operations.
+
+> We've obtained the `DbContext` object from a repository. However, a repository is not required to obtain a `DbContext`. Instead, you could inject the `IDbContextProvider` service (`IDbContextProvider` for this demo) and call its `GetDbContextAsync` method.
+
+## Using the Volo.Abp.Dapper Package
+
+In the previous section, you saw that you don't need an ABP integration package to be able to use Dapper in your ABP applications. However, there is an integration package here: [Volo.Abp.Dapper](https://www.nuget.org/packages/Volo.Abp.Dapper). In fact, that package doesn't contain much services. It just provides a convenient base class to create Dapper based repository classes.
+
+### Installing the Volo.Abp.Dapper Package
+
+You can use the [ABP CLI](https://docs.abp.io/en/abp/latest/CLI#add-package) to easily install ABP packages to your projects. Execute the following command in the folder of the `.csproj` file that you want to install the package on:
+
+````bash
+abp add-package Volo.Abp.Dapper
+````
+
+> You can check the [ABP Dapper document](https://docs.abp.io/en/abp/latest/Dapper) for alternative installation options.
+
+### Creating a Repository Class
+
+In the `DemoService` example, we used database objects out of a [repository](https://docs.abp.io/en/abp/latest/Repositories) class. If you want to implement layering to your solution and abstracting database operations, it can be better to create a repository class to execute the Dapper operations.
+
+Here's a repository class that executes the same database query:
+
+````csharp
+public class BookRepository : DapperRepository, ITransientDependency
+{
+ public BookRepository(IDbContextProvider dbContextProvider)
+ : base(dbContextProvider)
+ {
+ }
+
+ public virtual async Task> GetListAsync()
+ {
+ var connection = await GetDbConnectionAsync();
+ var queryResult = await connection.QueryAsync(
+ "SELECT Id, Name, Price FROM Books",
+ transaction: await GetDbTransactionAsync()
+ );
+ return queryResult.ToList();
+ }
+}
+````
+
+Let's examine this class:
+
+* It inherits from the `DapperRepository` class, which provides useful methods and properties for database operations. It also implements the `IUnitOfWorkEnabled` interface, so ABP makes the database connection (and transaction if requested) available in the method body by implementing dynamic proxies (a.k.a. interception).
+* The `GetListAsync` method's been made `virtual`. That's needed to make the interception process working. It wouldn't be needed if we introduce `IBookRepository` to that class and always use it by injecting the `BookRepository` class (in this case, it will use interface proxying - however, this is too much details for the purpose of this article).
+* We've used the `GetDbConnectionAsync` and `GetDbTransactionAsync` methods to obtain the current database connection and transaction (that is managed by ABP's [unit of work](https://docs.abp.io/en/abp/latest/Unit-Of-Work) system).
+
+You can then inject the `BookRepository` class when you want to get a list of `BookDataView` whenever it is needed. In the demo project, I used it inside the `IndexModel.cshtml.cs` to show a list of books on the page:
+
+
+
+## Conclusion
+
+In this article, I've explained ABP's Dapper integration and demonstrated how you can execute Dapper operations in your applications. I suggest to use Dapper when it is really needed and adds any significant value (generally a performance gain) to your application. Otherwise, EF Core is much more convenient for most of the database operations and you will have a more maintainable codebase using EF Core.
+
+## Source Code
+
+You can find the [full source code of the demo application here](https://github.com/abpframework/abp-samples/tree/master/Dapper).
+
+## See Also
+
+* [ABP Dapper documentation](https://docs.abp.io/en/abp/latest/Dapper)
diff --git a/docs/en/Community-Articles/2023-03-20-Dapper/book-class-in-rider.png b/docs/en/Community-Articles/2023-03-20-Dapper/book-class-in-rider.png
new file mode 100644
index 0000000000..db1e5791b4
Binary files /dev/null and b/docs/en/Community-Articles/2023-03-20-Dapper/book-class-in-rider.png differ
diff --git a/docs/en/Community-Articles/2023-03-20-Dapper/book-database-table.png b/docs/en/Community-Articles/2023-03-20-Dapper/book-database-table.png
new file mode 100644
index 0000000000..d1584118d9
Binary files /dev/null and b/docs/en/Community-Articles/2023-03-20-Dapper/book-database-table.png differ
diff --git a/docs/en/Community-Articles/2023-03-20-Dapper/book-table-data.png b/docs/en/Community-Articles/2023-03-20-Dapper/book-table-data.png
new file mode 100644
index 0000000000..6b9ea69b59
Binary files /dev/null and b/docs/en/Community-Articles/2023-03-20-Dapper/book-table-data.png differ
diff --git a/docs/en/Community-Articles/2023-03-20-Dapper/list-of-books.png b/docs/en/Community-Articles/2023-03-20-Dapper/list-of-books.png
new file mode 100644
index 0000000000..23b190afa6
Binary files /dev/null and b/docs/en/Community-Articles/2023-03-20-Dapper/list-of-books.png differ
diff --git a/docs/en/Community-Articles/2023-03-27-What-is-new-in-NET8/cover.jpg b/docs/en/Community-Articles/2023-03-27-What-is-new-in-NET8/cover.jpg
new file mode 100644
index 0000000000..aa0f3694d4
Binary files /dev/null and b/docs/en/Community-Articles/2023-03-27-What-is-new-in-NET8/cover.jpg differ
diff --git a/docs/en/Community-Articles/2023-03-27-What-is-new-in-NET8/post.md b/docs/en/Community-Articles/2023-03-27-What-is-new-in-NET8/post.md
new file mode 100644
index 0000000000..5ae3ff2ce0
--- /dev/null
+++ b/docs/en/Community-Articles/2023-03-27-What-is-new-in-NET8/post.md
@@ -0,0 +1,226 @@
+# What’s New in .NET 8 🧐 ? Discover ALL .NET 8 Features⚡🚀
+
+In this post, I'll briefly mention the new features of .NET 8 and the changes.
+
+## `dotnet publish` and `dotnet pack` Release Mode 🏭
+
+With this new version, `dotnet publish` and `dotnet pack` commands will build and pack with the `Release` mode. Before it was producing in `Debug` mode. To be able to produce in Debug mode, you need to set this parameter `-p:PublishRelease` as false.
+
+```bash
+dotnet publish -> /app/bin/Release/net8.0/app.dll
+dotnet publish -p:PublishRelease=false -> /app/bin/Debug/net8.0/app.dll
+```
+
+---
+
+
+
+## System.Text.Json Serialization 🧱
+
+[System.Text.Json](https://learn.microsoft.com/en-us/dotnet/api/system.text.json) replaced Newtonsoft.Json in the recent versions. We are also using `System.Text.Json` in the [ABP Framework](https://abp.io) now. There are several enhancements to object serialization and deserialization.
+
+The latest version of the [source generator](https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/source-generation) now offers improved performance and reliability for Native AOT apps when used with ASP.NET Core. It also allows serializing types with [`required`](https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/required-properties) and [`init`](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/init) properties already supported in reflection-based serialization. Additionally, there is now an option to customize the handling of members that are not present in the JSON payload, see https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json/missing-members. Support for serializing properties from interface hierarchies. The [JsonNamingPolicy](https://learn.microsoft.com/en-us/dotnet/api/system.text.json.jsonnamingpolicy?view=net-8.0&preserve-view=true#properties) feature has been expanded to include new naming policies for `snake_case` and `kebab-case` property name conversions. Finally, [JsonSerializerOptions.MakeReadOnly](https://learn.microsoft.com/en-us/dotnet/api/system.text.json.jsonserializeroptions.makereadonly#system-text-json-jsonserializeroptions-makereadonly) method allows for explicit control over when a `JsonSerializerOptions` instance is frozen, and you can check its status using the [IsReadOnly](https://learn.microsoft.com/en-us/dotnet/api/system.text.json.jsonserializeroptions.isreadonly#system-text-json-jsonserializeroptions-isreadonly) property.
+
+---
+
+
+
+## Randomness
+
+AI programming is very popular these days. And the need to produce more random content arose.
+
+### GetItems() 🧮
+
+Two new methods: [Random.GetItems](https://learn.microsoft.com/en-us/dotnet/api/system.random.getitems) and [RandomNumberGenerator.GetItems](https://learn.microsoft.com/en-us/dotnet/api/system.security.cryptography.randomnumbergenerator.getitems) have been introduced that enable developers to randomly select a set number of items from a given input set. The example below demonstrates the usage of the `System.Random.GetItems()` method using an instance obtained from the `Random.Shared` property to randomly insert 31 items into an array.
+
+```csharp
+private static ReadOnlySpan countries = new[]
+{
+ new CountryPhoneCode("Turkey", "90"),
+ new CountryPhoneCode("China", "86"),
+ new CountryPhoneCode("Germany", "49"),
+ new CountryPhoneCode("Finland", "358"),
+ new CountryPhoneCode("Spain", "34")
+};
+
+var randomValues = Random.Shared.GetItems(countries, 2);
+foreach (var x in randomValues)
+{
+ Console.WriteLine(x.Name + " -> " + x.CountryPhoneCode);
+}
+
+/**************
+- Output -
+Germany -> 49
+Finland -> 358
+**************/
+```
+
+---
+
+
+
+### Shuffle() 🔀
+
+If you need to randomize the order of a span in your application, you can take advantage of two new methods: [Random.Shuffle](https://learn.microsoft.com/en-us/dotnet/api/system.random.shuffle) and [RandomNumberGenerator.Shuffle](https://learn.microsoft.com/en-us/dotnet/api/system.security.cryptography.randomnumbergenerator.shuffle?view=net-8.0). These methods are particularly handy when you want to minimize the impact of training bias in machine learning by varying the order in which training and testing data are presented. Using these methods, you can ensure that the first thing in your dataset is only sometimes used for training, and the last is only sometimes reserved for testing.
+
+```csharp
+var trainingData = GetData();
+Random.Shared.Shuffle(trainingData);
+
+IDataView source = mlContext.Data.LoadFromEnumerable(trainingData);
+
+DataOperationsCatalog.TrainTestData splittedData = mlContext.Data.TrainTestSplit(source);
+model = chain.Fit(splittedData.TrainSet);
+
+IDataView resultPredictions = model.Transform(split.TestSet);
+```
+
+---
+
+
+
+## Performance Improvements 🚀
+
+In .NET 8, various new types have been introduced to enhance application performance.
+
+- The [System.Collections.Frozen](https://learn.microsoft.com/en-us/dotnet/api/system.collections.frozen) namespace in .NET 8 includes the [FrozenDictionary](https://learn.microsoft.com/en-us/dotnet/api/system.collections.frozen.frozendictionary-2) and [FrozenSet](https://learn.microsoft.com/en-us/dotnet/api/system.collections.frozen.frozenset-1) collection types. These types are designed to prevent changes to keys and values once a collection is created, resulting in faster read operations such as `TryGetValue()`. They are particularly useful for collections populated on first use and then persisted for a long-lived service.
+
+ ```csharp
+ private static readonly FrozenDictionary frozenData = LoadConfigurationData().ToFrozenDictionary(optimizeForReads: true);
+ //////
+ if (frozenData.TryGetValue(key, out bool setting) && setting)
+ {
+ Process();
+ }
+ ```
+
+- [Buffers.IndexOfAnyValues](https://learn.microsoft.com/en-us/dotnet/api/system.buffers.indexofanyvalues-1) is a new type in .NET 8, designed to be passed to methods that search for the first occurrence of any value in a passed collection. The new overloads of methods like [String.IndexOfAny](https://learn.microsoft.com/en-us/dotnet/api/system.string.indexofany?view=net-8.0#system-string-indexofany(system-char())) and [MemoryExtensions.IndexOfAny](https://learn.microsoft.com/en-us/dotnet/api/system.memoryextensions.indexofany) accept an instance of the new type. When you create an instance of [Buffers.IndexOfAnyValues](https://learn.microsoft.com/en-us/dotnet/api/system.buffers.indexofanyvalues-1), all the necessary data for optimizing subsequent searches is derived at that time.
+
+- [Text.CompositeFormat](https://learn.microsoft.com/en-us/dotnet/api/system.text.compositeformat) is a new type in .NET 8 useful for optimizing format strings that aren't known at compile time (such as format strings loaded from a resource file). While some extra time is spent upfront to perform tasks like parsing the string, it saves the work from being done each time the format string is used.
+
+ ```csharp
+ private static readonly CompositeFormat range = CompositeFormat.Parse(Load());
+ //////////
+ static string GetMessage(int min, int max) =>
+ string.Format(CultureInfo.InvariantCulture, range, min, max);
+ ```
+
+- In .NET 8, two new types are introduced to implement the fast [XxHash3](https://learn.microsoft.com/en-us/dotnet/api/system.io.hashing.xxhash3) and [XxHash128](https://learn.microsoft.com/en-us/dotnet/api/system.io.hashing.xxhash128) hash algorithms.
+
+---
+
+
+
+## Improvements in System.Numerics and System.Runtime.Intrinsics 🔥
+
+There are several enhancements made to the [System.Numerics](https://learn.microsoft.com/en-us/dotnet/api/system.numerics) and [System.Runtime.Intrinsics](https://learn.microsoft.com/en-us/dotnet/api/system.runtime.intrinsics) namespaces. These improvements include better hardware acceleration for [Vector256](https://learn.microsoft.com/en-us/dotnet/api/system.runtime.intrinsics.vector256-1), [Matrix3x2](https://learn.microsoft.com/en-us/dotnet/api/system.numerics.matrix3x2), and [Matrix4x4](https://learn.microsoft.com/en-us/dotnet/api/system.numerics.matrix4x4) in .NET 8.
+
+[Vector256](https://learn.microsoft.com/en-us/dotnet/api/system.runtime.intrinsics.vector256-1) was redesigned to utilize `2x Vector128` operations internally to achieve partial acceleration of certain functions on `Arm64` processors where `Vector128.IsHardwareAccelerated == true` but `Vector256.IsHardwareAccelerated == false`. The introduction of [Vector512](https://learn.microsoft.com/en-us/dotnet/api/system.runtime.intrinsics.vector512-1) is also included in .NET 8.
+
+Additionally, the `ConstExpected` attribute has been added to hardware intrinsic to alert users when a non-constant value might cause unexpected performance issues.
+
+Lastly, the [Lerp(TSelf, TSelf, TSelf)](https://learn.microsoft.com/en-us/dotnet/api/system.numerics.ifloatingpointieee754-1.lerp#system-numerics-ifloatingpointieee754-1-lerp(-0-0-0)) API has been added to [IFloatingPointIeee754](https://learn.microsoft.com/en-us/dotnet/api/system.numerics.ifloatingpointieee754-1), enabling the efficient and accurate linear interpolation of two values in `float`([Single](https://learn.microsoft.com/en-us/dotnet/api/system.single)), `double` ([Double](https://learn.microsoft.com/en-us/dotnet/api/system.double)), and [Half](https://learn.microsoft.com/en-us/dotnet/api/system.half).
+
+---
+
+
+
+## New Data Validation Attributes 🛡️
+
+The [DataAnnotations](https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations) namespace, aimed specifically for validation in cloud-native services. The existing `DataAnnotations` validators are primarily used for validating user data, like form fields. However, the new attributes are meant to validate data, not entered by users, like [configuration options](https://learn.microsoft.com/en-us/dotnet/core/extensions/options#options-validation). Apart from the new attributes, the [RangeAttribute](https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations.rangeattribute) and [RequiredAttribute](https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations.requiredattribute) types also received new properties.
+
+- [RequiredAttribute.DisallowAllDefaultValues](https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations.requiredattribute.disallowalldefaultvalues#system-componentmodel-dataannotations-requiredattribute-disallowalldefaultvalues): The attribute forces that structs for inequality with their default values.
+- [RangeAttribute.MinimumIsExclusive](https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations.rangeattribute.minimumisexclusive#system-componentmodel-dataannotations-rangeattribute-minimumisexclusive) & [RangeAttribute.MaximumIsExclusive](https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations.rangeattribute.maximumisexclusive#system-componentmodel-dataannotations-rangeattribute-maximumisexclusive): Specifies whether the allowable range includes its boundaries or not.
+- [DataAnnotations.LengthAttribute](https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations.lengthattribute): Specifies the lower and upper limits for strings or collections using the `Length` attribute. For instance, the `[Length(5, 100)]` attribute specifies that a collection must have at least 5 elements and at most 100 elements.
+- [DataAnnotations.Base64StringAttribute](https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations.base64stringattribute): Validates a valid `Base64` format.
+- [DataAnnotations.AllowedValuesAttribute](https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations.allowedvaluesattribute) & [DataAnnotations.DeniedValuesAttribute](https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations.deniedvaluesattribute): Specifies accepted allow lists or not allowed deny lists. For instance: `[AllowedValues("red", "green", "blue")]` or `[DeniedValues("yellow", "purple")]`.
+
+
+
+---
+
+
+
+## Function Pointers Introspection Support ↩️
+
+[Function pointers](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/unsafe-code#function-pointers) were released with .NET 5. There was no support for reflection at that time. As a result, using `typeof` or reflection on a function pointer, such as `typeof(delegate*())` or `FieldInfo.FieldType`, respectively, would return an [IntPtr](https://learn.microsoft.com/en-us/dotnet/api/system.intptr). However, in .NET 8, a [System.Type](https://learn.microsoft.com/en-us/dotnet/api/system.type) object is returned instead, providing access to function pointer metadata, such as calling conventions, return type, and parameters. This functionality is implemented only in the `CoreCLR` runtime and [MetadataLoadContext](https://learn.microsoft.com/en-us/dotnet/api/system.reflection.metadataloadcontext).
+
+---
+
+
+
+## Native AOT 🏭
+
+The [publishing as native AOT](https://learn.microsoft.com/en-us/dotnet/core/deploying/native-aot/) was initially introduced in .NET 7, the option to publish an application as native AOT enables the creation of a self-contained version of the app that does not require a separate runtime, bundling everything into a single file.
+
+In .NET 8, the support for native AOT now encompasses the `x64` and `Arm64` architectures on macOS. Moreover, native AOT applications on Linux are now up to 50% smaller in size. Here's the table, illustrates the size of a minimal app published with native AOT, containing the entire .NET runtime:
+
+
+
+* **Linux x64** (with `-p:StripSymbols=true`)
+ * .NET 7 ➡ 3.76MB
+ * .NET 8 ➡ 1.84 MB
+* **Windows x64**
+ * .NET 7 ➡ 2.85 MB
+ * .NET 8 ➡ 1.77 MB
+
+---
+
+
+
+## Code Generation Improvements 📃
+
+.NET 8 includes enhancements to code generation and just-in-time (*JIT*) compilation:
+
+- JIT throughput improvements
+- Arm64 performance improvements
+- Profile-guided optimization (PGO) improvements
+- Support for AVX-512 ISA extensions
+- SIMD improvements
+- Cloud-native improvements
+- Loop and general optimizations
+
+---
+
+
+
+## .NET 8 DevOps Improvements 📦
+
+### NET Container Image Changes
+
+There are some changes with .NET 8 on image containers. First, [Debian 12](https://wiki.debian.org/DebianBookworm) is the **default Linux distribution** in the container images.
+
+Secondly, the images include a `non-root` user to make the images `non-root` capable. To run as `non-root`, add the line `USER app` at the end of your `Dockerfile`.
+
+Besides, the **default port has also changed** from `80` to `8080` and a **new environment variable** `ASPNETCORE_HTTP_PORTS` is available to change ports easily.
+
+Also, the format for the `ASPNETCORE_HTTP_PORTS` variable is easier compared to the format required by `ASPNETCORE_URLS`, and it accepts a list of ports. If you change the port back to `80` using one of these variables, it won’t be possible to run as `non-root`.
+
+Finally, .NET 8 is now supported on **Chiseled Ubuntu** images, available at the [Ubuntu/DotNet-deps Docker Hub](Ubuntu/DotNet-deps Docker Hub). Chiseled images are designed to have a smaller attack surface as they are stripped down to be ultra-compact, and do not include a package manager or shell. Chiseled images are non-root, making them ideal for developers looking for the benefits of appliance-style computing. These images are regularly published to the [.NET nightly artifact registry](https://mcr.microsoft.com/product/dotnet/nightly/aspnet/tags) for easy access.
+
+### Building Your .NET on Linux
+
+Previously, building .NET from source in earlier versions required creating a `source tarball` from the corresponding release commit in the [dotnet/installer repository](dotnet/installer repository). However, in .NET 8, this step is no longer necessary as the [dotnet/dotnet repository](https://github.com/dotnet/dotnet) allows building .NET directly on Linux using [dotnet/source-build](https://github.com/dotnet/source-build) to create runtimes, tools, and SDKs. Red Hat and Canonical also use this build for .NET. Building in a container is the easiest approach for most people since the `dotnet-buildtools/prereqs` container images have all the necessary dependencies. [The build instructions]() provide more information.
+
+### Minimum support baselines for Linux
+
+The support requirements for Linux have been updated for .NET 8, with changes to the minimum support baselines:
+
+1. All architectures will target Ubuntu 16.04 for building .NET, which is important for setting the minimum required version of `glibc` for .NET 8. Versions of Ubuntu earlier than 16.04, such as 14.04, will not even allow .NET 8 to start.
+2. **Red Hat Enterprise Linux 7 is no longer supported** with .NET 8. Only supporting RHEL 8 and later.
+
+For further details, please refer to the [support for Red Hat Enterprise Linux Family](https://github.com/dotnet/core/blob/main/linux-support.md#red-hat-enterprise-linux-family-support) page.
+
+
+
+---
+
+Become a pioneer and try the new features of .NET 8 now.
+Adapt it to your project or start a new .NET 8 project.
+[Claim your copy of .NET 8](https://dotnet.microsoft.com/next) today 🏎️ !
+
+〰️〰️〰️
+
+Happy Coding ⌨️
+
diff --git a/docs/en/Community-Articles/2023-03-28-Converting-Create-Edit-Modal-To-Page/POST.md b/docs/en/Community-Articles/2023-03-28-Converting-Create-Edit-Modal-To-Page/POST.md
new file mode 100644
index 0000000000..4904da48cf
--- /dev/null
+++ b/docs/en/Community-Articles/2023-03-28-Converting-Create-Edit-Modal-To-Page/POST.md
@@ -0,0 +1,372 @@
+# Convert Create/Edit Modals to Page
+In this document we will explain how to convert BookStore's Books create & edit modals to regular blazor pages.
+
+## Before
+
+
+## After
+
+
+
+
+# Books.razor Page
+Books.razor page is the main page of the books management. Create & Update operations are done in this page. So we'll remove create & update operations from this page and move a separate blazor component for each operation. Each component will be a page.
+
+- Remove both Create & Update modals.
+
+ 
+
+- Replace **NewBook** button with a link to **CreateBook** page.
+
+ ```html
+
+ ```
+
+- Inject `NavigationManager` to `Books.razor` page.
+ ```csharp
+ @inject NavigationManager NavigationManager
+ ```
+
+- Replace **Edit** button with a link to **UpdateBook** page.
+
+ ```html
+
+ ```
+
+ ```csharp
+ private void NavigateToEdit(Guid id)
+ {
+ NavigationManager.NavigateTo($"books/{id}/edit");
+ }
+ ```
+
+- Remove all methods in the `Books.razor` page except constructor. And add `GoToEditPage` as below:
+
+ ```csharp
+ protected void GoToEditPage(BookDto book)
+ {
+ NavigationManager.NavigateTo($"books/{book.Id}");
+ }
+ ```
+
+ 
+
+- Change Edit button to a link in the table.
+
+ ```html
+
+ ```
+
+
+# CreateBooks Page
+Create new `CreateBook.razor` and `CreateBook.razor.cs` files in your project.
+
+- `CreateBook.razor`
+
+```html
+@page "/books/new"
+@attribute [Authorize(BookStorePermissions.Books.Create)]
+@inherits BookStoreComponentBase
+
+@using Acme.BookStore.Books;
+@using Acme.BookStore.Localization;
+@using Acme.BookStore.Permissions;
+@using Microsoft.Extensions.Localization;
+@using Volo.Abp.AspNetCore.Components.Web;
+
+@inject IStringLocalizer L
+@inject AbpBlazorMessageLocalizerHelper LH
+@inject IBookAppService AppService
+@inject NavigationManager NavigationManager
+
+
+
+
+ @L["NewBook"]
+
+
+
+
+
+
+ @L["Author"]
+
+
+
+ @L["Name"]
+
+
+
+
+
+
+
+
+ @L["Type"]
+
+
+
+ @L["PublishDate"]
+
+
+
+ @L["Price"]
+
+
+
+
+
+
+
+
+
+```
+
+- `CreateBook.razor.cs`
+
+```csharp
+using Acme.BookStore.Books;
+using Blazorise;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Volo.Abp;
+
+namespace Acme.BookStore.Blazor.Pages;
+
+public partial class CreateBook
+{
+ protected Validations CreateValidationsRef;
+ protected CreateUpdateBookDto NewEntity = new();
+ IReadOnlyList authorList = Array.Empty();
+
+ protected override async Task OnInitializedAsync()
+ {
+ await base.OnInitializedAsync();
+ authorList = (await AppService.GetAuthorLookupAsync()).Items;
+
+ if (!authorList.Any())
+ {
+ throw new UserFriendlyException(message: L["AnAuthorIsRequiredForCreatingBook"]);
+ }
+
+ NewEntity.AuthorId = authorList.First().Id;
+
+ if (CreateValidationsRef != null)
+ {
+ await CreateValidationsRef.ClearAll();
+ }
+ }
+
+ protected virtual async Task CreateEntityAsync()
+ {
+ try
+ {
+ var validate = true;
+ if (CreateValidationsRef != null)
+ {
+ validate = await CreateValidationsRef.ValidateAll();
+ }
+ if (validate)
+ {
+ await AppService.CreateAsync(NewEntity);
+ NavigationManager.NavigateTo("books");
+ }
+ }
+ catch (Exception ex)
+ {
+ await HandleErrorAsync(ex);
+ }
+ }
+}
+```
+
+# EditBooks Page
+Create new `EditBook.razor` and `EditBook.razor.cs` files in your project.
+
+- `EditBook.razor`
+
+```html
+@page "/books/{Id}"
+@attribute [Authorize(BookStorePermissions.Books.Edit)]
+@inherits BookStoreComponentBase
+@using Acme.BookStore.Books;
+@using Acme.BookStore.Localization;
+@using Acme.BookStore.Permissions;
+@using Microsoft.Extensions.Localization;
+@using Volo.Abp.AspNetCore.Components.Web;
+
+@inject IStringLocalizer L
+@inject AbpBlazorMessageLocalizerHelper LH
+@inject IBookAppService AppService
+@inject NavigationManager NavigationManager
+
+
+
+
+ @EditingEntity.Name
+
+
+
+
+
+
+ @L["Author"]
+
+
+
+ @L["Name"]
+
+
+
+
+
+
+
+
+ @L["Type"]
+
+
+
+ @L["PublishDate"]
+
+
+
+ @L["Price"]
+
+
+
+
+
+
+
+
+
+```
+
+- `EditBook.razor.cs`
+
+```csharp
+using Acme.BookStore.Books;
+using Blazorise;
+using Microsoft.AspNetCore.Components;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Volo.Abp;
+
+namespace Acme.BookStore.Blazor.Pages;
+
+public partial class EditBook
+{
+ protected CreateUpdateBookDto EditingEntity = new();
+ protected Validations EditValidationsRef;
+ IReadOnlyList authorList = Array.Empty();
+
+ [Parameter]
+ public string Id { get; set; }
+
+ public Guid EditingEntityId { get; set; }
+
+ protected override async Task OnInitializedAsync()
+ {
+ await base.OnInitializedAsync();
+
+ // Blazor can't parse Guid as route constraint currently.
+ // See https://github.com/dotnet/aspnetcore/issues/19008
+ EditingEntityId = Guid.Parse(Id);
+
+ authorList = (await AppService.GetAuthorLookupAsync()).Items;
+
+ if (!authorList.Any())
+ {
+ throw new UserFriendlyException(message: L["AnAuthorIsRequiredForCreatingBook"]);
+ }
+
+ var entityDto = await AppService.GetAsync(EditingEntityId);
+
+ EditingEntity = ObjectMapper.Map(entityDto);
+
+ if (EditValidationsRef != null)
+ {
+ await EditValidationsRef.ClearAll();
+ }
+ }
+
+ protected virtual async Task UpdateEntityAsync()
+ {
+ try
+ {
+ var validate = true;
+ if (EditValidationsRef != null)
+ {
+ validate = await EditValidationsRef.ValidateAll();
+ }
+ if (validate)
+ {
+ await AppService.UpdateAsync(EditingEntityId, EditingEntity);
+
+ NavigationManager.NavigateTo("books");
+ }
+ }
+ catch (Exception ex)
+ {
+ await HandleErrorAsync(ex);
+ }
+ }
+}
+```
+
+You can check the following commit for details:
+https://github.com/abpframework/abp-samples/commit/aae61ad6d66ebf6191dd4dcfb4e23d30bd680a4e
\ No newline at end of file
diff --git a/docs/en/Community-Articles/2023-03-28-Converting-Create-Edit-Modal-To-Page/images/books-remove-methods.png b/docs/en/Community-Articles/2023-03-28-Converting-Create-Edit-Modal-To-Page/images/books-remove-methods.png
new file mode 100644
index 0000000000..a2df67fee2
Binary files /dev/null and b/docs/en/Community-Articles/2023-03-28-Converting-Create-Edit-Modal-To-Page/images/books-remove-methods.png differ
diff --git a/docs/en/Community-Articles/2023-03-28-Converting-Create-Edit-Modal-To-Page/images/books-remove-modals.png b/docs/en/Community-Articles/2023-03-28-Converting-Create-Edit-Modal-To-Page/images/books-remove-modals.png
new file mode 100644
index 0000000000..0e9fd6e8d4
Binary files /dev/null and b/docs/en/Community-Articles/2023-03-28-Converting-Create-Edit-Modal-To-Page/images/books-remove-modals.png differ
diff --git a/docs/en/Community-Articles/2023-03-28-Converting-Create-Edit-Modal-To-Page/images/new.gif b/docs/en/Community-Articles/2023-03-28-Converting-Create-Edit-Modal-To-Page/images/new.gif
new file mode 100644
index 0000000000..42784eb281
Binary files /dev/null and b/docs/en/Community-Articles/2023-03-28-Converting-Create-Edit-Modal-To-Page/images/new.gif differ
diff --git a/docs/en/Community-Articles/2023-03-28-Converting-Create-Edit-Modal-To-Page/images/old.gif b/docs/en/Community-Articles/2023-03-28-Converting-Create-Edit-Modal-To-Page/images/old.gif
new file mode 100644
index 0000000000..80a97a80f2
Binary files /dev/null and b/docs/en/Community-Articles/2023-03-28-Converting-Create-Edit-Modal-To-Page/images/old.gif differ
diff --git a/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/abp-framework.png b/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/abp-framework.png
new file mode 100644
index 0000000000..b1157793bf
Binary files /dev/null and b/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/abp-framework.png differ
diff --git a/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/abp-suite.png b/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/abp-suite.png
new file mode 100644
index 0000000000..e4ad6d6014
Binary files /dev/null and b/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/abp-suite.png differ
diff --git a/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/architecture-layers.png b/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/architecture-layers.png
new file mode 100644
index 0000000000..081376668b
Binary files /dev/null and b/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/architecture-layers.png differ
diff --git a/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/conclusion.png b/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/conclusion.png
new file mode 100644
index 0000000000..cecdd739b4
Binary files /dev/null and b/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/conclusion.png differ
diff --git a/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/cover.png b/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/cover.png
new file mode 100644
index 0000000000..4a0aaf8d4c
Binary files /dev/null and b/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/cover.png differ
diff --git a/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/csharp-microservice-framework.png b/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/csharp-microservice-framework.png
new file mode 100644
index 0000000000..2550a9209d
Binary files /dev/null and b/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/csharp-microservice-framework.png differ
diff --git a/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/ddd.png b/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/ddd.png
new file mode 100644
index 0000000000..45f6261a57
Binary files /dev/null and b/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/ddd.png differ
diff --git a/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/essential-features.png b/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/essential-features.png
new file mode 100644
index 0000000000..e709f00327
Binary files /dev/null and b/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/essential-features.png differ
diff --git a/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/essentials.png b/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/essentials.png
new file mode 100644
index 0000000000..dee5928bbd
Binary files /dev/null and b/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/essentials.png differ
diff --git a/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/modular.png b/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/modular.png
new file mode 100644
index 0000000000..96943ef81f
Binary files /dev/null and b/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/modular.png differ
diff --git a/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/pre-built-modules.png b/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/pre-built-modules.png
new file mode 100644
index 0000000000..0d5f5a7e9a
Binary files /dev/null and b/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/pre-built-modules.png differ
diff --git a/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/the-abp-platform.png b/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/the-abp-platform.png
new file mode 100644
index 0000000000..bae6f08238
Binary files /dev/null and b/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/images/the-abp-platform.png differ
diff --git a/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/post.md b/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/post.md
new file mode 100644
index 0000000000..b844fb5540
--- /dev/null
+++ b/docs/en/Community-Articles/2023-04-03-What-is-ABP-Framework/post.md
@@ -0,0 +1,118 @@
+# ABP Framework: An Open Source Web Application Development Framework
+
+
+
+## What is ABP Framework?
+
+
+
+ABP Framework is an open-source web application development framework that provides developers with a set of tools to build modern, scalable, and maintainable web applications. ABP Framework is also a C# web framework that is based on the ASP.NET web framework. It is one of the [most popular repository](https://github.com/abpframework/abp) for open source application framework.
+
+ABP Framework is a modular and extensible framework that uses the clean architecture principles and is built on top of the latest .NET technologies. The framework comes with a set of pre-built modules, including user management, role management, permission management, content management system (CMS) modules, which makes it easier for developers to create line of business applications.
+
+
+
+## Clean Architecture
+
+When you want to start a new scratch project, you first google for Dotnet Framework Architecture. There are some boilerplate dotnet startup templates but these are only an orchestration of some popular tools. ABP is not a template but it's a full stack open source application development framework.
+
+When you say "Clean Architecture ASP.NET Core", the first web development framework that comes to mind is undoubtedly the ABP Framework. It is built using clean architecture principles, which help developers build scalable and maintainable applications. Clean architecture separates the application into distinct layers, each with a clear responsibility. The dotnet architecture layers include the presentation layer, application layer, domain layer, and infrastructure layer. Each layer has a clear responsibility, which helps in separating concerns and keeping the code organized. This makes ABP Framework one of the best asp net frameworks.
+
+
+
+## C# Web Framework for Web Development
+
+ABP Framework is built using C#, which is a modern programming language that is widely used in the development of web applications. C# provides developers with a set of features that make it easy to write clean and maintainable code. ABP Framework is a web framework that is designed to work with C# and provides developers with a set of tools that makes it easy to build modern web applications. If you are looking for an ASP NET Core shared framework download, then go to https://abp.io/get-started and create your project.
+
+
+
+## Yet another ASP.NET Web Framework
+
+There are a few full stack AspNet Core frameworks around. Many of them are one developer projects which can be risky for you to start a long running project. ABP Framework is built on top of the latest ASP NET Core Framework, which provides developers with a set of features that makes it easy to build modern web applications. And most important part is, ABP is backed with a large group of developers and it has almost 10K stars on GitHub. ASP.NET provides developers with a set of tools that makes it easy to build web applications using a model-view-controller (MVC) architecture.
+
+
+
+
+
+## Implementing Domain Driven Design with C#
+
+ABP Framework provides developers with a set of tools that make it easy to implement domain-driven design principles. The framework comes with a set of pre-built modules, including user management, role management, permission management, and content management system (CMS) modules, which makes it easier for developers to create complex applications.
+
+
+
+
+
+## Open Source Web Application
+
+ABP Framework is an open-source web application development framework that is free to use and distribute. The framework is licensed under the MIT license, which means that developers can use it for commercial and non-commercial purposes without any restrictions.
+
+
+
+## .NET Application Framework with Pre-Built Modules
+
+ABP Framework is built using the latest .NET technologies and provides developers with a set of tools that makes it easy to build modern web applications. ABP contains several important modules of a line of business applications.
+
+
+
+
+
+## C# Microservice Framework
+
+ABP Framework is a C# microservices framework that is designed to help developers build scalable and maintainable microservices. The framework is also known as .NET .net microservices framework. It provides developers with a set of tools that makes it easy to build microservices using clean architecture principles.
+
+
+
+
+
+## CRUD Tool Dotnet
+
+ABP Framework has a commercial version as well. The paid version comes with a premium support, rich themes and there's a very handy tool called [ABP Suite](https://commercial.abp.io/tools/suite) for "CRUD page generation ASP.NET". While ABP is not a low-code or no-code platform, ABP Suite provides ASP NET rapid application development. There are many ASP.NET rapid development tools but these are only tools without a framework support. If you are looking for web based rapid application development tools (also open-source), ABP is the way to go!
+
+
+
+## Modular Development
+
+One of the best sides of the ABP Framework is the modular development side. It's born as a modular system. There are several open source web frameworks around but many of them lack of modularity.
+
+
+
+Let's see the key features of the ABP Framework:
+
+- Multi-tenancy support
+- Cross-cutting concerns implemented
+- Full-stack microservice solution
+- SaaS framework
+- ASP.NET modular monolith
+- Has an ASP.NET user management module
+- Distributed events
+- Layered architecture
+- Free framework for website
+- Several framework templates
+
+
+
+## The Essential Features of ABP
+
+ABP Framework is an open source SaaS framework. This crucial feature distinguishes it from other open source web development frameworks.
+
+
+
+The following essential ASP.NET features are available in the ABP Framework:
+
+ASP.NET modularity, ASP.NET modular development, ASP.NET localization, ASP.NET multi-tenancy, ASP.NET SaaS, ASP.NET SaaS framework, ASP.NET distributed events, ASP.NET distributed event bus, ASP.NET cross-cutting concerns, ASP.NET blob storing, ASP.NET audit logging, ASP.NET microservice, ASP.NET microservice solution, ASP.NET microservice example, ASP.NET API gateway, ASP.NET domain driven design, ASP.NET layered architecture, ASP.NET layering, ASP.NET clean architecture, ASP.NET authentication, ASP.NET authorization, ASP.NET identity, ASP.NET identity server, ASP.NET IdentityServer, ASP.NET payment module, ASP.NET best practices, ASP.NET design patterns, ASP.NET background jobs, ASP.NET exception handling, ASP.NET background workers, ASP.NET repository, ASP.NET repository pattern, ASP.NET unit of work, ASP.NET domain services, ASP.NET swagger, ASP.NET content management system, ASP.NET user management, ASP.NET role management, ASP.NET permission management
+
+
+
+## Microservice Example: eShopOnAbp
+
+[eShopOnAbp](https://www.eshoponabp.com/) is a microservice example built on top ABP. It is a sample net application, similar to the Microsoft's [eShopOnContainer](https://github.com/dotnet-architecture/eShopOnContainers) project. It is a reference microservice solution built with the ABP Framework and .NET, runs on Kubernetes with Helm configuration, includes API Gateways, Angular and ASP.NET Core MVC applications with PostgreSQL and MongoDB databases. For more information, check out https://github.com/abpframework/eShopOnAbp.
+
+
+
+## Conclusion
+
+In conclusion, ABP Framework is an open-source web development framework that offers many features and benefits for building modern and scalable web applications. Its modular and extensible architecture, implementation of Domain-Driven Design, and compatibility with various platforms make it a popular choice for developers. Whether you're building a web application, microservices, or modular monoliths, ABP Framework has everything you need to get started.
+
+
+
+Whether you're building a dot net website, a web app infrastructure, or a webpage framework, open source web application frameworks are a cost-effective and flexible option for web development. If you are looking for an open source web application builder which contains project framework template with web application development tools (open source), [ABP Framework](https://abp.io/) is the right choice.
\ No newline at end of file
diff --git a/docs/en/Dependency-Injection.md b/docs/en/Dependency-Injection.md
index 47e60700bc..206c2c58a4 100644
--- a/docs/en/Dependency-Injection.md
+++ b/docs/en/Dependency-Injection.md
@@ -440,16 +440,16 @@ Use `ICachedServiceProvider` (instead of `ITransientCachedServiceProvider`) unle
## Advanced Features
-### IServiceCollection.OnRegistred Event
+### IServiceCollection.OnRegistered Event
-You may want to perform an action for every service registered to the dependency injection. In the `PreConfigureServices` method of your module, register a callback using the `OnRegistred` method as shown below:
+You may want to perform an action for every service registered to the dependency injection. In the `PreConfigureServices` method of your module, register a callback using the `OnRegistered` method as shown below:
````csharp
public class AppModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
- context.Services.OnRegistred(ctx =>
+ context.Services.OnRegistered(ctx =>
{
var type = ctx.ImplementationType;
//...
@@ -465,7 +465,7 @@ public class AppModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
- context.Services.OnRegistred(ctx =>
+ context.Services.OnRegistered(ctx =>
{
if (ctx.ImplementationType.IsDefined(typeof(MyLogAttribute), true))
{
@@ -478,7 +478,7 @@ public class AppModule : AbpModule
This example simply checks if the service class has `MyLogAttribute` attribute and adds `MyLogInterceptor` to the interceptor list if so.
-> Notice that `OnRegistred` callback might be called multiple times for the same service class if it exposes more than one service/interface. So, it's safe to use `Interceptors.TryAdd` method instead of `Interceptors.Add` method. See [the documentation](Dynamic-Proxying-Interceptors.md) of dynamic proxying / interceptors.
+> Notice that `OnRegistered` callback might be called multiple times for the same service class if it exposes more than one service/interface. So, it's safe to use `Interceptors.TryAdd` method instead of `Interceptors.Add` method. See [the documentation](Dynamic-Proxying-Interceptors.md) of dynamic proxying / interceptors.
## 3rd-Party Providers
diff --git a/docs/en/Multi-Tenancy.md b/docs/en/Multi-Tenancy.md
index 7dac3762aa..19cf8fa443 100644
--- a/docs/en/Multi-Tenancy.md
+++ b/docs/en/Multi-Tenancy.md
@@ -32,25 +32,6 @@ Configure(options =>
> Multi-Tenancy is disabled in the ABP Framework by default. However, it is **enabled by default** when you create a new solution using the [startup template](Startup-Templates/Application.md). `MultiTenancyConsts` class in the solution has a constant to control it in a single place.
-### AbpMultiTenancyOptions: Handle inactive and non-existent tenants.
-
-The `MultiTenancyMiddlewareErrorPageBuilder` of `AbpMultiTenancyOptions` is used to handle inactive and non-existent tenants.
-
-It will respond to an error page by default, you can change it if you want, eg: only output the error log and continue ASP NET Core's request pipeline.
-
-```csharp
-Configure(options =>
-{
- options.MultiTenancyMiddlewareErrorPageBuilder = async (context, exception) =>
- {
- // Handle the exception.
-
- // Return true to stop the pipeline, false to continue.
- return true;
- };
-});
-```
-
### Database Architecture
ABP Framework supports all the following approaches to store the tenant data in the database;
@@ -273,6 +254,23 @@ class SomeComponent {
> However, we don't suggest to change this value since some clients may assume the the `__tenant` as the parameter name and they might need to manually configure then.
+The `MultiTenancyMiddlewareErrorPageBuilder` is used to handle inactive and non-existent tenants.
+
+It will respond to an error page by default, you can change it if you want, eg: only output the error log and continue ASP NET Core's request pipeline.
+
+```csharp
+Configure(options =>
+{
+ options.MultiTenancyMiddlewareErrorPageBuilder = async (context, exception) =>
+ {
+ // Handle the exception.
+
+ // Return true to stop the pipeline, false to continue.
+ return true;
+ };
+});
+```
+
##### Domain/Subdomain Tenant Resolver
In a real application, most of times you will want to determine current tenant either by subdomain (like mytenant1.mydomain.com) or by the whole domain (like mytenant.com). If so, you can configure the `AbpTenantResolveOptions` to add the domain tenant resolver.
diff --git a/docs/en/Tutorials/Part-10.md b/docs/en/Tutorials/Part-10.md
index 6178ebbb8e..e71beccd6f 100644
--- a/docs/en/Tutorials/Part-10.md
+++ b/docs/en/Tutorials/Part-10.md
@@ -361,7 +361,7 @@ public class BookAppService :
GetListPolicyName = BookStorePermissions.Books.Default;
CreatePolicyName = BookStorePermissions.Books.Create;
UpdatePolicyName = BookStorePermissions.Books.Edit;
- DeletePolicyName = BookStorePermissions.Books.Create;
+ DeletePolicyName = BookStorePermissions.Books.Delete;
}
public override async Task GetAsync(Guid id)
diff --git a/docs/en/UI/Angular/Card-Component.md b/docs/en/UI/Angular/Card-Component.md
new file mode 100644
index 0000000000..861171c39e
--- /dev/null
+++ b/docs/en/UI/Angular/Card-Component.md
@@ -0,0 +1,206 @@
+# Card Component
+
+The ABP Card Component is a wrapper component for the Bootstrap card class.
+It supports all the features that Bootstrap card component provides.
+
+ABP Card Component has three main components, `CardHeader`, `CardBody` and `CardFooter`. These components have their own class and style inputs
+
+|Component |Selector |Input Properties |
+|--------- |-----------------|------------------------------------|
+|CardHeader|`abp-card-header`| `cardHeaderClass`,`cardHeaderStyle`|
+|CardBody |`abp-card-body` | `cardBodyClass`,`cardBodyStyle` |
+|CardFooter|`abp-card-footer`| `cardFooterClass`,`cardFooterStyle`|
+
+In addition to these components, the Card component provides directives like `CardHeader`,`CardTitle`,`CardSubtitle`,`CardImgTop`.
+
+|Directive |Selector |
+|-------------|-------------------------------------------------------------|
+|CardHeader |`abp-card-header`,`[abp-card-header]`,`[abpCardHeader]` |
+|CardTitle |`abp-card-title`,`[abp-card-title]`,`[abpCardTitle]` |
+|CardSubtitle |`abp-card-subtitle`,`[abp-card-subtitle]`,`[abpCardSubtitle]`|
+|CardImgTop |`abp-card-img-top`,`[abp-card-img-top]`,`[abpCardImgTop]` |
+
+
+# Usage
+
+ABP Card Component is a part of the `ThemeSharedModule` module. If you've imported that module into your module, you don't need to import it again. If not, first import it as shown below:
+
+```ts
+// my-feature.module.ts
+
+import { ThemeSharedModule } from '@abp/ng.theme.shared';
+import { CardDemoComponent } from './chart-demo.component';
+
+@NgModule({
+ imports: [
+ ThemeSharedModule ,
+ // ...
+ ],
+ declarations: [CardDemoComponent],
+ // ...
+})
+export class MyFeatureModule {}
+
+```
+
+Then, the `abp-card` component can be used. See the examples below:
+
+## CardBody
+
+```ts
+// card-demo.component.ts
+
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'app-card-demo',
+ template: `
+
+ This is some text within a card body
+
+ `,
+})
+export class CardDemoComponent { }
+```
+See the card body result below:
+
+
+
+## Titles, Text and Links
+
+```ts
+
+//card-demo.component.ts
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'app-card-demo',
+ template: `
+
+
+
Card Title
+
Card subtitle
+
Some quick example text to build on the card title and make up the bulk of the card's content.
+ Card link
+ Another link
+
+
+ `,
+})
+export class CardDemoComponent { }
+```
+See the card title, text and link result below:
+
+
+
+## Images
+
+```ts
+
+//card-demo.component.ts
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'app-card-demo',
+ template: `
+
+
+
+
Some quick example text to build on the card title and make up the bulk of the card's content.
+
+
+ `,
+})
+export class CardDemoComponent { }
+```
+See the card image result below:
+
+
+
+## List Groups
+
+```ts
+
+//card-demo.component.ts
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'app-card-demo',
+ template: `
+
+
+
An item
+
A second item
+
A third item
+
+
+ `,
+})
+export class CardDemoComponent { }
+```
+See the group list result below:
+
+
+
+## Kitchen Sink
+
+```ts
+
+//card-demo.component.ts
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'app-card-demo',
+ template: `
+
+
+
+
Card title
+
Some quick example text to build on the card title and make up the bulk of the card's content.
+
+
+
An item
+
A second item
+
A third item
+
+
+ Card link
+ Another link
+
+
+ `,
+})
+export class CardDemoComponent { }
+```
+See kitchen sink result below:
+
+
+
+## Header and Footer
+
+```ts
+
+//card-demo.component.ts
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'app-card-demo',
+ template: `
+
+ Featured
+
+
Special title treatment
+
With supporting text below as a natural lead-in to additional content.
+ Go somewhere
+
+
+ 2 days ago
+
+
+ `,
+})
+export class CardDemoComponent { }
+```
+See the header and footer result below:
+
+
diff --git a/docs/en/UI/Angular/Modifying-the-Menu.md b/docs/en/UI/Angular/Modifying-the-Menu.md
index b0a3b760fa..c59ce0d650 100644
--- a/docs/en/UI/Angular/Modifying-the-Menu.md
+++ b/docs/en/UI/Angular/Modifying-the-Menu.md
@@ -88,14 +88,65 @@ function configureRoutes(routes: RoutesService) {
}
```
+We can also define a group for navigation elements. It's an optional property
+ - **Note:** It'll also include groups that were defined at the modules
+
+```js
+// route.provider.ts
+import { RoutesService } from '@abp/ng.core';
+
+function configureRoutes(routes: RoutesService) {
+ return () => {
+ routes.add([
+ {
+ //etc..
+ group: 'ModuleName::GroupName'
+ },
+ {
+ path: '/your-path/child',
+ name: 'Your child navigation',
+ parentName: 'Your navigation',
+ requiredPolicy: 'permission key here',
+ order: 1,
+ },
+ ]);
+ };
+}
+```
+
+To get the route items as grouped we can use the `groupedVisible` (or Observable one `groupedVisible$`) getter methods
+ - It returns `RouteGroup[]` if there is any group in the route tree, otherwise it returns `undefined`
+
+```js
+import { ABP, RoutesService, RouteGroup } from "@abp/ng.core";
+import { Component } from "@angular/core";
+
+@Component(/* component metadata */)
+export class AppComponent {
+ visible: RouteGroup[] | undefined = this.routes.groupedVisible;
+ //Or
+ visible$:Observable[] | undefined> = this.routes.groupedVisible$;
+
+ constructor(private routes: RoutesService) {}
+}
+```
+
...and then in app.module.ts...
+ - The `groupedVisible` method will return the `Others` group for ungrouped items, the default key is `AbpUi::OthersGroup`, we can change this `key` via the `OTHERS_GROUP` injection token
```js
import { NgModule } from '@angular/core';
+import { OTHERS_GROUP } from '@abp/ng.core';
import { APP_ROUTE_PROVIDER } from './route.provider';
@NgModule({
- providers: [APP_ROUTE_PROVIDER],
+ providers: [
+ APP_ROUTE_PROVIDER,
+ {
+ provide: OTHERS_GROUP,
+ useValue: 'ModuleName::MyOthersGroupKey',
+ },
+ ],
// imports, declarations, and bootstrap
})
export class AppModule {}
@@ -109,8 +160,9 @@ Here is what every property works as:
- `requiredPolicy` is the permission key to access the page. See the [Permission Management document](./Permission-Management.md)
- `order` is the order of the navigation element. "Administration" has an order of `100`, so keep that in mind when ordering top level menu items.
- `iconClass` is the class of the `i` tag, which is placed to the left of the navigation label.
-- `layout` defines in which layout the route will be loaded. (default: `eLayoutType.empty`)
+- `layout` defines in which layout the route is loaded. (default: `eLayoutType.empty`)
- `invisible` makes the item invisible in the menu. (default: `false`)
+- `group` is an optional property that is used to group together related routes in an application. (type: `string`, default: `AbpUi::OthersGroup`)
### Via `routes` Property in `AppRoutingModule`
diff --git a/docs/en/UI/Angular/Quick-Start.md b/docs/en/UI/Angular/Quick-Start.md
index 768b3b7b67..dd26dd3efe 100644
--- a/docs/en/UI/Angular/Quick-Start.md
+++ b/docs/en/UI/Angular/Quick-Start.md
@@ -179,7 +179,7 @@ This command will download and start a simple static server, a browser window at
Of course, you need your application to run on an optimized web server and become available to everyone. This is quite straight-forward:
-1. Create a new static web server instance. You can use a service like [Azure App Service](https://azure.microsoft.com/tr-tr/services/app-service/web/), [Firebase](https://firebase.google.com/docs/hosting), [Netlify](https://www.netlify.com/), [Vercel](https://vercel.com/), or even [GitHub Pages](https://angular.io/guide/deployment#deploy-to-github-pages). Another option is maintaining own web server with [NGINX](https://www.nginx.com/), [IIS](https://www.iis.net/), [Apache HTTP Server](https://httpd.apache.org/), or equivalent.
+1. Create a new static web server instance. You can use a service like [Azure App Service](https://azure.microsoft.com/en-us/services/app-service/web/), [Firebase](https://firebase.google.com/docs/hosting), [Netlify](https://www.netlify.com/), [Vercel](https://vercel.com/), or even [GitHub Pages](https://angular.io/guide/deployment#deploy-to-github-pages). Another option is maintaining own web server with [NGINX](https://www.nginx.com/), [IIS](https://www.iis.net/), [Apache HTTP Server](https://httpd.apache.org/), or equivalent.
2. Copy the files from `dist/MyProjectName` [1](#f-dist-folder-name) to a publicly served destination on the server via CLI of the service provider, SSH, or FTP (whichever is available). This step would be defined as a job if you have a CI/CD flow.
3. [Configure the server](https://angular.io/guide/deployment#server-configuration) to redirect all requests to the _index.html_ file. Some services do that automatically. Others require you [to add a file to the bundle via assets](https://angular.io/guide/workspace-config#assets-configuration) which describes the server how to do the redirections. Occasionally, you may need to do manual configuration.
diff --git a/docs/en/UI/Angular/images/abp-card-body.png b/docs/en/UI/Angular/images/abp-card-body.png
new file mode 100644
index 0000000000..d5d7d07d29
Binary files /dev/null and b/docs/en/UI/Angular/images/abp-card-body.png differ
diff --git a/docs/en/UI/Angular/images/abp-card-component.png b/docs/en/UI/Angular/images/abp-card-component.png
new file mode 100644
index 0000000000..726c617772
Binary files /dev/null and b/docs/en/UI/Angular/images/abp-card-component.png differ
diff --git a/docs/en/UI/Angular/images/abp-card-header-footer.png b/docs/en/UI/Angular/images/abp-card-header-footer.png
new file mode 100644
index 0000000000..72f0d7be45
Binary files /dev/null and b/docs/en/UI/Angular/images/abp-card-header-footer.png differ
diff --git a/docs/en/UI/Angular/images/abp-card-header.png b/docs/en/UI/Angular/images/abp-card-header.png
new file mode 100644
index 0000000000..a13ed5b3fe
Binary files /dev/null and b/docs/en/UI/Angular/images/abp-card-header.png differ
diff --git a/docs/en/UI/Angular/images/abp-card-image.png b/docs/en/UI/Angular/images/abp-card-image.png
new file mode 100644
index 0000000000..c4136d524b
Binary files /dev/null and b/docs/en/UI/Angular/images/abp-card-image.png differ
diff --git a/docs/en/UI/Angular/images/abp-card-kitchen-sink.png b/docs/en/UI/Angular/images/abp-card-kitchen-sink.png
new file mode 100644
index 0000000000..908e062ff0
Binary files /dev/null and b/docs/en/UI/Angular/images/abp-card-kitchen-sink.png differ
diff --git a/docs/en/UI/Angular/images/abp-card-list-group.png b/docs/en/UI/Angular/images/abp-card-list-group.png
new file mode 100644
index 0000000000..aa7b746647
Binary files /dev/null and b/docs/en/UI/Angular/images/abp-card-list-group.png differ
diff --git a/docs/en/UI/Angular/images/abp-card-title-text-link.png b/docs/en/UI/Angular/images/abp-card-title-text-link.png
new file mode 100644
index 0000000000..af7d009929
Binary files /dev/null and b/docs/en/UI/Angular/images/abp-card-title-text-link.png differ
diff --git a/docs/en/UI/AspNetCore/Navigation-Menu.md b/docs/en/UI/AspNetCore/Navigation-Menu.md
index f0776f47ec..60621f9906 100644
--- a/docs/en/UI/AspNetCore/Navigation-Menu.md
+++ b/docs/en/UI/AspNetCore/Navigation-Menu.md
@@ -104,6 +104,7 @@ There are more options of a menu item (the constructor of the `ApplicationMenuIt
* `target` (`string`): Target of the menu item. Can be `null` (default), "\_*blank*", "\_*self*", "\_*parent*", "\_*top*" or a frame name for web applications.
* `elementId` (`string`): Can be used to render the element with a specific HTML `id` attribute.
* `cssClass` (`string`): Additional string classes for the menu item.
+* `groupName` (`string`): Can be used to group menu items.
### Authorization
@@ -179,6 +180,58 @@ userMenu.Icon = "fa fa-users";
> `context.Menu` gives you ability to access to all the menu items those have been added by the previous menu contributors.
+### Menu Groups
+
+You can define groups and associate menu items with a group.
+
+Example:
+
+```csharp
+using System.Threading.Tasks;
+using MyProject.Localization;
+using Volo.Abp.UI.Navigation;
+
+namespace MyProject.Web.Menus
+{
+ public class MyProjectMenuContributor : IMenuContributor
+ {
+ public async Task ConfigureMenuAsync(MenuConfigurationContext context)
+ {
+ if (context.Menu.Name == StandardMenus.Main)
+ {
+ await ConfigureMainMenuAsync(context);
+ }
+ }
+
+ private async Task ConfigureMainMenuAsync(MenuConfigurationContext context)
+ {
+ var l = context.GetLocalizer();
+
+ context.Menu.AddGroup(
+ new ApplicationMenuGroup(
+ name: "Main",
+ displayName: l["Main"]
+ )
+ )
+ context.Menu.AddItem(
+ new ApplicationMenuItem("MyProject.Crm", l["Menu:CRM"], groupName: "Main")
+ .AddItem(new ApplicationMenuItem(
+ name: "MyProject.Crm.Customers",
+ displayName: l["Menu:Customers"],
+ url: "/crm/customers")
+ ).AddItem(new ApplicationMenuItem(
+ name: "MyProject.Crm.Orders",
+ displayName: l["Menu:Orders"],
+ url: "/crm/orders")
+ )
+ );
+ }
+ }
+}
+```
+
+> The UI theme will decide whether to render the groups or not, and if it decides to render, the way it's rendered is up to the theme. Only the LeptonX theme implements the menu group.
+
## Standard Menus
A menu is a **named** component. An application may contain more than one menus with different, unique names. There are two pre-defined standard menus:
@@ -233,4 +286,3 @@ namespace MyProject.Web.Pages
}
}
```
-
diff --git a/docs/en/UI/AspNetCore/Tag-Helpers/Form-elements.md b/docs/en/UI/AspNetCore/Tag-Helpers/Form-elements.md
index 8f664a80a5..54e9712d30 100644
--- a/docs/en/UI/AspNetCore/Tag-Helpers/Form-elements.md
+++ b/docs/en/UI/AspNetCore/Tag-Helpers/Form-elements.md
@@ -10,7 +10,7 @@ See the [form elements demo page](https://bootstrap-taghelpers.abp.io/Components
## abp-input
-`abp-input` tag creates a Bootstrap form input for a given c# property. It uses [Asp.Net Core Input Tag Helper](https://docs.microsoft.com/tr-tr/aspnet/core/mvc/views/working-with-forms?view=aspnetcore-3.1#the-input-tag-helper) in background, so every data annotation attribute of `input` tag helper of Asp.Net Core is also valid for `abp-input`.
+`abp-input` tag creates a Bootstrap form input for a given c# property. It uses [Asp.Net Core Input Tag Helper](https://docs.microsoft.com/en-us/aspnet/core/mvc/views/working-with-forms?view=aspnetcore-7.0#the-input-tag-helper) in background, so every data annotation attribute of `input` tag helper of Asp.Net Core is also valid for `abp-input`.
Usage:
@@ -58,49 +58,49 @@ Model:
### Attributes
-You can set some of the attributes on your c# property, or directly on html tag. If you are going to use this property in a [abp-dynamic-form](Dynamic-forms.md), then you can only set these properties via property attributes.
+You can set some of the attributes on your c# property, or directly on HTML tag. If you are going to use this property in a [abp-dynamic-form](Dynamic-forms.md), then you can only set these properties via property attributes.
#### Property Attributes
- `[TextArea()]`: Converts the input into a text area.
-* `[Placeholder()]`: Sets placeholder for input. You can use a localization key directly.
-* `[InputInfoText()]`: Sets a small info text for input. You can use a localization key directly.
-* `[FormControlSize()]`: Sets size of form-control wrapper element. Available values are
+* `[Placeholder()]`: Sets the description are of the input. You can use a localization key directly.
+* `[InputInfoText()]`: Sets text for the input. You can directly use a localization key.
+* `[FormControlSize()]`: Sets the size of the form-control wrapper element. Available values are
- `AbpFormControlSize.Default`
- `AbpFormControlSize.Small`
- `AbpFormControlSize.Medium`
- `AbpFormControlSize.Large`
-* `[DisabledInput]` : Input is disabled.
-* `[ReadOnlyInput]`: Input is read-only.
+* `[DisabledInput]` : Sets the input as disabled.
+* `[ReadOnlyInput]`: Sets the input as read-only.
#### Tag Attributes
-* `info`: Sets a small info text for input. You can use a localization key directly.
-* `auto-focus`: If true, browser auto focuses on the element.
-* `size`: Sets size of form-control wrapper element. Available values are
+* `info`: Sets text for the input. You can directly use a localization key.
+* `auto-focus`: It lets the browser set focus to the element when its value is true.
+* `size`: Sets the size of the form-control wrapper element. Available values are
- `AbpFormControlSize.Default`
- `AbpFormControlSize.Small`
- `AbpFormControlSize.Medium`
- `AbpFormControlSize.Large`
-* `disabled`: Input is disabled.
-* `readonly`: Input is read-only.
-* `label`: Sets the label for input.
-* `display-required-symbol`: Adds the required symbol (*) to label if input is required. Default `True`.
+* `disabled`: Sets the input as disabled.
+* `readonly`: Sets the input as read-only.
+* `label`: Sets the label of input.
+* `required-symbol`: Adds the required symbol `(*)` to the label when the input is required. The default value is `True`.
-`asp-format`, `name` and `value` attributes of [Asp.Net Core Input Tag Helper](https://docs.microsoft.com/en-us/aspnet/core/mvc/views/working-with-forms?view=aspnetcore-3.1#the-input-tag-helper) are also valid for `abp-input` tag helper.
+`asp-format`, `name` and `value` attributes of [Asp.Net Core Input Tag Helper](https://docs.microsoft.com/en-us/aspnet/core/mvc/views/working-with-forms?view=aspnetcore-7.0#the-input-tag-helper) are also valid for `abp-input` tag helper.
### Label & Localization
-You can set label of your input in different ways:
+You can set the label of the input in several ways:
-- You can use `Label` attribute and directly set the label. But it doesn't auto localize your localization key. So use it as `label="@L["{LocalizationKey}"].Value"`.
-- You can set it using `[Display(name="{LocalizationKey}")]` attribute of Asp.Net Core.
+- You can use the `Label` attribute to set the label directly. This property does not automatically localize the text. To localize the label, use `label="@L["{LocalizationKey}"].Value"`.
+- You can set it using `[Display(name="{LocalizationKey}")]` attribute of ASP.NET Core.
- You can just let **abp** find the localization key for the property. It will try to find "DisplayName:{PropertyName}" or "{PropertyName}" localization keys, if `label` or `[DisplayName]` attributes are not set.
## abp-select
-`abp-select` tag creates a Bootstrap form select for a given c# property. It uses [Asp.Net Core Select Tag Helper](https://docs.microsoft.com/tr-tr/aspnet/core/mvc/views/working-with-forms?view=aspnetcore-3.1#the-select-tag-helper) in background, so every data annotation attribute of `select` tag helper of Asp.Net Core is also valid for `abp-select`.
+`abp-select` tag creates a Bootstrap form select for a given c# property. It uses [ASP.NET Core Select Tag Helper](https://docs.microsoft.com/tr-tr/aspnet/core/mvc/views/working-with-forms?view=aspnetcore-3.1#the-select-tag-helper) in background, so every data annotation attribute of `select` tag helper of ASP.NET Core is also valid for `abp-select`.
`abp-select` tag needs a list of `Microsoft.AspNetCore.Mvc.Rendering.SelectListItem ` to work. It can be provided by `asp-items` attriube on the tag or `[SelectItems()]` attribute on c# property. (if you are using [abp-dynamic-form](Dynamic-forms.md), c# attribute is the only way.)
@@ -170,14 +170,14 @@ Model:
### Attributes
-You can set some of the attributes on your c# property, or directly on html tag. If you are going to use this property in a [abp-dynamic-form](Dynamic-forms.md), then you can only set these properties via property attributes.
+You can set some of the attributes on your c# property, or directly on HTML tag. If you are going to use this property in a [abp-dynamic-form](Dynamic-forms.md), then you can only set these properties via property attributes.
#### Property Attributes
* `[SelectItems()]`: Sets the select data. Parameter should be the name of the data list. (see example above)
-- `[InputInfoText()]`: Sets a small info text for input. You can use a localization key directly.
-- `[FormControlSize()]`: Sets size of form-control wrapper element. Available values are
+- `[InputInfoText()]`: Sets text for the input. You can directly use a localization key.
+- `[FormControlSize()]`: Sets the size of the form-control wrapper element. Available values are
- `AbpFormControlSize.Default`
- `AbpFormControlSize.Small`
- `AbpFormControlSize.Medium`
@@ -186,21 +186,21 @@ You can set some of the attributes on your c# property, or directly on html tag.
#### Tag Attributes
- `asp-items`: Sets the select data. This Should be a list of SelectListItem.
-- `info`: Sets a small info text for input. You can use a localization key directly.
-- `size`: Sets size of form-control wrapper element. Available values are
+- `info`: Sets text for the input. You can directly use a localization key.
+- `size`: Sets the size of the form-control wrapper element. Available values are
- `AbpFormControlSize.Default`
- `AbpFormControlSize.Small`
- `AbpFormControlSize.Medium`
- `AbpFormControlSize.Large`
-- `label`: Sets the label for input.
-- `display-required-symbol`: Adds the required symbol (*) to label if input is required. Default `True`.
+- `label`: Sets the label of input.
+- `required-symbol`: Adds the required symbol `(*)` to the label when the input is required. The default value is `True`.
### Label & Localization
-You can set label of your input in different ways:
+You can set the label of the input in several ways:
- You can use `Label` attribute and directly set the label. But it doesn't auto localize your localization key. So use it as `label="@L["{LocalizationKey}"].Value".`
-- You can set it using `[Display(name="{LocalizationKey}")]` attribute of Asp.Net Core.
+- You can set it using `[Display(name="{LocalizationKey}")]` attribute of ASP.NET Core.
- You can just let **abp** find the localization key for the property. It will try to find "DisplayName:{PropertyName}" or "{PropertyName}" localization keys.
Localizations of combobox values are set by `abp-select` for **Enum** property. It searches for "{EnumTypeName}.{EnumPropertyName}" or "{EnumPropertyName}" localization keys. For instance, in the example above, it will use "CarType.StationWagon" or "StationWagon" keys for localization when it localizes combobox values.
@@ -251,7 +251,7 @@ Model:
### Attributes
-You can set some of the attributes on your c# property, or directly on html tag. If you are going to use this property in a [abp-dynamic-form](Dynamic-forms.md), then you can only set these properties via property attributes.
+You can set some of the attributes on your c# property, or directly on HTML tag. If you are going to use this property in a [abp-dynamic-form](Dynamic-forms.md), then you can only set these properties via property attributes.
#### Property Attributes
@@ -261,3 +261,172 @@ You can set some of the attributes on your c# property, or directly on html tag.
- `asp-items`: Sets the select data. This Should be a list of SelectListItem.
- `Inline`: If true, radio buttons will be in single line, next to each other. If false, they will be under each other.
+
+## abp-date-picker & abp-date-range-picker
+
+`abp-date-picker` and `abp-date-range-picker` tags creates a Bootstrap form date picker for a given c# property. `abp-date-picker` is for single date selection, `abp-date-range-picker` is for date range selection. It uses [datepicker](https://www.daterangepicker.com/) jQuery plugin.
+
+Usage:
+
+````xml
+
+
+
+````
+
+Model:
+
+````csharp
+ public class FormElementsModel : PageModel
+ {
+ public SampleModel MyModel { get; set; }
+
+ public DynamicForm DynamicFormExample { get; set; }
+
+ public void OnGet()
+ {
+ MyModel = new SampleModel();
+
+ DynamicFormExample = new DynamicForm();
+ }
+
+ public class SampleModel
+ {
+ public DateTime MyDate { get; set; }
+
+ public DateTime MyDateRangeStart { get; set; }
+
+ public DateTime MyDateRangeEnd { get; set; }
+ }
+
+ public class DynamicForm
+ {
+ [DateRangePicker("MyPicker",true)]
+ public DateTime StartDate { get; set; }
+
+ [DateRangePicker("MyPicker",false)]
+ [DatePickerOptions(nameof(DatePickerOptions))]
+ public DateTime EndDate { get; set; }
+
+ public DateTime DateTime { get; set; }
+
+ public DynamicForm()
+ {
+ StartDate = DateTime.Now;
+ EndDate = DateTime.Now;
+ DateTime = DateTime.Now;
+ }
+ }
+
+ public AbpDatePickerOptions DatePickerOptions { get; set; }
+ }
+````
+
+### Attributes
+
+You can set some of the attributes on your c# property, or directly on HTML tag. If you are going to use this property in a [abp-dynamic-form](Dynamic-forms.md), then you can only set these properties via property attributes.
+
+#### Property Attributes
+
+* `[Placeholder()]`: Sets the description are of the input. You can use a localization key directly.
+* `[InputInfoText()]`: Sets text for the input. You can directly use a localization key.
+* `[FormControlSize()]`: Sets the size of the form-control wrapper element. Available values are
+ - `AbpFormControlSize.Default`
+ - `AbpFormControlSize.Small`
+ - `AbpFormControlSize.Medium`
+ - `AbpFormControlSize.Large`
+* `[DisabledInput]` : Sets the input as disabled.
+* `[ReadOnlyInput]`: Sets the input as read-only.
+- `[DatePickerOptions()]`: Sets the predefined options of the date picker. Parameter should be the name of the options property (see example above). See the available [datepicker options](https://www.daterangepicker.com/#options). You can use a localization key directly.
+
+##### abp-date-picker
+`[DatePicker]` : Sets the input as datepicker. Especially for string properties.
+
+##### abp-date-range-picker
+`[DateRangePicker()]` : Sets the picker id for the date range picker. You can set the property as a start date by setting IsStart=true or leave it as default/false to set it as an end date.
+
+#### Tag Attributes
+
+* `info`: Sets text for the input. You can directly use a localization key.
+* `auto-focus`: It lets the browser set focus to the element when its value is true.
+* `size`: Sets the size of the form-control wrapper element. Available values are
+ - `AbpFormControlSize.Default`
+ - `AbpFormControlSize.Small`
+ - `AbpFormControlSize.Medium`
+ - `AbpFormControlSize.Large`
+* `disabled`: Sets the input as disabled.
+* `readonly`: Sets the input as read-only.
+* `label`: Sets the label of input.
+* `required-symbol`: Adds the required symbol `(*)` to the label when the input is required. The default value is `True`.
+* `open-button`: A button to open the datepicker will be added when its `True`. The default value is `True`.
+* `clear-button`: A button to clear the datepicker will be added when its `True`. The default value is `True`.
+* `single-open-and-clear-button`: Shows the open and clear buttons in a single button when it's `True`. The default value is `True`.
+* `is-utc`: Converts the date to UTC when its `True`. The default value is `False`.
+* `is-iso`: Converts the date to ISO format when its `True`. The default value is `False`.
+* `date-format`: Sets the date format of the input. The default format is the user's culture date format. You need to provide a JavaScript date format convention. Eg: `YYYY-MM-DDTHH:MM:SSZ`.
+* `date-separator`: Sets a character to separate start and end dates. The default value is `-`
+* Other non-mapped attributes will be automatically added to the input element as is. See the available [datepicker options](https://www.daterangepicker.com/#options). Eg: `data-start-date="2020-01-01"`
+
+##### abp-date-picker
+
+* `asp-date`: Sets the date value. This should be a `DateTime`, `DateTime?`, `DateTimeOffset`, `DateTimeOffset?` or `string` value.
+
+##### abp-date-range-picker
+
+* `asp-for-start`: Sets the start date value. This should be a `DateTime`, `DateTime?`, `DateTimeOffset`, `DateTimeOffset?` or `string` value.
+* `asp-for-end`: Sets the end date value. This should be a `DateTime`, `DateTime?`, `DateTimeOffset`, `DateTimeOffset?` or `string` value.
+
+### Label & Localization
+
+You can set the label of the input in several ways:
+
+- You can use the `Label` attribute to set the label directly. This property does not automatically localize the text. To localize the label, use `label="@L["{LocalizationKey}"].Value"`.
+- You can set it using `[Display(name="{LocalizationKey}")]` attribute ASP.NET Core.
+- You can just let **abp** find the localization key for the property. If the `label` or `[DisplayName]` attributes are not set, it tries to find the localization by convention. For example `DisplayName:{YourPropertyName}` or `{YourPropertyName}`. If your property name is FullName, it will search for `DisplayName:FullName` or `{FullName}`.
+
+### JavaScript Usage
+
+````javascript
+var newPicker = abp.libs.bootstrapDateRangePicker.createDateRangePicker(
+ {
+ label: "New Picker",
+ }
+);
+newPicker.insertAfter($('body'));
+````
+
+````javascript
+var newPicker = abp.libs.bootstrapDateRangePicker.createSinglePicker(
+ {
+ label: "New Picker",
+ }
+);
+newPicker.insertAfter($('body'));
+````
+
+#### Options
+
+* `label`: Sets the label of the input.
+* `placeholder`: Sets the placeholder of the input.
+* `value`: Sets the value of the input.
+* `name`: Sets the name of the input.
+* `id`: Sets the id of the input.
+* `required`: Sets the input as required.
+* `disabled`: Sets the input as disabled.
+* `readonly`: Sets the input as read-only.
+* `size`: Sets the size of the form-control wrapper element. Available values are
+ - `AbpFormControlSize.Default`
+ - `AbpFormControlSize.Small`
+ - `AbpFormControlSize.Medium`
+ - `AbpFormControlSize.Large`
+* `openButton`: A button to open the datepicker will be added when its `True`. The default value is `True`.
+* `clearButton`: A button to clear the datepicker will be added when its `True`. The default value is `True`.
+* `singleOpenAndClearButton`: Shows the open and clear buttons in a single button when it's `True`. The default value is `True`.
+* `isUtc`: Converts the date to UTC when its `True`. The default value is `False`.
+* `isIso`: Converts the date to ISO format when its `True`. The default value is `False`.
+* `dateFormat`: Sets the date format of the input. The default format is the user's culture date format. You need to provide a JavaScript date format convention. Eg: `YYYY-MM-DDTHH:MM:SSZ`.
+* `dateSeparator`: Sets a character to separate start and end dates. The default value is `-`.
+* `startDateName`: Sets the name of the hidden start date input.
+* `endDateName`: Sets the name of the hidden end date input.
+* `dateName`: Sets the name of the hidden date input.
+* Other [datepicker options](https://www.daterangepicker.com/#options). Eg: `startDate: "2020-01-01"`.
\ No newline at end of file
diff --git a/docs/en/UI/Blazor/Basic-Theme.md b/docs/en/UI/Blazor/Basic-Theme.md
index 4060f097ba..e4124d9a2c 100644
--- a/docs/en/UI/Blazor/Basic-Theme.md
+++ b/docs/en/UI/Blazor/Basic-Theme.md
@@ -85,6 +85,27 @@ You can simply override the styles in the Global Styles file of your application
See the [Customization / Overriding Components](Customization-Overriding-Components.md) to learn how you can replace components, customize and extend the user interface.
+### Overriding the Menu Item
+Basic theme supports overriding a single menu item with a custom component. You can create a custom component and call `UseComponent` extension method of Basic Theme in the **MenuContributor**.
+
+```csharp
+using Volo.Abp.AspNetCore.Components.Web.BasicTheme.Navigation;
+
+//...
+
+context.Menu.Items.Add(
+ new ApplicationMenuItem("Custom.1", "My Custom Menu", "#")
+ .UseComponent(typeof(MyMenuItemComponent)));
+```
+
+```html
+
+```
+
### Copy & Customize
You can run the following [ABP CLI](../../CLI.md) command in **Blazor{{if UI == "Blazor"}}WebAssembly{{else}} Server{{end}}** project directory to copy the source code to your solution:
diff --git a/docs/en/UI/Blazor/Navigation-Menu.md b/docs/en/UI/Blazor/Navigation-Menu.md
index 7f09a65dbb..0abac5fc68 100644
--- a/docs/en/UI/Blazor/Navigation-Menu.md
+++ b/docs/en/UI/Blazor/Navigation-Menu.md
@@ -104,6 +104,7 @@ There are more options of a menu item (the constructor of the `ApplicationMenuIt
* `target` (`string`): Target of the menu item. Can be `null` (default), "\_*blank*", "\_*self*", "\_*parent*", "\_*top*" or a frame name for web applications.
* `elementId` (`string`): Can be used to render the element with a specific HTML `id` attribute.
* `cssClass` (`string`): Additional string classes for the menu item.
+* `groupName` (`string`): Can be used to group menu items.
### Authorization
@@ -160,6 +161,58 @@ userMenu.Icon = "fa fa-users";
> `context.Menu` gives you ability to access to all the menu items those have been added by the previous menu contributors.
+### Menu Groups
+
+You can define groups and associate menu items with a group.
+
+Example:
+
+```csharp
+using System.Threading.Tasks;
+using MyProject.Localization;
+using Volo.Abp.UI.Navigation;
+
+namespace MyProject.Web.Menus
+{
+ public class MyProjectMenuContributor : IMenuContributor
+ {
+ public async Task ConfigureMenuAsync(MenuConfigurationContext context)
+ {
+ if (context.Menu.Name == StandardMenus.Main)
+ {
+ await ConfigureMainMenuAsync(context);
+ }
+ }
+
+ private async Task ConfigureMainMenuAsync(MenuConfigurationContext context)
+ {
+ var l = context.GetLocalizer();
+
+ context.Menu.AddGroup(
+ new ApplicationMenuGroup(
+ name: "Main",
+ displayName: l["Main"]
+ )
+ )
+ context.Menu.AddItem(
+ new ApplicationMenuItem("MyProject.Crm", l["Menu:CRM"], groupName: "Main")
+ .AddItem(new ApplicationMenuItem(
+ name: "MyProject.Crm.Customers",
+ displayName: l["Menu:Customers"],
+ url: "/crm/customers")
+ ).AddItem(new ApplicationMenuItem(
+ name: "MyProject.Crm.Orders",
+ displayName: l["Menu:Orders"],
+ url: "/crm/orders")
+ )
+ );
+ }
+ }
+}
+```
+
+> The UI theme will decide whether to render the groups or not, and if it decides to render, the way it's rendered is up to the theme. Only the LeptonX theme implements the menu group.
+
## Standard Menus
A menu is a **named** component. An application may contain more than one menus with different, unique names. There are two pre-defined standard menus:
diff --git a/docs/en/UI/Blazor/Overall.md b/docs/en/UI/Blazor/Overall.md
index 835bf4eab6..f38c0c257b 100644
--- a/docs/en/UI/Blazor/Overall.md
+++ b/docs/en/UI/Blazor/Overall.md
@@ -88,7 +88,7 @@ There are a set of standard libraries that comes pre-installed and supported by
* [Twitter Bootstrap](https://getbootstrap.com/) as the fundamental HTML/CSS framework.
* [Blazorise](https://github.com/stsrki/Blazorise) as a component library that supports the Bootstrap and adds extra components like Data Grid and Tree.
* [FontAwesome](https://fontawesome.com/) as the fundamental CSS font library.
-* [Flag Icon](https://github.com/lipis/flag-icon-css) as a library to show flags of countries.
+* [Flag Icon](https://github.com/lipis/flag-icons) as a library to show flags of countries.
These libraries are selected as the base libraries and available to the applications and modules.
diff --git a/docs/en/UI/Blazor/Theming.md b/docs/en/UI/Blazor/Theming.md
index d8cec07cb3..2496df9b20 100644
--- a/docs/en/UI/Blazor/Theming.md
+++ b/docs/en/UI/Blazor/Theming.md
@@ -48,7 +48,7 @@ All the themes must depend on the [Volo.Abp.AspNetCore.Components.Server.Theming
* [Twitter Bootstrap](https://getbootstrap.com/) as the fundamental HTML/CSS framework.
* [Blazorise](https://github.com/stsrki/Blazorise) as a component library that supports the Bootstrap and adds extra components like Data Grid and Tree.
* [FontAwesome](https://fontawesome.com/) as the fundamental CSS font library.
-* [Flag Icon](https://github.com/lipis/flag-icon-css) as a library to show flags of countries.
+* [Flag Icon](https://github.com/lipis/flag-icons) as a library to show flags of countries.
These libraries are selected as the base libraries and available to the applications and modules.
diff --git a/docs/zh-Hans/Background-Jobs-Hangfire.md b/docs/zh-Hans/Background-Jobs-Hangfire.md
index fb899758cc..d3fb341bab 100644
--- a/docs/zh-Hans/Background-Jobs-Hangfire.md
+++ b/docs/zh-Hans/Background-Jobs-Hangfire.md
@@ -66,6 +66,8 @@ public class YourModule : AbpModule
}
````
+> 你必须为Hangfire配置一个存储
+
### 指定队列
你可以使用 [`QueueAttribute`](https://docs.hangfire.io/en/latest/background-processing/configuring-queues.html) 来指定队列.
diff --git a/docs/zh-Hans/Background-Workers-Hangfire.md b/docs/zh-Hans/Background-Workers-Hangfire.md
index fde7b35973..bdd546eba8 100644
--- a/docs/zh-Hans/Background-Workers-Hangfire.md
+++ b/docs/zh-Hans/Background-Workers-Hangfire.md
@@ -41,6 +41,36 @@ public class YourModule : AbpModule
> Hangfire后台工作者集成提供了 `HangfirePeriodicBackgroundWorkerAdapter` 来适配 `PeriodicBackgroundWorkerBase` 和 `AsyncPeriodicBackgroundWorkerBase` 派生类. 所以你依然可以按照[后台工作者文档](Background-Workers.md)来定义后台作业.
+## 配置
+
+你可以安装任何Hangfire存储. 最常用的是SQL Server(参阅[Hangfire.SqlServer](https://www.nuget.org/packages/Hangfire.SqlServer)NuGet包).
+
+当你安装NuGet包后,你需要为你的项目配置Hangfire.
+
+1.首先, 我们需要更改 `Module` 类 (例如: `HttpApiHostModule`) 的 `ConfigureServices` 方法去配置Hangfire存储和连接字符串:
+
+````csharp
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ var configuration = context.Services.GetConfiguration();
+ var hostingEnvironment = context.Services.GetHostingEnvironment();
+
+ //... other configarations.
+
+ ConfigureHangfire(context, configuration);
+ }
+
+ private void ConfigureHangfire(ServiceConfigurationContext context, IConfiguration configuration)
+ {
+ context.Services.AddHangfire(config =>
+ {
+ config.UseSqlServerStorage(configuration.GetConnectionString("Default"));
+ });
+ }
+````
+
+> 你必须为Hangfire配置一个存储
+
## 创建后台工作者
`HangfireBackgroundWorkerBase` 是创建一个后台工作者简单的方法.
diff --git a/docs/zh-Hans/Dependency-Injection.md b/docs/zh-Hans/Dependency-Injection.md
index 2264a12930..2c22c123ab 100644
--- a/docs/zh-Hans/Dependency-Injection.md
+++ b/docs/zh-Hans/Dependency-Injection.md
@@ -270,16 +270,16 @@ using (var scope = _serviceProvider.CreateScope())
## 高级特性
-### IServiceCollection.OnRegistred 事件
+### IServiceCollection.OnRegistered 事件
-你可能想在注册到依赖注入的每个服务上执行一个操作, 在你的模块的 `PreConfigureServices` 方法中, 使用 `OnRegistred` 方法注册一个回调(callback) , 如下所示:
+你可能想在注册到依赖注入的每个服务上执行一个操作, 在你的模块的 `PreConfigureServices` 方法中, 使用 `OnRegistered` 方法注册一个回调(callback) , 如下所示:
````csharp
public class AppModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
- context.Services.OnRegistred(ctx =>
+ context.Services.OnRegistered(ctx =>
{
var type = ctx.ImplementationType;
//...
@@ -295,7 +295,7 @@ public class AppModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
- context.Services.OnRegistred(ctx =>
+ context.Services.OnRegistered(ctx =>
{
if (ctx.ImplementationType.IsDefined(typeof(MyLogAttribute), true))
{
@@ -308,7 +308,7 @@ public class AppModule : AbpModule
这个示例判断一个服务类是否具有 `MyLogAttribute` 特性, 如果有的话就添加一个 `MyLogInterceptor` 到拦截器集合中.
-> 注意, 如果服务类公开了多于一个服务或接口, `OnRegistred` 回调(callback)可能被同一服务类多次调用. 因此, 较安全的方法是使用 `Interceptors.TryAdd` 方法而不是 `Interceptors.Add` 方法. 请参阅动态代理(dynamic proxying)/拦截器 [文档](Dynamic-Proxying-Interceptors.md).
+> 注意, 如果服务类公开了多于一个服务或接口, `OnRegistered` 回调(callback)可能被同一服务类多次调用. 因此, 较安全的方法是使用 `Interceptors.TryAdd` 方法而不是 `Interceptors.Add` 方法. 请参阅动态代理(dynamic proxying)/拦截器 [文档](Dynamic-Proxying-Interceptors.md).
## 第三方提供程序
diff --git a/docs/zh-Hans/Tutorials/Part-10.md b/docs/zh-Hans/Tutorials/Part-10.md
index 170e3106a1..da5c23c78f 100644
--- a/docs/zh-Hans/Tutorials/Part-10.md
+++ b/docs/zh-Hans/Tutorials/Part-10.md
@@ -367,7 +367,7 @@ namespace Acme.BookStore.Books
GetListPolicyName = BookStorePermissions.Books.Default;
CreatePolicyName = BookStorePermissions.Books.Create;
UpdatePolicyName = BookStorePermissions.Books.Edit;
- DeletePolicyName = BookStorePermissions.Books.Create;
+ DeletePolicyName = BookStorePermissions.Books.Delete;
}
public override async Task GetAsync(Guid id)
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server/Microsoft/AspNetCore/Authentication/Cookies/CookieAuthenticationOptionsExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Components.Server/Microsoft/AspNetCore/Authentication/Cookies/CookieAuthenticationOptionsExtensions.cs
new file mode 100644
index 0000000000..61c064b376
--- /dev/null
+++ b/framework/src/Volo.Abp.AspNetCore.Components.Server/Microsoft/AspNetCore/Authentication/Cookies/CookieAuthenticationOptionsExtensions.cs
@@ -0,0 +1,56 @@
+using System;
+using IdentityModel.Client;
+using Microsoft.AspNetCore.Authentication.OpenIdConnect;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Options;
+
+namespace Microsoft.AspNetCore.Authentication.Cookies;
+
+public static class CookieAuthenticationOptionsExtensions
+{
+ ///
+ /// Introspect access token on validating the principal.
+ ///
+ ///
+ ///
+ ///
+ public static CookieAuthenticationOptions IntrospectAccessToken(this CookieAuthenticationOptions options, string oidcAuthenticationScheme = "oidc")
+ {
+ var originalHandler = options.Events.OnValidatePrincipal;
+ options.Events.OnValidatePrincipal = async principalContext =>
+ {
+ originalHandler?.Invoke(principalContext);
+
+ if (principalContext.Principal != null && principalContext.Principal.Identity != null && principalContext.Principal.Identity.IsAuthenticated)
+ {
+ var accessToken = principalContext.Properties.GetTokenValue("access_token");
+ if (!accessToken.IsNullOrWhiteSpace())
+ {
+ var openIdConnectOptions = principalContext.HttpContext.RequestServices.GetRequiredService>().Get(oidcAuthenticationScheme);
+ if (openIdConnectOptions.Configuration == null && openIdConnectOptions.ConfigurationManager != null)
+ {
+ openIdConnectOptions.Configuration = await openIdConnectOptions.ConfigurationManager.GetConfigurationAsync(principalContext.HttpContext.RequestAborted);
+ }
+
+ var response = await openIdConnectOptions.Backchannel.IntrospectTokenAsync(new TokenIntrospectionRequest
+ {
+ Address = openIdConnectOptions.Configuration?.IntrospectionEndpoint ?? openIdConnectOptions.Authority.EnsureEndsWith('/') + "connect/introspect",
+ ClientId = openIdConnectOptions.ClientId,
+ ClientSecret = openIdConnectOptions.ClientSecret,
+ Token = accessToken
+ });
+
+ if (response.IsActive)
+ {
+ return;
+ }
+ }
+
+ principalContext.RejectPrincipal();
+ await principalContext.HttpContext.SignOutAsync(principalContext.Scheme.Name);
+ }
+ };
+
+ return options;
+ }
+}
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server/Volo.Abp.AspNetCore.Components.Server.csproj b/framework/src/Volo.Abp.AspNetCore.Components.Server/Volo.Abp.AspNetCore.Components.Server.csproj
index 09c743bc2a..297b2a8576 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.Server/Volo.Abp.AspNetCore.Components.Server.csproj
+++ b/framework/src/Volo.Abp.AspNetCore.Components.Server/Volo.Abp.AspNetCore.Components.Server.csproj
@@ -12,11 +12,13 @@
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/Extensibility/TableColumns/TableColumn.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/Extensibility/TableColumns/TableColumn.cs
index 9a6a40a17a..aa48ad633b 100644
--- a/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/Extensibility/TableColumns/TableColumn.cs
+++ b/framework/src/Volo.Abp.AspNetCore.Components.Web/Volo/Abp/AspNetCore/Components/Web/Extensibility/TableColumns/TableColumn.cs
@@ -10,14 +10,22 @@ public class TableColumn
{
public string Title { get; set; }
public string Data { get; set; }
+
+ public string PropertyName { get; set; }
+
[CanBeNull]
public string DisplayFormat { get; set; }
+
public IFormatProvider DisplayFormatProvider { get; set; } = CultureInfo.CurrentCulture;
+
[CanBeNull]
public Type Component { get; set; }
+
public List Actions { get; set; }
+
[CanBeNull]
public Func