diff --git a/.github/workflows/auto-pr.yml b/.github/workflows/auto-pr.yml
index 83ca4e55fc..d35f868540 100644
--- a/.github/workflows/auto-pr.yml
+++ b/.github/workflows/auto-pr.yml
@@ -1,15 +1,15 @@
-name: Merge branch rel-4.2 with rel-4.1
+name: Merge branch dev with rel-4.2
on:
push:
branches:
- - rel-4.1
+ - rel-4.2
jobs:
- merge-rel-4-2-with-rel-4-1:
+ merge-dev-with-rel-4-2:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
- ref: rel-4.2
+ ref: dev
- name: Reset promotion branch
run: |
git fetch origin rel-4.1:rel-4.1
@@ -17,8 +17,8 @@ jobs:
- name: Create Pull Request
uses: peter-evans/create-pull-request@v3
with:
- branch: auto-merge/rel-4-1/${{github.run_number}}
- title: Merge branch rel-4.2 with rel-4.1
- body: This PR generated automatically to merge rel-4.2 with rel-4.1. Please review the changed files before merging to prevent any errors that may occur.
+ branch: auto-merge/rel-4-2/${{github.run_number}}
+ title: Merge branch dev with rel-4.2
+ body: This PR generated automatically to merge dev with rel-4.2. Please review the changed files before merging to prevent any errors that may occur.
reviewers: ${{github.actor}}
token: ${{ github.token }}
diff --git a/README.md b/README.md
index cd27da8fe0..a73e9ef3ed 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,8 @@

