diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ar.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ar.json index 43d4ff28a0..2cc5c7a11f 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ar.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ar.json @@ -796,6 +796,7 @@ "PaymentFailedInfo": "عذرا، فشل الدفع! ", "UsedPayment": "لقد تم استخدام هذه الدفعة بالفعل", "ManageLicense": "التحكم في الترخيص", - "AbpPlatformLeptonXTheme": "سمة LeptonX للوحة تحكم المشرف الخاصة بك من قبل ABP Platform" + "AbpPlatformLeptonXTheme": "سمة LeptonX للوحة تحكم المشرف الخاصة بك من قبل ABP Platform", + "Previous": "سابق" } } diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/cs.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/cs.json index c3115ecb93..4861435912 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/cs.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/cs.json @@ -410,7 +410,7 @@ "PaymentFailedInfo": "Omlouváme se, platba se nezdařila! ", "UsedPayment": "Tato platba již byla použita", "ManageLicense": "Správa licence", - "AbpPlatformLeptonXTheme": "LeptonX téma pro váš správce účtu od ABP Platform" - + "AbpPlatformLeptonXTheme": "LeptonX téma pro váš správce účtu od ABP Platform", + "Previous": "Předchozí" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/de.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/de.json index 2f0187d190..5d1f760655 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/de.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/de.json @@ -391,6 +391,7 @@ "PaymentFailedInfo": "Entschuldigung, die Zahlung ist fehlgeschlagen! ", "UsedPayment": "Diese Zahlung wurde bereits verwendet", "ManageLicense": "Lizenz verwalten", - "AbpPlatformLeptonXTheme": "LeptonX-Theme für Ihr Admin-Dashboard von ABP Platform" + "AbpPlatformLeptonXTheme": "LeptonX-Theme für Ihr Admin-Dashboard von ABP Platform", + "Previous": "Vorherige" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en-GB.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en-GB.json index 3636e5d08e..a4044de13f 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en-GB.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en-GB.json @@ -113,6 +113,7 @@ "BlackFridayDiscount": "Black Friday Discount", "MultipleOrganizationInfo": "See All Your Organizations", "PaymentFailedInfo": "Sorry, payment failed! This could be due to insufficient funds, invalid credit card numbers or invalid pin", - "UsedPayment": "This payment has been already used" + "UsedPayment": "This payment has been already used", + "Previous": "Previous" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index 4c7c9ffec3..0c4448e8a9 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -1180,6 +1180,7 @@ "ReturnOfInvestmentPageAbout": "This page covers the fundamental steps of developing a software solution and explains how the ABP.IO Platform reduces your development costs at each step.", "LearnMore": "Learn More", "ReturnOfInvestment": "Return of Investment", - "ReturnOfInvestment_Description": "Learn how to reduce your development costs by more than %50." + "ReturnOfInvestment_Description": "Learn how to reduce your development costs by more than %50.", + "Previous": "Previous" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/es.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/es.json index 3055152190..10875ea1b8 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/es.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/es.json @@ -391,6 +391,7 @@ "PaymentFailedInfo": "Lo sentimos, ¡el pago falló! ", "UsedPayment": "Este pago ya ha sido utilizado.", "ManageLicense": "Gestionar licencia", - "AbpPlatformLeptonXTheme": "Tema LeptonX para su panel de administración por ABP Platform" + "AbpPlatformLeptonXTheme": "Tema LeptonX para su panel de administración por ABP Platform", + "Previous": "Anterior" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json index 6a9c7014e5..e303f60dbd 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json @@ -832,6 +832,7 @@ "PaymentFailedInfo": "Anteeksi, maksu epäonnistui! ", "UsedPayment": "Tämä maksu on jo käytetty", "ManageLicense": "Hallinnoi lisenssiä", - "AbpPlatformLeptonXTheme": "LeptonX-teema hallintapaneelillesi ABP Platformin toimesta ABP Platform" + "AbpPlatformLeptonXTheme": "LeptonX-teema hallintapaneelillesi ABP Platformin toimesta ABP Platform", + "Previous": "Edellinen" } } \ 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 1308409a4b..c7cae03c8c 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fr.json @@ -410,6 +410,7 @@ "PaymentFailedInfo": "Désolé, le paiement a échoué! ", "UsedPayment": "Ce paiement a déjà été utilisé", "ManageLicense": "Gérer la licence", - "AbpPlatformLeptonXTheme": "Thème LeptonX pour votre tableau de bord administrateur par ABP Platform" + "AbpPlatformLeptonXTheme": "Thème LeptonX pour votre tableau de bord administrateur par ABP Platform", + "Previous": "Précédent" } } \ 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 d4088fc14a..36ac06ab07 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hi.json @@ -409,6 +409,7 @@ "PaymentFailedInfo": "क्षमा करें, भुगतान विफल रहा! ", "UsedPayment": "इस भुगतान का उपयोग पहले ही किया जा चुका है", "ManageLicense": "लाइसेंस प्रबंधन", - "AbpPlatformLeptonXTheme": "ABP Platform द्वारा आपके व्यवस्थापक डैशबोर्ड के लिए LeptonX थीम" + "AbpPlatformLeptonXTheme": "ABP Platform द्वारा आपके व्यवस्थापक डैशबोर्ड के लिए LeptonX थीम", + "Previous": "पहले का" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hr.json index 7396ceea89..d5f2ee2455 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hr.json @@ -1088,6 +1088,7 @@ "PaymentFailedInfo": "Nažalost, plaćanje nije uspjelo! ", "UsedPayment": "Ovo plaćanje je već iskorišteno", "ManageLicense": "Upravljanje licencom", - "AbpPlatformLeptonXTheme": "LeptonX Tema za vašu administratorsku nadzornu ploču od strane ABP Platform" + "AbpPlatformLeptonXTheme": "LeptonX Tema za vašu administratorsku nadzornu ploču od strane ABP Platform", + "Previous": "Prethodno" } } \ 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 b6169dedb1..03c1fe410e 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hu.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hu.json @@ -758,6 +758,7 @@ "PaymentFailedInfo": "Sajnos a fizetés sikertelen! ", "UsedPayment": "Ezt a fizetést már felhasználták", "ManageLicense": "Licenc kezelése", - "AbpPlatformLeptonXTheme": "LeptonX téma az Adminisztrációs Vezérlőpultjához az ABP Platform által" + "AbpPlatformLeptonXTheme": "LeptonX téma az Adminisztrációs Vezérlőpultjához az ABP Platform által", + "Previous": "Előző" } } \ 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 f2fe887688..6ddc3d9665 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/is.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/is.json @@ -388,6 +388,7 @@ "PaymentFailedInfo": "Því miður, greiðsla mistókst! ", "UsedPayment": "Þessi greiðsla hefur þegar verið notuð", "ManageLicense": "Stjórna leyfi", - "AbpPlatformLeptonXTheme": "LeptonX Þema fyrir stjórnborð stjórnanda þíns af ABP Platform" + "AbpPlatformLeptonXTheme": "LeptonX Þema fyrir stjórnborð stjórnanda þíns af ABP Platform", + "Previous": "Fyrri" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json index ca62992ead..a29242c20e 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json @@ -409,6 +409,7 @@ "PaymentFailedInfo": "Siamo spiacenti, pagamento non riuscito! ", "UsedPayment": "Questo pagamento è già stato utilizzato", "ManageLicense": "Gestisci la licenza", - "AbpPlatformLeptonXTheme": "Tema LeptonX per la tua bacheca amministrativa di ABP Platform" + "AbpPlatformLeptonXTheme": "Tema LeptonX per la tua bacheca amministrativa di ABP Platform", + "Previous": "Precedente" } } \ 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 43a2ec29fb..d4414aec51 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/nl.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/nl.json @@ -388,6 +388,7 @@ "PaymentFailedInfo": "Excuses, betaling mislukt! ", "UsedPayment": "Deze betaling is al gebruikt", "ManageLicense": "Licentie beheren", - "AbpPlatformLeptonXTheme": "LeptonX-thema voor uw beheerdersdashboard door ABP Platform" + "AbpPlatformLeptonXTheme": "LeptonX-thema voor uw beheerdersdashboard door ABP Platform", + "Previous": "Vorig" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pl-PL.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pl-PL.json index e5c2d99253..15f305439b 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pl-PL.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pl-PL.json @@ -388,6 +388,7 @@ "PaymentFailedInfo": "Przepraszamy, płatność nie powiodła się! ", "UsedPayment": "Ta płatność została już wykorzystana", "ManageLicense": "Zarządzaj licencją", - "AbpPlatformLeptonXTheme": "Motyw LeptonX dla Twojej konsoli administracyjnej od ABP Platform" + "AbpPlatformLeptonXTheme": "Motyw LeptonX dla Twojej konsoli administracyjnej od ABP Platform", + "Previous": "Poprzedni" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pt-BR.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pt-BR.json index 7d5b636488..11866ee839 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pt-BR.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/pt-BR.json @@ -411,6 +411,7 @@ "PaymentFailedInfo": "Desculpe, o pagamento falhou! ", "UsedPayment": "Este pagamento já foi usado", "ManageLicense": "Gerenciar Licença", - "AbpPlatformLeptonXTheme": "Tema LeptonX para o seu Painel de Administração por ABP Platform" + "AbpPlatformLeptonXTheme": "Tema LeptonX para o seu Painel de Administração por ABP Platform", + "Previous": "Anterior" } } \ 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 cd438f98cd..731d2a7dc7 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ro-RO.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ro-RO.json @@ -388,6 +388,7 @@ "PaymentFailedInfo": "Ne pare rău, plata nu a reușit! ", "UsedPayment": "Această plată a fost deja utilizată", "ManageLicense": "Administrare licență", - "AbpPlatformLeptonXTheme": "Tema LeptonX pentru panoul tău de administrare de la ABP Platform" + "AbpPlatformLeptonXTheme": "Tema LeptonX pentru panoul tău de administrare de la ABP Platform", + "Previous": "Anterior" } } \ 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 782743ab76..7c504f57db 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ru.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ru.json @@ -1089,6 +1089,7 @@ "PaymentFailedInfo": "Извините, оплата не удалась! ", "UsedPayment": "Этот платеж уже использован", "ManageLicense": "Управление лицензией", - "AbpPlatformLeptonXTheme": "Тема LeptonX для вашей панели администратора от ABP Platform" + "AbpPlatformLeptonXTheme": "Тема LeptonX для вашей панели администратора от ABP Platform", + "Previous": "Предыдущий" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sk.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sk.json index 473d23ca48..d709d3a146 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sk.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sk.json @@ -407,6 +407,7 @@ "PaymentFailedInfo": "Ľutujeme, platba zlyhala! ", "UsedPayment": "Táto platba už bola použitá", "ManageLicense": "Spravovať licenciu", - "AbpPlatformLeptonXTheme": "Téma LeptonX pre váš administratívny panel od ABP Platform" + "AbpPlatformLeptonXTheme": "Téma LeptonX pre váš administratívny panel od ABP Platform", + "Previous": "Predchádzajúce" } } \ 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 314dcce4b3..cc935ed0de 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sl.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/sl.json @@ -388,6 +388,7 @@ "PaymentFailedInfo": "Žal plačilo ni uspelo! ", "UsedPayment": "To plačilo je že bilo uporabljeno", "ManageLicense": "Upravljanje licenco", - "AbpPlatformLeptonXTheme": "LeptonX Tema za vaš upraviteljski nadzorni pult s strani ABP Platform" + "AbpPlatformLeptonXTheme": "LeptonX Tema za vaš upraviteljski nadzorni pult s strani ABP Platform", + "Previous": "Prejšnja" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json index d11e461116..11884275b4 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json @@ -998,6 +998,7 @@ "MyOrganizations_Detail_LicenseStartDate": "Lisans Başlangıç Tarihi", "MyOrganizations_Detail_LicenseExpiryDate": "Bitiş Tarihi", "ManageLicense": "Lisansı Yönet", - "AbpPlatformLeptonXTheme": "ABP Platform Yönetici Kontrol Paneliniz için LeptonX Teması" + "AbpPlatformLeptonXTheme": "ABP Platform Yönetici Kontrol Paneliniz için LeptonX Teması", + "Previous": "Önceki" } } \ 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 39f1b7cb9c..77d8968c5c 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/vi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/vi.json @@ -388,6 +388,7 @@ "PaymentFailedInfo": "Rất tiếc, thanh toán không thành công! ", "UsedPayment": "Khoản thanh toán này đã được sử dụng", "ManageLicense": "Quản lý Giấy phép", - "AbpPlatformLeptonXTheme": "Chủ đề LeptonX cho Bảng điều khiển quản trị của bạn bởi ABP Platform" + "AbpPlatformLeptonXTheme": "Chủ đề LeptonX cho Bảng điều khiển quản trị của bạn bởi ABP Platform", + "Previous": "Trước" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json index 19aac6757d..0d65066fc5 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json @@ -1090,6 +1090,7 @@ "PaymentFailedInfo": "抱歉,支付失败!", "UsedPayment": "该付款已被使用", "ManageLicense": "管理许可证", - "AbpPlatformLeptonXTheme": "由 ABP Platform 提供的您的管理仪表板的 LeptonX 主题" + "AbpPlatformLeptonXTheme": "由 ABP Platform 提供的您的管理仪表板的 LeptonX 主题", + "Previous": "以前的" } } 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 b1e8e87a21..b495b690dd 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json @@ -1079,6 +1079,7 @@ "PaymentFailedInfo": "抱歉,支付失败!", "UsedPayment": "该付款已被使用", "ManageLicense": "管理許可證", - "AbpPlatformLeptonXTheme": "由 ABP Platform 提供的您的管理儀表板的 LeptonX 主題" + "AbpPlatformLeptonXTheme": "由 ABP Platform 提供的您的管理儀表板的 LeptonX 主題", + "Previous": "以前的" } } \ No newline at end of file diff --git a/docs/en/Road-Map.md b/docs/en/Road-Map.md index 05e071371a..9dfbb86d41 100644 --- a/docs/en/Road-Map.md +++ b/docs/en/Road-Map.md @@ -1,33 +1,31 @@ # ABP Framework Road Map -This document provides a road map, release schedule and planned features for the ABP Framework. +This document provides a road map, release schedule, and planned features for the ABP Framework. ## Next Versions -### v8.1 +### v8.2 -The next version will be 8.1 and planned to release the stable 8.1 version in February, 2024. We will be mostly working on the following topics: +The next version will be 8.2 and planned to release the stable 8.2 version in June 2024. We will be mostly working on the following topics: -* Blazor Full-Stack UI ([#16156](https://github.com/abpframework/abp/issues/16156)) -* Upgrade to OpenIddict 5.x ([#17605](https://github.com/abpframework/abp/issues/17605)) +* Blazor Full-Stack UI ([#18289](https://github.com/abpframework/abp/issues/18289)) * Angular Universal ([#15782](https://github.com/abpframework/abp/issues/15782)) -* Blazor - Forms & Validation Documentation ([#16400](https://github.com/abpframework/abp/issues/16400)) +* Upgrading React Native template to the latest major release 0.72.7 ([#18191](https://github.com/abpframework/abp/issues/18191)) * Deployment Documents Improvements ([#15034](https://github.com/abpframework/abp/issues/15034)) * Improvements on the existing features and provide more guides. -See the [8.1 milestone](https://github.com/abpframework/abp/milestone/94) for all the issues we've planned to work on. +See the [8.2 milestone](https://github.com/abpframework/abp/milestone/95) for all the issues we've planned to work on. ## Backlog Items -The *Next Versions* section above shows the main focus of the planned versions. However, in each release we add new features to the core framework and the [application modules](Modules/Index.md). +The *Next Versions* section above shows the main focus of the planned versions. However, in each release, we add new features to the core framework and the [application modules](Modules/Index.md). Here is a list of major items in the backlog we are considering working on in the next versions. -* [#6655](https://github.com/abpframework/abp/pull/6655) / Use Typescript for the MVC UI +* [#86](https://github.com/abpframework/abp/issues/86) / GrapQL Integration * [#236](https://github.com/abpframework/abp/issues/236) / Resource based authorization system * [#2882](https://github.com/abpframework/abp/issues/2882) / Providing a gRPC integration infrastructure (while it is [already possible](https://github.com/abpframework/abp-samples/tree/master/GrpcDemo) to create or consume gRPC endpoints for your application, we plan to create endpoints for the [standard application modules](https://docs.abp.io/en/abp/latest/Modules/Index)) * [#57](https://github.com/abpframework/abp/issues/57) / Built-in CQRS infrastructure -* [#2532](https://github.com/abpframework/abp/issues/2532) / CosmosDB integration with EF Core and MongoDB API * [#4223](https://github.com/abpframework/abp/issues/4223) / WebHook system * [#162](https://github.com/abpframework/abp/issues/162) / Azure ElasticDB Integration for multitenancy * [#2296](https://github.com/abpframework/abp/issues/2296) / Feature toggling infrastructure diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs index 05dd4527fc..b06ba191dd 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs @@ -316,7 +316,7 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, break; case EntityState.Modified: ApplyAbpConceptsForModifiedEntity(entry); - if (entry.Properties.Any(x => x.IsModified && x.Metadata.ValueGenerated == ValueGenerated.Never)) + if (entry.Properties.Any(x => x.IsModified && (x.Metadata.ValueGenerated == ValueGenerated.Never || x.Metadata.ValueGenerated == ValueGenerated.OnAdd))) { if (entry.Entity is ISoftDelete && entry.Entity.As().IsDeleted) { diff --git a/latest-versions.json b/latest-versions.json index aa4257f8a2..7752a099aa 100644 --- a/latest-versions.json +++ b/latest-versions.json @@ -1,6 +1,6 @@ [ { - "version": "8.0.3", + "version": "8.0.4", "releaseDate": "", "type": "stable", "message": "" diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ar.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ar.json index f64fedeacd..7b3edfb3d9 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ar.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ar.json @@ -27,7 +27,7 @@ "DisplayName:PhoneNumber": "رقم الهاتف", "DisplayName:TwoFactorEnabled": "التحقق من عاملين", "DisplayName:IsActive": "نشيط", - "DisplayName:LockoutEnabled": "تأمين الحساب بعد محاولات تسجيل الدخول الفاشلة", + "DisplayName:LockoutEnabled": "تأمين الحساب", "NewRole": "دور جديد", "RoleName": "اسم الدور", "CreationTime": "وقت الإنشاء", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/cs.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/cs.json index 28a6d2efe7..a3079f81af 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/cs.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/cs.json @@ -27,7 +27,7 @@ "DisplayName:PhoneNumber": "Telefonní číslo", "DisplayName:TwoFactorEnabled": "Dvoufázové ověřování", "DisplayName:IsActive": "Aktivní", - "DisplayName:LockoutEnabled": "Zamčení účtu po neúspěšných pokusech", + "DisplayName:LockoutEnabled": "Zamčení účtu", "NewRole": "Nová role", "RoleName": "Název role", "CreationTime": "Vytvořeno", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/de.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/de.json index 2869bc563b..1db549aee7 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/de.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/de.json @@ -27,7 +27,7 @@ "DisplayName:PhoneNumber": "Telefonnummer", "DisplayName:TwoFactorEnabled": "Zwei-Faktor-Überprüfung", "DisplayName:IsActive": "Aktiv", - "DisplayName:LockoutEnabled": "Benutzerkonto nach fehlgeschlagenen Anmeldeversuchen sperren", + "DisplayName:LockoutEnabled": "Konto-Sperrung", "NewRole": "Neue Rolle", "RoleName": "Rollenname", "CreationTime": "Erstellungszeitpunkt", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/el.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/el.json index 9c1db90c91..fa761f73f3 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/el.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/el.json @@ -26,7 +26,7 @@ "DisplayName:PhoneNumber": "Τηλεφωνικό νούμερο", "DisplayName:TwoFactorEnabled": "Επαλήθευση δύο παραγόντων", "DisplayName:IsActive": "Ενεργός", - "DisplayName:LockoutEnabled": "Κλείδωμα λογαριασμού μετά από αποτυχημένες προσπάθειες σύνδεσης", + "DisplayName:LockoutEnabled": "Κλείδωμα λογαριασμού", "NewRole": "Νέος ρόλος", "RoleName": "Όνομα ρόλου", "CreationTime": "Χρόνος δημιουργίας", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en-GB.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en-GB.json index 209d4a0aee..a6c719d29e 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en-GB.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en-GB.json @@ -26,7 +26,7 @@ "DisplayName:Email": "Email Address", "DisplayName:PhoneNumber": "Phone Number", "DisplayName:TwoFactorEnabled": "Two factor verification", - "DisplayName:LockoutEnabled": "Lock account after failed login attempts", + "DisplayName:LockoutEnabled": "Account lockout", "NewRole": "New role", "RoleName": "Role name", "CreationTime": "Creation time", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en.json index 4347a55a00..024c4c8b79 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/en.json @@ -27,7 +27,7 @@ "DisplayName:PhoneNumber": "Phone number", "DisplayName:TwoFactorEnabled": "Two factor verification", "DisplayName:IsActive": "Active", - "DisplayName:LockoutEnabled": "Lock account after failed login attempts", + "DisplayName:LockoutEnabled": "Account lockout", "NewRole": "New role", "RoleName": "Role name", "CreationTime": "Creation time", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/es.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/es.json index af59c54d3c..118a53d47a 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/es.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/es.json @@ -27,7 +27,7 @@ "DisplayName:PhoneNumber": "Número de teléfono", "DisplayName:TwoFactorEnabled": "Autenticación en dos pasos", "DisplayName:IsActive": "Activo", - "DisplayName:LockoutEnabled": "Bloquear la cuenta después de intentos de inicio de sesión fallidos", + "DisplayName:LockoutEnabled": "Bloqueo de cuenta", "NewRole": "Nuevo rol", "RoleName": "Nombre de rol", "CreationTime": "Fecha de creación", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fa.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fa.json index 14b99b3ec7..625e5feea7 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fa.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fa.json @@ -26,7 +26,7 @@ "DisplayName:PhoneNumber": "شماره تلفن", "DisplayName:TwoFactorEnabled": "احراز هویت دو مرحله ای", "DisplayName:IsActive": "فعال", - "DisplayName:LockoutEnabled": "قفل کردن حساب در صورت عدم موفقیت در ورود به سیستم", + "DisplayName:LockoutEnabled": "قفل کردن حساب", "NewRole": "نقش/وظیفه جدید", "RoleName": "نام نقش/وظیفه", "CreationTime": "زمان ایجاد", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fi.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fi.json index 74d1769602..a433aa3d88 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fi.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fi.json @@ -27,7 +27,7 @@ "DisplayName:PhoneNumber": "Puhelinnumero", "DisplayName:TwoFactorEnabled": "Kahden tekijän todentaminen", "DisplayName:IsActive": "Aktiivinen", - "DisplayName:LockoutEnabled": "Lukitse tili epäonnistuneiden kirjautumisyritysten jälkeen", + "DisplayName:LockoutEnabled": "Tilin lukitus", "NewRole": "Uusi rooli", "RoleName": "Roolinimi", "CreationTime": "Luomisaika", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fr.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fr.json index ce23db8ac0..4e4d878da8 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fr.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/fr.json @@ -27,7 +27,7 @@ "DisplayName:PhoneNumber": "Numéro de téléphone", "DisplayName:TwoFactorEnabled": "Vérification de deux facteurs", "DisplayName:IsActive": "actif", - "DisplayName:LockoutEnabled": "Verrouiller le compte après l’échec des tentatives de connexion", + "DisplayName:LockoutEnabled": "Verrouillage du compte", "NewRole": "Nouveau rôle", "RoleName": "Nom du rôle", "CreationTime": "Temps de création", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hi.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hi.json index 6be48c96ae..5b13ce5d3d 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hi.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hi.json @@ -27,7 +27,7 @@ "DisplayName:PhoneNumber": "फ़ोन नंबर", "DisplayName:TwoFactorEnabled": "दो कारक सत्यापन", "DisplayName:IsActive": "सक्रिय", - "DisplayName:LockoutEnabled": "असफल लॉगिन प्रयासों के बाद लॉक खाता", + "DisplayName:LockoutEnabled": "खाता लॉकआउट", "NewRole": "नयी भूमिका", "RoleName": "भूमिका का नाम", "CreationTime": "रचना समय", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hr.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hr.json index edf6d40637..95c14b6f2f 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hr.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hr.json @@ -27,7 +27,7 @@ "DisplayName:PhoneNumber": "Broj telefona", "DisplayName:TwoFactorEnabled": "Two factor verifikacija", "DisplayName:IsActive": "Aktivan", - "DisplayName:LockoutEnabled": "Zaključaj račun nakon neuspjelih pokušaja prijave", + "DisplayName:LockoutEnabled": "Zaključavanje računa", "NewRole": "Nova uloga", "RoleName": "Naziv uloge", "CreationTime": "Vrijeme stvaranja", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hu.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hu.json index d4d357a5ce..c9e5181bcb 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hu.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/hu.json @@ -27,7 +27,7 @@ "DisplayName:PhoneNumber": "Telefonszám", "DisplayName:TwoFactorEnabled": "Kétlépcsős azonosítás", "DisplayName:IsActive": "Aktív", - "DisplayName:LockoutEnabled": "Fiók zárolása sikertelen bejelentkezési kísérletek után", + "DisplayName:LockoutEnabled": "Fiók zárolása", "NewRole": "Új szerepkör", "RoleName": "Szerepkör neve", "CreationTime": "Létrehozás időpontja", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/is.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/is.json index e9509004d4..b038b06c07 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/is.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/is.json @@ -27,7 +27,7 @@ "DisplayName:PhoneNumber": "Símanúmer", "DisplayName:TwoFactorEnabled": "Tvíþætt sannprófun", "DisplayName:IsActive": "Virkur", - "DisplayName:LockoutEnabled": "Læsa notandareikning eftir misheppnaðar innskráningar", + "DisplayName:LockoutEnabled": "Loka reikningi", "NewRole": "Nýtt hlutverk", "RoleName": "Nafn hlutverks", "CreationTime": "Búið til", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/it.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/it.json index ef6ed8c5fa..c57e5af8ab 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/it.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/it.json @@ -27,7 +27,7 @@ "DisplayName:PhoneNumber": "Numero di telefono", "DisplayName:TwoFactorEnabled": "Verifica a due fattori", "DisplayName:IsActive": "Attivo", - "DisplayName:LockoutEnabled": "Blocca account dopo tentativi di accesso falliti", + "DisplayName:LockoutEnabled": "Blocco account", "NewRole": "Nuovo ruolo", "RoleName": "Nome del ruolo", "CreationTime": "Orario di creazione", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/nl.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/nl.json index 291061f39d..586523f3f0 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/nl.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/nl.json @@ -27,7 +27,7 @@ "DisplayName:PhoneNumber": "Telefoonnummer", "DisplayName:TwoFactorEnabled": "Tweefactor authenticatie", "DisplayName:IsActive": "Actief", - "DisplayName:LockoutEnabled": "Account vergrendelen na mislukte inlogpogingen", + "DisplayName:LockoutEnabled": "Account vergrendelen", "NewRole": "Nieuwe rol", "RoleName": "Rol naam", "CreationTime": "Creatie tijd", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/pl-PL.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/pl-PL.json index 3be940bca7..825338bf07 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/pl-PL.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/pl-PL.json @@ -27,7 +27,7 @@ "DisplayName:PhoneNumber": "Numer telefonu", "DisplayName:TwoFactorEnabled": "Dwustopniowa weryfikacja", "DisplayName:IsActive": "Aktywny", - "DisplayName:LockoutEnabled": "Blokowanie konta po nieudanych próbach zalogowania", + "DisplayName:LockoutEnabled": "Blokada konta", "NewRole": "Nowa rola", "RoleName": "Nazwa roli", "CreationTime": "Data utworzenia", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/pt-BR.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/pt-BR.json index 0cb440915d..ff89754e8c 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/pt-BR.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/pt-BR.json @@ -27,7 +27,7 @@ "DisplayName:PhoneNumber": "Telefone", "DisplayName:TwoFactorEnabled": "Verificação em dois fatores", "DisplayName:IsActive": "Ativo", - "DisplayName:LockoutEnabled": "Bloquear conta após falhas ao entrar", + "DisplayName:LockoutEnabled": "Bloqueio de Conta", "NewRole": "Novo Perfil", "RoleName": "Perfil", "CreationTime": "Data de Criação", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ro-RO.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ro-RO.json index 995db6bac1..1723206fc2 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ro-RO.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ro-RO.json @@ -27,7 +27,7 @@ "DisplayName:PhoneNumber": "Număr de telefon", "DisplayName:TwoFactorEnabled": "Autentificare în doi paşi", "DisplayName:IsActive": "Activ", - "DisplayName:LockoutEnabled": "Blocaţi contul după încercări eşuate de autentificare", + "DisplayName:LockoutEnabled": "Blocare cont", "NewRole": "Rol nou", "RoleName": "Nume rol", "CreationTime": "Data creării", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ru.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ru.json index 79d4e83075..871324d8e5 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ru.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ru.json @@ -27,7 +27,7 @@ "DisplayName:PhoneNumber": "Номер телефона", "DisplayName:TwoFactorEnabled": "Двухфакторная проверка подлинности", "DisplayName:IsActive": "Активный", - "DisplayName:LockoutEnabled": "Заблокировать учетную запись после неудачных попыток входа", + "DisplayName:LockoutEnabled": "Блокировка учетной записи", "NewRole": "Новая роль", "RoleName": "Имя роли", "CreationTime": "Время создания", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sk.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sk.json index 3ba7eb1184..3233f064a4 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sk.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sk.json @@ -27,7 +27,7 @@ "DisplayName:PhoneNumber": "Telefónne číslo", "DisplayName:TwoFactorEnabled": "Dvojfaktorové overenie", "DisplayName:IsActive": "Aktívne", - "DisplayName:LockoutEnabled": "Uzamknúť účet po neúspešných pokusoch o prihlásenie", + "DisplayName:LockoutEnabled": "Uzamknúť účet", "NewRole": "Nová rola", "RoleName": "Názov roly", "CreationTime": "Čas vytvorenia", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sl.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sl.json index 23e323c0e2..bf25f83bff 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sl.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/sl.json @@ -27,7 +27,7 @@ "DisplayName:PhoneNumber": "Telefonska številka", "DisplayName:TwoFactorEnabled": "Dvostopenjsko preverjanje", "DisplayName:IsActive": "Aktiven", - "DisplayName:LockoutEnabled": "Zaklepanje računa po neuspelih poskusih prijave", + "DisplayName:LockoutEnabled": "Zaklepanje računa", "NewRole": "Nova vloga", "RoleName": "Naziv vloge", "CreationTime": "Čas nastanka", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/tr.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/tr.json index c6386b499c..9910fa338c 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/tr.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/tr.json @@ -27,7 +27,7 @@ "DisplayName:PhoneNumber": "Telefon numarası", "DisplayName:TwoFactorEnabled": "İki aşamalı doğrulama", "DisplayName:IsActive": "Aktif", - "DisplayName:LockoutEnabled": "Başarısız giriş denemeleri sonrası hesabı kilitleme", + "DisplayName:LockoutEnabled": "Hesap kilitlenmesi", "NewRole": "Yeni rol", "RoleName": "Rol adı", "CreationTime": "Oluşturma zamanı", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/vi.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/vi.json index 04d6c03cf2..70cf3635a6 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/vi.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/vi.json @@ -27,7 +27,7 @@ "DisplayName:PhoneNumber": "Số điện thoại", "DisplayName:TwoFactorEnabled": "Xác thực hai yếu tố", "DisplayName:IsActive": "Tích cực", - "DisplayName:LockoutEnabled": "Khóa tài khoản sau những lần đăng nhập thất bại", + "DisplayName:LockoutEnabled": "Khóa tài khoản", "NewRole": "Vai trò mới", "RoleName": "Tên vai trò", "CreationTime": "Thời gian tạo", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hans.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hans.json index a6a008f920..b690b3a437 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hans.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hans.json @@ -27,7 +27,7 @@ "DisplayName:PhoneNumber": "手机号码", "DisplayName:TwoFactorEnabled": "二次认证", "DisplayName:IsActive": "启用", - "DisplayName:LockoutEnabled": "登录失败,账户被锁定", + "DisplayName:LockoutEnabled": "账户锁定", "NewRole": "新角色", "RoleName": "角色名称", "CreationTime": "创建时间", diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hant.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hant.json index db10b63ebd..fad617e511 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hant.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hant.json @@ -27,7 +27,7 @@ "DisplayName:PhoneNumber": "手機號碼", "DisplayName:TwoFactorEnabled": "二次認證", "DisplayName:IsActive": "啟用", - "DisplayName:LockoutEnabled": "登入失敗,帳號被鎖定", + "DisplayName:LockoutEnabled": "帳號鎖定", "NewRole": "新角色", "RoleName": "角色名稱", "CreationTime": "建立時間", diff --git a/npm/ng-packs/nx.json b/npm/ng-packs/nx.json index 0687396169..57e7ea8df5 100644 --- a/npm/ng-packs/nx.json +++ b/npm/ng-packs/nx.json @@ -77,6 +77,5 @@ "!{projectRoot}/.eslintrc.json" ] }, - "parallel": 3, - "nxCloudAccessToken": "NjEzZTliYmMtYmU1MC00ZmI4LWFhOTAtYWY0ZDhiMjhiNzQ0fHJlYWQtd3JpdGU=" + "parallel": 3 } diff --git a/npm/ng-packs/packages/core/src/lib/services/title-strategy.service.ts b/npm/ng-packs/packages/core/src/lib/services/title-strategy.service.ts index 695c8f7fbf..4cb351918d 100644 --- a/npm/ng-packs/packages/core/src/lib/services/title-strategy.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/title-strategy.service.ts @@ -29,6 +29,7 @@ export class AbpTitleStrategy extends TitleStrategy { } override updateTitle(routerState: RouterStateSnapshot) { + this.routerState = routerState; let title = this.buildTitle(routerState); if (!title) { @@ -36,8 +37,6 @@ export class AbpTitleStrategy extends TitleStrategy { return; } - this.routerState = routerState; - const localizedTitle = this.localizationService.instant({ key: title, defaultValue: title }); this.title.setTitle(`${localizedTitle} | ${this.projectName()}`); } diff --git a/npm/ng-packs/packages/oauth/src/lib/tests/oauth-error-filter.service.spec.ts b/npm/ng-packs/packages/oauth/src/lib/tests/oauth-error-filter.service.spec.ts new file mode 100644 index 0000000000..c8af0f934d --- /dev/null +++ b/npm/ng-packs/packages/oauth/src/lib/tests/oauth-error-filter.service.spec.ts @@ -0,0 +1,121 @@ +import { createServiceFactory, SpectatorService } from '@ngneat/spectator'; +import { OAuthErrorFilterService } from '../services'; +import { AuthErrorEvent, AuthErrorFilter } from '@abp/ng.core'; +import { OAuthErrorEvent } from 'angular-oauth2-oidc'; + +const ids = { + firstFilter: 'firstFilter', + secondFilter: 'secondFilter', +}; +type Reason = object & { error: { grant_type: string | undefined; }; }; + + +describe('AuthService', () => { + let spectator: SpectatorService; + let oAuthErrorFilterService: OAuthErrorFilterService; + const createService = createServiceFactory(OAuthErrorFilterService); + + let firstFilter: AuthErrorFilter = { + id: '', + executable: Boolean(), + execute: () => Boolean(), + }; + let secondFilter: AuthErrorFilter = { + id: '', + executable: Boolean(), + execute: () => Boolean(), + }; + + beforeEach(() => { + spectator = createService(); + oAuthErrorFilterService = spectator.inject(OAuthErrorFilterService); + firstFilter = { + id: ids.firstFilter, + executable: true, + execute: (event: AuthErrorEvent) => { + const { reason } = event; + const { + error: { grant_type }, + } = (reason || {}); + + return !!grant_type && grant_type === ids.firstFilter; + }, + }; + + secondFilter = { + id: ids.secondFilter, + executable: true, + execute: (event: AuthErrorEvent) => { + const { reason } = event; + const { + error: { grant_type }, + } = (reason || {}); + + return !!grant_type && grant_type === ids.secondFilter; + }, + }; + }); + + it('should add filter to filter service', () => { + oAuthErrorFilterService.add(firstFilter); + + expect(oAuthErrorFilterService.filters()).toContain(firstFilter); + expect(oAuthErrorFilterService.filters()).toHaveLength(1); + + oAuthErrorFilterService.add(secondFilter); + expect(oAuthErrorFilterService.filters()).toHaveLength(2); + }); + + it('should be able to get item by id', () => { + oAuthErrorFilterService.add(firstFilter); + + expect(oAuthErrorFilterService.get(ids.firstFilter)).toBe(firstFilter); + }); + + it('should be able to patch item', () => { + oAuthErrorFilterService.add(firstFilter); + oAuthErrorFilterService.patch({ id: ids.firstFilter, executable: false }); + + expect(oAuthErrorFilterService.get(ids.firstFilter)?.executable).toBe(false); + }); + + it('should be able to remove item', () => { + oAuthErrorFilterService.add(firstFilter); + oAuthErrorFilterService.add(secondFilter); + + oAuthErrorFilterService.remove(ids.firstFilter); + expect(oAuthErrorFilterService.filters()).not.toContain(firstFilter); + expect(oAuthErrorFilterService.filters()).toContain(secondFilter); + expect(oAuthErrorFilterService.filters()).toHaveLength(1); + }); + + it('if any execute method returns true, it should return the true value.', () => { + oAuthErrorFilterService.add(firstFilter); + oAuthErrorFilterService.add(secondFilter); + + const event = { + reason: { + error: { + grant_type: ids.secondFilter, + }, + }, + } as OAuthErrorEvent; + + expect(oAuthErrorFilterService.run(event)).toBe(true); + }); + + it('if none of execute method returns true, it should return the false.', () => { + oAuthErrorFilterService.add(firstFilter); + oAuthErrorFilterService.add(secondFilter); + + const event = { + reason: { + error: { + grant_type: 'random-event', + }, + }, + } as OAuthErrorEvent; + + expect(oAuthErrorFilterService.run(event)).toBe(false); + }); +}); \ No newline at end of file diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal-close.directive.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal-close.directive.ts index a20c8d8a34..97d6b14fb9 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal-close.directive.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal-close.directive.ts @@ -13,4 +13,4 @@ export class ModalCloseDirective { onClick() { this.modal?.close(); } -} +} \ No newline at end of file diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts index ebb0515a08..297fa23c56 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts @@ -51,7 +51,9 @@ export class ModalComponent implements OnInit, OnDestroy, DismissableModal { this._busy = value; } - @Input() options: NgbModalOptions = {}; + @Input() options: NgbModalOptions = { + keyboard: true, + }; @Input() suppressUnsavedChangesWarning = this.suppressUnsavedChangesWarningToken;