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;