[](https://www.nuget.org/packages/Volo.Abp.Core)
-[](https://docs.abp.io/en/abp/latest/Nightly-Builds)
+[](https://www.nuget.org/packages/Volo.Abp.Core)
+[](https://docs.abp.io/en/abp/latest/Nightly-Builds)
[](https://www.nuget.org/packages/Volo.Abp.Core)
ABP Framework is a complete **infrastructure** based on the **ASP.NET Core** to create **modern web applications** and **APIs** by following the software development **best practices** and the **latest technologies**.
@@ -103,4 +104,4 @@ ABP is a community-driven open source project. See [the contribution guide](http
## Support the ABP Framework
-Love ABP Framework? **Please give a star** to this repository :star:
\ No newline at end of file
+Love ABP Framework? **Please give a star** to this repository :star:
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/en-GB.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/en-GB.json
new file mode 100644
index 0000000000..c1f56de865
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/en-GB.json
@@ -0,0 +1,14 @@
+{
+ "culture": "en-GB",
+ "texts": {
+ "Account": "ABP Account - Login & Register | ABP.IO",
+ "Welcome": "Welcome",
+ "UseOneOfTheFollowingLinksToContinue": "Use one of the following links to continue",
+ "FrameworkHomePage": "Framework home page",
+ "FrameworkDocumentation": "Framework documentation",
+ "OfficialBlog": "Official blog",
+ "CommercialHomePage": "Commercial home page",
+ "CommercialSupportWebSite": "Commercial support web site",
+ "CommunityWebSite": "ABP community web site"
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en-GB.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en-GB.json
new file mode 100644
index 0000000000..970e04d24e
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en-GB.json
@@ -0,0 +1,202 @@
+{
+ "culture": "en-GB",
+ "texts": {
+ "Permission:Organizations": "Organisations",
+ "Permission:Manage": "Manage Organisations",
+ "Permission:DiscountRequests": "Discount Requests",
+ "Permission:DiscountManage": "Manage Discount Requests",
+ "Permission:Disable": "Disable",
+ "Permission:Enable": "Enable",
+ "Permission:EnableSendEmail": "Enable Send Email",
+ "Permission:SendEmail": "Send Email",
+ "Permission:NpmPackages": "NPM Packages",
+ "Permission:NugetPackages": "Nuget Packages",
+ "Permission:Maintenance": "Maintenance",
+ "Permission:Maintain": "Maintain",
+ "Permission:ClearCaches": "Clear caches",
+ "Permission:Modules": "Modules",
+ "Permission:Packages": "Packages",
+ "Permission:Edit": "Edit",
+ "Permission:Delete": "Delete",
+ "Permission:Create": "Create",
+ "Permission:Accounting": "Accounting",
+ "Permission:Accounting:Quotation": "Quotation",
+ "Permission:Accounting:Invoice": "Invoice",
+ "Menu:Organizations": "Organisations",
+ "Menu:Accounting": "Accounting",
+ "Menu:Packages": "Packages",
+ "Menu:DiscountRequests": "Discount Requests",
+ "NpmPackageDeletionWarningMessage": "This NPM Package will be deleted. Please confirm this?",
+ "NugetPackageDeletionWarningMessage": "This Nuget Package will be deleted. Please confirm this?",
+ "ModuleDeletionWarningMessage": "This Module will be deleted. Please confirm this?",
+ "Name": "Name",
+ "DisplayName": "Display name",
+ "ShortDescription": "Short description",
+ "NameFilter": "Name",
+ "CreationTime": "Creation time",
+ "IsPro": "Is pro",
+ "ShowOnModuleList": "Show in module list",
+ "EfCoreConfigureMethodName": "Configure method name",
+ "IsProFilter": "Is pro",
+ "ApplicationType": "Application type",
+ "Target": "Target",
+ "TargetFilter": "Target",
+ "ModuleClass": "Module class",
+ "NugetPackageTarget.DomainShared": "Domain Shared",
+ "NugetPackageTarget.Domain": "Domain",
+ "NugetPackageTarget.Application": "Application",
+ "NugetPackageTarget.ApplicationContracts": "Application Contracts",
+ "NugetPackageTarget.HttpApi": "Http Api",
+ "NugetPackageTarget.HttpApiClient": "Http Api Client",
+ "NugetPackageTarget.Web": "Web",
+ "NugetPackageTarget.EntityFrameworkCore": "Delete Entity Framework Core",
+ "NugetPackageTarget.MongoDB": "MongoDB",
+ "Edit": "Edit",
+ "Delete": "Delete",
+ "Refresh": "Refresh",
+ "NpmPackages": "NPM Packages",
+ "NugetPackages": "Nuget Packages",
+ "NpmPackageCount": "NPM Package Count",
+ "NugetPackageCount": "Nuget Package Count",
+ "Module": "Modules",
+ "ModuleInfo": "Module info",
+ "CreateANpmPackage": "Create a NPM package",
+ "CreateAModule": "Create a module",
+ "CreateANugetPackage": "Create a Nuget package",
+ "AddNew": "Add new",
+ "PackageAlreadyExist{0}": "\"{0}\" package has already been added.",
+ "ModuleAlreadyExist{0}": "\"{0}\" module has already been added.",
+ "ClearCache": "Clear cache",
+ "SuccessfullyCleared": "Successfully cleared",
+ "Menu:NpmPackages": "NPM Packages",
+ "Menu:Modules": "Modules",
+ "Menu:Maintenance": "Maintenance",
+ "Menu:NugetPackages": "Nuget Packages",
+ "CreateAnOrganization": "Create an organisation",
+ "Organizations": "Organisations",
+ "LongName": "Long name",
+ "LicenseType": "License type",
+ "MissingLicenseTypeField": "The license type field is required!",
+ "LicenseStartTime": "License start time",
+ "LicenseEndTime": "License end time",
+ "AllowedDeveloperCount": "Allowed developer count",
+ "UserNameOrEmailAddress": "Username or email address",
+ "AddOwner": "Add owner",
+ "UserName": "Username",
+ "Email": "Email",
+ "Developers": "Developers",
+ "AddDeveloper": "Add developer",
+ "Create": "Create",
+ "UserNotFound": "User not found",
+ "{0}WillBeRemovedFromDevelopers": "{0} Will be removed from developers, please confirm?",
+ "{0}WillBeRemovedFromOwners": "{0} Will be removed from owners, please confirm?",
+ "Computers": "Computers",
+ "UniqueComputerId": "Unique computer id",
+ "LastSeenDate": "Last seen date",
+ "{0}Computer{1}WillBeRemovedFromRecords": "Computer of {0} ({1}) will be removed from records",
+ "OrganizationDeletionWarningMessage": "Organisation will be deleted",
+ "DeletingLastOwnerWarningMessage": "An organisation must have at least one owner, therefore you cannot remove this owner",
+ "This{0}AlreadyExistInThisOrganization": "{0} already exist in this organisation",
+ "AreYouSureYouWantToDeleteAllComputers": "Are you sure you want to delete all computers?",
+ "DeleteAll": "Delete all",
+ "DoYouWantToCreateNewUser": "Do you want to create new user?",
+ "MasterModules": "Master Modules",
+ "OrganizationName": "Organisation name",
+ "CreationDate": "Creation date",
+ "LicenseStartDate": "License start date",
+ "LicenseEndDate": "License end date",
+ "OrganizationNamePlaceholder": "Organisation name...",
+ "TotalQuestionCountPlaceholder": "Total question count...",
+ "RemainingQuestionCountPlaceholder": "Remaining question count...",
+ "LicenseTypePlaceholder": "License type...",
+ "CreationDatePlaceholder": "Creation date...",
+ "LicenseStartDatePlaceholder": "License start date...",
+ "LicenseEndDatePlaceholder": "License end date...",
+ "UsernameOrEmail": "Username or email",
+ "UsernameOrEmailPlaceholder": "Username or email...",
+ "Member": "Member",
+ "PurchaseOrderNo": "Purchase Order No.",
+ "QuotationDate": "Quotation date",
+ "CompanyName": "Company name",
+ "CompanyAddress": "Company address",
+ "Price": "Price",
+ "DiscountText": "Discount text",
+ "DiscountQuantity": "Discount quantity",
+ "DiscountPrice": "Discount price",
+ "Quotation": "Quotation",
+ "ExtraText": "Extra text",
+ "ExtraAmount": "Extra Amount",
+ "DownloadQuotation": "Download Quotation",
+ "Invoice": "Invoice",
+ "TaxNumber": "Tax No.",
+ "InvoiceNumber": "Invoice No.",
+ "InvoiceDate": "Invoice Date",
+ "InvoiceNote": "Invoice Note",
+ "Quantity": "Quantity",
+ "AddProduct": "Add Product",
+ "AddProductWarning": "You need to add a Product!",
+ "TotalPrice": "Total Price",
+ "Generate": "Generate",
+ "MissingQuantityField": "The Quantity field is required!",
+ "MissingPriceField": "The Price field is required!",
+ "CodeUsageStatus": "Status",
+ "Country": "Country",
+ "DeveloperCount": "Developer Count",
+ "RequestCode": "Request Code",
+ "WebSite": "Website",
+ "GithubUsername": "Github Username",
+ "PhoneNumber": "Phone Number",
+ "ProjectDescription": "Project Description",
+ "Referrer": "Referrer",
+ "DiscountRequests": "Discount Request",
+ "Copylink": "Copy Link",
+ "Disable": "Disable",
+ "Enable": "Enable",
+ "EnableSendEmail": "Enable Send Email",
+ "SendEmail": "Send Email",
+ "SuccessfullyDisabled": "Successfully disabled",
+ "SuccessfullyEnabled": "Successfully enabled",
+ "EmailSent": "Email sent",
+ "SuccessfullySent": "Successfully sent",
+ "SuccessfullyDeleted": "Successfully deleted",
+ "DiscountRequestDeletionWarningMessage": "Discount request will be deleted",
+ "BusinessType": "Business Type",
+ "TotalQuestionCount": "Total question count",
+ "RemainingQuestionCount": "Remaining question count",
+ "TotalQuestionMustBeGreaterWarningMessage": "TotalQuestionCount must be greater than RemainingQuestionCount!",
+ "QuestionCountsMustBeGreaterThanZero": "TotalQuestionCount and RemainingQuestionCount must be zero or greater than zero!",
+ "UnlimitedQuestionCount": "Unlimited question count",
+ "Notes": "Notes",
+ "Menu:Community": "Community",
+ "Menu:Articles": "Articles",
+ "Wait": "Wait",
+ "Approve": "Approve",
+ "Reject": "Reject",
+ "Details": "Details",
+ "Url": "Url",
+ "Title": "Title",
+ "ContentSource": "Content source",
+ "Status": "Status",
+ "ReadArticle": "Read article",
+ "ArticleHasBeenWaiting": "Article has been waiting",
+ "ArticleHasBeenApproved": "Article has been approved",
+ "ArticleHasBeenRejected": "Article has been rejected",
+ "Permission:Community": "Community",
+ "Permission:CommunityArticle": "Article",
+ "Link": "Link",
+ "Enum:ContentSource:0": "Github",
+ "Enum:ContentSource:1": "External",
+ "Enum:Status:0": "Waiting",
+ "Enum:Status:1": "Author name",
+ "Enum:Status:2": "Approved",
+ "Summary": "Summary",
+ "AuthorName": "Author",
+ "CoverImage": "Cover Image",
+ "RemoveCacheConfirmationMessage": "Are you sure you want remove the cache for \"{0}\" article?",
+ "SuccessfullyRemoved": "Successfully cleared",
+ "RemoveCache": "Remove Cache",
+ "Language": "Language",
+ "Optional": "Optional",
+ "CreateArticleLanguageInfo": "The language in which the article is written"
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
index 32d3c16a01..c190a91470 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
@@ -197,6 +197,7 @@
"RemoveCache": "Remove Cache",
"Language": "Language",
"Optional": "Optional",
- "CreateArticleLanguageInfo": "The language in which the article is written"
+ "CreateArticleLanguageInfo": "The language in which the post is written",
+ "Enum:ContentSource:2": "Video Post"
}
-}
\ No newline at end of file
+}
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en-GB.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en-GB.json
new file mode 100644
index 0000000000..235a7c61d0
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en-GB.json
@@ -0,0 +1,35 @@
+{
+ "culture": "en-GB",
+ "texts": {
+ "Volo.AbpIo.Domain:010004": "Maximum member count reached!",
+ "Volo.AbpIo.Domain:010005": "Maximum owner count reached!",
+ "Volo.AbpIo.Domain:010006": "This user is already an owner in this organisation!",
+ "Volo.AbpIo.Domain:010007": "This user is already a developer in this organisation!",
+ "Volo.AbpIo.Domain:010008": "Allowed Developer Count can not be less then current developer count!",
+ "Volo.AbpIo.Domain:010009": "Allowed Developer Count can not be less then 0!",
+ "Volo.AbpIo.Domain:010010": "Maximum mac address count has been exceeded!",
+ "Volo.AbpIo.Domain:010011": "Personal license can't have more than 1 developer!",
+ "Volo.AbpIo.Domain:010012": "License can't be extended one month after license expires!",
+ "Volo.AbpIo.Domain:020001": "Couldn't delete this NPM Package because \"{NugetPackages}\" Nuget Packages are dependent to this package.",
+ "Volo.AbpIo.Domain:020002": "Couldn't delete this NPM Package because \"{Modules}\" Modules are using this package.",
+ "Volo.AbpIo.Domain:020003": "Couldn't delete this NPM Package because \"{Modules}\" Modules are using this package and \"{NugetPackages}\" Nuget Packages are dependent to this package.",
+ "Volo.AbpIo.Domain:020004": "Couldn't delete this Nuget Package because \"{Modules}\" Modules are using this package.",
+ "WantToLearn?": "Want to learn?",
+ "ReadyToGetStarted?": "Ready to get started?",
+ "JoinOurCommunity": "Join our community",
+ "GetStartedUpper": "GET STARTED",
+ "ForkMeOnGitHub": "Fork me on GitHub",
+ "Features": "Features",
+ "GetStarted": "Get Started",
+ "Documents": "Documents",
+ "Community": "Community",
+ "ContributionGuide": "Contribution Guide",
+ "Blog": "Blog",
+ "Commercial": "Commercial",
+ "MyAccount": "My account",
+ "Permission:License": "License",
+ "Permission:UserInfo": "User info",
+ "SeeDocuments": "See Documents",
+ "Samples": "Samples"
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hans.json
index 79493b537e..f061408c98 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hans.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hans.json
@@ -27,6 +27,8 @@
"Blog": "博客",
"Commercial": "商业版",
"MyAccount": "我的账户",
+ "Permission:License": "许可",
+ "Permission:UserInfo": "用户信息",
"SeeDocuments": "查看文档",
"Samples": "示例"
}
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en-GB.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en-GB.json
new file mode 100644
index 0000000000..56f4ed934f
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en-GB.json
@@ -0,0 +1,39 @@
+{
+ "culture": "en-GB",
+ "texts": {
+ "OrganizationManagement": "Organisation Management",
+ "OrganizationList": "Organisation list",
+ "Volo.AbpIo.Commercial:010003": "You are not owner of this organisation!",
+ "OrganizationNotFoundMessage": "Organisation not found!",
+ "DeveloperCount": "Allocated / total developers",
+ "QuestionCount": "Remaining / total questions",
+ "Unlimited": "Unlimited",
+ "Owners": "Owners",
+ "AddMember": "Add member",
+ "AddOwner": "Add owner",
+ "AddDeveloper": "Add developer",
+ "UserName": "Username",
+ "Name": "Name",
+ "EmailAddress": "Email address",
+ "Developers": "Developers",
+ "LicenseType": "License type",
+ "Manage": "Manage",
+ "StartDate": "Start date",
+ "EndDate": "End date",
+ "Modules": "Modules",
+ "LicenseExtendMessage": "Your license end date is extended to {0}",
+ "LicenseUpgradeMessage": "Your license is upgraded to {0}",
+ "LicenseAddDeveloperMessage": "{0} developers added to your license",
+ "Volo.AbpIo.Commercial:010004": "Cannot find the specified user! The user must have already registered.",
+ "MyOrganizations": "My organisations",
+ "ApiKey": "API key",
+ "UserNameNotFound": "There is no user with username {0}",
+ "SuccessfullyAddedToNewsletter": "Thank you for subscribing to our newsletter!",
+ "MyProfile": "My Profile",
+ "EmailNotValid": "Please enter a valid email address.",
+ "JoinOurMarketingNewsletter": "Join our marketing newsletter",
+ "WouldLikeToReceiveMarketingMaterials": "I would like to receive marketing materials e.g. product deals & special offers.",
+ "StartUsingYourLicenseNow": "Start using your license now!",
+ "WelcomePage": "Welcome Page"
+ }
+}
\ 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 0147e71a05..82c23450a0 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json
@@ -28,8 +28,12 @@
"MyOrganizations": "我的组织",
"ApiKey": "API key",
"UserNameNotFound": "没有用户名为{0}的用户",
- "SuccessfullyAddedToNewsletter": "感谢你订阅我们的新闻通讯!",
+ "SuccessfullyAddedToNewsletter": "感谢你订阅我们的新闻简讯!",
"MyProfile": "我的资料",
- "EmailNotValid": "请输入有效的电子邮件地址"
+ "EmailNotValid": "请输入有效的电子邮件地址",
+ "JoinOurMarketingNewsletter": "加入我们的营销简讯",
+ "WouldLikeToReceiveMarketingMaterials": "我想收到市场营销资料,例如产品交易和特别优惠.",
+ "StartUsingYourLicenseNow": "立即开始使用你的许可证",
+ "WelcomePage": "欢迎页面"
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en-GB.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en-GB.json
new file mode 100644
index 0000000000..652090d864
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en-GB.json
@@ -0,0 +1,106 @@
+{
+ "culture": "en-GB",
+ "texts": {
+ "Permission:CommunityArticle": "Community Article",
+ "Permission:Edit": "Edit",
+ "Waiting": "Waiting",
+ "Approved": "Approved",
+ "Rejected": "Rejected",
+ "Wait": "Wait",
+ "Approve": "Approve",
+ "Reject": "Reject",
+ "ReadArticle": "Read Article",
+ "Status": "Status",
+ "ContentSource": "Content Source",
+ "Details": "Details",
+ "Url": "Url",
+ "Title": "Title",
+ "CreationTime": "Creation time",
+ "Save": "Save",
+ "SameUrlAlreadyExist": "The Url already exists. If you want to add this article, you should change the url!",
+ "UrlIsNotValid": "Url is not valid.",
+ "UrlNotFound": "Url not found.",
+ "UrlContentNotFound": "Url content not found.",
+ "Summary": "Summary",
+ "MostRead": "Most Read",
+ "Latest": "Latest",
+ "ContributeAbpCommunity": "Contribute to the ABP Community",
+ "SubmitYourArticle": "Submit Your Article",
+ "ContributionGuide": "Contribution Guide",
+ "BugReport": "Bug Report",
+ "SeeAllArticles": "See All Articles",
+ "WelcomeToABPCommunity!": "Welcome to the ABP Community!",
+ "MyProfile": "My Profile",
+ "MyOrganizations": "My Organisations",
+ "EmailNotValid": "Please enter a valid email address.",
+ "FeatureRequest": "Feature Request",
+ "CreateArticleTitleInfo": "Title of the article to be shown on the article list.",
+ "CreateArticleUrlInfo": "Original GitHub/External URL of the article.",
+ "CreateArticleSummaryInfo": "A short summary of the article to be shown on the article list.",
+ "CreateArticleCoverInfo": "To create an effective article, add a cover photo and an upload 16:9 aspect ratio pictures for the best view (Maximum file size: 1MB)",
+ "ThisExtensionIsNotAllowed": "The extension is not allowed.",
+ "TheFileIsTooLarge": "The file is too large.",
+ "GoToTheArticle": "Go to the Article",
+ "Contribute": "Contribute",
+ "OverallProgress": "Overall Progress",
+ "Done": "Done",
+ "Open": "Open",
+ "Closed": "Closed",
+ "LatestQuestionOnThe": "Latest Question on the",
+ "Stackoverflow": "Stackoverflow",
+ "Votes": "votes",
+ "Answer": "Answer",
+ "Views": "views",
+ "Answered": "Answered",
+ "WaitingForYourAnswer": "Waiting for your answer",
+ "Asked": "asked",
+ "AllQuestions": "All Questions",
+ "NextVersion": "Next Version",
+ "MilestoneErrorMessage": "Couldn't get the current milestone details from Github.",
+ "QuestionItemErrorMessage": "Couldn't get the latest question details from Stackoverflow.",
+ "Oops": "Oops!",
+ "CreateArticleSuccessMessage": "The Article has been successfully submitted. It will be published once it has been reviewed by the site admin.",
+ "ChooseCoverImage": "Choose a cover image...",
+ "CoverImage": "Cover Image",
+ "ShareYourExperiencesWithTheABPFramework": "Share your experiences with the ABP Framework!",
+ "Optional": "Optional",
+ "UpdateUserWebSiteInfo": "Example: https://johndoe.com",
+ "UpdateUserTwitterInfo": "Example: johndoe",
+ "UpdateUserGithubInfo": "Example: johndoe",
+ "UpdateUserLinkedinInfo": "Example: https://www.linkedin.com/...",
+ "UpdateUserCompanyInfo": "Example: Volosoft",
+ "UpdateUserJobTitleInfo": "Example: Software Developer",
+ "UserName": "UserName",
+ "Company": "Company",
+ "PersonalWebsite": "Personal website",
+ "RegistrationDate": "Registration date",
+ "Social": "Social",
+ "Biography": "Biography",
+ "HasNoPublishedArticlesYet": "has no published articles yet",
+ "Author": "Author",
+ "LatestGithubAnnouncements": "Latest GitHub Announcements",
+ "SeeAllAnnouncements": "View all Announcements",
+ "LatestBlogPost": "Latest Blog Post",
+ "Edit": "Edit",
+ "ProfileImageChange": "Change the profile image",
+ "BlogItemErrorMessage": "Couldn't get the latest blog post details from ABP.",
+ "PlannedReleaseDate": "Planned release date",
+ "CommunityArticleRequestErrorMessage": "Couldn't get the latest article request from GitHub.",
+ "ArticleRequestFromGithubIssue": "There aren't any article requests at the moment.",
+ "LatestArticles": "Latest Articles",
+ "ArticleRequests": "Article Requests",
+ "AllArticleRequests": "See all Article requests",
+ "SubscribeToTheNewsletter": "Subscribe to the Newsletter",
+ "NewsletterEmailDefinition": "Receive information about what's happening in ABP; new releases, free sources, articles, and more.",
+ "NoThanks": "No thanks",
+ "MaybeLater": "Maybe later",
+ "JoinOurArticleNewsletter": "Join our article newsletter",
+ "Community": "Community",
+ "Marketing": "Marketing",
+ "CommunityPrivacyPolicyConfirmation": "I agree to the Terms & Conditions and Privacy Policy.",
+ "ArticleRequestMessageTitle": "Open an issue on the GitHub to request an article/tutorial you want to see on this web site.",
+ "ArticleRequestMessageBody": "Here is the list of the requested articles by the Community. Do you want to write a requested article? Please click on the request and join the discussion.",
+ "Language": "Language",
+ "CreateArticleLanguageInfo": "The language in which the article is written"
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json
index a29355b401..5bf922f012 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json
@@ -25,19 +25,18 @@
"MostRead": "Most Read",
"Latest": "Latest",
"ContributeAbpCommunity": "Contribute to the ABP Community",
- "SubmitYourArticle": "Submit Your Article",
+ "SubmitYourArticle": "Submit Your Post",
"ContributionGuide": "Contribution Guide",
"BugReport": "Bug Report",
- "SeeAllArticles": "See All Articles",
+ "SeeAllArticles": "See All Posts",
"WelcomeToABPCommunity!": "Welcome to the ABP Community!",
"MyProfile": "My profile",
"MyOrganizations": "My organizations",
"EmailNotValid": "Please enter a valid email address.",
"FeatureRequest": "Feature Request",
- "CreateArticleTitleInfo": "Title of the article to be shown on the article list.",
- "CreateArticleUrlInfo": "Original GitHub/External URL of the article.",
- "CreateArticleSummaryInfo": "A short summary of the article to be shown on the article list.",
- "CreateArticleCoverInfo": "For creating an effective article, add a cover photo. Upload 16:9 aspect ratio pictures for the best view.",
+ "CreateArticleTitleInfo": "Title of the post to be shown on the post list.",
+ "CreateArticleSummaryInfo": "A short summary of the post to be shown on the post list.",
+ "CreateArticleCoverInfo": "For creating an effective article, add a cover photo. Upload 16:9 aspect ratio pictures for the best view. Maximum file size: 1MB.",
"ThisExtensionIsNotAllowed": "This extension is not allowed.",
"TheFileIsTooLarge": "The file is too large.",
"GoToTheArticle": "Go to the Article",
@@ -87,7 +86,7 @@
"PlannedReleaseDate": "Planned release date",
"CommunityArticleRequestErrorMessage": "Could not get the latest article request from Github.",
"ArticleRequestFromGithubIssue": "There are not any article requests now.",
- "LatestArticles": "Latest Articles",
+ "LatestArticles": "Latest Posts",
"ArticleRequests": "Article Requests",
"AllArticleRequests": "See All Article Requests",
"SubscribeToTheNewsletter": "Subscribe to the Newsletter",
@@ -101,6 +100,38 @@
"ArticleRequestMessageTitle": "Open an issue on the GitHub to request an article/tutorial you want to see on this web site.",
"ArticleRequestMessageBody": "Here, the list of the requested articles by the community. Do you want to write a requested article? Please click to the request and join to the discussion.",
"Language": "Language",
- "CreateArticleLanguageInfo": "The language in which the article is written"
+ "CreateArticleLanguageInfo": "The language for the post content.",
+ "VideoPost": "Video Post",
+ "Article": "Article",
+ "Read": "Read",
+ "CreateGithubArticleUrlInfo": "Original GitHub URL of the article.",
+ "CreateVideoContentUrlInfo": "Original Youtube URL of the post.",
+ "CreateExternalArticleUrlInfo": "Original External Url of the article.",
+ "VideoContentForm": "Submit Video on YouTube",
+ "GithubPostForm": "Submit Article on GitHub",
+ "ExternalPostForm": "Submit an External Content",
+ "HowToPost": "How to Post?",
+ "Posts": "Posts",
+ "VideoUrl": "Video Url",
+ "GithubArticleUrl": "Github Article Url",
+ "ExternalArticleUrl": "External Article Url",
+ "CreatePostCoverInfo": "For creating an effective post, add a cover photo. Upload 16:9 aspect ratio pictures for the best view. Maximum file size: 1MB.",
+ "ThankYouForContribution": "Thank you for contributing to the ABP Community.",
+ "GithubArticle": "Github Article",
+ "GithubArticleSubmitStepOne": "1. Write an article on any public GitHub repository with the Markdown format. example",
+ "GithubArticleSubmitStepTwo": "2. Submit your article URL using the form.",
+ "GithubArticleSubmitStepThree": "3. Your article will be rendered in this web site.",
+ "YoutubeVideo": "Youtube Video",
+ "YoutubeVideoSubmitStepOne": "1. Publish your video on YouTube.",
+ "YoutubeVideoSubmitStepTwo": "2. Submit the video URL using the form.",
+ "YoutubeVideoSubmitStepThree": "3. Visitors will be able to watch your video content directly on this website.",
+ "ExternalContent": "External Content",
+ "ExternalContentSubmitStepOne": "1. Create a content on any public platform (medium, your own blog or anywhere you like).",
+ "ExternalContentSubmitStepTwo": "2. Submit your content URL using the form.",
+ "ExternalContentSubmitStepThree": "3. Visitors are redirected to the content on the original website.",
+ "ChooseYourContentType": "Please choose the way you want to add your content.",
+ "PostContentViaGithub": "I want to add my article with GitHub in accordance with the markdown rules.",
+ "PostContentViaYoutube": "I want to share my videos available on Youtube here.",
+ "PostContentViaExternalSource": "I want to add the content I published on another platform here."
}
}
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/zh-Hans.json
index fa793c91a0..49b819227f 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/zh-Hans.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/zh-Hans.json
@@ -35,7 +35,6 @@
"EmailNotValid": "请输入有效的电子邮箱地址.",
"FeatureRequest": "功能请求",
"CreateArticleTitleInfo": "文章标题显示在文章列表中.",
- "CreateArticleUrlInfo": "文章的原始GitHub/外部URL.",
"CreateArticleSummaryInfo": "文章的简短摘要将显示在文章列表中.",
"CreateArticleCoverInfo": "为了创建有效的文章,请添加封面图. 仅支持16:9的图片!",
"ThisExtensionIsNotAllowed": "不允许此扩展名.",
@@ -84,6 +83,34 @@
"Edit": "修改",
"ProfileImageChange": "更改资料图片",
"BlogItemErrorMessage": "无法从ABP获取最新的博客文章详细信息.",
- "PlannedReleaseDate": "计划发布日期"
+ "PlannedReleaseDate": "计划发布日期",
+ "CommunityArticleRequestErrorMessage": "无法从Github获取最新的文章请求.",
+ "ArticleRequestFromGithubIssue": "现在没有任何文章请求.",
+ "LatestArticles": "最新的帖子",
+ "ArticleRequests": "文章请求",
+ "AllArticleRequests": "查看所有文章请求",
+ "SubscribeToTheNewsletter": "订阅简讯",
+ "NewsletterEmailDefinition": "获取有关ABP发生的信息,例如新版本,免费资源,文章等.",
+ "NoThanks": "不用了,谢谢",
+ "MaybeLater": "以后再说",
+ "JoinOurArticleNewsletter": "加入我们的文章简讯",
+ "Community": "社区",
+ "Marketing": "营销",
+ "CommunityPrivacyPolicyConfirmation": "我同意条款和条件以及隐私政策.",
+ "ArticleRequestMessageTitle": "在GitHub上创建一个Issue,以请求你要在此网站上查看的文章/教程.",
+ "ArticleRequestMessageBody": "在这里,是社区请求的文章列表. 您要写一篇要求的文章吗? 请单击该请求并加入讨论.",
+ "Language": "语言",
+ "CreateArticleLanguageInfo": "本文所用的语言",
+ "VideoPost": "视频",
+ "Article": "文章",
+ "Read": "阅读",
+ "CreateGithubArticleUrlInfo": "文章的原始GitHub链接.",
+ "CreateVideoContentUrlInfo": "文章的原始Youtube链接.",
+ "CreateExternalArticleUrlInfo": "本文的原始外部网址",
+ "VideoContentForm": "视频内容来源",
+ "GithubPostForm": "Github文章来源",
+ "ExternalPostForm": "外部文章来源",
+ "PostSourceTypeChooses": "我们接受文章的三种来源类型;",
+ "Posts": "文章"
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ar.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ar.json
index a5d83f9807..3160dd45b4 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ar.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ar.json
@@ -156,6 +156,7 @@
"UiFramework": "إطار عمل واجهة المستخدم",
"EmailAddress": "البريد الإلكترونى",
"Mobile": "المحمول",
- "ReactNative": "React Native"
+ "ReactNative": "React Native",
+ "SelectLanguage": "اختار اللغة"
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/de-DE.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/de-DE.json
index 6f9f0726cf..523247a7b6 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/de-DE.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/de-DE.json
@@ -184,6 +184,7 @@
"ABPCLIExamplesInfo": "Der Befehl new erstellt eine mehrschichtige MVC-Anwendung mit Entity Framework Core als Datenbankanbieter. Es gibt jedoch zusätzliche Optionen. Beispiele:",
"SeeCliDocumentForMoreInformation": "Weitere Optionen finden Sie im ABP CLI-Dokument oder wählen Sie oben die Registerkarte \"Direkter Download\".",
"Optional": "Optional",
- "LocalFrameworkRef": "Behalten Sie die lokale Projektreferenz für die Framework-Pakete bei."
+ "LocalFrameworkRef": "Behalten Sie die lokale Projektreferenz für die Framework-Pakete bei.",
+ "SelectLanguage": "Sprache auswählen"
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en-GB.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en-GB.json
new file mode 100644
index 0000000000..cd0592524d
--- /dev/null
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en-GB.json
@@ -0,0 +1,198 @@
+{
+ "culture": "en-GB",
+ "texts": {
+ "GetStarted": "Get Started - Startup Templates",
+ "Create": "Create",
+ "NewProject": "New Project",
+ "DirectDownload": "Direct Download",
+ "ProjectName": "Project name",
+ "ProjectType": "Project type",
+ "DatabaseProvider": "Database provider",
+ "NTier": "N-Tier",
+ "IncludeUserInterface": "Include user interface",
+ "CreateNow": "Create now",
+ "TheStartupProject": "The startup project",
+ "Tutorial": "Tutorial",
+ "UsingCLI": "Using CLI",
+ "SeeDetails": "See Details",
+ "AbpShortDescription": "ABP Framework is a complete infrastructure to create modern web applications by following the software development best practices and conventions.",
+ "SourceCodeUpper": "SOURCE CODE",
+ "LatestReleaseLogs": "Latest release logs",
+ "Infrastructure": "Infrastructure",
+ "Architecture": "Architecture",
+ "Modular": "Modular",
+ "DontRepeatYourself": "Don’t Repeat Yourself",
+ "DeveloperFocused": "Developer Focused",
+ "FullStackApplicationInfrastructure": "Full stack application infrastructure.",
+ "DomainDrivenDesign": "Domain Driven Design",
+ "DomainDrivenDesignExplanation": "Designed and developed based on DDD patterns and principles. Provides a layered model for your application.",
+ "Authorization": "Authorisation",
+ "AuthorizationExplanation": "Advanced authorisation with user, role and fine-grained permission system. Built on the Microsoft Identity library.",
+ "MultiTenancy": "Multi-Tenancy",
+ "MultiTenancyExplanationShort": "SaaS applications made easy! Integrated multi-tenancy from database to UI.",
+ "CrossCuttingConcerns": "Cross Cutting Concerns",
+ "CrossCuttingConcernsExplanationShort": "Complete infrastructure for authorization, validation, exception handling, caching, audit logging, transaction management and more.",
+ "BuiltInBundlingMinification": "Built-In Bundling & Minification",
+ "BuiltInBundlingMinificationExplanation": "No need to use external tools for bundling & minification. ABP offers a simpler, dynamic, powerful, modular and built-in way!",
+ "VirtualFileSystem": "Virtual File System",
+ "VirtualFileSystemExplanation": "Embed views, scripts, styles, images... into packages/libraries and reuse them in different applications.",
+ "Theming": "Theming",
+ "ThemingExplanationShort": "Use and customise the bootstrap-based standard UI theme or create your own.",
+ "BootstrapTagHelpersDynamicForms": "Bootstrap Tag Helpers & Dynamic Forms",
+ "BootstrapTagHelpersDynamicFormsExplanation": "Instead of manually writing bootstrap components, Use ABP's tag helpers to simplify and take advantage of intellisense. Quickly build UI forms based on a C# model using the dynamic form tag helper.",
+ "HTTPAPIsDynamicProxies": "HTTP APIs & Dynamic Proxies",
+ "HTTPAPIsDynamicProxiesExplanation": "Automatically expose application services as REST style HTTP APIs, and consume them with dynamic JavaScript and C# proxies.",
+ "CompleteArchitectureInfo": "Modern architecture to create maintainable software solutions.",
+ "DomainDrivenDesignBasedLayeringModelExplanation": "Helps you to implement a DDD based layered architecture and build a maintainable code base.",
+ "DomainDrivenDesignBasedLayeringModelExplanationCont": "Provides startup templates, abstractions, base classes, services, documentation and guides to help you to develop your application based on DDD patterns & principles.",
+ "MicroserviceCompatibleModelExplanation": "The core framework & pre-build modules are designed with microservice architecture in mind.",
+ "MicroserviceCompatibleModelExplanationCont": "Provides infrastructure, integrations, samples and documentation to implement microservice solutions easier, while it doesn’t bring additional complexity if you want a monolithic application.",
+ "ModularInfo": "ABP provides a module system that allows you to develop reusable application modules, tie into application lifecycle events, and express dependencies between core parts of your system.",
+ "PreBuiltModulesThemes": "Pre-Built Modules & Themes",
+ "PreBuiltModulesThemesExplanation": "Open source and commercial modules & themes are ready to use in your business application.",
+ "NuGetNPMPackages": "NuGet & NPM Packages",
+ "NuGetNPMPackagesExplanation": "Distributed as NuGet & NPM packages. Easy to install and upgrade.",
+ "ExtensibleReplaceable": "Extensible/Replaceable",
+ "ExtensibleReplaceableExplanation": "All services & modules are designed extensibility in mind. You can replace services, pages, styles and components.",
+ "CrossCuttingConcernsExplanation2": "Keep your codebase smaller so you can maintain focus on the code that’s specific to your business.",
+ "CrossCuttingConcernsExplanation3": "Don’t spend time implementing common application requirements on multiple projects.",
+ "AuthenticationAuthorization": "Authentication & Authorization",
+ "ExceptionHandling": "Exception Handling",
+ "Validation": "Validation",
+ "DatabaseConnection": "Database Connection",
+ "TransactionManagement": "Transaction management",
+ "AuditLogging": "Audit Logging",
+ "Caching": "Caching",
+ "Multitenancy": "Multitenancy",
+ "DataFiltering": "Data filtering",
+ "ConventionOverConfiguration": "Convention Over Configuration",
+ "ConventionOverConfigurationExplanation": "ABP implements common application conventions by default with a minimal or zero configuration.",
+ "ConventionOverConfigurationExplanationList1": "Auto registers known services to dependency injection.",
+ "ConventionOverConfigurationExplanationList2": "Exposes application services as HTTP APIs by naming conventions.",
+ "ConventionOverConfigurationExplanationList3": "Creates dynamic HTTP client proxies for C# and JavaScript.",
+ "ConventionOverConfigurationExplanationList4": "Provides default repositories for your entities.",
+ "ConventionOverConfigurationExplanationList5": "Manages Unit of Work per web request or application service method.",
+ "ConventionOverConfigurationExplanationList6": "Publishes create, update & delete events for your entities.",
+ "BaseClasses": "Base Classes",
+ "BaseClassesExplanation": "Pre-built base classes for common application patterns.",
+ "DeveloperFocusedExplanation": "ABP is for developers.",
+ "DeveloperFocusedExplanationCont": "It aims to simplify your daily software development while not restricting you from writing low level code.",
+ "SeeAllFeatures": "See All Features",
+ "CLI_CommandLineInterface": "CLI (Command Line Interface)",
+ "CLI_CommandLineInterfaceExplanation": "Includes a CLI to help you automate the creation of new projects and the addition of new modules.",
+ "StartupTemplates": "Startup Templates",
+ "StartupTemplatesExplanation": "Various startup templates provide a fully configured solution to jump start your development.",
+ "BasedOnFamiliarTools": "Based on Familiar Tools",
+ "BasedOnFamiliarToolsExplanation": "Built and integrated with popular tools you already know. Low learning curve, easy adaptation, comfortable development.",
+ "ORMIndependent": "ORM Independent",
+ "ORMIndependentExplanation": "The core framework is ORM/database independent and can work with any data source. Entity Framework Core and MongoDB providers are already available.",
+ "Features": "Explore the ABP Framework Features",
+ "ABPCLI": "ABP CLI",
+ "Modularity": "Modularity",
+ "BootstrapTagHelpers": "Bootstrap Tag Helpers",
+ "DynamicForms": "Dynamic Forms",
+ "BundlingMinification": "Bundling & Minification",
+ "BackgroundJobs": "Background Jobs",
+ "BackgroundJobsExplanation": "Define simple classes to execute jobs in the background as queued. Use the built-in job manager or integrate your own. Hangfire & RabbitMQ integrations are already available.",
+ "DDDInfrastructure": "DDD Infrastructure",
+ "DomainDrivenDesignInfrastructure": "Domain Driven Design Infrastructure",
+ "AutoRESTAPIs": "Auto REST APIs",
+ "DynamicClientProxies": "Dynamic Client Proxies",
+ "DistributedEventBus": "Distributed Event Bus",
+ "DistributedEventBusWithRabbitMQIntegration": "Distributed Event Bus with RabbitMQ Integration",
+ "TestInfrastructure": "Test Infrastructure",
+ "AuditLoggingEntityHistories": "Audit Logging & Entity Histories",
+ "ObjectToObjectMapping": "Object to Object Mapping",
+ "ObjectToObjectMappingExplanation": "Object to object mapping abstraction with AutoMapper integration.",
+ "EmailSMSAbstractions": "Email & SMS Abstractions",
+ "EmailSMSAbstractionsWithTemplatingSupport": "Email & SMS Abstractions with Templating Support",
+ "Localization": "Localization",
+ "SettingManagement": "Setting Management",
+ "ExtensionMethods": "Extension Methods",
+ "ExtensionMethodsHelpers": "Extension Methods & Helpers",
+ "AspectOrientedProgramming": "Aspect Oriented Programming",
+ "DependencyInjection": "Dependency Injection",
+ "DependencyInjectionByConventions": "Dependency Injection by Conventions",
+ "ABPCLIExplanation": "The ABP CLI (Command Line Interface) is a command line tool to perform common operations for ABP based solutions.",
+ "ModularityExplanation": "ABP provides a complete infrastructure to build your own application modules those may have entities, services, database integration, APIs, UI components and so on.",
+ "MultiTenancyExplanation": "ABP framework not only supports to develop multi-tenant applications, but also makes your code mostly unaware of the multi-tenancy.",
+ "MultiTenancyExplanation2": "Can automatically determine the current Tenant and isolate each Tenant's data from each other.",
+ "MultiTenancyExplanation3": "Supports single database, database per tenant and hybrid approaches.",
+ "MultiTenancyExplanation4": "You focus on your business code and let the framework to handle multi-tenancy on behalf of you.",
+ "BootstrapTagHelpersExplanation": "Instead of manually writing the repeating details of bootstrap components, use ABP's tag helpers to simplify and take advantage of intellisense. You can use Bootstrap whenever you need it.",
+ "DynamicFormsExplanation": "Dynamic form & input tag helpers can create the complete form from a C# class as the model.",
+ "AuthenticationAuthorizationExplanation": "Rich authentication & authorization options integrated to ASP.NET Core Identity & IdentityServer4. Provides an extensible & detailed permission system.",
+ "CrossCuttingConcernsExplanation": "Don't repeat yourself when implementing common features. Instead, focus on your business logic and let ABP automate by convention.",
+ "DatabaseConnectionTransactionManagement": "Database Connection & Transaction Management",
+ "CorrelationIdTracking": "Correlation-Id Tracking",
+ "BundlingMinificationExplanation": "ABP offers a simple, dynamic, powerful, modular and built-in bundling & minification system.",
+ "VirtualFileSystemnExplanation": "The Virtual File System makes it possible to manage files those do not physically exist on the file system (disk). It's mainly used to embed (js, css, image, cshtml...) files into assemblies and use them like physical files on runtime.",
+ "ThemingExplanation": "Theming system allows to develop your application & modules theme independent by defining a set of common base libraries and layouts, based on the latest Bootstrap framework.",
+ "DomainDrivenDesignInfrastructureExplanation": "A complete infrastructure to build layered applications based on the Domain Driven Design patterns & principles.",
+ "Specification": "Specification",
+ "Repository": "Repository",
+ "DomainService": "Domain Service",
+ "ValueObject": "Value Object",
+ "ApplicationService": "Application Service",
+ "DataTransferObject": "Data Transfer Object",
+ "AggregateRootEntity": "Aggregate Root, Entity",
+ "AutoRESTAPIsExplanation": "ABP can automagically configure your application services as API Controllers by convention.",
+ "DynamicClientProxiesExplanation": "Easily consume your APIs from JavaScript and C# clients.",
+ "DistributedEventBusWithRabbitMQIntegrationExplanation": "Easily publish & consume distributed events using built-in Distributed Event Bus with RabbitMQ integration available.",
+ "TestInfrastructureExplanation": "The framework has been developed unit & integration testing in mind. Provides you base classes to make it easier. Startup templates come with pre-configured for testing.",
+ "AuditLoggingEntityHistoriesExplanation": "Built-in audit logging for business-critical applications. Request, service, method level audit logging and entity histories with property-level details.",
+ "EmailSMSAbstractionsWithTemplatingSupportExplanation": "IEmailSender and ISmsSender abstractions decouples your application logic from the infrastructure. Advanced email template system allows to create & localize email templates and easily use whenever needed.",
+ "LocalizationExplanation": "Localization system allows to create resources in plain JSON files and use them to localize your UI. It supports advanced scenarios like inheritance, extensions and JavaScript integration while it is fully compatible with AspNet Core's localization system.",
+ "SettingManagementExplanation": "Define settings for your application and get values on runtime based on the current configuration, tenant and user.",
+ "ExtensionMethodsHelpersExplanation": "Don't repeat yourself even for trivial code parts. Extensions & helpers for standard types makes your code much cleaner and easy to write.",
+ "AspectOrientedProgrammingExplanation": "Provides a comfortable infrastructure to create dynamic proxies and implement Aspect Oriented Programming. Intercept any class and execute your code before & after every method execution.",
+ "DependencyInjectionByConventionsExplanation": "No need to register your classes to dependency injection manually. Automatically registers common service types by convention. For other type of services, you can use interfaces and attributes to make it easier and in-place.",
+ "DataFilteringExplanation": "Define and use data filters those are automatically applied when you query entities from database. Soft Delete & Multi-Tenant filters are provided out of the box when you implement simple interfaces.",
+ "PublishEvents": "Publish Events",
+ "HandleEvents": "Handle Events",
+ "AndMore": "and more...",
+ "Code": "Code",
+ "Result": "Result",
+ "SeeTheDocumentForMoreInformation": "See the {0} document for more information",
+ "IndexPageHeroSection": "open sourceWeb Application Framework for asp.net core",
+ "UiFramework": "UI Framework",
+ "EmailAddress": "Email address",
+ "Mobile": "Mobile",
+ "ReactNative": "React Native",
+ "Strong": "Strong",
+ "Complete": "Complete",
+ "BasedLayeringModel": "Based Layering Model",
+ "Microservice": "Microservice",
+ "Compatible": "Compatible",
+ "MeeTTheABPCommunityInfo": "Our mission is to create an environment where developers can help each other with articles, tutorials, case studies, etc. and meet like-minded people.",
+ "JoinTheABPCommunityInfo": "Get involved with a vibrant community and become a contributor to the ABP Framework!",
+ "AllArticles": "All Articles",
+ "SubmitYourArticle": "Submit Your Article",
+ "DynamicClientProxyDocument": "See the dynamic client proxy documentations for JavaScript & C#.",
+ "EmailSMSAbstractionsDocument": "See the emailing and SMS sending documents for more information.",
+ "CreateProjectWizard": "This wizard creates a new project from the startup template which is properly configured to jump start to your project.",
+ "TieredOption": "Creates a tiered solution where Web and Http API layers are physically separated. If not checked, creates a layered solution which is less complex and suitable for most scenarios.",
+ "SeparateIdentityServerOption": "Separates server side into two applications: First one is for the identity server and the second one is for your server side HTTP API.",
+ "UseslatestPreVersion": "Uses latest pre-release version",
+ "ReadTheDocumentation": "ReadThe Documentation",
+ "Documentation": "Documentation",
+ "GettingStartedTutorial": "Getting Started Tutorial",
+ "ApplicationDevelopmentTutorial": "Application Development Tutorial",
+ "TheStartupTemplate": "The Startup Template",
+ "InstallABPCLIInfo": "ABP CLI is the fastest way to start a new solution with the ABP framework. Install the ABP CLI using a command line window:",
+ "DifferentLevelOfNamespaces": "You can use different level of namespaces; e.g. BookStore, Acme.BookStore or Acme.Retail.BookStore.",
+ "ABPCLIExamplesInfo": "new command creates a layered MVC application with Entity Framework Core as the database provider. However, it has additional options. Examples:",
+ "SeeCliDocumentForMoreInformation": "See the ABP CLI document for more options or select the \"Direct Download\" tab above.",
+ "Optional": "Optional",
+ "LocalFrameworkRef": "Keep local project reference for the framework packages.",
+ "BlobStoring": "BLOB Storing",
+ "BlobStoringExplanation": "BLOB Storing system provides an abstraction to work with BLOBs. ABP provides some pre-built storage provider integrations (Azure, AWS, File System, Database, etc.) that you can easily use in your applications.",
+ "TextTemplating": "Text Templating",
+ "TextTemplatingExplanation": "Text templating is used to dynamically render contents based on a template and a model (a data object). For example, you can use it to create dynamic email contents with a pre-built template.",
+ "MultipleUIOptions": "Multiple UI Options",
+ "MultipleDBOptions": "Multiple Database Providers",
+ "MultipleUIOptionsExplanation": "The core framework is designed as UI independent and can work with any type of UI system, while there are multiple pre-built and integrated options are provided out of the box.",
+ "MultipleDBOptionsExplanation": "The framework can work with any data source, while the following providers are officially developed and supported:",
+ "SelectLanguage": "Select language"
+ }
+}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json
index e1dd405851..bdc7364788 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json
@@ -192,6 +192,7 @@
"MultipleUIOptions": "Multiple UI Options",
"MultipleDBOptions": "Multiple Database Providers",
"MultipleUIOptionsExplanation": "The core framework is designed as UI independent and can work with any type of UI system, while there are multiple pre-built and integrated options are provided out of the box.",
- "MultipleDBOptionsExplanation": "The framework can work with any data source, while the following providers are officially developed and supported;"
+ "MultipleDBOptionsExplanation": "The framework can work with any data source, while the following providers are officially developed and supported;",
+ "SelectLanguage": "Select language"
}
}
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/es.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/es.json
index 3c36634f56..06d197d82e 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/es.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/es.json
@@ -184,6 +184,7 @@
"ABPCLIExamplesInfo": "nuevo comando crea una aplicación MVC por capas con Entity Framework Core como proveedor de base de datos. Sin embargo, tiene distintas opciones. Ejemplos:",
"SeeCliDocumentForMoreInformation": "Ver el documento ABP CLI para más opciones o selecciona la \"Direct Download\" pestaña de arriba.",
"Optional": "Opcional",
- "LocalFrameworkRef": "Mantén la referencia al proyecto local para los paquetes del framework."
+ "LocalFrameworkRef": "Mantén la referencia al proyecto local para los paquetes del framework.",
+ "SelectLanguage": "Vali keel"
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pt-BR.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pt-BR.json
index 34debb8ec8..3dfd773204 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pt-BR.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/pt-BR.json
@@ -154,6 +154,7 @@
"SeeTheDocumentForMoreInformation": "Consulte o {0} documento para obter mais informações",
"IndexPageHeroSection": "código abertoAplicativo da Web Framework para o ASP.NET Core",
"UiFramework": "UI Framework",
- "EmailAddress": "Endereço de email"
+ "EmailAddress": "Endereço de email",
+ "SelectLanguage": "Selecione o idioma"
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json
index 5f423e940b..ef4ecbdcac 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json
@@ -156,6 +156,7 @@
"UiFramework": "UI Framework",
"EmailAddress": "E-Posta Adresi",
"Mobile": "Mobil",
- "ReactNative": "React Native"
+ "ReactNative": "React Native",
+ "SelectLanguage": "Dil seçin"
}
}
\ No newline at end of file
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json
index 6e9d9bf0da..d01d847716 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json
@@ -191,6 +191,8 @@
"TextTemplatingExplanation": "文本模板是基于模板和模型(数据对象)使用动态渲染内容. 例如你可以使用预构建的模板来创建动态的电子邮件内容.",
"MultipleUIOptions": "多个UI选项",
"MultipleDBOptions": "多个数据库提供程序",
- "MultipleUIOptionsExplanation": "核心框架设计为独立与UI,可以和任何类型的UI系统一起使用. 同时提供了多个开箱即用的预构建集成选项."
+ "MultipleUIOptionsExplanation": "核心框架设计为独立与UI,可以和任何类型的UI系统一起使用. 同时提供了多个开箱即用的预构建集成选项.",
+ "MultipleDBOptionsExplanation": "该框架可以使用任何数据源,并且以下提供程序已得到正式开发和支持;",
+ "SelectLanguage": "选择语言"
}
-}
\ No newline at end of file
+}
diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hant.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hant.json
index 777c9f6bbd..37f6747ea0 100644
--- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hant.json
+++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hant.json
@@ -154,6 +154,7 @@
"SeeTheDocumentForMoreInformation": "查看{0} 文件獲得更多訊息",
"IndexPageHeroSection": "asp.net core的開源Web應用程式 框架 ",
"UiFramework": "UI框架",
- "EmailAddress": "電子信箱地址"
+ "EmailAddress": "電子信箱地址",
+ "SelectLanguage": "选择语言"
}
}
\ No newline at end of file
diff --git a/common.props b/common.props
index 480ccfc371..b16d6e2c85 100644
--- a/common.props
+++ b/common.props
@@ -1,7 +1,7 @@
latest
- 4.1.1
+ 4.2.0-rc.1$(NoWarn);CS1591;CS0436https://abp.io/assets/abp_nupkg.pnghttps://abp.io/
@@ -10,10 +10,8 @@
https://github.com/abpframework/abp/true
-
- true
- snupkg
-
+
+ $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb
diff --git a/docs/en/Background-Workers.md b/docs/en/Background-Workers.md
index ef800108e2..b12f1881fb 100644
--- a/docs/en/Background-Workers.md
+++ b/docs/en/Background-Workers.md
@@ -80,7 +80,7 @@ public class PassiveUserCheckerWorker : AsyncPeriodicBackgroundWorkerBase
## Register Background Worker
-After creating a background worker class, you should to add it to the `IBackgroundWorkerManager`. The most common place is the `OnApplicationInitialization` method of your module class:
+After creating a background worker class, you should add it to the `IBackgroundWorkerManager`. The most common place is the `OnApplicationInitialization` method of your module class:
````csharp
[DependsOn(typeof(AbpBackgroundWorkersModule))]
diff --git a/docs/en/Blob-Storing-Aliyun.md b/docs/en/Blob-Storing-Aliyun.md
index 62e57e58c7..6cdebb3acc 100644
--- a/docs/en/Blob-Storing-Aliyun.md
+++ b/docs/en/Blob-Storing-Aliyun.md
@@ -55,7 +55,7 @@ Configure(options =>
* **RoleSessionName** ([NotNull]string): Used to identify the temporary access credentials, it is recommended to use different application users to distinguish.
* **Policy** (string): Additional permission restrictions. See the [document](https://help.aliyun.com/document_detail/100680.html) for details.
* **DurationSeconds** (int): Validity period(s) of a temporary access certificate,minimum is 900 and the maximum is 3600.
-* **ContainerName** (string): You can specify the container name in Aliyun. If this is not specified, it uses the name of the BLOB container defined with the `BlogContainerName` attribute (see the [BLOB storing document](Blob-Storing.md)). Please note that Aliyun has some **rules for naming containers**. A container name must be a valid DNS name, conforming to the [following naming rules](https://help.aliyun.com/knowledge_detail/39668.html):
+* **ContainerName** (string): You can specify the container name in Aliyun. If this is not specified, it uses the name of the BLOB container defined with the `BlobContainerName` attribute (see the [BLOB storing document](Blob-Storing.md)). Please note that Aliyun has some **rules for naming containers**. A container name must be a valid DNS name, conforming to the [following naming rules](https://help.aliyun.com/knowledge_detail/39668.html):
* Container names must start or end with a letter or number, and can contain only letters, numbers, and the dash (-) character.
* Container names Must start and end with lowercase letters and numbers.
* Container names must be from **3** through **63** characters long.
diff --git a/docs/en/Blob-Storing-Aws.md b/docs/en/Blob-Storing-Aws.md
index cfee5c3f57..05e3caa183 100644
--- a/docs/en/Blob-Storing-Aws.md
+++ b/docs/en/Blob-Storing-Aws.md
@@ -60,7 +60,7 @@ Configure(options =>
* **Region** (string): The system name of the service.
* **Policy** (string): An IAM policy in JSON format that you want to use as an inline session policy.
* **DurationSeconds** (int): Validity period(s) of a temporary access certificate,minimum is 900 and the maximum is 3600. **note**: Using subaccounts operated OSS,if the value is 0.
-* **ContainerName** (string): You can specify the container name in Aws. If this is not specified, it uses the name of the BLOB container defined with the `BlogContainerName` attribute (see the [BLOB storing document](Blob-Storing.md)). Please note that Aws has some **rules for naming containers**. A container name must be a valid DNS name, conforming to the [following naming rules](https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html):
+* **ContainerName** (string): You can specify the container name in Aws. If this is not specified, it uses the name of the BLOB container defined with the `BlobContainerName` attribute (see the [BLOB storing document](Blob-Storing.md)). Please note that Aws has some **rules for naming containers**. A container name must be a valid DNS name, conforming to the [following naming rules](https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html):
* Bucket names must be between **3** and **63** characters long.
* Bucket names can consist only of **lowercase** letters, numbers, dots (.), and hyphens (-).
* Bucket names must begin and end with a letter or number.
diff --git a/docs/en/Blob-Storing-Azure.md b/docs/en/Blob-Storing-Azure.md
index 9d033013da..de6ed63152 100644
--- a/docs/en/Blob-Storing-Azure.md
+++ b/docs/en/Blob-Storing-Azure.md
@@ -40,7 +40,7 @@ Configure(options =>
### Options
* **ConnectionString** (string): A connection string includes the authorization information required for your application to access data in an Azure Storage account at runtime using Shared Key authorization. Please refer to Azure documentation: https://docs.microsoft.com/en-us/azure/storage/common/storage-configure-connection-string
-* **ContainerName** (string): You can specify the container name in azure. If this is not specified, it uses the name of the BLOB container defined with the `BlogContainerName` attribute (see the [BLOB storing document](Blob-Storing.md)). Please note that Azure has some **rules for naming containers**. A container name must be a valid DNS name, conforming to the [following naming rules](https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata#container-names):
+* **ContainerName** (string): You can specify the container name in azure. If this is not specified, it uses the name of the BLOB container defined with the `BlobContainerName` attribute (see the [BLOB storing document](Blob-Storing.md)). Please note that Azure has some **rules for naming containers**. A container name must be a valid DNS name, conforming to the [following naming rules](https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata#container-names):
* Container names must start or end with a letter or number, and can contain only letters, numbers, and the dash (-) character.
* Every dash (-) character must be immediately preceded and followed by a letter or number; consecutive dashes are not permitted in container names.
* All letters in a container name must be **lowercase**.
diff --git a/docs/en/Blob-Storing-Minio.md b/docs/en/Blob-Storing-Minio.md
index 505c6721b0..6e0d7626b7 100644
--- a/docs/en/Blob-Storing-Minio.md
+++ b/docs/en/Blob-Storing-Minio.md
@@ -43,7 +43,7 @@ Configure(options =>
* **EndPoint** (string): URL to object storage service. Please refer to MinIO Client SDK for .NET: https://docs.min.io/docs/dotnet-client-quickstart-guide.html
* **AccessKey** (string): Access key is the user ID that uniquely identifies your account.
* **SecretKey** (string): Secret key is the password to your account.
-* **BucketName** (string): You can specify the bucket name in MinIO. If this is not specified, it uses the name of the BLOB container defined with the `BlogContainerName` attribute (see the [BLOB storing document](Blob-Storing.md)).MinIO is the defacto standard for S3 compatibility, So MinIO has some **rules for naming bucket**. The [following rules](https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html) apply for naming MinIO buckets:
+* **BucketName** (string): You can specify the bucket name in MinIO. If this is not specified, it uses the name of the BLOB container defined with the `BlobContainerName` attribute (see the [BLOB storing document](Blob-Storing.md)).MinIO is the defacto standard for S3 compatibility, So MinIO has some **rules for naming bucket**. The [following rules](https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html) apply for naming MinIO buckets:
* Bucket names must be between **3** and **63** characters long.
* Bucket names can consist only of **lowercase** letters, numbers, dots (.), and hyphens (-).
* Bucket names must begin and end with a letter or number.
diff --git a/docs/en/Blob-Storing.md b/docs/en/Blob-Storing.md
index b7bd31dade..82c2a861ab 100644
--- a/docs/en/Blob-Storing.md
+++ b/docs/en/Blob-Storing.md
@@ -21,7 +21,7 @@ The ABP Framework has already the following storage provider implementations:
* [Azure](Blob-Storing-Azure.md): Stores BLOBs on the [Azure BLOB storage](https://azure.microsoft.com/en-us/services/storage/blobs/).
* [Aliyun](Blob-Storing-Aliyun.md): Stores BLOBs on the [Aliyun Storage Service](https://help.aliyun.com/product/31815.html).
* [Minio](Blob-Storing-Minio.md): Stores BLOBs on the [MinIO Object storage](https://min.io/).
-* [Aws](Blob-Storing-Aws.md): Stores BLOBs on the[Amazon Simple Storage Service](https://aws.amazon.com/s3/).
+* [Aws](Blob-Storing-Aws.md): Stores BLOBs on the [Amazon Simple Storage Service](https://aws.amazon.com/s3/).
More providers will be implemented by the time. You can [request](https://github.com/abpframework/abp/issues/new) it for your favorite provider or [create it yourself](Blob-Storing-Custom-Provider.md) and [contribute](Contribution/Index.md) to the ABP Framework.
diff --git a/docs/en/Blog-Posts/2021-01-07 v4_1_Release_Stable/POST.md b/docs/en/Blog-Posts/2021-01-07 v4_1_Release_Stable/POST.md
new file mode 100644
index 0000000000..926f1193d4
--- /dev/null
+++ b/docs/en/Blog-Posts/2021-01-07 v4_1_Release_Stable/POST.md
@@ -0,0 +1,51 @@
+# ABP.IO Platform 4.1 Final Has Been Released!
+
+[ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) 4.1 versions have been released today.
+
+## What's New With 4.1?
+
+Since all the new features are already explained in details with the [4.1 RC Announcement Post](https://blog.abp.io/abp/ABP.IO-Platform-v4.1-RC-Has-Been-Released), I will not repeat all the details again. See the [RC Blog Post](https://blog.abp.io/abp/ABP.IO-Platform-v4.1-RC-Has-Been-Released) for all the features and enhancements.
+
+## Creating New Solutions
+
+You can create a new solution with the ABP Framework version 4.1 by either using the `abp new` command or using the **direct download** tab on the [get started page](https://abp.io/get-started).
+
+> See the [getting started document](https://docs.abp.io/en/abp/latest/Getting-Started) for details.
+
+## How to Upgrade an Existing Solution
+
+### Install/Update the ABP CLI
+
+First of all, install the ABP CLI or upgrade to the latest version.
+
+If you haven't installed yet:
+
+```bash
+dotnet tool install -g Volo.Abp.Cli
+```
+
+To update an existing installation:
+
+```bash
+dotnet tool update -g Volo.Abp.Cli
+```
+
+### ABP UPDATE Command
+
+[ABP CLI](https://docs.abp.io/en/abp/latest/CLI) provides a handy command to update all the ABP related NuGet and NPM packages in your solution with a single command:
+
+```bash
+abp update
+```
+
+Run this command in the root folder of your solution.
+
+## ABP Community
+
+We started to get more contributions by the community for the [ABP Community](https://community.abp.io/) contents. Thank you all!
+
+We will be adding **Video Content** sharing system in a short time. We are planning to create short video contents, especially to explore the new features in every release. Again, we will be waiting video contributions by the community :)
+
+## About the Next Versions
+
+Planned preview date for the version **4.2 is January 14, 2021**. See the [Road Map](https://docs.abp.io/en/abp/latest/Road-Map) document and [GitHub Milestones](https://github.com/abpframework/abp/milestones) to learn what's planned for the next versions. We are trying to be clear about the coming features and the next release dates.
\ No newline at end of file
diff --git a/docs/en/CLI.md b/docs/en/CLI.md
index 07cfe5a47b..fc76aa997b 100644
--- a/docs/en/CLI.md
+++ b/docs/en/CLI.md
@@ -105,7 +105,13 @@ abp new Acme.BookStore
* `--preview`: Use latest preview version.
* `--template-source` or `-ts`: Specifies a custom template source to use to build the project. Local and network sources can be used(Like `D:\local-template` or `https://.../my-template-file.zip`).
* `--create-solution-folder` or `-csf`: Specifies if the project will be in a new folder in the output folder or directly the output folder.
-* `--connection-string` or `-cs`: Overwrites the default connection strings in all `appsettings.json` files. The default connection string is `Server=localhost;Database=MyProjectName;Trusted_Connection=True;MultipleActiveResultSets=true` for EF Core and it is configured to use the SQL Server. If you want to use the EF Core, but need to change the DBMS, you can change it as [described here](Entity-Framework-Core-Other-DBMS.md) (after creating the solution).
+* `--connection-string` or `-cs`: Overwrites the default connection strings in all `appsettings.json` files. The default connection string is `Server=localhost;Database=MyProjectName;Trusted_Connection=True` for EF Core and it is configured to use the SQL Server. If you want to use the EF Core, but need to change the DBMS, you can change it as [described here](Entity-Framework-Core-Other-DBMS.md) (after creating the solution).
+* `--database-management-system` or `-dbms`: Sets the database management system. Default is **SQL Server**. Supported DBMS's:
+ * `SqlServer`
+ * `MySQL`
+ * `SQLite`
+ * `Oracle-Devart`
+ * `PostgreSQL`
* `--local-framework-ref --abp-path`: Uses local projects references to the ABP framework instead of using the NuGet packages. This can be useful if you download the ABP Framework source code and have a local reference to the framework from your application.
* `--no-random-port`: Uses template's default ports.
diff --git a/docs/en/Community-Articles/2020-08-12-Patch-Chrome-Login-Issue-For-IdentityServer4/POST.md b/docs/en/Community-Articles/2020-08-12-Patch-Chrome-Login-Issue-For-IdentityServer4/POST.md
index 718a949f3a..d0d2b1ccee 100644
--- a/docs/en/Community-Articles/2020-08-12-Patch-Chrome-Login-Issue-For-IdentityServer4/POST.md
+++ b/docs/en/Community-Articles/2020-08-12-Patch-Chrome-Login-Issue-For-IdentityServer4/POST.md
@@ -11,157 +11,75 @@ When you use HTTP on your Identity Server 4 enabled website, users may not login
Create the below extension in your ***.Web** project.
```csharp
-using System;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.DependencyInjection;
namespace Microsoft.Extensions.DependencyInjection
{
public static class SameSiteCookiesServiceCollectionExtensions
{
- ///
- /// -1 defines the unspecified value, which tells ASPNET Core to NOT
- /// send the SameSite attribute. With ASPNET Core 3.1 the
- /// enum will have a definition for
- /// Unspecified.
- ///
- private const SameSiteMode Unspecified = (SameSiteMode)(-1);
-
- ///
- /// Configures a cookie policy to properly set the SameSite attribute
- /// for Browsers that handle unknown values as Strict. Ensure that you
- /// add the
- /// into the pipeline before sending any cookies!
- ///
- ///
- /// Minimum ASPNET Core Version required for this code:
- /// - 2.1.14
- /// - 2.2.8
- /// - 3.0.1
- /// - 3.1.0-preview1
- /// Starting with version 80 of Chrome (to be released in February 2020)
- /// cookies with NO SameSite attribute are treated as SameSite=Lax.
- /// In order to always get the cookies send they need to be set to
- /// SameSite=None. But since the current standard only defines Lax and
- /// Strict as valid values there are some browsers that treat invalid
- /// values as SameSite=Strict. We therefore need to check the browser
- /// and either send SameSite=None or prevent the sending of SameSite=None.
- /// Relevant links:
- /// - https://tools.ietf.org/html/draft-west-first-party-cookies-07#section-4.1
- /// - https://tools.ietf.org/html/draft-west-cookie-incrementalism-00
- /// - https://www.chromium.org/updates/same-site
- /// - https://devblogs.microsoft.com/aspnet/upcoming-samesite-cookie-changes-in-asp-net-and-asp-net-core/
- /// - https://bugs.webkit.org/show_bug.cgi?id=198181
- ///
- /// The service collection to register into.
- /// The modified .
- public static IServiceCollection ConfigureNonBreakingSameSiteCookies(this IServiceCollection services)
+ public static IServiceCollection AddSameSiteCookiePolicy(this IServiceCollection services)
{
services.Configure(options =>
{
- options.MinimumSameSitePolicy = Unspecified;
- options.OnAppendCookie = cookieContext =>
- CheckSameSite(cookieContext.Context, cookieContext.CookieOptions);
- options.OnDeleteCookie = cookieContext =>
- CheckSameSite(cookieContext.Context, cookieContext.CookieOptions);
+ options.MinimumSameSitePolicy = SameSiteMode.Unspecified;
+ options.OnAppendCookie = cookieContext =>
+ CheckSameSite(cookieContext.Context, cookieContext.CookieOptions);
+ options.OnDeleteCookie = cookieContext =>
+ CheckSameSite(cookieContext.Context, cookieContext.CookieOptions);
});
return services;
}
-
+
private static void CheckSameSite(HttpContext httpContext, CookieOptions options)
{
if (options.SameSite == SameSiteMode.None)
{
var userAgent = httpContext.Request.Headers["User-Agent"].ToString();
-
- if (DisallowsSameSiteNone(userAgent))
+ if (!httpContext.Request.IsHttps || DisallowsSameSiteNone(userAgent))
{
- options.SameSite = Unspecified;
+ // For .NET Core < 3.1 set SameSite = (SameSiteMode)(-1)
+ options.SameSite = SameSiteMode.Unspecified;
}
}
}
- ///
- /// Checks if the UserAgent is known to interpret an unknown value as Strict.
- /// For those the property should be
- /// set to .
- ///
- ///
- /// This code is taken from Microsoft:
- /// https://devblogs.microsoft.com/aspnet/upcoming-samesite-cookie-changes-in-asp-net-and-asp-net-core/
- ///
- /// The user agent string to check.
- /// Whether the specified user agent (browser) accepts SameSite=None or not.
private static bool DisallowsSameSiteNone(string userAgent)
{
// Cover all iOS based browsers here. This includes:
- // - Safari on iOS 12 for iPhone, iPod Touch, iPad
- // - WkWebview on iOS 12 for iPhone, iPod Touch, iPad
- // - Chrome on iOS 12 for iPhone, iPod Touch, iPad
- // All of which are broken by SameSite=None, because they use the
- // iOS networking stack.
- // Notes from Thinktecture:
- // Regarding https://caniuse.com/#search=samesite iOS versions lower
- // than 12 are not supporting SameSite at all. Starting with version 13
- // unknown values are NOT treated as strict anymore. Therefore we only
- // need to check version 12.
- if (userAgent.Contains("CPU iPhone OS 12")
- || userAgent.Contains("iPad; CPU OS 12"))
+ // - Safari on iOS 12 for iPhone, iPod Touch, iPad
+ // - WkWebview on iOS 12 for iPhone, iPod Touch, iPad
+ // - Chrome on iOS 12 for iPhone, iPod Touch, iPad
+ // All of which are broken by SameSite=None, because they use the iOS networking stack
+ if (userAgent.Contains("CPU iPhone OS 12") || userAgent.Contains("iPad; CPU OS 12"))
{
return true;
}
- // Cover Mac OS X based browsers that use the Mac OS networking stack.
- // This includes:
- // - Safari on Mac OS X.
+ // Cover Mac OS X based browsers that use the Mac OS networking stack. This includes:
+ // - Safari on Mac OS X.
// This does not include:
- // - Chrome on Mac OS X
- // because they do not use the Mac OS networking stack.
- // Notes from Thinktecture:
- // Regarding https://caniuse.com/#search=samesite MacOS X versions lower
- // than 10.14 are not supporting SameSite at all. Starting with version
- // 10.15 unknown values are NOT treated as strict anymore. Therefore we
- // only need to check version 10.14.
- if (userAgent.Contains("Safari")
- && userAgent.Contains("Macintosh; Intel Mac OS X 10_14")
- && userAgent.Contains("Version/"))
+ // - Chrome on Mac OS X
+ // Because they do not use the Mac OS networking stack.
+ if (userAgent.Contains("Macintosh; Intel Mac OS X 10_14") &&
+ userAgent.Contains("Version/") && userAgent.Contains("Safari"))
{
return true;
}
- // Cover Chrome 50-69, because some versions are broken by SameSite=None
+ // Cover Chrome 50-69, because some versions are broken by SameSite=None,
// and none in this range require it.
- // Note: this covers some pre-Chromium Edge versions,
+ // Note: this covers some pre-Chromium Edge versions,
// but pre-Chromium Edge does not require SameSite=None.
- // Notes from Thinktecture:
- // We can not validate this assumption, but we trust Microsofts
- // evaluation. And overall not sending a SameSite value equals to the same
- // behavior as SameSite=None for these old versions anyways.
if (userAgent.Contains("Chrome/5") || userAgent.Contains("Chrome/6"))
{
return true;
}
-
- if (GetChromeVersion(userAgent) >= 80)
- {
- return true;
- }
return false;
}
-
- private static int GetChromeVersion(string userAgent)
- {
- try
- {
- return Convert.ToInt32(userAgent.Split("Chrome/")[1].Split('.')[0]);
- }
- catch (Exception)
- {
- return 0;
- }
- }
}
}
```
@@ -173,7 +91,7 @@ Assume that your project name is *Acme.BookStore*. Then open `AcmeBookStoreWebMo
Add the following line to `ConfigureServices()` method.
```csharp
- context.Services.ConfigureNonBreakingSameSiteCookies();
+ context.Services.AddSameSiteCookiePolicy(); // cookie policy to deal with temporary browser incompatibilities
```
### Step-3
@@ -195,18 +113,14 @@ public override void OnApplicationInitialization(ApplicationInitializationContex
app.UseHsts();
}
- app.UseCookiePolicy(); //<--- added this --->
+ app.UseCookiePolicy(); // added this, Before UseAuthentication or anything else that writes cookies.
//....
}
```
-
-
It's all! You are ready to go!
-
-
---
-Referenced from https://www.thinktecture.com/en/identity/samesite/prepare-your-identityserver/
+Referenced from https://devblogs.microsoft.com/aspnet/upcoming-samesite-cookie-changes-in-asp-net-and-asp-net-core/
diff --git a/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-Telerik-Blazor-Component/POST.md b/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-Telerik-Blazor-Component/POST.md
index 4bdebb6234..971eb88f97 100644
--- a/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-Telerik-Blazor-Component/POST.md
+++ b/docs/en/Community-Articles/2020-12-10-How-to-Integrate-the-Telerik-Blazor-Component/POST.md
@@ -52,7 +52,10 @@ abp new TelerikComponents --ui blazor --database-provider ef
```html
...
-
+
+
+
+
diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/index.ts b/npm/ng-packs/packages/theme-basic/src/lib/components/index.ts
index 6c4de6cf21..3a379e812b 100644
--- a/npm/ng-packs/packages/theme-basic/src/lib/components/index.ts
+++ b/npm/ng-packs/packages/theme-basic/src/lib/components/index.ts
@@ -7,3 +7,4 @@ export * from './nav-items/languages.component';
export * from './nav-items/nav-items.component';
export * from './routes/routes.component';
export * from './validation-error/validation-error.component';
+export * from './page-alert-container/page-alert-container.component';
diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/page-alert-container/page-alert-container.component.html b/npm/ng-packs/packages/theme-basic/src/lib/components/page-alert-container/page-alert-container.component.html
new file mode 100644
index 0000000000..6f2c62bf11
--- /dev/null
+++ b/npm/ng-packs/packages/theme-basic/src/lib/components/page-alert-container/page-alert-container.component.html
@@ -0,0 +1,22 @@
+
+