From 6b6e39691f2221cd6971c36602bde82c095aab97 Mon Sep 17 00:00:00 2001 From: Iulian Alexe Date: Tue, 13 Jul 2021 16:01:07 +0300 Subject: [PATCH 01/32] Add new language: Romanian --- .../Account/Localization/Resources/ro-RO.json | 14 + .../Admin/Localization/Resources/ro-RO.json | 308 +++++++++++++++ .../Base/Localization/Resources/ro-RO.json | 40 ++ .../Blog/Localization/Resources/ro-RO.json | 5 + .../Localization/Resources/ro-RO.json | 363 ++++++++++++++++++ .../Localization/Resources/ro-RO.json | 147 +++++++ .../Docs/Localization/Resources/ro-RO.json | 5 + .../Support/Localization/Resources/ro-RO.json | 5 + .../Www/Localization/Resources/ro-RO.json | 278 ++++++++++++++ .../UI/MultiTenancy/Localization/ro-RO.json | 13 + .../Abp/Authorization/Localization/ro-RO.json | 10 + .../Localization/Resources/AbpDdd/ro-RO.json | 6 + .../Volo/Abp/Emailing/Localization/ro-RO.json | 25 ++ .../ExceptionHandling/Localization/ro-RO.json | 26 ++ .../Volo/Abp/Features/Localization/ro-RO.json | 8 + .../GlobalFeatures/Localization/ro-RO.json | 6 + .../Volo/Abp/Ldap/Localization/ro-RO.json | 19 + .../Resources/AbpLocalization/ro-RO.json | 7 + .../Volo/Abp/Timing/Localization/ro-RO.json | 7 + .../Localization/Resource/ro-RO.json | 6 + .../Localization/Resources/AbpUi/ro-RO.json | 52 +++ .../Abp/Validation/Localization/ro-RO.json | 34 ++ .../Mvc/AbpAspNetCoreMvcTestModule.cs | 1 + .../Account/Localization/Resources/ro-RO.json | 67 ++++ .../Database/Localization/ro-RO.json | 6 + .../Localization/Resources/ro-RO.json | 61 +++ .../CmsKitHttpApiHostModule.cs | 1 + .../CmsKitIdentityServerModule.cs | 1 + .../CmsKitWebUnifiedModule.cs | 1 + .../CmsKit/Localization/Resources/ro-RO.json | 163 ++++++++ .../Resources/VoloDocs/Web/ro-RO.json | 10 + .../app/VoloDocs.Web/VoloDocsWebModule.cs | 1 + .../Docs/ApplicationContracts/ro-RO.json | 59 +++ .../Volo/Docs/Localization/Domain/ro-RO.json | 41 ++ .../Localization/Domain/ro-RO.json | 10 + .../Volo/Abp/Identity/Localization/ro-RO.json | 110 ++++++ .../LocalizationExtensions/ro-RO.json | 7 + .../Localization/Resources/ro-RO.json | 15 + .../Localization/Domain/ro-RO.json | 10 + .../DemoAppModule.cs | 1 + .../Resources/AbpSettingManagement/ro-RO.json | 22 ++ .../Localization/Resources/ro-RO.json | 23 ++ .../AbpVirtualFileExplorerDemoAppModule.cs | 1 + .../Localization/Resources/ro-RO.json | 14 + .../MyProjectNameBlazorModule.cs | 1 + .../MyProjectNameBlazorModule.cs | 1 + .../Localization/MyProjectName/ro-RO.json | 8 + .../MyProjectNameHttpApiHostModule.cs | 1 + .../MyProjectNameHttpApiHostModule.cs | 1 + .../MyProjectNameIdentityServerModule.cs | 1 + .../MyProjectNameWebModule.cs | 1 + .../MyProjectNameBlazorHostModule.cs | 1 + .../MyProjectNameHttpApiHostModule.cs | 1 + .../MyProjectNameIdentityServerModule.cs | 1 + .../MyProjectNameWebUnifiedModule.cs | 1 + .../Localization/MyProjectName/ro-RO.json | 7 + 56 files changed, 2034 insertions(+) create mode 100644 abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/ro-RO.json create mode 100644 abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/ro-RO.json create mode 100644 abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/ro-RO.json create mode 100644 abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/ro-RO.json create mode 100644 abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ro-RO.json create mode 100644 abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ro-RO.json create mode 100644 abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/ro-RO.json create mode 100644 abp_io/AbpIoLocalization/AbpIoLocalization/Support/Localization/Resources/ro-RO.json create mode 100644 abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ro-RO.json create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/ro-RO.json create mode 100644 framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/ro-RO.json create mode 100644 framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/ro-RO.json create mode 100644 framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/ro-RO.json create mode 100644 framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/ro-RO.json create mode 100644 framework/src/Volo.Abp.Features/Volo/Abp/Features/Localization/ro-RO.json create mode 100644 framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/Localization/ro-RO.json create mode 100644 framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/ro-RO.json create mode 100644 framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/ro-RO.json create mode 100644 framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/ro-RO.json create mode 100644 framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/ro-RO.json create mode 100644 framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ro-RO.json create mode 100644 framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/ro-RO.json create mode 100644 modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/ro-RO.json create mode 100644 modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/Localization/ro-RO.json create mode 100644 modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/ro-RO.json create mode 100644 modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ro-RO.json create mode 100644 modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/ro-RO.json create mode 100644 modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ro-RO.json create mode 100644 modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/ro-RO.json create mode 100644 modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/ro-RO.json create mode 100644 modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ro-RO.json create mode 100644 modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/LocalizationExtensions/ro-RO.json create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/ro-RO.json create mode 100644 modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/ro-RO.json create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/ro-RO.json create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/ro-RO.json create mode 100644 modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Localization/Resources/ro-RO.json create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/ro-RO.json create mode 100644 templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/ro-RO.json diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/ro-RO.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/ro-RO.json new file mode 100644 index 0000000000..299aea53ed --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Account/Localization/Resources/ro-RO.json @@ -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" + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/ro-RO.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/ro-RO.json new file mode 100644 index 0000000000..caf032d940 --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/ro-RO.json @@ -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" + } +} diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/ro-RO.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/ro-RO.json new file mode 100644 index 0000000000..37084abbaf --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/ro-RO.json @@ -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}" + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/ro-RO.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/ro-RO.json new file mode 100644 index 0000000000..c5a76c1617 --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Blog/Localization/Resources/ro-RO.json @@ -0,0 +1,5 @@ +{ + "culture": "ro-RO", + "texts": { + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ro-RO.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ro-RO.json new file mode 100644 index 0000000000..d5dcbfa751 --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ro-RO.json @@ -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": "A complete web development platformbuilt-on framework", + "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": "

ABP Commercial se bazează pe framework-ul ABP, un framework open source şi bazat pe comunitate pentru ASP.NET Core.

ABP Framework oferă o infrastructură excelentă pentru a scrie cod care poate fi întreţinut, extins şi testat cu cele mai bune practici.

Construit şi integrat în instrumentele populare pe care le cunoaşteţi deja. Curbă de învăţare redusă, adaptare uşoară, dezvoltare confortabilă.

", + "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": "

Construirea de aplicaţii web de nivel enterprise poate fi complexă şi poate consuma mult timp.

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.

", + "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 50 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? Noi şi partenerii noştri vi le putem oferi;", + "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 Autentificaţi-vă 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 şi altele)", + "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 modul sau un microserviciu reutilizabil.", + "ModuleTemplateExplanation2": "

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 şi testa modulul dumneavoastră într-o aplicaţie minimă, în plus faţă de infrastructura de testare şi integrare.

Consultaţi ghidul dezvoltatorului pentru informaţii tehnice despre acest şablon.

", + "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ă Ajutăm", + "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 formularul de contact.", + "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 ABP framework. ABP Commercial este dezvoltat şi întreţinut de către aceeaşi echipă din spatele ABP framework.", + "WhatAreDifferencesThanABPFrameworkExplanation": "

ABP framework 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.

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).

", + "VisitTheFrameworkVSCommercialDocument": "Accesaţi următorul link, pentru mai multe informaţii {1} ", + "ABPCommercialFollowingBenefits": "ABP Commercial adaugă următoarele beneficii peste framework-ul ABP;", + "Professional": "Profesional", + "UIThemes": "Teme UI", + "EnterpriseModules": "Module de aplicaţii 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. Suita ABP)", + "PremiumSupportLink": "Asistenţă 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 Noţiuni de bază.", + "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 tutoriale", + "TryTheCommercialDemo": "Puteţi încerca versiunea demo 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 preţurile 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": "Prelungirea: 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.
Îmbunătăţirea: 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 tabelul de comparare a licenţelor pentru a verifica diferenţele dintre planurile de licenţă.Pe de altă parte, când îmbunătăţiţi licenţa, data de expirare a acesteia nu se va schimba!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, autentificaţi-vă 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 pagina de gestionare a organizaţiei. 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": "Team: 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": "Business/Enterprise: 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": "

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ă.

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.

Consultaţi preţurile pentru alte diferenţe între tipurile de licenţe.

