@ -1,24 +1,24 @@ |
|||
name: Merge branch rel-5.0 with rel-4.4 |
|||
name: Merge branch dev with rel-5.0 |
|||
on: |
|||
push: |
|||
branches: |
|||
- rel-4.4 |
|||
- rel-5.0 |
|||
jobs: |
|||
merge-rel-5-0-with-rel-4-4: |
|||
merge-dev-with-rel-5-0: |
|||
runs-on: ubuntu-latest |
|||
steps: |
|||
- uses: actions/checkout@v2 |
|||
with: |
|||
ref: rel-5.0 |
|||
ref: dev |
|||
- name: Reset promotion branch |
|||
run: | |
|||
git fetch origin rel-4.4:rel-4.4 |
|||
git reset --hard rel-4.4 |
|||
git fetch origin rel-5.0:rel-5.0 |
|||
git reset --hard rel-5.0 |
|||
- name: Create Pull Request |
|||
uses: peter-evans/create-pull-request@v3 |
|||
with: |
|||
branch: auto-merge/rel-4-4/${{github.run_number}} |
|||
title: Merge branch rel-5.0 with rel-4.4 |
|||
body: This PR generated automatically to merge rel-5.0 with rel-4.4. Please review the changed files before merging to prevent any errors that may occur. |
|||
branch: auto-merge/rel-5-0/${{github.run_number}} |
|||
title: Merge branch dev with rel-5.0 |
|||
body: This PR generated automatically to merge dev with rel-5.0. Please review the changed files before merging to prevent any errors that may occur. |
|||
reviewers: ${{github.actor}} |
|||
token: ${{ github.token }} |
|||
|
|||
@ -0,0 +1,12 @@ |
|||
name: cancel-workflow |
|||
on: [push] |
|||
jobs: |
|||
cancel: |
|||
name: 'Cancel Previous Runs' |
|||
runs-on: ubuntu-latest |
|||
timeout-minutes: 3 |
|||
steps: |
|||
- uses: styfle/cancel-workflow-action@0.6.0 |
|||
with: |
|||
workflow_id: 10629,1299107,2792859,8268314 |
|||
access_token: ${{ github.token }} |
|||
@ -0,0 +1,14 @@ |
|||
{ |
|||
"culture": "ro-RO", |
|||
"texts": { |
|||
"Account": "Cont ABP - Autentificare & Înregistrare | ABP.IO", |
|||
"Welcome": "Bun venit", |
|||
"UseOneOfTheFollowingLinksToContinue": "Folosiţi unul din următoarele linkuri pentru a continua", |
|||
"FrameworkHomePage": "Pagina principală a frameworkului", |
|||
"FrameworkDocumentation": "Documentaţia frameworkului", |
|||
"OfficialBlog": "Blogul oficial", |
|||
"CommercialHomePage": "Pagina principală comercială", |
|||
"CommercialSupportWebSite": "Site-ul web al suportului comercial", |
|||
"CommunityWebSite": "Site-ul web al comunităţii ABP" |
|||
} |
|||
} |
|||
@ -0,0 +1,308 @@ |
|||
{ |
|||
"culture": "ro-RO", |
|||
"texts": { |
|||
"Permission:Organizations": "Organizaţii", |
|||
"Permission:Manage": "Administrare Organizaţii", |
|||
"Permission:DiscountRequests": "Cereri de reduceri", |
|||
"Permission:DiscountManage": "Administrare cereri de reduceri", |
|||
"Permission:Disable": "Dezactivează", |
|||
"Permission:Enable": "Activează", |
|||
"Permission:EnableSendEmail": "Activează trimitere Email", |
|||
"Permission:SendEmail": "Trimite Email", |
|||
"Permission:NpmPackages": "Pachete NPM", |
|||
"Permission:NugetPackages": "Pachete Nuget", |
|||
"Permission:Maintenance": "Întreţinere", |
|||
"Permission:Maintain": "Întreţine", |
|||
"Permission:ClearCaches": "Goleşte cache-ul", |
|||
"Permission:Modules": "Module", |
|||
"Permission:Packages": "Pachete", |
|||
"Permission:Edit": "Modifică", |
|||
"Permission:Delete": "Şterge", |
|||
"Permission:Create": "Creează", |
|||
"Permission:Accounting": "Contabilitate", |
|||
"Permission:Accounting:Quotation": "Citat", |
|||
"Permission:Accounting:Invoice": "Factură", |
|||
"Menu:Organizations": "Organizaţii", |
|||
"Menu:Accounting": "Contabilitate", |
|||
"Menu:Packages": "Pachete", |
|||
"Menu:DiscountRequests": "Cereri de reduceri", |
|||
"NpmPackageDeletionWarningMessage": "Sunteţi sigur(ă) că doriţi să ştergeţi acest pachet de tip NPM?", |
|||
"NugetPackageDeletionWarningMessage": "Sunteţi sigur(ă) că doriţi să ştergeţi acest pachet de tip Nuget?", |
|||
"ModuleDeletionWarningMessage": "Sunteţi sigur(ă) că doriţi să ştergeţi acest modul?", |
|||
"Name": "Nume", |
|||
"DisplayName": "Nume de afişare", |
|||
"ShortDescription": "Descriere scurtă", |
|||
"NameFilter": "Nume", |
|||
"CreationTime": "Data şi ora creării", |
|||
"IsPro": "Este pro", |
|||
"IsFreeToActiveLicenseOwners": "Gratuit pentru deţinătorii de licenţă", |
|||
"ShowOnModuleList": "Afişează în lista modulelor", |
|||
"EfCoreConfigureMethodName": "Configurează numele metodei", |
|||
"IsProFilter": "Este pro", |
|||
"ApplicationType": "Tipul aplicaţiei", |
|||
"Target": "Ţinta", |
|||
"TargetFilter": "Ţinta", |
|||
"ModuleClass": "Clasa modulului", |
|||
"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": "DeleteAllEntityFramework Core", |
|||
"NugetPackageTarget.MongoDB": "MongoDB", |
|||
"Edit": "Modifică", |
|||
"Delete": "Şterge", |
|||
"Refresh": "Reîncarcă", |
|||
"NpmPackages": "Pachete NPM", |
|||
"NugetPackages": "Pachete Nuget", |
|||
"NpmPackageCount": "Număr pachete NPM", |
|||
"NugetPackageCount": "Număr pachete Nuget", |
|||
"Module": "Module", |
|||
"ModuleInfo": "Info module", |
|||
"CreateANpmPackage": "Crează un pachet NPM", |
|||
"CreateAModule": "Crează un modul", |
|||
"CreateANugetPackage": "Crează un pachet Nuget", |
|||
"AddNew": "Adaugă o înregistrare nouă", |
|||
"PackageAlreadyExist{0}": "Pachetul \"{0}\" este deja adăugat.", |
|||
"ModuleAlreadyExist{0}": "Modulul \"{0}\" este deja adăugat.", |
|||
"ClearCache": "Goleşte cache", |
|||
"SuccessfullyCleared": "Golit cu succes", |
|||
"Menu:NpmPackages": "Pachete de tip NPM", |
|||
"Menu:Modules": "Module", |
|||
"Menu:Maintenance": "Mentenanţă", |
|||
"Menu:NugetPackages": "Pachete de tip Nuget", |
|||
"CreateAnOrganization": "Crează o organizaţie", |
|||
"Organizations": "Organizaţii", |
|||
"LongName": "Nume complet", |
|||
"LicenseType": "Tipul licenţei", |
|||
"MissingLicenseTypeField": "Câmpul de tip licenţă este obligatoriu!", |
|||
"LicenseStartTime": "Ora de început a licenţei", |
|||
"LicenseEndTime": "Ora de sfârşit a licenţei", |
|||
"AllowedDeveloperCount": "Număr permis de dezvoltatori", |
|||
"UserNameOrEmailAddress": "Numele de utilizator sau adresa de email", |
|||
"AddOwner": "Adaugă proprietar", |
|||
"UserName": "Nume de utilizator", |
|||
"Email": "Email", |
|||
"Developers": "Dezvoltatori", |
|||
"AddDeveloper": "Adaugă dezvoltator", |
|||
"Create": "Creează", |
|||
"UserNotFound": "Utilizatorul nu a fost găsit", |
|||
"{0}WillBeRemovedFromDevelopers": "{0} va fi eliminat dintre dezvoltatori, confirmaţi?", |
|||
"{0}WillBeRemovedFromOwners": "{0} va fi eliminat dintre proprietari, confirmaţi?", |
|||
"{0}WillBeRemovedFromMembers": "{0} va fi eliminat dintre membri, confirmaţi?", |
|||
"Computers": "Calculatoare", |
|||
"UniqueComputerId": "Identificator unic calculator", |
|||
"LastSeenDate": "Data ultimei accesări", |
|||
"{0}Computer{1}WillBeRemovedFromRecords": "Calculatorul {0} ({1}) va fi eliminat dintre înregistrări", |
|||
"OrganizationDeletionWarningMessage": "Organizaţia va fi ştearsă", |
|||
"DeletingLastOwnerWarningMessage": "Organizaţia trebuie să aibă cel puţin un proprietar! Prin urmare nu puteţi şterge acest proprietar.", |
|||
"This{0}AlreadyExistInThisOrganization": "Acest(a) {0} există deja în această organizaţie", |
|||
"AreYouSureYouWantToDeleteAllComputers": "Sunteţi sigur(ă) că doriţi să ştergeţi toate calculatoarele?", |
|||
"DeleteAll": "Şterge tot", |
|||
"DoYouWantToCreateNewUser": "Vreţi să creaţi un nou utilizator?", |
|||
"MasterModules": "Module master", |
|||
"OrganizationName": "Nume organizaţie", |
|||
"CreationDate": "Data creării", |
|||
"LicenseStartDate": "Data de început a licenţei", |
|||
"LicenseEndDate": "Data de sfărşit a licenţei", |
|||
"OrganizationNamePlaceholder": "Numele organizaţiei...", |
|||
"TotalQuestionCountPlaceholder": "Numărul total de înrebări...", |
|||
"RemainingQuestionCountPlaceholder": "Numărul de întrebări rămase...", |
|||
"LicenseTypePlaceholder": "Tipul licenţei...", |
|||
"CreationDatePlaceholder": "Data creării...", |
|||
"LicenseStartDatePlaceholder": "Data de început a licenţei...", |
|||
"LicenseEndDatePlaceholder": "Data de sfârşit a licenţei...", |
|||
"UsernameOrEmail": "Nume de utilizator sau email", |
|||
"UsernameOrEmailPlaceholder": "Nume de utilizator sau email...", |
|||
"Member": "Membru", |
|||
"PurchaseOrderNo": "Achiziţia numărul", |
|||
"QuotationDate": "Data citării", |
|||
"CompanyName": "Nume companie", |
|||
"CompanyAddress": "Adresă companie", |
|||
"Price": "Preţ", |
|||
"DiscountText": "Text discount", |
|||
"DiscountQuantity": "Cantitate discount", |
|||
"DiscountPrice": "Preţ discount", |
|||
"Quotation": "Citare", |
|||
"ExtraText": "Text extra", |
|||
"ExtraAmount": "Cantitate extra", |
|||
"DownloadQuotation": "Descarcă citarea", |
|||
"Invoice": "Factură", |
|||
"TaxNumber": "Număr taxă", |
|||
"InvoiceNumber": "Număr factură", |
|||
"InvoiceDate": "Dată factură", |
|||
"InvoiceNote": "Notă factură", |
|||
"Quantity": "Cantitate", |
|||
"AddProduct": "Adaugă produs", |
|||
"AddProductWarning": "Trebuie să adăugaţi un produs!", |
|||
"TotalPrice": "Preţ total", |
|||
"Generate": "Generează", |
|||
"MissingQuantityField": "Câmpul de cantitate este obligatoriu!", |
|||
"MissingPriceField": "Câmpul de preţ este obligatoriu!", |
|||
"CodeUsageStatus": "Stare", |
|||
"Country": "Ţara", |
|||
"DeveloperCount": "Număr dezvoltatori", |
|||
"RequestCode": "Cod solicitare", |
|||
"WebSite": "Web Site", |
|||
"GithubUsername": "Nume utilizator de Github", |
|||
"PhoneNumber": "Număr de telefon", |
|||
"ProjectDescription": "Descriere proiect", |
|||
"Referrer": "Referent", |
|||
"DiscountRequests": "Cerere de reducere", |
|||
"Copylink": "Copiază linkul", |
|||
"Disable": "Dezactivează", |
|||
"Enable": "Activează", |
|||
"EnableSendEmail": "Activează trimitere Email", |
|||
"SendEmail": "Trimite Email", |
|||
"SuccessfullyDisabled": "Dezactivat cu succes", |
|||
"SuccessfullyEnabled": "Activat cu succes", |
|||
"EmailSent": "Email trimis", |
|||
"SuccessfullySent": "Trimis cu succes", |
|||
"SuccessfullyDeleted": "Şters cu succes", |
|||
"DiscountRequestDeletionWarningMessage": "Cererea de reducere va fi ştearsă", |
|||
"BusinessType": "Tip afacere", |
|||
"TotalQuestionCount": "Număr total de întrebări", |
|||
"RemainingQuestionCount": "Număr de întrebări rămase", |
|||
"TotalQuestionMustBeGreaterWarningMessage": "Numărul total de întrebări trebuie să fie mai mare decât numărul de întrebări rămase!", |
|||
"QuestionCountsMustBeGreaterThanZero": "Numărul total de întrebări şi numărul de întrebări rămase trebuie să fie mai mai mare sau egal cu 0!", |
|||
"UnlimitedQuestionCount": "Număr nelimitat de întrebări", |
|||
"Notes": "Notiţe", |
|||
"Menu:Community": "Comunitate", |
|||
"Menu:Articles": "Articole", |
|||
"Wait": "Aşteaptă", |
|||
"Approve": "Aprobă", |
|||
"Reject": "Respinge", |
|||
"Details": "Detalii", |
|||
"Url": "Url", |
|||
"Title": "Titlu", |
|||
"ContentSource": "Sursa conţinutului", |
|||
"Status": "Status", |
|||
"ReadArticle": "Citeşte articolul", |
|||
"ArticleHasBeenWaiting": "Articolul a fost în aşteptare", |
|||
"ArticleHasBeenApproved": "Articolul a fost aprobat", |
|||
"ArticleHasBeenRejected": "Articolul a fost respins", |
|||
"Permission:Community": "Comunitate", |
|||
"Permission:CommunityArticle": "Articole", |
|||
"Link": "Link", |
|||
"Enum:ContentSource:0": "Github", |
|||
"Enum:ContentSource:1": "External", |
|||
"Enum:Status:0": "Aşteptare", |
|||
"Enum:Status:1": "Respins", |
|||
"Enum:Status:2": "Aprobat", |
|||
"Summary": "Sumar", |
|||
"AuthorName": "Nume autor", |
|||
"CoverImage": "Imagine de copertă", |
|||
"RemoveCacheConfirmationMessage": "Sunteţi sigur(ă) că doriţi să eliminaţi cache-ul pentru articolul \"{0}\"?", |
|||
"SuccessfullyRemoved": "Eliminat cu succes", |
|||
"RemoveCache": "Elimină cache", |
|||
"Language": "Limba", |
|||
"Optional": "Opţional", |
|||
"CreateArticleLanguageInfo": "Limba în care este scris articolul", |
|||
"Enum:ContentSource:2": "Post Video", |
|||
"VideoPreview": "Previzualizare Video", |
|||
"VideoPreviewErrorMessage": "Adresa URL a clipului video nu a putut fi recuperată de pe Youtube. Acest lucru poate fi cauzat de faptul că videoclipul este privat, sau adresa URL nu este disponibilă.", |
|||
"DeleteCoverImage": "Şterge imaginea de copertă", |
|||
"DeleteCoverImageConfirmationMessage": "Sunteţi sigur(ă) că doriţi să ştergeti imaginea de copertă pentru \"{0}\"?", |
|||
"DeleteCoverImageSuccessMessage": "Imaginea de copertă a fost ştearsă cu succes", |
|||
"PaymentsOf": "Plăţi de", |
|||
"ShowPaymentsOfOrganization": "Plăţi", |
|||
"Date": "Data", |
|||
"Products": "Produse", |
|||
"TotalAmount": "Cantitate totală", |
|||
"Currency": "Valută", |
|||
"Gateway": "Gateway", |
|||
"State": "Stare", |
|||
"FailReason": "Motivul eşuării", |
|||
"ReIndexAllPosts": "Reindexati toate postările", |
|||
"ReIndexAllPostsConfirmationMessage": "Sunteţi sigur(ă) că doriţi să reindexaţi toate postările?", |
|||
"SuccessfullyReIndexAllPosts": "Toate postările au fost reindexate.", |
|||
"Permission:FullSearch": "Căutare integrală a textului", |
|||
"Menu:CliAnalytics": "Analitice Cli", |
|||
"TemplateName": "Nume şablon", |
|||
"TemplateVersion": "Versiune şablon", |
|||
"DatabaseProvider": "Furnizor bază de date", |
|||
"IsTiered": "Este nivelat", |
|||
"ProjectName": "Nume proiect", |
|||
"Username": "Nume utilizator", |
|||
"Tool": "Unealtă", |
|||
"Command": "Comandă", |
|||
"UiFramework": "Ui framework", |
|||
"Options": "Opţiuni", |
|||
"CliAnalytics": "Analitice Cli", |
|||
"Permission:CliAnalyticses": "Analitice Cli", |
|||
"Permission:CliAnalytics": "Analitice Cli", |
|||
"Search": "Caută", |
|||
"ClearFilter": "Şterge filtru", |
|||
"LicensePrivateKey": "Cheie privată licenţă", |
|||
"LicensePublicKey": "Cheie publică licenţă", |
|||
"ApiKey": "Cheie API NuGet", |
|||
"ShowInvoiceRequestsOfOrganization": "Solicitări de factură", |
|||
"ShowQuestionsOfOrganization": "Întrebări", |
|||
"Question": "Întrebare", |
|||
"Open": "Deschide", |
|||
"Questions": "Întrebări", |
|||
"InvoiceRequests": "Solicitări de factură", |
|||
"Address": "Adresa", |
|||
"TaxNo": "Taxa numărul", |
|||
"Permission:InvoiceRequest": "Solicitare de factură", |
|||
"Permission:Question": "Întrebare", |
|||
"AddNoteSuccessMessage": "Notă adăugată cu succes", |
|||
"NameSurname": "Nume Prenume", |
|||
"Note": "Notează", |
|||
"Add": "Adaugă", |
|||
"ProjectDownloads": "Descărcările proiectului", |
|||
"ShowProjectDownloadsOfOrganization": "Descărcările proiectului", |
|||
"ShowAuditLogsOfOrganization": "Jurnale de audit", |
|||
"Enum:EntityChangeType:0": "Creat", |
|||
"Enum:EntityChangeType:1": "Actualizat", |
|||
"Enum:EntityChangeType:2": "Şters", |
|||
"TenantId": "ID Tenant", |
|||
"ChangeTime": "Schimbă ora", |
|||
"EntityTypeFullName": "Numele complet al tipului entităţii", |
|||
"AuditLogsFor{0}Organization": "Jurnale de audit pentru organizaţia \"{0}\"", |
|||
"Permission:EntityChange": "Schimbă entitatea", |
|||
"Permission:ProjectDownload": "Descarcă proiectul", |
|||
"Permission:PaymentRequest": "Solicitări de plată", |
|||
"CreatorEmailAddress": "Adresa de email a creatorului", |
|||
"EmailSendDate": "Data trimiterii emailului", |
|||
"PaymentRequestsFor{0}Organization": "Solicitări de plată pentru organizaţia \"{0}\"", |
|||
"PaymentDetails": "Detalii plată", |
|||
"PaymentProduct": "Produs plată", |
|||
"ProductName": "Nume produs", |
|||
"Code": "Cod", |
|||
"GenerateInvoice": "Generează factură", |
|||
"ExportOrganizationsToExcel": "Exportă în Excel", |
|||
"ThisExtensionIsNotAllowed": "Această extensie nu este permisă.", |
|||
"TheFileIsTooLarge": "Dimensiunea fişierului este prea mare!", |
|||
"ArticleDeletionConfirmationMessage": "Sunteţi sigur(ă) că doriţi şă ştergeţi definitiv acest articol?", |
|||
"ChooseCoverImage": "Alege o imagine de copertă...", |
|||
"Menu:Quotation": "Citare", |
|||
"Menu:Invoice": "Factură", |
|||
"Menu:PaymentRequests": "Solicitări plată", |
|||
"Permission:PaymentRequests": "Solicitări plată", |
|||
"PaymentRequests": "Solicitări plată", |
|||
"Creator": "Creator", |
|||
"ExtraProperties": "Proprietăţi extra", |
|||
"Organization": "Organizaţia", |
|||
"Waiting": "În aşteptare", |
|||
"Completed": "Finalizat", |
|||
"Failed": "Eşuat", |
|||
"PaymentRequestDeletionWarningMessage": "Sunteţi sigur(ă) că doriţi să ştergeţi această plată?", |
|||
"Payment": "Plata", |
|||
"AddPayment": "Adaugă plată", |
|||
"Enum:PurchaseType:1": "Licenţă nouă", |
|||
"Enum:PurchaseType:2": "Extindere licenţă", |
|||
"Enum:PurchaseType:3": "Îmbunătăţire licenţă", |
|||
"Enum:PurchaseType:4": "Dezvoltator suplimentar", |
|||
"LicenceType": "Tipul licenţei", |
|||
"PurchaseType": "Tipul achiziţiei", |
|||
"ReceiptNo": "Chitanţa numărul", |
|||
"PaymentTime": "Data plăţii", |
|||
"ProductPrice": "Preţul produsului", |
|||
"AdditionalDeveloper": "Dezvoltator suplimentar", |
|||
"ThisPaymentHasBeenAlreadyUsed": "Această plată a fost deja folosită", |
|||
"PaymentTimeCannotBeFutureTime": "Data plăţii nu poate fi în viitor" |
|||
} |
|||
} |
|||
@ -0,0 +1,40 @@ |
|||
{ |
|||
"culture": "ro-RO", |
|||
"texts": { |
|||
"Volo.AbpIo.Domain:010004": "Numărul maxim de membri a fost atins!", |
|||
"Volo.AbpIo.Domain:010005": "Numărul maxim de proprietari a fost atins!", |
|||
"Volo.AbpIo.Domain:010006": "Există deja un proprietar în această organizaţie!", |
|||
"Volo.AbpIo.Domain:010007": "Acest utilizator este deja dezvoltator în această organizaţie!", |
|||
"Volo.AbpIo.Domain:010008": "Numărul permis de dezvoltatori nu poate fi mai mic decât numărul curent de dezvoltatori!", |
|||
"Volo.AbpIo.Domain:010009": "Numărul permis de dezvoltatori nu poate fi mai mic decât 0!", |
|||
"Volo.AbpIo.Domain:010010": "Numărul maxim de adrese de tip mac este depăşit!", |
|||
"Volo.AbpIo.Domain:010011": "Licenţa personală nu poate avea mai mult de un dezvoltator!", |
|||
"Volo.AbpIo.Domain:010012": "Licenţa nu poate fi prelungită la o lună după ce aceasta a expirat!", |
|||
"Volo.AbpIo.Domain:020001": "Nu s-a putut şterge acest pachet NPM deoarece \"{NugetPackages}\" există pachete Nuget dependente de acest pachet.", |
|||
"Volo.AbpIo.Domain:020002": "Nu s-a putut şterge acest pachet NPM deoarece \"{Modules}\" modulele folosesc acest pachet.", |
|||
"Volo.AbpIo.Domain:020003": "Nu s-a putut şterge acest pachet NPM deoarece \"{Modules}\" modulele folosesc acest pachet \"{NugetPackages}\" şi există pachete Nuget dependente de acest pachet.", |
|||
"Volo.AbpIo.Domain:020004": "Nu s-a putut şterge acest pachet Nuget deoarece \"{Modules}\" modulele folosesc acest pachet.", |
|||
"WantToLearn?": "Vrei să înveţi?", |
|||
"ReadyToGetStarted?": "Eşti gata pentru a începe?", |
|||
"JoinOurCommunity": "Alăturaţi-vă comunităţii noastre", |
|||
"GetStartedUpper": "ÎNCEPE", |
|||
"ForkMeOnGitHub": "Fork me on GitHub", |
|||
"Features": "Caracteristici", |
|||
"GetStarted": "Începe", |
|||
"Documents": "Documente", |
|||
"Community": "Comunitate", |
|||
"ContributionGuide": "Ghid de contribuţie", |
|||
"Blog": "Blog", |
|||
"Commercial": "Comercial", |
|||
"MyAccount": "Contul meu", |
|||
"Permission:License": "Licenţă", |
|||
"Permission:UserInfo": "Info utilizator", |
|||
"SeeDocuments": "Vezi documente", |
|||
"Samples": "Mostre", |
|||
"Framework": "Framework", |
|||
"Support": "Suport", |
|||
"FreeDDDBook": "DDD E-book gratis", |
|||
"New": "Nou", |
|||
"Volo.AbpIo.Domain:020005": "Anul prelungirii licenţei nu poate fi mai mic decât {MinExtendLicenseYear} şi mai mare decât {MaxExtendLicenseYear}" |
|||
} |
|||
} |
|||
@ -0,0 +1,5 @@ |
|||
{ |
|||
"culture": "ro-RO", |
|||
"texts": { |
|||
} |
|||
} |
|||
@ -0,0 +1,363 @@ |
|||
{ |
|||
"culture": "ro-RO", |
|||
"texts": { |
|||
"OrganizationManagement": "Administrarea organizaţiilor", |
|||
"OrganizationList": "Lista organizaţiilor", |
|||
"Volo.AbpIo.Commercial:010003": "Nu sunteţi proprietarul acestei organizaţii!", |
|||
"OrganizationNotFoundMessage": "Nicio organizaţie găsită!", |
|||
"DeveloperCount": "Alocaţi / total dezvoltatori", |
|||
"QuestionCount": "Rămase / total întrebări", |
|||
"Unlimited": "Nelimitat", |
|||
"Owners": "Proprietari", |
|||
"AddMember": "Adaugă membru", |
|||
"AddOwner": "Adaugă proprietar", |
|||
"AddDeveloper": "Adaugă dezvoltator", |
|||
"UserName": "Nume utilizator", |
|||
"Name": "Nume", |
|||
"EmailAddress": "Adresă de email", |
|||
"Developers": "Dezvoltatori", |
|||
"LicenseType": "Tip licenţă", |
|||
"Manage": "Administrează", |
|||
"StartDate": "Data de început", |
|||
"EndDate": "Data de sfârşit", |
|||
"Modules": "Module", |
|||
"LicenseExtendMessage": "Data expirării licenţei dumneavoastră a fost prelungită până în {0}", |
|||
"LicenseUpgradeMessage": "Licenţa dumneavoastră a fost actualizată la {0}", |
|||
"LicenseAddDeveloperMessage": "{0} dezvoltatori au fost ataşaţi licenţei dumneavoastră", |
|||
"Volo.AbpIo.Commercial:010004": "Utilizatorul nu a putut fi găsit! Acesta trebuie să se fi înregistrat deja.", |
|||
"MyOrganizations": "Organizaţiile mele", |
|||
"ApiKey": "Cheie API", |
|||
"UserNameNotFound": "Nu există niciun utilizator cu numele {0}", |
|||
"SuccessfullyAddedToNewsletter": "Vă mulţumim pentru că v-aţi abonat la newsletter-ul nostru!", |
|||
"MyProfile": "Profilul meu", |
|||
"EmailNotValid": "Vă rugăm să introduceţi o adresa de email validă.", |
|||
"JoinOurMarketingNewsletter": "Alăturaţi-va newsletter-ului nostru de marketing", |
|||
"WouldLikeToReceiveMarketingMaterials": "Aş dori să primesc materiale de marketing precum oferte şi oferte speciale.", |
|||
"StartUsingYourLicenseNow": "Începe folosirea licenţei tale acum!", |
|||
"WelcomePage": "Pagina de bun venit", |
|||
"UnsubscriptionExpireEmail": "Dezabonează-te de la emailuri informative despre data expirării licenţei.", |
|||
"UnsubscribeLicenseExpireEmailReminderMessage": "Această abonament prin email conţine numai amintirea datei de expirare a licenţei.", |
|||
"UnsubscribeFromLicenseExpireEmails": "Dacă nu mai doriţi să primiţi emailuri informative despre data de expirare a licenţei dumneavoastră, puteţi să vă dezabonaţi oricând.", |
|||
"Unsubscribe": "Dezabonează-te", |
|||
"NotOrganizationMember": "Nu sunteţi membru al niciunei organizaţii.", |
|||
"UnsubscribeLicenseExpirationEmailSuccessTitle": "V-aţi dezabonat cu succes.", |
|||
"UnsubscribeLicenseExpirationEmailSuccessMessage": "Nu veţi mai primi emailuri informative despre data de expirare a licenţei dumneavoastră.", |
|||
"IndexPageHeroSection": "<span class=\"first-line\">A complete</span><span class=\"second-line\"> web development platform</span><span class=\"third-line\">built-on <img src=\"{0}\" width=\"110\" class=\"ml-1\" /> framework</span>", |
|||
"AbpCommercialShortDescription": "ABP Commercial oferă module de aplicaţii pre-construite, instrumente de dezvoltare rapidă a aplicaţiilor, teme UI profesionale, asistenţă premium şi multe altele.", |
|||
"LiveDemo": "Live Demo", |
|||
"GetLicence" :"Obţine o licenţă", |
|||
"Application": "Application", |
|||
"StartupTemplates": "Şabloane de lansare", |
|||
"Startup": "Lansare", |
|||
"Templates": "Şabloane", |
|||
"Developer": "Dezvoltator", |
|||
"Tools": "Unelte", |
|||
"Premium": "Premium", |
|||
"PremiumSupport": "Asistenţă Premium", |
|||
"PremiumForumSupport": "Forum asistenţă premium", |
|||
"UI": "UI", |
|||
"Themes": "Teme", |
|||
"JoinOurNewsletter": "Abonaţi-va newsletter-ului nostru", |
|||
"Send": "Trimite", |
|||
"Learn": "Învaţă", |
|||
"AdditionalServices": "Servicii suplimentare", |
|||
"WhatIsABPFramework": "CE ESTE FRAMEWORK-UL ABP?", |
|||
"OpenSourceBaseFramework": "Open Source Base Framework", |
|||
"ABPFrameworkExplanation": "<p class=\"lead\">ABP Commercial se bazează pe framework-ul ABP, un framework open source şi bazat pe comunitate pentru ASP.NET Core.</p><p>ABP Framework oferă o infrastructură excelentă pentru a scrie cod care poate fi întreţinut, extins şi testat cu cele mai bune practici.</p><p>Construit şi integrat în instrumentele populare pe care le cunoaşteţi deja. Curbă de învăţare redusă, adaptare uşoară, dezvoltare confortabilă.</p>", |
|||
"Modular": "Modular", |
|||
"MicroserviceCompatible": "Compatibil cu microservicii", |
|||
"DomainDrivenDesignInfrastructure": "Domain Driven Design Infrastructure", |
|||
"MultiTenancy": "Multi-Tenancy", |
|||
"DistributedMessaging": "Mesaje distribuite", |
|||
"DynamicProxying": "Proxy dinamic", |
|||
"BackgroundJobs": "Background Jobs", |
|||
"AuditLogging": "Înregistrarea auditului", |
|||
"BLOBStoring": "BLOB Storing", |
|||
"BundlingMinification": "Bundling & Minification", |
|||
"AdvancedLocalization": "Localizare avansată", |
|||
"ManyMore": "Multe altele", |
|||
"ExploreTheABPFramework": "Exploraţi framework-ul ABP", |
|||
"WhyUseTheABPCommercial": "De ce să folosiţi ABP Commercial?", |
|||
"WhyUseTheABPCommercialExplanation": "<p class=\"lead mt- 5\">Construirea de aplicaţii web de nivel enterprise poate fi complexă şi poate consuma mult timp.</p><p>ABP Commercial oferă infrastructura de bază pentru toate soluţiile moderne bazate pe ASP.NET Core de nivel enterprise. De la proiectare până la implementare, întregul ciclu de dezvoltare este împuternicit de funcţiile şi modulele integrate ale ABP.</p>", |
|||
"StartupTemplatesShortDescription": "Şabloanele de pornire vă fac să începeţi proiectul în câteva secunde.", |
|||
"UIFrameworksOptions": "UI frameworks options;", |
|||
"DatabaseProviderOptions": "Opţiuni furnizor de bază de date;", |
|||
"PreBuiltApplicationModules": "Module de aplicaţii pre-construite", |
|||
"PreBuiltApplicationModulesShortDescription": "Cele mai comune cerinţe de aplicaţie sunt deja dezvoltate pentru dumneavoastră sub formă de module reutilizabile.", |
|||
"Account": "Cont", |
|||
"Blogging": "Blogging", |
|||
"Identity": "Identitate", |
|||
"IdentityServer": "Identity Server", |
|||
"Saas": "Saas", |
|||
"LanguageManagement": "Administrarea limbilor", |
|||
"TextTemplateManagement": "Text Template Management", |
|||
"SeeAllModules": "Vezi toate modulele", |
|||
"ABPSuite": "ABP Suite", |
|||
"AbpSuiteShortDescription": "ABP Suite este un instrument complementar pentru ABP Commercial.", |
|||
"AbpSuiteExplanation": "Vă permite să creaţi pagini web în câteva minute. Este un instrument .NET Core global, care poate fi instalat din linia de comandă. Poate crea o nouă soluţie ABP, poate genera pagini CRUD, începând de la baza de date până la front-end.", |
|||
"Details": "Detalii", |
|||
"LeptonTheme": "Tema Lepton", |
|||
"ProfessionalModernUIThemes": "Teme UI profesionale, moderne", |
|||
"LeptonThemeExplanation": "Lepton oferă o gamă de teme de administrare Bootstrap, care servesc ca o bază solidă pentru orice proiect care necesită tabloul de bord de administrare.", |
|||
"DefaultTheme": "Tema Default", |
|||
"MaterialTheme": "Tema Material", |
|||
"Default2Theme": "Tema Default 2", |
|||
"DarkTheme": "Tema Dark", |
|||
"DarkBlueTheme": "Tema Dark Blue", |
|||
"LightTheme": "Tema Light", |
|||
"ProudToWorkWith": "Mândru să lucrez cu", |
|||
"OurConsumers": "Sute de întreprinderi şi dezvoltatori din peste 70 de ţări din jurul lumii se bazează pe ABP Commercial.", |
|||
"JoinOurConsumers": "Alăturaţi-va lor şi construiţi produse uimitoare rapid.", |
|||
"AdditionalServicesExplanation": "Aveţi nevoie de servicii suplimentare sau personalizate? <strong>Noi şi partenerii noştri vi le putem oferi;</strong>", |
|||
"CustomProjectDevelopment": "Custom Project Development", |
|||
"CustomProjectDevelopmentExplanation": "Dezvoltatori dedicaţi pentru proiectele dumneavoastră personalizate.", |
|||
"PortingExistingProjects": "Portarea proiectelor existente", |
|||
"PortingExistingProjectsExplanation": "Migrarea proiectelor dumneavoastră vechi pe platforma ABP.", |
|||
"LiveSupport": "Asistenţă live", |
|||
"LiveSupportExplanation": "Opţiune de asistenţă live la distanţă oricând aveţi nevoie.", |
|||
"Training": "Instruire", |
|||
"TrainingExplanation": "Instruire dedicată pentru dezvoltatorii dumneavoastră.", |
|||
"OnBoarding": "Integrare", |
|||
"OnBoardingExplanation": "Ajutor pentru configurarea dezvoltării, mediilor CI & CD.", |
|||
"PrioritizedTechnicalSupport": "Asistenţă tehnică prioritară", |
|||
"PremiumSupportExplanation": "Pe lângă excelentul suport comunitar al framework-ului ABP, echipa noastră de asistenţă răspunde la întrebările tehnice şi la problemele utilizatorilor comerciali cu prioritate crescută.", |
|||
"SeeTheSupportOptions": "Vedeţi opţiunile de asistenţă", |
|||
"Contact": "Contact", |
|||
"TellUsWhatYouNeed": "Spuneţi-ne de ce aveţi nevoie.", |
|||
"YourMessage": "Mesajul dumneavoastră", |
|||
"YourFullName": "Numele dumneavoastră complet", |
|||
"EmailField": "Adresa de email", |
|||
"YourEmailAddress": "Adresa dumneavoastră de email", |
|||
"HowMayWeHelpYou": "Cum vă putem ajuta?", |
|||
"SendMessage": "Trimite mesaj", |
|||
"Success": "Succes", |
|||
"WeWillReplyYou": "Am primit mesajul dumneavoastră şi vă vom contacta cât de repede posibil.", |
|||
"GoHome": "Navigaţi acasă", |
|||
"CreateLiveDemo": "Crează Demo Live", |
|||
"RegisterToTheNewsletter": "Înregistraţi-va la newsletter pentru a primi informaţii despre ABP.IO, inclusiv lansări noi etc.", |
|||
"EnterYourEmailOrLogin": "Introduceţi-vă adresa de email pentru a vă crea demo-ul sau <a href=\"{0}\">Autentificaţi-vă</a> folosind contul existent.", |
|||
"ApplicationTemplate": "Application Template", |
|||
"ApplicationTemplateExplanation": "Şablonul de pornire a aplicaţiei este utilizat pentru a crea o nouă aplicaţie web.", |
|||
"EfCoreProvider": "Entity Framework (susţine SQL Server, MySQL, PostgreSQL, Oracle <a href=\"https://docs.microsoft.com/en-us/ef/core/providers/\">şi altele</a>)", |
|||
"AlreadyIncludedInTemplateModules": "Următoarele module sunt deja incluse şi configurate în acest şablon:", |
|||
"ApplicationTemplateArchitecture": "Acest şablon de aplicaţie susţine arhitecturi structurate pe nivele, în care nivelul UI, nivelul API şi serviciul de autentificare sunt separate fizic.", |
|||
"SeeTheGuideOrGoToTheLiveDemo": "Consultaţi ghidul dezvoltatorului pentru informaţii tehnice despre acest şablon sau mergeţi la demo-ul live.", |
|||
"DeveloperGuide": "Ghidul dezvoltatorului", |
|||
"ModuleTemplate": "Module Template", |
|||
"ModuleTemplateExplanation1": "Vreţi să creaţi un modul pe care sa-l reutilizaţi în cadrul diferitelor aplicaţii? Acest şablon de pornire pregăteşte totul pentru a putea începe să creaţi un <strong>modul</strong> sau un <strong>microserviciu</strong> reutilizabil.", |
|||
"ModuleTemplateExplanation2": "<p>Puteţi susţine cadre UI simple sau multiple, furnizori unici sau multipli pentru baza de date pentru un singur modul. Şablonul de pornire este configurat pentru a rula <strong>şi testa modulul dumneavoastră</strong> într-o aplicaţie minimă, în plus faţă de infrastructura de testare şi integrare.</p> <p>Consultaţi ghidul dezvoltatorului pentru informaţii tehnice despre acest şablon.</p>", |
|||
"WithAllStyleOptions": "cu toate opţiunile de stil", |
|||
"Demo": "Demo", |
|||
"SeeAllModules": "Vezi toate modulele", |
|||
"ABPCLIExplanation": "ABP CLI (Command Line Interface) este un instrument de linii de comandă pentru executarea unor operaţii comune pentru soluţiile ABP.", |
|||
"ABPSuiteEasilyCURD": "Suita ABP este un instrument care vă permite crearea cu uşurinţă a paginilor CRUD", |
|||
"WeAreHereToHelp": "Suntem aici să <span class=\"zero-text\">Ajutăm</span>", |
|||
"BrowseOrAskQuestion": "Puteţi răsfoi subiectele noastre de ajutor sau puteţi căuta în cadrul secţiunii întrebărilor frecvent adresate, sau ne puteţi adresa o întrebare folosind <a href=\"{0}\" class=\"text-success\">formularul de contact</a>.", |
|||
"SearchQuestionPlaceholder": "Caută în întrebările frecvent adresate", |
|||
"WhatIsTheABPCommercial": "Ce este ABP Commercial?", |
|||
"WhatAreDifferencesThanAbpFramework": "Care sunt diferenţele dintre ABP Framework şi ABP Comercial?", |
|||
"ABPCommercialExplanation": "ABP Commercial este un set de module premium, instrumente, teme şi servicii construite pe baza <a target=\"_blank\" href=\"{0}\">ABP framework</a>. ABP Commercial este dezvoltat şi întreţinut de către aceeaşi echipă din spatele ABP framework.", |
|||
"WhatAreDifferencesThanABPFrameworkExplanation": "<p> <a target=\"_blank\" href=\"{0}\">ABP framework</a> este un framework de dezvoltare de aplicaţii modulare, compatibil cu micro-servicii dedicate ASP.NET Core. Oferă o arhitectură completă şi o infrastructură puternică pentru a vă face să vă concentraţi asupra propriului cod, mai degrabă decât să vă repetaţi pentru fiecare proiect nou. Se bazează pe cele mai bune practici de dezvoltare software, şi pe instrumentele populare pe care le cunoaşteţi deja. </p><p>ABP Framework este complet gratuit, open-source şi bazat pe comunitate. De asemenea, oferă şi o temă gratuită şi câteva module pre-construite (de exemplu, gestionarea identităţii şi a chiriaşilor).</p>", |
|||
"VisitTheFrameworkVSCommercialDocument": "Accesaţi următorul link, pentru mai multe informaţii <a href=\"{0}\" target=\"_blank\"> {1} </a>", |
|||
"ABPCommercialFollowingBenefits": "ABP Commercial adaugă următoarele beneficii peste framework-ul ABP;", |
|||
"Professional": "Profesional", |
|||
"UIThemes": "Teme UI", |
|||
"EnterpriseModules": "<a href=\"{0}\">Module de aplicaţii</a> pregătite pentru întreprinderi, bogate în funcţionalităţi, pre-construite (e.g. Identity Server management, SaaS management, language management)", |
|||
"ToolingToSupport": "Instrumente pentru a vă susţine productivitatea de dezvoltare (e.g. <a href=\"{0}\">Suita ABP</a>)", |
|||
"PremiumSupportLink": "<a href=\"{0}\" target=\"_blank\">Asistenţă</a> premium", |
|||
"WhatDoIDownloadABPCommercial": "Ce descarc când cumpăr ABP Commercial?", |
|||
"CreateUnlimitedSolutions": "Odată ce aţi cumpărat o licenţă ABP Commercial, veţi putea să creaţi soluţii nelimitate, descrise în documentul <a href=\"{0}\">Noţiuni de bază</a>.", |
|||
"ABPCommercialSolutionExplanation": "Când creaţi o aplicaţie nouă, veţi primi o soluţie de Visual Studio (un şablon de pornire) bazat pe preferinţele dumneavoastră. Soluţia descărcată conţine module comerciale şi teme pre-instalate şi configurate pentru dumneavoastră. Puteţi şterge un modul pre-instalat sau să adăugaţi altul dacă doriţi. Toate modulele şi temele folosesc un pachet NuGet/NPM în mod implicit.", |
|||
"StartDevelopWithTutorials": "Soluţia descărcată este bine structurată şi documentată. Puteţi începe să vă dezvoltaţi codul dumneavoastră pe baza unuia dintre <a href=\"{0}\">tutoriale</a>", |
|||
"TryTheCommercialDemo": "Puteţi încerca versiunea <a href=\"{0}\">demo</a> pentru a vedea un exemplu de aplicaţie creată folosind şablonul de pornire ABP Commercial.", |
|||
"HowManyProducts": "Câte produse/soluţii diferite pot construi folosind ABP Commercial?", |
|||
"HowManyProductsExplanation": "Nu există nicio limită pentru crearea unui proiect ABP. Puteţi crea cât de multe proiecte doriţi, pe care să le dezvoltaţi sau încărcaţi pe diferite servere.", |
|||
"HowManyDevelopers": "Câţi dezvoltatori pot lucra pe ABP Commercial?", |
|||
"HowManyDevelopersExplanation": "Licenţele de ABP Commercial sunt per dezvoltator. Tipuri diferite de licenţă au limite diferite de dezvoltatori. Totuşi, puteţi ataşa mai mulţi dezvoltatori unei licenţe oricând doriţi. Consultaţi <a href=\"{0}\">preţurile</a> pentru tipurile de licenţă, limitele de dezvoltatori şi costurile adiţionale pentru dezvoltatori.", |
|||
"ChangingLicenseType": "Pe viitor pot să schimb tipul licenţei?", |
|||
"ChangingLicenseTypeExplanation": "Puteţi adăuga oricând noi dezvoltatori în licenţa dumneavoastră de acelaşi tip. Consultaţi \"Câţi dezvoltatori pot lucra pe ABP Commercial?\". De asemenea, puteţi opta pentru o licenţă superioară prin plătirea achitarea de preţ. Atunci când optaţi pentru o licenţă superioară, veţi avea parte de beneficiile noii licenţe, însă acest lucru nu va schimba data expirării licenţei.", |
|||
"LicenseExtendUpgradeDiff": "Care este diferenţa dintre prelungirea licenţei şi îmbunătăţirea acesteia?", |
|||
"LicenseExtendUpgradeDiffExplanation": "<strong>Prelungirea:</strong> Prin prelungirea/reînnoirea licenţei dumneavoastră, veţi continua să aveţi acces la asistenţă premium, şi veţi avea parte de actualizările majore ale modulelor şi temelor. Pe lângă asta, veţi putea în continuare să creaţi proiecte noi. Veţi putea folosi în continuare suita ABP, ceea ce va accelera dezvoltarea.<hr/><strong>Îmbunătăţirea:</strong> Prin îmbunătăţirea licenţei dumneavoastră, veţi promova la un plan de licenţă superior, care vă va permite să beneficiaţi de anumite avantaje. Consultaţi <a href=\"/pricing\">tabelul de comparare a licenţelor</a> pentru a verifica diferenţele dintre planurile de licenţă.<strong>Pe de altă parte, când îmbunătăţiţi licenţa, data de expirare a acesteia nu se va schimba!</strong>Pentru a vă extinde data de încheiere a licenţei, va trebui să vă extindeţi licenţa.", |
|||
"LicenseRenewalCost": "Care este costul de reînnoire a licenţei dupa 1 an?", |
|||
"LicenseRenewalCostExplanation": "Rata de reînnoire (extindere) a tuturor licenţelor ABP Comercial reprezintă {0} din preţul listei licenţelor. Preţul de reînnoire a licenţei standard de echipă este de ${1}, cel pentru licenţa standard de afaceri este de ${2} iar cel pentru licenţa standard enterprise este de ${3}. Dacă deja sunteţi clientul nostru, <a href='{4}' target='_blank'>autentificaţi-vă</a> pentru a examina preţurile disponibile pentru reînnoire.", |
|||
"HowDoIRenewMyLicense": "Cum îmi reînnoiesc licenţa?", |
|||
"HowDoIRenewMyLicenseExplanation": "Puteţi să vă reînnoiţi licenţa prin accesarea paginii <a href='{0}' target='_blank'>pagina de gestionare a organizaţiei</a>. Pentru a profita de tarifele noastre reduse de reînnoire anticipată, asiguraţi-vă că reînnoiţi înainte de expirarea licenţei. Totuşi, nu vă faceţi griji dacă nu ştiţi când expiră oportunitatea dumneavoastră de reînnoire anticipată. Veţi primi 2 e-mailuri de reamintire înainte de expirarea abonamentului. Vi le vom trimite cu 30, respectiv 7 zile înainte de expirare.", |
|||
"IsSourceCodeIncluded": "Licenţa mea include şi codul sursă al modulelor comerciale şi a temelor?", |
|||
"IsSourceCodeIncludedExplanation1": "Depinde de tipul de licenţă pe care aţi achiziţionat-o:", |
|||
"IsSourceCodeIncludedExplanation2": "<strong>Team</strong>: Soluţia dumneavoastră foloseste modulele şi temele sub formă de pachete NuGet şi NPM. Nu include şi codul lor sursă. În acest mod, puteţi cu uşurinţă să îmbunătăţiţi aceste module şi teme oricând este o nouă versiune disponibilă. Totuşi, nu veţi primi codul sursă al modulelor şi temelor.", |
|||
"IsSourceCodeIncludedExplanation3": "<strong>Business/Enterprise</strong>: Pe lângă licenţa de tip Team, veţi putea să descărcaţi codul sursă al oricărui modul sau al oricărei teme doriţi. Puteţi chiar să eliminaţi referinţele pachetelor NuGet/NPM pentru un anume modul, şi să adăugaţi codul sursă al acestuia direct în soluţia dumneavoastră pentru a-l putea modifica pe deplin.", |
|||
"IsSourceCodeIncludedExplanation4": "<p>Includerea codului sursă al unui modul în soluţia dumneavoastră vă oferă libertate maximă de a personaliza modulul respectiv. Totuşi, atunci nu va fi posibilă actualizarea automată a modulului atunci când o nouă versiune este publicată.</p><p>Niciuna dintre licenţe nu include codul sursă al suitei ABP, care este un instrument extern care generează cod pentru dumneavoastră şi contribuie la dezvoltare.</p><p>Consultaţi <a href=\"{0}\">preţurile</a> pentru alte diferenţe între tipurile de licenţe.</p>", |
|||
"ChangingDevelopers": "Pe viitor, pot schimba dezvoltatorii ataşaţi organizaţiei mele?", |
|||
"ChangingDevelopersExplanation": "În plus faţă de adăugarea de noi dezvoltatori la licenţa dumneavoastră, puteţi schimba şi dezvoltatorii existenţi(puteţi elimina un dezvoltator şi adăuga unul nou în locul lui) fără costuri suplimentare.", |
|||
"WhatHappensWhenLicenseEnds": "Ce se întâmplă când se încheie perioada licenţei mele?", |
|||
"WhatHappensWhenLicenseEndsExplanation1": "Tipul de licenţă ABP Comercial este o <a href=\"{0}\" target=\"_blank\">licenţă perpetuă</a>. După ce vă expiră licenţa, puteţi continua dezvoltarea proiectului dumneavoastră. Şi nu sunteţi obligat să vă reînnoiţi licenţa. Licenţa dumneavoastră vine la pachet cu actualizări şi plan de asistenţă valabile timp de un an. Pentru a continua să beneficiaţi de noi caracteristici, îmbunătăţiri de performanţe, corectarea erorilor, asistenţă şi să continuaţi să utilizaţi suita ABP, asiguraţi-vă că vă reînnoiţi licenţa anual. Când vă expiră licenţa, nu veţi mai beneficia de niciunul din beneficiile următoare;", |
|||
"WhatHappensWhenLicenseEndsExplanation2": "Nu puteţi crea noi soluţii folosind ABP Commercial, dar puteţi continua dezvoltarea aplicaţiilor existente oricând.", |
|||
"WhatHappensWhenLicenseEndsExplanation3": "You will be able to get updates for the modules and themes within your MAJOR version. For example; if you are using v3.2.0 of a module, you can still get updates for v3.x.x (v3.3.0, v3.5.2... etc.) of that module. But you cannot get updates for the next major version (like v4.x, v5.x)", |
|||
"WhatHappensWhenLicenseEndsExplanation4": "Nu puteţi instala noi module şi teme adăugate pe platforma ABP Comercial după ce se încheie licenţa dumneavoastră.", |
|||
"WhatHappensWhenLicenseEndsExplanation5": "Nu puteţi folosi suita ABP.", |
|||
"WhatHappensWhenLicenseEndsExplanation6": "Nu veţi mai avea parte de <a href=\"{0}\">asistenţă premium</a>.", |
|||
"WhatHappensWhenLicenseEndsExplanation7": "Puteţi să vă reînnoiţi abonamentul dacă vreţi să continuaţi să aveţi parte de aceste beneficii. Dacă vă reînnoiţi abonamentul în termen de o lună după ce vă expiră licenţa, vi se aplică un discount de 20%.", |
|||
"WhenShouldIRenewMyLicense": "Când ar trebui să-mi reînnoiesc licenţa?", |
|||
"WhenShouldIRenewMyLicenseExplanation1": "Dacă vă reînnoiţi licenţa în termen de <strong>1 lună</strong> după ce vă expiră licenţa, se va aplica un discount de 20%.", |
|||
"WhenShouldIRenewMyLicenseExplanation2": "Dacă vă reînnoiţi licenţa la o lună după ce aceasta a expirat, preţul de reînnoire va fi acelaşi cu cel iniţial, şi nu va fi aplicat niciun discount pentru reînnoirea dumneavoastră.", |
|||
"TrialPlan": "Aveţi un plan de încercare?", |
|||
"TrialPlanExplanation": "Pentru moment, ABP Comercial nu include un plan de încercare. Pentru licenţa de Team oferim înapoirea banilor în termen de 30 de zile. Puteţi să solicitaţi o restituire în primele 30 de zile. Pentru licenţele de tip Business şi Enterprise, noi asigurăm restituirea a 60% din sumă în 30 de zile. Acest lucru se datorează faptului că licenţele de tip Business şi Enterprise includ codul sursă complet al tuturor modulelor şi temelor.", |
|||
"DoYouAcceptBankWireTransfer": "Acceptaţi transfer bancar?", |
|||
"DoYouAcceptBankWireTransferExplanation": "Da, acceptăm transfer bancar.<br />După trimiterea taxei de licenţă prin transfer bancar, trimiteţi-ne pe e-mail la info@abp.io chitanţa dumneavoastră şi tipul de licenţă solicitat. Informaţiile despre contul bancar internaţional al nostru:", |
|||
"HowToUpgrade": "Cum se actualizează aplicaţiile existente atunci când este disponibilă o nouă versiune?", |
|||
"HowToUpgradeExplanation1": "Cand creaţi o nouă aplicaţie folosind ABP Commercial, toate modulele şi tema sunt folosite sub formă de pachete NuGet şi NPM. Astfel, puteţi cu uşurinţă să actualizaţi pachetele atunci când o versiune nouă este disponibilă.", |
|||
"HowToUpgradeExplanation2": "Pe lângă actualizările standard NuGet-NPM, <a href=\"{0}\">ABP CLI</a> furnizează o comandă de actualizare automată care identifică şi actualizează toate pachetele legate de ABP din soluţia dumneavoastră.", |
|||
"DatabaseSupport": "Ce sisteme de baze de date sunt suportate?", |
|||
"DatabaseSupportExplanation": "ABP Framework în sine este agnostic din punct de vedere al bazei de date, şi poate funcţiona cu orice furnizor de baze de date prin natura sa. Consultaţi <a href=\"{0}\" target=\"_blank\">documentul de acces la date</a> pentru o listă a furnizorilor implementaţi până în clipa de faţă.", |
|||
"UISupport": "Ce UI frameworks sunt suportate?", |
|||
"Supported": "Suportat", |
|||
"UISupportExplanation": "ABP Framework în sine este agnostic din punct de vedere al UI framework şi poate funcţiona cu orice UI framework. Cu toate acestea, şabloanele de pornire, UI-urile modulelor şi temele nu au fost implementate pentru toate module UIs. Consultaţi <a href=\"{0}\">documentul de început</a> pentru lista actualizată a opţiunilor UI.", |
|||
"MicroserviceSupport": "Suportă arhitectura de micro-servicii?", |
|||
"MicroserviceSupportExplanation1": "Unul din scopurile principale ale ABP framework este să furnizeze o structură convenabilă pentru crearea soluţiilor micro-service. Consultaţi documentul <a href=\"{0}\">arhitectura micro-service</a> pentru a înţelege cum ajută la crearea sistemelor de micro-servicii.", |
|||
"MicroserviceSupportExplanation2": "Toate modulele ABP Commercial sunt dezvoltate pentru a suporta scenarii de implementare a micro-serviciilor (cu propriul API şi bază de date) prin respectarea <a href=\"{0}\">celor mai bune practici de dezvoltare a modulelor</a>.", |
|||
"MicroserviceSupportExplanation3": "Vă oferim <a href=\"{0}\">soluţie demo de micro-servicii</a> care demonstrează o implementare a arhitecturii de micro-servicii pentru a vă ajuta să vă creaţi propria soluţie.", |
|||
"MicroserviceSupportExplanation4": "Deci, răspunsul pe scurt este \"<strong>da, suportă o arhitectură de micro-service</strong>\".", |
|||
"MicroserviceSupportExplanation5": "Totuşi, un sistem de tip micro-service reprezintă o soluţie, şi fiecare soluţie va avea cerinţe diferite, topologie de reţea, scenarii de comunicare, posibilităţi de autentificare, separarea bazei de date/împărţirea deciziilor, configurări în timp real, integrări de sisteme terţe parte şi multe altele.", |
|||
"MicroserviceSupportExplanation6": "ABP Framework şi ABP Commercial furnizează infrastructura pentru scenarii de micro-servicii, module de micro-servicii compatibile, exemple şi documentaţie pentru a vă ajuta să vă construiţi propria soluţie. Dar nu vă aşteptaţi să descărcaţi direct soluţia visurilor dumneavoastră. Veţi fi nevoit(ă) să o întelegeţi şi să puneţi câteva piese cap la cap pe baza cerinţelor dumneavoastră.", |
|||
"WhereCanIDownloadSourceCode": "De unde pot descărca codul sursă?", |
|||
"WhereCanIDownloadSourceCodeExplanation": "Puteţi descărca codul sursă al tuturor modulelor ABP, pachetelor Angular şi al temelor prin suita ABP sau ABP CLI. Consultaţi <a href=\"{0}\">Cum descarc codul sursă?</a>", |
|||
"ComputerLimitation": "Pe câte calculatoare se poate autentifica un dezvoltator atunci când foloseşte ABP ABP?", |
|||
"ComputerLimitationExplanation": "Permitem în mod specific <strong>{0} staţii</strong> per dezvoltator individual/autorizat. Ori de câte ori este nevoie ca un dezvoltator să dezvolte produse ABP Commercial pe o altă staţie, un e-mail ar trebui să fie trimis la license@abp.io pentru a explica situaţia, şi atunci vom face alocarea corespunzătoare în sistemul nostru.", |
|||
"RefundPolicy": "Aveţi o politică de rambursare?", |
|||
"RefundPolicyExplanation": "Puteţi solicita un ramburs în decurs de <strong>30 de zile</strong> de la cumpărarea licenţei. Licenţele de tip Business şi Enterprise au opţiune de descărcare a codului sursă, prin urmare rambursul nu este posibil pentru licenţele Business and Enterprise (şi pentru oricare altă licenţă care beneficiază de dreptul de a primi codul sursă). În plus, nu se fac rambursări pentru reînnoiri şi achiziţii de licenţe suplimentare.", |
|||
"HowCanIRefundVat": "Cum pot deduce TVA-ul?", |
|||
"HowCanIRefundVatExplanation1": "Dacă aţi făcut plata folosind 2Checkout, puteţi deduce TVA-ul în contul dumneavoastră 2Checkout:", |
|||
"HowCanIRefundVatExplanation2": "Autentificaţi-vă în contul dumneavoastră <a href=\"https://secure.2checkout.com/cpanel/login.php\" target=\"_blank\">2Checkout</a>", |
|||
"HowCanIRefundVatExplanation3": "Găsiţi comanda respectivă şi apăsaţi pe \"Deducerea tardivă a TVA-ului \" (introduceţi CUI-ul dumneavoastră)", |
|||
"HowCanIGetMyInvoice": "Cum îmi pot obţine factura?", |
|||
"HowCanIGetMyInvoiceExplanation": "Există două procesatori de plăţi pentru cumpărarea unei licenţă: PayU şi 2Checkout. Dacă veţi cumpăra o licenţă prin procesatorul 2Checkout, vă va trimite chitanţa PDF pe adresa dumneavoastră de email, consultaţi <a href=\"https://knowledgecenter.2checkout.com/Documentation/03Billing-and-payments/Payment-operations/How-do-invoices-work\">facturarea 2Checkout.</a> Dacă veţi cumpăra o licenţă prin procesatorul PayU gateway sau prin transfer bancar, vă vom pregăti chitanţa şi vă vom trimite. Puteţi solicita chitanţa dumneavoastră din <a href=\"{0}\">pagina de gestionare a organizaţiei.</a>", |
|||
"Forum": "Forum", |
|||
"SupportExplanation": "Licenţele ABP Commercial furnizează asistenţă premium pe forum din partea unei echipe alcătuite din experţi ai ABP.", |
|||
"PrivateTicket": "Tichet privat", |
|||
"PrivateTicketExplanation": "Licenţa de tip Enterprise include de asemenea şi asistenţă privată cu sisteme de e-mail şi tichete.", |
|||
"AbpSuiteExplanation1": "Suita ABP vă permite să construiţi pagini web în decurs de câteva minute. Este un instrument global .NET Core care poate fi instalat din linia de comandă.", |
|||
"AbpSuiteExplanation2": "Poate crea o nouă soluţie ABP, genera paginii CRUD începând de la baza de date şi până la front-end. Pentru o prezentare tehnică consultaţi <a href=\"{0}\">documentul</a>", |
|||
"FastEasy": "Rapid şi usor", |
|||
"AbpSuiteExplanation3": "Suita ABP vă permite să creaţi pagini CRUD cu uşurinţă. Trebuie doar să vă definiţi entitatea şi proprietăţile sale, şi să lăsaţi restul în seama suitei ABP! Suita ABP generează tot codul necesar pentru pagina dumneavoastră CRUD în câteva secunde. Suportă interfeţe de utilizator Angular, MVC şi Blazor.", |
|||
"RichOptions": "Opţiuni ample", |
|||
"AbpSuiteExplanation4": "Suita ABP suportă multiple opţiuni UI precum <a href=\"https://docs.microsoft.com/en-us/aspnet/core/razor-pages\">Pagini Razor</a> şi <a href=\"https://angular.io\">Angular</a>. Suportă de asemenea şi baze de date multiple, precum <a href=\"https://www.mongodb.com\">MongoDB</a> şi toate bazele de date suportate de <strong>EntityFramework Core</strong> (MS SQL Server, Oracle, MySql, PostgreSQL şi <a href=\"https://docs.microsoft.com/en-us/ef/core/providers/?tabs=dotnet-core-cli\">altele</a>).", |
|||
"AbpSuiteExplanation5": "Partea bună este că dumneavoastră nu trebuie să vă faceţi griji despre aceste opţiuni. Suita ABP înţelege tipul proiectului dumneavoastră şi generează cod pentru proiectul dumneavoastră şi îl plasează în locul potrivit din proiect.", |
|||
"SourceCode": "Cod sursă", |
|||
"AbpSuiteExplanation6": "Suita ABP generează codul sursă pentru dumneavoastră! Nu generează fişiere magice pentru a genera pagina web. Suita ABP generează codul sursă petnru <strong>Entity, Repository, Application Service, Code First Migration, JavaScript/TypeScript şi CSHTML/HTML</strong> şi interfeţele necesare de asemenea. Suita ABP generează de asemenea codul respectând <strong>Cele mai bune practici</strong> ale dezvoltării software, deci nu trebuie să vă faceţi griji în legătură cu calitatea codului generat.", |
|||
"AbpSuiteExplanation7": "Deoarece aveţi codul sursă al blocurilor de construcţie ale paginii CRUD generate în straturile de aplicaţie corecte, puteţi modifica cu uşurinţă codul sursă şi puteţi injecta logica personalizată/business a codului generat.", |
|||
"CrossPlatform": "Platformă transversală", |
|||
"AbpSuiteExplanation8": "Suita ABP este construită cu .NET Core şi este o platformă transversală. Se execută ca o aplicaţie web pe calculatorul dumneavoastră local. O puteţi rula pe <strong>Windows</strong>, <strong>Mac</strong> şi <strong>Linux</strong>", |
|||
"OtherFeatures": "Alte funcţionalităţi", |
|||
"OtherFeatures1": "Actualizeată pachetele <strong>NuGet</strong> şi <strong>NPM</strong> din soluţia dumneavoastră cu uşurinţă.", |
|||
"OtherFeatures2": "Regenerează paginile deja generate de la zero.", |
|||
"OtherFeatures3": "Crează noi soluţii", |
|||
"ThanksForCreatingProject": "Mulţumim pentru că v-aţi creat proiectul!", |
|||
"HotToRunSolution": "Cum să rulaţi soluţia dumneavoastră?", |
|||
"HotToRunSolutionExplanation": "Consultaţi documentul de noţiuni de bază pentru a învăţa cum să vă configuraţi şi rulaţi aplicaţia.", |
|||
"GettingStarted": "Noţiuni de bază", |
|||
"WebAppDevTutorial": "Tutorial Web App Dev", |
|||
"WebAppDevTutorialExplanation": "Consultaţi tutorialul de dezvoltare a aplicaţiilor web pentru un exemplu de dezvoltare pas cu pas.", |
|||
"Document": "Document", |
|||
"UsingABPSuiteToCURD": "Folosind suita ABp pentru generarea şi utilizarea paginilor CRUD", |
|||
"SeeABPSuiteDocument": "Consultaţi documentaţia suitei ABP pentru a învăţa utilizarea suitei ABP.", |
|||
"AskQuestionsOnSupport": "Puteţi adresa întrebări pe ABP Commercial Support.", |
|||
"Documentation": "Documentaţie", |
|||
"SeeModulesDocument": "Consultaţi documentul modulelor pentru lista tuturor modulelor comerciale (pro) şi documentele acestora.", |
|||
"Pricing": "Preţuri", |
|||
"PricingExplanation": "Alegeţi caracteristicile şi funcţionalitatea nevoilor afacerii dumneavoastră acum. Actualizaţi-le cu uşurinţă pe măsură ce afacerea dumneavoastră se dezvoltă.", |
|||
"Team": "Team", |
|||
"Business": "Business", |
|||
"Enterprise": "Enterprise", |
|||
"Custom": "Personalizat", |
|||
"IncludedDeveloperLicenses": "Licenţe de dezvoltator incluse", |
|||
"CustomLicenceOrAdditionalServices": "Aveţi nevoie de o licenţă personalizată sau de servicii suplimentare?", |
|||
"CustomOrVolumeLicense": "Licenţă personalizată sau de volum", |
|||
"LiveTrainingSupport": "Instruire şi asistenţă în timp real", |
|||
"AndMore": "şi multe altele", |
|||
"AdditionalDeveloperLicense": "Licenţă suplimentară de dezvoltator", |
|||
"ProjectCount": "Număr de proiecte", |
|||
"AllProModules": "Toate modulele pro", |
|||
"AllProThemes": "Toate temele pro", |
|||
"AllProStartupTemplates": "Toate şabloanele de pornire pro", |
|||
"SourceCodeOfAllModules": "Codul sursă al tuturor modulelor", |
|||
"SourceCodeOfAllThemes": "Codul sursă al tuturor temelor", |
|||
"PerpetualLicense": "Licenţă perpetuă", |
|||
"UnlimitedServerDeployment": "Implementări nelimitate a serverului", |
|||
"YearUpgrade": "actualizare de 1 an", |
|||
"YearPremiumForumSupport": "Asistenţă premium pe forum de 1 an", |
|||
"ForumSupportIncidentCountYear": "Asistenţă pe forum număr de incidente/an", |
|||
"PrivateTicketEmailSupport": "Tichet privat şi asistenţă pe email", |
|||
"BuyNow": "Cumpără acum", |
|||
"PayViaAmexCard": "Cum pot plăti folosind cardul meu AMEX?", |
|||
"PayViaAmexCardDescription": "Procesatorul implicit 'Iyzico' s-ar putea să refuze anumite carduri AMEX ca măsură de securitate. În acest caz, puteţi plăti prin procesatorul alternativ '2Checkout'.", |
|||
"ThankYou": "Vă mulţumim", |
|||
"InvalidReCaptchaErrorMessage": "A intervenit o eroare în verificarea reCAPTCHA. Vă rugăm să încercaţi din nou.", |
|||
"CompanyName": "Nume companie", |
|||
"YourCompanyName": "Numele companiei dumneavoastră", |
|||
"FirstName": "Nume", |
|||
"LastName": "Prenume", |
|||
"Optional": "Opţional", |
|||
"YourFirstName": "Numele dumneavoastră", |
|||
"YourLastName": "Prenumele dumneavoastră", |
|||
"SpecialOffer": "Ofertă specială", |
|||
"SpecialOfferMessage": "Grăbiţi-vă! Preţurile sunt disponibile pentru o perioadă limitată.", |
|||
"DiscountRequest": "Cerere de discount", |
|||
"DiscountRequestDescribeCustomerQuestion": "Care din următoarele vă descrie?", |
|||
"DiscountRequestStudentEmailMessage": "Adresa de email trebuie să conţină 'edu'.", |
|||
"DiscountRequestDeveloperCount": "Câţi dezvoltatori aveţi?", |
|||
"DiscountRequestDeveloperCountExceedMessage": "Nu furnizăm licenţe reduse pentru companii care au peste {0} dezvoltatori.", |
|||
"DiscountRequestOrganizationName": "Numele companiei/organizaţiei/şcolii", |
|||
"Website": "Site web", |
|||
"GithubUsername": "Nume de utilizator GitHub", |
|||
"PhoneNumber": "Număr de telefon", |
|||
"Country": "Ţara", |
|||
"DescribeABPCommercialUsage": "Descrieţi proiectul pe care folosiţi să-l dezvoltaţi pe baza APB Commercial", |
|||
"DiscountRequestCertifyInformationMessage": "Certific că toate informaţiile sunt adevărate şi corecte.", |
|||
"DiscountRequestReceived": "Am primit solicitarea dumneavoastră de reducere.", |
|||
"DiscountRequestStatusMessage": "Vă vom răspunde după verificarea informaţiilor pe care le-aţi furnizat.", |
|||
"MVCOrRazorPages": "MVC (Razor Pages)", |
|||
"Angular": "Angular", |
|||
"Blazor": "Blazor", |
|||
"New": "New", |
|||
"MongoDB": "MongoDB", |
|||
"EBookDDD": "E-Book Domain Driven Design", |
|||
"PracticalGuideForImplementingDDD": "Această carte reprezintă un ghid practic pentru implementarea proiectării bazate pe domeniu în ABP Framework.", |
|||
"IntroducingDDD": "Introducing Domain Driven Design", |
|||
"DDDLayersAndCleanArchitecture": "DDD Layers & Clean Architecture", |
|||
"LayeringOfADotnetSolution": "Layering of a .NET Solution", |
|||
"ImplementingDDDBuildingBlocks": "Implementing DDD Building Blocks", |
|||
"DomainVsApplicationLogic": "Domain Logic vs Application Logic", |
|||
"SamplesAndDiscussions": "Exemple & Discuţii", |
|||
"Free": "Gratuit", |
|||
"Download": "Descarcă", |
|||
"DDDEBook": "DDD E-book", |
|||
"ImplementingDDD": "Implementing Domain Driven Design", |
|||
"DDDBookExplanation": "Ghid practic pentru implementarea proiectării bazate pe domeniu în ABP Framework.", |
|||
"Overview": "Prezentare generală", |
|||
"DDDBookPracticalGuide": "Acesta este un ghid practic pentru implementarea proiectării bazate pe domeniu (PBD). În timp ce detaliile de implementare se bazeată pe infrastructura ABP, conceptele de bază, principiile şi modelele sunt aplicabile în orice fel de soluţie, chiar dacă nu este o soluţie .NET.", |
|||
"TableOfContents": "Cuprins", |
|||
"IntroductionToImplementingDDD": "Introducere în implementarea proiectării bazate pe domeniu", |
|||
"WhatIsDDD": "Ce este proiectarea bazată pe domeniu?", |
|||
"Implementation": "Implementare", |
|||
"TheBigPicture": "Imaginea de ansamblu", |
|||
"TheBuildingBlock": "The Building Block", |
|||
"ExampleUseCase": "Exemplu de utilizare", |
|||
"DomainAndApplicationLogic": "Domain Logic & Application Logic", |
|||
"Author": "Autor", |
|||
"PublishedOn": "Publicat în", |
|||
"Page": "Pagina", |
|||
"FreeEBook": "E-Book gratuit", |
|||
"EBookSignInForDownload": "Pentru a descărca e-book-ul trebuie să vă autentificaţi", |
|||
"SignIn": "Autentificare", |
|||
"Or": "Sau", |
|||
"TellUsAboutYourself": "Spuneţi-ne despre dumneavoastră", |
|||
"Surname": "Nume", |
|||
"DoYouAgreePrivacyPolicy": "Sunt de acord cu <a href=\"/TermsConditions\">Termenii şi condiţiile<a/> şi <a href=\"/Privacy\">Politica de confidenţialitate</a>.", |
|||
"VolosoftMarketingInformationMessage": "Sunt de acord să primesc informaţii, sfaturi şi oferte despre soluţii pentru afaceri şi organizaţii şi alte produse şi servicii Volosoft.", |
|||
"VolosoftSharingInformationMessage": "Sunt de acord ca Volosoft să partajeze informaţiile mele cu partenerii selectaţi astfel încât să primesc informaţii relevante despre produsele şi serviciile lor.", |
|||
"WeWillSendYouADownloadLink": "Un link pentru descărcarea e-book-ului a fost trimis către {0}.<br/> Verificaţi-vă căsuţele de inbox / junk / spam!", |
|||
"InvalidFormInputs": "Vă rugăm să introduceţi informaţia validă specificată în formular.", |
|||
"DDDBookEmailBody": "Vă mulţumim. <br /> Pentru a descărca e-book-ul, <a href=\"{0}\">click aici</a>.", |
|||
"FreeDDDEBook": "DDD E-Book gratuit" |
|||
} |
|||
} |
|||
@ -0,0 +1,147 @@ |
|||
{ |
|||
"culture": "ro-RO", |
|||
"texts": { |
|||
"Permission:CommunityArticle": "Articol comunitar", |
|||
"Permission:Edit": "Modifică", |
|||
"Waiting": "În aşteptare", |
|||
"Approved": "Aprobat", |
|||
"Rejected": "Respins", |
|||
"Wait": "Pune în aşteptare", |
|||
"Approve": "Aprobă", |
|||
"Reject": "Respinge", |
|||
"ReadArticle": "Citeşte articolul", |
|||
"Status": "Starea", |
|||
"ContentSource": "Sursa conţinutului", |
|||
"Details": "Detalii", |
|||
"Url": "Url", |
|||
"Title": "Titlu", |
|||
"CreationTime": "Data creării", |
|||
"Save": "Salvează", |
|||
"SameUrlAlreadyExist": "Dacă doriţi să adăugaţi acest articol, ar trebui să schimbaţi adresa Url, întrucât aceeaşi adresa url există deja!", |
|||
"UrlIsNotValid": "Url-ul nu este valid.", |
|||
"UrlNotFound" : "Url nu a fost găsit.", |
|||
"UrlContentNotFound": "Conţinutul url-ului nu a fost găsit.", |
|||
"Summary": "Rezumat", |
|||
"MostRead": "Cele mai citite", |
|||
"Latest": "Recente", |
|||
"ContributeAbpCommunity": "Contribuiţi la comunitatea ABP", |
|||
"SubmitYourArticle": "Trimiteţi-vă postul", |
|||
"ContributionGuide": "Ghid de contribuţie", |
|||
"BugReport": "Raportează eroare", |
|||
"SeeAllArticles": "Vezi toate postările", |
|||
"WelcomeToABPCommunity!": "Bun venit în comunitatea ABP!", |
|||
"MyProfile": "Profilul meu", |
|||
"MyOrganizations": "Organizaţia mea", |
|||
"EmailNotValid": "Vă rugăm să introduceţi o adresa de email validă.", |
|||
"FeatureRequest": "Cerere de funcţionalitate", |
|||
"CreateArticleTitleInfo": "Titlul postării care va apărea în lista postărilor.", |
|||
"CreateArticleSummaryInfo": "Un scurt rezumat al postării care va apărea în lista postărilor.", |
|||
"CreateArticleCoverInfo": "Pentru crearea unei postări eficace, adăugaţi o poză de copertă. Încărcaţi imagini cu raport de aspect 16:9 pentru cea mai bună vizualizare. Dimensiunea maximă a fişierului: 1MB.", |
|||
"ThisExtensionIsNotAllowed": "Această extensie nu este permisă.", |
|||
"TheFileIsTooLarge": "Dimensiunea fişierului este prea mare.", |
|||
"GoToTheArticle": "Vezi articolul", |
|||
"Contribute": "Contribuie", |
|||
"OverallProgress": "Progres total", |
|||
"Done": "Gata", |
|||
"Open": "Deschide", |
|||
"Closed": "Închis", |
|||
"LatestQuestionOnThe": "Ultima întrebare de pe", |
|||
"Stackoverflow": "Stackoverflow", |
|||
"Votes": "voturi", |
|||
"Answer": "Răspunde", |
|||
"Views": "vizualizări", |
|||
"Answered": "Răspunse", |
|||
"WaitingForYourAnswer": "În aşteptarea răspunsului dumneavoastră", |
|||
"Asked": "întrebate", |
|||
"AllQuestions": "Toate întrebările", |
|||
"NextVersion": "Următoarea versiune", |
|||
"MilestoneErrorMessage": "Nu s-au putut obţine detaliile de referinţă actuale de pe Github.", |
|||
"QuestionItemErrorMessage": "Nu s-au putut obţine detaliile de referinţă actuale de pe Stackoverflow.", |
|||
"Oops": "Oops!", |
|||
"CreateArticleSuccessMessage": "Articolul a fost trimis cu succes. Va fi publicat după ce va fi revizuit de un administrator al site-ului.", |
|||
"ChooseCoverImage": "Alegeţi o poză de copertă...", |
|||
"CoverImage": "Poză de copertă", |
|||
"ShareYourExperiencesWithTheABPFramework": "Împărtăşiţi-vă experienţele cu ABP Framework!", |
|||
"Optional": "Opţional", |
|||
"UpdateUserWebSiteInfo": "Exemplu: https://johndoe.com", |
|||
"UpdateUserTwitterInfo": "Exemplu: johndoe", |
|||
"UpdateUserGithubInfo": "Exemplu: johndoe", |
|||
"UpdateUserLinkedinInfo": "Exemplu: https://www.linkedin.com/...", |
|||
"UpdateUserCompanyInfo": "Exemplu: Volosoft", |
|||
"UpdateUserJobTitleInfo": "Exemplu: Software Developer", |
|||
"UserName": "Nume de utilizator", |
|||
"Company": "Companie", |
|||
"PersonalWebsite": "Site web personal", |
|||
"RegistrationDate": "Data înregistrării", |
|||
"Social": "Social", |
|||
"Biography": "Biografie", |
|||
"HasNoPublishedArticlesYet": "nu a publicat niciun articol încă", |
|||
"Author": "Autor", |
|||
"LatestGithubAnnouncements": "Ultimele anunţuri de pe Github", |
|||
"SeeAllAnnouncements": "Vezi toate anunţurile", |
|||
"LatestBlogPost": "Ultima postare de pe blog", |
|||
"Edit": "Modifică", |
|||
"ProfileImageChange": "Schimbă poza de profil", |
|||
"BlogItemErrorMessage": "Nu s-au putut obţine detaliile ultimei postări de pe from ABP.", |
|||
"PlannedReleaseDate": "Data planificată de lansare", |
|||
"CommunityArticleRequestErrorMessage": "Nu s-a putut obţine ultima cerere de articol de pe Github.", |
|||
"ArticleRequestFromGithubIssue": "Momentan nu există cereri de articole.", |
|||
"LatestArticles": "Ultimele postări", |
|||
"ArticleRequests": "Cereri de articole", |
|||
"AllArticleRequests": "Vedeţi toate cererile de articole", |
|||
"SubscribeToTheNewsletter": "Abonaţi-vă la newsletter-ul nostru", |
|||
"NewsletterEmailDefinition": "Obţineţi informaţii despre evenimentele din ABP, cum ar fi lansări noi, surse gratuite, articole şi multe altele.", |
|||
"NoThanks": "Nu, mulţumesc", |
|||
"MaybeLater": "Poate mai târziu", |
|||
"JoinOurArticleNewsletter": "Abonaţi-vă la newsletter-ul nostru de articole", |
|||
"Community": "Comunitate", |
|||
"Marketing": "Marketing", |
|||
"CommunityPrivacyPolicyConfirmation": "Sunt de acord cu termenii şi condiţiile şi <a href=\"https://commercial.abp.io/Privacy\">politica de confidenţialitate</a>.", |
|||
"ArticleRequestMessageTitle": "<a href=\"https://github.com/abpframework/abp/issues/new\">Deschideţi o problemă pe</a> GitHub pentru a solicita un articol/tutorial pe care doriţi să îl vedeţi pe acest site web.", |
|||
"ArticleRequestMessageBody": "Aici, lista articolelor solicitate de către comunitate. Doriţi să scrieţi un articol solicitat? Vă rugăm să daţi click pe cerere şi să vă alăturaţi discuţiei.", |
|||
"Language": "Limba", |
|||
"CreateArticleLanguageInfo": "Limba pentru conţinutul postării.", |
|||
"VideoPost": "Post video", |
|||
"Article": "Articol", |
|||
"Read": "Citeşte", |
|||
"CreateGithubArticleUrlInfo": "Adresa URL originală GitHub a articolului.", |
|||
"CreateVideoContentUrlInfo": "Adresa URL originală YouTube a articolului", |
|||
"CreateExternalArticleUrlInfo": "Adresa URL originală externă a articolului.", |
|||
"VideoContentForm": "Trimite videoclip pe YouTube", |
|||
"GithubPostForm": "Trimite articol pe GitHub", |
|||
"ExternalPostForm": "Trimite un conţinut extern", |
|||
"HowToPost": "Cum postez?", |
|||
"Posts": "Postări", |
|||
"VideoUrl": "Url Video", |
|||
"GithubArticleUrl": "Adresa Url articol Github", |
|||
"ExternalArticleUrl": "Adresa Url externă Article", |
|||
"CreatePostCoverInfo": "Pentru crearea unei postări eficace, adăugaţi o poză de copertă. Încărcaţi imagini cu raport de aspect 16:9 pentru cea mai bună vizualizare. Dimensiunea maximă a fişierului: 1MB.", |
|||
"ThankYouForContribution": "Vă mulţumim pentru că aţi contribuit la comunitatea ABP.", |
|||
"GithubArticle": "Articol GitHub", |
|||
"GithubArticleSubmitStepOne": "<span class=\"font-weight-bold\">1.</span> Scrieţi un articol pe orice repository GitHub folosind formatul Markup. <a target=\"_blank\" href=\"https://github.com/abpframework/abp/blob/dev/docs/en/Community-Articles/2020-12-04-Event-Organizer/Post.md\">exemplu</a>", |
|||
"GithubArticleSubmitStepTwo": "<span class=\"font-weight-bold\">2.</span> Trimiteţi Url-ul articolului folosind formularul.", |
|||
"GithubArticleSubmitStepThree": "<span class=\"font-weight-bold\">3.</span> Articolul dumneavoastră va fi redat în acest site web.", |
|||
"YoutubeVideo": "Videoclip YouTube", |
|||
"YoutubeVideoSubmitStepOne": "<span class=\"font-weight-bold\">1.</span> Publicaţi-vă videoclipul pe YouTube.", |
|||
"YoutubeVideoSubmitStepTwo": "<span class=\"font-weight-bold\">2.</span> Trimieţi Url-ul videoclipului folosind formularul.", |
|||
"YoutubeVideoSubmitStepThree": "<span class=\"font-weight-bold\">3.</span> Vizitatorii vor putea să vă vizioneze conţinutul video direct de pe acest site web.", |
|||
"ExternalContent": "Conţinut extern", |
|||
"ExternalContentSubmitStepOne": "<span class=\"font-weight-bold\">1.</span> Creaţi conţinut pe orice platformă publică (mediu, blogul dumneavoastră sau oriunde doriţi).", |
|||
"ExternalContentSubmitStepTwo": "<span class=\"font-weight-bold\">2.</span> Trimiteţi-vă conţinutul URL folosind formularul.", |
|||
"ExternalContentSubmitStepThree": "<span class=\"font-weight-bold\">3.</span> Vizitatorii sunt redirecţionaţi către conţinutul de pe site-ul web original.", |
|||
"ChooseYourContentType": "Vă rugăm să alegeţi modalitatea pri ncare vreţi să vă adăugaţi conţinutul.", |
|||
"PostContentViaGithub": "Vreau să adaug articolul meu de pe <span class=\"font-weight-bold\"><i class=\"fa fa-github\"></i> GitHub</span> conform cu regulile de reducere.", |
|||
"PostContentViaYoutube": "Vreau să distribui videoclipurile mele disponibile de pe <span class=\"font-weight-bold\"><i class=\"fa fa-youtube\"></i> YouTube</span> aici.", |
|||
"PostContentViaExternalSource": "Vreau să adaug conţinutul pe care l-am publicat pe <span class=\"font-weight-bold\">altă platformă</span> aici.", |
|||
"GitHubUserNameValidationMessage": "Numele de utilizator al contului dumneavoastră de GitHub nu poate conţine spaţii goale, vă rugăm să verificaţi că numele de utilizator al contului dumneavoastră de GitHub este corect.", |
|||
"PersonalSiteUrlValidationMessage": "Url-ul site-ului dumneavoastră personal nu poate conţine spaţii goale, vă rugăm să verificaţi ca Url-ul site-ului dumneavoastră personal este corect.", |
|||
"TwitterUserNameValidationMessage": "Url-ul dumneavoastră de Twitter nu poate conţine spaţii goale, vă rugăm să verificaţi ca Url-ul de Twitter este corect.", |
|||
"LinkedinUrlValidationMessage": "Url-ul dumneavoastră de LinkedIn nu poate conţine spaţii goale, vă rugăm să verificaţi ca Url-ul de LinkedIn este corect.", |
|||
"NoPostsFound": "Nu s-au găsit postări!", |
|||
"SearchInPosts": "Caută în postări...", |
|||
"MinimumSearchContent": "Trebuie să introduceţi cel putin 3 caractere!", |
|||
"Volo.AbpIo.Domain:060001": "Sursa URL(\"{ArticleUrl}\") nu este URL GitHub", |
|||
"Volo.AbpIo.Domain:060002": "Conţinutul articolului nu este disponibil din resursa de pe GitHub(\"{ArticleUrl}\").", |
|||
"Volo.AbpIo.Domain:060003": "Nu a fost găsit conţinutul articolului!" |
|||
} |
|||
} |
|||
@ -0,0 +1,5 @@ |
|||
{ |
|||
"culture": "ro-RO", |
|||
"texts": { |
|||
} |
|||
} |
|||
@ -0,0 +1,5 @@ |
|||
{ |
|||
"culture": "ro-RO", |
|||
"texts": { |
|||
} |
|||
} |
|||
@ -0,0 +1,278 @@ |
|||
{ |
|||
"culture": "ro-RO", |
|||
"texts": { |
|||
"GetStarted": "Începeţi - Şabloane de pornire", |
|||
"Create": "Creează", |
|||
"NewProject": "Proiect nou", |
|||
"DirectDownload": "Descărcare directă", |
|||
"ProjectName": "Nume proiect", |
|||
"ProjectType": "Tip proiect", |
|||
"DatabaseProvider": "Provider bază de date", |
|||
"DatabaseManagementSystem": "Sistem de administrare bază de date", |
|||
"NTier": "N-Tier", |
|||
"IncludeUserInterface": "Include interfaţa userului", |
|||
"CreateNow": "Creează acum", |
|||
"TheStartupProject": "Proiectul de pornire", |
|||
"Tutorial": "Tutorial", |
|||
"UsingCLI": "Folosind CLI", |
|||
"SeeDetails": "Vedeţi detalii", |
|||
"AbpShortDescription": "ABP Framework este o infrastructură completă pentru crearea aplicaţiilor moderne web prin folosirea celor mai bune practici şi convenţii de dezvoltare software.", |
|||
"SourceCodeUpper": "COD SURSĂ", |
|||
"LatestReleaseLogs": "Cele mai recente jurnale de lansare", |
|||
"Infrastructure": "Infrastructura", |
|||
"Architecture": "Arhitectura", |
|||
"Modular": "Modular", |
|||
"DontRepeatYourself": "Nu vă repetaţi", |
|||
"DeveloperFocused": "Axat pe dezvoltator", |
|||
"FullStackApplicationInfrastructure": "Infrastructură de aplicaţii full stack.", |
|||
"DomainDrivenDesign": "Domain Driven Design", |
|||
"DomainDrivenDesignExplanation": "Proiectat şi dezvoltat pe baza modelelor şi principiilor DDD. Oferă un model stratificat pentru aplicaţia dumneavoastră.", |
|||
"Authorization": "Autorizare", |
|||
"AuthorizationExplanation": "Autorizare avansată pe bază de utilizator, rol şi sistem de permisiuni. Construit pe biblioteca Microsoft Identity.", |
|||
"MultiTenancy": "Multi-Tenancz", |
|||
"MultiTenancyExplanationShort": "Aplicaţii SaaS simplificate! Multi-Tenancy integrată de la baza de date până la UI.", |
|||
"CrossCuttingConcerns": "Cross Cutting Concerns", |
|||
"CrossCuttingConcernsExplanationShort": "Infrastructură completă pentru autorizare, validare, gestionarea excepţiilor, stocarea în cache, înregistrarea auditului, gestionarea tranzacţiilor şi multe altele.", |
|||
"BuiltInBundlingMinification": "Grupare şi minificare incorporate", |
|||
"BuiltInBundlingMinificationExplanation": "Nu este nevoie să utilizaţi instrumente externe pentru grupare şi minificare. ABP oferă un mod mai simplu, dinamic, puternic, modular şi incorporat!", |
|||
"VirtualFileSystem": "Sistem de fişiere virtuale", |
|||
"VirtualFileSystemExplanation": "Încorporaţi view-uri, scripturi, stiluri, imagini... in pachete/librării şi refolosiţi-le în diferite aplicaţii.", |
|||
"Theming": "Tematică", |
|||
"ThemingExplanationShort": "Utilizaţi şi personalizaţi tema UI standard, bazată pe UI, sau creaţi-o pe a dumneavoastră.", |
|||
"BootstrapTagHelpersDynamicForms": "Bootstrap Tag Helpers & Dynamic Forms", |
|||
"BootstrapTagHelpersDynamicFormsExplanation": "În loc să scrieţi manual detaliile repetate ale componentelor bootstrap, utilizaţi tag helperele ABP pentru a simplifica şi profita de inteligenţă. Construiţi rapid formulare de interfaţă bazate pe un model C# utilizând ajutorul pentru formulare dinamice.", |
|||
"HTTPAPIsDynamicProxies": "HTTP APIs & Dynamic Proxies", |
|||
"HTTPAPIsDynamicProxiesExplanation": "Expuneţi automat serviciile aplicaţiilor sub formă de API-uri HTTP şi folosiţi-le cu JavaScript dinamic si proxy C#.", |
|||
"CompleteArchitectureInfo": "Arhitectură modernă pentru a crea soluţii software care pot fi întreţinute.", |
|||
"DomainDrivenDesignBasedLayeringModelExplanation": "Vă ajută să implementaţi o arhitectură stratificată DDD şi să construiţi o bază de cod uşor de întreţinut.", |
|||
"DomainDrivenDesignBasedLayeringModelExplanationCont": "Oferă şabloane de pornire, abstractizări, clase de bază, servicii, documentaţie şi ghiduri pentru a vă ajuta să vă dezvoltaţi aplicaţia bazându-vă pe principiile şi tiparele DDD.", |
|||
"MicroserviceCompatibleModelExplanation": "Framework-ul de bază şi modulele pre-construite sunt proiectate având în vedere arhitectura microservice.", |
|||
"MicroserviceCompatibleModelExplanationCont": "Oferă infrastructură, integrări, exemple şi documentaţie pentru a implementa mai uşor soluţiile de microservicii, în timp ce nu aduce complexitate suplimentară dacă doriţi o aplicaţie monolitică.", |
|||
"ModularInfo": "ABP oferă un sistem de module care vă permite să dezvoltaţi module de aplicaţie reutilizabile, să vă conectaţi la evenimentele din ciclul de viaţă ale aplicaţiei şi să exprimaţi dependenţe între părţile centrale ale sistemului dumneavoastră.", |
|||
"PreBuiltModulesThemes": "Module şi teme pro-construite.", |
|||
"PreBuiltModulesThemesExplanation": "Modulele şi temele open source sunt gata de utilizare în aplicaţia dumneavoastră.", |
|||
"NuGetNPMPackages": "Pachete NuGet & NPM", |
|||
"NuGetNPMPackagesExplanation": "Distribuite sub formă de pachete NuGet & NPM. Uşor de instalat şi actualizat.", |
|||
"ExtensibleReplaceable": "Extensibil/Înlocuibil", |
|||
"ExtensibleReplaceableExplanation": "Toate serviciile şi modulele sunt dezvoltate pentru extensibilitate. Puteţi înlocui servicii, pagini, stiluri şi componente.", |
|||
"CrossCuttingConcernsExplanation2": "Menţineţi baza codului redusă, astfel încât să vă puteţi concentra asupra codului care e specific afacerii dumneavoastră.", |
|||
"CrossCuttingConcernsExplanation3": "Nu pierdeţi timp implementând cerinţe comune de aplicaţie pentru mai multe proiecte.", |
|||
"AuthenticationAuthorization": "Autentificare & Autorizare", |
|||
"ExceptionHandling": "Tratarea excepţiilor", |
|||
"Validation": "Validare", |
|||
"DatabaseConnection": "Conectare la baza de date", |
|||
"TransactionManagement": "Administrarea tranzacţiilor", |
|||
"AuditLogging": "Audit Logging", |
|||
"Caching": "Caching", |
|||
"Multitenancy": "Multitenancy", |
|||
"DataFiltering": "Filtrarea datelor", |
|||
"ConventionOverConfiguration": "Convention Over Configuration", |
|||
"ConventionOverConfigurationExplanation": "ABP implementează convenţii de aplicaţii comune în mod implicit, cu o configuraţie minimă sau zero.", |
|||
"ConventionOverConfigurationExplanationList1": "Auto înregistrează serviciile cunoscute pentru injectarea dependinţei..", |
|||
"ConventionOverConfigurationExplanationList2": "Expune serviciile aplicaţiei ca API-uri HTTP prin convenţii de denumire.", |
|||
"ConventionOverConfigurationExplanationList3": "Creează proxy-uri dinamice HTTP client pentru C# şi JavaScript.", |
|||
"ConventionOverConfigurationExplanationList4": "Oferă repository-uri implicite pentru entităţile dumneavoastră.", |
|||
"ConventionOverConfigurationExplanationList5": "Gestionează unitatea de lucru pe request web sau metodă de serviciu a aplicaţiei.", |
|||
"ConventionOverConfigurationExplanationList6": "Publică crearea, actualizarea şi ştergerea evenimentelor pentru entităţile dumneavoastră.", |
|||
"BaseClasses": "Clase de bază", |
|||
"BaseClassesExplanation": "Clase de bază pre-construite pentru tipare comune de aplicaţie.", |
|||
"DeveloperFocusedExplanation": "ABP este pentru dezvoltatori.", |
|||
"DeveloperFocusedExplanationCont": "Aceasta îşi propune să vă simplifice dezvoltarea zilnică de software, fără a vă restricţiona să scrieţi cod de nivel scăzut.", |
|||
"SeeAllFeatures": "Vedeţi toate funcţionalităţile", |
|||
"CLI_CommandLineInterface": "CLI (Command Line Interface)", |
|||
"CLI_CommandLineInterfaceExplanation": "Include un CLI pentru a vă ajuta să automatizaţi crearea de noi proiecte şi adăugarea de noi module.", |
|||
"StartupTemplates": "Proiecte de lansare", |
|||
"StartupTemplatesExplanation": "Diverse proiecte de lansare furnizează o soluţie complet configurată pentru a vă începe dezvoltarea.", |
|||
"BasedOnFamiliarTools": "Bazat pe instrumente familiare", |
|||
"BasedOnFamiliarToolsExplanation": "Construit şi integrat cu instrumente populare pe care le ştiţi deja. Curbă de învăţare joasă, adaptare uşoară, dezvoltare confortabilă.", |
|||
"ORMIndependent": "ORM Independent", |
|||
"ORMIndependentExplanation": "Framework-ul de bază este independent de ORM/bază de date şi poate funcţiona cu orice sursă de date. Furnizorii Entity Framework Core şi MongoDB sunt deja disponibili.", |
|||
"Features": "Exploraţi caracteristicile framework-ului ABP Framework", |
|||
"ABPCLI": "ABP CLI", |
|||
"Modularity": "Modularitate", |
|||
"BootstrapTagHelpers": "Bootstrap Tag Helpers", |
|||
"DynamicForms": "Formulare dinamice", |
|||
"BundlingMinification": "Grupare & Minificare", |
|||
"BackgroundJobs": "Background Jobs", |
|||
"BackgroundJobsExplanation": "Definiţi clase simple pentru a executa task-uri în fundal, aşezate în coadă. Folosiţi managerul de taskuri încorporat sau integraţi-l pe al dumneavoastră. Integrările <a href=\"{0}\">Hangfire</a> & <a href=\"{1}\">RabbitMQ</a> sunt deja disponibile.", |
|||
"DDDInfrastructure": "Infrastructură DDD", |
|||
"DomainDrivenDesignInfrastructure": "Infrastructură Domain Driven Design", |
|||
"AutoRESTAPIs": "Auto REST APIs", |
|||
"DynamicClientProxies": "Dynamic Client Proxies", |
|||
"DistributedEventBus": "Distributed Event Bus", |
|||
"DistributedEventBusWithRabbitMQIntegration": "Distributed Event Bus with RabbitMQ Integration", |
|||
"TestInfrastructure": "Infrastructură de test", |
|||
"AuditLoggingEntityHistories": "Jurnalul de audit şi istoricul entităţilor", |
|||
"ObjectToObjectMapping": "Mapare obiect la obiect", |
|||
"ObjectToObjectMappingExplanation": "Abstractizarea <a href=\"{0}\">mapării obiect la obiect</a> cu integrare AutoMapper.", |
|||
"EmailSMSAbstractions": "Abstractizări Email & SMS", |
|||
"EmailSMSAbstractionsWithTemplatingSupport": "Abstractizări de Email & SMS cu asistenţă pentru modelare", |
|||
"Localization": "Localizare", |
|||
"SettingManagement": "Administrarea setărilor", |
|||
"ExtensionMethods": "Metode de extindere", |
|||
"ExtensionMethodsHelpers": "Metode de extindere & Ajutoare", |
|||
"AspectOrientedProgramming": "Programare orientată spre aspect", |
|||
"DependencyInjection": "Injectarea de dependinţe", |
|||
"DependencyInjectionByConventions": "Injectarea dependinţei prin convenţii", |
|||
"ABPCLIExplanation": "ABP CLI (Command Line Interface) este un instrument de linie de comandă pentru efectuarea câtorva operaţii comune pentru soluţiile bazate pe ABP.", |
|||
"ModularityExplanation": "ABP asigură o infrastructură completă pentru construirea modulelor aplicaţiei dumneavoastră, care pot avea entităţi, servicii, integrări cu baze de date, API-uri, componente UI şi aşa mai departe..", |
|||
"MultiTenancyExplanation": "ABP nu numai că acceptă dezvoltarea de aplicaţii multi-tenant, dar, de asemenea, face ca şi codul dumneavoastră să nu fie în mare parte conştient de multi-tenancy.", |
|||
"MultiTenancyExplanation2": "Poate detecta automat tenantul curent, izola datele unor tenanţi diferiţi unul de celălalt.", |
|||
"MultiTenancyExplanation3": "Acceptă o singură bază de date, bază de date per tenant şi abordări hibride.", |
|||
"MultiTenancyExplanation4": "Vă focusaţi pe codul dumneavoastră şi lăsaţi framework-ul să se ocupe de multi-tenancy pentru dumneavoastră.", |
|||
"BootstrapTagHelpersExplanation": "În loc să scrieţi manual detaliile repetate ale componentelor bootstrap, folosiţi tag helperele ABP pentru a simplifica şi profita de inteligenţă. Puteţi folosi cu siguranţă Bootstrap ori de câte ori aveţi nevoie de el.", |
|||
"DynamicFormsExplanation": "Formulare dinamice & tag helpere de intrare pot crea formularul complet dintr-o clasă C# ca model.", |
|||
"AuthenticationAuthorizationExplanation": "Opţiuni variate de autentificare şi autorizare integrate cu ASP.NET Core Identity & IdentityServer4. Furnizează un sistem de permisiuni extensibil şi detaliat.", |
|||
"CrossCuttingConcernsExplanation": "Nu vă repetaţi pentru a implementa din nou şi din nou toate aceste lucruri obişniuite. Concentraţi-vă pe codul dumneavoastră de business şi lăsaţi ABP să le automatizeze prin convenţii.", |
|||
"DatabaseConnectionTransactionManagement": "Conectare la baza de date & Gestionarea tranzacţiilor", |
|||
"CorrelationIdTracking": "Correlation-Id Tracking", |
|||
"BundlingMinificationExplanation": "ABP oferă un sistem simplu, dinamic, puternic, modular şi încorporat de grupare şi minimizare.", |
|||
"VirtualFileSystemnExplanation": "Sistemul fişierelor virtuale face posibilă administrare fişierelor care nu există fizic pe sistemul de fişiere (disk). Este folosit în principal pentru a încorpora fişiere (js, css, images, cshtml...) în ansambluri şi să le folosească sub formă de fişiere fizice în timpul rulării.", |
|||
"ThemingExplanation": "Sistemul de teme permite dezvoltarea aplicaţiei & modulelor independente de tema prin definirea unui set comun de librării şi aspecte de bază, bazate pe ultimul framework Bootstrap.", |
|||
"DomainDrivenDesignInfrastructureExplanation": "O infrastructură completă pentru construirea aplicaţiilor stratificate, bazată pe tipare & principii Domain Driven Design;", |
|||
"Specification": "Specificaţie", |
|||
"Repository": "Repository", |
|||
"DomainService": "Domain Service", |
|||
"ValueObject": "Value Object", |
|||
"ApplicationService": "Application Service", |
|||
"DataTransferObject": "Obiect de transfer de date", |
|||
"AggregateRootEntity": "Aggregate Root, Entity", |
|||
"AutoRESTAPIsExplanation": "ABP poate configura automat serviciile aplicaţiei sub formă de controllere API prin convenţie.", |
|||
"DynamicClientProxiesExplanation": "Folosiţi-vă cu uşurinţă API-urile din JavaScript şi clienţi C#.", |
|||
"DistributedEventBusWithRabbitMQIntegrationExplanation": "Publicaţi şi utilizaţi cu uşurinţă evenimentele distribuite utilizând Distributed Event Bus încorporat cu integrarea RabbitMQ disponibilă.", |
|||
"TestInfrastructureExplanation": "Framework-ul a fost dezvoltat cu testarea unităţii şi integrării în minte. Vă oferă clase de bază pentru a o uşura. Şabloanele de pornire sunt pre-configurate pentru testare.", |
|||
"AuditLoggingEntityHistoriesExplanation": "Jurnal de audit încorporat pentru aplicaţii critice pentru afaceri. Solicitare, serviciu, jurnal de audit la nivel de metodă şi istoric de entităţi cu detalii la nivel de proprietate.", |
|||
"EmailSMSAbstractionsWithTemplatingSupportExplanation": "Abstractizările IEmailSender şi ISmsSender decuplează logica aplicaţiei de infrastructură. Sistemul avansat de şabloane de email permite crearea şi localizarea şabloanelor de email şi utilizarea lor cu uşurinţă ori de câte ori este necesar.", |
|||
"LocalizationExplanation": "Sistemul de localizare vă permite să creaţi resurse în JSON simplu şi să le folosiţi pentru a vă localiza UI-ul dumneavoastră. Suportă sisteme avansate precum moştenirea, extinderea, şi integrarea cu JavaScript în timp ce e pe deplin compatibilă cu sistemul de localizare al AspNet Core.", |
|||
"SettingManagementExplanation": "Definiţi setări pentru aplicaţia dumneavoastră şi 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": "Furnizează o infrastructură confortabilă pentru crearea proxy-urilor dinamice şi implementarea programării orientată aspect. Interceptează orice clasă şi execută codul dumneavoastră înainte & după orice executare de metodă.", |
|||
"DependencyInjectionByConventionsExplanation": "Nu este nevoie să vă înregistraţi clasele pentru injectarea manuală a dependinţelor. Înregistrează în mod automat tipurile de servicii comune prin convenţie. Pentru alte tipuri de servicii, puteţi folosi interfeţe şi atribute pentru a o face mai uşor si pe loc.", |
|||
"DataFilteringExplanation": "Definiţi şi utilizaţi filtre de date care sunt aplicate automat atunci când interogaţi entităţi din baza de date. Filtre Soft Delete & MultiTenant sunt prevăzute în mod implicit atunci când implementaţi interfeţe simple.", |
|||
"PublishEvents": "Publicaţi evenimente", |
|||
"HandleEvents": "Gestionaţi evenimente", |
|||
"AndMore": "şi multe altele...", |
|||
"Code": "Cod", |
|||
"Result": "Rezultat", |
|||
"SeeTheDocumentForMoreInformation": "Consultaţi <a href=\"{1}\">{0} documentul</a> pentru mai multe informaţii", |
|||
"IndexPageHeroSection": "<span class=\"first-line shine\"><strong>open source</strong></span><span class=\"second-line text-uppercase\">Web Application<br />Framework </span><span class=\"third-line shine2\"><strong>pentru asp.net core</strong></span>", |
|||
"UiFramework": "Framework UI", |
|||
"EmailAddress": "Adresă de email", |
|||
"Mobile": "Mobil", |
|||
"ReactNative": "React nativ", |
|||
"Strong": "Puternic", |
|||
"Complete": "Complet", |
|||
"BasedLayeringModel": "Based Layering Model", |
|||
"Microservice": "Microserviciu", |
|||
"Compatible": "Compatibil", |
|||
"MeeTTheABPCommunityInfo": "Misiunea noastră este de a crea un mediu în care dezvoltatorii să se ajute reciproc cu articole, tutoriale, studii de caz etc. şi să cunoască oameni cu aceleaşi idei.", |
|||
"JoinTheABPCommunityInfo": "Implicaţi-vă într-o comunitate vibrantă şi deveniţi un contribuitor la ABP Framework!", |
|||
"AllArticles": "Toate articolele", |
|||
"SubmitYourArticle": "Trimiteţi-vă articolul", |
|||
"DynamicClientProxyDocument": "Consultaţi documentaţia pentru client proxy dinamic pentru <a href=\"{0}\">JavaScript</a> & <a href=\"{1}\">C#</a>.", |
|||
"EmailSMSAbstractionsDocument": "Consultaţi documentele de <a href=\"{0}\">emailing</a> and <a href=\"{1}\">trimiterea de SMS</a> pentru mai multe informaţii.", |
|||
"CreateProjectWizard": "Acest formular crează un proiect nou începând cu şablonul de pornire, care este configurat corespunzător pentru a începe direct cu proiectul.", |
|||
"TieredOption": "Crează o soluţie pe mai multe niveluri în care straturile Web API şi HTTP sunt separate fizic. Dacă nu este bifată, creează o soluţie stratificată mai puţin complexă şi potrivită pentru majoritatea scenariilor.", |
|||
"SeparateIdentityServerOption": "Separă partea serverului în două aplicaţii: prima este pentru serverul de identitate, iar a doua pentru serverul dumneavoastră de HTTP API.", |
|||
"UseslatestPreVersion": "Foloseşte ultima versiune pre-lansare", |
|||
"ReadTheDocumentation": "<span class=\"text-primary\">Citiţi</span><span class=\"text-success\"> Documentaţia</span>", |
|||
"Documentation": "Documentaţie", |
|||
"GettingStartedTutorial": "Tutorial de pornire", |
|||
"ApplicationDevelopmentTutorial": "Tutorial de dezvoltare a aplicaţiei", |
|||
"TheStartupTemplate": "Şablonul de pornire", |
|||
"InstallABPCLIInfo": "ABP CLI este cea mai rapidă metodă de a porni o soluţie nouă cu framework-ul ABP. Instalaţi ABP CLI folosind o fereastră de linii de comandă:", |
|||
"DifferentLevelOfNamespaces": "Puteţi folosi nivele diferite de spaţii de nume; e.g. BookStore, Acme.BookStore or Acme.Retail.BookStore.", |
|||
"ABPCLIExamplesInfo": "comanda <strong>new</strong> creează o <strong>aplicaţie stratificată MVC</strong> cu <strong>Entity Framework Core</strong> ca şi furnizor de baze de date. Totuşi, are şi alte opţiuni. Exemple:", |
|||
"SeeCliDocumentForMoreInformation": "Consultaţi <a href=\"{0}\">documentul ABP CLI</a> pentru mai multe opţiuni sau selectaţi tab-ul de \"Descărcare directă\" de deasupra.", |
|||
"Optional": "Opţional", |
|||
"LocalFrameworkRef": "Pastraţi referinţa proiectului local pentru pachetele framework-ului.", |
|||
"BlobStoring": "Depozitare BLOB", |
|||
"BlobStoringExplanation": "Sistemul de depozitare BLOB oferă o abstractizare pentru lucrul cu BLOB-uri. ABP oferă câteva integrări prestabilite pentru furnizorii de stocare (Azure, AWS, File System, Database, etc.) pe care le puteţi folosi cu uşurinţă în aplicaţiile dumneavoastră.", |
|||
"TextTemplating": "Modelare text", |
|||
"TextTemplatingExplanation": "Modelarea textului este folosită pentru a reda dinamic conţinuturile bazate pe un şablon şi un model (un obiect de date). De exemplu, o puteţi folosi pentru a crea conţinuturi dinamice de email cu un şablon predefinit.", |
|||
"MultipleUIOptions": "Opţiuni UI multiple", |
|||
"MultipleDBOptions": "Furnizori de baze de date multipli", |
|||
"MultipleUIOptionsExplanation": "Framework-ul de bază este conceput ca independent de UI şi poate funcţiona cu orice tip de sistem UI, în timp ce mai multe opţiuni pre-construite şi integrate sunt oferite din start.", |
|||
"MultipleDBOptionsExplanation": "Framework-ul poate lucra cu orice sursă de date, în timp ce furnizorii următori sunt dezvoltaţi şi acceptaţi oficial;", |
|||
"SelectLanguage": "Selectaţi limba", |
|||
"LatestArticleOnCommunity": "Ultimul articol de pe comunitatea ABP", |
|||
"Register": "Întregistrare", |
|||
"IsDownloadable": "Poate fi descărcat", |
|||
"DatabaseOptions": "Opţiunile bazei de date", |
|||
"BackToPackagesPage": "Înapoi la pagina pachetelor", |
|||
"HowToInstall": "Cum instalez", |
|||
"SeeOnNpm": "Vedeţi pe NPM", |
|||
"SeeOnNuget": "Vedeţi pe Nuget", |
|||
"MVCGulpCommandExplanation": "Dacă folosiţi MVC (Razor Pages) UI, atunci rulaţi comanda the \"gulp\" după instalarea pachetelor.", |
|||
"UsingABPCLI": "Folosind <a href=\"https://docs.abp.io/en/abp/latest/CLI\">Abp CLI</a>", |
|||
"WithoutABPCLI": "Fară ABP CLI", |
|||
"ABPCLIModuleDependency": "Abp Cli adaugă automat dependenţa modulelor.", |
|||
"AddModuleDependency": "Apoi adăugaţi dependenţa modulului", |
|||
"Packages": "Pachete", |
|||
"NugetPackages": "Pachete Nuget", |
|||
"NPMPackages": "Pachete NPM", |
|||
"SeeDocs": "Consultaţi documentele", |
|||
"None": "Niciuna", |
|||
"Application": "Aplicaţie", |
|||
"Module": "Module", |
|||
"PackageName": "Nume pachet", |
|||
"LicenseURL": "URL licenţă", |
|||
"License": "Licenţă", |
|||
"ProjectCreationSuccessMessage": "Proiectul dumneavoastră a fost creat cu succes", |
|||
"HowToRunSolution": "Cum vă rulaţi soluţia?", |
|||
"GettingStartedMessage": "Consultaţi documentul de pornire pentru a învăţa cum să vă configuraţi şi să rulaţi soluţia dumneavoastră.", |
|||
"WebAppDevTutorial": "Tutorial Web App Dev", |
|||
"WebAppDevTutorialMessage": "Consultaţi documentul de dezvoltare a aplicaţiilor web pentru un exemplu de dezvoltare pas cu pas.", |
|||
"CommunityArticles": "Articolele comunităţii", |
|||
"CommunityArticleMessage": "Verificaţi platforma comunităţii ABP pentru a citi articole utile pentru framework-ul ABP.", |
|||
"InvestigateSolutionDetails": "Investigaţi detaliile soluţiei", |
|||
"StartupTemplateDocumentationMessage": "Consultaţi documentul şablonului de pornire a aplicaţiei pentru a învăţa arhitectura şi strucutra soluţiei dumneavoastră.", |
|||
"ClientSideDevelopment": "Dezvoltarea clientului", |
|||
"ClientSideDevelopmentDocumentationMessage": "Consultaţi documentul {0} pentru a învăţa punctele cheie pentru dezvoltarea interfeţei de utilizator.", |
|||
"DatabaseProviderDocumentationMessage": "Consultaţi documentul {0} pentru a învăţa punctele cheie pentru dezvoltarea straturilor bazei de date.", |
|||
"ABPCommercialExplanationMessage": "ABP Commercial oferă module premium, teme, isntrumente şi asistenţă pentru framework-ul ABP.", |
|||
"ImplementingDDD": "Implementarea Domain Driven Design", |
|||
"DDDBookExplanation": "Un ghid practic pentru implementarea Domain Driven Design în framework-ul ABP.", |
|||
"Overview": "Prezentare generală", |
|||
"DDDBookPracticalGuide": "Acesta este un ghid practic pentru implementarea Domain Driven Design (DDD). În timp ce detaliile implementării se bazează pe infrastructura framework-ului ABP, conceptele de bază, principiile şi modelele pot fi aplicate oricărei soluţii, chiar dacă nu este una .NET.", |
|||
"TableOfContents": "Cuprins", |
|||
"IntroductionToImplementingDDD": "Introducere în Implementarea Domain Driven Design", |
|||
"WhatIsDDD": "Ce este Domain Driven Design?", |
|||
"Implementation": "Implementare", |
|||
"TheBigPicture": "Privire de ansamblu", |
|||
"TheBuildingBlock": "The Building Block", |
|||
"ExampleUseCase": "Exemplu de Use Case", |
|||
"DomainAndApplicationLogic": "Domain Logic & Application Logic", |
|||
"Author": "Autor", |
|||
"Pages": "Pagini", |
|||
"PublishedOn": "Publicat pe", |
|||
"FreeEBook": "E-Book gratuit", |
|||
"Download": "Descărcaţi", |
|||
"EBookSignInForDownload": "Pentru a descărca e-book-ul trebuie să vă autentificaţi", |
|||
"SignIn": "Autentificaţi-vă", |
|||
"Or": "Sau", |
|||
"TellUsAboutYourself": "Spuneţi-ne un pic despre dumneavoastră", |
|||
"Name": "Nume", |
|||
"Surname": "Nume", |
|||
"CompanyName": "Nume companie", |
|||
"DoYouAgreePrivacyPolicy": "Sunt de acord cu <a href=\"https://account.abp.io/Account/TermsConditions\">Termenii & condiţiile</a> şi <a href=\"https://account.abp.io/Account/Privacy\">Politica de confidenţialitate</a>.", |
|||
"Free": "Gratuit", |
|||
"DDDEBook": "E-book DDD", |
|||
"PracticalGuideForImplementingDDD": "Această carte este un ghid practic pentru implementarea Domain Driven Design în framework-ul ABP.", |
|||
"IntroducingDDD": "Introducere în Domain Driven Design", |
|||
"DDDLayersAndCleanArchitecture": "Straturile DDD & Arhitectură curată", |
|||
"LayeringOfADotnetSolution": "Stratificarea unei soluţii .NET", |
|||
"ImplementingDDDBuildingBlocks": "Implementând DDD Building Blocks", |
|||
"DomainVsApplicationLogic": "Domain Logic vs Application Logic", |
|||
"SamplesAndDiscussions": "Exemple & Discuţii", |
|||
"EmailNotValid": "Vă rugăm să introduceţi o adresa de email validă.", |
|||
"WeWillSendYouADownloadLink": "Un link care conţine e-book-ul a fost trimis către {0}. Verificaţi-vă folderele de inbox, junk sau spam!", |
|||
"GoHome": "Pagina principală", |
|||
"InvalidFormInputs": "Vă rugăm, introduceţi informaţia validă specificată în formular.", |
|||
"DDDBookEmailBody": "Vă mulţumim. <br /> Pentru a descărca cartea, <a href=\"{0}\">click aici</a>.", |
|||
"SubscribeToNewsletter": "Abonaţi-vă la newsletter pentru a primi informaţii despre evnimentele din platforma ABP.IO, precum noi lansări, articole, oferte şi multe altele.", |
|||
"FirstEdition": "Prima ediţie", |
|||
"ThankYou": "Vă mulţumim!", |
|||
"CheckboxMandatory": "Trebuie să bifaţi asta pentru a continua!" |
|||
} |
|||
} |
|||
@ -0,0 +1,6 @@ |
|||
codecov: |
|||
branch: dev |
|||
require_ci_to_pass: yes |
|||
comment: |
|||
require_head: no |
|||
require_base: no |
|||
@ -0,0 +1,99 @@ |
|||
# Hangfire Background Worker Manager |
|||
|
|||
[Hangfire](https://https://www.hangfire.io/) is an advanced background jobs and worker manager. You can integrate Hangfire with the ABP Framework to use it instead of the [default background worker manager](Background-Workers.md). |
|||
|
|||
The major advantage is that you can use the same server farm to manage your Background Jobs and Workers, as well as leverage the advanced scheduling that is available from Hangfire for [Recurring Jobs](https://docs.hangfire.io/en/latest/background-methods/performing-recurrent-tasks.html?highlight=recurring), aka Background Workers. |
|||
|
|||
## Installation |
|||
|
|||
It is suggested to use the [ABP CLI](CLI.md) to install this package. |
|||
|
|||
### Using the ABP CLI |
|||
|
|||
Open a command line window in the folder of the project (.csproj file) and type the following command: |
|||
|
|||
````bash |
|||
abp add-package Volo.Abp.BackgroundWorkers.Hangfire |
|||
```` |
|||
|
|||
### Manual Installation |
|||
|
|||
If you want to manually install; |
|||
|
|||
1. Add the [Volo.Abp.BackgroundWorkers.Hangfire](https://www.nuget.org/packages/Volo.Abp.BackgroundWorkers.Hangfire) NuGet package to your project: |
|||
|
|||
```` |
|||
Install-Package Volo.Abp.BackgroundWorkers.Hangfire |
|||
```` |
|||
|
|||
2. Add the `AbpBackgroundWorkersHangfireModule` to the dependency list of your module: |
|||
|
|||
````csharp |
|||
[DependsOn( |
|||
//...other dependencies |
|||
typeof(AbpBackgroundWorkersHangfireModule) //Add the new module dependency |
|||
)] |
|||
public class YourModule : AbpModule |
|||
{ |
|||
} |
|||
```` |
|||
|
|||
> Hangfire background worker integration provides an adapter `HangfirePeriodicBackgroundWorkerAdapter` to automatically load any `PeriodicBackgroundWorkerBase` and `AsyncPeriodicBackgroundWorkerBase` derived classes as `IHangfireBackgroundWorker` instances. This allows you to still to easily switch over to use Hangfire as the background manager even you have existing background workers that are based on the [default background workers implementation](Background-Workers.md). |
|||
|
|||
## Create a Background Worker |
|||
|
|||
`HangfireBackgroundWorkerBase` is an easy way to create a background worker. |
|||
|
|||
```` csharp |
|||
public class MyLogWorker : HangfireBackgroundWorkerBase |
|||
{ |
|||
public MyLogWorker() |
|||
{ |
|||
RecurringJobId = nameof(MyLogWorker); |
|||
CronExpression = Cron.Daily(); |
|||
} |
|||
|
|||
public override Task DoWorkAsync() |
|||
{ |
|||
Logger.LogInformation("Executed MyLogWorker..!"); |
|||
return Task.CompletedTask; |
|||
} |
|||
} |
|||
```` |
|||
|
|||
* **RecurringJobId** Is an optional parameter, see [Hangfire document](https://docs.hangfire.io/en/latest/background-methods/performing-recurrent-tasks.html) |
|||
* **CronExpression** Is a CRON expression, see [CRON expression](https://en.wikipedia.org/wiki/Cron#CRON_expression) |
|||
|
|||
> You can directly implement the `IHangfireBackgroundWorker`, but `HangfireBackgroundWorkerBase` provides some useful properties like Logger. |
|||
|
|||
## Register BackgroundWorkerManager |
|||
|
|||
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))] |
|||
public class MyModule : AbpModule |
|||
{ |
|||
public override void OnApplicationInitialization( |
|||
ApplicationInitializationContext context) |
|||
{ |
|||
context.AddBackgroundWorker<MyLogWorker>(); |
|||
} |
|||
} |
|||
```` |
|||
|
|||
`context.AddBackgroundWorker(...)` is a shortcut extension method for the expression below: |
|||
|
|||
```` csharp |
|||
context.ServiceProvider |
|||
.GetRequiredService<IBackgroundWorkerManager>() |
|||
.Add( |
|||
context |
|||
.ServiceProvider |
|||
.GetRequiredService<MyLogWorker>() |
|||
); |
|||
```` |
|||
|
|||
So, it resolves the given background worker and adds to the `IBackgroundWorkerManager`. |
|||
|
|||
While we generally add workers in OnApplicationInitialization, there are no restrictions on that. You can inject IBackgroundWorkerManager anywhere and add workers at runtime. Background worker manager will stop and release all the registered workers when your application is being shut down. |
|||
@ -1,4 +1,4 @@ |
|||
## Domain Services Best Practices & Conventions |
|||
## Domain Services Best Practices & Conventions |
|||
|
|||
> **This document is not ready yet. Please see the [Domain Services](../Domain-Services.md) document.** |
|||
|
|||
|
|||
@ -0,0 +1,174 @@ |
|||
# ABP Platform 4.4 RC Has Been Released |
|||
|
|||
Today, we have released the [ABP Framework](https://abp.io/) and the [ABP Commercial](https://commercial.abp.io/) version 4.4 RC (Release Candidate). This blog post introduces the new features and important changes in this new version. |
|||
|
|||
> **The planned release date for the [4.4.0 final](https://github.com/abpframework/abp/milestone/53) version is July 13, 2021**. |
|||
|
|||
## Get Started with the 4.4 RC |
|||
|
|||
If you want to try the version 4.4.0 today, follow the steps below; |
|||
|
|||
1) **Upgrade** the ABP CLI to the version `4.4.0-rc.1` using a command line terminal: |
|||
|
|||
````bash |
|||
dotnet tool update Volo.Abp.Cli -g --version 4.4.0-rc.1 |
|||
```` |
|||
|
|||
**or install** if you haven't installed before: |
|||
|
|||
````bash |
|||
dotnet tool install Volo.Abp.Cli -g --version 4.4.0-rc.1 |
|||
```` |
|||
|
|||
2) Create a **new application** with the `--preview` option: |
|||
|
|||
````bash |
|||
abp new BookStore --preview |
|||
```` |
|||
|
|||
See the [ABP CLI documentation](https://docs.abp.io/en/abp/latest/CLI) for all the available options. |
|||
|
|||
> You can also use the *Direct Download* tab on the [Get Started](https://abp.io/get-started) page by selecting the **Preview checkbox**. |
|||
|
|||
### Migration Notes |
|||
|
|||
There is **no breaking change** with this version. However, if you are using Entity Framework Core, you will need to run the `Add-Migration` command to add a new **database migration** since some changes done in the module database mappings. |
|||
|
|||
## What's new with the ABP Framework 4.4 |
|||
|
|||
### Removed EntityFrameworkCore.DbMigrations Project |
|||
|
|||
With this version, we are doing an important change in the application startup solution template. The startup solution was containing an `EntityFrameworkCore.DbMigrations` project that contains a separate `DbContext` class which was responsible to unify the module database mappings and maintain the code-first database migrations. With the v4.4, we've removed that project from the solution. In the new structure, the `EntityFrameworkCore` integration project will be used for database migrations as well as on runtime. |
|||
|
|||
We'd published [a community article](https://community.abp.io/articles/unifying-dbcontexts-for-ef-core-removing-the-ef-core-migrations-project-nsyhrtna) about that change. Please see the article to understand the motivation behind the change. |
|||
|
|||
Beside the `DbContext` unification, we've also used the new `ReplaceDbContext` attribute and [replaced](https://github.com/abpframework/abp/blob/ea2205f0855f52015152ae066a5c239af4b8511f/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameDbContext.cs#L18-L19) the `IIdentityDbContext` and `ITenantManagementDbContext` interfaces to make it possible to perform join queries over repositories for these modules easily. In the next days, we will publish another community article to explain the problem and the solution. However, most of times, you don't need to know these details. |
|||
|
|||
### Dynamic Menu Management for the CMS Kit Module |
|||
|
|||
CMS Kit is a set of reusable *Content Management System* features packaged as an ABP application module. We had published the first usable version with the previous release. With this release, we are adding another feature to the CMS Kit module: You can now dynamically arrange the main menu on the UI, which is an essential feature for any kind of content management system. In this way, you can add pages or any kind of arbitrary URLs to the main menu from the UI. |
|||
|
|||
A screenshot from the menu management page (from the CMS Kit admin side): |
|||
|
|||
 |
|||
|
|||
And the items rendered in a public website: |
|||
|
|||
 |
|||
|
|||
Note that this feature is also available with the open source [CMS Kit module](https://docs.abp.io/en/abp/4.4/Modules/Cms-Kit/Index) (while the screenshots have been taken from the ABP Commercial). |
|||
|
|||
### Razor Engine Support for Text Templating |
|||
|
|||
[Text Templating](https://docs.abp.io/en/abp/4.4/Text-Templating) is a system to generate content on runtime by using a model (data) and a template. It was running on the [Scriban](https://github.com/scriban/scriban) templating engine. Beginning from this version, we have a second option: We can use the familiar **razor syntax** to build and render the templates. See the text templating [razor integration document](https://docs.abp.io/en/abp/4.4/Text-Templating-Razor) to get started with the new engine! |
|||
|
|||
### New Customization Points for DbContext/Entities |
|||
|
|||
Two new extension methods are added to `ObjectExtensionManager.Instance` to override EF Core mappings of [pre-built application modules](https://docs.abp.io/en/abp/latest/Modules/Index). |
|||
|
|||
**Example: Change mappings for the `IdentityDbContext` to override mappings for the `IdentityUser` entity** |
|||
|
|||
````csharp |
|||
ObjectExtensionManager.Instance.MapEfCoreDbContext<IdentityDbContext>(modelBuilder => |
|||
{ |
|||
modelBuilder.Entity<IdentityUser>(b => |
|||
{ |
|||
b.ToTable("MyUsers"); |
|||
b.Property(x => x.Email).HasMaxLength(300); |
|||
}); |
|||
}); |
|||
```` |
|||
|
|||
The startup template contains a class, like `YourProjectNameEfCoreEntityExtensionMappings`, that can be used to place that code. |
|||
|
|||
### New ABP CLI Commands |
|||
|
|||
There are new [ABP CLI](https://docs.abp.io/en/abp/4.4/CLI) commands introduced with the v4.4: |
|||
|
|||
* `abp install-libs` command is used for MVC / Razor Pages and Blazor Server applications to restore the `wwwroot/libs` folder. Previously we were running the `yarn` and `gulp` commands to restore that folder. While the `install-libs` command still uses yarn (if available), it is no longer needed to use `gulp`. |
|||
* `abp prompt` command can be used to open a prompt for the ABP CLI and run multiple commands without needing to specify the `abp` command every time. For example, if you run `abp prompt`, then you can directly run `install-libs` instead of `abp install-libs`. Use `exit` to quit from the ABP prompt. |
|||
* `abp batch` command can be used to run multiple ABP commands with one command. Prepare a text file, write each command as a line (without the `abp` command prefix), then execute `abp batch <batch-file>` (ex: `abp batch your_commands.txt`) command to execute all the commands in that file. |
|||
|
|||
### appsettings.secrets.json |
|||
|
|||
Added `appsettings.secrets.json` to the startup template that can be used to set your sensitive/secret configuration values. You can ignore this file from source control (by adding to `.gitignore` if you're using git) and keep it only in developer/production machines. |
|||
|
|||
### Other ABP Framework Improvements |
|||
|
|||
* [#9350](https://github.com/abpframework/abp/pull/9350) Extracted `IRemoteServiceConfigurationProvider` to get remote service configurations. You can replace this service to get the configuration from any source. |
|||
* [#8829](https://github.com/abpframework/abp/pull/8829) Implemented error handler and retry for distributed event bus. |
|||
* [#9288](https://github.com/abpframework/abp/issues/9288) Use default CORS policy instead of a named one in the startup template. It is suggested to update your own solutions to make it simpler. |
|||
* Translated the framework and module localization strings to Hindi, Italian, Finnish and French languages. |
|||
|
|||
Beside these, there are a lot of enhancements and bug fixes. See the [4.4-preview milestone](https://github.com/abpframework/abp/milestone/52?closed=1) for all issues and pull requests closed with this version. |
|||
|
|||
## What's new with the ABP Commercial 4.4 |
|||
|
|||
### New Features for the SaaS Module |
|||
|
|||
We've implemented some important features to the [SaaS module](https://commercial.abp.io/modules/Volo.Saas): |
|||
|
|||
* Integrated to the [Payment module](https://commercial.abp.io/modules/Volo.Payment) and implemented **subscription system** for the SaaS module. |
|||
* Allow to make a **tenant active/passive**. In this way, you can take a tenant to passive to prevent the users of that tenant from using the system. In addition, you can set a date to automatically make a tenant passive when the date comes. |
|||
* Allow to **limit user count** for a tenant. |
|||
* Allow to set **different connection strings** for a tenant for each database/module, which makes possible to create different databases for a tenant for each microservice in a microservice solution. |
|||
|
|||
### New ABP Suite Code Generation Features |
|||
|
|||
There are many improvements done for for [ABP Suite](https://commercial.abp.io/tools/suite), including CRUD page generation for the **[microservice solution](https://docs.abp.io/en/commercial/latest/startup-templates/microservice/index) template**. |
|||
|
|||
### Angular UI: Two Factor Authentication for the Resource Owner Password Flow |
|||
|
|||
In the previous version, we had implemented the resource owner password authentication flow for the Angular UI, which makes the login process easier for simpler applications. With this release, we've implemented two-factor authentication for that flow. Authorization code flow already supports 2FA. |
|||
|
|||
### Other ABP Commercial Improvements |
|||
|
|||
* Added web layers to microservices in the microservice solution. You can use them to create modular UI or override existing pages/components of pre-built modules (e.g. Identity and SaaS). |
|||
* ABP Commercial license code has been moved to `appsettings.secrets.json` in the new startup templates. |
|||
* Added new language options: Hindi, Italian, Arabic, Finnish, French. |
|||
|
|||
Beside these, there are many minor improvements and fixes done in the modules and themes. |
|||
|
|||
## Other News |
|||
|
|||
In this section, I will share some news that you may be interested in. |
|||
|
|||
### New Article: Using Elsa Workflow with ABP Framework |
|||
|
|||
We have been frequently asked how to use [Elsa Workflows](https://elsa-workflows.github.io/elsa-core/) with the ABP Framework. Finally, we have [created an article](https://community.abp.io/articles/using-elsa-workflow-with-the-abp-framework-773siqi9) to demonstrate it. |
|||
|
|||
 |
|||
|
|||
You can [check it](https://community.abp.io/articles/using-elsa-workflow-with-the-abp-framework-773siqi9) to see how to integrate Elsa into an ABP based solution easily. |
|||
|
|||
### Free E-Book: Implementing Domain Driven Design |
|||
|
|||
We've published a free e-book for the ABP Community in the beginning of June. This is a practical guide for implementing Domain Driven Design (DDD). While the implementation details are based on the ABP Framework infrastructure, the basic concepts, principles and models can be applied to any solution, even if it is not a .NET solution. |
|||
|
|||
 |
|||
|
|||
Thousands of copies are already downloaded. If you haven't seen it yet, [click here to get a free copy of that e-book](https://abp.io/books/implementing-domain-driven-design). |
|||
|
|||
### The LeptonX Theme |
|||
|
|||
We have been working on a new ABP theme, named the *LeptonX*, for a long time. The theme will be available for ABP Framework (free - lite version) and ABP Commercial (pro version). It is being finalized in the next weeks and we will release the first version in a short time. |
|||
|
|||
 |
|||
|
|||
See [this blog post](https://volosoft.com/blog/introducing-the-lepton-theme-next-generation) to learn more about that project. |
|||
|
|||
### Volosoft & .NET Foundation |
|||
|
|||
[Volosoft](https://volosoft.com/), the company leads the ABP Framework project, has been a corporate sponsor of the [.NET Foundation](https://dotnetfoundation.org/). We are happy by taking our place among other great sponsors! |
|||
|
|||
 |
|||
|
|||
We will continue to contribute to and support open source! See this [blog post for the announcement](https://volosoft.com/blog/Volosoft-Announces-the-NET-Foundation-Sponsorship). |
|||
|
|||
### Looking for Developer Advocate(s) |
|||
|
|||
We are actively looking for professional developer advocates for the ABP.IO platform. If you want to create content and touch to the ABP community, please check our [job post](https://github.com/volosoft/vs-home/issues/13). |
|||
|
|||
## About the Next Version |
|||
|
|||
The next version will be a major version: 5.0, which will be based on .NET 6.0. We are planning to release it in the end of 2021, short time after the .NET 6.0 release. We will release multiple preview/beta versions before the RC version. See the [road map](https://docs.abp.io/en/abp/latest/Road-Map) for details of the planned works for the version 5.0. |
|||
|
After Width: | Height: | Size: 59 KiB |
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 66 KiB |
|
After Width: | Height: | Size: 2.5 MiB |
|
After Width: | Height: | Size: 150 KiB |
|
After Width: | Height: | Size: 75 KiB |
|
After Width: | Height: | Size: 56 KiB |
@ -0,0 +1,52 @@ |
|||
# Introducing the eShopOnAbp Project |
|||
|
|||
We are happy to introduce the **eShopOnAbp** project as an example microservice solution built with the ABP Framework by the core ABP team. This solution demonstrates the strength of ABP Framework and using it in a real-life case. The goal of the project is to create a full-featured cloud-native microservices reference application. The project is inspired by the [eShopOnContainers](https://github.com/dotnet-architecture/eShopOnContainers) project and shows how it can be implemented with the ABP Framework. |
|||
|
|||
> **Project Status**: Currently, the project doesn't have any business logic. We've just brought ABP's pre-built modules (Identity, Tenant Management, IdentityServer, etc) together as a base solution. However, it is fully working and you can now take it as a base solution for your microservice project. From now on, we will build the example application functionalities / business logic on top of it. |
|||
|
|||
## Source Code |
|||
|
|||
The source code is available on [abpframework/eShopOnAbp](https://github.com/abpframework/eShopOnAbp) repository. |
|||
|
|||
## The Big Picture |
|||
|
|||
The project follows micro-service architecture and overall structure is presented below. |
|||
|
|||
 |
|||
|
|||
## How to Run? |
|||
|
|||
You can either run in Visual Studio, or using [Microsoft Tye](https://github.com/dotnet/tye). Tye is a developer tool that makes developing, testing, and deploying micro-services and distributed applications easier. |
|||
|
|||
### Requirements |
|||
|
|||
- .NET 5.0+ |
|||
- Docker |
|||
- Yarn |
|||
|
|||
### Instructions |
|||
|
|||
- Clone the repository ( [eShopOnAbp](https://github.com/abpframework/eShopOnAbp) ) |
|||
|
|||
- Install Tye (*follow [these steps](https://github.com/dotnet/tye/blob/main/docs/getting_started.md#installing-tye)*) |
|||
|
|||
- Execute `run-tye.ps1` |
|||
|
|||
- Wait until all applications are up! |
|||
|
|||
- You can check running application from tye dashboard ([localhost:8000](http://127.0.0.1:8000/)) |
|||
|
|||
- After all your backend services are up, start the angular application: |
|||
|
|||
```bash |
|||
cd apps/angular |
|||
yarn start |
|||
``` |
|||
|
|||
## What's Next? |
|||
|
|||
We'll work on deployment & CI-CD processes as a next step and build the business logic on. First goal is deploying the entire application on [Kubernetes](https://kubernetes.io/). |
|||
|
|||
## Feedback |
|||
|
|||
Your comments and suggestions is important for us. You can ask your questions or post your feedback under [this discussion entry](https://github.com/abpframework/abp/discussions/9536). |
|||
|
After Width: | Height: | Size: 87 KiB |
@ -0,0 +1,216 @@ |
|||
# LeptonX Alpha Release |
|||
|
|||
We are excited to announce that the **alpha version** of the LeptonX theme has been released! As stated in [this blog post](https://volosoft.com/blog/introducing-the-lepton-theme-next-generation), LeptonX comes in different shapes. For this release, we introduce only ABP based projects with the Angular UI. So, if you are already using the ABP Framework and Angular as the frontend choice, you can integrate these packages into your project today. |
|||
|
|||
The theme has been deployed with two versions: LeptonX-lite (free) and LeptonX (commercial). |
|||
|
|||
> **Note that this theme currently only works for the *Angular UI*. Please keep waiting for other UI options.** |
|||
|
|||
## Open-Source |
|||
|
|||
This section shows how to replace the basic theme (that comes with open source ABP Framework startup template) with the new LeptonX-lite theme. |
|||
|
|||
To add `LeptonX-lite` into your project, |
|||
|
|||
* Install `@abp/ng.theme.lepton-x` NPM package |
|||
|
|||
`npm install @abp/ng.theme.lepton-x@preview` or |
|||
|
|||
`yarn add @abp/ng.theme.lepton-x@preview` |
|||
|
|||
* Then, we need to edit the styles array in `angular.json` to replace the existing style with the new one. |
|||
|
|||
Replace the following style |
|||
|
|||
```JSON |
|||
{ |
|||
"input": "node_modules/bootstrap/dist/css/bootstrap.min.css", |
|||
"inject": true, |
|||
"bundleName": "bootstrap-ltr.min" |
|||
}, |
|||
``` |
|||
|
|||
with |
|||
|
|||
```json |
|||
"node_modules/@volo/ngx-lepton-x.lite/styles/sidemenu-layout.min.css", |
|||
"node_modules/bootstrap-icons/font/bootstrap-icons.css", |
|||
``` |
|||
|
|||
* Finally, remove `ThemeBasicModule` from `app.module.ts` and `shared.module.ts`, and import the related modules in `app.module.ts` |
|||
|
|||
```js |
|||
import { ThemeLeptonXModule } from '@abp/ng.theme.lepton-x'; |
|||
import { SideMenuLayoutModule } from '@abp/ng.theme.lepton-x/layouts'; |
|||
|
|||
@NgModule({ |
|||
imports: [ |
|||
// ... |
|||
ThemeLeptonXModule.forRoot(), |
|||
SideMenuLayoutModule.forRoot(), |
|||
], |
|||
// ... |
|||
}) |
|||
export class AppModule {} |
|||
``` |
|||
|
|||
Note: If you employ [Resource Owner Password Flow](https://docs.abp.io/en/abp/latest/UI/Angular/Authorization#resource-owner-password-flow) for authorization, you should import the following module as well: |
|||
|
|||
```js |
|||
import { AccountLayoutModule } from '@abp/ng.theme.lepton-x/account'; |
|||
|
|||
@NgModule({ |
|||
// ... |
|||
imports: [ |
|||
// ... |
|||
AccountLayoutModule.forRoot(), |
|||
// ... |
|||
], |
|||
// ... |
|||
}) |
|||
export class AppModule {} |
|||
``` |
|||
|
|||
To change the logos and brand color of the `LeptonX`, simply add the following CSS to the `styles.scss` |
|||
|
|||
```css |
|||
:root { |
|||
--lpx-logo: url('/assets/images/logo.png'); |
|||
--lpx-logo-icon: url('/assets/images/logo-icon.png'); |
|||
--lpx-brand: #edae53; |
|||
} |
|||
``` |
|||
|
|||
- `--lpx-logo` is used to place the logo in the menu. |
|||
- `--lpx-logo-icon` is a square icon used when the menu is collapsed. |
|||
- `--lpx-brand` is a color used throughout the application, especially on active elements. |
|||
|
|||
 |
|||
|
|||
 |
|||
|
|||
## ABP Commercial |
|||
|
|||
This section shows how to replace the lepton theme (that comes with the ABP Commercial startup template) with the new LeptonX theme. |
|||
|
|||
To add `LeptonX` into your existing projects, |
|||
|
|||
* Firstly, install `@volosoft/abp.ng.theme.lepton-x` NPM package |
|||
|
|||
`npm install @volosoft/abp.ng.theme.lepton-x@preview` or |
|||
|
|||
`yarn add @volosoft/abp.ng.theme.lepton-x@preview` |
|||
|
|||
* Then, edit `angular.json` as follows: |
|||
|
|||
Remove the following config from the `styles` array since LeptonX provides bootstrap as embedded in its CSS. |
|||
|
|||
```JSON |
|||
{ |
|||
"input": "node_modules/bootstrap/dist/css/bootstrap.min.css", |
|||
"inject": true, |
|||
"bundleName": "bootstrap-ltr.min" |
|||
}, |
|||
``` |
|||
|
|||
Add the following ones into the `styles` array |
|||
|
|||
```JSON |
|||
{ |
|||
"input": "node_modules/@volosoft/ngx-lepton-x/styles/themes/dark.css", |
|||
"inject": false, |
|||
"bundleName": "lepton-x.dark" |
|||
}, |
|||
{ |
|||
"input": "node_modules/@volosoft/ngx-lepton-x/styles/themes/dim.css", |
|||
"inject": false, |
|||
"bundleName": "lepton-x.dim" |
|||
}, |
|||
{ |
|||
"input": "node_modules/@volosoft/ngx-lepton-x/styles/themes/light.css", |
|||
"inject": false, |
|||
"bundleName": "lepton-x.light" |
|||
}, |
|||
"node_modules/@volosoft/ngx-lepton-x/styles/css/sidemenu-layout.min.css", |
|||
"node_modules/bootstrap-icons/font/bootstrap-icons.css", |
|||
``` |
|||
|
|||
Three of them are related to the theming and will be loaded during runtime. That's why they are not injected into the `head` as a style. Hence, the `"inject": false` |
|||
|
|||
The fourth one depends on which layout you want to use. For now, there is only `sidemenu-layout` available. In the future, there will be many layouts to choose from. |
|||
|
|||
The last one is `bootstrap-icons` which are being used throughout the components. |
|||
|
|||
* At last, remove `ThemeLeptonModule` from `app.module.ts` and `shared.module.ts`, and import the following modules in `app.module.ts` |
|||
|
|||
```js |
|||
import { ThemeLeptonXModule } from '@volosoft/abp.ng.theme.lepton-x'; |
|||
import { AbpSideMenuLayoutModule } from '@volosoft/abp.ng.theme.lepton-x/layouts'; |
|||
|
|||
@NgModule({ |
|||
// ... |
|||
imports: [ |
|||
// ... |
|||
ThemeLeptonXModule.forRoot(), |
|||
AbpSideMenuLayoutModule.forRoot(), // depends on which layout you choose |
|||
// ... |
|||
], |
|||
// ... |
|||
}) |
|||
export class AppModule {} |
|||
``` |
|||
|
|||
Note: If you employ [Resource Owner Password Flow](https://docs.abp.io/en/abp/latest/UI/Angular/Authorization#resource-owner-password-flow) for authorization, you should import the following module as well: |
|||
|
|||
```js |
|||
import { AccountLayoutModule } from '@volosoft/abp.ng.theme.lepton-x/account'; |
|||
|
|||
@NgModule({ |
|||
// ... |
|||
imports: [ |
|||
// ... |
|||
AccountLayoutModule.forRoot({ |
|||
layout: { |
|||
authLayoutImg: '/assets/images/login-bg.jpg', |
|||
}, |
|||
}), |
|||
// ... |
|||
], |
|||
// ... |
|||
}) |
|||
export class AppModule {} |
|||
``` |
|||
|
|||
`authLayoutImg`: (Optional) If not given, a default image will be placed on the authentication pages. |
|||
|
|||
|
|||
* At this point, `LeptonX` theme should be up and running within your application. However, you may need to overwrite some css variables based your needs for every theme available as follows: |
|||
```scss |
|||
:root { |
|||
.lpx-theme-dark { |
|||
--lpx-logo: url('/assets/images/logo/logo-light.svg'); |
|||
--lpx-logo-icon: url('/assets/images/logo/logo-light-icon.svg'); |
|||
--lpx-brand: #edae53; |
|||
} |
|||
|
|||
.lpx-theme-dim { |
|||
--lpx-logo: url('/assets/images/logo/logo-light.svg'); |
|||
--lpx-logo-icon: url('/assets/images/logo/logo-light-icon.svg'); |
|||
--lpx-brand: #f15835; |
|||
} |
|||
|
|||
.lpx-theme-light { |
|||
--lpx-logo: url('/assets/images/logo/logo-dark.svg'); |
|||
--lpx-logo-icon: url('/assets/images/logo/logo-dark-icon.svg'); |
|||
--lpx-brand: #69aada; |
|||
} |
|||
} |
|||
``` |
|||
|
|||
When the user selects a theme, the corresponding CSS class is added to the `body`, so you can write specific CSS rules to each theme. |
|||
|
|||
## Conclusion |
|||
|
|||
In this blog post, I've explained how to use the alpha version of the new LeptonX theme for ABP-based solutions. Please, keep in mind that this is an alpha version, and we will continue to work on the LeptonX theme. The APIs are bound to change and breaking changes may be introduced in future versions. |
|||
|
|||
We would like you to try it out with the latest version of the ABP Framework and give us feedback at lepton@volosoft.com or open an issue on this repository: https://github.com/volosoft/lepton-theme |
|||
|
After Width: | Height: | Size: 155 KiB |
|
After Width: | Height: | Size: 152 KiB |
@ -0,0 +1,42 @@ |
|||
# ABP.IO Platform 4.4 Final Has Been Released! |
|||
|
|||
[ABP Framework](https://abp.io/) and [ABP Commercial](https://commercial.abp.io/) 4.4 versions have been released today. |
|||
|
|||
## What's New With 4.4? |
|||
|
|||
Since all the new features are already explained in details with the 4.4 RC announcement posts, I will not repeat all the details again. See [the related blog post](https://blog.abp.io/abp/ABP-Platform-4-4-RC-Has-Been-Released) for all the features and enhancements. |
|||
|
|||
## 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. |
|||
|
|||
## The Road Map |
|||
|
|||
The next feature version will be 5.0. It is planned to release the 5.0 RC (Release Candidate) in November 2021. See the updated road maps; |
|||
|
|||
* [ABP Framework Road Map](https://docs.abp.io/en/abp/latest/Road-Map) |
|||
* [ABP Commercial Road Map](https://docs.abp.io/en/commercial/latest/road-map) |
|||
@ -0,0 +1,309 @@ |
|||
# ABP Platform 5.0 Beta 1 Has Been Released |
|||
|
|||
Today, we are excited to release the [ABP Framework](https://abp.io/) and the [ABP Commercial](https://commercial.abp.io/) version **5.0 Beta**. This blog post introduces the new features and important changes in this new version. |
|||
|
|||
> **The planned release date for the [5.0.0 Release Candidate](https://github.com/abpframework/abp/milestone/51) version is November, 2021**. |
|||
|
|||
Please try the beta 1 version and provide feedback for a more stable ABP version 5.0! Thank you all. |
|||
|
|||
## Get Started with the 5.0 Beta 1 |
|||
|
|||
follow the steps below to try the version 5.0.0 beta 1 today; |
|||
|
|||
1) **Upgrade** the ABP CLI to the version `5.0.0-beta.1` using a command line terminal: |
|||
|
|||
````bash |
|||
dotnet tool update Volo.Abp.Cli -g --version 5.0.0-beta.1 |
|||
```` |
|||
|
|||
**or install** if you haven't installed before: |
|||
|
|||
````bash |
|||
dotnet tool install Volo.Abp.Cli -g --version 5.0.0-beta.1 |
|||
```` |
|||
|
|||
2) Create a **new application** with the `--preview` option: |
|||
|
|||
````bash |
|||
abp new BookStore --preview |
|||
```` |
|||
|
|||
See the [ABP CLI documentation](https://docs.abp.io/en/abp/latest/CLI) for all the available options. |
|||
|
|||
> You can also use the *Direct Download* tab on the [Get Started](https://abp.io/get-started) page by selecting the **Preview checkbox**. |
|||
|
|||
### Visual Studio Upgrade |
|||
|
|||
As .NET 6 is a preview version you need to make changes on the Visual Studio 2019. |
|||
If you want to run a .NET 6 project on Visual Studio 2019, you need to install the latest .NET SDK 6 from https://dotnet.microsoft.com/download/dotnet/6.0 |
|||
and also enable the `Use Previews of the .NET SDK` option from Visual Studio 2019 options. See the screenshot: |
|||
|
|||
 |
|||
|
|||
|
|||
Alternatively you can download the latest Visual Studio 2022 preview to run/create the .NET 6 projects. We have tested the ABP solution with the Visual Studio 2022 `17.0.0 Preview 4.1`. Check out https://visualstudio.microsoft.com/vs/preview/ for more information. |
|||
|
|||
### Migration Notes & Breaking Changes |
|||
|
|||
This is a major version and there are some breaking changes and upgrade steps. Here, a list of important breaking changes in this version: |
|||
|
|||
* Upgraded to .NET 6.0-rc.1, so you need to move your solution to .NET 6.0 if you want to use the ABP 5.0. |
|||
* `IRepository` doesn't inherit from `IQueryable` anymore. It was already made obsolete in 4.2. |
|||
* Removed NGXS and states from the Angular UI. |
|||
* Removed gulp dependency from the MVC / Razor Pages UI in favor of `abp install-libs` command of ABP CLI. |
|||
* Deprecated EntityCreatingEventData, EntityUpdatingEventData, EntityDeletingEventData and EntityChangingEventData classes. See [#9897](https://github.com/abpframework/abp/issues/9897). |
|||
|
|||
Please see the [migration document](https://docs.abp.io/en/abp/5.0/Migration-Guides/Abp-5_0) for all the details. You can also see all [the closed issues and pull request](https://github.com/abpframework/abp/releases/tag/5.0.0-beta.1) on GitHub. |
|||
|
|||
## What's new with Beta 1? |
|||
|
|||
In this section, I will introduce some major features released with beta 1. |
|||
|
|||
### Static (Generated) Client Proxies for C# and JavaScript |
|||
|
|||
Dynamic C# ([see](https://docs.abp.io/en/abp/latest/API/Dynamic-CSharp-API-Clients)) and JavaScript ([see](https://docs.abp.io/en/abp/latest/UI/AspNetCore/Dynamic-JavaScript-Proxies)) client proxy system is one of the most loved features of the ABP Framework. It generates the proxy code on runtime and makes client-to-server calls a breeze. With ABP 5.0, we are providing an alternative approach: You can generate the client proxy code on development-time. |
|||
|
|||
Development-time client proxy generation has a performance advantage since it doesn't need to obtain the HTTP API definition on runtime. It also makes it easier to consume a (micro)service behind an API Gateway. With dynamic proxies, we should return a combined HTTP API definition from the API Gateway and need to add HTTP API layers of the microservices to the gateway. Static proxies removes this requirement. One disadvantage is that you should re-generate the client proxy code whenever you change your API endpoint definition. Yes, software development always has tradeoffs :) |
|||
|
|||
Working with static client proxy generation is simple with the ABP CLI. You first need to run the server application, open a command-line terminal, locate to the root folder of your client application, then run the `generate-proxy` command of the ABP CLI. |
|||
|
|||
#### Creating C# client proxies |
|||
|
|||
C# client proxies are useful to consume APIs from Blazor WebAssembly applications. It is also useful for microservice to microservice HTTP API calls. Notice that the client application need to have a reference to the application service contracts (typically, the `.Application.Contracts` project in your solution) in order to consume the services. |
|||
|
|||
**Example usage:** |
|||
|
|||
````bash |
|||
abp generate-proxy -t csharp -u https://localhost:44305 |
|||
```` |
|||
|
|||
`-t` indicates the client type, C# here. `-u` is the URL of the server application. It creates the proxies for the application (the app module) by default. You can specify the module name as `-m <module-name>` if you are building a modular system. The following figure shows the generated files: |
|||
|
|||
 |
|||
|
|||
Once the proxies are generated, you can inject and use the application service interfaces of these proxies, like `IProductAppService` in this example. Usage is same of the [dynamic C# client proxies](https://docs.abp.io/en/abp/latest/API/Dynamic-CSharp-API-Clients). |
|||
|
|||
#### Creating JavaScript client proxies |
|||
|
|||
JavaScript proxies are useful to consume APIs from MVC / Razor Pages UI. It works on JQuery AJAX API, just like the [dynamic JavaScript proxies](https://docs.abp.io/en/abp/latest/UI/AspNetCore/Dynamic-JavaScript-Proxies). |
|||
|
|||
**Example usage:** |
|||
|
|||
````bash |
|||
abp generate-proxy -t js -u https://localhost:44305 |
|||
```` |
|||
|
|||
The following figure shows the generated file: |
|||
|
|||
 |
|||
|
|||
Then you can consume the server-side APIs from your JavaScript code just like the [dynamic JavaScript proxies](https://docs.abp.io/en/abp/latest/UI/AspNetCore/Dynamic-JavaScript-Proxies). |
|||
|
|||
#### Creating Angular client proxies |
|||
|
|||
Angular developers knows that the generate-proxy command was already available in ABP's previous versions to create client-side proxy services in the Angular UI. The same functionality continues to be available and already [documented here](https://docs.abp.io/en/abp/latest/UI/Angular/Service-Proxies). |
|||
|
|||
**Example usage:** |
|||
|
|||
````bash |
|||
abp generate-proxy -t ng -u https://localhost:44305 |
|||
```` |
|||
|
|||
### Transactional Outbox & Inbox for the Distributed Event Bus |
|||
|
|||
This was one of the most awaited features by distributed software developers. |
|||
|
|||
The [transactional outbox pattern](https://microservices.io/patterns/data/transactional-outbox.html) is used to publishing distributed events within the same transaction that manipulates the application database. Distributed events are saved into the database inside the same transaction with your data changes, then sent to the message broker (like RabbitMQ or Kafka) by a separate background worker with a re-try system. In this way, it ensures the consistency between your database state and the published events. |
|||
|
|||
The transactional inbox pattern, on the other hand, saves incoming events into database first, then executes the event handler in a transactional manner and removes the event from the inbox queue in the same transaction. It also ensures that the event is only executed one time by keeping the processed messages for a while and discarding the duplicate events received from the message broker. |
|||
|
|||
Enabling the inbox and outbox patterns requires a few manual steps for your application. We've created a simple [console application example](https://github.com/abpframework/abp/tree/dev/test/DistEvents), but I will also explain all the steps here. |
|||
|
|||
#### Pre-requirements |
|||
|
|||
First of all, you need to have EF Core or MongoDB installed into your solution. It should be already installed if you'd created a solution from the ABP startup template. |
|||
|
|||
#### Install the packages |
|||
|
|||
Install the new [Volo.Abp.EventBus.Boxes](https://www.nuget.org/packages/Volo.Abp.EventBus.Boxes) NuGet package to your database layer (to `EntityFrameworkCore` or `MongoDB` project) or to the host application. Open a command-line terminal at the root directory of your database (or host) project and execute the following command: |
|||
|
|||
````csharp |
|||
abp add-package Volo.Abp.EventBus.Boxes |
|||
```` |
|||
|
|||
This will install the package and setup the ABP module dependency. This package depends on [DistributedLock.Core](https://www.nuget.org/packages/DistributedLock.Core) library which provides a distributed locking system for concurrency control in a distributed environment. There are [many distributed lock providers](https://github.com/madelson/DistributedLock#implementations), including Redis, SqlServer and ZooKeeper. You can use the one you like. Here, I will show the Redis provider. |
|||
|
|||
Add [DistributedLock.Redis](https://www.nuget.org/packages/DistributedLock.Redis) NuGet package to your project, then add the following code into the ConfigureService method of your ABP module class: |
|||
|
|||
````csharp |
|||
context.Services.AddSingleton<IDistributedLockProvider>(sp => |
|||
{ |
|||
var connection = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]); |
|||
return new RedisDistributedSynchronizationProvider(connection.GetDatabase()); |
|||
}); |
|||
```` |
|||
|
|||
We are getting the Redis configuration from the `appsettings.json` file, so add the following lines to your `appsettings.json` file: |
|||
|
|||
````json |
|||
"Redis": { |
|||
"Configuration": "127.0.0.1" |
|||
} |
|||
```` |
|||
|
|||
You can change the IP or customize the configuration based on your environment. |
|||
|
|||
#### Configure the DbContext |
|||
|
|||
Open your `DbContext` class, implement the `IHasEventInbox` and the `IHasEventOutbox` interfaces. You should end up by adding two `DbSet` properties into your `DbContext` class: |
|||
|
|||
````csharp |
|||
public DbSet<IncomingEventRecord> IncomingEvents { get; set; } |
|||
public DbSet<OutgoingEventRecord> OutgoingEvents { get; set; } |
|||
```` |
|||
|
|||
Add the following lines inside the `OnModelCreating` method of your `DbContext` class: |
|||
|
|||
````csharp |
|||
builder.ConfigureEventInbox(); |
|||
builder.ConfigureEventOutbox(); |
|||
```` |
|||
|
|||
It is similar for MongoDB; implement the `IHasEventInbox` and the `IHasEventOutbox` interfaces. There is no `Configure...` method for MongoDB. |
|||
|
|||
Now, we've added inbox/outbox related tables to our database schema. Now, for EF Core, use the standard `Add-Migration` and `Update-Database` commands to apply changes into your database (you can skip this step for MongoDB). If you want to use the command-line terminal, run the following commands in the root directory of the database integration project: |
|||
|
|||
````bash |
|||
dotnet ef migrations add "Added_Event_Boxes" |
|||
dotnet ef database update |
|||
```` |
|||
|
|||
#### Configure the distributed event bus options |
|||
|
|||
As the last step, write the following configuration code inside the `ConfigureServices` method of your module class: |
|||
|
|||
````csharp |
|||
Configure<AbpDistributedEventBusOptions>(options => |
|||
{ |
|||
options.Outboxes.Configure(config => |
|||
{ |
|||
config.UseDbContext<YourDbContext>(); |
|||
}); |
|||
|
|||
options.Inboxes.Configure(config => |
|||
{ |
|||
config.UseDbContext<YourDbContext>(); |
|||
}); |
|||
}); |
|||
```` |
|||
|
|||
Replace `YourDbContext` with your `DbContext` class. |
|||
|
|||
That's all. You can continue to publishing and consuming events just as before. See the [distributed event bus documentation](https://docs.abp.io/en/abp/latest/Distributed-Event-Bus) if you don't know how to use it. |
|||
|
|||
### Publishing events in transaction |
|||
|
|||
The previous feature (outbox & inbox) solves the transactional event publishing problem for distributed systems. This feature, publishing events in transaction, solves the problem of executing event handlers in the same transaction that the events are published in for non-distributed applications. With 5.0, all events (local or distributed) are handled in the same transaction. If any handler fails, the transaction is rolled back. If you don't want that, you should use try/catch and ignore the exception inside your event handler. |
|||
|
|||
Remember that if you don't install a real distributed event provider (like [RabbitMQ](https://docs.abp.io/en/abp/latest/Distributed-Event-Bus-RabbitMQ-Integration) or [Kafka](https://docs.abp.io/en/abp/latest/Distributed-Event-Bus-Kafka-Integration)), the [distributed events](https://docs.abp.io/en/abp/latest/Distributed-Event-Bus) are actually executed in-process, just like the [local events](https://docs.abp.io/en/abp/latest/Local-Event-Bus). So, with this development, all the events become transactional, even if your system is distributed or not. |
|||
|
|||
No action needed to take. It will just work by default. There is a [deprecation note](https://github.com/abpframework/abp/issues/9897) related to this change (some pre-defined events [will be removed](https://github.com/abpframework/abp/issues/9908) in the next major version since they are not needed anymore) |
|||
|
|||
### Inactivating a user |
|||
|
|||
The [Identity module](https://docs.abp.io/en/abp/latest/Modules/Identity) has a new feature to make a user active or inactive. Inactive users can not login to the system. In this way, you can disable a user account without deleting it. An *Active* checkbox is added to the user create/edit dialog to control it on the UI: |
|||
|
|||
 |
|||
|
|||
EF Core developers should add a new database migration since this brings a new field to the `AbpUsers` table. |
|||
|
|||
### Overriding email settings per tenant |
|||
|
|||
If you're building a multi-tenant application, it is now possible to override email sending settings per tenant. To make this possible, you should first enable that [feature](https://docs.abp.io/en/abp/latest/Features) to the tenant you want, by clicking the *Actions -> Features* for the tenant. |
|||
|
|||
 |
|||
|
|||
Enable the feature using the checkbox as shown in the following modal: |
|||
|
|||
 |
|||
|
|||
Then the tenant admin can open the email settings page under the Administration -> Settings menu (on development environment, logout, switch to the tenant and re-login with the tenant admin): |
|||
|
|||
 |
|||
|
|||
### Hangfire dashboard permission |
|||
|
|||
ABP allows to use Hangfire as the background job manager when you install the integration package [as documented](https://docs.abp.io/en/abp/5.0/Background-Jobs-Hangfire). Hangfire's dashboard is used to monitor and control the background job queues. Here, a screenshot from the dashboard: |
|||
|
|||
 |
|||
|
|||
Hangfire's dashboard is not authorized by default, so any user can navigate to the `/hangfire` URL and see/control the jobs. With the ABP version 5.0, we've added a built-in authorization implementation for the Hangfire dashboard. Instead of `app.UseHangfireDashboard();`, you can use the following middleware configuration: |
|||
|
|||
````csharp |
|||
app.UseHangfireDashboard("/hangfire", new DashboardOptions |
|||
{ |
|||
AsyncAuthorization = new[] { new AbpHangfireAuthorizationFilter() } |
|||
}); |
|||
```` |
|||
|
|||
In this way, only the authenticated users can see the dashboard. However, we suggest to set a permission name, so only the users with that permission can see the dashboard: |
|||
|
|||
````csharp |
|||
app.UseHangfireDashboard("/hangfire", new DashboardOptions |
|||
{ |
|||
AsyncAuthorization = new[] { |
|||
new AbpHangfireAuthorizationFilter("MyPermissionName") |
|||
} |
|||
}); |
|||
```` |
|||
|
|||
You can define the permission (`MyPermissionName` in this example) using the standard [permission system](https://docs.abp.io/en/abp/5.0/Authorization#permission-system). |
|||
|
|||
### Introducing AbpControllerBase |
|||
|
|||
ABP provides an `AbpController` class that you can inherit your MVC controllers from. It provides some pre-injected services to simplify your controllers. With v5.0, we are adding a second base controller class, `AbpControllerBase`, which is more proper to create API controllers (without view features). It is suggested to inherit from the `AbpControllerBase` class to create API controllers, instead of the `AbpController` class. |
|||
|
|||
**Example:** |
|||
|
|||
````csharp |
|||
[Route("api/products")] |
|||
public class ProductController : AbpControllerBase |
|||
{ |
|||
// TODO: ... |
|||
} |
|||
```` |
|||
|
|||
## Ongoing Works & Next Release |
|||
|
|||
We'd published important features and changes with this beta 1 release. However, there are still some major works in development. The most important work is the **Bootstrap 5 upgrade**. ABP 5.0 will work on Bootstrap 5, which is an important change for existing applications. We suggest to prepare for this change from now. |
|||
|
|||
The next release will be 5.0.0-beta.2. It will include the Bootstrap 5 upgrade. We don't plan make another big work for the version 5.0. After the beta.2, we will work on tests, feedbacks and documentation to prepare a stable final release. |
|||
|
|||
## Community News |
|||
|
|||
### ABP was on ASP.NET Community Startup! |
|||
|
|||
It was great for us to be invited to Microsoft's [ASP.NET Community Weekly Standup](https://dotnet.microsoft.com/live/community-standup) show, at September 28. There was a very high attention and that made us very happy. Thanks to the ABP Community and all the watchers :) If you've missed the talk, [you can watch it here](https://www.youtube.com/watch?v=vMWM-_ihjwM). |
|||
|
|||
### Upcoming ABP Book! |
|||
|
|||
I am currently authoring the first official book for the ABP Framework and it is on [pre-sale on Amazon](https://www.amazon.com/Mastering-ABP-Framework-maintainable-implementing-dp-1801079242/dp/1801079242) now. |
|||
|
|||
 |
|||
|
|||
This books is a complete guide to start working with the ABP Framework, explore the ABP features and concepts. It also contains chapters for DDD, modular application development and multi-tenancy to learn and practically work with the ABP architecture to build maintainable software solutions and create SaaS applications. The book will be based on ABP 5.0 and published in the beginning of 2022. You can [pre-order now](https://www.amazon.com/Mastering-ABP-Framework-maintainable-implementing-dp-1801079242/dp/1801079242)! |
|||
|
|||
### New ABP Community posts |
|||
|
|||
Here, the latest posts added to the [ABP community](https://community.abp.io/): |
|||
|
|||
* [Deploy ABP Framework .NET Core tiered application to docker swarm](https://community.abp.io/articles/deploy-abp-framework-dotnet-core-tiered-app-to-docker-swarm-kcrjbjec) |
|||
* [How to override localization strings of depending modules](https://community.abp.io/articles/how-to-override-localization-strings-of-depending-modules-ba1oy03l) |
|||
* [Centralized logging for .NET Core ABP microservices application using Seq](https://community.abp.io/articles/centralized-logging-for-.net-core-abp-microservices-app-using-seq-g1xe7e7y) |
|||
* [Extend Tenant management and add custom host to your ABP application](https://community.abp.io/articles/extend-tenant-management-and-add-custom-host-to-your-abp-app-lwmi9lr5) |
|||
|
|||
Thanks to the ABP Community for all the contents they have published. You can also post your ABP and .NET related (text or video) contents to the ABP Community. |
|||
|
|||
## Conclusion |
|||
|
|||
The ABP version 5.0 is coming with important changes (like .NET 6 and Bootstrap 5) and features. In this blog post, I summarized the news about that new version. Please try it and provide feedback by opening issues on [the GitHub repository](https://github.com/abpframework/abp). Thank you all! |
|||
|
After Width: | Height: | Size: 125 KiB |
|
After Width: | Height: | Size: 4.8 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 26 KiB |
@ -0,0 +1,88 @@ |
|||
# How to override localization strings of depending modules |
|||
|
|||
## Source Code |
|||
|
|||
You can find the source of the example solution used in this article [here](https://github.com/abpframework/abp-samples/tree/master/DocumentationSamples/ExtendLocalizationResource). |
|||
|
|||
## Getting Started |
|||
|
|||
This example is based on the following document |
|||
https://docs.abp.io/en/abp/latest/Localization#extending-existing-resource |
|||
|
|||
We will change the default `DisplayName:Abp.Timing.Timezone` and `Description:Abp.Timing.Timezone` of [`AbpTimingResource`](https://github.com/abpframework/abp/blob/dev/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/AbpTimingResource.cs) and add localized text in [Russian language(`ru`)](https://github.com/abpframework/abp/blob/dev/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/en.json). |
|||
|
|||
I created the `AbpTiming` folder in the `Localization` directory of the `ExtendLocalizationResource.Domain.Shared` project. |
|||
|
|||
Create `en.json` and `ru.json` in its directory. |
|||
|
|||
`en.json` |
|||
```json |
|||
{ |
|||
"culture": "en", |
|||
"texts": { |
|||
"DisplayName:Abp.Timing.Timezone": "My Time zone", |
|||
"Description:Abp.Timing.Timezone": "My Application time zone" |
|||
} |
|||
} |
|||
``` |
|||
|
|||
`ru.json` |
|||
```json |
|||
{ |
|||
"culture": "ru", |
|||
"texts": { |
|||
"DisplayName:Abp.Timing.Timezone": "Часовой пояс", |
|||
"Description:Abp.Timing.Timezone": "Часовой пояс приложения" |
|||
} |
|||
} |
|||
``` |
|||
|
|||
 |
|||
|
|||
We have below content in `ExtendLocalizationResource.Domain.Shared.csproj` file, See [Virtual-File-System](https://docs.abp.io/en/abp/latest/Virtual-File-System#working-with-the-embedded-files) understand how it works. |
|||
|
|||
```xml |
|||
<ItemGroup> |
|||
<EmbeddedResource Include="Localization\ExtendLocalizationResource\*.json" /> |
|||
<Content Remove="Localization\ExtendLocalizationResource\*.json" /> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="5.0.*" /> |
|||
</ItemGroup> |
|||
``` |
|||
|
|||
Change the code of the `ConfigureServices` method in `ExtendLocalizationResourceDomainSharedModule`. |
|||
|
|||
```cs |
|||
Configure<AbpLocalizationOptions>(options => |
|||
{ |
|||
options.Resources |
|||
.Add<ExtendLocalizationResourceResource>("en") |
|||
.AddBaseTypes(typeof(AbpValidationResource)) |
|||
.AddVirtualJson("/Localization/ExtendLocalizationResource"); |
|||
|
|||
//add following code |
|||
options.Resources |
|||
.Get<AbpTimingResource>() |
|||
.AddVirtualJson("/Localization/AbpTiming"); |
|||
|
|||
options.DefaultResourceType = typeof(ExtendLocalizationResourceResource); |
|||
}); |
|||
``` |
|||
|
|||
Execute `ExtendLocalizationResource.DbMigrator` to migrate the database and run `ExtendLocalizationResource.Web`. |
|||
|
|||
We have changed the English localization text and added Russian localization. |
|||
|
|||
### Index page |
|||
|
|||
```cs |
|||
<p>@AbpTimingResource["DisplayName:Abp.Timing.Timezone"]</p> |
|||
@using(CultureHelper.Use("ru")) |
|||
{ |
|||
<p>@AbpTimingResource["DisplayName:Abp.Timing.Timezone"]</p> |
|||
} |
|||
``` |
|||
|
|||
 |
|||
@ -1,3 +1,3 @@ |
|||
# Configuration |
|||
# Configuration |
|||
|
|||
ASP.NET Core has an flexible and extensible key-value based configuration system. In fact, the configuration system is a part of Microsoft.Extensions libraries and it is independent from ASP.NET Core. That means it can be used in any type of application. See [Microsoft's documentation](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/) to learn the configuration infrastructure. ABP framework is 100% compatible with the configuration system. |
|||
@ -0,0 +1,133 @@ |
|||
# Distributed Event Bus Azure Integration |
|||
|
|||
> This document explains **how to configure the [Azure Service Bus](https://azure.microsoft.com/en-us/services/service-bus/)** as the distributed event bus provider. See the [distributed event bus document](Distributed-Event-Bus.md) to learn how to use the distributed event bus system |
|||
|
|||
## Installation |
|||
|
|||
Use the ABP CLI to add [Volo.Abp.EventBus.Azure](https://www.nuget.org/packages/Volo.Abp.EventBus.Azure) NuGet package to your project: |
|||
|
|||
* Install the [ABP CLI](https://docs.abp.io/en/abp/latest/CLI) if you haven't installed before. |
|||
* Open a command line (terminal) in the directory of the `.csproj` file you want to add the `Volo.Abp.EventBus.Azure` package. |
|||
* Run `abp add-package Volo.Abp.EventBus.Azure` command. |
|||
|
|||
If you want to do it manually, install the [Volo.Abp.EventBus.Azure](https://www.nuget.org/packages/Volo.Abp.EventBus.Azure) NuGet package to your project and add `[DependsOn(typeof(AbpEventBusAzureModule))]` to the [ABP module](Module-Development-Basics.md) class inside your project. |
|||
|
|||
## Configuration |
|||
|
|||
You can configure using the standard [configuration system](Configuration.md), like using the `appsettings.json` file, or using the [options](Options.md) classes. |
|||
|
|||
### `appsettings.json` file configuration |
|||
|
|||
This is the simplest way to configure the Azure Service Bus settings. It is also very strong since you can use any other configuration source (like environment variables) that is [supported by the AspNet Core](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/). |
|||
|
|||
**Example: The minimal configuration to connect to Azure Service Bus Namespace with default configurations** |
|||
|
|||
````json |
|||
{ |
|||
"Azure": { |
|||
"ServiceBus": { |
|||
"Connections": { |
|||
"Default": { |
|||
"ConnectionString": "Endpoint=sb://sb-my-app.servicebus.windows.net/;SharedAccessKeyName={{Policy Name}};SharedAccessKey={};EntityPath=marketing-consent" |
|||
} |
|||
} |
|||
}, |
|||
"EventBus": { |
|||
"ConnectionName": "Default", |
|||
"SubscriberName": "MySubscriberName", |
|||
"TopicName": "MyTopicName" |
|||
} |
|||
} |
|||
} |
|||
```` |
|||
|
|||
* `MySubscriberName` is the name of this subscription, which is used as the **Subscriber** on the Azure Service Bus. |
|||
* `MyTopicName` is the **topic name**. |
|||
|
|||
See [the Azure Service Bus document](https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-queues-topics-subscriptions) to understand these options better. |
|||
|
|||
#### Connections |
|||
|
|||
If you need to connect to another Azure Service Bus Namespace the Default, you need to configure the connection properties. |
|||
|
|||
**Example: Declare two connections and use one of them for the event bus** |
|||
|
|||
````json |
|||
{ |
|||
"Azure": { |
|||
"ServiceBus": { |
|||
"Connections": { |
|||
"Default": { |
|||
"ConnectionString": "Endpoint=sb://sb-my-app.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey={{SharedAccessKey}}" |
|||
}, |
|||
"SecondConnection": { |
|||
"ConnectionString": "Endpoint=sb://sb-my-app.servicebus.windows.net/;SharedAccessKeyName={{Policy Name}};SharedAccessKey={{SharedAccessKey}}" |
|||
} |
|||
} |
|||
}, |
|||
"EventBus": { |
|||
"ConnectionName": "SecondConnection", |
|||
"SubscriberName": "MySubscriberName", |
|||
"TopicName": "MyTopicName" |
|||
} |
|||
} |
|||
} |
|||
```` |
|||
|
|||
This allows you to use multiple Azure Service Bus namespaces in your application, but select one of them for the event bus. |
|||
|
|||
You can use any of the [ServiceBusAdministrationClientOptions](https://docs.microsoft.com/en-us/dotnet/api/azure.messaging.servicebus.administration.servicebusadministrationclientoptions?view=azure-dotnet), [ServiceBusClientOptions](https://docs.microsoft.com/en-us/dotnet/api/azure.messaging.servicebus.servicebusclientoptions?view=azure-dotnet), [ServiceBusProcessorOptions](https://docs.microsoft.com/en-us/dotnet/api/azure.messaging.servicebus.servicebusprocessoroptions?view=azure-dotnet) properties for the connection. |
|||
|
|||
**Example: Specify the Admin, Client and Processor options** |
|||
|
|||
````json |
|||
{ |
|||
"Azure": { |
|||
"ServiceBus": { |
|||
"Connections": { |
|||
"Default": { |
|||
"ConnectionString": "Endpoint=sb://sb-my-app.servicebus.windows.net/;SharedAccessKeyName={{Policy Name}};SharedAccessKey={};EntityPath=marketing-consent", |
|||
"Admin": { |
|||
"Retry": { |
|||
"MaxRetries": 3 |
|||
} |
|||
}, |
|||
"Client": { |
|||
"RetryOptions": { |
|||
"MaxRetries": 1 |
|||
} |
|||
}, |
|||
"Processor": { |
|||
"AutoCompleteMessages": true, |
|||
"ReceiveMode": "ReceiveAndDelete" |
|||
} |
|||
} |
|||
} |
|||
}, |
|||
"EventBus": { |
|||
"ConnectionName": "Default", |
|||
"SubscriberName": "MySubscriberName", |
|||
"TopicName": "MyTopicName" |
|||
} |
|||
} |
|||
} |
|||
```` |
|||
|
|||
### The Options Classes |
|||
|
|||
`AbpAzureServiceBusOptions` and `AbpAzureEventBusOptions` classes can be used to configure the connection strings and event bus options for Azure Service Bus. |
|||
|
|||
You can configure this options inside the `ConfigureServices` of your [module](Module-Development-Basics.md). |
|||
|
|||
**Example: Configure the connection** |
|||
|
|||
````csharp |
|||
Configure<AbpAzureServiceBusOptions>(options => |
|||
{ |
|||
options.Connections.Default.ConnectionString = "Endpoint=sb://sb-my-app.servicebus.windows.net/;SharedAccessKeyName={{Policy Name}};SharedAccessKey={}"; |
|||
options.Connections.Default.Admin.Retry.MaxRetries = 3; |
|||
options.Connections.Default.Client.RetryOptions.MaxRetries = 1; |
|||
}); |
|||
```` |
|||
|
|||
Using these options classes can be combined with the `appsettings.json` way. Configuring an option property in the code overrides the value in the configuration file. |
|||