From da8925e518fe6d855221ca516ff586f99215cd15 Mon Sep 17 00:00:00 2001 From: honurbu Date: Wed, 6 Dec 2023 13:36:52 +0300 Subject: [PATCH 01/38] TestimonialLocalization Updated --- .../Commercial/Localization/Resources/en.json | 9 ++++++++- .../Commercial/Localization/Resources/tr.json | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index 7e16b24a56..3153be1c48 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -1089,6 +1089,13 @@ "MultipleOrganizationInfo": "See All Your Organizations", "AbpStudioBetaAccessInfoTitle": "ABP Studio Beta Access", "AbpStudioBetaAccessInfoText": "We're thrilled to share with you the beta version of ABP Studio! This release marks a significant milestone in our development journey, and we're eager to gather your feedback to make the application even better.", - "YouAreNotAuthorizedToDownloadStudio": "You are not authorized to download ABP Studio." + "YouAreNotAuthorizedToDownloadStudio": "You are not authorized to download ABP Studio.", + "TestimonialText": "Testimonial Text", + "Position": "Position", + "ExperienceYear": "Experience Year", + "Select": "Select", + "TestimonialTitle": "Referances", + "TestimonialInfo": "Share Your Opinion", + "Share": "Share" } } diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json index c0a546d8f6..dae988898f 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json @@ -842,6 +842,13 @@ "OneCodeBaseMultipleDevices_Description": "ABP Mobil uygulamaları çapraz platformdur. iOS ve Android cihazlara yüklenmeye ve çalıştırılmaya hazırdırlar ve tek bir kod tabanı kullanarak farklı form faktörlerine uyum sağlarlar. Geliştiricilerin kullanıcı arayüzünü ve ön uç kodunu yalnızca bir kez oluşturması gerekir, desteklemek istediğiniz her cihaz için kodu uyarlamanıza gerek yoktur.", "ComesWithTheSourceCode": "Kaynak Koduyla Birlikte Geliyor", "ComesWithTheSourceCode_Description": "Mobil uygulamalar kaynak koduyla birlikte sağlanır. Marka yönergelerini karşılamak için uygulamalarınızın UX/UI'sini kolayca özelleştirin.", - "MultipleOrganizationInfo": "Tüm Organizasyonlarınızı Görün" + "MultipleOrganizationInfo": "Tüm Organizasyonlarınızı Görün", + "TestimonialText": "Referans Yazınız", + "Position": "Poziyonunuz", + "ExperienceYear": "Yazılım Sektöründeki Tecrübeniz (Yıl)", + "Select": "Seçiniz", + "TestimonialTitle": "Referans", + "TestimonialInfo": "Düşüncelerinizi Paylaşın", + "Share": "Paylaş" } } From c5d5c73eb9d51e17da1565cc4f4c8139549176cf Mon Sep 17 00:00:00 2001 From: honurbu Date: Thu, 7 Dec 2023 16:18:15 +0300 Subject: [PATCH 02/38] Update Localization Co-Authored-By: Deniz Demirkan <50696649+denizdemirkan@users.noreply.github.com> --- .../Commercial/Localization/Resources/en.json | 3 ++- .../Commercial/Localization/Resources/tr.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index 3153be1c48..6ffcedb3ed 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -1096,6 +1096,7 @@ "Select": "Select", "TestimonialTitle": "Referances", "TestimonialInfo": "Share Your Opinion", - "Share": "Share" + "Share": "Share", + "YouAreNotAuthorizedToWriteTestimonial": "For to write testimonial, you must be sign in" } } diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json index dae988898f..d353631596 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json @@ -849,6 +849,7 @@ "Select": "Seçiniz", "TestimonialTitle": "Referans", "TestimonialInfo": "Düşüncelerinizi Paylaşın", - "Share": "Paylaş" + "Share": "Paylaş", + "YouAreNotAuthorizedToWriteTestimonial" : "Referansınızı paylaşabilmeniz için giriş yapmanız gerekmektedir" } } From e5610bd6e0cf870ebc2aa786b8d658b90684a22e Mon Sep 17 00:00:00 2001 From: denizdemirkan Date: Sat, 16 Dec 2023 00:18:08 +0300 Subject: [PATCH 03/38] Localization Fixed Co-Authored-By: Onur BURAL <78691441+honurbu@users.noreply.github.com> --- .../Commercial/Localization/Resources/en.json | 10 +-------- .../Www/Localization/Resources/en.json | 21 ++++++++++++++++++- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index 6ffcedb3ed..7e16b24a56 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -1089,14 +1089,6 @@ "MultipleOrganizationInfo": "See All Your Organizations", "AbpStudioBetaAccessInfoTitle": "ABP Studio Beta Access", "AbpStudioBetaAccessInfoText": "We're thrilled to share with you the beta version of ABP Studio! This release marks a significant milestone in our development journey, and we're eager to gather your feedback to make the application even better.", - "YouAreNotAuthorizedToDownloadStudio": "You are not authorized to download ABP Studio.", - "TestimonialText": "Testimonial Text", - "Position": "Position", - "ExperienceYear": "Experience Year", - "Select": "Select", - "TestimonialTitle": "Referances", - "TestimonialInfo": "Share Your Opinion", - "Share": "Share", - "YouAreNotAuthorizedToWriteTestimonial": "For to write testimonial, you must be sign in" + "YouAreNotAuthorizedToDownloadStudio": "You are not authorized to download ABP Studio." } } diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json index cf26edf473..3339bebee3 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json @@ -440,7 +440,26 @@ "Index_Page_Testimonial_2": "ABP Framework is not only a framework, it is also a guidance for project development/management, because it provides DDD, GenericRepository, DI, Microservice, Modularity trainings. Even if you are not going to use framework itself, you can develop yourself with docs.abp.io which is well and professionally prepared. (OpenIddict, Redis, Quartz etc.)\nBecause many thing pre-built, it shortens project development time significantly. (Such as login page, exception handling, data filtering-seeding, audit logging, localization, auto api controller etc.)\nAs an example from our app, i have used Local Event Bus for stock control. So, I am able to manage order movements by writing stock handler.\nIt is wonderful not to lose time for CreationTime, CreatorId. They are filled automatically.", "VideosLoginAndRegisterMessage": "To be able to watch videos, you must sign in.", "Filter": "Filter", - "VideoCourses": "Video Courses" + "VideoCourses": "Video Courses", + "TestimonialText": "Testimonial Letter.", + "Position": "Position", + "ExperienceYear": "Experience Year", + "FullName": "Full Name", + "CompanySize": "Company Size", + "Image": "Image.", + "TestimonialTitle": "Testimonial Form", + "TestimonialInfo": "Share Your Opinion", + "Country": "Country.", + "TestimonialTextPlaceholder": "Your testimonial letter.", + "PositionPlaceholder": "Your position at your company.", + "SelectExperienceYearPlaceholder": "Your years of experience in software development.", + "FullNamePlaceholder": "Your full name.", + "CompanyNamePlaceholder": "Your company name.", + "SelectCompanySizePlaceholder": "Size of your company. (Employees)", + "ImagePlaceholder": "Your image.", + "SelectCountryPlaceholder": "Your country.", + "YouAreNotAuthorizedToWriteTestimonial": "To be able to write testimonial letter, you must be sign in.", + "Share": "Share" } } From 92bee87f609c2ce815752853d754a751aa774afd Mon Sep 17 00:00:00 2001 From: honurbu Date: Tue, 19 Dec 2023 13:42:01 +0300 Subject: [PATCH 04/38] Update en.json --- .../AbpIoLocalization/Www/Localization/Resources/en.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json index 08abc900ca..7260aaa477 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json @@ -459,7 +459,8 @@ "ImagePlaceholder": "Your image.", "SelectCountryPlaceholder": "Your country.", "YouAreNotAuthorizedToWriteTestimonial": "To be able to write testimonial letter, you must be sign in.", - "Share": "Share" + "Share": "Share", + "UnAuthorizeTestimonialInfo": "If you want to share your opinion, you must be sign in" } } From 61198a438e0ae9ebfab5b0172d506e2d7e67c417 Mon Sep 17 00:00:00 2001 From: honurbu Date: Wed, 20 Dec 2023 09:44:22 +0300 Subject: [PATCH 05/38] TestimonialLocalizations updated en.json --- .../AbpIoLocalization/Www/Localization/Resources/en.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json index 7260aaa477..ea2c68e677 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json @@ -441,15 +441,15 @@ "VideosLoginAndRegisterMessage": "To be able to watch videos, you must sign in.", "Filter": "Filter", "VideoCourses": "Video Courses", - "TestimonialText": "Testimonial Letter.", + "TestimonialText": "Testimonial Letter", "Position": "Position", "ExperienceYear": "Experience Year", "FullName": "Full Name", "CompanySize": "Company Size", - "Image": "Image.", + "Image": "Image", "TestimonialTitle": "Testimonial Form", "TestimonialInfo": "Share Your Opinion", - "Country": "Country.", + "Country": "Country", "TestimonialTextPlaceholder": "Your testimonial letter.", "PositionPlaceholder": "Your position at your company.", "SelectExperienceYearPlaceholder": "Your years of experience in software development.", From 7d73af1e6438cf105b8a7e4f9c4973aab9eb3645 Mon Sep 17 00:00:00 2001 From: Mahmut Gundogdu Date: Wed, 20 Dec 2023 17:58:27 +0300 Subject: [PATCH 06/38] Add script to change package version --- npm/scripts/change-package-version.ts | 100 ++++++++++++++++++++++++++ npm/scripts/package.json | 5 +- npm/scripts/yarn.lock | 10 +-- 3 files changed, 108 insertions(+), 7 deletions(-) create mode 100644 npm/scripts/change-package-version.ts diff --git a/npm/scripts/change-package-version.ts b/npm/scripts/change-package-version.ts new file mode 100644 index 0000000000..748633d465 --- /dev/null +++ b/npm/scripts/change-package-version.ts @@ -0,0 +1,100 @@ +import glob from "glob"; +import fse from "fs-extra"; +import {program} from "commander"; + +(function findPackageJsonFiles() { + setupCommander(); + const options = { + ignore: [ + "../../**/node_modules/**", + "../../**/dist/**", + "../../**/build/**", + "../../**/scripts/**", + "../../**/wwwroot/**" + ] + }; + + const workingDir = "../../"; + glob(`${workingDir}**/package.json`, options, (err, files) => { + if (err) throw err; + + const {packageName,targetVersion}= program.opts(); + + for (const file of files) { + readPackageJsonFile(file, packageName, targetVersion); + } + }); +})(); + +function readPackageJsonFile(path, key, newVersion) { + const replace = (block, key, newVersion) => { + const founded = Object.keys(block).filter(x => x === key); + if (founded.length > 0) { + let value = block[key]; + value = value.replace(semverRegex, newVersion); + return [true, { + ...block, + [key]:value + }]; + } + return [false, block]; + }; + fse.readJson(path, (err, packageObj) => { + if (err) throw err; + + const { dependencies, peerDependencies, devDependencies } = packageObj; + const results = []; + + let result = { ...packageObj }; + if (dependencies) { + const [founded, d] = replace(dependencies, key, newVersion); + results.push(founded); + result = { + ...result, dependencies: d + }; + } + if (peerDependencies) { + const [founded, p] = replace(peerDependencies, key, newVersion); + results.push(founded); + result = { + ...result, peerDependencies: p + }; + } + if (devDependencies) { + const [founded, d] = replace(devDependencies, key, newVersion); + results.push(founded); + result = { + ...result, devDependencies: d + }; + } + const anyChanges = !results.some(x => x); + if (anyChanges) { + return; + } + console.log("changed", path); + writeFile(path, result); + } + ) + ; +} +export const semverRegex = + /\d+\.\d+\.\d+(?:-[a-zA-Z0-9]+(?:\.[a-zA-Z0-9-]+)*)?(?:\+[a-zA-Z0-9]+(?:\.[a-zA-Z0-9-]+)*)?$/; + +function writeFile(path, result) { + return fse.writeJson(path, result, { spaces: 2 }); +} + + +function setupCommander() { + program + .option( + "-n, --packageName ", + "Package name" + ) + .option( + "-v, --targetVersion ", + "Version number of the package" + ); + + program.parse(process.argv); +} diff --git a/npm/scripts/package.json b/npm/scripts/package.json index bbf9c8bebf..6cc0b6bdb6 100644 --- a/npm/scripts/package.json +++ b/npm/scripts/package.json @@ -4,12 +4,13 @@ "description": "", "scripts": { "remove-lock-files": "yarn && ts-node -r tsconfig-paths/register remove-lock-files.ts", - "validate-versions": "yarn && ts-node -r tsconfig-paths/register validate-versions.ts" + "validate-versions": "yarn && ts-node -r tsconfig-paths/register validate-versions.ts", + "change-package-version": "ts-node -r tsconfig-paths/register change-package-version.ts -n @abp/ng.theme.lepton-x -v 3.0.0" }, "dependencies": { "axios": "^0.24.0", "chalk": "^4.1.0", - "commander": "^8.3.0", + "commander": "^11.0.0", "execa": "^5.1.1", "fs-extra": "^9.0.1", "glob": "^7.1.6", diff --git a/npm/scripts/yarn.lock b/npm/scripts/yarn.lock index 2feefc9b8a..97f2d15e36 100644 --- a/npm/scripts/yarn.lock +++ b/npm/scripts/yarn.lock @@ -417,16 +417,16 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" +commander@^11.0.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906" + integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== + commander@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/commander/-/commander-6.1.0.tgz#f8d722b78103141006b66f4c7ba1e97315ba75bc" integrity sha512-wl7PNrYWd2y5mp1OK/LhTlv8Ff4kQJQRXXAvF+uU/TPNiVJUxZLRYGj/B0y/lPGAVcSbJqH2Za/cvHmrPMC8mA== -commander@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" From ebba1a0e0d9e62166afea0a927d38c2b96a10a5a Mon Sep 17 00:00:00 2001 From: denizdemirkan Date: Thu, 21 Dec 2023 17:31:23 +0300 Subject: [PATCH 07/38] Update en.json --- .../AbpIoLocalization/Www/Localization/Resources/en.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json index ea2c68e677..49e6a580c3 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json @@ -460,7 +460,9 @@ "SelectCountryPlaceholder": "Your country.", "YouAreNotAuthorizedToWriteTestimonial": "To be able to write testimonial letter, you must be sign in.", "Share": "Share", - "UnAuthorizeTestimonialInfo": "If you want to share your opinion, you must be sign in" + "UnAuthorizeTestimonialInfo": "If you want to share your opinion, you must be sign in", + "TheFileIsTooLargeForImage": "Maximum file size is 1 MB.", + "ThisExtensionIsNotAllowedForImage": "This extension is not allowed." } } From 8b12f42eaf4a6a8aaf1b96c68accc5db18252203 Mon Sep 17 00:00:00 2001 From: honurbu Date: Thu, 21 Dec 2023 17:36:33 +0300 Subject: [PATCH 08/38] Update en.json for testimonials page --- .../Www/Localization/Resources/en.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json index ea2c68e677..4c382603e2 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json @@ -441,21 +441,21 @@ "VideosLoginAndRegisterMessage": "To be able to watch videos, you must sign in.", "Filter": "Filter", "VideoCourses": "Video Courses", - "TestimonialText": "Testimonial Letter", + "TestimonialText": "Your testimonial", "Position": "Position", - "ExperienceYear": "Experience Year", + "ExperienceYear": "Years of Experience", "FullName": "Full Name", "CompanySize": "Company Size", - "Image": "Image", - "TestimonialTitle": "Testimonial Form", - "TestimonialInfo": "Share Your Opinion", + "Image": "Your profile picture", + "TestimonialTitle": "Let's hear your testimonial", + "TestimonialInfo": "What our customers say matters! Tell us about your experience with our product and service.", "Country": "Country", - "TestimonialTextPlaceholder": "Your testimonial letter.", + "TestimonialTextPlaceholder": "Write a brief story about how ABP helped you build and deliver your project. ", "PositionPlaceholder": "Your position at your company.", - "SelectExperienceYearPlaceholder": "Your years of experience in software development.", + "SelectExperienceYearPlaceholder": "How long have you been in software stuff", "FullNamePlaceholder": "Your full name.", "CompanyNamePlaceholder": "Your company name.", - "SelectCompanySizePlaceholder": "Size of your company. (Employees)", + "SelectCompanySizePlaceholder": "Employee count", "ImagePlaceholder": "Your image.", "SelectCountryPlaceholder": "Your country.", "YouAreNotAuthorizedToWriteTestimonial": "To be able to write testimonial letter, you must be sign in.", From 639f63be249bfb0097e243ad11c554038149a8a5 Mon Sep 17 00:00:00 2001 From: honurbu Date: Thu, 21 Dec 2023 17:41:14 +0300 Subject: [PATCH 09/38] Some localizations changed en.json --- .../AbpIoLocalization/Www/Localization/Resources/en.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json index 71bc1bf66a..ed980d1c3a 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json @@ -461,8 +461,9 @@ "YouAreNotAuthorizedToWriteTestimonial": "To be able to write testimonial letter, you must be sign in.", "Share": "Share", "UnAuthorizeTestimonialInfo": "If you want to share your opinion, you must be sign in", - "TheFileIsTooLargeForImage": "Maximum file size is 1 MB.", - "ThisExtensionIsNotAllowedForImage": "This extension is not allowed." + "TheFileIsTooLargeForImage": "Your profile picture cannot be more than 1 MB", + "ThisExtensionIsNotAllowedForImage": "This extension is not allowed.", + "FileUploadError": "File upload error" } } From f717654e8f91c01daea493b276968838b82ea19b Mon Sep 17 00:00:00 2001 From: honurbu Date: Thu, 21 Dec 2023 19:06:56 +0300 Subject: [PATCH 10/38] change localization en.js for testimonial page --- .../AbpIoLocalization/Www/Localization/Resources/en.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json index ed980d1c3a..7c79878cf5 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json @@ -452,14 +452,13 @@ "Country": "Country", "TestimonialTextPlaceholder": "Write a brief story about how ABP helped you build and deliver your project. ", "PositionPlaceholder": "Your position at your company.", - "SelectExperienceYearPlaceholder": "How long have you been in software stuff", + "SelectExperienceYearPlaceholder": "How many years have you been in software stuff", "FullNamePlaceholder": "Your full name.", "CompanyNamePlaceholder": "Your company name.", "SelectCompanySizePlaceholder": "Employee count", "ImagePlaceholder": "Your image.", "SelectCountryPlaceholder": "Your country.", "YouAreNotAuthorizedToWriteTestimonial": "To be able to write testimonial letter, you must be sign in.", - "Share": "Share", "UnAuthorizeTestimonialInfo": "If you want to share your opinion, you must be sign in", "TheFileIsTooLargeForImage": "Your profile picture cannot be more than 1 MB", "ThisExtensionIsNotAllowedForImage": "This extension is not allowed.", From c97b264001ccc1857c8a0c6ff3be79cff6b0a4a5 Mon Sep 17 00:00:00 2001 From: honurbu Date: Fri, 22 Dec 2023 15:02:58 +0300 Subject: [PATCH 11/38] Blogs member page updated --- .../Pages/Members/Index.cshtml | 137 +++++++++--------- .../Volo.Blogging.Web/Pages/Members/Index.css | 6 +- 2 files changed, 76 insertions(+), 67 deletions(-) diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Members/Index.cshtml b/modules/blogging/src/Volo.Blogging.Web/Pages/Members/Index.cshtml index 9ac8ee9462..5873100026 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Members/Index.cshtml +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Members/Index.cshtml @@ -26,73 +26,78 @@
-
- -
- @if (Model.User.Name != null && Model.User.Surname != null) - { -

@Model.User.Name @Model.User.Surname

- } - @if (Model.User.Company != null) - { -

@Model.User.Company

- } - @if (Model.User.JobTitle != null) - { -

@Model.User.JobTitle

- } - - @L["UserName"].Value.ToUpper() -
@Model.User.UserName
- - @if (Model.User.WebSite != null) - { - @L["PersonalWebsite"].Value.ToUpper() -
- @Model.User.WebSite -
- } - - - @if (Model.User.Twitter != null || Model.User.Github != null || Model.User.Linkedin != null) - { - @L["Social"].Value.ToUpper() -
    - @if (Model.User.Twitter != null) - { -
  • - -
    -
    -
  • - } - @if (Model.User.Github != null) - { -
  • - -
    -
    -
  • - } - @if (Model.User.Linkedin != null) - { -
  • - -
    -
    -
  • - } -
- } - - @if (Model.User.Biography != null) - { -
- @L["Biography"].Value.ToUpper() -

@Model.User.Biography

+
+
+
- } +
+
+ @if (Model.User.Name != null && Model.User.Surname != null) + { +

@Model.User.Name @Model.User.Surname

+ } + @if (Model.User.Company != null) + { +

@Model.User.Company

+ } + @if (Model.User.JobTitle != null) + { +

@Model.User.JobTitle

+ } + + @L["UserName"].Value.ToUpper() +
@Model.User.UserName
+ + @if (Model.User.WebSite != null) + { + @L["PersonalWebsite"].Value.ToUpper() +
+ @Model.User.WebSite +
+ } + + @if (Model.User.Twitter != null || Model.User.Github != null || Model.User.Linkedin != null) + { + @L["Social"].Value.ToUpper() +
    + @if (Model.User.Twitter != null) + { +
  • + +
    +
    +
  • + } + @if (Model.User.Github != null) + { +
  • + +
    +
    +
  • + } + @if (Model.User.Linkedin != null) + { +
  • + +
    +
    +
  • + } +
+ } + + @if (Model.User.Biography != null) + { +
+ @L["Biography"].Value.ToUpper() +

@Model.User.Biography

+
+ } +
+ +
@@ -109,7 +114,7 @@
- + diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Members/Index.css b/modules/blogging/src/Volo.Blogging.Web/Pages/Members/Index.css index 3a2c2675c5..662f0477f0 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Members/Index.css +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Members/Index.css @@ -1,3 +1,7 @@ -.post-desc { +.post-desc { overflow-wrap: break-word; } + +#gravatar { + margin: 12px; +} \ No newline at end of file From ee4004e9ff47d6381f8e5cae789e853835f5b14a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sinan=20=C3=96zt=C3=BCrk?= Date: Fri, 22 Dec 2023 16:56:21 +0300 Subject: [PATCH 12/38] add customMessage property to ngx-validate default blueprints --- .../packages/theme-shared/src/lib/constants/validation.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/constants/validation.ts b/npm/ng-packs/packages/theme-shared/src/lib/constants/validation.ts index 7822c10e36..9b3a97b49f 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/constants/validation.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/constants/validation.ts @@ -4,7 +4,7 @@ export const DEFAULT_VALIDATION_BLUEPRINTS = { invalid: 'AbpValidation::ThisFieldIsNotValid.', max: 'AbpValidation::ThisFieldMustBeLessOrEqual{0}[{{ max }}]', maxlength: - 'AbpValidation::ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthOf{0}[{{ requiredLength }}]', + 'AbpValidation::ThisFieldMustBeAStringOrArrayTypeWi thAMaximumLengthOf{0}[{{ requiredLength }}]', min: 'AbpValidation::ThisFieldMustBeGreaterThanOrEqual{0}[{{ min }}]', minlength: 'AbpValidation::ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}[{{ requiredLength }}]', @@ -18,4 +18,5 @@ export const DEFAULT_VALIDATION_BLUEPRINTS = { passwordRequiresDigit: 'AbpIdentity::Volo.Abp.Identity:PasswordRequiresDigit', passwordRequiresNonAlphanumeric: 'AbpIdentity::Volo.Abp.Identity:PasswordRequiresNonAlphanumeric', usernamePattern: 'AbpIdentity::Volo.Abp.Identity:InvalidUserName[{{ actualValue }}]', -}; + customMessage: '{{ customMessage }}' +}; \ No newline at end of file From 0d3142c913e17bc1d6f11ca5bfc1cfc9371185bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sinan=20=C3=96zt=C3=BCrk?= Date: Fri, 22 Dec 2023 16:57:25 +0300 Subject: [PATCH 13/38] remove space --- .../packages/theme-shared/src/lib/constants/validation.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/constants/validation.ts b/npm/ng-packs/packages/theme-shared/src/lib/constants/validation.ts index 9b3a97b49f..71bff8eb13 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/constants/validation.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/constants/validation.ts @@ -4,7 +4,7 @@ export const DEFAULT_VALIDATION_BLUEPRINTS = { invalid: 'AbpValidation::ThisFieldIsNotValid.', max: 'AbpValidation::ThisFieldMustBeLessOrEqual{0}[{{ max }}]', maxlength: - 'AbpValidation::ThisFieldMustBeAStringOrArrayTypeWi thAMaximumLengthOf{0}[{{ requiredLength }}]', + 'AbpValidation::ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthOf{0}[{{ requiredLength }}]', min: 'AbpValidation::ThisFieldMustBeGreaterThanOrEqual{0}[{{ min }}]', minlength: 'AbpValidation::ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}[{{ requiredLength }}]', From 7901572a609524bc44a8c52693a1762f0aff69ec Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 25 Dec 2023 09:52:05 +0800 Subject: [PATCH 14/38] Use `VersionOverride` when central package management is enabled.. Resolve #18565 --- .../Building/Steps/ProjectReferenceReplaceStep.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ProjectReferenceReplaceStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ProjectReferenceReplaceStep.cs index af3c37c14f..0130c6e950 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ProjectReferenceReplaceStep.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ProjectReferenceReplaceStep.cs @@ -73,6 +73,7 @@ public class ProjectReferenceReplaceStep : ProjectBuildPipelineStep private readonly List _entries; private readonly bool _isMicroserviceServiceTemplate; private readonly string _projectName; + protected bool CentralPackageManagement { get; } protected ProjectReferenceReplacer( ProjectBuildContext context, @@ -81,6 +82,7 @@ public class ProjectReferenceReplaceStep : ProjectBuildPipelineStep _entries = context.Files; _isMicroserviceServiceTemplate = MicroserviceServiceTemplateBase.IsMicroserviceServiceTemplate(context.Template?.Name); _projectName = projectName; + CentralPackageManagement = context.Files.Any(x => x.Name.EndsWith("Directory.Packages.props")); } public void Run() @@ -165,7 +167,7 @@ public class ProjectReferenceReplaceStep : ProjectBuildPipelineStep includeAttr.Value = ConvertToNugetReference(oldNodeIncludeValue); newNode.Attributes.Append(includeAttr); - var versionAttr = doc.CreateAttribute("Version"); + var versionAttr = doc.CreateAttribute(CentralPackageManagement ? "VersionOverride" : "Version"); versionAttr.Value = _nugetPackageVersion; newNode.Attributes.Append(versionAttr); return newNode; From 931232dcb4f2330ebc5b30b7a7634eaf9c6dc565 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 25 Dec 2023 10:12:33 +0800 Subject: [PATCH 15/38] Change the `default pfx password` in `README` file. --- .../Templates/RandomizeAuthServerPassPhraseStep.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/RandomizeAuthServerPassPhraseStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/RandomizeAuthServerPassPhraseStep.cs index a41c870f41..b29998438a 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/RandomizeAuthServerPassPhraseStep.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/RandomizeAuthServerPassPhraseStep.cs @@ -12,6 +12,8 @@ public class RandomizeAuthServerPassPhraseStep : ProjectBuildPipelineStep private const string LocalhostPfx = "localhost.pfx -p 00000000-0000-0000-0000-000000000000"; private const string DotnetDevCerts = "openiddict.pfx -p 00000000-0000-0000-0000-000000000000"; private const string ProductionEncryptionAndSigningCertificate = "AddProductionEncryptionAndSigningCertificate(\"openiddict.pfx\", \"00000000-0000-0000-0000-000000000000\");"; + private const string ReadmeCallout = "`00000000-0000-0000-0000-000000000000`"; + private readonly static string RandomPassword = Guid.NewGuid().ToString("D"); public readonly static string RandomOpenIddictPassword = Guid.NewGuid().ToString("D"); @@ -59,6 +61,13 @@ public class RandomizeAuthServerPassPhraseStep : ProjectBuildPipelineStep RandomOpenIddictPassword)); } + if (lines[i].Contains(ReadmeCallout)) + { + lines[i] = lines[i].Replace(ReadmeCallout, + ReadmeCallout.Replace(DefaultPassword, + RandomOpenIddictPassword)); + } + if (lines[i].Contains(ProductionEncryptionAndSigningCertificate)) { lines[i] = lines[i].Replace(ProductionEncryptionAndSigningCertificate, From ab37edbd1b9d5b2a34ac6c2a4ee5c727249cf951 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 25 Dec 2023 11:51:27 +0800 Subject: [PATCH 16/38] Update tutorials's unit test code for 8.0 changes. --- docs/en/Tutorials/Part-10.md | 8 +++--- docs/en/Tutorials/Part-4.md | 51 +++++++++++++++++++++++++++++------- docs/en/Tutorials/Part-8.md | 44 +++++++++++++++++++++++++++---- 3 files changed, 85 insertions(+), 18 deletions(-) diff --git a/docs/en/Tutorials/Part-10.md b/docs/en/Tutorials/Part-10.md index e71beccd6f..bc1591fc60 100644 --- a/docs/en/Tutorials/Part-10.md +++ b/docs/en/Tutorials/Part-10.md @@ -614,14 +614,14 @@ using System.Threading.Tasks; using Acme.BookStore.Authors; using Shouldly; using Volo.Abp.Application.Dtos; +using Volo.Abp.Modularity; using Volo.Abp.Validation; using Xunit; namespace Acme.BookStore.Books; - {{if DB=="Mongo"}} -[Collection(BookStoreTestConsts.CollectionDefinitionName)]{{end}} -public class BookAppService_Tests : BookStoreApplicationTestBase +public abstract class BookAppService_Tests : BookStoreApplicationTestBase + where TStartupModule : IAbpModule { private readonly IBookAppService _bookAppService; private readonly IAuthorAppService _authorAppService; @@ -643,7 +643,7 @@ public class BookAppService_Tests : BookStoreApplicationTestBase //Assert result.TotalCount.ShouldBeGreaterThan(0); result.Items.ShouldContain(b => b.Name == "1984" && - b.AuthorName == "George Orwell"); + b.AuthorName == "George Orwell"); } [Fact] diff --git a/docs/en/Tutorials/Part-4.md b/docs/en/Tutorials/Part-4.md index 072392e82b..d229cfabdd 100644 --- a/docs/en/Tutorials/Part-4.md +++ b/docs/en/Tutorials/Part-4.md @@ -82,15 +82,14 @@ using System.Linq; using System.Threading.Tasks; using Shouldly; using Volo.Abp.Application.Dtos; +using Volo.Abp.Modularity; using Volo.Abp.Validation; using Xunit; namespace Acme.BookStore.Books; -{{if DB=="Mongo"}} -[Collection(BookStoreTestConsts.CollectionDefinitionName)] -{{end}} -public class BookAppService_Tests : BookStoreApplicationTestBase +public abstract class BookAppService_Tests : BookStoreApplicationTestBase + where TStartupModule : IAbpModule { private readonly IBookAppService _bookAppService; @@ -114,6 +113,41 @@ public class BookAppService_Tests : BookStoreApplicationTestBase } ```` +{{if DB == "EF"}} +Add a new implementation class of `BookAppService_Tests` class, named `EfCoreBookAppService_Tests` in the `EntityFrameworkCore\Applications\Books` namespace (folder) of the `Acme.BookStore.EntityFrameworkCore.Tests` project: + +````csharp +using Acme.BookStore.Books; +using Xunit; + +namespace Acme.BookStore.EntityFrameworkCore.Applications.Books; + +[Collection(BookStoreTestConsts.CollectionDefinitionName)] +public class EfCoreBookAppService_Tests : BookAppService_Tests +{ + +} +```` +{{end}} + +{{if DB == "Mongo"}} +Add a new implementation class of `BookAppService_Tests` class, named `MongoDBBookAppService_Tests` in the `MongoDb\Applications\Books` namespace (folder) of the `Acme.BookStore.MongoDB.Tests` project: + +````csharp +using Acme.BookStore.MongoDB; +using Acme.BookStore.Books; +using Xunit; + +namespace Acme.BookStore.MongoDb.Applications.Books; + +[Collection(BookStoreTestConsts.CollectionDefinitionName)] +public class MongoDBBookAppService_Tests : BookAppService_Tests +{ + +} +```` +{{end}} + * `Should_Get_List_Of_Books` test simply uses `BookAppService.GetListAsync` method to get and check the list of books. * We can safely check the book "1984" by its name, because we know that this books is available in the database since we've added it in the seed data. @@ -174,15 +208,14 @@ using System.Linq; using System.Threading.Tasks; using Shouldly; using Volo.Abp.Application.Dtos; +using Volo.Abp.Modularity; using Volo.Abp.Validation; using Xunit; namespace Acme.BookStore.Books; -{{if DB=="Mongo"}} -[Collection(BookStoreTestConsts.CollectionDefinitionName)] -{{end}} -public class BookAppService_Tests : BookStoreApplicationTestBase +public abstract class BookAppService_Tests : BookStoreApplicationTestBase + where TStartupModule : IAbpModule { private readonly IBookAppService _bookAppService; @@ -203,7 +236,7 @@ public class BookAppService_Tests : BookStoreApplicationTestBase result.TotalCount.ShouldBeGreaterThan(0); result.Items.ShouldContain(b => b.Name == "1984"); } - + [Fact] public async Task Should_Create_A_Valid_Book() { diff --git a/docs/en/Tutorials/Part-8.md b/docs/en/Tutorials/Part-8.md index 9d638e909e..7ea3c6cbae 100644 --- a/docs/en/Tutorials/Part-8.md +++ b/docs/en/Tutorials/Part-8.md @@ -481,18 +481,17 @@ Finally, we can write some tests for the `IAuthorAppService`. Add a new class, n using System; using System.Threading.Tasks; using Shouldly; +using Volo.Abp.Modularity; using Xunit; namespace Acme.BookStore.Authors; - {{if DB=="Mongo"}} -[Collection(BookStoreTestConsts.CollectionDefinitionName)] -{{end}} -public class AuthorAppService_Tests : BookStoreApplicationTestBase +public abstract class AuthorAppService_Tests : BookStoreApplicationTestBase + where TStartupModule : IAbpModule { private readonly IAuthorAppService _authorAppService; - public AuthorAppService_Tests() + protected AuthorAppService_Tests() { _authorAppService = GetRequiredService(); } @@ -554,6 +553,41 @@ public class AuthorAppService_Tests : BookStoreApplicationTestBase } ```` +{{if DB == "EF"}} +Add a new implementation class of `AuthorAppService_Tests` class, named `EfCoreAuthorAppService_Tests` in the `EntityFrameworkCore\Applications\Authors` namespace (folder) of the `Acme.BookStore.EntityFrameworkCore.Tests` project: + +````csharp +using Acme.BookStore.Authors; +using Xunit; + +namespace Acme.BookStore.EntityFrameworkCore.Applications.Authors; + +[Collection(BookStoreTestConsts.CollectionDefinitionName)] +public class EfCoreAuthorAppService_Tests : AuthorAppService_Tests +{ + +} +```` +{{end}} + +{{if DB == "Mongo"}} +Add a new implementation class of `AuthorAppService_Tests` class, named `MongoDBAuthorAppService_Tests` in the `MongoDb\Applications\Authors` namespace (folder) of the `Acme.BookStore.MongoDB.Tests` project: + +````csharp +using Acme.BookStore.MongoDB; +using Acme.BookStore.Authors; +using Xunit; + +namespace Acme.BookStore.MongoDb.Applications.Authors; + +[Collection(BookStoreTestConsts.CollectionDefinitionName)] +public class MongoDBAuthorAppService_Tests : AuthorAppService_Tests +{ + +} +```` +{{end}} + Created some tests for the application service methods, which should be clear to understand. ## The Next Part From a80055cb7876b229b72fe9923c7046327e07d996 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 25 Dec 2023 13:17:59 +0800 Subject: [PATCH 17/38] Make `Constructor` as `protected`. --- docs/en/Tutorials/Part-10.md | 2 +- docs/en/Tutorials/Part-4.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/en/Tutorials/Part-10.md b/docs/en/Tutorials/Part-10.md index bc1591fc60..d06cea6b6e 100644 --- a/docs/en/Tutorials/Part-10.md +++ b/docs/en/Tutorials/Part-10.md @@ -626,7 +626,7 @@ public abstract class BookAppService_Tests : BookStoreApplicatio private readonly IBookAppService _bookAppService; private readonly IAuthorAppService _authorAppService; - public BookAppService_Tests() + protected BookAppService_Tests() { _bookAppService = GetRequiredService(); _authorAppService = GetRequiredService(); diff --git a/docs/en/Tutorials/Part-4.md b/docs/en/Tutorials/Part-4.md index d229cfabdd..c97bce6bd7 100644 --- a/docs/en/Tutorials/Part-4.md +++ b/docs/en/Tutorials/Part-4.md @@ -93,7 +93,7 @@ public abstract class BookAppService_Tests : BookStoreApplicatio { private readonly IBookAppService _bookAppService; - public BookAppService_Tests() + protected BookAppService_Tests() { _bookAppService = GetRequiredService(); } @@ -219,7 +219,7 @@ public abstract class BookAppService_Tests : BookStoreApplicatio { private readonly IBookAppService _bookAppService; - public BookAppService_Tests() + protected BookAppService_Tests() { _bookAppService = GetRequiredService(); } From c1638a94f145c6f99aacb2c123b3bb64912e97cf Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 25 Dec 2023 15:37:12 +0800 Subject: [PATCH 18/38] Remove MethodPlaceholder --- .../Cli/ServiceProxying/CSharp/CSharpServiceProxyGenerator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ServiceProxying/CSharp/CSharpServiceProxyGenerator.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ServiceProxying/CSharp/CSharpServiceProxyGenerator.cs index 88ce572d33..c899270ad2 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ServiceProxying/CSharp/CSharpServiceProxyGenerator.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ServiceProxying/CSharp/CSharpServiceProxyGenerator.cs @@ -220,7 +220,7 @@ public class CSharpServiceProxyGenerator : ServiceProxyGeneratorBase x).Select(x => x))); - classTemplate.Replace($"{Environment.NewLine}{Environment.NewLine} {MethodPlaceholder}", string.Empty); + classTemplate.Replace($"{Environment.NewLine}{Environment.NewLine} {MethodPlaceholder}", string.Empty).Replace(MethodPlaceholder, string.Empty); filePath = Path.Combine(args.WorkDirectory, folder, $"{clientProxyName}.Generated.cs"); Directory.CreateDirectory(Path.GetDirectoryName(filePath)); From c950c72688c9da4a277a9f470a1cbe21e3ac5471 Mon Sep 17 00:00:00 2001 From: honurbu Date: Mon, 25 Dec 2023 10:39:22 +0300 Subject: [PATCH 19/38] Labels centered --- .../src/Volo.Blogging.Web/Pages/Members/Index.cshtml | 7 ++++--- .../blogging/src/Volo.Blogging.Web/Pages/Members/Index.css | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Members/Index.cshtml b/modules/blogging/src/Volo.Blogging.Web/Pages/Members/Index.cshtml index 5873100026..c94a5604ce 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Members/Index.cshtml +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Members/Index.cshtml @@ -111,16 +111,17 @@ @foreach (var post in Model.Posts) {
-
+
- + - + @L["Blog"].Value.ToUpper()
+