", + "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 licenţă perpetuă. 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 asistenţă premium.", + "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 1 lună 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.
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, ABP CLI 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 documentul de acces la date 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 documentul de început 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 arhitectura micro-service 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 celor mai bune practici de dezvoltare a modulelor.", + "MicroserviceSupportExplanation3": "Vă oferim soluţie demo de micro-servicii 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 \"da, suportă o arhitectură de micro-service\".", + "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 Cum descarc codul sursă?", + "ComputerLimitation": "Pe câte calculatoare se poate autentifica un dezvoltator atunci când foloseşte ABP ABP?", + "ComputerLimitationExplanation": "Permitem în mod specific {0} staţii 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 30 de zile 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ă 2Checkout", + "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 facturarea 2Checkout. 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 pagina de gestionare a organizaţiei.", + "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 documentul", + "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 Pagini Razor şi Angular. Suportă de asemenea şi baze de date multiple, precum MongoDB şi toate bazele de date suportate de EntityFramework Core (MS SQL Server, Oracle, MySql, PostgreSQL şi altele).", + "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 Entity, Repository, Application Service, Code First Migration, JavaScript/TypeScript şi CSHTML/HTML şi interfeţele necesare de asemenea. Suita ABP generează de asemenea codul respectând Cele mai bune practici 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 Windows, Mac şi Linux", + "OtherFeatures": "Alte funcţionalităţi", + "OtherFeatures1": "Actualizeată pachetele NuGet şi NPM 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 Termenii şi condiţiile şi Politica de confidenţialitate.", + "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}.
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.
Pentru a descărca e-book-ul, click aici.", + "FreeDDDEBook": "DDD E-Book gratuit" + } +} diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ro-RO.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ro-RO.json new file mode 100644 index 0000000000..7b93754482 --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ro-RO.json @@ -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 politica de confidenţialitate.", + "ArticleRequestMessageTitle": "Deschideţi o problemă pe 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": "1. Scrieţi un articol pe orice repository GitHub folosind formatul Markup. exemplu", + "GithubArticleSubmitStepTwo": "2. Trimiteţi Url-ul articolului folosind formularul.", + "GithubArticleSubmitStepThree": "3. Articolul dumneavoastră va fi redat în acest site web.", + "YoutubeVideo": "Videoclip YouTube", + "YoutubeVideoSubmitStepOne": "1. Publicaţi-vă videoclipul pe YouTube.", + "YoutubeVideoSubmitStepTwo": "2. Trimieţi Url-ul videoclipului folosind formularul.", + "YoutubeVideoSubmitStepThree": "3. Vizitatorii vor putea să vă vizioneze conţinutul video direct de pe acest site web.", + "ExternalContent": "Conţinut extern", + "ExternalContentSubmitStepOne": "1. Creaţi conţinut pe orice platformă publică (mediu, blogul dumneavoastră sau oriunde doriţi).", + "ExternalContentSubmitStepTwo": "2. Trimiteţi-vă conţinutul URL folosind formularul.", + "ExternalContentSubmitStepThree": "3. 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 GitHub conform cu regulile de reducere.", + "PostContentViaYoutube": "Vreau să distribui videoclipurile mele disponibile de pe YouTube aici.", + "PostContentViaExternalSource": "Vreau să adaug conţinutul pe care l-am publicat pe altă platformă 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!" + } +} diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/ro-RO.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/ro-RO.json new file mode 100644 index 0000000000..c5a76c1617 --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Docs/Localization/Resources/ro-RO.json @@ -0,0 +1,5 @@ +{ + "culture": "ro-RO", + "texts": { + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Support/Localization/Resources/ro-RO.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Support/Localization/Resources/ro-RO.json new file mode 100644 index 0000000000..c5a76c1617 --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Support/Localization/Resources/ro-RO.json @@ -0,0 +1,5 @@ +{ + "culture": "ro-RO", + "texts": { + } +} \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ro-RO.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ro-RO.json new file mode 100644 index 0000000000..1e9abb9e87 --- /dev/null +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ro-RO.json @@ -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 Hangfire & RabbitMQ 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 mapării obiect la obiect 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 {0} documentul pentru mai multe informaţii", + "IndexPageHeroSection": "open sourceWeb Application
Framework
pentru asp.net core", + "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 JavaScript & C#.", + "EmailSMSAbstractionsDocument": "Consultaţi documentele de emailing and trimiterea de SMS 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": "Citiţi Documentaţia", + "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 new creează o aplicaţie stratificată MVC cu Entity Framework Core ca şi furnizor de baze de date. Totuşi, are şi alte opţiuni. Exemple:", + "SeeCliDocumentForMoreInformation": "Consultaţi documentul ABP CLI 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 Abp CLI", + "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 Termenii & condiţiile şi Politica de confidenţialitate.", + "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.
Pentru a descărca cartea, click aici.", + "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!" + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/ro-RO.json b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/ro-RO.json new file mode 100644 index 0000000000..e431f56838 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy/Volo/Abp/AspNetCore/Mvc/UI/MultiTenancy/Localization/ro-RO.json @@ -0,0 +1,13 @@ +{ + "culture": "ro-RO", + "texts": { + "GivenTenantIsNotExist": "Tenantul {0} nu există", + "GivenTenantIsNotAvailable": "Tenantul {0} nu este disponibil", + "Tenant": "Tenant", + "Switch": "schimbă", + "Name": "Nume", + "SwitchTenantHint": "Lăsaţi câmpul de nume gol pentru a schimba pe host.", + "SwitchTenant": "Schimbă tenant", + "NotSelected": "Neselectat" + } +} diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/ro-RO.json b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/ro-RO.json new file mode 100644 index 0000000000..e330581c69 --- /dev/null +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Localization/ro-RO.json @@ -0,0 +1,10 @@ +{ + "culture": "ro-RO", + "texts": { + "Volo.Authorization:010001": "Autorizare eşuată! Politica dată nu a fost acordată.", + "Volo.Authorization:010002": "Autorizare eşuată! Politica dată nu a acordat: {PolicyName}", + "Volo.Authorization:010003": "Autorizare eşuată! Politica dată nu a fost acordată pentru resursa dată: {ResourceName}", + "Volo.Authorization:010004": "Autorizare eşuată! Cerinţa dată nu a fost acordată pentru resursa dată: {ResourceName}", + "Volo.Authorization:010005": "Autorizare eşuată! Cerinţele date nu au fost acordate pentru resursa dată: {ResourceName}" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/ro-RO.json b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/ro-RO.json new file mode 100644 index 0000000000..1daa63ea0e --- /dev/null +++ b/framework/src/Volo.Abp.Ddd.Application.Contracts/Volo/Abp/Application/Localization/Resources/AbpDdd/ro-RO.json @@ -0,0 +1,6 @@ +{ + "culture": "ro-RO", + "texts": { + "MaxResultCountExceededExceptionMessage": "{0} nu poate fi mai mare decât {1}! Măriţi {2}.{3} pe partea de server pentru a permite mai multe rezultate." + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/ro-RO.json b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/ro-RO.json new file mode 100644 index 0000000000..7a41c2b5b8 --- /dev/null +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/ro-RO.json @@ -0,0 +1,25 @@ +{ + "culture": "ro-RO", + "texts": { + "DisplayName:Abp.Mailing.DefaultFromAddress": "Implicit de la adresa", + "DisplayName:Abp.Mailing.DefaultFromDisplayName": "Implicit de la numele afişat", + "DisplayName:Abp.Mailing.Smtp.Host": "Host", + "DisplayName:Abp.Mailing.Smtp.Port": "Port", + "DisplayName:Abp.Mailing.Smtp.UserName": "Nume de utilizator", + "DisplayName:Abp.Mailing.Smtp.Password": "Parola", + "DisplayName:Abp.Mailing.Smtp.Domain": "Domeniu", + "DisplayName:Abp.Mailing.Smtp.EnableSsl": "Activează SSL", + "DisplayName:Abp.Mailing.Smtp.UseDefaultCredentials": "Folosiţi credenţialele implicite", + "Description:Abp.Mailing.DefaultFromAddress": "Implicit de la adresa", + "Description:Abp.Mailing.DefaultFromDisplayName": "Implicit de la numele afişat", + "Description:Abp.Mailing.Smtp.Host": Numele sau adresa IP al hostului folosit pentru tranzacţiile SMTP.", + "Description:Abp.Mailing.Smtp.Port": "Portul folosit pentru tranzacţiile SMTP.", + "Description:Abp.Mailing.Smtp.UserName": "Numele de utilizator asociat credenţialelor.", + "Description:Abp.Mailing.Smtp.Password": "Parola folosită pentru numele de utilizator asociat credenţialelor.", + "Description:Abp.Mailing.Smtp.Domain": "Domeniul sau numele calculatorului care verifică credenţialele.", + "Description:Abp.Mailing.Smtp.EnableSsl": "Dacă SmtpClient foloseste Secure Sockets Layer (SSL) pentru a cripta conexiunea.", + "Description:Abp.Mailing.Smtp.UseDefaultCredentials": "Dacă DefaultCredentials sunt trimise odată cu solicitările.", + "TextTemplate:StandardEmailTemplates.Layout": "Şablon aspect implicit pentru email", + "TextTemplate:StandardEmailTemplates.Message": "Şablon de mesaj simplu pentru emailuri" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/ro-RO.json b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/ro-RO.json new file mode 100644 index 0000000000..e04cf971e8 --- /dev/null +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/ro-RO.json @@ -0,0 +1,26 @@ +{ + "culture": "ro-RO", + "texts": { + "InternalServerErrorMessage": "A intervenit o eroare internă în timpul solicitării dumneavoastră!", + "ValidationErrorMessage": "Solicitarea dumneavoastră este invalidă!", + "ValidationNarrativeErrorMessageTitle": "Următoarele erori au fost detectate în timpul validării", + "DefaultErrorMessage": "A intervenit o eroare!", + "DefaultErrorMessageDetail": "Detaliile erorii nu au fost trimise de către server.", + "DefaultErrorMessage401": "Nu sunteţi autentificat!", + "DefaultErrorMessage401Detail": "Ar trebui să vă autentificaţi pentru a efectua această operaţie.", + "DefaultErrorMessage403": "Nu sunteţi autorizat!", + "DefaultErrorMessage403Detail": "Nu sunteţi autorizat să efectuaţi această operaţie!", + "DefaultErrorMessage404": "Resursa nu a fost găsită!", + "DefaultErrorMessage404Detail": "Resursa solicitată nu a fost găsită pe server!", + "EntityNotFoundErrorMessage": "Nu există entitatea {0} cu id-ul {1}!", + "AbpDbConcurrencyErrorMessage": "Datele pe care le-aţi trimis au fost modificate deja de către alt utilizator/client. Vă rugăm să renunţaţi la modificările pe care le-aţi făcut şi să încercaţi de la început.", + "Error": "Eroare", + "UnhandledException": "Excepţie netratată!", + "401Message": "Neautorizat", + "403Message": "Interzis", + "404Message": "Pagina nu a fost găsită", + "500Message": "Eroare internă a serverului", + "403MessageDetail": "Nu sunteţi autorizat să efectuaţi această operaţie!", + "404MessageDetail": "Ne cerem scuze, nu este nimic la această adresă." + } +} diff --git a/framework/src/Volo.Abp.Features/Volo/Abp/Features/Localization/ro-RO.json b/framework/src/Volo.Abp.Features/Volo/Abp/Features/Localization/ro-RO.json new file mode 100644 index 0000000000..07748edfd5 --- /dev/null +++ b/framework/src/Volo.Abp.Features/Volo/Abp/Features/Localization/ro-RO.json @@ -0,0 +1,8 @@ +{ + "culture": "ro-RO", + "texts": { + "Volo.Feature:010001": "Caracteristica nu este activată: {FeatureName}", + "Volo.Feature:010002": "Caracteristicile necesare nu sunt activate. Toate aceste caracteristici trebuie activate: {FeatureNames}", + "Volo.Feature:010003": "Caracteristicile necesare nu sunt activate. Cel puţin una din aceste caracteristici trebuie activată: {FeatureNames}" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/Localization/ro-RO.json b/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/Localization/ro-RO.json new file mode 100644 index 0000000000..f2b0fa0d7b --- /dev/null +++ b/framework/src/Volo.Abp.GlobalFeatures/Volo/Abp/GlobalFeatures/Localization/ro-RO.json @@ -0,0 +1,6 @@ +{ + "culture": "ro-RO", + "texts": { + "Volo.GlobalFeature:010001": "Serviciul '{ServiceName}' trebuie să activeze caracteristica '{GlobalFeatureName}'." + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/ro-RO.json b/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/ro-RO.json new file mode 100644 index 0000000000..0444f908b3 --- /dev/null +++ b/framework/src/Volo.Abp.Ldap/Volo/Abp/Ldap/Localization/ro-RO.json @@ -0,0 +1,19 @@ +{ + "culture": "ro-RO", + "texts": { + "DisplayName:Abp.Ldap.ServerHost": "Server host", + "Description:Abp.Ldap.ServerHost": "Server host", + + "DisplayName:Abp.Ldap.ServerPort": "Server port", + "Description:Abp.Ldap.ServerPort": "Server port", + + "DisplayName:Abp.Ldap.BaseDc": "Componenta domeniului de bază", + "Description:Abp.Ldap.BaseDc": "Componenta domeniului de bază", + + "DisplayName:Abp.Ldap.UserName": "Nume de utilizator", + "Description:Abp.Ldap.UserName": "Nume de utilizator", + + "DisplayName:Abp.Ldap.Password": "Parola", + "Description:Abp.Ldap.Password": "Parola" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/ro-RO.json b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/ro-RO.json new file mode 100644 index 0000000000..2201b39e0b --- /dev/null +++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Resources/AbpLocalization/ro-RO.json @@ -0,0 +1,7 @@ +{ + "culture": "ro-RO", + "texts": { + "DisplayName:Abp.Localization.DefaultLanguage": "Limba implicită", + "Description:Abp.Localization.DefaultLanguage": "Limba implicită a aplicaţiei." + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/ro-RO.json b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/ro-RO.json new file mode 100644 index 0000000000..08716f8f5f --- /dev/null +++ b/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/ro-RO.json @@ -0,0 +1,7 @@ +{ + "culture": "ro-RO", + "texts": { + "DisplayName:Abp.Timing.Timezone": "Fus orar", + "Description:Abp.Timing.Timezone": "Fusul orar al aplicaţiei" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/ro-RO.json b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/ro-RO.json new file mode 100644 index 0000000000..fc7069e2f9 --- /dev/null +++ b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/Localization/Resource/ro-RO.json @@ -0,0 +1,6 @@ +{ + "culture": "ro-RO", + "texts": { + "Menu:Administration": "Administrare" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ro-RO.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ro-RO.json new file mode 100644 index 0000000000..b7562858d6 --- /dev/null +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ro-RO.json @@ -0,0 +1,52 @@ +{ + "culture": "ro-RO", + "texts": { + "Languages": "Limbi", + "AreYouSure": "Sunteţi sigur(ă)?", + "Cancel": "Anulează", + "Clear": "Goleşte", + "Yes": "Da", + "No": "Nu", + "Ok": "Ok", + "Close": "Închide", + "Save": "Salvează", + "SavingWithThreeDot": "Se salvează...", + "Actions": "Acţiuni", + "Delete": "Şterge", + "Edit": "Editează", + "Refresh": "Reîncarcă", + "Language": "Limba", + "LoadMore": "Încarcă mai multe", + "ProcessingWithThreeDot": "Se procesează...", + "LoadingWithThreeDot": "Se încarcă...", + "Welcome": "Bun venit", + "Login": "Autentificare", + "Register": "Înregistrare", + "Logout": "Delogare", + "Submit": "Trimite", + "Back": "Înapoi", + "PagerSearch": "Caută", + "PagerNext": "Următorul", + "PagerPrevious": "Anterior", + "PagerFirst": "Primul", + "PagerLast": "Ultimul", + "PagerInfo": "Afişate _START_ to _END_ of _TOTAL_ înregistrări", + "PagerInfo{0}{1}{2}": "Afişate {0} to {1} of {2} înregistrări", + "PagerInfoEmpty": "Afişate 0 to 0 of 0 înregistrări", + "PagerInfoFiltered": "(filtrate de la _MAX_ înregistrări totale)", + "NoDataAvailableInDatatable": "Nicio informaţie disponibilă", + "Total": "total", + "Selected": "selectate", + "PagerShowMenuEntries": "Arată _MENU_ intrări", + "DatatableActionDropdownDefaultText": "Acţiuni", + "ChangePassword": "Schimbă parola", + "PersonalInfo": "Profilul meu", + "AreYouSureYouWantToCancelEditingWarningMessage": "Aveţi modificări nesalvate.", + "GoHomePage": "Pagina principală", + "GoBack": "Înapoi", + "Search": "Caută", + "ItemWillBeDeletedMessageWithFormat": "{0} va fi şters!", + "ItemWillBeDeletedMessage": "Acest articol va fi şters!", + "ManageYourAccount": "Administraţi-vă contul" + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/ro-RO.json b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/ro-RO.json new file mode 100644 index 0000000000..ce03ecb52b --- /dev/null +++ b/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization/ro-RO.json @@ -0,0 +1,34 @@ +{ + "culture": "ro-RO", + "texts": { + "'{0}' and '{1}' do not match.": "'{0}' şi '{1}' nu se potrivesc.", + "The {0} field is not a valid credit card number.": "Câmpul {0} nu este un număr valid de card de credit.", + "{0} is not valid.": "{0} nu este valid.", + "The {0} field is not a valid e-mail address.": "Câmpul {0} nu este o adresa de e-mail validă.", + "The {0} field only accepts files with the following extensions: {1}": "Câmpul {0} acceptă doar fişiere cu următoarele extensii: {1}", + "The field {0} must be a string or array type with a maximum length of '{1}'.": "Câmpul field {0} trebuie să fie de tipul string sau array cu lungimea maximă de '{1}'.", + "The field {0} must be a string or array type with a minimum length of '{1}'.": "Câmpul field {0} trebuie să fie de tipul string sau array cu lungimea minimă de '{1}'.", + "The {0} field is not a valid phone number.": "Câmpul {0} nu este un număr de telefon valid.", + "The field {0} must be between {1} and {2}.": "Câmpul {0} trebuie să fie între {1} şi {2}.", + "The field {0} must match the regular expression '{1}'.": "Câmpul {0} nu corespunde formatului solicitat.", + "The {0} field is required.": "Câmpul {0} este obligatoriu.", + "The field {0} must be a string with a maximum length of {1}.": "Câmpul {0} trebuie să fie un string cu lungimea maximă de {1}.", + "The field {0} must be a string with a minimum length of {2} and a maximum length of {1}.": "Câmpul {0} trebuie să fie un string cu lungimea minimă de {2} şi lungimea maximă de {1}.", + "The {0} field is not a valid fully-qualified http, https, or ftp URL.": "Câmpul {0} nu este o adresă validă complet http, https sau ftp.", + "The field {0} is invalid.": "Câmpul {0} este invalid.", + "ThisFieldIsNotAValidCreditCardNumber.": "Acest câmp nu este un număr de card de credit valid.", + "ThisFieldIsNotValid.": "Acest câmp nu este valid.", + "ThisFieldIsNotAValidEmailAddress.": "Acest câmp nu este o adresă de e-mail validă.", + "ThisFieldOnlyAcceptsFilesWithTheFollowingExtensions:{0}": "Acest câmp acceptă doar fişiere cu următoarele extensii: {0}", + "ThisFieldMustBeAStringOrArrayTypeWithAMaximumLengthOf{0}": "Acest câmp trebuie să fie de tipul string sau array cu lungimea maximă de '{0}'.", + "ThisFieldMustBeAStringOrArrayTypeWithAMinimumLengthOf{0}": "Acest câmp trebuie să fie de tipul string sau arraz cu lungimea minimă de '{0}'.", + "ThisFieldIsNotAValidPhoneNumber.": "Acest câmp nu este un număr de telefon valid.", + "ThisFieldMustBeBetween{0}And{1}": "Acest câmp trebuie să fie între {0} şi {1}.", + "ThisFieldMustMatchTheRegularExpression{0}": "Acest câmp trebuie să se potrivească cu expresia uzuală '{0}'.", + "ThisFieldIsRequired.": "Acest câmp este obligatoriu.", + "ThisFieldMustBeAStringWithAMaximumLengthOf{0}": "Acest câmp trebuie să fie un string cu lungimea maximă de {0}.", + "ThisFieldMustBeAStringWithAMinimumLengthOf{1}AndAMaximumLengthOf{0}": "Acest câmp trebuie să fie un string cu lungimea minimă de {1} şi lungimea maximă de {0}.", + "ThisFieldIsNotAValidFullyQualifiedHttpHttpsOrFtpUrl": "Acest câmp nu este o adresă validă http, https sau ftp.", + "ThisFieldIsInvalid.": "Acest câmp este invalid." + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcTestModule.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcTestModule.cs index 0fe6fb7cd9..3c186e3fea 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcTestModule.cs +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/AbpAspNetCoreMvcTestModule.cs @@ -88,6 +88,7 @@ namespace Volo.Abp.AspNetCore.Mvc options.Languages.Add(new LanguageInfo("en", "en", "English")); options.Languages.Add(new LanguageInfo("hu", "hu", "Magyar")); + options.Languages.Add(new LanguageInfo("ro-RO", "ro-RO", "Română")); options.Languages.Add(new LanguageInfo("sk", "sk", "Slovak")); options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); }); diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/ro-RO.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/ro-RO.json new file mode 100644 index 0000000000..13e106d754 --- /dev/null +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/ro-RO.json @@ -0,0 +1,67 @@ +{ + "culture": "ro-RO", + "texts": { + "UserName": "Nume de utilizator", + "EmailAddress": "Adresa de email", + "UserNameOrEmailAddress": "Nume de utilizator sau adresa de email", + "Password": "Parola", + "RememberMe": "Ţine-mă minte", + "UseAnotherServiceToLogin": "Folisiţi alt serviciu pentru a vă autentifica", + "UserLockedOutMessage": "Contul a fost blocat din cauza incercărilor eşuate de autentificare. Vă rugăm să aşteptaţi şi să încercaţi din nou.", + "InvalidUserNameOrPassword": "Nume de utilizator sau parolă invalide!", + "LoginIsNotAllowed": "Nu vă este permis să vă autentificaţi! Trebuie să vă confirmaţi email-ul/numărul de telefon.", + "SelfRegistrationDisabledMessage": "Înregistrarea personală este dezactivată pentru această aplicaţie. Vă rugăm să contactaţi administratorul aplicaţiei pentru a înregistra un nou utilizator.", + "LocalLoginDisabledMessage": "Autentificarea locală este dezactivată pentru această aplicaţie.", + "Login": "Autentificare", + "Cancel": "Anulează", + "Register": "Înregistrare", + "AreYouANewUser": "Sunteţi un utilizator nou?", + "AlreadyRegistered": "Deja înregistrat?", + "InvalidLoginRequest": "Cerere de autentificare invalidă", + "ThereAreNoLoginSchemesConfiguredForThisClient": "Nu există scheme de autentificare configurate pentru acest client.", + "LogInUsingYourProviderAccount": "Autentificaţi-vă folosindu-vă contul {0}", + "DisplayName:CurrentPassword": "Parola curentă", + "DisplayName:NewPassword": "Parola nouă", + "DisplayName:NewPasswordConfirm": "Confirmă noua parolă", + "PasswordChangedMessage": "Parola dumneavoastră a fost schimbată cu succes.", + "DisplayName:UserName": "Nume de utilizator", + "DisplayName:Email": "Email", + "DisplayName:Name": "Nume", + "DisplayName:Surname": "Surname", + "DisplayName:Password": "Parolă", + "DisplayName:EmailAddress": "Adresa de email", + "DisplayName:PhoneNumber": "Număr de telefon", + "PersonalSettings": "Setări personale", + "PersonalSettingsSaved": "Setări personale salvate", + "PasswordChanged": "Parola schimbată", + "NewPasswordConfirmFailed": "Vă rugăm să confirmaţi noua parolă.", + "Manage": "Administrează", + "MyAccount": "Contul meu", + "DisplayName:Abp.Account.IsSelfRegistrationEnabled": "Este înregistrarea personală activată, + "Description:Abp.Account.IsSelfRegistrationEnabled": "Dacă un utilizator îşi poate înregistra contul singur(ă).", + "DisplayName:Abp.Account.EnableLocalLogin": "Autentificaţi-vă cu un cont local", + "Description:Abp.Account.EnableLocalLogin": "Indică dacă serverul va permite utilizatorilor să se autentifice cu un cont local.", + "LoggedOutTitle": "Deconectat", + "LoggedOutText": "V-aţi deconectat şi veţi fi redirectat(ă) curând.", + "ReturnToText": "Click aici pentru a vă întoarce la aplicaţie", + "OrLoginWith": "Sau autentificaţi-vă cu:", + "ForgotPassword": "Aţi uitat parola?", + "SendPasswordResetLink_Information": "Un link pentru resetarea parolei va fi trimis pe emailul dumneavoastră. Dacă nu primiţi un email în decurs de câteva minute, vă rugăm să reîncercaţi.", + "PasswordResetMailSentMessage": "Emailul de recuperare al contului a fost trimis la adresa dumneavoastră de email. Dacă nu vedeţi acest email în decurs de 15 minute, cautaţi-l în dosarul de junk/spam. Dacă îl găsiţi acolo, vă rugăm să îl marcaţi ca -Not Junk-/-Not Spam-. ", + "ResetPassword": "Resetaţi parola", + "ConfirmPassword": "Confirmaţi (repetaţi) parola", + "ResetPassword_Information": "Vă rugăm să vă introduceţi noua parola.", + "YourPasswordIsSuccessfullyReset": "Parola a fost resetată cu succes.", + "GoToTheApplication": "Navigaţi la aplicaţie", + "BackToLogin": "Înapoi la autentificare", + "ProfileTab:Password": "Schimbă parola", + "ProfileTab:PersonalInfo": "Date personale", + "ReturnToApplication": "Întoarceţi-vă la aplicaţie", + "Volo.Account:InvalidEmailAddress": "Nu a putut fi găsită adresa de email: {0}", + "PasswordReset": "Resetarea parolei", + "PasswordResetInfoInEmail": "Am primit o cerere de recuperare a contului! Dacă dumneavoastră aţi iniţiat această cerere, daţi click pe următorul link pentru a vă reseta parola.", + "ResetMyPassword": "Resetează-mi parola", + "AccessDenied": "Acces interzis!", + "AccessDeniedMessage": "Nu aveţi acces la această resursă." + } +} \ No newline at end of file diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/Localization/ro-RO.json b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/Localization/ro-RO.json new file mode 100644 index 0000000000..a1359445cc --- /dev/null +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/Localization/ro-RO.json @@ -0,0 +1,6 @@ +{ + "culture": "ro-RO", + "texts": { + "MyAccount": "Contul meu" + } +} \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/ro-RO.json b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/ro-RO.json new file mode 100644 index 0000000000..755b2b7ceb --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Localization/Resources/ro-RO.json @@ -0,0 +1,61 @@ +{ + "culture": "ro-RO", + "texts": { + "Menu:Blogs": "Bloguri", + "Menu:BlogManagement": "Blogging", + "Permission:Management": "Administraţie", + "Permission:Edit": "Editare", + "Permission:Create": "Creare", + "Permission:Delete": "Şterere", + "Permission:Blogging": "Blog", + "Permission:Blogs": "Bloguri", + "Permission:Posts": "Postări", + "Permission:Tags": "Etichete", + "Permission:Comments": "Comentarii", + "Permission:ClearCache": "Goleşte cache", + "Title": "Titlu", + "Delete": "Şterge", + "Reply": "Răspunde", + "ReplyTo": "Răspunde la {0}", + "ContinueReading": "Continuă citirea", + "DaysAgo": "{0} zile în urmă", + "YearsAgo": "{0} ani în urmă", + "MonthsAgo": "{0} luni în urmă", + "WeeksAgo": "{0} săptămâni în urmă", + "MinutesAgo": "{0} minute în urmă", + "SecondsAgo": "{0} secunde în urmă", + "HoursAgo": "{0} ore în urmă", + "Now": "acum", + "Content": "Conţinut", + "SeeAll": "Vezi toate", + "PopularTags": "Etichete populare", + "WiewsWithCount": "{0} vizualizări", + "LastPosts": "Ultimele postări", + "LeaveComment": "Lasă un comentariu", + "TagsInThisArticle": "Etichete în acest articol", + "Posts": "Postări", + "Edit": "Editează", + "BLOG": "BLOG", + "CommentDeletionWarningMessage": "Comentariul va fi şters.", + "PostDeletionWarningMessage": "Postarea va fi ştearsă.", + "BlogDeletionWarningMessage": "Blogul va fi şters.", + "AreYouSure": "Sunteţi sigur(ă)?", + "CommentWithCount": "{0} comentarii", + "Comment": "Comentează", + "ShareOnTwitter": "Distribuie pe Twitter", + "CoverImage": "Imagine de copertă", + "CreateANewPost": "Creaţi o nouă postare", + "CreateANewBlog": "Creaţi un nou blog", + "WhatIsNew": "Ce este nou?", + "Name": "Nume", + "ShortName": "Nume pe scurt", + "CreationTime": "Data creării", + "Description": "Descriere", + "Blogs": "Bloguri", + "Tags": "Etichete", + "ShareOn": "Distribuie", + "TitleLengthWarning": "Păstraţi lungimea titlului sub 60 de caractere pentru a fi SEO friendly!", + "ClearCache": "Goleşte cache", + "ClearCacheConfirmationMessage": "Sunteţi sigur(ă) că vreţi să goliţi cache-ul?" + } +} \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/CmsKitHttpApiHostModule.cs b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/CmsKitHttpApiHostModule.cs index 31026fdc8f..b9c27df3c9 100644 --- a/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/CmsKitHttpApiHostModule.cs +++ b/modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/CmsKitHttpApiHostModule.cs @@ -104,6 +104,7 @@ namespace Volo.CmsKit options.Languages.Add(new LanguageInfo("hi", "hi", "Hindi", "in")); options.Languages.Add(new LanguageInfo("it", "it", "Italiano", "it")); options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português")); + options.Languages.Add(new LanguageInfo("ro-RO", "ro-RO", "Română")); options.Languages.Add(new LanguageInfo("ru", "ru", "Русский")); options.Languages.Add(new LanguageInfo("sk", "sk", "Slovak")); options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/CmsKitIdentityServerModule.cs b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/CmsKitIdentityServerModule.cs index bd3bb70cd4..89a0d57921 100644 --- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/CmsKitIdentityServerModule.cs +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/CmsKitIdentityServerModule.cs @@ -110,6 +110,7 @@ namespace Volo.CmsKit options.Languages.Add(new LanguageInfo("hi", "hi", "Hindi", "in")); options.Languages.Add(new LanguageInfo("it", "it", "Italiano", "it")); options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português")); + options.Languages.Add(new LanguageInfo("ro-RO", "ro-RO", "Română")); options.Languages.Add(new LanguageInfo("ru", "ru", "Русский")); options.Languages.Add(new LanguageInfo("sk", "sk", "Slovak")); options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/CmsKitWebUnifiedModule.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/CmsKitWebUnifiedModule.cs index ba573a6eb5..40ac74d788 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/CmsKitWebUnifiedModule.cs +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/CmsKitWebUnifiedModule.cs @@ -131,6 +131,7 @@ namespace Volo.CmsKit options.Languages.Add(new LanguageInfo("hi", "hi", "Hindi", "in")); options.Languages.Add(new LanguageInfo("it", "it", "Italiano", "it")); options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português (Brasil)")); + options.Languages.Add(new LanguageInfo("ro-RO", "ro-RO", "Română")); options.Languages.Add(new LanguageInfo("ru", "ru", "Русский")); options.Languages.Add(new LanguageInfo("sk", "sk", "Slovak")); options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ro-RO.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ro-RO.json new file mode 100644 index 0000000000..b873bca974 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ro-RO.json @@ -0,0 +1,163 @@ +{ + "culture": "ro-RO", + "texts": { + "AddSubMenuItem": "Adaugă submeniu, + "AreYouSure": "Sunteţi sigur(ă)?", + "BlogDeletionConfirmationMessage": "Blogul '{0}' va fi şters. Sunteţi sigur(ă)?", + "BlogFeatureNotAvailable": "Această caracteristică nu este disponibilă acum. Activaţi-o cu 'GlobalFeatureManager' pentru a o folosi.", + "BlogId": "Blog", + "BlogPostDeletionConfirmationMessage": "Postul '{0}' va fi şters. Sunteţi sigur(ă)?", + "BlogPosts": "Postări de Blog", + "Blogs": "Bloguri", + "ChoosePreference": "Alegeţi preferinţele...", + "Cms": "CMS", + "CmsKit.Comments": "Comentarii", + "CmsKit.Ratings": "Evaluări", + "CmsKit.Reactions": "Reacţii", + "CmsKit.Tags": "Etichete", + "CmsKit:0002": "Conţinutul există deja!", + "CmsKit:0003": "Entitatea {0} nu este etichetabilă.", + "CmsKit:Blog:0001": "Slugul ({Slug}) există deja!", + "CmsKit:BlogPost:0001": "Slugul dat există deja!", + "CmsKit:Comments:0001": "Nu se poate comenta la entitatea {EntityType}.", + "CmsKit:Media:0001": "'{Name}' nu este un nume valid de media.", + "CmsKit:Media:0002": "Entitatea nu poate avea media.", + "CmsKit:Page:0001": "Url-ul dat ({Slug}) există deja. Vă rugăm să reîncercaţi cu un alt url.", + "CmsKit:Rating:0001": "Entititatea {EntityType} nu poate fi evaluată.", + "CmsKit:Reaction:0001": "Entitatea {EntityType} nu poate avea reacţii.", + "CmsKit:Tag:0002": "Entitatea nu este etichetabilă!", + "CommentAuthorizationExceptionMessage": "Aceste comentarii nu sunt permise pentru afişarea publică.", + "CommentDeletionConfirmationMessage": "Acest comentariu şi toate replicile vor fi şterse!", + "Comments": "Comentarii", + "Content": "Conţinut", + "ContentDeletionConfirmationMessage": "Sunteţi sigur(ă) că vreţi să ştergeţi conţinutul?", + "Contents": "Cuprins", + "CoverImage": "Imagine de copertă", + "CreateBlogPostPage": "Postare nouă pe blog", + "CreationTime": "Data creării", + "Delete": "Şterge", + "Detail": "Detaliu", + "Details": "Detalii", + "DisplayName": "Numele afişat", + "DoYouPreferAdditionalEmails": "Preferaţi emailuri adiţionale?", + "Edit": "Editează", + "EndDate": "Data de sfărşit", + "EntityId": "Id-ul entităţii", + "EntityType": "Tipul entităţii", + "ExportCSV": "Export CSV", + "Features": "Caracteristici", + "GenericDeletionConfirmationMessage": "Sigur ştergeţi '{0}'?", + "IsActive" : "Activ", + "LastModification": "Ultima modificare", + "LastModificationTime": "Data ultimei modificări", + "LoginToAddComment": "Autentificaţi-vă pentru a comenta", + "LoginToRate": "Autentificaţi-vă pentru a evalua", + "LoginToReact": "Autentificaţi-vă pentru a reacţiona", + "LoginToReply": "Autentificaţi-vă pentru a răspunde", + "MainMenu": "Meniu principal", + "MakeMainMenu": "Faceţi meniu principal", + "Menu:CMS": "CMS", + "Menus": "Meniuri", + "MenuDeletionConfirmationMessage": "Meniul '{0}' va fi şters. Sunteţi sigur(ă)?", + "MenuItemDeletionConfirmationMessage": "Sunteţi sigur(ă) că vreţi să ştergeţi acest element de meniu?", + "MenuItemMoveConfirmMessage": "Sunteţi sigur că vreţi să mutaţi '{0}' sub '{1}'?", + "MenuItems": "Elementele meniului", + "Message": "Mesaj", + "MessageDeletionConfirmationMessage": "Acest comentariu va fi şters.", + "NewBlog": "Blog nou", + "NewBlogPost": "Postare nouă pe blog", + "NewMenu": "Meniu nou", + "NewMenuItem": "Nod nou de meniu", + "NewPage": "Pagină nouă", + "NewTag": "Etichetă nouă", + "NoMenuItems": "Nu există încă niciun element de meniu!", + "OK": "OK", + "PageDeletionConfirmationMessage": "Sunteţi sigur(ă) că vreţi să ştergeţi această pagină?", + "PageId": "Pagina", + "Pages": "Pagini", + "PageSlugInformation": "Slug este folosit pe url. Url-ul dumneavoastră va fi '/pages/{{slug}}'.", + "Permission:BlogManagement": "Administrare Blog", + "Permission:BlogManagement.Create": "Creează", + "Permission:BlogManagement.Delete": "Şterge", + "Permission:BlogManagement.Features": "Caracteristici", + "Permission:BlogManagement.Update": "Actualizează", + "Permission:BlogPostManagement": "Administrarea postărilor de blog", + "Permission:BlogPostManagement.Create": "Creează", + "Permission:BlogPostManagement.Delete": "Şterge", + "Permission:BlogPostManagement.Update": "Actualizează", + "Permission:CmsKit": "CmsKit", + "Permission:Comments": "Administrarea comentariilor", + "Permission:Comments.Delete": "Şterge", + "Permission:Contents": "Administrarea conţinutului", + "Permission:Contents.Create": "Creează conţinut", + "Permission:Contents.Delete": "Şterge conţinut", + "Permission:Contents.Update": "Actualizează conţinut", + "Permission:MediaDescriptorManagement": "Administrarea media", + "Permission:MediaDescriptorManagement:Create": "Creează", + "Permission:MediaDescriptorManagement:Delete": "Şterge", + "Permission:MenuItemManagement": "Administrarea elementelor de meniu", + "Permission:MenuItemManagement.Create": "Creează", + "Permission:MenuItemManagement.Delete": "Şterge", + "Permission:MenuItemManagement.Update": "Actualizează", + "Permission:MenuManagement": "Administrează meniu", + "Permission:MenuManagement.Create": "Creează", + "Permission:MenuManagement.Delete": "Şterge", + "Permission:MenuManagement.Update": "Actualizează", + "Permission:Menus": "Administrarea meniului", + "Permission:Menus.Create": "Creează", + "Permission:Menus.Delete": "Şterge", + "Permission:Menus.Update": "Actualizează", + "Permission:PageManagement": "Administrarea paginilor", + "Permission:PageManagement:Create": "Creează", + "Permission:PageManagement:Delete": "Şterge", + "Permission:PageManagement:Update": "Actualizează", + "Permission:TagManagement": "Administrarea etichetelor", + "Permission:TagManagement.Create": "Creează", + "Permission:TagManagement.Delete": "Şterge", + "Permission:TagManagement.Update": "Actualizează", + "PickYourReaction": "Alegeţi-vă reacţia", + "Rating": "Evaluare", + "RatingUndoMessage": "Evaluarea dumneavoastră va fi anulată.", + "Reactions": "Reacţii", + "Read": "Citeşte", + "RepliesToThisComment": "Replici la acest comentariu", + "Reply": "Răspunde", + "ReplyTo": "Răspunde la", + "SamplePageMessage": "Un exemplu de pagină pentru modulul Pro", + "SaveChanges": "Salvaţi modificările", + "Script": "Script", + "SelectAll": "Selectaţi toate", + "Send": "Trimite", + "SendMessage": "Trimite mesaj", + "ShortDescription": "Descriere pe scurt", + "Slug": "Slug", + "Source": "Sursa", + "SourceUrl": "Sursa Url", + "Star": "Stea", + "StartDate": "Data de început", + "Style": "Stil", + "Subject": "Subiect", + "SubjectPlaceholder": "Vă rugăm să scrieţi un subiect", + "Submit": "Trimiteţi", + "Subscribe": "Abonaţi-vă", + "SuccessfullySaved": "Salvat cu succes!", + "TagDeletionConfirmationMessage": "Sunteţi sigur(ă) că vreţi să ştergeţi eticheta '{0}'?", + "Tags": "Etichete", + "Text": "Text", + "ThankYou": "Vă mulţumim", + "Title": "Titlu", + "Undo": "Anulează", + "Update": "Actualizează", + "UpdatePreferenceSuccessMessage": "Preferinţele dumneavoastră au fost salvate.", + "UpdateYourEmailPreferences": "Actualizaţi-vă preferinţele de email", + "UnMakeMainMenu": "Anulaţi meniul principal", + "UploadFailedMessage": "Încărcarea a eşuat.", + "UserId": "Id utilizator", + "Username": "Nume utilizator", + "YourComment": "Comentariul dumneavoastră", + "YourEmailAddress": "Adresa dumneavoastră de e-mail", + "YourFullName": "Numele dumneavoastră complet", + "YourMessage": "Mesajul dumneavoastră", + "YourReply": "Replica dumneavoastră" + } +} \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/ro-RO.json b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/ro-RO.json new file mode 100644 index 0000000000..41e756e55b --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/Localization/Resources/VoloDocs/Web/ro-RO.json @@ -0,0 +1,10 @@ +{ + "culture": "ro-RO", + "texts": { + "DocsTitle": "VoloDocs", + "WelcomeVoloDocs": "Bun venit pe VoloDocs!", + "NoProjectWarning": "Nu există niciun proiect definit încă!", + "CreateYourFirstProject": "Click aici pentru a începe primul dumneavoastră proiect", + "NoProject": "Niciun proiect!" + } +} \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs b/modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs index 32779b6acf..8f9cdc7e0d 100644 --- a/modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs +++ b/modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs @@ -129,6 +129,7 @@ namespace VoloDocs.Web options.Languages.Add(new LanguageInfo("hi", "hi", "Hindi", "in")); options.Languages.Add(new LanguageInfo("it", "it", "Italiano", "it")); options.Languages.Add(new LanguageInfo("hu", "hu", "Magyar")); + options.Languages.Add(new LanguageInfo("ro-RO", "ro-RO", "Română")); options.Languages.Add(new LanguageInfo("sk", "sk", "Slovak")); options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文")); diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ro-RO.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ro-RO.json new file mode 100644 index 0000000000..03c583227c --- /dev/null +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ro-RO.json @@ -0,0 +1,59 @@ +{ + "culture": "ro-RO", + "texts": { + "Permission:DocumentManagement": "Administrarea documentelor", + "Permission:Projects": "Proiecte", + "Permission:Edit": "Editează", + "Permission:Delete": "Şterge", + "Permission:Create": "Creează", + "Permission:Documents": "Documente", + "Menu:Documents": "Documente", + "Menu:DocumentManagement": "Documente", + "Menu:ProjectManagement": "Proiecte", + "CreateANewProject": "Creează un nou proiect", + "Edit": "Editează", + "Create": "Creează", + "Pull": "Pull", + "Projects": "Proiecte", + "Name": "Nume", + "ShortName": "Nume pe scurt", + "DocumentStoreType": "DocumentStoreType", + "Format": "Format", + "ShortNameInfoText": "Va fi folosit pentru URL unic.", + "DisplayName:Name": "Nume", + "DisplayName:ShortName": "Nume pe scurt", + "DisplayName:Format": "Format", + "DisplayName:DefaultDocumentName": "Nume implicit document", + "DisplayName:NavigationDocumentName": "Nume document de navigare", + "DisplayName:MinimumVersion": "Versiune minimă", + "DisplayName:MainWebsiteUrl": "URL site web principal", + "DisplayName:LatestVersionBranchName": "Latest version branch name", + "DisplayName:GitHubRootUrl": "GitHub root URL", + "DisplayName:GitHubAccessToken": "GitHub access token", + "DisplayName:GitHubUserAgent": "GitHub user agent", + "DisplayName:GithubVersionProviderSource": "GitHub version provider source", + "DisplayName:VersionBranchPrefix": "Version branch prefix", + "DisplayName:All": "Pull all", + "DisplayName:LanguageCode": "Codul limbii", + "DisplayName:Version": "Versiune", + "Documents": "Documente", + "RemoveFromCache": "Şterge din cache", + "Reindex": "Reindexează", + "ReindexCompleted": "Reindexare completă", + "RemovedFromCache": "Şters din cache", + "RemoveFromCacheConfirmation": "Sunteţi sigur(ă) că vreţi să ştergeţi acest obiect din cache?", + "ReIndexDocumentConfirmation": "Sunteţi sigur(ă) că vreţi să reindexaţi acest obiect?", + "DeleteFromDatabase": "Şterge din baza de date", + "Deleted": "Şters", + "Search": "Caută", + "StartDate": "Data de început", + "EndDate": "Data de sfârşit", + "CreationTime": "Data creării", + "LastUpdateTime": "Ultima actualizare", + "LastSignificantUpdateTime": "Ultima actualizare semnificativă", + "Version": "Versiune", + "LanguageCode": "Codul limbii", + "FileName": "Nume fişier", + "LastCachedTime": "Durată cache" + } +} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/ro-RO.json b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/ro-RO.json new file mode 100644 index 0000000000..dfc47b978f --- /dev/null +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/ro-RO.json @@ -0,0 +1,41 @@ +{ + "culture": "ro-RO", + "texts": { + "Documents": "Documente", + "BackToWebsite": "Înapoi la website", + "Contributors": "Contribuitori", + "ShareOn": "Distribuie pe", + "Version": "Versiune", + "Edit": "Editează", + "LastEditTime": "Ultima modificare", + "Delete": "Şterge", + "ClearCache": "Goleşte cache", + "ClearCacheConfirmationMessage": "Sunteţi sigur(ă) că vreţi să ştergeţi tot cache-ul pentru proiectul \"{0}\"", + "ReIndexAllProjects": "Reindexaţi toate proiectele", + "ReIndexProject": "Reindexaţi proiectul", + "ReIndexProjectConfirmationMessage": "Sunteţi sigur(ă) că vreţi să reindexaţi pentru proiectul \"{0}\"", + "SuccessfullyReIndexProject": "Reindexaţi cu succes pentru proiectul \"{0}\"", + "ReIndexAllProjectConfirmationMessage": "Sunteţi sigur(ă) că vreţi să reindexaţi toate proiectele?", + "SuccessfullyReIndexAllProject": "Reindexare cu succes pentru toate proiectele", + "InThisDocument": "În acest document", + "GoToTop": "Înapoi sus", + "Projects": "Proiect(e)", + "NoProjectWarning": "Nu există proiecte momentan!", + "DocumentNotFound": "Oops, documentul dorit nu a fost găsit!", + "ProjectNotFound": "Oops, proiectul dorit nu a fost găsit!", + "NavigationDocumentNotFound": "Această versiune nu are un document de navigare!", + "DocumentNotFoundInSelectedLanguage": "Documentul în limba dorită de dumneavoastră nu a fost găsit. Documentul este afişat în limba implicită.", + "FilterTopics": "Filtraţi subiectele", + "FullSearch": "Caută în documente", + "Volo.Docs.Domain:010001": "Căutarea elastică nu este activată.", + "MultipleVersionDocumentInfo": "Acest document are multiple versiuni. Selectaţi opţiunile cele mai potrivite pentru dumneavoastră.", + "New": "Nou", + "Upd": "Upd", + "NewExplanation": "Creat în ultimele două săptămâni.", + "UpdatedExplanation": "Actualizat în ultimele două săptămâni.", + "Volo.Docs.Domain:010002": "Numele pe scurt {ShortName} există deja.", + "Preview": "previzualizare", + "Search": "Caută", + "SearchResults": "Rezultatele căutării" + } +} \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/ro-RO.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/ro-RO.json new file mode 100644 index 0000000000..824d789291 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/ro-RO.json @@ -0,0 +1,10 @@ +{ + "culture": "ro-RO", + "texts": { + "Features": "Caracteristici", + "NoFeatureFoundMessage": "Nu există nicio caracteristică disponibilă.", + "Permission:FeatureManagement": "Administrare caracteristici", + "Permission:FeatureManagement.ManageHostFeatures": "Gestionare caracteristici gazdă", + "Volo.Abp.FeatureManagement:InvalidFeatureValue" : "Valoarea {0} a caracteristicii nu este validă!" + } +} \ No newline at end of file diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ro-RO.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ro-RO.json new file mode 100644 index 0000000000..c9afce70c8 --- /dev/null +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ro-RO.json @@ -0,0 +1,110 @@ +{ + "culture": "ro-RO", + "texts": { + "Menu:IdentityManagement": "Administrarea identităţii", + "Users": "Utilizatori", + "NewUser": "Utilizator nou", + "UserName": "Nume de utilizator", + "EmailAddress": "Adresa de email", + "PhoneNumber": "Număr de telefon", + "UserInformations": "Informaţii de utilizator", + "DisplayName:IsDefault": "Implicit", + "DisplayName:IsStatic": "Static", + "DisplayName:IsPublic": "Public", + "Roles": "Roluri", + "Password": "Parola", + "PersonalInfo": "Profilul meu", + "PersonalSettings": "Setări personale", + "UserDeletionConfirmationMessage": "Utilizatorul '{0}' va fi şters. Sunteţi sigur(ă)?", + "RoleDeletionConfirmationMessage": "Rolul '{0}' va fi şters. Sunteţi sigur(ă)?", + "DisplayName:RoleName": "Nume rol", + "DisplayName:UserName": "Nume de utilizator", + "DisplayName:Name": "Nume", + "DisplayName:Surname": "Nume", + "DisplayName:Password": "Parola", + "DisplayName:Email": "Adresa de email", + "DisplayName:PhoneNumber": "Număr de telefon", + "DisplayName:TwoFactorEnabled": "Autentificare în doi paşi", + "DisplayName:LockoutEnabled": "Blocaţi contul după încercări eşuate de autentificare", + "NewRole": "Rol nou", + "RoleName": "Nume rol", + "CreationTime": "Data creării", + "Permissions": "Permisiuni", + "DisplayName:CurrentPassword": "Parola curentă", + "DisplayName:NewPassword": "Parola nouă", + "DisplayName:NewPasswordConfirm": "Confirmaţi noua parolă", + "PasswordChangedMessage": "Parola dumneavoastră a fost schimbată cu succes.", + "PersonalSettingsSavedMessage": "Setările personale ale dumneavoastră au fost salvate cu succes.", + "Volo.Abp.Identity:DefaultError": "A intervenit o eroare neaşteptată.", + "Volo.Abp.Identity:ConcurrencyFailure": "Eşec concurenţial optimist, obiectul a fost modificat.", + "Volo.Abp.Identity:DuplicateEmail": "Emailul '{0}' este deja luat.", + "Volo.Abp.Identity:DuplicateRoleName": "Numele de rol '{0}' este deja luat.", + "Volo.Abp.Identity:DuplicateUserName": "Numele de utilizator '{0}' este deja luat.", + "Volo.Abp.Identity:InvalidEmail": "Emailul '{0}' este invalid.", + "Volo.Abp.Identity:InvalidPasswordHasherCompatibilityMode": "Modul PasswordHasherCompatibilityMode este invalid.", + "Volo.Abp.Identity:InvalidPasswordHasherIterationCount": "Numărul de iteraţii trebuie să fie un număr întreg pozitiv..", + "Volo.Abp.Identity:InvalidRoleName": "Numele de rol '{0}' este invalid.", + "Volo.Abp.Identity:InvalidToken": "Invalid token.", + "Volo.Abp.Identity:InvalidUserName": "Numele de utilizator '{0}' este invalid, poate conţine doar litere şi cifre.", + "Volo.Abp.Identity:LoginAlreadyAssociated": "Un utilizator cu această autentificare există deja.", + "Volo.Abp.Identity:PasswordMismatch": "Parolă incorectă.", + "Volo.Abp.Identity:PasswordRequiresDigit": "Parolele trebuie să conţină cel puţin o cifră ('0'-'9').", + "Volo.Abp.Identity:PasswordRequiresLower": "Parolele trebuie să conţină cel puţin o literă ('a'-'z').", + "Volo.Abp.Identity:PasswordRequiresNonAlphanumeric": "Parolele trebuie să conţină cel puţin un caracter non alphanumeric.", + "Volo.Abp.Identity:PasswordRequiresUpper": "Parolele trebuie să conţină cel puţin o majusculă ('A'-'Z').", + "Volo.Abp.Identity:PasswordTooShort": "Parolele trebuie să aibă cel puţin {0} caractere.", + "Volo.Abp.Identity:RoleNotFound": "Rolul {0} nu există does not exist.", + "Volo.Abp.Identity:UserAlreadyHasPassword": "Utilizatorul şi-a setat deja o parolă.", + "Volo.Abp.Identity:UserAlreadyInRole": "Utilizatorul are deja rolul '{0}'.", + "Volo.Abp.Identity:UserLockedOut": "Utilizatorul este blocat.", + "Volo.Abp.Identity:UserLockoutNotEnabled": "Blocarea nu este activată pentru acest utilizator.", + "Volo.Abp.Identity:UserNameNotFound": "Utilizatorul {0} nu există.", + "Volo.Abp.Identity:UserNotInRole": "Utilizatorul nu are rolul '{0}'.", + "Volo.Abp.Identity:PasswordConfirmationFailed": "Parola nu este aceeaşi cu confirm password.", + "Volo.Abp.Identity:010001": "Nu vă puteţi şterge contul!", + "Volo.Abp.Identity:010002": "Nu pot fi setate mai mult de {MaxUserMembershipCount} unităţi organizaţionale pentru un utilizator!", + "Volo.Abp.Identity:010003": "Nu poate fi schimbată parola unui utilizator autentificat din exterior!", + "Volo.Abp.Identity:010004": "Există deja o unitate organizaţională cu numele {0}. Nu pot fi create două unităţi cu aceleaşi nume pe acelaşi nivel.", + "Volo.Abp.Identity:010005": "Rolurile statice nu pot fi redenumite.", + "Volo.Abp.Identity:010006": "Rolurile statice nu pot fi şterse.", + "Volo.Abp.Identity:010007": "Nu vă puteţi schimba setările de autentificare în doi paşi.", + "Volo.Abp.Identity:010008": "Nu este permisă modificarea setărilor autentificării în doi paşi.", + "Identity.OrganizationUnit.MaxUserMembershipCount": "Numărul maxim de unităţi organizaţionale permise pentru un utilizator", + "Permission:IdentityManagement": "Administrare identităţii", + "Permission:RoleManagement": "Administrare rolurilor", + "Permission:Create": "Creează", + "Permission:Edit": "Editează", + "Permission:Delete": "Şterge", + "Permission:ChangePermissions": "Schimbă permisiunile", + "Permission:UserManagement": "Administrarea utilizatorilor", + "Permission:UserLookup": "Căutarea utilizatorilor", + "DisplayName:Abp.Identity.Password.RequiredLength": "Lungimea necesară", + "DisplayName:Abp.Identity.Password.RequiredUniqueChars": "Numărul de caractere unice necesare", + "DisplayName:Abp.Identity.Password.RequireNonAlphanumeric": "Numărul de caractere non-alfanumerice", + "DisplayName:Abp.Identity.Password.RequireLowercase": "Numărul de caractere", + "DisplayName:Abp.Identity.Password.RequireUppercase": "Numărul de caractere cu majusculă", + "DisplayName:Abp.Identity.Password.RequireDigit": "Numărul de cifre", + "DisplayName:Abp.Identity.Lockout.AllowedForNewUsers": "Activat pentru noi utilizatori", + "DisplayName:Abp.Identity.Lockout.LockoutDuration": "Durata blocării (secunde)", + "DisplayName:Abp.Identity.Lockout.MaxFailedAccessAttempts": "Numărul maxim de încercări de acces eşuate", + "DisplayName:Abp.Identity.SignIn.RequireConfirmedEmail": "Solicită email confirmat", + "DisplayName:Abp.Identity.SignIn.EnablePhoneNumberConfirmation": "Permite utilizatorilor să îşi confirme numărul de telefon", + "DisplayName:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "Solicită număr de telefon confirmat", + "DisplayName:Abp.Identity.User.IsUserNameUpdateEnabled": "Permite utilizatorilor să îşi schimbe numele de utilizator", + "DisplayName:Abp.Identity.User.IsEmailUpdateEnabled": "Permite utilizatorilor să îşi schimbe adresa de email", + "Description:Abp.Identity.Password.RequiredLength": "Lungimea minimă a parolei.", + "Description:Abp.Identity.Password.RequiredUniqueChars": "Numărul minim de caractere unice pe care trebuie să-l conţină parola.", + "Description:Abp.Identity.Password.RequireNonAlphanumeric": "Dacă parolele trebuie să conţină caractere non-alfanumerice.", + "Description:Abp.Identity.Password.RequireLowercase": "Dacă parolele trebuie să conţină un caracter ASCII.", + "Description:Abp.Identity.Password.RequireUppercase": "Dacă parolele trebuie să conţină un caracter ASCII cu majusculă.", + "Description:Abp.Identity.Password.RequireDigit": "Dacă parolele trebuie să conţină o cifră.", + "Description:Abp.Identity.Lockout.AllowedForNewUsers": "Dacă un utilizator nou poate fi blocat.", + "Description:Abp.Identity.Lockout.LockoutDuration": "Durata blocării unui utilizator când intervine blocarea.", + "Description:Abp.Identity.Lockout.MaxFailedAccessAttempts": "Numărul de accesări eşuate permise înainte de a bloca un utilizator, presupunând că blocarea este activată.", + "Description:Abp.Identity.SignIn.RequireConfirmedEmail": "Dacă o adresă de email confirmată este obligatorie pentru autentificare.", + "Description:Abp.Identity.SignIn.EnablePhoneNumberConfirmation": "Dacă numărul de telefon poate fi confirmată de către utilizator.", + "Description:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "Dacă un număr de telefon confirmat este oblicatoriu pentru autentificare.", + "Description:Abp.Identity.User.IsUserNameUpdateEnabled": "Dacă numele de utilizator poate fi actualizat de către utilizator.", + "Description:Abp.Identity.User.IsEmailUpdateEnabled": "Dacă emailul poate fi actualizat de către utilizator." + } +} \ No newline at end of file diff --git a/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/LocalizationExtensions/ro-RO.json b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/LocalizationExtensions/ro-RO.json new file mode 100644 index 0000000000..aabf36fad8 --- /dev/null +++ b/modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/LocalizationExtensions/ro-RO.json @@ -0,0 +1,7 @@ +{ + "culture": "ro-RO", + "texts": { + "Volo.Abp.Identity:PasswordTooShort": "Lungimea parolei trebuie să fie mai mare de {0} caractere.", + "Volo.Abp.Identity:PasswordRequiresNonAlphanumeric": "Parola trebuie să conţină cel puţin un caracter non-alfanumeric." + } +} \ No newline at end of file diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/ro-RO.json b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/ro-RO.json new file mode 100644 index 0000000000..7917e7118c --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/ro-RO.json @@ -0,0 +1,15 @@ +{ + "culture": "ro-RO", + "texts": { + "Volo.IdentityServer:DuplicateIdentityResourceName": "Numele resursei de identitate există deja: {Name}", + "Volo.IdentityServer:DuplicateApiResourceName": "Numele resursei API există deja: {Name}", + "Volo.IdentityServer:DuplicateApiScopeName": "Api Scope name already exist: {Name}", + "Volo.IdentityServer:DuplicateClientId": "Id-ul de client există deja: {ClientId}", + "UserLockedOut": "Contul de utilizator a fost blocat din cauza încercărilor de autentificare eşuate. Vă rugăm să aşteptaţi puţin şi după să încercaţi din nou.", + "InvalidUserNameOrPassword": "Nume de utilizator sau parolă invalidă!", + "LoginIsNotAllowed": "Nu vă este permisă autentificarea! Trebuie să vă confirmaţi emailul/numărul de telefon.", + "InvalidUsername": "Nume de utilizator sau parolă invalidă!", + "InvalidAuthenticatorCode": "Cod de autentificare invalid!", + "TheTargetUserIsNotLinkedToYou": "Utilizatorul ţintă nu este conectat la dumneavoastră!" + } +} \ No newline at end of file diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/ro-RO.json b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/ro-RO.json new file mode 100644 index 0000000000..54b6cc1454 --- /dev/null +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain.Shared/Volo/Abp/PermissionManagement/Localization/Domain/ro-RO.json @@ -0,0 +1,10 @@ +{ + "culture": "ro-RO", + "texts": { + "Permissions": "Permisiuni", + "OnlyProviderPermissons": "Doar acest furnizor", + "All": "Toate", + "SelectAllInAllTabs": "Acordă toate permisiunile", + "SelectAllInThisTab": "Selectează toate" + } +} \ No newline at end of file diff --git a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/DemoAppModule.cs b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/DemoAppModule.cs index f20f081c33..82c1013f4a 100644 --- a/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/DemoAppModule.cs +++ b/modules/setting-management/app/Volo.Abp.SettingManagement.DemoApp/DemoAppModule.cs @@ -87,6 +87,7 @@ namespace Volo.Abp.SettingManagement.DemoApp options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); options.Languages.Add(new LanguageInfo("fi", "fi", "Finnish")); options.Languages.Add(new LanguageInfo("fr", "fr", "Français")); + options.Languages.Add(new LanguageInfo("ro-RO", "ro-RO", "Română")); options.Languages.Add(new LanguageInfo("hi", "hi", "Hindi", "in")); options.Languages.Add(new LanguageInfo("it", "it", "Italiano", "it")); }); diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/ro-RO.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/ro-RO.json new file mode 100644 index 0000000000..6fdf056170 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/ro-RO.json @@ -0,0 +1,22 @@ +{ + "culture": "ro-RO", + "texts": { + "Settings": "Setări", + "SuccessfullySaved": "Salvat cu succes", + "Permission:SettingManagement": "Administrarea setărilor", + "Permission:Emailing": "Emailing", + "Menu:Emailing": "Emailing", + "SmtpHost": "Host", + "SmtpPort": "Port", + "SmtpUserName": "Nume de utilizator", + "SmtpPassword": "Parolă", + "SmtpDomain": "Domeniu", + "SmtpEnableSsl": "Activează SSL", + "SmtpUseDefaultCredentials": "Foloseşte credenţialele implicite", + "DefaultFromAddress": "Implicit de la adresa", + "DefaultFromDisplayName": "Implicit de la numele de afişare", + "Feature:SettingManagementGroup": "Administrarea setărilor", + "Feature:SettingManagementEnable": "Activează administrarea setărilor", + "Feature:SettingManagementEnableDescription": "Activează sistemul de administrare a setărilor în aplicaţie." + } +} \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/ro-RO.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/ro-RO.json new file mode 100644 index 0000000000..70147d9921 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/ro-RO.json @@ -0,0 +1,23 @@ +{ + "culture": "ro-RO", + "texts": { + "Menu:TenantManagement": "Administrarea clienţilor", + "Tenants": "Clienţi", + "NewTenant": "Client nou", + "TenantName": "Nume client", + "DisplayName:TenantName": "Nume client", + "TenantDeletionConfirmationMessage": "Clientul '{0}' va fi şters. Sunteţi sigur(ă)?", + "ConnectionStrings": "Connection Strings", + "DisplayName:DefaultConnectionString": "Connection String implicit", + "DisplayName:UseSharedDatabase": "Folosiţi baza de date partajată", + "ManageHostFeatures": "Administraţi caracteristicile de host", + "Permission:TenantManagement": "Administrarea clienţilor", + "Permission:Create": "Creează", + "Permission:Edit": "Editează", + "Permission:Delete": "Şterge", + "Permission:ManageConnectionStrings": "Administrează stringurile de conexiune", + "Permission:ManageFeatures": "Administrarea caracteristicilor", + "DisplayName:AdminEmailAddress": "Adresa de email admin", + "DisplayName:AdminPassword": "Parola admin" + } +} \ No newline at end of file diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/AbpVirtualFileExplorerDemoAppModule.cs b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/AbpVirtualFileExplorerDemoAppModule.cs index e55beb118a..62f636ff35 100644 --- a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/AbpVirtualFileExplorerDemoAppModule.cs +++ b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/AbpVirtualFileExplorerDemoAppModule.cs @@ -25,6 +25,7 @@ namespace Volo.Abp.VirtualFileExplorer.DemoApp options.Languages.Add(new LanguageInfo("hi", "hi", "Hindi", "in")); options.Languages.Add(new LanguageInfo("it", "it", "Italiano", "it")); options.Languages.Add(new LanguageInfo("hu", "hu", "Magyar")); + options.Languages.Add(new LanguageInfo("ro-RO", "ro-RO", "Română")); options.Languages.Add(new LanguageInfo("sk", "sk", "Slovak")); options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文")); diff --git a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Localization/Resources/ro-RO.json b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Localization/Resources/ro-RO.json new file mode 100644 index 0000000000..67abc693a4 --- /dev/null +++ b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Localization/Resources/ro-RO.json @@ -0,0 +1,14 @@ +{ + "culture": "ro-RO", + "texts": { + "VirtualFileExplorer" : "Explorator de fişiere virtuale", + "VirtualFileType" : "Tip fişier virtual", + "Menu:VirtualFileExplorer" : "Explorator de fişiere virtuale", + "LastUpdateTime" : "Data ultimei actualizări", + "VirtualFileName" : "Nume fişier virtual", + "FileContent" : "Conţinut fişier", + "Size" : "Mărimea", + "BackToRoot" : "Înapoi la rădăcină", + "EmptyFileInfoList" : "Nu există fişiere virtuale" + } +} \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/MyProjectNameBlazorModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/MyProjectNameBlazorModule.cs index fac76131e3..6cfddfd272 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/MyProjectNameBlazorModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/MyProjectNameBlazorModule.cs @@ -221,6 +221,7 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Tiered options.Languages.Add(new LanguageInfo("hi", "hi", "Hindi", "in")); options.Languages.Add(new LanguageInfo("it", "it", "Italiano", "it")); options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português")); + options.Languages.Add(new LanguageInfo("ro-RO", "ro-RO", "Română")); options.Languages.Add(new LanguageInfo("ru", "ru", "Русский")); options.Languages.Add(new LanguageInfo("sk", "sk", "Slovak")); options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameBlazorModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameBlazorModule.cs index a0f1537fb5..b0d6cf87ce 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameBlazorModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/MyProjectNameBlazorModule.cs @@ -182,6 +182,7 @@ namespace MyCompanyName.MyProjectName.Blazor.Server options.Languages.Add(new LanguageInfo("hi", "hi", "Hindi", "in")); options.Languages.Add(new LanguageInfo("it", "it", "Italiano", "it")); options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português")); + options.Languages.Add(new LanguageInfo("ro-RO", "ro-RO", "Română")); options.Languages.Add(new LanguageInfo("ru", "ru", "Русский")); options.Languages.Add(new LanguageInfo("sk", "sk", "Slovak")); options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/ro-RO.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/ro-RO.json new file mode 100644 index 0000000000..1fe560196e --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/ro-RO.json @@ -0,0 +1,8 @@ +{ + "culture": "ro-RO", + "texts": { + "Menu:Home": "Acasă", + "Welcome": "Bun venit", + "LongWelcomeMessage": "Bun venit la aplicaţie. Acesta este un proiect de pornire bazat pe framework-ul ABP. Pentru mai multe informaţii, vizitaţi, visit abp.io." + } +} \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs index f6473f92e1..6eb3251e90 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs @@ -132,6 +132,7 @@ namespace MyCompanyName.MyProjectName options.Languages.Add(new LanguageInfo("fr", "fr", "Français")); options.Languages.Add(new LanguageInfo("hi", "hi", "Hindi", "in")); options.Languages.Add(new LanguageInfo("it", "it", "Italiano", "it")); + options.Languages.Add(new LanguageInfo("ro-RO", "ro-RO", "Română")); options.Languages.Add(new LanguageInfo("hu", "hu", "Magyar")); options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português")); options.Languages.Add(new LanguageInfo("ru", "ru", "Русский")); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs index 29e0877ce3..87f4783a44 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/MyProjectNameHttpApiHostModule.cs @@ -161,6 +161,7 @@ namespace MyCompanyName.MyProjectName options.Languages.Add(new LanguageInfo("it", "it", "Italiano", "it")); options.Languages.Add(new LanguageInfo("hu", "hu", "Magyar")); options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português")); + options.Languages.Add(new LanguageInfo("ro-RO", "ro-RO", "Română")); options.Languages.Add(new LanguageInfo("ru", "ru", "Русский")); options.Languages.Add(new LanguageInfo("sk", "sk", "Slovak")); options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs index 5e76b19724..8cbb91d486 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs @@ -68,6 +68,7 @@ namespace MyCompanyName.MyProjectName options.Languages.Add(new LanguageInfo("it", "it", "Italiano", "it")); options.Languages.Add(new LanguageInfo("hu", "hu", "Magyar")); options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português")); + options.Languages.Add(new LanguageInfo("ro-RO", "ro-RO", "Română")); options.Languages.Add(new LanguageInfo("ru", "ru", "Русский")); options.Languages.Add(new LanguageInfo("sk", "sk", "Slovak")); options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs index 8ab982a275..67af34b073 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs @@ -170,6 +170,7 @@ namespace MyCompanyName.MyProjectName.Web options.Languages.Add(new LanguageInfo("hi", "hi", "Hindi", "in")); options.Languages.Add(new LanguageInfo("it", "it", "Italiano", "it")); options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português")); + options.Languages.Add(new LanguageInfo("ro-RO", "ro-RO", "Română")); options.Languages.Add(new LanguageInfo("ru", "ru", "Русский")); options.Languages.Add(new LanguageInfo("sk", "sk", "Slovak")); options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/MyProjectNameBlazorHostModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/MyProjectNameBlazorHostModule.cs index 9f5fd42006..a288e815c9 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/MyProjectNameBlazorHostModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/MyProjectNameBlazorHostModule.cs @@ -168,6 +168,7 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Host options.Languages.Add(new LanguageInfo("it", "it", "Italian", "it")); options.Languages.Add(new LanguageInfo("hu", "hu", "Magyar")); options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português (Brasil)")); + options.Languages.Add(new LanguageInfo("ro-RO", "ro-RO", "Română")); options.Languages.Add(new LanguageInfo("ru", "ru", "Русский")); options.Languages.Add(new LanguageInfo("sk", "sk", "Slovak")); options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs index d9ab50d83a..fde56a383b 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/MyProjectNameHttpApiHostModule.cs @@ -103,6 +103,7 @@ namespace MyCompanyName.MyProjectName options.Languages.Add(new LanguageInfo("it", "it", "Italiano", "it")); options.Languages.Add(new LanguageInfo("hu", "hu", "Magyar")); options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português")); + options.Languages.Add(new LanguageInfo("ro-RO", "ro-RO", "Română")); options.Languages.Add(new LanguageInfo("ru", "ru", "Русский")); options.Languages.Add(new LanguageInfo("sk", "sk", "Slovak")); options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs index 0829a70a7e..3a0240c382 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameIdentityServerModule.cs @@ -113,6 +113,7 @@ namespace MyCompanyName.MyProjectName options.Languages.Add(new LanguageInfo("it", "it", "Italiano", "it")); options.Languages.Add(new LanguageInfo("hu", "hu", "Magyar")); options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português")); + options.Languages.Add(new LanguageInfo("ro-RO", "ro-RO", "Română")); options.Languages.Add(new LanguageInfo("ru", "ru", "Русский")); options.Languages.Add(new LanguageInfo("sk", "sk", "Slovak")); options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs index 57bd71c2eb..d4b6d3f310 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/MyProjectNameWebUnifiedModule.cs @@ -110,6 +110,7 @@ namespace MyCompanyName.MyProjectName options.Languages.Add(new LanguageInfo("it", "it", "Italiano", "it")); options.Languages.Add(new LanguageInfo("hu", "hu", "Magyar")); options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português (Brasil)")); + options.Languages.Add(new LanguageInfo("ro-RO", "ro-RO", "Română")); options.Languages.Add(new LanguageInfo("ru", "ru", "Русский")); options.Languages.Add(new LanguageInfo("sk", "sk", "Slovak")); options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/ro-RO.json b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/ro-RO.json new file mode 100644 index 0000000000..18086dbf04 --- /dev/null +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/ro-RO.json @@ -0,0 +1,7 @@ +{ + "culture": "ro-RO", + "texts": { + "MyAccount": "Contul meu", + "SamplePageMessage": "Un exemplu de pagină pentru modululul MyProjectName" + } +} \ No newline at end of file From 69f40812364fde144462e3a4f9f34acc2c7e4570 Mon Sep 17 00:00:00 2001 From: TotPeRo Date: Tue, 13 Jul 2021 16:26:37 +0300 Subject: [PATCH 02/32] fix quoate --- .../Volo/CmsKit/Localization/Resources/ro-RO.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ro-RO.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ro-RO.json index b873bca974..3e7e1caaa9 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ro-RO.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ro-RO.json @@ -1,7 +1,7 @@ { "culture": "ro-RO", "texts": { - "AddSubMenuItem": "Adaugă submeniu, + "AddSubMenuItem": "Adaugă submeniu", "AreYouSure": "Sunteţi sigur(ă)?", "BlogDeletionConfirmationMessage": "Blogul '{0}' va fi şters. Sunteţi sigur(ă)?", "BlogFeatureNotAvailable": "Această caracteristică nu este disponibilă acum. Activaţi-o cu 'GlobalFeatureManager' pentru a o folosi.", @@ -160,4 +160,4 @@ "YourMessage": "Mesajul dumneavoastră", "YourReply": "Replica dumneavoastră" } -} \ No newline at end of file +} From 18d12f1c0af4406e76ac8bc12292a7fbf8d28fbd Mon Sep 17 00:00:00 2001 From: TotPeRo Date: Tue, 13 Jul 2021 16:27:38 +0300 Subject: [PATCH 03/32] fix quote --- .../Volo/Abp/Account/Localization/Resources/ro-RO.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/ro-RO.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/ro-RO.json index 13e106d754..909d09f211 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/ro-RO.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/ro-RO.json @@ -37,7 +37,7 @@ "NewPasswordConfirmFailed": "Vă rugăm să confirmaţi noua parolă.", "Manage": "Administrează", "MyAccount": "Contul meu", - "DisplayName:Abp.Account.IsSelfRegistrationEnabled": "Este înregistrarea personală activată, + "DisplayName:Abp.Account.IsSelfRegistrationEnabled": "Este înregistrarea personală activată", "Description:Abp.Account.IsSelfRegistrationEnabled": "Dacă un utilizator îşi poate înregistra contul singur(ă).", "DisplayName:Abp.Account.EnableLocalLogin": "Autentificaţi-vă cu un cont local", "Description:Abp.Account.EnableLocalLogin": "Indică dacă serverul va permite utilizatorilor să se autentifice cu un cont local.", @@ -64,4 +64,4 @@ "AccessDenied": "Acces interzis!", "AccessDeniedMessage": "Nu aveţi acces la această resursă." } -} \ No newline at end of file +} From a831ad366a097fe7a3ed4fbf5544d37fd3ba08a2 Mon Sep 17 00:00:00 2001 From: TotPeRo Date: Tue, 13 Jul 2021 16:28:09 +0300 Subject: [PATCH 04/32] fix quote --- .../Volo/Abp/Emailing/Localization/ro-RO.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/ro-RO.json b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/ro-RO.json index 7a41c2b5b8..46cd358125 100644 --- a/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/ro-RO.json +++ b/framework/src/Volo.Abp.Emailing/Volo/Abp/Emailing/Localization/ro-RO.json @@ -12,7 +12,7 @@ "DisplayName:Abp.Mailing.Smtp.UseDefaultCredentials": "Folosiţi credenţialele implicite", "Description:Abp.Mailing.DefaultFromAddress": "Implicit de la adresa", "Description:Abp.Mailing.DefaultFromDisplayName": "Implicit de la numele afişat", - "Description:Abp.Mailing.Smtp.Host": Numele sau adresa IP al hostului folosit pentru tranzacţiile SMTP.", + "Description:Abp.Mailing.Smtp.Host": "Numele sau adresa IP al hostului folosit pentru tranzacţiile SMTP.", "Description:Abp.Mailing.Smtp.Port": "Portul folosit pentru tranzacţiile SMTP.", "Description:Abp.Mailing.Smtp.UserName": "Numele de utilizator asociat credenţialelor.", "Description:Abp.Mailing.Smtp.Password": "Parola folosită pentru numele de utilizator asociat credenţialelor.", @@ -22,4 +22,4 @@ "TextTemplate:StandardEmailTemplates.Layout": "Şablon aspect implicit pentru email", "TextTemplate:StandardEmailTemplates.Message": "Şablon de mesaj simplu pentru emailuri" } -} \ No newline at end of file +} From cc81a913ae7b02d34009696009d23bc88fd583ea Mon Sep 17 00:00:00 2001 From: TotPeRo Date: Tue, 13 Jul 2021 16:29:55 +0300 Subject: [PATCH 05/32] fix other qoute --- .../AbpIoLocalization/Www/Localization/Resources/ro-RO.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ro-RO.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ro-RO.json index 1e9abb9e87..8115eed091 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ro-RO.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ro-RO.json @@ -190,7 +190,7 @@ "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", + "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;", From 21933bee27b418886461b4cd2d9c5742343256f6 Mon Sep 17 00:00:00 2001 From: Jadyn Date: Tue, 3 Aug 2021 18:02:58 +0800 Subject: [PATCH 06/32] Add ExceptionHandling AbpDbConcurrencyErrorMessage zh translation --- .../Volo/Abp/ExceptionHandling/Localization/zh-Hans.json | 1 + .../Volo/Abp/ExceptionHandling/Localization/zh-Hant.json | 1 + 2 files changed, 2 insertions(+) diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/zh-Hans.json b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/zh-Hans.json index c5c7783381..580d30b13e 100644 --- a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/zh-Hans.json +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/zh-Hans.json @@ -13,6 +13,7 @@ "DefaultErrorMessage404": "未找到资源!", "DefaultErrorMessage404Detail": "未在服务中找到请求的资源!", "EntityNotFoundErrorMessage": "实体 {0} 不存在,id = {1}!", + "AbpDbConcurrencyErrorMessage": "你提交的数据已经被其他用户/客户端修改.请放弃你所做的修改,从头再试.", "Error": "错误", "UnhandledException": "未处理的异常!", "401Message": "未授权", diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/zh-Hant.json b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/zh-Hant.json index f934d77187..62818fe2e5 100644 --- a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/zh-Hant.json +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/zh-Hant.json @@ -13,6 +13,7 @@ "DefaultErrorMessage404": "未找到資源!", "DefaultErrorMessage404Detail": "未在服務中找到請求的資源!", "EntityNotFoundErrorMessage": "實體 {0} 不存在,id = {1}!", + "AbpDbConcurrencyErrorMessage": "你提交的數據已經被其他用戶/用戶端修改.請放棄你所做的修改,從頭再試.", "Error": "錯誤", "UnhandledException": "未處理的異常!", "401Message": "未授權", From 613be3d487ed5f13f7b2408a9ef9ea50e2400e6f Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 3 Aug 2021 18:33:51 +0800 Subject: [PATCH 07/32] Update zh-Hans.json --- .../Volo/Abp/ExceptionHandling/Localization/zh-Hans.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/zh-Hans.json b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/zh-Hans.json index 580d30b13e..08213a79a7 100644 --- a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/zh-Hans.json +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/zh-Hans.json @@ -13,7 +13,7 @@ "DefaultErrorMessage404": "未找到资源!", "DefaultErrorMessage404Detail": "未在服务中找到请求的资源!", "EntityNotFoundErrorMessage": "实体 {0} 不存在,id = {1}!", - "AbpDbConcurrencyErrorMessage": "你提交的数据已经被其他用户/客户端修改.请放弃你所做的修改,从头再试.", + "AbpDbConcurrencyErrorMessage": "你提交的数据已经被其他用户/客户端修改.请放弃你所做的修改并再次尝试.", "Error": "错误", "UnhandledException": "未处理的异常!", "401Message": "未授权", @@ -23,4 +23,4 @@ "403MessageDetail": "您没有权限执行此操作", "404MessageDetail": "抱歉, 这个地址是空的" } -} \ No newline at end of file +} From 70e205919097d3c2fd73f985788d0d4365e09075 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 3 Aug 2021 18:34:17 +0800 Subject: [PATCH 08/32] Update zh-Hant.json --- .../Volo/Abp/ExceptionHandling/Localization/zh-Hant.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/zh-Hant.json b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/zh-Hant.json index 62818fe2e5..65d4f657dd 100644 --- a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/zh-Hant.json +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/zh-Hant.json @@ -13,7 +13,7 @@ "DefaultErrorMessage404": "未找到資源!", "DefaultErrorMessage404Detail": "未在服務中找到請求的資源!", "EntityNotFoundErrorMessage": "實體 {0} 不存在,id = {1}!", - "AbpDbConcurrencyErrorMessage": "你提交的數據已經被其他用戶/用戶端修改.請放棄你所做的修改,從頭再試.", + "AbpDbConcurrencyErrorMessage": "你提交的數據已經被其他用戶/客戶端修改.請放棄你所做的修改並再次嘗試.", "Error": "錯誤", "UnhandledException": "未處理的異常!", "401Message": "未授權", @@ -23,4 +23,4 @@ "403MessageDetail": "你不被授權執行此操作", "404MessageDetail": "對不起,地址是空的" } -} \ No newline at end of file +} From 5c0701f2be1a7c27b2fd1f697a56b5e5ddd07930 Mon Sep 17 00:00:00 2001 From: Berkan Sasmaz Date: Tue, 3 Aug 2021 15:18:07 +0300 Subject: [PATCH 09/32] fix(docs module): last item in document navigation is not fully display --- .../docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.css | 2 +- .../src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.min.css | 2 +- .../src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.scss | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.css b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.css index 118e70848c..e917ce1b67 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.css +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.css @@ -72,7 +72,7 @@ .docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul { font-size: 14px; list-style: none; - padding: 0 1rem; + padding: 0 1rem 1rem; margin: 0; } .docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li { margin-left: 0px; diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.min.css b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.min.css index ca0a754a36..3e0cdc1e32 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.min.css +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.min.css @@ -1 +1 @@ -body{position:relative;}.docs-page{background:#f5f7f9;}.docs-page .anchorjs-link{transition:all .25s linear;}.docs-page *:hover>.anchorjs-link{margin-left:-1.125em !important;transition:color .25s linear;color:#808080;}.docs-page .anchorjs-link:hover{text-decoration:none;}.docs-page .docs-sidebar{padding-right:1rem;position:relative;top:0;left:0;position:fixed;background:#1d1d1d;}.docs-page .docs-sidebar .input-group{border-radius:5px;overflow:hidden;}.docs-page .docs-sidebar .docs-sidebar-wrapper{width:300px;float:right;}.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control{border:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:focus,.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:active,.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:hover,.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:visited{box-shadow:none;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version{position:relative;padding:0 1rem;margin:.25rem 0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select{border-radius:3px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select .input-group-text{padding:0 10px;font-size:.9rem;width:26px;height:34px;line-height:1;border-radius:0;border:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select .input-group-text i{color:#666;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control{padding:0 10px 2px 10px;border:0;min-height:34px;height:34px;font-size:.9em;border-radius:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:focus,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:active,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:hover,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:visited,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control:focus,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control:active,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control:hover,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control:visited{box-shadow:none;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control{padding:0 10px 2px 6px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter{padding:0 1rem;margin:.5rem 0;font-size:.9em;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter .filter-icon i.fa{color:#ddd;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list{height:100vh;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list>ul{display:block;height:calc(100vh - 230px);overflow-y:auto;margin-right:12px !important;margin-top:20px !important;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul{font-size:14px;list-style:none;padding:0 1rem;margin:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li{margin-left:0;padding-left:24px;display:block;width:100%;position:relative;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a{color:#999;font-weight:700;padding:7px 0;display:block;border-bottom:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a:hover{color:#000;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a.last-link{top:11px;color:#aaa;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .badge{text-transform:uppercase;font-size:9px;position:relative;letter-spacing:.125px;top:-2px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li span.tree-toggle{color:#999;padding:7px 0;display:block;border-bottom:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .plus-icon{font-size:.85em;transition:.3s;width:18px;height:18px;text-align:center;padding:0;line-height:1;border-radius:50%;margin-right:4px;position:absolute;left:2px;top:11px;color:#aaa;cursor:default;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .plus-icon .fa-long-arrow-right.no-link{color:#555;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .plus-icon .fa-chevron-right{cursor:pointer;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul{padding:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul li a{font-weight:400;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul li ul{padding:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul li ul li a{font-weight:300;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a{color:#000;transition:.4s;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>span .fa{transform:rotate(90deg);color:#007bff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree.last-link>span .fa{transform:rotate(0deg);}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand{font-size:1.35rem;color:#000;font-weight:700;padding:15px 0 15px;line-height:1;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand strong{font-weight:300;text-transform:uppercase;font-size:.7em;letter-spacing:1px;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site{color:#000;opacity:.65;transition:.2s;font-size:.8em;font-weight:300;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site:hover{text-decoration:none;opacity:1;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc{font-size:.85em;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc strong{display:block;}.docs-page .docs-content{overflow-x:scroll;min-height:100vh;}.docs-page .docs-content .contributors{position:absolute;top:15px;right:5px;}.docs-page .docs-content .contributors .contributors-avatar{border-radius:21px;width:21px;height:21px;}.docs-page .docs-content .contributors a{padding:0;width:21px;height:21px;display:inline-block;margin:0 0 0 2px;}.docs-page .docs-content .contributors a:hover{text-decoration:none;}.docs-page .docs-content .docs-link-btns{background:#f5f7fa;padding:15px 30px;margin:0 -15px;text-align:right;font-size:.8em;min-height:48px;}.docs-page .docs-content .docs-link-btns a{color:#222;}.docs-page .docs-content .docs-link-btns a .text-muted{color:#ccc !important;}.docs-page .docs-content .docs-link-btns a:hover{color:#000;text-decoration:none;}.docs-page .docs-content .docs-link-btns .search-area{margin:-5px 0 -5px -10px;box-shadow:0 0 10px #e8e8e8;}.docs-page .docs-content .docs-link-btns .search-area .input-group-text{background:#fff;border:0;color:#000;font-size:1em;}.docs-page .docs-content .docs-link-btns .search-area .form-control{background:#fff;border:0;font-size:1em;padding-left:0;outline:0;box-shadow:none;}.docs-page .docs-content .docs-text-field{padding:2rem;}.docs-page .docs-content article.docs-body{word-break:break-word;}.docs-page .docs-content article.docs-body h1{padding-top:1rem;font-size:2.25rem;padding-bottom:10px;}.docs-page .docs-content article.docs-body h2{padding-top:2rem;padding-bottom:10px;font-size:2rem;}.docs-page .docs-content article.docs-body h3,.docs-page .docs-content article.docs-body h4,.docs-page .docs-content article.docs-body h5,.docs-page .docs-content article.docs-body h6{padding-top:20px;padding-bottom:5px;font-size:1.5rem;}.docs-page .docs-content article.docs-body h1,.docs-page .docs-content article.docs-body h2,.docs-page .docs-content article.docs-body h3,.docs-page .docs-content article.docs-body h4,.docs-page .docs-content article.docs-body h5,.docs-page .docs-content article.docs-body h6{position:relative;}.docs-page .docs-content article.docs-body h1 .anchor,.docs-page .docs-content article.docs-body h2 .anchor,.docs-page .docs-content article.docs-body h3 .anchor,.docs-page .docs-content article.docs-body h4 .anchor,.docs-page .docs-content article.docs-body h5 .anchor,.docs-page .docs-content article.docs-body h6 .anchor{position:absolute;right:-26px;font-size:18px;bottom:5px;color:#999;opacity:0;transition:.5s;}.docs-page .docs-content article.docs-body h1:hover .anchor,.docs-page .docs-content article.docs-body h2:hover .anchor,.docs-page .docs-content article.docs-body h3:hover .anchor,.docs-page .docs-content article.docs-body h4:hover .anchor,.docs-page .docs-content article.docs-body h5:hover .anchor,.docs-page .docs-content article.docs-body h6:hover .anchor{opacity:1;}.docs-page .docs-content article.docs-body .blockquote{margin-bottom:1rem;margin-left:0;border-left:3px solid #d2dbe4;padding:1em 1.5em;background-color:#e9edf1;padding-bottom:.2em;font-size:1em;}.docs-page .docs-content article.docs-body img{max-width:100%;border:1px solid #f4f5f7;margin:15px 0 25px;box-shadow:0 0 45px #f8f9fa;border-radius:6px;}.docs-page .docs-content article.docs-body table{display:block;overflow:auto;width:100%;}.docs-page .docs-content article.docs-body table thead tr{border-bottom:2px inset;}.docs-page .docs-content article.docs-body table th{font-weight:600;}.docs-page .docs-content article.docs-body table td,.docs-page .docs-content article.docs-body table th{border:1px solid #dfe2e5;padding:6px 13px;}.docs-page .docs-content article.docs-body table tr{background-color:#fff;border-top:1px solid #c6cbd1;}.docs-page .docs-content article.docs-body table tr:nth-child(2n){background-color:#f6f8fa;}.docs-page .docs-content article.docs-body table img{background-color:initial;}.docs-page .doc-social-btns{margin:0 -15px 0;font-size:.8em;background:#e9ecf0;height:53px;padding:15px 20px;position:fixed;top:0;width:100%;}.docs-page .doc-social-btns a:hover{text-decoration:none;}.docs-page .doc-social-btns .twitter{color:#00acee;}.docs-page .doc-social-btns .linkedin{color:#0077b5;}.docs-page .doc-social-btns .email{color:#5a5a5a;}.docs-page .doc-social-btns .share-button{margin-left:10px;}.docs-page .cont-container a.cont-avatar{position:relative;}.docs-page .cont-container a.cont-avatar img{width:24px;height:24px;box-shadow:0 0 8px #c1bbbb;border:2px solid #fff;margin-left:-10px;display:inline-block;margin-top:-2px;transition:.2s;}.docs-page .cont-container:hover a.cont-avatar img{margin-left:-2px;}.docs-page .docs-page-index{min-height:90vh;background-color:#f5f7fa !important;}.docs-page .docs-page-index #scroll-index{max-height:90vh;}.docs-page .docs-page-index .docs-inner-anchors{position:fixed;top:50px;padding:10px;font-size:.9em;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills{font-size:.92em;margin-left:15px;border-left:1px solid #eee;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-link{padding:3px 14px 4px;color:#aaa;line-height:1.2;position:relative;border-left:1px solid #eee;border-radius:0;margin-left:-1px;margin-top:1px;margin-bottom:1px;transition:.2s;font-weight:normal;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-link.active{border-left:1px solid #007bff;background:none;color:#007bff;font-weight:normal;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-pills .nav-link.active{color:#007bff;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-pills .nav-pills .nav-link.active{color:#007bff;}.docs-page .docs-page-index .docs-inner-anchors .index-scroll{margin-left:-30px;}.docs-page .docs-page-index .docs-inner-anchors .docs-anchors-wrapper{max-width:300px;float:left;}.docs-page .docs-page-index .scroll-top-btn{display:none;font-size:.85em;color:#aaa;text-decoration:none;padding-left:18px;}.docs-page .docs-page-index .scroll-top-btn.showup{display:block;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control{background:#000;color:#fff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control{background:#000;color:#fff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control::placeholder{color:#fff;opacity:.5;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select label{background:#000;border-color:#000;color:#ddd;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter .form-control{background:#333;color:#999;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter select{border:0;border-radius:6px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter .filter-icon i.fa{color:#aaa;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a{color:#aaa;border-bottom:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a:hover{color:#fff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon{font-size:.85em;transition:.3s;width:18px;height:18px;text-align:center;padding:0;line-height:1;border-radius:50%;margin-right:4px;position:absolute;left:2px;top:11px;color:#aaa;cursor:default;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon .fa-long-arrow-right.no-link{color:#555;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon .fa-chevron-right{cursor:pointer;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon.last-link{top:11px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li span.tree-toggle{color:#555;padding:7px 0;display:block;border-bottom:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a{color:#fff;transition:.4s;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a span .fa{color:#fff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a span:not(.last-link) .fa{transform:rotate(90deg);color:#fff;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand{color:#fff;text-transform:uppercase;white-space:unset;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site{color:#fff;text-align:center;display:block;width:100%;background:#444;padding:6px 0 8px;border-radius:5px;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc{color:#ddd;}@media(min-width:1100px){.container{max-width:1080px;}}@media(min-width:1366px){.container{max-width:1340px;}}@media(min-width:1440px){.container{max-width:1400px;}}@media(max-width:767px){.docs-page .docs-content article.docs-body h1{padding-top:1.5rem;}.docs-page{background:#f5f7f9;}.docs-page>.container-fluid{display:block;}.docs-page>.container-fluid>.row{display:block;}.docs-page .docs-sidebar{position:fixed;max-width:100%;width:100%;display:block;padding:0 !important;top:0;left:0;z-index:100;right:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper{max-width:100%;width:100%;top:0;position:relative;margin:0 !important;height:72px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list{padding:.5rem 1.5rem 2rem 1.5rem;position:fixed;top:70px;font-size:17px;left:0;width:100%;z-index:100;background:#1d1d1d;display:none;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list .docs-filter{padding:0 0 1rem !important;}.docs-page .docs-sidebar .docs-top .navbar-logo{padding:0;padding-top:.3rem;display:block;text-align:center;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand{font-size:1.25rem;font-weight:700;display:block;margin-right:0;padding:10px 0 15px;text-transform:uppercase;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand .docs-logo{width:110px;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site{display:none;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc{font-size:1em;display:none;}.docs-page .docs-sidebar .docs-top .open-dmenu{position:absolute;top:10px;left:20px;}.docs-page .docs-content{padding-top:72px;max-width:100%;display:block !important;}.docs-page .docs-content .docs-text-field{padding:1rem 1.5rem;}.docs-page .docs-page-index{display:none;}}.for-mobile{display:none;}.for-desktop{display:inline-block;}pre[class*="language-"]{padding:1.4em 2em !important;margin:15px 0 25px !important;border-radius:6px;}code{padding:.2em .4em;margin:0;font-size:82%;background-color:#f0f1f3;border-radius:3px;color:#28a745;}pre code{padding:0;}pre .token.keyword{color:#569cd6;}pre .token.atrule,pre .token.attr-value,pre .token.function,pre .token.class-name{color:#d69d85;}:not(pre)>code[class*="language-"],pre[class*="language-"]{background:#191919 !important;}div.code-toolbar>.toolbar span{cursor:default;}div.code-toolbar>.toolbar a{cursor:copy;}.logo-nav ul{width:300px !important;}@media(max-width:767px){body{font-size:14px;}.for-mobile{display:inline-block;}.for-desktop{display:none;}.close-mmenu,.close-dmenu{position:absolute;top:-78px;left:25px;color:#fff;font-size:68px;background:#fff;opacity:0;}.navbar{padding:.5rem 1.75rem;}.navbar .navbar-collapse{background:#38003d;position:fixed;top:86px;left:0;width:100%;height:100vh;height:calc(100vh - 86px);z-index:100 !important;}.navbar .navbar-collapse .navbar-nav{height:100vh;padding:20px 30px;overflow:auto;}.navbar .navbar-collapse .navbar-nav .nav-link{padding:1.2rem !important;}.navbar .navbar-toggler{padding:.5rem .75rem;font-size:1.5rem;line-height:1;background-color:transparent;border:0;border-radius:.25rem;color:#fff !important;margin-left:-1rem;}.section-with-logos img{margin:15px;opacity:1;-webkit-filter:grayscale(0%);filter:grayscale(0%);}span.code-arrow{padding:0 0 0;display:block;transform:rotate(90deg);font-size:2em;}.mb-5,.my-5{margin-bottom:2rem !important;}}@media screen and (max-width:767px){.navbar-logo .navbar-brand{display:inline-block;margin:0 auto !important;max-width:70%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}}.alert-criteria{padding:1.25em 1.5em;max-width:100%;}.alert-criteria p.alert-p{font-size:.96em;}.alert-criteria .input-group .input-group-text,.alert-criteria .input-group .form-control{font-size:.96em;}@media screen and (max-width:767px){.alert-criteria .input-group .input-group-text,.alert-criteria .input-group .form-control{font-size:.88em;}}.alert-criteria .input-group .input-group-text{color:#004085;background-color:#bddcfd;border:1px solid #bddcfd;}@media screen and (max-width:1366px){.alert-criteria .input-group .input-group-text{display:none;}}.alert-criteria .input-group .form-control{color:#004085;background-color:#fff;border:1px solid #bddcfd;}@media screen and (max-width:1366px){.alert-criteria .input-group .form-control{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;}}.scrolledMore{padding-top:107px;}.scrolledMore .alert-criteria{position:fixed;top:0;z-index:10;border:0;border-radius:0;margin-left:-47px;padding:.5em .75em;}@media screen and (max-width:767px){.scrolledMore .alert-criteria{top:72px;margin-left:-36px;}}.scrolledMore .alert-criteria p.alert-p{display:none;}.mCS-autoHide>.mCustomScrollBox>.mCSB_scrollTools,.mCS-autoHide>.mCustomScrollBox~.mCSB_scrollTools{opacity:1 !important;filter:"alpha(opacity=1)";-ms-filter:"alpha(opacity=1)";} \ No newline at end of file +body{position:relative;}.docs-page{background:#f5f7f9;}.docs-page .anchorjs-link{transition:all .25s linear;}.docs-page *:hover>.anchorjs-link{margin-left:-1.125em !important;transition:color .25s linear;color:#808080;}.docs-page .anchorjs-link:hover{text-decoration:none;}.docs-page .docs-sidebar{padding-right:1rem;position:relative;top:0;left:0;position:fixed;background:#1d1d1d;}.docs-page .docs-sidebar .input-group{border-radius:5px;overflow:hidden;}.docs-page .docs-sidebar .docs-sidebar-wrapper{width:300px;float:right;}.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control{border:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:focus,.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:active,.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:hover,.docs-page .docs-sidebar .docs-sidebar-wrapper input.form-control:visited{box-shadow:none;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version{position:relative;padding:0 1rem;margin:.25rem 0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select{border-radius:3px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select .input-group-text{padding:0 10px;font-size:.9rem;width:26px;height:34px;line-height:1;border-radius:0;border:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select .input-group-text i{color:#666;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control{padding:0 10px 2px 10px;border:0;min-height:34px;height:34px;font-size:.9em;border-radius:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:focus,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:active,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:hover,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control:visited,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control:focus,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control:active,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control:hover,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control:visited{box-shadow:none;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control{padding:0 10px 2px 6px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter{padding:0 1rem;margin:.5rem 0;font-size:.9em;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter .filter-icon i.fa{color:#ddd;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list{height:100vh;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list>ul{display:block;height:calc(100vh - 230px);overflow-y:auto;margin-right:12px !important;margin-top:20px !important;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul{font-size:14px;list-style:none;padding:0 1rem 1rem;margin:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li{margin-left:0;padding-left:24px;display:block;width:100%;position:relative;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a{color:#999;font-weight:700;padding:7px 0;display:block;border-bottom:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a:hover{color:#000;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a.last-link{top:11px;color:#aaa;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .badge{text-transform:uppercase;font-size:9px;position:relative;letter-spacing:.125px;top:-2px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li span.tree-toggle{color:#999;padding:7px 0;display:block;border-bottom:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .plus-icon{font-size:.85em;transition:.3s;width:18px;height:18px;text-align:center;padding:0;line-height:1;border-radius:50%;margin-right:4px;position:absolute;left:2px;top:11px;color:#aaa;cursor:default;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .plus-icon .fa-long-arrow-right.no-link{color:#555;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li .plus-icon .fa-chevron-right{cursor:pointer;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul{padding:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul li a{font-weight:400;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul li ul{padding:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li ul li ul li a{font-weight:300;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a{color:#000;transition:.4s;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>span .fa{transform:rotate(90deg);color:#007bff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree.last-link>span .fa{transform:rotate(0deg);}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand{font-size:1.35rem;color:#000;font-weight:700;padding:15px 0 15px;line-height:1;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand strong{font-weight:300;text-transform:uppercase;font-size:.7em;letter-spacing:1px;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site{color:#000;opacity:.65;transition:.2s;font-size:.8em;font-weight:300;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site:hover{text-decoration:none;opacity:1;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc{font-size:.85em;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc strong{display:block;}.docs-page .docs-content{overflow-x:scroll;min-height:100vh;}.docs-page .docs-content .contributors{position:absolute;top:15px;right:5px;}.docs-page .docs-content .contributors .contributors-avatar{border-radius:21px;width:21px;height:21px;}.docs-page .docs-content .contributors a{padding:0;width:21px;height:21px;display:inline-block;margin:0 0 0 2px;}.docs-page .docs-content .contributors a:hover{text-decoration:none;}.docs-page .docs-content .docs-link-btns{background:#f5f7fa;padding:15px 30px;margin:0 -15px;text-align:right;font-size:.8em;min-height:48px;}.docs-page .docs-content .docs-link-btns a{color:#222;}.docs-page .docs-content .docs-link-btns a .text-muted{color:#ccc !important;}.docs-page .docs-content .docs-link-btns a:hover{color:#000;text-decoration:none;}.docs-page .docs-content .docs-link-btns .search-area{margin:-5px 0 -5px -10px;box-shadow:0 0 10px #e8e8e8;}.docs-page .docs-content .docs-link-btns .search-area .input-group-text{background:#fff;border:0;color:#000;font-size:1em;}.docs-page .docs-content .docs-link-btns .search-area .form-control{background:#fff;border:0;font-size:1em;padding-left:0;outline:0;box-shadow:none;}.docs-page .docs-content .docs-text-field{padding:2rem;}.docs-page .docs-content article.docs-body{word-break:break-word;}.docs-page .docs-content article.docs-body h1{padding-top:1rem;font-size:2.25rem;padding-bottom:10px;}.docs-page .docs-content article.docs-body h2{padding-top:2rem;padding-bottom:10px;font-size:2rem;}.docs-page .docs-content article.docs-body h3,.docs-page .docs-content article.docs-body h4,.docs-page .docs-content article.docs-body h5,.docs-page .docs-content article.docs-body h6{padding-top:20px;padding-bottom:5px;font-size:1.5rem;}.docs-page .docs-content article.docs-body h1,.docs-page .docs-content article.docs-body h2,.docs-page .docs-content article.docs-body h3,.docs-page .docs-content article.docs-body h4,.docs-page .docs-content article.docs-body h5,.docs-page .docs-content article.docs-body h6{position:relative;}.docs-page .docs-content article.docs-body h1 .anchor,.docs-page .docs-content article.docs-body h2 .anchor,.docs-page .docs-content article.docs-body h3 .anchor,.docs-page .docs-content article.docs-body h4 .anchor,.docs-page .docs-content article.docs-body h5 .anchor,.docs-page .docs-content article.docs-body h6 .anchor{position:absolute;right:-26px;font-size:18px;bottom:5px;color:#999;opacity:0;transition:.5s;}.docs-page .docs-content article.docs-body h1:hover .anchor,.docs-page .docs-content article.docs-body h2:hover .anchor,.docs-page .docs-content article.docs-body h3:hover .anchor,.docs-page .docs-content article.docs-body h4:hover .anchor,.docs-page .docs-content article.docs-body h5:hover .anchor,.docs-page .docs-content article.docs-body h6:hover .anchor{opacity:1;}.docs-page .docs-content article.docs-body .blockquote{margin-bottom:1rem;margin-left:0;border-left:3px solid #d2dbe4;padding:1em 1.5em;background-color:#e9edf1;padding-bottom:.2em;font-size:1em;}.docs-page .docs-content article.docs-body img{max-width:100%;border:1px solid #f4f5f7;margin:15px 0 25px;box-shadow:0 0 45px #f8f9fa;border-radius:6px;}.docs-page .docs-content article.docs-body table{display:block;overflow:auto;width:100%;}.docs-page .docs-content article.docs-body table thead tr{border-bottom:2px inset;}.docs-page .docs-content article.docs-body table th{font-weight:600;}.docs-page .docs-content article.docs-body table td,.docs-page .docs-content article.docs-body table th{border:1px solid #dfe2e5;padding:6px 13px;}.docs-page .docs-content article.docs-body table tr{background-color:#fff;border-top:1px solid #c6cbd1;}.docs-page .docs-content article.docs-body table tr:nth-child(2n){background-color:#f6f8fa;}.docs-page .docs-content article.docs-body table img{background-color:initial;}.docs-page .doc-social-btns{margin:0 -15px 0;font-size:.8em;background:#e9ecf0;height:53px;padding:15px 20px;position:fixed;top:0;width:100%;}.docs-page .doc-social-btns a:hover{text-decoration:none;}.docs-page .doc-social-btns .twitter{color:#00acee;}.docs-page .doc-social-btns .linkedin{color:#0077b5;}.docs-page .doc-social-btns .email{color:#5a5a5a;}.docs-page .doc-social-btns .share-button{margin-left:10px;}.docs-page .cont-container a.cont-avatar{position:relative;}.docs-page .cont-container a.cont-avatar img{width:24px;height:24px;box-shadow:0 0 8px #c1bbbb;border:2px solid #fff;margin-left:-10px;display:inline-block;margin-top:-2px;transition:.2s;}.docs-page .cont-container:hover a.cont-avatar img{margin-left:-2px;}.docs-page .docs-page-index{min-height:90vh;background-color:#f5f7fa !important;}.docs-page .docs-page-index #scroll-index{max-height:90vh;}.docs-page .docs-page-index .docs-inner-anchors{position:fixed;top:50px;padding:10px;font-size:.9em;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills{font-size:.92em;margin-left:15px;border-left:1px solid #eee;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-link{padding:3px 14px 4px;color:#aaa;line-height:1.2;position:relative;border-left:1px solid #eee;border-radius:0;margin-left:-1px;margin-top:1px;margin-bottom:1px;transition:.2s;font-weight:normal;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-link.active{border-left:1px solid #007bff;background:none;color:#007bff;font-weight:normal;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-pills .nav-link.active{color:#007bff;}.docs-page .docs-page-index .docs-inner-anchors .navbar .nav-pills .nav-pills .nav-pills .nav-link.active{color:#007bff;}.docs-page .docs-page-index .docs-inner-anchors .index-scroll{margin-left:-30px;}.docs-page .docs-page-index .docs-inner-anchors .docs-anchors-wrapper{max-width:300px;float:left;}.docs-page .docs-page-index .scroll-top-btn{display:none;font-size:.85em;color:#aaa;text-decoration:none;padding-left:18px;}.docs-page .docs-page-index .scroll-top-btn.showup{display:block;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select select.form-control,.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control{background:#000;color:#fff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control{background:#000;color:#fff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select input.form-control::placeholder{color:#fff;opacity:.5;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-version .version-select label{background:#000;border-color:#000;color:#ddd;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter .form-control{background:#333;color:#999;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter select{border:0;border-radius:6px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-filter .filter-icon i.fa{color:#aaa;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a{color:#aaa;border-bottom:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a:hover{color:#fff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon{font-size:.85em;transition:.3s;width:18px;height:18px;text-align:center;padding:0;line-height:1;border-radius:50%;margin-right:4px;position:absolute;left:2px;top:11px;color:#aaa;cursor:default;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon .fa-long-arrow-right.no-link{color:#555;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon .fa-chevron-right{cursor:pointer;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li a .plus-icon.last-link{top:11px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li span.tree-toggle{color:#555;padding:7px 0;display:block;border-bottom:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a{color:#fff;transition:.4s;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a span .fa{color:#fff;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list ul li.selected-tree>a span:not(.last-link) .fa{transform:rotate(90deg);color:#fff;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand{color:#fff;text-transform:uppercase;white-space:unset;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site{color:#fff;text-align:center;display:block;width:100%;background:#444;padding:6px 0 8px;border-radius:5px;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc{color:#ddd;}@media(min-width:1100px){.container{max-width:1080px;}}@media(min-width:1366px){.container{max-width:1340px;}}@media(min-width:1440px){.container{max-width:1400px;}}@media(max-width:767px){.docs-page .docs-content article.docs-body h1{padding-top:1.5rem;}.docs-page{background:#f5f7f9;}.docs-page>.container-fluid{display:block;}.docs-page>.container-fluid>.row{display:block;}.docs-page .docs-sidebar{position:fixed;max-width:100%;width:100%;display:block;padding:0 !important;top:0;left:0;z-index:100;right:0;}.docs-page .docs-sidebar .docs-sidebar-wrapper{max-width:100%;width:100%;top:0;position:relative;margin:0 !important;height:72px;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list{padding:.5rem 1.5rem 2rem 1.5rem;position:fixed;top:70px;font-size:17px;left:0;width:100%;z-index:100;background:#1d1d1d;display:none;}.docs-page .docs-sidebar .docs-sidebar-wrapper .docs-tree-list .docs-filter{padding:0 0 1rem !important;}.docs-page .docs-sidebar .docs-top .navbar-logo{padding:0;padding-top:.3rem;display:block;text-align:center;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand{font-size:1.25rem;font-weight:700;display:block;margin-right:0;padding:10px 0 15px;text-transform:uppercase;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-brand .docs-logo{width:110px;}.docs-page .docs-sidebar .docs-top .navbar-logo .go-back-site{display:none;}.docs-page .docs-sidebar .docs-top .navbar-logo .navbar-logo-desc{font-size:1em;display:none;}.docs-page .docs-sidebar .docs-top .open-dmenu{position:absolute;top:10px;left:20px;}.docs-page .docs-content{padding-top:72px;max-width:100%;display:block !important;}.docs-page .docs-content .docs-text-field{padding:1rem 1.5rem;}.docs-page .docs-page-index{display:none;}}.for-mobile{display:none;}.for-desktop{display:inline-block;}pre[class*="language-"]{padding:1.4em 2em !important;margin:15px 0 25px !important;border-radius:6px;}code{padding:.2em .4em;margin:0;font-size:82%;background-color:#f0f1f3;border-radius:3px;color:#28a745;}pre code{padding:0;}pre .token.keyword{color:#569cd6;}pre .token.atrule,pre .token.attr-value,pre .token.function,pre .token.class-name{color:#d69d85;}:not(pre)>code[class*="language-"],pre[class*="language-"]{background:#191919 !important;}div.code-toolbar>.toolbar span{cursor:default;}div.code-toolbar>.toolbar a{cursor:copy;}.logo-nav ul{width:300px !important;}@media(max-width:767px){body{font-size:14px;}.for-mobile{display:inline-block;}.for-desktop{display:none;}.close-mmenu,.close-dmenu{position:absolute;top:-78px;left:25px;color:#fff;font-size:68px;background:#fff;opacity:0;}.navbar{padding:.5rem 1.75rem;}.navbar .navbar-collapse{background:#38003d;position:fixed;top:86px;left:0;width:100%;height:100vh;height:calc(100vh - 86px);z-index:100 !important;}.navbar .navbar-collapse .navbar-nav{height:100vh;padding:20px 30px;overflow:auto;}.navbar .navbar-collapse .navbar-nav .nav-link{padding:1.2rem !important;}.navbar .navbar-toggler{padding:.5rem .75rem;font-size:1.5rem;line-height:1;background-color:transparent;border:0;border-radius:.25rem;color:#fff !important;margin-left:-1rem;}.section-with-logos img{margin:15px;opacity:1;-webkit-filter:grayscale(0%);filter:grayscale(0%);}span.code-arrow{padding:0 0 0;display:block;transform:rotate(90deg);font-size:2em;}.mb-5,.my-5{margin-bottom:2rem !important;}}@media screen and (max-width:767px){.navbar-logo .navbar-brand{display:inline-block;margin:0 auto !important;max-width:70%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}}.alert-criteria{padding:1.25em 1.5em;max-width:100%;}.alert-criteria p.alert-p{font-size:.96em;}.alert-criteria .input-group .input-group-text,.alert-criteria .input-group .form-control{font-size:.96em;}@media screen and (max-width:767px){.alert-criteria .input-group .input-group-text,.alert-criteria .input-group .form-control{font-size:.88em;}}.alert-criteria .input-group .input-group-text{color:#004085;background-color:#bddcfd;border:1px solid #bddcfd;}@media screen and (max-width:1366px){.alert-criteria .input-group .input-group-text{display:none;}}.alert-criteria .input-group .form-control{color:#004085;background-color:#fff;border:1px solid #bddcfd;}@media screen and (max-width:1366px){.alert-criteria .input-group .form-control{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;}}.scrolledMore{padding-top:107px;}.scrolledMore .alert-criteria{position:fixed;top:0;z-index:10;border:0;border-radius:0;margin-left:-47px;padding:.5em .75em;}@media screen and (max-width:767px){.scrolledMore .alert-criteria{top:72px;margin-left:-36px;}}.scrolledMore .alert-criteria p.alert-p{display:none;}.mCS-autoHide>.mCustomScrollBox>.mCSB_scrollTools,.mCS-autoHide>.mCustomScrollBox~.mCSB_scrollTools{opacity:1 !important;filter:"alpha(opacity=1)";-ms-filter:"alpha(opacity=1)";} \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.scss b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.scss index ec877a119b..792abdc2e8 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.scss +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Shared/Styles/vs.scss @@ -112,7 +112,7 @@ body { ul { font-size: 14px; list-style: none; - padding: 0 1rem; + padding: 0 1rem 1rem; margin: 0; li { From 08961d140f428edf70ee282d708ee6abf08ae1c5 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 5 Aug 2021 09:23:03 +0800 Subject: [PATCH 10/32] Update name of DbContexts. --- .../Cli/Commands/CreateMigrationAndRunMigratorCommand.cs | 6 +++--- .../Abp/Cli/ProjectModification/EfCoreMigrationManager.cs | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/CreateMigrationAndRunMigratorCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/CreateMigrationAndRunMigratorCommand.cs index 2a3c4652af..051b4a1da5 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/CreateMigrationAndRunMigratorCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/CreateMigrationAndRunMigratorCommand.cs @@ -71,7 +71,7 @@ namespace Volo.Abp.Cli.Commands private string FindTenantDbContextName(string dbMigrationsFolder) { var tenantDbContext = Directory - .GetFiles(dbMigrationsFolder, "*TenantMigrationsDbContext.cs", SearchOption.AllDirectories) + .GetFiles(dbMigrationsFolder, "*TenantDbContext.cs", SearchOption.AllDirectories) .FirstOrDefault(); if (tenantDbContext == null) @@ -85,8 +85,8 @@ namespace Volo.Abp.Cli.Commands private string FindDbContextName(string dbMigrationsFolder) { var dbContext = Directory - .GetFiles(dbMigrationsFolder, "*MigrationsDbContext.cs", SearchOption.AllDirectories) - .FirstOrDefault(fp => !fp.EndsWith("TenantMigrationsDbContext.cs")); + .GetFiles(dbMigrationsFolder, "*DbContext.cs", SearchOption.AllDirectories) + .FirstOrDefault(fp => !fp.EndsWith("TenantDbContext.cs")); if (dbContext == null) { diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/EfCoreMigrationManager.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/EfCoreMigrationManager.cs index 8143acf7b8..77c2ec0649 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/EfCoreMigrationManager.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/EfCoreMigrationManager.cs @@ -70,8 +70,8 @@ namespace Volo.Abp.Cli.ProjectModification protected virtual string FindDbContextName(string dbMigrationsFolder) { var dbContext = Directory - .GetFiles(dbMigrationsFolder, "*MigrationsDbContext.cs", SearchOption.AllDirectories) - .FirstOrDefault(fp => !fp.EndsWith("TenantMigrationsDbContext.cs")); + .GetFiles(dbMigrationsFolder, "*DbContext.cs", SearchOption.AllDirectories) + .FirstOrDefault(fp => !fp.EndsWith("TenantDbContext.cs")); if (dbContext == null) { @@ -84,7 +84,7 @@ namespace Volo.Abp.Cli.ProjectModification protected virtual string FindTenantDbContextName(string dbMigrationsFolder) { var tenantDbContext = Directory - .GetFiles(dbMigrationsFolder, "*TenantMigrationsDbContext.cs", SearchOption.AllDirectories) + .GetFiles(dbMigrationsFolder, "*TenantDbContext.cs", SearchOption.AllDirectories) .FirstOrDefault(); if (tenantDbContext == null) From ebb1bb3a403e1ee443a1e2ee624b675cf99efb35 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 5 Aug 2021 09:56:54 +0800 Subject: [PATCH 11/32] Compatible with old projects. --- .../CreateMigrationAndRunMigratorCommand.cs | 14 ++++++++------ .../ProjectModification/EfCoreMigrationManager.cs | 14 ++++++++------ 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/CreateMigrationAndRunMigratorCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/CreateMigrationAndRunMigratorCommand.cs index 051b4a1da5..e8a131189b 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/CreateMigrationAndRunMigratorCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/CreateMigrationAndRunMigratorCommand.cs @@ -70,9 +70,10 @@ namespace Volo.Abp.Cli.Commands private string FindTenantDbContextName(string dbMigrationsFolder) { - var tenantDbContext = Directory - .GetFiles(dbMigrationsFolder, "*TenantDbContext.cs", SearchOption.AllDirectories) - .FirstOrDefault(); + var tenantDbContext = Directory.GetFiles(dbMigrationsFolder, "*MigrationsDbContext.cs", SearchOption.AllDirectories) + .FirstOrDefault() ?? + Directory.GetFiles(dbMigrationsFolder, "*TenantDbContext.cs", SearchOption.AllDirectories) + .FirstOrDefault(); if (tenantDbContext == null) { @@ -84,9 +85,10 @@ namespace Volo.Abp.Cli.Commands private string FindDbContextName(string dbMigrationsFolder) { - var dbContext = Directory - .GetFiles(dbMigrationsFolder, "*DbContext.cs", SearchOption.AllDirectories) - .FirstOrDefault(fp => !fp.EndsWith("TenantDbContext.cs")); + var dbContext = Directory.GetFiles(dbMigrationsFolder, "*MigrationsDbContext.cs", SearchOption.AllDirectories) + .FirstOrDefault(fp => !fp.EndsWith("TenantMigrationsDbContext.cs")) ?? + Directory.GetFiles(dbMigrationsFolder, "*DbContext.cs", SearchOption.AllDirectories) + .FirstOrDefault(fp => !fp.EndsWith("TenantDbContext.cs")); if (dbContext == null) { diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/EfCoreMigrationManager.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/EfCoreMigrationManager.cs index 77c2ec0649..05996b90d7 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/EfCoreMigrationManager.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/EfCoreMigrationManager.cs @@ -69,9 +69,10 @@ namespace Volo.Abp.Cli.ProjectModification protected virtual string FindDbContextName(string dbMigrationsFolder) { - var dbContext = Directory - .GetFiles(dbMigrationsFolder, "*DbContext.cs", SearchOption.AllDirectories) - .FirstOrDefault(fp => !fp.EndsWith("TenantDbContext.cs")); + var dbContext = Directory.GetFiles(dbMigrationsFolder, "*MigrationsDbContext.cs", SearchOption.AllDirectories) + .FirstOrDefault(fp => !fp.EndsWith("TenantMigrationsDbContext.cs")) ?? + Directory.GetFiles(dbMigrationsFolder, "*DbContext.cs", SearchOption.AllDirectories) + .FirstOrDefault(fp => !fp.EndsWith("TenantDbContext.cs")); if (dbContext == null) { @@ -83,9 +84,10 @@ namespace Volo.Abp.Cli.ProjectModification protected virtual string FindTenantDbContextName(string dbMigrationsFolder) { - var tenantDbContext = Directory - .GetFiles(dbMigrationsFolder, "*TenantDbContext.cs", SearchOption.AllDirectories) - .FirstOrDefault(); + var tenantDbContext = Directory.GetFiles(dbMigrationsFolder, "*TenantMigrationsDbContext.cs", SearchOption.AllDirectories) + .FirstOrDefault() ?? + Directory.GetFiles(dbMigrationsFolder, "*TenantDbContext.cs", SearchOption.AllDirectories) + .FirstOrDefault(); if (tenantDbContext == null) { From 87c1e5ccc0f515e4bc21a8f7382904cd058a0311 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 5 Aug 2021 09:58:24 +0800 Subject: [PATCH 12/32] Update CreateMigrationAndRunMigratorCommand.cs --- .../Abp/Cli/Commands/CreateMigrationAndRunMigratorCommand.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/CreateMigrationAndRunMigratorCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/CreateMigrationAndRunMigratorCommand.cs index e8a131189b..7b9fbd35fe 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/CreateMigrationAndRunMigratorCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/CreateMigrationAndRunMigratorCommand.cs @@ -70,7 +70,7 @@ namespace Volo.Abp.Cli.Commands private string FindTenantDbContextName(string dbMigrationsFolder) { - var tenantDbContext = Directory.GetFiles(dbMigrationsFolder, "*MigrationsDbContext.cs", SearchOption.AllDirectories) + var tenantDbContext = Directory.GetFiles(dbMigrationsFolder, "*TenantMigrationsDbContext.cs", SearchOption.AllDirectories) .FirstOrDefault() ?? Directory.GetFiles(dbMigrationsFolder, "*TenantDbContext.cs", SearchOption.AllDirectories) .FirstOrDefault(); From 8e9a2eaccb2b5339b1f01cb79625f52838bac0b9 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 5 Aug 2021 13:02:47 +0800 Subject: [PATCH 13/32] Support pre-configure IServerSideBlazorBuilder. Resolve #9742 --- .../Server/AbpAspNetCoreComponentsServerModule.cs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Server/Volo/Abp/AspNetCore/Components/Server/AbpAspNetCoreComponentsServerModule.cs b/framework/src/Volo.Abp.AspNetCore.Components.Server/Volo/Abp/AspNetCore/Components/Server/AbpAspNetCoreComponentsServerModule.cs index 58398b651a..91b672b073 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.Server/Volo/Abp/AspNetCore/Components/Server/AbpAspNetCoreComponentsServerModule.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.Server/Volo/Abp/AspNetCore/Components/Server/AbpAspNetCoreComponentsServerModule.cs @@ -25,18 +25,19 @@ namespace Volo.Abp.AspNetCore.Components.Server { public override void ConfigureServices(ServiceConfigurationContext context) { - context.Services.AddServerSideBlazor(); - + var serverSideBlazorBuilder = context.Services.AddServerSideBlazor(); + context.Services.ExecutePreConfiguredActions(serverSideBlazorBuilder); + Configure(options => { options.IgnoredUrls.AddIfNotContains("/_blazor"); }); - + Configure(options => { options.IgnoredUrls.AddIfNotContains("/_blazor"); }); - + Configure(options => { options.EndpointConfigureActions.Add(endpointContext => @@ -56,4 +57,4 @@ namespace Volo.Abp.AspNetCore.Components.Server ); } } -} \ No newline at end of file +} From 5c56f3e3d489f02b2561ef2d63248074e53e5b33 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 5 Aug 2021 16:17:01 +0800 Subject: [PATCH 14/32] Update Basic-Theme.md --- docs/en/UI/AspNetCore/Basic-Theme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/UI/AspNetCore/Basic-Theme.md b/docs/en/UI/AspNetCore/Basic-Theme.md index 50a82142ef..34ea9ac849 100644 --- a/docs/en/UI/AspNetCore/Basic-Theme.md +++ b/docs/en/UI/AspNetCore/Basic-Theme.md @@ -85,7 +85,7 @@ See the [User Interface Customization Guide](Customization-User-Interface.md) to You can run the following [ABP CLI](../../CLI.md) command in **Web** project directory to copy the source code to your solution: -`abp add-package Volo.Abp.AspNetCore.Components.Server.BasicTheme --with-source-code --add-to-solution-file` +`abp add-module Volo.BasicTheme --with-source-code --add-to-solution-file` ---- From 7f3b56dd73028a06d0c7adbfea358f539edf897f Mon Sep 17 00:00:00 2001 From: "Uncle.Chao" Date: Thu, 5 Aug 2021 16:25:01 +0800 Subject: [PATCH 15/32] Update Entities.md --- docs/zh-Hans/Entities.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/zh-Hans/Entities.md b/docs/zh-Hans/Entities.md index 23ca3e73f0..85e1132d2b 100644 --- a/docs/zh-Hans/Entities.md +++ b/docs/zh-Hans/Entities.md @@ -211,7 +211,7 @@ public class OrderLine : Entity > 如果你不想你的聚合根继承`AggregateRoot`类,你可以直接实现`IAggregateRoot`接口 -`Order`是一个具有`Guid`类型`Id`属性的 **聚合根**.它有一个`OrderLine`实体集合.`OrderLine`是一个具有组合键(`OrderLine`和 ` ProductId`)的实体. +`Order`是一个具有`Guid`类型`Id`属性的 **聚合根**.它有一个`OrderLine`实体集合.`OrderLine`是一个具有组合键(`OrderId`和 ` ProductId`)的实体. 虽然这个示例可能无法实现聚合根的所有最佳实践,但它仍然遵循良好的实践: From ee5a6d656515e4c45f9ba289985e0968af8ead18 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Thu, 5 Aug 2021 11:53:26 +0300 Subject: [PATCH 16/32] CLI: Refactor new command --- .../Volo.Abp.Cli.Core/Volo/Abp/Cli/CliUrls.cs | 12 +- .../Volo/Abp/Cli/Commands/NewCommand.cs | 423 +---------------- .../Commands/ProjectCreationCommandBase.cs | 449 ++++++++++++++++++ .../Services/SourceCodeDownloadService.cs | 7 +- .../Cli/ProjectBuilding/ProjectBuildArgs.cs | 5 + 5 files changed, 469 insertions(+), 427 deletions(-) create mode 100644 framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliUrls.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliUrls.cs index 1ecc5b1631..665cce882a 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliUrls.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliUrls.cs @@ -2,19 +2,11 @@ { public static class CliUrls { -#if DEBUG - public const string WwwAbpIo = WwwAbpIoDevelopment; - - public const string AccountAbpIo = AccountAbpIoDevelopment; - - public const string NuGetRootPath = NuGetRootPathDevelopment; -#else public const string WwwAbpIo = WwwAbpIoProduction; - + public const string AccountAbpIo = AccountAbpIoProduction; - + public const string NuGetRootPath = NuGetRootPathProduction; -#endif public const string WwwAbpIoProduction = "https://abp.io/"; public const string AccountAbpIoProduction = "https://account.abp.io/"; diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs index c8757e1252..c8bc508983 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs @@ -26,24 +26,20 @@ using Volo.Abp.Threading; namespace Volo.Abp.Cli.Commands { - public class NewCommand : IConsoleCommand, ITransientDependency + public class NewCommand : ProjectCreationCommandBase, IConsoleCommand, ITransientDependency { - private readonly EfCoreMigrationManager _efCoreMigrationManager; public ILogger Logger { get; set; } protected TemplateProjectBuilder TemplateProjectBuilder { get; } public ITemplateInfoProvider TemplateInfoProvider { get; } - public ConnectionStringProvider ConnectionStringProvider { get; } public NewCommand(TemplateProjectBuilder templateProjectBuilder , ITemplateInfoProvider templateInfoProvider, - EfCoreMigrationManager efCoreMigrationManager, ConnectionStringProvider connectionStringProvider) + : base(connectionStringProvider) { - _efCoreMigrationManager = efCoreMigrationManager; TemplateProjectBuilder = templateProjectBuilder; TemplateInfoProvider = templateInfoProvider; - ConnectionStringProvider = connectionStringProvider; Logger = NullLogger.Instance; } @@ -79,257 +75,23 @@ namespace Volo.Abp.Cli.Commands template = (await TemplateInfoProvider.GetDefaultAsync()).Name; } - var version = commandLineArgs.Options.GetOrNull(Options.Version.Short, Options.Version.Long); - if (version != null) - { - Logger.LogInformation("Version: " + version); - } - var isTiered = commandLineArgs.Options.ContainsKey(Options.Tiered.Long); if (isTiered) { Logger.LogInformation("Tiered: yes"); } - var preview = commandLineArgs.Options.ContainsKey(Options.Preview.Long); - if (preview) - { - Logger.LogInformation("Preview: yes"); - } - - var databaseProvider = GetDatabaseProvider(commandLineArgs); - if (databaseProvider != DatabaseProvider.NotSpecified) - { - Logger.LogInformation("Database provider: " + databaseProvider); - } - - var connectionString = GetConnectionString(commandLineArgs); - if (connectionString != null) - { - Logger.LogInformation("Connection string: " + connectionString); - } - - var databaseManagementSystem = GetDatabaseManagementSystem(commandLineArgs); - if (databaseManagementSystem != DatabaseManagementSystem.NotSpecified) - { - Logger.LogInformation("DBMS: " + databaseManagementSystem); - } - - var uiFramework = GetUiFramework(commandLineArgs); - if (uiFramework != UiFramework.NotSpecified) - { - Logger.LogInformation("UI Framework: " + uiFramework); - } - - var publicWebSite = uiFramework != UiFramework.None && commandLineArgs.Options.ContainsKey(Options.PublicWebSite.Long); - if (publicWebSite) - { - Logger.LogInformation("Public Web Site: yes"); - } - - var mobileApp = GetMobilePreference(commandLineArgs); - if (mobileApp != MobileApp.None) - { - Logger.LogInformation("Mobile App: " + mobileApp); - } - - var gitHubAbpLocalRepositoryPath = commandLineArgs.Options.GetOrNull(Options.GitHubAbpLocalRepositoryPath.Long); - if (gitHubAbpLocalRepositoryPath != null) - { - Logger.LogInformation("GitHub Abp Local Repository Path: " + gitHubAbpLocalRepositoryPath); - } - - var gitHubVoloLocalRepositoryPath = commandLineArgs.Options.GetOrNull(Options.GitHubVoloLocalRepositoryPath.Long); - if (gitHubVoloLocalRepositoryPath != null) - { - Logger.LogInformation("GitHub Volo Local Repository Path: " + gitHubVoloLocalRepositoryPath); - } - - var templateSource = commandLineArgs.Options.GetOrNull(Options.TemplateSource.Short, Options.TemplateSource.Long); - if (templateSource != null) - { - Logger.LogInformation("Template Source: " + templateSource); - } - - var createSolutionFolder = GetCreateSolutionFolderPreference(commandLineArgs); - - var outputFolder = commandLineArgs.Options.GetOrNull(Options.OutputFolder.Short, Options.OutputFolder.Long); - - var outputFolderRoot = - outputFolder != null ? Path.GetFullPath(outputFolder) : Directory.GetCurrentDirectory(); - - SolutionName solutionName; - if (MicroserviceServiceTemplateBase.IsMicroserviceServiceTemplate(template)) - { - var microserviceSolutionName = FindMicroserviceSolutionName(outputFolderRoot); - - if (microserviceSolutionName == null) - { - throw new CliUsageException("This command should be run inside a folder that contains a microservice solution!"); - } - - solutionName = SolutionName.Parse(microserviceSolutionName, projectName); - outputFolder = MicroserviceServiceTemplateBase.CalculateTargetFolder(outputFolderRoot, projectName); - uiFramework = uiFramework == UiFramework.NotSpecified ? FindMicroserviceSolutionUiFramework(outputFolderRoot) : uiFramework; - } - else - { - solutionName = SolutionName.Parse(projectName); - - outputFolder = createSolutionFolder ? - Path.Combine(outputFolderRoot, SolutionName.Parse(projectName).FullName) : - outputFolderRoot; - } - - Volo.Abp.IO.DirectoryHelper.CreateIfNotExists(outputFolder); - - Logger.LogInformation("Output folder: " + outputFolder); - - if (connectionString == null && - databaseManagementSystem != DatabaseManagementSystem.NotSpecified && - databaseManagementSystem != DatabaseManagementSystem.SQLServer) - { - connectionString = ConnectionStringProvider.GetByDbms(databaseManagementSystem, outputFolder); - } - - commandLineArgs.Options.Add(CliConsts.Command, commandLineArgs.Command); + var projectArgs = GetProjectBuildArgs(commandLineArgs, template, projectName); var result = await TemplateProjectBuilder.BuildAsync( - new ProjectBuildArgs( - solutionName, - template, - version, - databaseProvider, - databaseManagementSystem, - uiFramework, - mobileApp, - publicWebSite, - gitHubAbpLocalRepositoryPath, - gitHubVoloLocalRepositoryPath, - templateSource, - commandLineArgs.Options, - connectionString - ) + projectArgs ); - using (var templateFileStream = new MemoryStream(result.ZipContent)) - { - using (var zipInputStream = new ZipInputStream(templateFileStream)) - { - var zipEntry = zipInputStream.GetNextEntry(); - while (zipEntry != null) - { - if (string.IsNullOrWhiteSpace(zipEntry.Name)) - { - zipEntry = zipInputStream.GetNextEntry(); - continue; - } - - var fullZipToPath = Path.Combine(outputFolder, zipEntry.Name); - var directoryName = Path.GetDirectoryName(fullZipToPath); - - if (!string.IsNullOrEmpty(directoryName)) - { - Directory.CreateDirectory(directoryName); - } - - var fileName = Path.GetFileName(fullZipToPath); - if (fileName.Length == 0) - { - zipEntry = zipInputStream.GetNextEntry(); - continue; - } - - var buffer = new byte[4096]; // 4K is optimum - using (var streamWriter = File.Create(fullZipToPath)) - { - StreamUtils.Copy(zipInputStream, streamWriter, buffer); - } - - zipEntry = zipInputStream.GetNextEntry(); - } - } - } - - Logger.LogInformation($"'{projectName}' has been successfully created to '{outputFolder}'"); - - - if (AppTemplateBase.IsAppTemplate(template)) - { - var isCommercial = template == AppProTemplate.TemplateName; - OpenThanksPage(uiFramework, databaseProvider, isTiered || commandLineArgs.Options.ContainsKey("separate-identity-server"), isCommercial); - } - else if (MicroserviceTemplateBase.IsMicroserviceTemplate(template)) - { - OpenMicroserviceDocumentPage(); - } - } - - private string FindMicroserviceSolutionName(string outputFolderRoot) - { - var slnFile = Directory.GetFiles(outputFolderRoot, "*.sln").FirstOrDefault(); - - if (slnFile == null) - { - return null; - } - - return Path.GetFileName(slnFile).RemovePostFix(".sln"); - } - - private UiFramework FindMicroserviceSolutionUiFramework(string outputFolderRoot) - { - if (Directory.Exists(Path.Combine(outputFolderRoot, "apps", "blazor"))) - { - return UiFramework.Blazor; - } - if (Directory.Exists(Path.Combine(outputFolderRoot, "apps", "web"))) - { - return UiFramework.Mvc; - } - if (Directory.Exists(Path.Combine(outputFolderRoot, "apps", "angular"))) - { - return UiFramework.Angular; - } - - return UiFramework.None; - } - - private void OpenThanksPage(UiFramework uiFramework, DatabaseProvider databaseProvider, bool tiered, bool commercial) - { - uiFramework = uiFramework == UiFramework.NotSpecified || uiFramework == UiFramework.None ? UiFramework.Mvc : uiFramework; - databaseProvider = databaseProvider == DatabaseProvider.NotSpecified ? DatabaseProvider.EntityFrameworkCore : databaseProvider; - - var urlPrefix = commercial ? "commercial" : "www"; - var tieredYesNo = tiered ? "yes" : "no"; - var url = $"https://{urlPrefix}.abp.io/project-created-success?ui={uiFramework:g}&db={databaseProvider:g}&tiered={tieredYesNo}"; - - CmdHelper.OpenWebPage(url); - } - - private void OpenMicroserviceDocumentPage() - { - var url = "https://docs.abp.io/en/commercial/latest/startup-templates/microservice/index"; + ExtractProjectZip(result, projectArgs.OutputFolder); - CmdHelper.OpenWebPage(url); - } - - private bool GetCreateSolutionFolderPreference(CommandLineArgs commandLineArgs) - { - var longKey = commandLineArgs.Options.ContainsKey(Options.CreateSolutionFolder.Long); - - if (longKey == false) - { - return commandLineArgs.Options.ContainsKey(Options.CreateSolutionFolder.Short); - } - - return longKey; - } + Logger.LogInformation($"'{projectName}' has been successfully created to '{projectArgs.OutputFolder}'"); - private static string GetConnectionString(CommandLineArgs commandLineArgs) - { - var connectionString = commandLineArgs.Options.GetOrNull(Options.ConnectionString.Short, Options.ConnectionString.Long); - return string.IsNullOrWhiteSpace(connectionString) ? null : connectionString; + OpenRelatedWebPage(projectArgs, template, isTiered, commandLineArgs); } public string GetUsageInfo() @@ -389,174 +151,5 @@ namespace Volo.Abp.Cli.Commands return "Generate a new solution based on the ABP startup templates."; } - protected virtual DatabaseProvider GetDatabaseProvider(CommandLineArgs commandLineArgs) - { - var optionValue = commandLineArgs.Options.GetOrNull(Options.DatabaseProvider.Short, Options.DatabaseProvider.Long); - switch (optionValue) - { - case "ef": - return DatabaseProvider.EntityFrameworkCore; - case "mongodb": - return DatabaseProvider.MongoDb; - default: - return DatabaseProvider.NotSpecified; - } - } - - protected virtual DatabaseManagementSystem GetDatabaseManagementSystem(CommandLineArgs commandLineArgs) - { - var optionValue = commandLineArgs.Options.GetOrNull(Options.DatabaseManagementSystem.Short, Options.DatabaseManagementSystem.Long); - - if (optionValue == null) - { - return DatabaseManagementSystem.NotSpecified; - } - - switch (optionValue.ToLowerInvariant()) - { - case "sqlserver": - return DatabaseManagementSystem.SQLServer; - case "mysql": - return DatabaseManagementSystem.MySQL; - case "postgresql": - return DatabaseManagementSystem.PostgreSQL; - case "oracle-devart": - return DatabaseManagementSystem.OracleDevart; - case "sqlite": - return DatabaseManagementSystem.SQLite; - case "oracle": - return DatabaseManagementSystem.Oracle; - default: - return DatabaseManagementSystem.NotSpecified; - } - } - - protected virtual UiFramework GetUiFramework(CommandLineArgs commandLineArgs) - { - if (commandLineArgs.Options.ContainsKey("no-ui")) - { - return UiFramework.None; - } - - var optionValue = commandLineArgs.Options.GetOrNull(Options.UiFramework.Short, Options.UiFramework.Long); - switch (optionValue) - { - case "none": - return UiFramework.None; - case "mvc": - return UiFramework.Mvc; - case "angular": - return UiFramework.Angular; - case "blazor": - return UiFramework.Blazor; - case "blazor-server": - return UiFramework.BlazorServer; - default: - return UiFramework.NotSpecified; - } - } - - protected virtual MobileApp GetMobilePreference(CommandLineArgs commandLineArgs) - { - var optionValue = commandLineArgs.Options.GetOrNull(Options.Mobile.Short, Options.Mobile.Long); - - switch (optionValue) - { - case "none": - return MobileApp.None; - case "react-native": - return MobileApp.ReactNative; - default: - return MobileApp.None; - } - } - - public static class Options - { - public static class Template - { - public const string Short = "t"; - public const string Long = "template"; - } - - public static class DatabaseProvider - { - public const string Short = "d"; - public const string Long = "database-provider"; - } - - public static class DatabaseManagementSystem - { - public const string Short = "dbms"; - public const string Long = "database-management-system"; - } - - public static class OutputFolder - { - public const string Short = "o"; - public const string Long = "output-folder"; - } - - public static class GitHubAbpLocalRepositoryPath - { - public const string Long = "abp-path"; - } - - public static class GitHubVoloLocalRepositoryPath - { - public const string Long = "volo-path"; - } - - public static class Version - { - public const string Short = "v"; - public const string Long = "version"; - } - - public static class UiFramework - { - public const string Short = "u"; - public const string Long = "ui"; - } - - public static class Mobile - { - public const string Short = "m"; - public const string Long = "mobile"; - } - - public static class PublicWebSite - { - public const string Long = "with-public-website"; - } - - public static class TemplateSource - { - public const string Short = "ts"; - public const string Long = "template-source"; - } - - public static class ConnectionString - { - public const string Short = "cs"; - public const string Long = "connection-string"; - } - - public static class CreateSolutionFolder - { - public const string Short = "csf"; - public const string Long = "create-solution-folder"; - } - - public static class Tiered - { - public const string Long = "tiered"; - } - - public static class Preview - { - public const string Long = "preview"; - } - } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs new file mode 100644 index 0000000000..927019f566 --- /dev/null +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProjectCreationCommandBase.cs @@ -0,0 +1,449 @@ +using System; +using System.IO; +using System.Linq; +using ICSharpCode.SharpZipLib.Core; +using ICSharpCode.SharpZipLib.Zip; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; +using Volo.Abp.Cli.Args; +using Volo.Abp.Cli.Commands.Services; +using Volo.Abp.Cli.ProjectBuilding; +using Volo.Abp.Cli.ProjectBuilding.Building; +using Volo.Abp.Cli.ProjectBuilding.Templates.App; +using Volo.Abp.Cli.ProjectBuilding.Templates.Microservice; +using Volo.Abp.Cli.Utils; + +namespace Volo.Abp.Cli.Commands +{ + public abstract class ProjectCreationCommandBase + { + public ConnectionStringProvider ConnectionStringProvider { get; } + public ILogger Logger { get; set; } + + public ProjectCreationCommandBase(ConnectionStringProvider connectionStringProvider) + { + ConnectionStringProvider = connectionStringProvider; + + Logger = NullLogger.Instance; + } + + protected ProjectBuildArgs GetProjectBuildArgs(CommandLineArgs commandLineArgs, string template, string projectName) + { + var version = commandLineArgs.Options.GetOrNull(Options.Version.Short, Options.Version.Long); + + if (version != null) + { + Logger.LogInformation("Version: " + version); + } + + var preview = commandLineArgs.Options.ContainsKey(Options.Preview.Long); + if (preview) + { + Logger.LogInformation("Preview: yes"); + } + + var databaseProvider = GetDatabaseProvider(commandLineArgs); + if (databaseProvider != DatabaseProvider.NotSpecified) + { + Logger.LogInformation("Database provider: " + databaseProvider); + } + + var connectionString = GetConnectionString(commandLineArgs); + if (connectionString != null) + { + Logger.LogInformation("Connection string: " + connectionString); + } + + var databaseManagementSystem = GetDatabaseManagementSystem(commandLineArgs); + if (databaseManagementSystem != DatabaseManagementSystem.NotSpecified) + { + Logger.LogInformation("DBMS: " + databaseManagementSystem); + } + + var uiFramework = GetUiFramework(commandLineArgs); + if (uiFramework != UiFramework.NotSpecified) + { + Logger.LogInformation("UI Framework: " + uiFramework); + } + + var publicWebSite = uiFramework != UiFramework.None && commandLineArgs.Options.ContainsKey(Options.PublicWebSite.Long); + if (publicWebSite) + { + Logger.LogInformation("Public Web Site: yes"); + } + + var mobileApp = GetMobilePreference(commandLineArgs); + if (mobileApp != MobileApp.None) + { + Logger.LogInformation("Mobile App: " + mobileApp); + } + + var gitHubAbpLocalRepositoryPath = commandLineArgs.Options.GetOrNull(Options.GitHubAbpLocalRepositoryPath.Long); + if (gitHubAbpLocalRepositoryPath != null) + { + Logger.LogInformation("GitHub Abp Local Repository Path: " + gitHubAbpLocalRepositoryPath); + } + + var gitHubVoloLocalRepositoryPath = commandLineArgs.Options.GetOrNull(Options.GitHubVoloLocalRepositoryPath.Long); + if (gitHubVoloLocalRepositoryPath != null) + { + Logger.LogInformation("GitHub Volo Local Repository Path: " + gitHubVoloLocalRepositoryPath); + } + + var templateSource = commandLineArgs.Options.GetOrNull(Options.TemplateSource.Short, Options.TemplateSource.Long); + if (templateSource != null) + { + Logger.LogInformation("Template Source: " + templateSource); + } + + var createSolutionFolder = GetCreateSolutionFolderPreference(commandLineArgs); + + var outputFolder = commandLineArgs.Options.GetOrNull(Options.OutputFolder.Short, Options.OutputFolder.Long); + + var outputFolderRoot = + outputFolder != null ? Path.GetFullPath(outputFolder) : Directory.GetCurrentDirectory(); + + SolutionName solutionName; + if (MicroserviceServiceTemplateBase.IsMicroserviceServiceTemplate(template)) + { + var microserviceSolutionName = FindMicroserviceSolutionName(outputFolderRoot); + + if (microserviceSolutionName == null) + { + throw new CliUsageException("This command should be run inside a folder that contains a microservice solution!"); + } + + solutionName = SolutionName.Parse(microserviceSolutionName, projectName); + outputFolder = MicroserviceServiceTemplateBase.CalculateTargetFolder(outputFolderRoot, projectName); + uiFramework = uiFramework == UiFramework.NotSpecified ? FindMicroserviceSolutionUiFramework(outputFolderRoot) : uiFramework; + } + else + { + solutionName = SolutionName.Parse(projectName); + + outputFolder = createSolutionFolder ? + Path.Combine(outputFolderRoot, SolutionName.Parse(projectName).FullName) : + outputFolderRoot; + } + + IO.DirectoryHelper.CreateIfNotExists(outputFolder); + + Logger.LogInformation("Output folder: " + outputFolder); + + if (connectionString == null && + databaseManagementSystem != DatabaseManagementSystem.NotSpecified && + databaseManagementSystem != DatabaseManagementSystem.SQLServer) + { + connectionString = ConnectionStringProvider.GetByDbms(databaseManagementSystem, outputFolder); + } + + commandLineArgs.Options.Add(CliConsts.Command, commandLineArgs.Command); + + return new ProjectBuildArgs( + solutionName, + template, + version, + outputFolder, + databaseProvider, + databaseManagementSystem, + uiFramework, + mobileApp, + publicWebSite, + gitHubAbpLocalRepositoryPath, + gitHubVoloLocalRepositoryPath, + templateSource, + commandLineArgs.Options, + connectionString + ); + } + + protected void ExtractProjectZip(ProjectBuildResult project, string outputFolder) + { + using (var templateFileStream = new MemoryStream(project.ZipContent)) + { + using (var zipInputStream = new ZipInputStream(templateFileStream)) + { + var zipEntry = zipInputStream.GetNextEntry(); + while (zipEntry != null) + { + if (string.IsNullOrWhiteSpace(zipEntry.Name)) + { + zipEntry = zipInputStream.GetNextEntry(); + continue; + } + + var fullZipToPath = Path.Combine(outputFolder, zipEntry.Name); + var directoryName = Path.GetDirectoryName(fullZipToPath); + + if (!string.IsNullOrEmpty(directoryName)) + { + Directory.CreateDirectory(directoryName); + } + + var fileName = Path.GetFileName(fullZipToPath); + if (fileName.Length == 0) + { + zipEntry = zipInputStream.GetNextEntry(); + continue; + } + + var buffer = new byte[4096]; // 4K is optimum + using (var streamWriter = File.Create(fullZipToPath)) + { + StreamUtils.Copy(zipInputStream, streamWriter, buffer); + } + + zipEntry = zipInputStream.GetNextEntry(); + } + } + } + } + + protected void OpenRelatedWebPage(ProjectBuildArgs projectArgs, + string template, + bool isTiered, + CommandLineArgs commandLineArgs) + { + if (AppTemplateBase.IsAppTemplate(template)) + { + var isCommercial = template == AppProTemplate.TemplateName; + OpenThanksPage(projectArgs.UiFramework, projectArgs.DatabaseProvider, isTiered || commandLineArgs.Options.ContainsKey("separate-identity-server"), isCommercial); + } + else if (MicroserviceTemplateBase.IsMicroserviceTemplate(template)) + { + OpenMicroserviceDocumentPage(); + } + } + + protected string FindMicroserviceSolutionName(string outputFolderRoot) + { + var slnFile = Directory.GetFiles(outputFolderRoot, "*.sln").FirstOrDefault(); + + if (slnFile == null) + { + return null; + } + + return Path.GetFileName(slnFile).RemovePostFix(".sln"); + } + + protected UiFramework FindMicroserviceSolutionUiFramework(string outputFolderRoot) + { + if (Directory.Exists(Path.Combine(outputFolderRoot, "apps", "blazor"))) + { + return UiFramework.Blazor; + } + if (Directory.Exists(Path.Combine(outputFolderRoot, "apps", "web"))) + { + return UiFramework.Mvc; + } + if (Directory.Exists(Path.Combine(outputFolderRoot, "apps", "angular"))) + { + return UiFramework.Angular; + } + + return UiFramework.None; + } + + protected void OpenThanksPage(UiFramework uiFramework, DatabaseProvider databaseProvider, bool tiered, bool commercial) + { + uiFramework = uiFramework == UiFramework.NotSpecified || uiFramework == UiFramework.None ? UiFramework.Mvc : uiFramework; + databaseProvider = databaseProvider == DatabaseProvider.NotSpecified ? DatabaseProvider.EntityFrameworkCore : databaseProvider; + + var urlPrefix = commercial ? "commercial" : "www"; + var tieredYesNo = tiered ? "yes" : "no"; + var url = $"https://{urlPrefix}.abp.io/project-created-success?ui={uiFramework:g}&db={databaseProvider:g}&tiered={tieredYesNo}"; + + CmdHelper.OpenWebPage(url); + } + + protected void OpenMicroserviceDocumentPage() + { + var url = "https://docs.abp.io/en/commercial/latest/startup-templates/microservice/index"; + + CmdHelper.OpenWebPage(url); + } + + protected bool GetCreateSolutionFolderPreference(CommandLineArgs commandLineArgs) + { + return commandLineArgs.Options.ContainsKey(Options.CreateSolutionFolder.Long) + || commandLineArgs.Options.ContainsKey(Options.CreateSolutionFolder.Short); + } + + protected static string GetConnectionString(CommandLineArgs commandLineArgs) + { + var connectionString = commandLineArgs.Options.GetOrNull(Options.ConnectionString.Short, Options.ConnectionString.Long); + return string.IsNullOrWhiteSpace(connectionString) ? null : connectionString; + } + + protected virtual DatabaseProvider GetDatabaseProvider(CommandLineArgs commandLineArgs) + { + var optionValue = commandLineArgs.Options.GetOrNull(Options.DatabaseProvider.Short, Options.DatabaseProvider.Long); + switch (optionValue) + { + case "ef": + return DatabaseProvider.EntityFrameworkCore; + case "mongodb": + return DatabaseProvider.MongoDb; + default: + return DatabaseProvider.NotSpecified; + } + } + + protected virtual DatabaseManagementSystem GetDatabaseManagementSystem(CommandLineArgs commandLineArgs) + { + var optionValue = commandLineArgs.Options.GetOrNull(Options.DatabaseManagementSystem.Short, Options.DatabaseManagementSystem.Long); + + if (optionValue == null) + { + return DatabaseManagementSystem.NotSpecified; + } + + switch (optionValue.ToLowerInvariant()) + { + case "sqlserver": + return DatabaseManagementSystem.SQLServer; + case "mysql": + return DatabaseManagementSystem.MySQL; + case "postgresql": + return DatabaseManagementSystem.PostgreSQL; + case "oracle-devart": + return DatabaseManagementSystem.OracleDevart; + case "sqlite": + return DatabaseManagementSystem.SQLite; + case "oracle": + return DatabaseManagementSystem.Oracle; + default: + return DatabaseManagementSystem.NotSpecified; + } + } + + protected virtual MobileApp GetMobilePreference(CommandLineArgs commandLineArgs) + { + var optionValue = commandLineArgs.Options.GetOrNull(Options.Mobile.Short, Options.Mobile.Long); + + switch (optionValue) + { + case "none": + return MobileApp.None; + case "react-native": + return MobileApp.ReactNative; + default: + return MobileApp.None; + } + } + + protected virtual UiFramework GetUiFramework(CommandLineArgs commandLineArgs) + { + if (commandLineArgs.Options.ContainsKey("no-ui")) + { + return UiFramework.None; + } + + var optionValue = commandLineArgs.Options.GetOrNull(Options.UiFramework.Short, Options.UiFramework.Long); + switch (optionValue) + { + case "none": + return UiFramework.None; + case "mvc": + return UiFramework.Mvc; + case "angular": + return UiFramework.Angular; + case "blazor": + return UiFramework.Blazor; + case "blazor-server": + return UiFramework.BlazorServer; + default: + return UiFramework.NotSpecified; + } + } + + public static class Options + { + public static class Template + { + public const string Short = "t"; + public const string Long = "template"; + } + + public static class DatabaseProvider + { + public const string Short = "d"; + public const string Long = "database-provider"; + } + + public static class DatabaseManagementSystem + { + public const string Short = "dbms"; + public const string Long = "database-management-system"; + } + + public static class OutputFolder + { + public const string Short = "o"; + public const string Long = "output-folder"; + } + + public static class GitHubAbpLocalRepositoryPath + { + public const string Long = "abp-path"; + } + + public static class GitHubVoloLocalRepositoryPath + { + public const string Long = "volo-path"; + } + + public static class Version + { + public const string Short = "v"; + public const string Long = "version"; + } + + public static class UiFramework + { + public const string Short = "u"; + public const string Long = "ui"; + } + + public static class Mobile + { + public const string Short = "m"; + public const string Long = "mobile"; + } + + public static class PublicWebSite + { + public const string Long = "with-public-website"; + } + + public static class TemplateSource + { + public const string Short = "ts"; + public const string Long = "template-source"; + } + + public static class ConnectionString + { + public const string Short = "cs"; + public const string Long = "connection-string"; + } + + public static class CreateSolutionFolder + { + public const string Short = "csf"; + public const string Long = "create-solution-folder"; + } + + public static class Tiered + { + public const string Long = "tiered"; + } + + public static class Preview + { + public const string Long = "preview"; + } + } + } +} diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/Services/SourceCodeDownloadService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/Services/SourceCodeDownloadService.cs index 56e5c0a03b..a228068b45 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/Services/SourceCodeDownloadService.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/Services/SourceCodeDownloadService.cs @@ -42,6 +42,7 @@ namespace Volo.Abp.Cli.Commands.Services SolutionName.Parse(moduleName), moduleName, version, + outputFolder, DatabaseProvider.NotSpecified, DatabaseManagementSystem.NotSpecified, UiFramework.NotSpecified, @@ -106,7 +107,8 @@ namespace Volo.Abp.Cli.Commands.Services new ProjectBuildArgs( SolutionName.Parse(packageName), packageName, - version + version, + outputFolder ) ); @@ -156,7 +158,8 @@ namespace Volo.Abp.Cli.Commands.Services new ProjectBuildArgs( SolutionName.Parse(packageName), packageName, - version + version, + outputFolder ) ); diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ProjectBuildArgs.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ProjectBuildArgs.cs index 71ccf96f7a..01b21bf858 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ProjectBuildArgs.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ProjectBuildArgs.cs @@ -37,6 +37,9 @@ namespace Volo.Abp.Cli.ProjectBuilding [CanBeNull] public string ConnectionString { get; set; } + [NotNull] + public string OutputFolder { get; set; } + [NotNull] public Dictionary ExtraProperties { get; set; } @@ -44,6 +47,7 @@ namespace Volo.Abp.Cli.ProjectBuilding [NotNull] SolutionName solutionName, [CanBeNull] string templateName = null, [CanBeNull] string version = null, + string outputFolder = null, DatabaseProvider databaseProvider = DatabaseProvider.NotSpecified, DatabaseManagementSystem databaseManagementSystem = DatabaseManagementSystem.NotSpecified, UiFramework uiFramework = UiFramework.NotSpecified, @@ -58,6 +62,7 @@ namespace Volo.Abp.Cli.ProjectBuilding SolutionName = Check.NotNull(solutionName, nameof(solutionName)); TemplateName = templateName; Version = version; + OutputFolder = outputFolder; DatabaseProvider = databaseProvider; DatabaseManagementSystem = databaseManagementSystem; UiFramework = uiFramework; From 096d7fddb671a32389dcb7a97c8a4b3727269a61 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Thu, 5 Aug 2021 12:58:18 +0300 Subject: [PATCH 17/32] Fix Volo.BasicTheme install problem --- .../Building/Steps/ReplaceCommonPropsStep.cs | 4 ++- .../NugetPackageToLocalReferenceConverter.cs | 3 +- ...NetCore.Mvc.UI.Bootstrap.Demo.Tests.csproj | 12 +++++-- ...AbpAspNetCoreMvcUiBootstrapDemoTestBase.cs | 31 +++++++++++++++++-- ...bp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj | 2 +- ....AspNetCore.Mvc.UI.Theme.Basic.Demo.csproj | 2 +- 6 files changed, 45 insertions(+), 9 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ReplaceCommonPropsStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ReplaceCommonPropsStep.cs index 862ac39b09..c615bcdfce 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ReplaceCommonPropsStep.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ReplaceCommonPropsStep.cs @@ -60,7 +60,9 @@ namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps foreach (XmlNode node in importNodes) { - if (!(node.Attributes?["Project"]?.Value?.EndsWith("\\common.props") ?? false)) + var value = node.Attributes?["Project"]?.Value; + + if (value == null || (!value.EndsWith("\\common.props") && !value.EndsWith("\\common.test.props"))) { continue; } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NugetPackageToLocalReferenceConverter.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NugetPackageToLocalReferenceConverter.cs index 8e45378f72..efecee8d79 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NugetPackageToLocalReferenceConverter.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NugetPackageToLocalReferenceConverter.cs @@ -67,7 +67,8 @@ namespace Volo.Abp.Cli.ProjectModification if (oldNodeIncludeValue.EndsWith(".test", StringComparison.InvariantCultureIgnoreCase) || oldNodeIncludeValue.EndsWith(".tests", StringComparison.InvariantCultureIgnoreCase) || - oldNodeIncludeValue.EndsWith(".testbase", StringComparison.InvariantCultureIgnoreCase)) + oldNodeIncludeValue.EndsWith(".testbase", StringComparison.InvariantCultureIgnoreCase)|| + oldNodeIncludeValue.EndsWith(".Demo", StringComparison.InvariantCultureIgnoreCase)) { tempSourceFile = "test"; } diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests.csproj b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests.csproj index 0ad808cdb2..24205102c8 100644 --- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests.csproj +++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests.csproj @@ -17,11 +17,19 @@ - - + + + + + + + + + + diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/Volo/Abp/AspNetCore/Mvc/UI/Bootstrap/Demo/AbpAspNetCoreMvcUiBootstrapDemoTestBase.cs b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/Volo/Abp/AspNetCore/Mvc/UI/Bootstrap/Demo/AbpAspNetCoreMvcUiBootstrapDemoTestBase.cs index d7a8a88c2a..ec07aeab4a 100644 --- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/Volo/Abp/AspNetCore/Mvc/UI/Bootstrap/Demo/AbpAspNetCoreMvcUiBootstrapDemoTestBase.cs +++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/Volo/Abp/AspNetCore/Mvc/UI/Bootstrap/Demo/AbpAspNetCoreMvcUiBootstrapDemoTestBase.cs @@ -1,12 +1,17 @@ using System; +using System.Globalization; using System.IO; using System.Linq; -using Microsoft.AspNetCore.Hosting; +using System.Net; +using System.Net.Http; +using System.Threading.Tasks; using Microsoft.Extensions.Hosting; +using Shouldly; +using Volo.Abp.AspNetCore.TestBase; namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo { - public abstract class AbpAspNetCoreMvcUiBootstrapDemoTestBase : AbpAspNetCoreTestBase + public abstract class AbpAspNetCoreMvcUiBootstrapDemoTestBase : AbpAspNetCoreIntegratedTestBase { protected override IHostBuilder CreateHostBuilder() { @@ -46,5 +51,25 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo .GetFiles(currentDirectory, "*.*", SearchOption.TopDirectoryOnly) .Any(f => Path.GetFileName(f) == projectFileName); } + + + protected virtual async Task GetResponseAsStringAsync(string url, HttpStatusCode expectedStatusCode = HttpStatusCode.OK) + { + using (var response = await GetResponseAsync(url, expectedStatusCode)) + { + return await response.Content.ReadAsStringAsync(); + } + } + + protected virtual async Task GetResponseAsync(string url, HttpStatusCode expectedStatusCode = HttpStatusCode.OK) + { + using (var requestMessage = new HttpRequestMessage(HttpMethod.Get, url)) + { + requestMessage.Headers.Add("Accept-Language", CultureInfo.CurrentUICulture.Name); + var response = await Client.SendAsync(requestMessage); + response.StatusCode.ShouldBe(expectedStatusCode); + return response; + } + } } -} \ No newline at end of file +} diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj index 0574bb89c8..372ad8ba75 100644 --- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj +++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj @@ -8,7 +8,7 @@ - + diff --git a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo.csproj b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo.csproj index 08c2996075..52024363e0 100644 --- a/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo.csproj +++ b/modules/basic-theme/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo.csproj @@ -16,7 +16,7 @@ - + From 01e3b7742c9a623d61a61af28af264e5a6859193 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Thu, 5 Aug 2021 14:49:54 +0300 Subject: [PATCH 18/32] Update CliUrls.cs --- .../src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliUrls.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliUrls.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliUrls.cs index 665cce882a..e091d087ed 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliUrls.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliUrls.cs @@ -2,15 +2,17 @@ { public static class CliUrls { - public const string WwwAbpIo = WwwAbpIoProduction; +#if DEBUG + public const string WwwAbpIo = WwwAbpIoDevelopment; - public const string AccountAbpIo = AccountAbpIoProduction; - - public const string NuGetRootPath = NuGetRootPathProduction; + public const string AccountAbpIo = AccountAbpIoDevelopment; + public const string NuGetRootPath = NuGetRootPathDevelopment; +#else public const string WwwAbpIoProduction = "https://abp.io/"; public const string AccountAbpIoProduction = "https://account.abp.io/"; public const string NuGetRootPathProduction = "https://nuget.abp.io/"; +#endif public const string WwwAbpIoDevelopment = "https://localhost:44328/"; public const string AccountAbpIoDevelopment = "https://localhost:44333/"; From 3ea88ef8a52918942cc851ecc6c22b0f272b0c87 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Thu, 5 Aug 2021 14:51:41 +0300 Subject: [PATCH 19/32] Update CliUrls.cs --- framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliUrls.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliUrls.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliUrls.cs index e091d087ed..8d2b10d3ca 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliUrls.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliUrls.cs @@ -9,10 +9,16 @@ public const string NuGetRootPath = NuGetRootPathDevelopment; #else + public const string WwwAbpIo = WwwAbpIoProduction; + + public const string AccountAbpIo = AccountAbpIoProduction; + + public const string NuGetRootPath = NuGetRootPathProduction; +#endif + public const string WwwAbpIoProduction = "https://abp.io/"; public const string AccountAbpIoProduction = "https://account.abp.io/"; public const string NuGetRootPathProduction = "https://nuget.abp.io/"; -#endif public const string WwwAbpIoDevelopment = "https://localhost:44328/"; public const string AccountAbpIoDevelopment = "https://localhost:44333/"; From 7698f67a9e2a7f1af26116d830ca2666a65be880 Mon Sep 17 00:00:00 2001 From: bnymncoskuner Date: Thu, 5 Aug 2021 07:40:36 -0500 Subject: [PATCH 20/32] fix: creating wrong dates when timezone is utc- --- .../extensions/src/lib/adapters/date.adapter.ts | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/adapters/date.adapter.ts b/npm/ng-packs/packages/theme-shared/extensions/src/lib/adapters/date.adapter.ts index 4449bae024..e5846c0ece 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/lib/adapters/date.adapter.ts +++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/adapters/date.adapter.ts @@ -7,9 +7,15 @@ export class DateAdapter extends NgbDateAdapter { fromModel(value: string | Date): NgbDateStruct | null { if (!value) return null; - const date = new Date(value); + let date: Date; - if (isNaN((date as unknown) as number)) return null; + if (typeof value === 'string') { + date = this.dateOf(value); + } else { + date = new Date(value); + } + + if (isNaN(date as unknown as number)) return null; return { day: date.getDate(), @@ -26,4 +32,9 @@ export class DateAdapter extends NgbDateAdapter { return formattedDate; } + + protected dateOf(value: string): Date { + let dateUtc = new Date(Date.parse(value)); + return new Date(dateUtc.getTime() + Math.abs(dateUtc.getTimezoneOffset() * 60000)); + } } From 360937787b33aa31477538f7fc7607c686897a63 Mon Sep 17 00:00:00 2001 From: bnymncoskuner Date: Thu, 5 Aug 2021 07:48:38 -0500 Subject: [PATCH 21/32] fix: linting issue in date-adapter --- .../theme-shared/extensions/src/lib/adapters/date.adapter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/adapters/date.adapter.ts b/npm/ng-packs/packages/theme-shared/extensions/src/lib/adapters/date.adapter.ts index e5846c0ece..17db36415e 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/lib/adapters/date.adapter.ts +++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/adapters/date.adapter.ts @@ -34,7 +34,7 @@ export class DateAdapter extends NgbDateAdapter { } protected dateOf(value: string): Date { - let dateUtc = new Date(Date.parse(value)); + const dateUtc = new Date(Date.parse(value)); return new Date(dateUtc.getTime() + Math.abs(dateUtc.getTimezoneOffset() * 60000)); } } From 0926a87f16e6974e147db2ac4fd1117d85da3c7c Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Fri, 6 Aug 2021 09:21:34 +0800 Subject: [PATCH 22/32] Remove Blazor.Server.Host when no-ui option is specified --- .../ProjectBuilding/Templates/Module/ModuleTemplateBase.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Module/ModuleTemplateBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Module/ModuleTemplateBase.cs index 663d4e9bad..0d6a30719d 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Module/ModuleTemplateBase.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/Module/ModuleTemplateBase.cs @@ -53,6 +53,11 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.Module projectFolderPath: "/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Host" )); + steps.Add(new RemoveProjectFromSolutionStep( + "MyCompanyName.MyProjectName.Blazor.Server.Host", + projectFolderPath: "/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host" + )); + steps.Add(new RemoveProjectFromSolutionStep( "MyCompanyName.MyProjectName.Web.Host", projectFolderPath: "/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host" From dbc718e60d85af03707a4cbda4a7eb322e808b0a Mon Sep 17 00:00:00 2001 From: bnymncoskuner Date: Fri, 6 Aug 2021 08:33:22 +0300 Subject: [PATCH 23/32] fix: hide action column when no action is permitted --- .../extensible-table.component.html | 2 +- .../extensible-table/extensible-table.component.ts | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-table/extensible-table.component.html b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-table/extensible-table.component.html index ebbece2277..29644aa2e2 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-table/extensible-table.component.html +++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-table/extensible-table.component.html @@ -1,6 +1,6 @@ implements OnChanges { readonly trackByFn: TrackByFunction> = (_, item) => item.name; + hasAtLeastOnePermittedAction: boolean; + constructor( @Inject(LOCALE_ID) private locale: string, private config: ConfigStateService, @@ -75,8 +78,14 @@ export class ExtensibleTableComponent implements OnChanges { const extensions = injector.get(ExtensionsService); const name = injector.get(EXTENSIONS_IDENTIFIER); this.propList = extensions.entityProps.get(name).props; - this.actionList = (extensions['entityActions'].get(name) - .actions as unknown) as EntityActionList; + this.actionList = extensions['entityActions'].get(name) + .actions as unknown as EntityActionList; + + const permissionService = injector.get(PermissionService); + this.hasAtLeastOnePermittedAction = + permissionService.filterItemsByPolicy( + this.actionList.toArray().map(action => ({ requiredPolicy: action.permission })), + ).length > 0; this.setColumnWidths(DEFAULT_ACTIONS_COLUMN_WIDTH); } From c688df65f578028d7ab2662ac5d54af0aae0fde8 Mon Sep 17 00:00:00 2001 From: Bunyamin Coskuner Date: Fri, 6 Aug 2021 11:08:30 +0300 Subject: [PATCH 24/32] Update npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-table/extensible-table.component.html MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Muhammed Altuğ --- .../components/extensible-table/extensible-table.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-table/extensible-table.component.html b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-table/extensible-table.component.html index 29644aa2e2..81e2845ac0 100644 --- a/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-table/extensible-table.component.html +++ b/npm/ng-packs/packages/theme-shared/extensions/src/lib/components/extensible-table/extensible-table.component.html @@ -1,6 +1,6 @@ Date: Fri, 6 Aug 2021 18:52:13 +0300 Subject: [PATCH 25/32] fix: DTR in not replacing placeholder from baseUrl --- .../packages/core/src/lib/utils/multi-tenancy-utils.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/core/src/lib/utils/multi-tenancy-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/multi-tenancy-utils.ts index ea2b3d9765..0b755cf9b4 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/multi-tenancy-utils.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/multi-tenancy-utils.ts @@ -46,10 +46,15 @@ export async function parseTenantFromUrl(injector: Injector) { const setEnvironmentWithDomainTenant = (tenant: FindTenantResultDto) => { hideTenantBox(); setDomainTenant(tenant); - replaceTenantNameWithinEnvironment(injector, tenant.name); }; if (tenancyName) { + /** + * We have to replace tenant name within the urls from environment, + * because the code below will make a http request to find information about the domain tenant. + * Before this request takes place, we need to replace placeholders aka "{0}". + */ + replaceTenantNameWithinEnvironment(injector, tenancyName); return multiTenancyService .setTenantByName(tenancyName) .pipe(tap(setEnvironmentWithDomainTenant)) From 1218306f03f73ba938a52e88cac041a1bcef9917 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 9 Aug 2021 14:27:25 +0800 Subject: [PATCH 26/32] Make MongoClientSettings configurable --- .../Volo/Abp/MongoDB/AbpMongoDbContextOptions.cs | 10 +++++++--- .../Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs | 10 ++++++++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbContextOptions.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbContextOptions.cs index aaee9571cd..0cd282ec68 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbContextOptions.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpMongoDbContextOptions.cs @@ -1,5 +1,7 @@ using System; using System.Collections.Generic; +using System.Threading.Tasks; +using MongoDB.Driver; namespace Volo.Abp.MongoDB { @@ -7,11 +9,13 @@ namespace Volo.Abp.MongoDB { internal Dictionary DbContextReplacements { get; } + public Action MongoClientSettingsConfigurer { get; set; } + public AbpMongoDbContextOptions() { DbContextReplacements = new Dictionary(); } - + internal Type GetReplacedTypeOrSelf(Type dbContextType) { var replacementType = dbContextType; @@ -26,7 +30,7 @@ namespace Volo.Abp.MongoDB dbContextType.AssemblyQualifiedName ); } - + replacementType = foundType; } else @@ -36,4 +40,4 @@ namespace Volo.Abp.MongoDB } } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs index 2a3842441f..3e1c450ab6 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs @@ -29,7 +29,7 @@ namespace Volo.Abp.Uow.MongoDB IUnitOfWorkManager unitOfWorkManager, IConnectionStringResolver connectionStringResolver, ICancellationTokenProvider cancellationTokenProvider, - ICurrentTenant currentTenant, + ICurrentTenant currentTenant, IOptions options) { _unitOfWorkManager = unitOfWorkManager; @@ -124,7 +124,10 @@ namespace Volo.Abp.Uow.MongoDB private TMongoDbContext CreateDbContext(IUnitOfWork unitOfWork, MongoUrl mongoUrl, string databaseName) { - var client = new MongoClient(mongoUrl); + var mongoClientSettings = MongoClientSettings.FromUrl(mongoUrl); + _options.MongoClientSettingsConfigurer?.Invoke(mongoClientSettings); + + var client = new MongoClient(mongoClientSettings); var database = client.GetDatabase(databaseName); if (unitOfWork.Options.IsTransactional) @@ -144,6 +147,9 @@ namespace Volo.Abp.Uow.MongoDB string databaseName, CancellationToken cancellationToken = default) { + var mongoClientSettings = MongoClientSettings.FromUrl(mongoUrl); + _options.MongoClientSettingsConfigurer?.Invoke(mongoClientSettings); + var client = new MongoClient(mongoUrl); var database = client.GetDatabase(databaseName); From 28e1b64537bd6b511d0afceadd78cdeb010a5179 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 9 Aug 2021 14:41:23 +0800 Subject: [PATCH 27/32] Update UnitOfWorkMongoDbContextProvider.cs --- .../UnitOfWorkMongoDbContextProvider.cs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs index 3e1c450ab6..dd32ada275 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs @@ -124,10 +124,7 @@ namespace Volo.Abp.Uow.MongoDB private TMongoDbContext CreateDbContext(IUnitOfWork unitOfWork, MongoUrl mongoUrl, string databaseName) { - var mongoClientSettings = MongoClientSettings.FromUrl(mongoUrl); - _options.MongoClientSettingsConfigurer?.Invoke(mongoClientSettings); - - var client = new MongoClient(mongoClientSettings); + var client = CreateMongoClient(mongoUrl); var database = client.GetDatabase(databaseName); if (unitOfWork.Options.IsTransactional) @@ -147,10 +144,7 @@ namespace Volo.Abp.Uow.MongoDB string databaseName, CancellationToken cancellationToken = default) { - var mongoClientSettings = MongoClientSettings.FromUrl(mongoUrl); - _options.MongoClientSettingsConfigurer?.Invoke(mongoClientSettings); - - var client = new MongoClient(mongoUrl); + var client = CreateMongoClient(mongoUrl); var database = client.GetDatabase(databaseName); if (unitOfWork.Options.IsTransactional) @@ -279,6 +273,14 @@ namespace Volo.Abp.Uow.MongoDB return _connectionStringResolver.Resolve(dbContextType); } + private MongoClient CreateMongoClient(MongoUrl mongoUrl) + { + var mongoClientSettings = MongoClientSettings.FromUrl(mongoUrl); + _options.MongoClientSettingsConfigurer?.Invoke(mongoClientSettings); + + return new MongoClient(mongoUrl); + } + protected virtual CancellationToken GetCancellationToken(CancellationToken preferredValue = default) { return _cancellationTokenProvider.FallbackToProvider(preferredValue); From 2dfe6ead7f310791562d463ef8905022b9ca7f85 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Mon, 9 Aug 2021 14:42:00 +0800 Subject: [PATCH 28/32] Update UnitOfWorkMongoDbContextProvider.cs --- .../Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs index dd32ada275..671a676726 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Uow/MongoDB/UnitOfWorkMongoDbContextProvider.cs @@ -278,7 +278,7 @@ namespace Volo.Abp.Uow.MongoDB var mongoClientSettings = MongoClientSettings.FromUrl(mongoUrl); _options.MongoClientSettingsConfigurer?.Invoke(mongoClientSettings); - return new MongoClient(mongoUrl); + return new MongoClient(mongoClientSettings); } protected virtual CancellationToken GetCancellationToken(CancellationToken preferredValue = default) From 33934cc0dfad54b097b110d48cd923b93a1cf90a Mon Sep 17 00:00:00 2001 From: Berkan Sasmaz Date: Mon, 9 Aug 2021 17:50:49 +0300 Subject: [PATCH 29/32] Update en.json --- .../Commercial/Localization/Resources/en.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index 04da7d097d..bd2620b9bf 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -358,6 +358,11 @@ "WeWillSendYouADownloadLink": "A link to download the e-book has been sent to {0}.
Check your inbox / junk / spam boxes!", "InvalidFormInputs": "Please, type the valid information specified on the form.", "DDDBookEmailBody": "Thank you.
To download your book, click here.", - "FreeDDDEBook": "Free DDD E-Book" + "FreeDDDEBook": "Free DDD E-Book", + "SaveAndDownload": "Save And Download", + "CompanyNameValidationMessage": "Company Name is too long.", + "AddressValidationMessage": "Address is too long.", + "TaxNoValidationMessage": "TAX/VAT No is too long.", + "NotesValidationMessage": "Too many characters." } } From 911e9a773da70de40f9d735c69544ce38463f05d Mon Sep 17 00:00:00 2001 From: Berkan Sasmaz Date: Mon, 9 Aug 2021 18:00:03 +0300 Subject: [PATCH 30/32] Update en.json --- .../Commercial/Localization/Resources/en.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index bd2620b9bf..1e87f281bc 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -363,6 +363,7 @@ "CompanyNameValidationMessage": "Company Name is too long.", "AddressValidationMessage": "Address is too long.", "TaxNoValidationMessage": "TAX/VAT No is too long.", - "NotesValidationMessage": "Too many characters." + "NotesValidationMessage": "Too many characters.", + "CheckYourBillingInfo": "Check your billing info before creating your invoice. You can create your invoice only once!" } } From f42e24f65bc884c80734867aab985589a1239798 Mon Sep 17 00:00:00 2001 From: bnymncoskuner Date: Tue, 10 Aug 2021 11:08:08 +0300 Subject: [PATCH 31/32] add the blogpost about lepton-x alpha release --- .../2021-07-28-lepton-x-release/POST.md | 213 ++++++++++++++++++ .../lepton-x-lite-dashboard.png | Bin 0 -> 158864 bytes .../lepton-x-lite-menu-collapsed.png | Bin 0 -> 156168 bytes 3 files changed, 213 insertions(+) create mode 100644 docs/en/Blog-Posts/2021-07-28-lepton-x-release/POST.md create mode 100644 docs/en/Blog-Posts/2021-07-28-lepton-x-release/lepton-x-lite-dashboard.png create mode 100644 docs/en/Blog-Posts/2021-07-28-lepton-x-release/lepton-x-lite-menu-collapsed.png diff --git a/docs/en/Blog-Posts/2021-07-28-lepton-x-release/POST.md b/docs/en/Blog-Posts/2021-07-28-lepton-x-release/POST.md new file mode 100644 index 0000000000..1535d4f0cd --- /dev/null +++ b/docs/en/Blog-Posts/2021-07-28-lepton-x-release/POST.md @@ -0,0 +1,213 @@ +# LeptonX Alpha Release + +We are excited to announce that the alpha version of LeptonX 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-related packages. So, if you are already using the ABP Framework and Angular as the frontend choice, you can integrate these packages into your project with ease. + +As we have announced in the blogpost, open-source ABP users will get to replace `ThemeBasic` with `LeptonX-lite`. + +## Open-Source + +To add `LeptonX-lite` into your project, + +* Install `@abp/ng.theme.lepton-x` + +`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` 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: [ + // ... + + // do not forget to remove ThemeBasicModule + // ThemeBasicModule.forRoot(), + 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. + +![LeptonX-lite dashboard](./lepton-x-lite-dashboard.png) + +![LeptonX-lite menu collapsed](./lepton-x-lite-menu-collapsed.png) + +## Commercial + +To add `LeptonX` into your existing projects, + +* Firstly, install `@volosoft/abp.ng.theme.lepton-x` + +`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` 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: [ + // ... + // ThemeLeptonModule.forRoot(), + 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. + +Please, keep in mind that this is an alpha version, and we will continue to work on `LeptonX`. 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{at}volosoft{dot}com and/or https://github.com/volosoft/lepton-theme \ No newline at end of file diff --git a/docs/en/Blog-Posts/2021-07-28-lepton-x-release/lepton-x-lite-dashboard.png b/docs/en/Blog-Posts/2021-07-28-lepton-x-release/lepton-x-lite-dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..6c1ed170fcf6044aac1f461760dcc3c668b7b27a GIT binary patch literal 158864 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%0A<~hohr>sbLdLD3hb3O?X=B{hc^TqmZ`HW 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≈q(ewqFggL ze5jlr$~DFCLA9-KZTj%GZ$KI&bXzT;#%!$@Db15Qq=5#Ap3ZTUYb?qdX2Nl4pAhW& zEmxi6Y?q34BPXFn2E6hrm84klfRLy;8m~p4TwZr+I#jm2f0sIb4zG&#W^_$ppRR%W zl!av;Eq#B>>(GYcRN#{+Ozb&z@){kM#5y5GNvR(u3;Z79Fxt+wK`(#LE?Gcri9t4c zEO`LtW4#nU!(~7=$Q={Qw{-{sHE4H%#1~J2Zpw86Dm8h0De$uySLVK=c1$cAr;vsh zlZI}Q)BJKN1BdKlg?i-DeP^^O=Tc^GzFUH9?H5s-%?FcW8N6j$nDYGwo-08H)#M<; zy?PwL9+u-?4kNVBpa~k|%oHbfj?UrMRZF?>%l0^7_ZkuMyOiF zk;V{>di$|_*@K!H{E#@_&<6WFWf5SfZ(&r15A8P2r`TdtayEba(W--4*Yjs@u)J!6 z1*RCAwH@tiivAj^O?8b*iU&N45ukuX&Xj?&o%l+QRLsj71yu@5Yn6T4&QH5p64hqlS@^0NNQ_TJ55}|NTcD^#o zTAcej#Zc8M72r4m?WgFNxhMIF7#<-N@v2(vFW(r;Rt-vby^)}rP?_4nK1fVi>-y^N zBBZS*t>~ZZVOxpIv>owiyv(6k>`*^`_}b>i&;ayCD*Upl0?@!rMxG_v=h>$OTg%ip zPUPdG{(U4R*Op*U?>@o$pbj`-Tk0I_l-Bm;ty}MI?+aPJarH3IYiZjmDDi~UY-NdL z+q08Zt3y6t7L;}K9q+`K-Dwp?W+LrHLmsbLa;d}Yg~6O3tWmCAF7gV?<7ikhyeKuS zgFTw>MmYkRqkn}{bDGZ$L3{)WmkfB@+(1=aKBtj5HZ@mP#iw#k&|C;zmKx9M&(S%cf@f^I8-C=&z@zRm&*D_e?GEq~zJR|_DIx4~&| zqqWZ6JdOLlk6bN3bwMz`Q*b@U(bS%FHBZ3DH8f#lcqfb6qKO&% z1|^j3|5#V-l~O(wGBL>GxVAm^8NU`I={++z5HPdg?s?^*@#8QV5MfrTl_m82me6gn zUAyJ6E~~JBY{Z?zsYHDiiq45`yM^*M>Mot%cCFu!D}SM;K2MP!slOE~ZkAJ};W(US z?Up;<+S=_Zs@Qk@StV!CPGpM4#J9FCzu9GN$s^W

$j1y$30gA!UQn;6}(mwx&nF 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%0D~d3fa1VwZY{h89cg_ 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 z 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 JW#T4Z{vXnb27dqm literal 0 HcmV?d00001 From e8259cab175ad854bb658625d14dfe88008f10f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 10 Aug 2021 14:19:34 +0300 Subject: [PATCH 32/32] Update POST.md --- .../2021-07-28-lepton-x-release/POST.md | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/docs/en/Blog-Posts/2021-07-28-lepton-x-release/POST.md b/docs/en/Blog-Posts/2021-07-28-lepton-x-release/POST.md index 1535d4f0cd..179b3326cd 100644 --- a/docs/en/Blog-Posts/2021-07-28-lepton-x-release/POST.md +++ b/docs/en/Blog-Posts/2021-07-28-lepton-x-release/POST.md @@ -1,14 +1,18 @@ # LeptonX Alpha Release -We are excited to announce that the alpha version of LeptonX 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-related packages. So, if you are already using the ABP Framework and Angular as the frontend choice, you can integrate these packages into your project with ease. +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. -As we have announced in the blogpost, open-source ABP users will get to replace `ThemeBasic` with `LeptonX-lite`. +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` +* Install `@abp/ng.theme.lepton-x` NPM package `npm install @abp/ng.theme.lepton-x@preview` or @@ -88,11 +92,13 @@ To change the logos and brand color of the `LeptonX`, simply add the following C ![LeptonX-lite menu collapsed](./lepton-x-lite-menu-collapsed.png) -## Commercial +## 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` +* Firstly, install `@volosoft/abp.ng.theme.lepton-x` NPM package `npm install @volosoft/abp.ng.theme.lepton-x@preview` or @@ -183,7 +189,6 @@ export class AppModule {} * 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 { @@ -208,6 +213,8 @@ export class AppModule {} 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. -Please, keep in mind that this is an alpha version, and we will continue to work on `LeptonX`. The APIs are bound to change, and breaking changes may be introduced in future versions. +## Conclusion + +In this blog post, I've explained how to use the alpha version of the new LeptonX theme for ABP-based solution.s 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{at}volosoft{dot}com and/or https://github.com/volosoft/lepton-theme \ No newline at end of file +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 \ No newline at end of file