mirror of https://github.com/abpframework/abp
Merge branch 'rel-4.2' of https://github.com/abpframework/abp into auto-merge/rel-4-1/157
commit
6e21421fae
@ -1,24 +1,24 @@
|
||||
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
|
||||
git reset --hard rel-4.1
|
||||
git fetch origin rel-4.2:rel-4.2
|
||||
git reset --hard rel-4.2
|
||||
- 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 }}
|
||||
|
||||
@ -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"
|
||||
}
|
||||
}
|
||||
@ -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"
|
||||
}
|
||||
}
|
||||
@ -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"
|
||||
}
|
||||
}
|
||||
@ -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"
|
||||
}
|
||||
}
|
||||
@ -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 <a href=\"https://commercial.abp.io/Privacy\">Privacy Policy</a>.",
|
||||
"ArticleRequestMessageTitle": "<a href=\"https://github.com/abpframework/abp/issues/new\">Open an issue</a> 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"
|
||||
}
|
||||
}
|
||||
@ -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.
|
||||
@ -0,0 +1,101 @@
|
||||
# ABP version 4.2 Migration Guide
|
||||
|
||||
This version has no breaking changes but there is an important change on the repositories that should be applied for your application for an important performance and scalability gain.
|
||||
|
||||
## IRepository.GetQueryableAsync
|
||||
|
||||
`IRepository` interface inherits `IQueryable`, so you can directly use the standard LINQ extension methods, like `Where`, `OrderBy`, `First`, `Sum`... etc.
|
||||
|
||||
**Example: Using LINQ directly over the repository object**
|
||||
|
||||
````csharp
|
||||
public class BookAppService : ApplicationService, IBookAppService
|
||||
{
|
||||
private readonly IRepository<Book, Guid> _bookRepository;
|
||||
|
||||
public BookAppService(IRepository<Book, Guid> bookRepository)
|
||||
{
|
||||
_bookRepository = bookRepository;
|
||||
}
|
||||
|
||||
public async Task DoItInOldWayAsync()
|
||||
{
|
||||
//Apply any standard LINQ extension method
|
||||
var query = _bookRepository
|
||||
.Where(x => x.Price > 10)
|
||||
.OrderBy(x => x.Name);
|
||||
|
||||
//Execute the query asynchronously
|
||||
var books = await AsyncExecuter.ToListAsync(query);
|
||||
}
|
||||
}
|
||||
````
|
||||
|
||||
*See [the documentation](https://docs.abp.io/en/abp/4.2/Repositories#iqueryable-async-operations) if you wonder what is the `AsyncExecuter`.*
|
||||
|
||||
**Beginning from the version 4.2, the recommended way is using `IRepository.GetQueryableAsync()` to obtain an `IQueryable`, then use the LINQ extension methods over it.**
|
||||
|
||||
**Example: Using the new GetQueryableAsync method**
|
||||
|
||||
````csharp
|
||||
public async Task DoItInNewWayAsync()
|
||||
{
|
||||
//Use GetQueryableAsync to obtain the IQueryable<Book> first
|
||||
var queryable = await _bookRepository.GetQueryableAsync();
|
||||
|
||||
//Then apply any standard LINQ extension method
|
||||
var query = queryable
|
||||
.Where(x => x.Price > 10)
|
||||
.OrderBy(x => x.Name);
|
||||
|
||||
//Finally, execute the query asynchronously
|
||||
var books = await AsyncExecuter.ToListAsync(query);
|
||||
}
|
||||
````
|
||||
|
||||
ABP may start a database transaction when you get an `IQueryable` (If current [Unit Of Work](https://docs.abp.io/en/abp/latest/Unit-Of-Work) is transactional). In this new way, it is possible to **start the database transaction in an asynchronous way**. Previously, we could not get the advantage of asynchronous while starting the transactions.
|
||||
|
||||
> **The new way has a significant performance and scalability gain. The old usage (directly using LINQ over the repositories) will be removed in the next major version (5.0).** You have a lot of time for the change, but we recommend to immediately take the action since the old usage has a big **scalability problem**.
|
||||
|
||||
### Actions to Take
|
||||
|
||||
* Use the repository's queryable feature as explained before.
|
||||
* If you've overridden `CreateFilteredQuery` in a class derived from `CrudAppService`, you should override the `CreateFilteredQueryAsync` instead and remove the `CreateFilteredQuery` in your class.
|
||||
* If you've overridden `WithDetails` in your custom repositories, remove it and override `WithDetailsAsync` instead.
|
||||
* If you've used `DbContext` or `DbSet` properties in your custom repositories, use `GetDbContextAsync()` and `GetDbSetAsync()` methods instead of them.
|
||||
|
||||
You can re-build your solution and check the `Obsolete` warnings to find some of the usages need to change.
|
||||
|
||||
#### About IRepository Async Extension Methods
|
||||
|
||||
Using IRepository Async Extension Methods has no such a problem. The examples below are pretty fine:
|
||||
|
||||
````csharp
|
||||
var countAll = await _personRepository
|
||||
.CountAsync();
|
||||
|
||||
var count = await _personRepository
|
||||
.CountAsync(x => x.Name.StartsWith("A"));
|
||||
|
||||
var book1984 = await _bookRepository
|
||||
.FirstOrDefaultAsync(x => x.Name == "John");
|
||||
````
|
||||
|
||||
See the [repository documentation](https://docs.abp.io/en/abp/4.2/Repositories#iqueryable-async-operations) to understand the relation between `IQueryable` and asynchronous operations.
|
||||
|
||||
## .NET Package Upgrades
|
||||
|
||||
ABP uses the latest 5.0.* .NET packages. If your application is using 5.0.0 packages, you may get an error on build. We recommend to depend on the .NET packages like `5.0.*` in the `.csproj` files to use the latest patch versions.
|
||||
|
||||
Example:
|
||||
|
||||
````xml
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.*" />
|
||||
````
|
||||
|
||||
## Blazorise Library Upgrade
|
||||
|
||||
If you are upgrading to 4.2, you also need also upgrade the following packages in your Blazor application;
|
||||
|
||||
* `Blazorise.Bootstrap` to `0.9.3-preview6`
|
||||
* `Blazorise.Icons.FontAwesome` to `0.9.3-preview6`
|
||||
@ -1,5 +1,6 @@
|
||||
# ABP Framework Migration Guides
|
||||
|
||||
* [3.3.x to 4.0 Migration Guide](Abp-4_0.md)
|
||||
* [2.9.x to 3.0 Migration Guide](../UI/Angular/Migration-Guide-v3.md)
|
||||
* [4.x to 4.2](Abp-4_2.md)
|
||||
* [3.3.x to 4.0](Abp-4_0.md)
|
||||
* [2.9.x to 3.0](../UI/Angular/Migration-Guide-v3.md)
|
||||
|
||||
|
||||
@ -0,0 +1,64 @@
|
||||
# Page Alerts
|
||||
|
||||
A page alert is useful for displaying an important message to the user. The ABP Framework provides an easy way to show the following alert to the user.
|
||||
|
||||

|
||||
|
||||
You can simply import `PageAlertService` from `@abp/ng.theme.shared` and utilize it as follows:
|
||||
|
||||
```js
|
||||
import { PageAlertService } from '@abp/ng.theme.shared';
|
||||
|
||||
@Component({
|
||||
// ...
|
||||
})
|
||||
export class MyComponent {
|
||||
constructor(private service: PageAlertService) {}
|
||||
|
||||
showWarning() {
|
||||
this.service.show({
|
||||
type: 'warning',
|
||||
message:
|
||||
'We will have a service interruption between 02:00 AM and 04:00 AM at October 23, 2023!',
|
||||
title: 'Service Interruption',
|
||||
});
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## `SHOW`
|
||||
|
||||
The method `show` accepts a single object that is type of `PageAlert`
|
||||
|
||||
```js
|
||||
export interface PageAlert {
|
||||
type: 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'light' | 'dark';
|
||||
message: string;
|
||||
title?: string;
|
||||
dismissible?: boolean;
|
||||
messageLocalizationParams?: string[];
|
||||
titleLocalizationParams?: string[];
|
||||
}
|
||||
```
|
||||
|
||||
* `type` (Required): Defines what type of alert will be shown
|
||||
* `message` (Required): The message who will be shown, also works with localization as well.
|
||||
* `title` (Optional): The title of the message. If it is not provided, the title will be hidden.
|
||||
* `dismissible` (Optional): Default is `true`. If enabled, a button on the top right corner will be shown to the users so that they can dismiss the message.
|
||||
* `messageLocalizationParams` and `titleLocalizationParams` (Optional): If the message and/or the title is a key for localization service and contains some parameters, these fields could be used to pass those parameters.
|
||||
|
||||
### An example with Localization
|
||||
|
||||
```typescript
|
||||
this.service.show({
|
||||
type: 'danger',
|
||||
message: 'AbpAccount::PagerInfo{0}{1}{2}',
|
||||
messageLocalizationParams: ['10', '20', '30'],
|
||||
title: 'AbpAccount::EntityNotFoundErrorMessage',
|
||||
titleLocalizationParams: ['Test', 'id123'],
|
||||
});
|
||||
```
|
||||
|
||||

|
||||
|
||||
|
||||
|
After Width: | Height: | Size: 75 KiB |
|
After Width: | Height: | Size: 64 KiB |
@ -0,0 +1,57 @@
|
||||
# Blazor UI: Page Progress
|
||||
|
||||
Page Progress is used to show a progress bar indicator on top of the page and to show to the user that currently a long running process is in the work.
|
||||
|
||||
By default you don't need to do anything to show the progress indicator, as all the work is done automatically by the ABP Framework internals. This means that all calls to the ABP backend (through your HTTP API) will activate page progress and show the loading indicator.
|
||||
|
||||
This doesn't mean that you don't have the control over it. On the contrary, if you want to show progress for your own processes, it is really easy to do. All you have to do is to use inject and use the `IUiPageProgressService`.
|
||||
|
||||
## Example
|
||||
|
||||
First, inject the `IUiPageProgressService` into your page/component.
|
||||
|
||||
```cs
|
||||
@inject IUiPageProgressService pageProgressService
|
||||
```
|
||||
|
||||
Next, invoke the `Go` method in `IUiPageProgressService`. It's that simple:
|
||||
|
||||
```cs
|
||||
Task OnClick()
|
||||
{
|
||||
return pageProgressService.Go(null);
|
||||
}
|
||||
```
|
||||
|
||||
The previous example will show the progress with a default settings. If, for example you want to change the progress color you can override it by setting the options through the `Go` method.
|
||||
|
||||
```cs
|
||||
Task OnClick()
|
||||
{
|
||||
return pageProgressService.Go(null, options =>
|
||||
{
|
||||
options.Type = UiPageProgressType.Warning;
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
## Breakdown
|
||||
|
||||
The first parameter of the `Go` needs a little explanation. In the previous example we have set it to `null` which means, once called it will show an _indeterminate_ indicator and will cycle the loading animation indefinitely, until we hide the progress. You also have the option of defining the actual percentage of the progress and the code is the same, just instead of sending it the `null` you will send it a number between `0` and `100`.
|
||||
|
||||
```cs
|
||||
pageProgressService.Go(25)
|
||||
```
|
||||
|
||||
### Valid values
|
||||
|
||||
1. `null` - show _indeterminate_ indicator
|
||||
2. `>= 0` and `<= 100` - show the regular _percentage_ progress
|
||||
|
||||
### Hiding progress
|
||||
|
||||
To hide the progress just set the actual values to something other then the _Valid value_.
|
||||
|
||||
```cs
|
||||
pageProgressService.Go(-1)
|
||||
```
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue